24 junho, 2015

Métricas e Estimativas de Projetos

Métricas, Estimativas e Modelos de software 

Qualidade

A avaliação da qualidade está relacionada a uma série de características intrínsecas do produto, ex.,
  • Quantidade de bugs
  • Conformidade com requisitos
  • Desempenho
  • Indicador de qualidade


Métrica

É a medição de atributos de um processo, projeto, etc. É também uma relação entre medidas.

Atividades de medição e análise são importantes para:

  • Caracterizar ou permitir entender processos, produtos, recursos e ambiente.
  • Avaliar para determinar o status do projeto, com respeito aos planos feitos
  • Predizer valores observados possam ser utilizados para predizer outros
  • Melhorar, identificando causas de problemas e ineficiências e oportunidades de melhoria

Escalas de mensuração

  • Nominal: escala inicial, baseada em uma avaliação nominal
  • Ordinal: baseada numa ordem pre-estabelecida. Ex prioridade mínima, média, max.
  • Intervalar: baseada em intervalos. Ex temperatura
  • Razão: existe uma relação natural entre os valores. Ex: Salário
  • Nas métricas de software serão usadas basicamente as escalas de razão e ordinal

Algumas métricas conhecidas no desenvolvimento de software:

  • Números de linhas de código 
  • Número de pessoas para implementar um caso de uso
  • Número de defeitos encontrados num produto
  • Esforço necessário para realizar uma tarefa/projeto
  • Tempo necessário para realizar uma tarefa/projeto
  • Custo necessário para realizar uma tarefa/projeto
  • Grau de satisfação do cliente

Objetivos

  • Melhorar a previsibilidade e a chance de sucesso no projeto.
  • Permitir melhor gerenciamento do projeto
  • Reduzir pressões sobre cronogramas
  • Apoiar decisões make or buy fazer/comprar
  • Indicar a qualidade de um produto de software
  • Avaliar benefícios
  • Avaliar ROI

Características de uma boa métrica

  • Facilmente calculada, entendida e testada
  • Pode ser automatizável
  • Deve ser útil para de estudos estatísticos
  • Deve ser repetível, objetiva
  • Capaz de indicar um caminho de melhoria

Classificação

  • Métricas Diretas
    • É aquela que é realizada em termos atributos observáveis. Números de linhas, número de erros, etc
  • Métricas Indiretas
    • São baseadas em medidas diretas. Ex. facilidade de manutenção, produtividade, esforço, tamanho baseado em funcionalidade. Não são observáveis diretamente.
  • Métricas orientadas a tamanho
    • São aquelas aplicáveis a contagem de tamanho de artefatos de software. Ex.: KLOC, número da páginas de documentação.
  • Métricas orientadas à função
    • Se baseia em métodos para medição de software do ponto de vista do usuário. Ex. Ponto de função, ponto de caso de uso, etc.

Análise de Pontos de Função (APF)


Consiste na contagem das funções que caracterizam um sistema, sob o ponto de vista do que ele faz para o usuário.
  • Mede a funcionalidade entregue ao cliente (métrica indireta)
  • Utiliza um método padronizado internacionalmente
  • Pode ser usada tanto no início, no meio ou no final do projeto de software
  • Útil para medição de produtos novos ou existentes, em evolução
  • É baseado em função de dois tipos. 
    • Dado: relacionam-se ao modelo de dados. Dividem-se em Arquivos Lógicos Internos (ALI) e Arquivos de Interface Externa (AIE)
    • Transação: estão relacionadas "as transações realizadas no escopo da aplicação. Geralmente são captadas por meio de casos de uso. Dividem-se em Entradas Externas (EE), Saídas Externas (SE) e Consultas Externas CE).
  • É uma métrica indireta e funcional.

O que deve ser contado num produto, segundo a APF?

  1. Entradas: transações que alteram o estado do sistema. Ex: CRUD
  2. Saídas: transações que enviam dados para fora do sistema. Ex: Arquivos de interface
  3. Consultas: transações de consulta a bases de dados
  4. Arquivos Lógicos Internos: arquivos mantidos pelo sistema
  5. Arquivos de Interface Externa: arquivos externos que não são mantidos pela aplicação

Tipo de Contagem de PF

  • Contagem Indicativa: feita no momento inicial do projeto com um modelo preliminar dos dados.
  • Contagem Estimada: realizada quando se possui detalhes suficientes para fazer uma estimativa melhor. Quando se tem um modelo de funções básicas.
  • Contagem Detalhada: bastante confiável, realizada quando se tem informações completas sobres as funções e dados.

Etapas do processo de contagem de pontos de função

  1. Identificação das funções do sistema
  2. Classificação de cada função de acordo com sua complexidade funcional
  3. Cálculo dos pontos de função brutos através de pesos de acordo com uma tabela
  4. Avaliação das 14 "características gerais" do sistema
  5. Determinação do fator de ajuste (específico do projeto)
  6. Cálculo dos pontos de função ajustados

