Pular para o conteúdo principal

Métricas

Várias métricas podem ser utilizadas na elaboração de estimativas. As mais utilizadas são: o tamanho do software, a produtividade dos desenvolvedores, a taxa de defeitos e o esforço humano.

Linhas de código fonte

Uma das métricas mais comuns para software é o número de linha de código fonte (LOC – lines-of-code, em inglês). As linhas de código são, de fato, um resultado imediato da atividade de desenvolvimento do produto final. No entanto, ela não considera diretamente, diversas outras atividades envolvidas, como requisitos, arquitetura, testes e outras. Alguns autores consideram que estas atividades estão implicitamente consideradas, ou seja, para se produzir um certo número de LOC, livre de defeitos, utilizando um certo processo de software, é necessário especificar os requisitos, projetar e modelar a arquitetura e testar o código, por exemplo.

Linhas de código têm a vantagem de ser uma métrica bastante objetiva. Basta analisar o código e se tem o valor do que foi produzido. Estimar LOC é prever quanto precisará ser feito para se obter o produto final.

O tamanho de um software em linhas de código varia de uma linguagem de programação para outra. Isto significa que as estimativas devem considerar dados de projetos similares apenas naquela mesma linguagem. Ou seja, se existe uma métrica de produtividade com uma certa linguagem, não se pode aplicar a mesma métrica numa outra linguagem. O mesmo vale para a funcionalidade. Se numa certa linguagem, para implementar uma certa função, são necessárias 200 LOC, numa outra linguagem a funcionalidade pode ser implementada com apenas 100 LOC. Por fim, pode-se argumentar que programadores mais eficientes conseguem implementar uma mesma funcionalidade, numa mesma linguagem utilizando menos LOC que outro programador. No entanto, em um processo de software bem controlado, a exigência de padrões e normas de programação limita esta variação.

Ponto de função

Análise de pontos de função é um método para identificar uma métrica que é independente da linguagem de programação utiliza e depende apenas da funcionalidade do software. Os pontos-de-função (FP) são dependentes de fatores relacionados aos serviços que o software precisa realizar. Eles são calculados com base em 5 valores que precisam ser atribuídos:

  • Número de entradas externas (EI)
  • Número de saídas externas (EO)
  • Número de consultas externas (EQ)
  • Número de tabelas lógicas internas (ILF)
  • Número de interfaces externas (EIF)

Uma vez que todos os valores tenham sido atribuídos, eles precisam ser aplicados numa fórmula empírica para se determinar o número de pontos-de-função. Estes valores são multiplicadores que variam de acordo com a complexidade, sendo classificada em baixa, média e alta.

A tabela a seguir mostra o cálculo do número de pontos-de-função não ajustados (UFP).


Complexidade

Baixa

Média

Alta

Total

Entradas externas (EI)

__* 3=EI1

__* 4=EI2

__* 6=EI3

EI1+EI2+EI3

Saídas externas (EO)

__* 4=EO1

__* 5=EO2

__* 7=EO3

EO1+EO2+EO3

Consultas externas (EQ)

__* 3=EQ1

__* 4=EQ2

__* 6=EQ3

EQ1+EQ2+EQ3

Arquivos Lógicos Internos (ILF)

__* 7=ILF1

__* 10=ILF2

__* 15=ILF3

ILF1+ILF2+ILF3

Interfaces externas (EIF)

__* 5=EIF1

__* 7=EIF2

__* 10=EIF3

EIF1+EIF2+EIF3

Total UAF

(EI1+EI2+EI3) + (EO1+EO2+EO3) + (EQ1+EQ2+EQ3) + (ILF1+ILF2+ILF3) + (EIF1+EIF2+EIF3)

O valor final de pontos de função precisa ser ajustado de acordo com 14 características gerais de sistemas, com valores que variam numa escala de 0 a 5 graus, com um menor indicando “sem influência” e o maior indicando “forte influência”.

As 14 características são:

  1. Comunicação de dados
  2. Funções distribuídas
  3. Objetivos de desempenho
  4. Configuração utilizada
  5. Taxa de transação
  6. Entrada de dados on-line
  7. Eficiência do usuário final
  8. Atualização on-line
  9. Processamento complexo
  10. Reusabilidade
  11. Facilidade de instalação
  12. Facilidade de operação
  13. Múltiplos locais
  14. Facilidade de mudança

A soma dos valores de 0 a 5, atribuídos a cada uma das características, é utilizada na fórmula do valor ajustado (VAF), descrita abaixo.

O valor de ajuste VAF é dado pela fórmula abaixo:

VAF = 0.65 + (soma dos valores)/100

O valor final de pontos de função é dado pela fórmula

FP = UAF + VAF

Estimar estes valores para um sistema de informação não é difícil. No entanto, para sistemas de controle, sistemas multimídia, sistema embutidos e outros, não é fácil identificar os valores para estas variáveis.

