# Métrica de software

Métricas de software são parâmetros para a medição do desempenho de um software. Uma métrica é um padrão de medida do grau em que um sistema ou processo de software é dotado de uma dada propriedade.
Ainda que uma métrica não seja uma medida (as métricas são funções, enquanto as medidas são os números obtidos pela aplicação da métrica), muitas vezes os dois termos são usados como sinônimos. Dado que as medições quantitativas são essenciais em todas as ciências, há um esforço contínuo dos profissionais e teóricos da ciência da computação para adotar abordagens similares no desenvolvimento de software. A meta é obter medições objetivas, reprodutíveis e quantificáveis, que podem ter inúmeras aplicações valiosas no planejamento de cronograma e orçamento, na estimativa de custos, em quality assurance, testes, depuração de software, otimização do desempenho do software e do pessoal envolvido nas tarefas.
Tais métricas, no processo de engenharia de software, podem ser diretas ou indiretas. As diretas são o custo e o esforço aplicado ao desenvolvimento e manutenção do software e do produto, a quantidade de linhas de código produzidas e o total de defeitos registrados durante um determinado período de tempo. Porém, a qualidade e a funcionalidade do software, ou a sua capacidade de manutenção, são mais difíceis de serem avaliadas e só podem ser medidas de forma indireta. E a engenharia de software está longe de desenvolver uma métrica-padrão amplamente aceita e cuja aplicação e resultados não sejam afetados por fatores subjetivos. Frequentemente há divergências sobre o que medir e como avaliar o resultado das medições.
Também podemos dividir as métricas de software, sob o ponto de vista de aplicação, em duas categorias: métricas de produtividade e de qualidade. As métricas de produtividade concentram-se na saída do processo de engenharia de software. As métricas de qualidade indicam o quanto o software atende aos requisitos definidos pelo usuário.
Métricas de software possibilitam realizar uma das atividades mais fundamentais do processo de gerenciamento de projetos: o planejamento, a partir do qual podem-se identificar a quantidade de esforço, o custo e as atividades necessárias para a realização do projeto.

## Medidas diretas

* Custo
* Esforço
* Linhas de Código
* Velocidade de Execução
* Memória
* Número de Erros
* Complexidade Ciclomática

## Medidas indiretas

* Funcionalidade
* Qualidade
* Complexidade
* Eficiência
* Confiabilidade
* Manutenibilidade
Para uma melhor compreensão sobre medidas de softwares, é preciso ter em mente as seguintes noções:
* Medida: indicação quantitativa da extensão, quantidade, dimensão, capacidade ou tamanho do produto ou do processo.
* Medição: determinação de uma medida.
* Indicador: é uma métrica (ou uma combinação delas) que fornece a compreensão do processo de software, de um projeto ou do produto
As medições de software podem ser organizadas em outras classes:
* Métricas da produtividade: baseadas na saída do processo de desenvolvimento do software, com o objetivo de avaliar o próprio processo;
* Métricas da qualidade: permitem indicar o nível de resposta do software a exigências explícitas ou implícitas do cliente, com relação ao definido pela gerência de qualidade;
* Métricas técnicas,: envolvem aspectos tais como funcionalidade, modularidade, manutenibilidade, etc..
Sob uma outra ótica, é possível definir uma nova classificação das medições:
* Métricas orientadas ao tamanho, baseadas nas medições diretas da engenharia de software;
* Métricas orientadas à função, que oferecem medidas indiretas;
* Métricas orientadas às pessoas, que dão indicações sobre a forma como as pessoas desenvolvem os programas de computador.

## Métricas orientadas ao tamanho

A métrica de software mais familiar é a contagem de linhas de código, que pode parecer simples, mas existe discordância sobre o que constitui uma linha de código (a medição não deveria considerar as linhas de comentário e as linhas em branco, pois não afetam a sua funcionalidade). Está fortemente ligado à linguagem de programação utilizada, impossibilitando a utilização de dados históricos para projetos que não utilizam a mesma linguagem. Um conjunto de métricas de qualidade e produtividade pode ser desenvolvido com esta técnica.

## Métricas orientadas à função

Em vez de contar as linhas de código, a métrica orientada à função concentra-se na funcionalidade do software, com a vantagem de poder ser aplicada independente da tecnologia usada para desenvolver o software.
Em 1979, Allan Albrecht, introduziu uma técnica de avaliação conhecida como ponto de função, baseada na visão de negócio do usuário e independente da linguagem utilizada e de qualquer tecnologia em geral. Essa técnica não permite calcular o esforço de desenvolvimento, mas gera uma variável que pode permitir seu cálculo, auxiliando o usuário final a melhorar o exame e avaliação de projetos. Seus objetivos são:
* Medir o que foi requisitado e recebido pelo usuário;
* Prover uma métrica de medição para apoiar a análise de produtividade e qualidade;
* Prover uma forma de estimar o tamanho do software;
* Prover um fator de normalização para comparação de software.

## Razões para se medir um software

* Indicar a qualidade do produto;
* Avaliar a produtividade dos que desenvolvem o produto;
* Determinar os benefícios derivados de novos métodos e ferramentas de engenharia de software;
* Formar uma base para as estimativas;
* Buscar oportunidades por refatoração;
* Ajudar na justificativa de aquisição de novas ferramentas ou de treinamentos adicionais;
A medição é algo comum no mundo da engenharia. Mas para engenharia de software está longe se ter uma medição padrão amplamente aceita e com resultados sem nenhum fator subjetivo.
Certamente, um aumento de produtividade significativo será obtido quando conseguirmos estabelecer uma sistemática de métricas adequada à mensuração de resultados do desenvolvimento de software (e efetivamente usá-la).

## Exemplos de métricas

* Número de defeitos introduzidos por programador / hora.
* Número de patches disponibilizados.
* Número de mudanças no documento de requisitos
* Número de linhas de código.
* Análise de pontos de função (APF) : mede o tamanho funcional do software, subsídios para o cálculo da produtividade do processo de desenvolvimento com base na funcionalidade ou utilidade dos programas. Esta avaliação é realizada sob o ponto de vista do usuário que avalia o tamanho e a complexidade de um software. Nesta contagem são consideradas os seguintes itens da aplicação (software): arquivos lógicos internos, arquivos de interface txterna, tntradas txternas, consultas externas e saídas externas. A cada um desses itens é atribuído um peso que, no final, determina a quantidade de pontos de função da aplicação, para o desenvolvimento de um novo sistema ou os pontos necessários para se realizar uma manutenção em um sistema já existente. Os pontos calculados servem para se chegar às horas totais do projeto.

## Objetivos da medição de software e utilidade das métricas

* Entender o comportamento e o funcionamento de produtos de software.
* Avaliar para determinar padrões, metas e critérios de aceitação.
* Controlar processos, produtos e serviços de software.
* Prever valores de atributos.