Contagem por pontos de função

É feito por 5 etapas.
  • Entradas
    • São elementos que vão alterar algum estado dos dados na aplicação
  • Saídas
    • São funcionalidades que provem a troca de dados na saída de dados
  • Arquivos lógicos internos
    • São arquivos que armazenam informações da aplicação internamente
  • Arquivos de interface externo
    • São arquivos de outras aplicações que são apenas acessados
  • Consulta
    • Trazem dados que estão armazenados mediante uma seleção desses dados

Transações podem ser

  • Entrada 
  • Saída 
  • Consulta

A produtividade de uma equipe pode ser determinada com a quantidade de horas gastas para disponibilizar uma quantidade de pontos de função.
Produtividade = Tamanho do Produto / Esforço
Obs.: Tamanho do Produto pode ser em diversas unidades, como PF/HH, PF/PM.
Esforço = Pessoas x Tempo
Prdutividade média é baseada em dados históricos, com a fórmula:
Qtd. Pessoas = Tamanho / (Produtividade x Tempo)

Itens de influência (Fatores de Ajuste)

  1. Teleprocessamento
  2. Processamento Distribuído
  3. Performance
  4. Carga de Máquina
  5. Volume de Transações
  6. Entradas de dados online
  7. Atualizações online
  8. Eficiência do usuário final
  9. Complexiadade do processamento
  10. Reutilização de código
  11. Facilidade de implantação
  12. Facilidade de operação
  13. Facilidade de manutenção/alterações
  14. Operação em múltiplos locais

Etapas para o cálculo da produtividade

  • Medição do tamanho em pontos de função
  • Registros históricos para determinar o escopo (medido em homens x hora)
  • Calcular a produtividade obtida - Horas/PF ou PF/HH
  • Estabelecer as produtividades médias para os diversos ambientes de desenvolvimento e tipos de projeto

Fatores que influênciam na produtividade de um projeto

  • Inexperiência da equipe
  • Gerenciamento ineficiente do projeto
  • Requisitos instáveis
  • Falta de metodologia 
  • Tamanho do projeto

Métodos de estimativas empíricos

  • Estimativa Ad-hoc
    • Estimativa isolada. Projeto não está conectado a uma outra situação conhecida.
  • Estimativa gerencial
    • Gerente estima o prazo. Problema de prazo sub-dimensionado.
  • Métodos ágeis
    • planning poker, etc
  • De equipe
    • a própria equipe estima o trabalho
    • Pode ser feita utilizando uma técnica chamada Delphi: cada pessoa faz uma contagem e depois tenta-se convergir os valores

Reflexões sobre estimativas de software

  • Métricas são falíveis
    • Mesmo assim é melhor ter métricas do que planejar no escuro
  • Utilizar faixas de tolerância é uma recomendação
  • Não se consegue boas estimativas no início do projeto
    • Mesmo assim uma estimativa inicial deve ser feita
  • Uma base histórica é o que faz a diferença para uma boa estimativa

Outras métricas

  • COCOMO II
    • Bom para estimar custo. Difícil de ser usado.
  • Pontos de Caso de Uso
    • Derivada dos pontos de função, mas usa atores e casos de uso.
  • Pontos de histórias de usuário
    • aplicada em histórias de usuário dos métodos ágeis
  • COSMIC
    • Nova geração de métricas. Não estabelece limites para medição de uma função. Mede não somente a camada da aplicação mas a infraestrutura.
    • Deve ser aplicado quando há muita variação de escopo
    • Deve ser aplicado com muitos pontos de função
    • Propicia o aumento da previsibilidade e menor variabilidade na relação entre o tamanho, custo e esforço.
















15 junho, 2015

Princípios da Gerência de Projetos

Parte I


Separação entre os sistemas de produção existentes
  1. Produção contínua: grande quantidade de produtos gerados (automoveis)
  2. Produção por lote ou encomenda: menos produtos (fast food)
  3. Produção por projeto: são feitos um a um e cada projeto tem seu resultado específico. (desenvolvimento de software, construção civil, etc)

4 P's

Elementos gerais que caracterizam a engenharia de software
  • Pessoas: produzem
  • Produtos: produtos inciais, intermediários e finais do projeto
  • Processos: forma de produzir
  • Projetos: instanciação de um projeto

Projeto

PMBOK define projeto como sendo um
Esforço temporário empreendido para criar um produto, serviço ou resultado exclusivo.

VARGAS define como
Um empreedimento não repetitivo, caracterizado por uma sequência clara e lógica de eventos, com início, meio e fim, que se destina a atingir um objetivo claro e definido, sendo conduzido por pessoas dentro de parâmetros predefinidos de tempo, custo, recursos envolvidos e qualidade."