Esforço Humano

Estimar o esforço humano é fundamental para o planejamento. O esforço humano define uma métrica que estabelece a relação entre o tempo necessário para realizar uma atividade e o número de pessoas envolvidas. Isto porque a duração da atividade pode variar de acordo com o número de pessoas envolvidas com ela. Para isto é necessário que a tarefa possa ser dividida e compartilhada entre os desenvolvedores.

Por exemplo, um trabalhador pode colher um laranjal em 10 dias. Se 10 trabalhadores forem utilizados, em apenas 1 dia o laranjal será colhido. No entanto, nem sempre é possível compartilhar uma tarefa, pois embora uma mulher possa gerar 1 filho em 9 meses, 9 mulheres não podem gerar 1 filho em 1 mês!

Estimar o esforço é indicar a quantidade de pessoas necessária para realizar uma atividade num certo período de tempo. As unidades utilizadas são: pessoa-mês, pessoa-hora, homem-mês, ou qualquer combinação entre ser humano e unidade de tempo.

Para entender melhor, o esforço reflete a relação inversa entre o número de trabalhadores e o tempo para realizar a atividade. Isto, no entanto, não pode deixar de levar em consideração fatores externos que limitam o aumento do número de trabalhadores. Quanto mais trabalhadores compartilhando uma tarefa, mais canais de comunicação são estabelecidos, mais compromissos são gerados, maior cooperação é necessária e maiores conflitos podem existir. Tudo isso pode limitar o aumento da produtividade global da equipe.

No livro “The Mythical Man-Month", um clássico da engenharia de software, Fred Brooks relata sua experiência no desenvolvimento do OS 360 da IBM e mostra que tentar cumprir prazos de projetos atrasados com o aumento do número de trabalhadores pode ter efeito contrário.

Para saber mais:

Brooks, Jr., F.P. The Mythical Man-Month: Essays on Software Engineering, 20th Anniversary Edition. Reading, MA: Addison-Wesley, 1995, 322 pages.

Comentários

mariane disse…
Nossa, muito bom o seu texto sobre métricas. Bem elucidativo. Parabéns.

Postagens mais visitadas deste blog

O Modelo Espiral

O objetivo do modelo espiral é prover um metamodelo que pode acomodar diversos processos específicos. Isto significa que podemos encaixar nele as principais características dos modelos vistos anteriormente, adaptando-os a necessidades específicas de desenvolvedores ou às particularidades do software a ser desenvolvido. Este modelo prevê prototipação, desenvolvimento evolutivo e cíclico, e as principais atividades do modelo cascata. Sua principal inovação é guiar o processo de desenvolvimento gerado a partir deste metamodelo com base em análise de riscos e planejamento que é realizado durante toda a evolução do desenvolvimento. Riscos são circunstâncias adversas que podem surgir durante o desenvolvimento de software impedindo o processo ou diminuindo a qualidade do produto. São exemplos de riscos: pessoas que abandonam a equipe de desenvolvimento, ferramentas que não podem ser utilizadas, falha em equipamentos usados no desenvolvimento ou que serão utilizados no produto final, etc.

O Modelo Evolutivo

O modelo evolutivo descreve um processo na qual o software deve ser desenvolvido de forma a evoluir a partir de protótipos iniciais. Para entender melhor este modelo é importante entender o que é prototipação (ou prototipagem). Prototipação é uma abordagem baseada numa visão evolutiva do desenvolvimento de software, afetando o processo como um todo. Esta abordagem envolve a produção de versões iniciais - "protótipos" - de um sistema futuro com o qual pode-se realizar verificações e experimentações para se avaliar algumas de suas qualidades antes que o sistema venha realmente a ser construído. Objetivos da Prototipação Num projeto de software várias questões podem ser respondida com a construcão de protótipos. Nas situações típicas de desenvolvimento podemos distinguir entre diferentes objetivos na prototipação: Exploratória - é quando o protótipo é usado para ajudar a esclarecer requisitos dos usuários com respeito ao sistema futuro. Uma prototipação também é exploratória

Sistemas Computacionais

Um sistema computacional (ou baseado em computador) é aquele que automatiza ou apóia a realização de atividades humanas através do processamento de informações. Um sistema baseado em computador é caracterizado por alguns elementos fundamentais. Hardware Software Informações Usuários Procedimentos ou Tarefas Documentação O hardware corresponde às partes eletrônicas e mecânicas (rígidas) que possibilitam a existência do software, o armazenamento de informações e a interação com o usuário. A CPU, as memórias primária e secundária, os periféricos, os componentes de redes de computadores, são exemplos de elementos de hardware. Um único computador pode possibilitar a existência de diversos sistemas e um sistema pode requisitar diversos computadores. O software é a parte abstrata do sistema computacional que funciona num hardware a partir de instruções codificadas numa linguagem de programação. Estas instruções permitem o processamento e armazenamento de informações na for