-
As métricas devem ser simples, objetivas, fáceis de coletar, fáceis de interpretar e difíceis de interpretar
incorretamente.
-
A coleta das métricas deve ser automatizada e não-intrusiva, ou seja, não deve interferir nas atividades dos
desenvolvedores.
-
As métricas devem contribuir para a avaliação da qualidade no início do ciclo de vida, quando os esforços para
melhorar a qualidade do software são eficazes.
-
Tendências e valores absolutos de métricas devem ser usados ativamente pelas equipes de gerenciamento e de
engenharia para informar o andamento e a qualidade em um formato consistente.
-
A seleção de um conjunto mínimo ou mais extenso de métricas dependerá das características e do contexto do projeto:
se ele for grande ou tiver requisitos rigorosos de confiabilidade ou segurança e as equipes de desenvolvimento e de
avaliação tiverem um ótimo conhecimento sobre métricas, talvez seja útil coletar e analisar as métricas técnicas. O
contrato pode exigir que determinadas métricas sejam coletadas ou a organização pode estar tentando aperfeiçoar
habilidades e processos em áreas específicas. Não há uma resposta simples que se adapte a todas as circunstâncias.
O Gerente de Projeto deve selecionar o que é apropriado quando o Plano de Métricas for produzido. No entanto,
quando você apresentar um plano de métricas pela primeira vez, convém manter a simplicidade, em vez de se arriscar
e cometer erros.
As métricas para determinados aspectos do projeto incluem:
-
Andamento em termos de tamanho e complexidade.
-
Estabilidade em termos de taxa de mudança nos requisitos ou implementação, tamanho ou complexidade.
-
Modularidade em termos do escopo de mudança.
-
Qualidade em termos da quantidade e do tipo de erros.
-
Maturidade em termos da freqüência de erros.
-
Recursos em termos de despesas do projeto versus despesas planejadas
As tendências são importantes e de alguma forma mais importantes de serem monitoradas do que qualquer valor
absoluto no tempo.
Métrica
|
Finalidade
|
Medidas/Perspectivas de Amostra
|
Progresso
|
Planejamento de iteração
Integralidade
|
-
Número de classes
-
SLOC
-
Pontos de função
-
Cenários
-
Casos de teste
Essas medidas também podem ser coletadas por classe e por pacote
-
Quantidade de retrabalho por iteração (número de classes)
|
Estabilidade
|
Convergência
|
-
Número e tipo de mudanças (erro versus melhoria; interface versus implementação)
Essa medida também pode ser coletada por iteração e por pacote
-
Quantidade de retrabalho por iteração
|
Adaptabilidade
|
Convergência
"Retrabalho" de software
|
-
Média de pessoa-horas/mudança
Essa medida também pode ser coletada por iteração e por pacote
|
Modularidade
|
Convergência
"Scrap" de software
|
-
Número de classes/categorias modificadas por mudança
Essa medida também pode ser coletada por iteração
|
Qualidade
|
Planejamento de iteração
Indicador de retrabalho
Critério de liberação
|
-
Número de erros
-
Taxa de detecção de defeitos
-
Densidade de defeitos
-
Profundidade da herança
-
Acoplamento de classes
-
Tamanho da interface (número de operações)
-
Número de métodos substituídos
-
Tamanho do método
Essas medidas também podem ser coletadas por classe e por pacote
|
Maturidade
|
Cobertura/adequação de teste
Resistência a uso
|
-
Falha/horas de teste e tipo de falha
Essa medida também pode ser coletada por iteração e por pacote
|
Perfil de despesas
|
Visão financeira
Planejado versus real
|
-
Pessoa-dias/classe
-
Equipe em tempo integral por mês
-
Porcentagem do orçamento já gasta
|
Até mesmo os projetos menores devem controlar o andamento para verificar se estão dentro do cronograma e do orçamento
e, caso não estejam, para refazer a estimativa e determinar se serão necessárias mudanças no escopo. O foco deste
conjunto mínimo de métricas estará, portanto, nas métricas de progresso.
-
Valor Atribuído. É usado para refazer a estimativa da programação e do orçamento para o restante do projeto e/ou
para identificar a necessidade de mudanças no escopo.
-
Tendências de Defeitos. São usadas para ajudar a projetar o esforço necessário para eliminar defeitos.
-
Tendência de Andamento de Teste. É usada para determinar quanto da funcionalidade está realmente concluído.
Essas métricas são descritas a seguir mais detalhadamente.
Valor Agregado
O método normalmente mais utilizado ([PMI96])
para medir o progresso é a Análise de Valor Agregado.
A forma mais simples de medir o valor agregado é somar o esforço estimado original de todas as tarefas concluídas. Um
"percentual de conclusão" do projeto pode ser calculado como o valor agregado, dividido pelo total de esforço estimado
original do projeto. A produtividade (ou Índice de Desempenho) é o valor agregado dividido pelo esforço real empregado
nas tarefas concluídas.
Por exemplo, suponha que o esforço de codificação tenha sido dividido em diversas tarefas, muitas das quais já estão
concluídas. A estimativa original para as tarefas concluídas era 30 dias de esforço. O esforço estimado total para o
projeto era 100 dias. Assim, podemos estimar que aproximadamente 30% do projeto estão concluídos.
Suponha que as tarefas tenham sido concluídas abaixo do orçamento - faltando apenas 25 dias para sua conclusão. O
Índice de Desempenho é 30 / 25 = 1,2 ou 120%.
Podemos estimar que o projeto será concluído com uma insuficiência de 20% no orçamento e reduzir nossas estimativas de
acordo.
Considerações
-
O Índice de Desempenho deve ser usado apenas para ajustar estimativas de tarefas semelhantes. A conclusão
antecipada de tarefas de obtenção de requisitos não sugere que a codificação será concluída com mais rapidez. Dessa
forma, calcule o Índice de Desempenho apenas para tipos parecidos de tarefas e ajuste estimativas somente de
tarefas semelhantes.
-
Considere outros fatores. As tarefas futuras serão realizadas por equipes com a mesma qualificação e nas mesmas
condições? Os dados foram contaminados por "desvios" - tarefas cuja estimativa foi calculada extremamente maior ou
menor? O tempo está sendo relatado de forma consistente (por exemplo, as horas extras serão incluídas mesmo se não
forem pagas)?
-
As estimativas para tarefas mais novas já estão considerando o Índice de Desempenho? Se estiverem, é provável que
as estimativas para novas tarefas se aproximem mais do objetivo, fazendo com que o índice de desempenho chegue a
quase 100%. Você deverá refazer a estimativa de todas as tarefas incompletas de forma consistente ou adotar a
prática de XP (Extreme Programming)[JEF01]
- refira-se às estimativas originais como "pontos" e meça as novas tarefas em relação a esses mesmos "pontos", sem
ajustar ao desempenho real. A vantagem de "pontos" é que aumentos (ou reduções) no desempenho podem ser ser
monitorados ("velocidade do projeto" na terminologia XP).
Se as tarefas forem extensas (mais do que cinco dias) ou se existirem muitas tarefas parcialmente concluídas, convém
incluí-las na análise. Aplique um "percentual de conclusão" subjetivo, multiplique-o pela estimativa de esforço da
tarefa e inclua-o no valor agregado. É possível obter maior consistência nos resultados se existirem regras claras para
atribuir o percentual de conclusão. Por exemplo, uma regra que poderia ser estabelecida é que uma tarefa de codificação
não receba uma conclusão superior a 80% enquanto o código não passar por uma revisão.
O valor agregado é tratado com mais detalhes sob a seção Conjunto Completo de Métricas: Plano
de Projeto a seguir.
Valor de Negócios
Um método de monitoramento do progresso baseado em valor utiliza indicadores que representam a realização de
benefícios e o aproveitamento de oportunidades de negócios, além da comparação do valor realizado versus custo
realizado feita na Análise de Valor Agregado.
A fonte para os indicadores voltados ao negócio é o Artifact: Caso de Negócio, que fornece diretrizes para
indicadores relativos ao projeto de desenvolvimento em si. Também podem ser extraídos indicadores analidando a
modelagem da Cadeia de Resultados. Alguns exemplos de indicadores:
-
% entregue, relativo não aos custos, mas ao ROI e benefícios totais previstos
-
Índices de satisfação dos usuários dos protótipos, testes alfa e testes beta
-
Exposição total aos riscos do projeto X Orçamento e reservas gerenciais para resposta aos
riscos
-
Exposição aos riscos decorrentes de cada projeto externo associado pela Cadeia de Resultados
-
Exposição aos riscos decorrentes de cada funcionalidade definida para o sistema
-
Custo de desenvolver X Custo de adquirir funcionalidades restantes
Tendência de Defeitos
Em geral, é útil controlar a tendência de defeitos abertos e fechados. Esse controle fornece uma indicação aproximada
da existência ou não de uma quantidade significativa de trabalho de correção de defeitos a ser concluído e da rapidez
com que estão sendo fechados.
As tendências de defeitos são apenas uma das métricas fornecidas pelo Rational ProjectConsole.
Considerações
-
As solicitações de mudança não devem ter o mesmo peso, mesmo que afetem uma linha de código ou causem um retrabalho
significativo de design. Você pode lidar com isso seguindo algumas destas técnicas:
-
Cuidado com desvios. Solicitações de Mudança que exijam um trabalho considerável devem ser identificadas
como tal e controladas como tarefas separadas, não incluídas em um grupo de correções de erros genéricos.
Se um grande número de pequenas correções estiver dominando a tendência, convém agrupá-las de modo que cada
Solicitação de Mudança represente uma unidade de trabalho mais consistente.
-
Você pode registrar informações adicionais, como "categoria de esforço" subjetivo de "menos de 1 dia" "1
dia" "menos de 5 dias" "mais de 5 dias".
-
É possível registrar SLOCs estimadas e SLOCs reais para cada Solicitação de Mudança. Consulte Um Conjunto Pequeno de Métricas a seguir.
-
A ausência de defeitos registrados pode implicar na ausência de testes. Cuidado com o nível de esforço de teste que
ocorre ao examinar tendências de defeitos.
Tendência de Andamento de Teste
A última medida de integralidade é quanto da funcionalidade foi integrado.
Se cada uma das tarefas de desenvolvimento representar um conjunto de funcionalidades integradas, um gráfico de
tendências de valor atribuído poderá ser suficiente.
Uma forma bastante simples de comunicar o progresso é utilizar uma Tendência de Progresso de Teste.
Considerações
Alguns casos de teste podem representar consideravelmente mais valor ou esforço do que outros. Não se detenha muito
nesse gráfico - ele apenas mostra que a funcionalidade está progredindo rumo à conclusão.
Em muitos projetos, o conjunto mínimo de métricas descrito anteriormente não é suficiente.
Software Project Management, a Unified Framework [ROY98],
recomenda o conjunto de métricas a seguir para todos os projetos. Observe que essas métricas requerem dados reais e
estimados de Linhas de Código-Fonte (SLOC) para cada solicitação de mudança, que podem ser obtidos através de esforço
adicional.
Métricas e Métricas primitivas
Total de SLOC
|
SLOCt = Tamanho total do código estimado. Pode ser alterado consideravelmente à medida que os
requisitos são compreendidos melhor e as soluções de design amadurecem. Inclua software reutilizado que
esteja sujeito a mudanças pela equipe.
|
SLOC sob controle de
configuração
|
SLOCc = Baseline atual
|
Defeitos críticos
|
SCO0 = número de SCO do tipo 0 (onde SCO é uma Pedido de Mudança de Software - outro termo para
Solicitação de Mudança)
|
Defeitos normais
|
SCO1 = número de SCO do tipo 1
|
Solicitações de melhoria
|
SCO2 = número de SCO do tipo 2
|
Novas características
|
SCO3 = número de SCO do tipo 3
|
Número de SCO
|
N = SCO0 + SCO1 + SCO2
|
Retrabalho Aberto (quebra)
|
B = SLOC interrompidas cumulativas devido a SCO1 e SCO2
|
Retrabalho fechado (correções)
|
F = SLOC corrigidas cumulativas
|
Esforço de retrabalho
|
E = esforço cumulativo empregado para corrigir SCO do tipo 0/1/2
|
Tempo de uso
|
UT = horas de operação de uma determinada baseline em cenários de uso realistas
|
Métricas de Qualidade para o Produto Final
Outras métricas interessantes podem resultar desse conjunto pequeno de métricas:
Taxa de retalhamento
|
B/SLOCt, porcentagem de produto retalhado
|
Taxa de retrabalho
|
E/Esforço total, porcentagem de esforço de retrabalho
|
Modularidade
|
B/N, quebra média por SCO
|
Adaptabilidade
|
E/N, esforço médio por SCO
|
Maturidade
|
UT/(SCO0 + SCO1), Tempo médio entre defeitos
|
Manutenibilidade
|
(taxa de retalhamento)/(taxa de retrabalho), produtividade da manutenção
|
Indicadores de Andamento
Estabilidade de retrabalho
|
B - F, quebra versus correções ao longo do tempo
|
Quantidade de retrabalho
|
(B-F)/SLOCc, retrabalho aberto no momento
|
Tendência de modularidade
|
Modularidade, ao longo do tempo
|
Tendência de adaptabilidade
|
Adaptabilidade, ao longo do tempo
|
Tendência de maturidade
|
Maturidade, ao longo do tempo
|
Os itens a serem medidos são:
-
o Processo - a seqüência de tarefas chamadas para produzir o produto de software (e outros produtos de
trabalho);
-
o Produto - os produtos de trabalho do processo, incluindo software, documentos e modelos;
-
o Projeto - a totalidade de recursos, tarefas e produtos de trabalho do projeto;
-
os Recursos - pessoas, métodos, ferramentas, tempo, esforço e orçamento disponíveis para o projeto.
Para caracterizar completamente o processo, as medições deverão ser efetuadas no nível mais inferior da tarefa
planejada formalmente. As tarefas serão planejadas pelo Coordenador de Projeto utilizando um conjunto inicial de
estimativas. Um registro dos valores reais ao longo do tempo e de quaisquer estimativas atualizadas deverá ser mantido.
Métricas
|
Comentários
|
Duração
|
Tempo decorrido para a tarefa
|
Esforço
|
Unidades de esforço de equipe (equipe-horas, equipe-dias, etc.)
|
Saída
|
Produtos de trabalho e seus respectivos tamanhos e quantidades (observe que os defeitos serão incluídos
como uma saída das atividades de teste)
|
Uso do ambiente de desenvolvimento de software
|
CPU, memória, ferramentas de software, equipamentos (estações de trabalho, PCs), disponibilidades.
Observe que esses itens podem ser coletados para um projeto pela Autoridade de Ambiente de Engenharia
de Software (SEEA).
|
Defeitos, taxa de detecção, taxa de correção.
|
O tempo/esforço total de reparo e o scrap/retrabalho total (onde isso pode ser medido) também precisam
ser coletados. Provavelmente, serão provenientes de informações coletadas dos defeitos (considerados
como produtos de trabalho).
|
Solicitações de mudança, taxa de imposição, taxa de descarte.
|
Conforme acima, em tempo/esforço.
|
Outros incidentes que possam estar relacionados a essas métricas (texto livre)
|
Esta é uma métrica, na medida em que é um registro de um evento que afetou o processo.
|
Números, perfil (ao longo do tempo) e características da equipe
|
|
Rotatividade de pessoal
|
Métrica útil para explicar, em uma revisão post-mortem, por que um processo foi bem-sucedido ou não.
|
Aplicação de esforço
|
A forma como o esforço é empregado durante o desempenho das atividades planejadas (em relação às quais
o tempo é formalmente registrado para o gerenciamento de contas de custo) pode ajudar a explicar
variações na produtividade: algumas subclasses de aplicação de esforço são, por exemplo:
-
treinamento
-
familiarização
-
gerenciamento (pelo líder da equipe, por exemplo)
-
administração
-
pesquisa
-
trabalho produtivo - é útil registrá-lo por produto de trabalho e tentar uma separação entre o
tempo 'intelectual' e o tempo de captura, principalmente de documentos. Isto dirá ao Gerente de
Projeto o quanto o trabalho de documentação pesa no tempo dos engenheiros.
-
tempo perdido
-
reuniões
-
inspeções, inspeções técnicas, revisões - esforço de preparação e de reunião
(alguns desses itens serão atividades distintas e o tempo e o esforço empregados neles serão
registrados em relação a uma tarefa de revisão específica)
|
Inspeções, inspeções técnicas, revisões (durante uma tarefa - não revisões planejadas separadamente)
|
Registre a quantidade e a duração destes itens e o número de questões levantadas.
|
Desvios do processo (apontados como não conformidade, exigindo alteração de projeto)
|
Registre a quantidade e a gravidade dos desvios. Isso indica que talvez seja necessário mais
treinamento, que o processo não esteja sendo aplicado corretamente ou que a forma como o processo foi
configurado esteja incorreta
|
Problemas do processo (apontados como defeitos do processo, exigindo alteração de processo)
|
Registre a quantidade e a gravidade dos problemas. Essas informações serão úteis nas revisões
post-mortem e constituem feedback essencial para a Autoridade de Processo de Engenharia de Software
(SEPA).
|
Os produtos no RUP (Rational Unified Process) são os Produtos de Trabalho, que consistem em documentos, modelos ou elementos de modelo. Os
modelos são coleções de itens semelhantes (os elementos do modelo). Por isso, as métricas recomendadas são listadas
aqui com os modelos aos quais elas se aplicam: geralmente fica claro se uma métrica aplica-se ao modelo como um todo ou
a um elemento. Quando isso não está claro, é fornecido um texto explicativo.
Características do Produto de Trabalho
Em geral, estas são as características que estamos interessados em medir:
-
Tamanho - uma medida do número de itens em um modelo, a duração, a extensão ou o volume de um item
-
Qualidade
-
Defeitos - indicações de que um produto de trabalho não é desempenhado conforme especificado,
não está em conformidade com sua especificação ou possui outras características indesejáveis
-
Complexidade - uma medida da complexidade de uma estrutura ou algoritmo: quanto maior a
complexidade, mais difícil é compreender e modificar uma estrutura. Além disso, há indícios de que
estruturas complexas tendam a apresentar falhas
-
Acoplamento - uma medida do quanto os elementos de um sistema estão interconectados
-
Coesão - uma medida do quanto um elemento ou componente atende ao requisito de ter um único
propósito bem definido
-
Primitividade - o grau até onde as operações ou os métodos de uma classe podem ser compostos a
partir de outras operações ou métodos oferecidos pela classe
-
Integralidade - uma medida do quanto um produto de trabalho atende a todos os requisitos
(explícitos e implícitos - o Coordenador de Projeto deve se esforçar para explicitá-los ao máximo a fim
de limitar o risco de expectativas não cumpridas. Optamos por não fazer a distinção aqui entre
suficiente e completo.
-
Rastreabilidade - uma indicação de que os requisitos em um nível estão sendo atendidos por produtos de
trabalho em um nível inferior e, sob uma outra perspectiva, de que um produto de trabalho em qualquer nível tem
um motivo para existir
-
Volatilidade - o grau de alteração ou incoerência em um produto de trabalho em decorrência de defeitos
ou requisitos variáveis
-
Esforço - uma medida do trabalho (unidades de tempo da equipe) necessária para produzir um produto de
trabalho
Nem todas essas características aplicam-se a todos os produtos de trabalho: as mais relevantes são elaboradas com o
produto de trabalho específico nas tabelas a seguir. Há casos em que diversas métricas são listadas em relação a uma
característica. Isso quer dizer que possivelmente todas são interessantes, por fornecerem uma descrição completa da
característica a partir de várias perspectivas. Por exemplo, ao considerar a rastreabilidade de Casos de Uso, em última
instância, todos devem ser rastreáveis para um modelo de implementação (testado): nesse meio tempo, ainda será
interessante para o Coordenador de Projeto saber quantos Casos de Uso podem ser rastreados para o Modelo de Análise,
como uma medida de progresso.
Documentos
As métricas recomendadas se aplicam a todos os documentos do RUP.
Característica
|
Métricas
|
Tamanho
|
Contagem de páginas
|
Esforço
|
Unidades de tempo da equipe para produção, mudanças e correções
|
Volatilidade
|
Quantidade de mudanças, defeitos (abertos, fechados); páginas de mudanças
|
Qualidade
|
Medida diretamente através da contagem de defeitos
|
Integralidade
|
Não medido diretamente: julgamento feito por meio de revisão
|
Rastreabilidade
|
Não medido diretamente: julgamento feito por meio de revisão
|
Modelos
Requisitos
Atributos de Requisitos
Isto é, na verdade, um elemento do modelo.
Característica
|
Métricas
|
Tamanho
|
-
número do total de requisitos (= Nu+Nd+Ni+Nt)
-
número a ser rastreado para casos de uso ( = Nu)
-
número a ser rastreado apenas para design, implementação, teste ( = Nd)
-
número a ser rastreado apenas para implementação, teste ( = Ni)
-
número a ser rastreado apenas para teste ( = Nt)
Observe que isso divide os requisitos em dois grupos: aqueles que serão modelados pelos Casos
de Uso e naqueles que não o serão. Espera-se que a rastreabilidade de Casos de Uso seja
responsável pelos requisitos atribuídos aos Casos de Uso, de modo a controlar o design, a
implementação e o teste.
|
Esforço
|
-
Unidades de tempo da equipe (produção, alteração e reparo)
|
Volatilidade
|
-
Número de defeitos e controles de mudanças
|
Qualidade
|
-
Número de defeitos por gravidade
|
Rastreabilidade
|
|
Modelo de Caso de Uso
Característica
|
Métricas
|
Tamanho
|
-
Número de Casos de Uso
-
Número de Pacotes de Casos de Uso
-
Nível Relatado de Caso de Uso (consulte o white paper, "A Estimativa de Esforço e
Tamanho com Base em Casos de Uso" no Web site da IBM)
-
Número de cenários (total e por caso de uso)
-
Número de atores
-
Tamanho do Caso de Uso (páginas de fluxo de eventos, por exemplo)
|
Esforço
|
-
Unidades de tempo da equipe com produção, alteração e reparo
|
Volatilidade
|
-
Número de defeitos e controles de mudanças
|
Qualidade
|
-
Complexidade relatada (0-5, por analogia com COCOMO [BOE81], no nível de classe; o intervalo de complexidade é
mais estreito em níveis mais altos de abstração - consulte o white paper, "A Estimativa de
Esforço e Tamanho com Base em Casos de Uso" no Web site da IBM)
-
Defeitos - número de defeitos, por gravidade, abertos e fechados
|
Integralidade
|
-
Casos de Uso concluídos (revisados e sob gerenciamento de configuração sem defeitos
pendentes)/casos de uso identificados (ou número estimado de casos de uso)
-
Rastreabilidade de Requisitos-para-UC (em
Atributos de Requisitos)
|
Rastreabilidade
|
-
Análise
-
Cenários realizados no modelo de análise/total de cenários
-
Design
-
Cenários realizados no modelo de design/total de cenários
-
Implementação
-
Cenários realizados no modelo de implementação/total de cenários
-
Teste
-
Cenários realizados no modelo de teste (casos de teste)/total de cenários
|
Design
Modelo de Análise
Característica
|
Métricas
|
Tamanho
|
-
Número de classes
-
Número de subsistemas
-
Número de subsistemas de subsistemas...
-
Número de pacotes
-
Métodos (internos, externos) por classe
-
Atributos (internos, externos) por classe
-
Profundidade da árvore de herança
-
Número de filhos
|
Esforço
|
-
Unidades de tempo da equipe para produção, mudanças e correções
|
Volatilidade
|
-
Número de defeitos e controles de mudanças
|
Qualidade
|
Complexidade
|
-
RFC (Resposta para uma Classe): talvez seja difícil calculá-la porque é necessário um
conjunto completo de diagramas de interação.
|
Acoplamento
|
-
Número de filhos
-
Acoplamento entre objetos (desdobramento de classes)
|
Coesão
|
|
Defeitos
|
-
Número de defeitos (abertos, fechados), por gravidade
|
Integralidade
|
|
Rastreabilidade
|
Não aplicável - o modelo de análise torna-se o modelo de design.
|
Podemos observar aqui algumas métricas técnicas específicas de OO que talvez não sejam familiares - profundidade
da árvore de herança, número de filhos, resposta para uma classe, acoplamento entre objetos e outros. Consulte [HEND96] para obter detalhes do significado e do histórico dessas métricas. Várias
dessas métricas foram sugeridas originalmente por Chidamber e Kemerer (consulte "A metrics suite for object oriented
design", IEEE Transactions on Software Engineering, 20(6), 1994), mas nós as aplicamos aqui conforme sugerido em [HEND96] e preferimos a definição de falta de coesão em métodos LCOM (Lack of Cohesion
in Methods) apresentada nesse trabalho.
Modelo de Design
Característica
|
Métricas
|
Tamanho
|
-
Número de classes
-
Número de subsistemas de design
-
Número de subsistemas de subsistemas...
-
Número de pacotes
-
Métodos (internos, externos) por classe
-
Atributos (internos, externos) por classe
-
Profundidade da árvore de herança
-
Número de filhos
|
Esforço
|
-
Unidades de tempo da equipe (para produção, mudança e reparo)
|
Volatilidade
|
-
Número de defeitos e controles de mudanças
|
Qualidade
|
Complexidade
|
-
RFC (Resposta para uma Classe): talvez seja difícil calculá-la porque é necessário um
conjunto completo de diagramas de interação.
|
Acoplamento
|
-
Número de filhos
-
Acoplamento entre objetos (desdobramento de classes)
|
Coesão
|
|
Defeitos
|
-
Número de defeitos por gravidade
|
Integralidade
|
|
Rastreabilidade
|
Número de classes no Modelo de Implementação/número de classes
|
Implementação
Modelo de Implementação
Característica
|
Métricas
|
Tamanho
|
-
Número de classes
-
Número de arquivos
-
Número de subsistemas de implementação
-
Número de subsistemas de subsistemas...
-
Número de pacotes
-
Métodos (internos, externos) por classe
-
Atributos (internos, externos) por classe
-
Tamanho de métodos*
-
Tamanho de atributos*
-
Profundidade da árvore de herança
-
Número de filhos
-
Tamanho* estimado na conclusão
|
Esforço
|
-
Unidades de tempo da equipe (com produção, mudanças e correções separadas)
|
Volatilidade
|
-
Número de defeitos e controles de mudanças
-
Quebra* para cada mudança corretiva ou de aperfeiçoamento, estimada (antes da correção) e
real (no fechamento)
|
Qualidade
|
Complexidade
|
-
Resposta para uma Classe (RFC)
-
Complexidade ciclomática de métodos**
|
Acoplamento
|
-
Número de filhos
-
Acoplamento entre objetos (desdobramento de classes)
-
Acoplamento para transmissão de mensagens (MPC)***
|
Coesão
|
-
Número de filhos
-
Falta de coesão em métodos (LCOM)
|
Defeitos
|
-
Número de defeitos (abertos, fechados), por gravidade
|
Integralidade
|
|
* É necessário escolher algum método para medir o tamanho do código e depois aplicá-lo de forma consistente (por
exemplo, sem comentários, sem espaços em branco). Consulte [ROY98] para
uma discussão dos méritos e a aplicação de 'linhas de código' como uma métrica. Consulte essa mesma referência também
para obter a definição de 'quebra'.
** O uso da complexidade ciclomática não é aceito mundialmente, principalmente quando aplicado aos métodos de uma
classe. Consulte [HEND96]
para uma descrição dessa métrica.
*** Originalmente de Li e Henry, "Object-oriented metrics that predict maintainability", J. Systems and Software,
23(2), 1993, e também descrito em [HEND96].
Teste
Modelo de Teste
Característica
|
Métricas
|
Tamanho
|
-
Número de Casos, Procedimentos e Scripts de Teste
|
Esforço
|
-
Unidades de tempo da equipe (com produção, mudanças e correções separadas) para a produção
de casos de teste, e assim por diante
|
Volatilidade
|
-
Número de defeitos e controles de mudanças pedidos a partir do modelo de testes
|
Qualidade
|
-
Defeitos - número de defeitos, por gravidade, abertos e fechados (estes defeitos são
aqueles apontados em relação ao próprio modelo de teste, e não aqueles apontados pela
equipe de teste em relação a outro software)
|
Integralidade
|
|
Rastreabilidade
|
-
Número de Casos de Teste relatados como bem-sucedidos no Sumário de Avaliação de
Testes/Número de casos de teste
|
Gerenciamento
Modelo de Mudança - é um modelo conceitual para apresentações consistentes - as métricas serão
coletadas de qualquer sistema utilizado para gerenciar Controles de Mudanças.
Característica
|
Métricas
|
Tamanho
|
-
Número de defeitos, solicitações de mudança por gravidade e status; também categorizado
como número de mudanças de aperfeiçoamento, número de mudanças de adaptação e número de
mudanças corretivas.
|
Esforço
|
-
Esforço para correção de defeitos, esforço para implementação de mudanças em unidades de
tempo da equipe
|
Volatilidade
|
-
Quebra (estimada, real) para o subconjunto do modelo de implementação.
|
Integralidade
|
-
Número de defeitos detectados/número de defeitos estimados (se um modelo de confiabilidade
for usado)
|
Plano de Projeto (seção 4.2 do Plano de Desenvolvimento de
Software)
Essas são medidas provenientes da aplicação de Técnicas de Valor Atribuído ao gerenciamento de projeto; são
chamadas em conjunto de Critérios de Sistemas de Controle de Custos/Cronograma (C/SCSC). Uma técnica simples de
valor atribuído que é descrita acima como parte de Um Conjunto Mínimo
de Métricas. É possível realizar análises mais detalhadas usando métricas relacionadas, que incluem:
-
BCWS, Custo Orçado para Trabalho Programado
-
BCWP, Custo Orçado para Trabalho Realizado
-
ACWP, Custo Real para Trabalho Realizado
-
BAC, Orçamento na Conclusão
-
EAC, Estimativa na Conclusão
-
CBB, Base do Orçamento Contratual
-
LRE, Estimativa Revisada Mais Recente (EAC)
fatores derivados para variação de custo e planejamento. Consulte [ROY98]
para uma discussão da aplicação de uma abordagem de valor atribuído para gerenciamento de projeto de software.
O projeto precisa ser caracterizado em termos de tipo, tamanho, complexidade e formalidade (embora tipo, tamanho e
complexidade geralmente determinem formalidade), pois esses aspectos condicionarão as expectativas sobre vários limites
de medidas de nível inferior. Outras restrições deverão ser informadas no contrato (ou nas especificações). As métricas
resultantes do processo, do produto e dos recursos captarão todas as outras métricas no nível do projeto. O tipo e o
domínio do projeto podem ser registrados através de uma descrição de texto, certificando-se de que haja detalhes
suficientes para caracterizar o projeto com precisão. Registre o tamanho do projeto por custo, esforço, duração,
tamanho do código a ser desenvolvido e pontos de função a serem liberados. A complexidade do projeto pode ser descrita
- um pouco subjetivamente - colocando o projeto em um gráfico que mostra a complexidade técnica e de
gerenciamento em relação a outros projetos concluídos. [ROY98], a
Figura 14-1 mostra esse diagrama.
As métricas derivadas descritas em [ROY98], que
são os principais indicadores do Coordenador de Projeto, podem ser obtidas das métricas reunidas para o produto e o
processo. São elas:
-
Modularidade = = quebra média (NCNB*) por alteração corretiva ou de aperfeiçoamento no modelo de
implementação
-
Adaptabilidade = esforço médio por alteração corretiva ou de aperfeiçoamento no modelo de implementação
-
Maturidade = tempo de teste ativo/número de alterações corretivas
-
Manutenabilidade = Produtividade de Manutenção/Produtividade de Desenvolvimento = [correções acumulativas
reais/esforço acumulativo de alterações corretivas e de aperfeiçoamento]/[número estimado de NCNB na
conclusão/esforço de produção estimado na conclusão]
-
Estabilidade de retrabalho = quebra acumulativa-correções acumulativas
-
Quantidade de retrabalho = [quebra acumulativa-correções acumulativas]/unidade NCNB testada
* NCNB é um tamanho de código sem comentários, sem espaços vazios.
O progresso deve ser reportado a partir do plano do projeto, utilizando métricas de conclusão de produtos de trabalho,
com uma importância específica (a partir de uma perspectiva de valor atribuído) sendo designada à produção do software
de trabalho.
Se um modelo de estimativa como o COCOMO (consulte [BOE81] for
utilizado, os vários fatores de escala e geradores de custos deverão ser registrados. Na verdade, esses elementos
formam uma caracterização bastante detalhada do projeto.
Os itens a serem medidos incluem pessoas (experiência, habilidades, custo, desempenho), métodos e ferramentas (em
termos do efeito sobre a produtividade, a qualidade e o custo), tempo, esforço e orçamento (recursos utilizados,
recursos restantes).
O perfil profissional deve ser registrado ao longo do tempo, mostrando o tipo (analista, designer, etc.), a categoria
(que implica no custo) e a equipe para a qual foi alocado. Tanto os dados reais como os planejados devem ser
registrados.
Vale ressaltar novamente que o modelo COCOMO requer a caracterização da experiência e da capacidade da equipe, bem como
do ambiente de desenvolvimento de software. Ele é um excelente framework para manter essas métricas.
As informações sobre despesas, orçamento e cronograma serão obtidas do Plano de Projeto.
|