Exemplos de projeto
  • Pirâmides do Egito
  • Reconstrução de um país pós guerra
  • Construção de um navio
  • Informatização de uma empresa
  • Turnê de uma banda
Principais atributos de um projeto
  • Meta única
  • Recursos humanos
  • Escopo bem definido
  • Início e fim determinados
  • Tarefas bem definidas
  • Intervenção humana indispensável
  • Grupos de interesse envolvidos
  • Recursos limitados
  • Planejamento individualizado
  • Execução controlada
  • Normalmente é inovador
  • Objetivos envolvem: prazo, custo, qualidade (pontos críticos)

Conceitos relacionados a projetos
  • Empreendimento: sinônimo de projeto
  • Programa: conjunto de projetos (ex. Programa de Aceleração do Crescimento)

Porque os projetos falham?

  • Pessoas falham
  • Falta de planejamento adequado
  • Pressão excessiva de prazo e custo
  • Falta de suporte ao gerente de projeto
  • Equipe despreparada
  • Comunicação

Separação de conceitos entre o que é projeto


Projetos são feitos onde e quando?
Exemplos de projetos 
  • Desenvolvimento de software
  • Manutenção de software (fazer um módulo novo)
  • Aquisição de novos servidores
  • Criação de rede local
  • Customização de um aplicativo
  • Prospecção de ferramentas
  • Integração entre sistemas

Quando não se faz projetos?


Quando há rotinas. É Focada em resultados rápidos. As atividades são mais operacionais.

Exemplos
  • Manutenção periódica ou corretiva
  • Serviços de operação de servidores
  • Serviços de helpdesk
  • Atualização de versão de aplicativo
  • Vendas da empresa estão paradas
  • Banco de dados apresentando problemas

Parte II

PMBOK

Definição clássica de gerência de projetos:
Aplicação de conhecimentos, habilidades e técnicas para projetar atividades que visem atingir os requisistos do projeto

4 funções que todo gerente de projetos deve executar diariamente

  • Planejamento: estabelecer metas, linhas de ação a ser seguidas
  • Organização: combinar, juntar recursos Ex. organizar processo produtivo
  • Direção: estabelecer um ponto onde se quer chegar. Transformar planos em atividades.
  • Controle: acompanhamento do projeto.

Questões fundamentais sobre projetos

  • Métrica
  • Recursos limitados
  • Qualidade
  • Conjunto de resultados esperados
  • Interface (com pessoas, outras áreas, fornecedores, clientes, etc)

Processos e artefatos

  • Cronograma físico: planilha que representa o desenvolvimento do projeto temporalmente
  • Cronograma financeiro: deve estar sempre atrelado ao cronograma físico. Como os investimentos serão distribuidos no projeto.
  • Análise de riscos envolvidos (viabilidade): tem como resultado uma lista de riscos.
  • Estudo de interfaces: como tratar as interfaces do projeto de maneira preventiva, corretiva e pró-ativa
  • Análise de custo-benefício: verificar a viabilidade do projeto.
  • Prioridade do projeto: prioridades do projeto e tarefas.
  • Plano de Projeto: doc. contendo todos os dados gerenciais relevantes.
  • Gerenciamento de tempo do projeto
    • Ciclo de vida: importante definir um ciclo de vida para o projeto
    • Fase: subdivisão do ciclo de vida
    • Tarefa: menor que uma fase. Pode ser em partes menores chamadas sub-tarefas
    • Pacote de trabalho: menor unidade de um projeto. É em que uma pessoa vai trabalhar
    • Duração: todo projeto tem uma duração. Ao final do projeto se faz uma comparação entre a duração estimada e a real para saber sobre o sucesso do projeto.
    • Precedência: determina a duração de uma tarefa. Pode ser inicio-incio, termino-inicio (espera uma tarefa terminar para começar outra), etc. 

Três questões básicas

  1. As partes interessadas no projeto (stakeholders)
  2. Aprender com o passado
  3. Lei de Murphy (riscos)

PMBOK caracteriza um projeto como um conjunto de processos, que são agrupados em 5 grupos:

Visão de grupos de processos

  • Iniciação: conjunto de atividades para definir o que deve ser feito
  • Planejamento: atividade que envolve a determinação de como será feito. Definir um orçamento, conjunto de tarefas a serem feitas
  • Execução: executar as atividades.
  • Finalização: conjunto de tarefas que se encerra o projeto. Fazer um balanço, quais os ganhos e quais as perdas.
  • Monitoramento e controle: atividade constante realizada pelo gerente de projeto.

Áreas de conhecimento do PMBOK (tópicos de conhecimento)

  • Integração: cuida de interfaces (outros projetos, stakeholders, etc)
  • Escopo: se preocupa a atender aquilo que o projeto se propõe a fazer
  • Tempo: prazos para execução de um projeto
  • Custo: trata da parte financeira do projeto
  • Qualidade: cuida do que está sendo produzido
  • Recursos Humanos: bom gerenciamento das pessoas
  • Comunicação: informações do projeto
  • Risco: identifica e trata riscos
  • Aquisição: aquisições de um projeto
  • Stakeholders: gerenciar os envolvidos no projeto

O que o PMBOK não é:

  • Uma metodologia
  • A verdade absoluta e imutável
  • A única fonte de consulta de um gerente de projeto

14 junho, 2015

Padrões de Projeto

Privilegia principalmente a reutilização

Padrão de projeto é uma solução padronizada para um problema que se repete muitas vezes dentro de um determinado contexto.

Padrões de criação

Diz respeito a padronizar a forma como os objetos são criados, compostos e representados.

Abstract Factory

Prover uma interface para criação de famílias de objetos relacionados ou independentes sem que se especifiquem suas classes concretas.

Factory Method

São métodos que retornam um novo objeto

Singleton

Obter somente uma instância de um objeto na aplicação.

Prototype

Quero que, dados dois objetos, eles sejam idênticos, mas não sejam a mesma instância.
a1 = a2 não funciona porque eles viram a mesma instância.
O Java já possui o método clone() que faz isso.


Padrões Estruturais

Estão relacionados a como classes e objetos são compostos de forma a gerar estruturas maiores e mais complexas.

Adapter

Com o adapter é possível por exemplo, trocar de uma biblioteca gráfica por outra sem grande impacto na aplicação.
Definir uma interface que a aplicação (cliente) vai usar, implementar essa interface e dentro da implementação chamar os métodos da biblioteca gráfica. Ex. adaptada.desenharBotao();

Flyweight

Dado um conjunto de pequenos objetos que possuem um atributo em comum, se cria apenas um objeto e todos os pequenos objetos apontam para o mesmo, economizando espaço em memória.

Proxy

Proxy representa uma visão diferente do objeto em questão. Por exemplo, um objeto representa uma imagem de satélite com alta resolução, cria-se o proxy desse objeto com a imagem de baixa resolução e posso manipular os dois da mesma forma, só que um é mais leve.

Façade

Dado que a aplicação precisa chamar a mesma sequencia de métodos em diversos locais diferentes, cria-se um Façade que faz essas chamas para aplicação e a aplicação só chama o Façade.

Composite

Representa estrutura de árvore. Um objeto pode ter nós que são da mesma interface Composite ou então ser uma folha.


Padrões Comportamentais


Estão relacionados ao comportamento dos objetos


Chain of Responsability


Uma vez que existe uma cadeia de objetos, e é necessário ser enviado uma mensagem para um desses objetos. Esses objetos vão encaminhando para o próximo objeto da sequência até que um objeto identifique que a mensagem é pra ele. É uma lista encadeada.











03 junho, 2015

Arquitetura Orientada ao Modelo (Model Driven Architecture-MDA)

Arquitetura Orientada Ao Modelo


  • Foi um paradigma criado pelo OMG em 2000
  • Ciclo de vida é semelhante ao tradicional, cria-se os mesmos modelos das abordagens tradicionais.
  • A ideia é iniciar um projeto de modelagem que vai ser num primeiro momento independente de plataforma, chamado:
    • PIM - Platform Independent Model
    • Logo depois, 
    • PSM - Platform Specific Model
    • E depois será convertido em código fonte.

Dentro do conceito de MDA, surge também o MOF - Meta Object Facility, que é uma instância do conceito de MDA.
MOF define uma linguagem abstrata e um framework para especificação, construção e gerenciamento de metamodelo. A UML implementa o MOF.

Tabela do MOF

  • M3 - Nível mais alto de abstração. É a especificação de conceitos do modelo MOF
  • M2 - Nível de implementação de linguagens como UML
  • M1 - Mais comum. Onde os modelos são criados. 
  • M0 - Nível das instancias que são criadas a partir desse modelo. Se temos uma tabela Produto, o nível M0 seria os registros dessa tabela.

XMI é uma especificação genérica que é possível exportar diagramas entre softwares diferentes (Argo e Rational)


EMF - Eclipse Modeling Framework

  • É um framework que é utilizado para geração de aplicações dentro do conceito de MDA.
  • Base para trabalhar com EMF é um doc XMI, Rational, java anotado, etc.
  • É semelhante ao MOF mas definição é chamada "EMOF".
Constituído de dois frameworks fundamentais:

  • Core Framework: suporte para criação de classes de implementação
  • EMF.edit: suporte para edição do modelo