Métricas de software
Aula 1: Fundamentos de métricadas e medidas
Introdução
Receba as boas-vindas à disciplina Métricas de Software.
Você terá oportunidade de desenvolver os Conceitos de métricas e medições para
software, medidas diretas e indiretas, medidas no software pronto (kloc).
Toda empresa já nasce com o “sonho de ser bem-sucedida”, porém muitas delas nem
chegam a completar seu primeiro ano. Empresas de sucesso são aquelas que estão
trabalhando com foco na gestão da qualidade e do conhecimento. No entanto, não se
pode gerenciar o que não se pode medir. Assim, plataformas como ITIL, CMMI, MPS-BR
e outras, colocam as métricas e medições como práticas fundamentais para a gestão de
software com padrão de qualidade.
A qualidade tornou a medição do software nos seus diversos aspectos uma obrigação.
Deve-se desenvolver no profissional de software a visão gerencial, assim como a
preocupação com custo, produtividade, qualidade e novas métricas, suas formas de
medição e suas limitações. Ele deve conhecer conceitos para medir o software
(produtividade, qualidade, prazo, tamanho etc.) desde a fase de especificação de
requisitos. Para tal, deve conhecer técnicas e ferramentas em suas medidas nas diversas
fases do projeto.
Objetivos
Compreender os conceitos das métricas e das medições de software;
Entender o que envolve a qualidade de software.
Métricas para Software
Então, o próprio mercado exige, hoje, a gestão da qualidade, do conhecimento e sabe-
se que não se pode gerenciar o que não se pode medir. No entanto, como medir valores
como o conhecimento ou a qualidade?
Sabemos que todo processo de engenharia necessita de medições para entender
melhor os modelos e avaliar a quantidade dos produtos construídos. No caso da
engenharia de software – que não é fundamentada nas medidas quantitativas diretas,
como voltagem, temperatura, velocidade – as suas medidas e métricas são na sua
maioria indiretas.
Medição é o processo pelo qual são atribuídos valores numéricos ou simbólicos às
características de uma entidade qualquer, definidos de acordo com regras bem
definidas. Na ciência da computação, podemos medir os atributos, antes considerados
incomensuráveis – ainda que alguns especialistas em software continuem a argumentar
que o software é “incomensurável”.
O que é métrica?
Por sua natureza, a engenharia é uma disciplina quantitativa. A métrica de produto ajuda
os engenheiros de software a visualizar o projeto e a construção do software,
focalizando atributos específicos e mensuráveis dos artefatos da engenharia de
software.
Quem realiza?
Os engenheiros de software usam métricas de produto para ajudá-los a criar software da
mais alta qualidade.
Atenção!
Haverá sempre um elemento qualitativo na criação de software. O problema é que a
avaliação qualitativa pode não ser suficiente. Fazem-se necessários critérios objetivos
para ajudar a direcionar o projeto de dados, arquitetura, interfaces e componentes.
Ao testar, necessitamos de orientação quantitativa que nos auxiliará na seleção de
casos de teste e seus objetivos.
A métrica de produto proporciona uma base por meio da qual a análise, projeto,
codificação e teste podem ser conduzidos mais objetivamente e avaliados de maneira
mais quantitativa.
Por que devemos medir?
Para sabermos quanto cobrar;
Para conseguirmos dar prazos;
Para definirmos a equipe;
Para definirmos complexidade;
Para definirmos tamanho;
Para medirmos risco.
Quais são as etapas envolvidas?
O primeiro passo no processo de medição é definir as métricas apropriadas para o
software.
Em seguida, coletam-se os dados necessários para aplicar as métricas formuladas.
Uma vez computadas, as métricas são analisadas com base em diretrizes
preestabelecidas e dados do passado.
Os resultados das análises são interpretados para obter informações sobre a qualidade
do software.
Os dados da interpretação levam à modificação dos requisitos e modelos de projeto,
código-fonte ou casos de teste.
Atenção!
Qual é o artefato (produto)?
O produto, no caso, são as métricas computadas por meio de dados coletados dos
requisitos e modelos de projeto, código-fonte e casos de teste.
Como garantir que o trabalho seja realizado corretamente?
Estabeleça os objetivos da medição antes de iniciar a coleta de dados, definindo cada
métrica de produto de maneira não ambígua. Defina apenas algumas métricas e, então,
use-as para obter informações sobre a qualidade do artefato de software.
Embora as métricas de produto para software sejam imperfeitas, podem proporcionar
uma maneira sistemática de avaliar a qualidade com base em um conjunto de regras
claramente definidas. Elas também proporcionam uma visão objetiva, que “vai direto ao
ponto” e não “após o fato”. Isso permite descobrir e corrigir problemas potenciais antes
que se tomem defeitos catastróficos.
Avaliação dos atributos internos do produto
A seguir, veremos algumas medidas que podem ser usadas para avaliar a qualidade do
produto enquanto ele está sendo projetado.
Essas medidas de atributos internos do produto fornecem uma indicação em tempo real
da eficácia dos modelos de requisitos, projeto e código, da eficácia dos casos de teste e
da qualidade geral do software que será criado.
Qualidade de Software
O desenvolvimento de sistemas de software envolve uma série de atividades em que as
oportunidades de falhas são muito grandes.
Os erros podem aparecer no início do processo devido a alguns fatores:
Objetivos mal definidos;
Erros em fases de projeto e desenvolvimento.
Ninguém tolera erros, por isso o desenvolvimento de software tem que ter garantia de
qualidade.
A atividade de teste de software é um elemento crítico da garantia de qualidade de
software e representa a última revisão de especificação, projeto e codificação.
Custo do reparo
Quanto mais cedo for verificado o software durante o seu ciclo de vida, menores as
chances de elevar os custos de reparo.
Figura 1
Fonte: Elaborado pelo autor
Curva de falhas para hardware ou curva da banheira
Figura 2
Fonte: Elaborado pelo autor
Figura 3
Fonte: Elaborado pelo autor
Garantia de qualidade
A garantia de qualidade de software (Software Quality Assurance) não é algo com a qual
começamos a nos preocupar depois que o código foi gerado, e sim ao longo de todo o
processo de engenharia de software. A SQA ou GQS abrange:
Métodos e ferramentas de análise, projeto, codificação e teste;
Revisões técnicas em cada fase do desenvolvimento;
Estratégia de teste;
Documentação de software e das mudanças efetuadas;
Padrões de desenvolvimento de software;
Mecanismos de medição.
Fatores determinantes para a garantia da qualidade
Os requisitos de software são a base a partir da qual a qualidade é medida. A falta de
conformidade aos requisitos significa falta de qualidade.
Padrões especificados definem um conjunto de critérios de desenvolvimento que
orientam a maneira segundo a qual o software passa pelo trabalho de engenharia. Se os
critérios não forem seguidos, o resultado quase que seguramente será a falta de
qualidade.
Conjunto de requisitos que não são mencionados (ex.: boa manutenibilidade). Caso o
software se adéque aos requisitos explícitos, mas não aos implícitos, sua qualidade será
suspeita.
Fatores de qualidade de McCall
McCall propõe uma categoria de fatores que afetam a qualidade do software, conforme
mostra a figura.
Figura 4
Fonte: Elaborado pelo autor
Características operacionais
Corretude
Refere-se à capacidade de um programa satisfazer sua especificação e cumprir os
objetivos visados pelo cliente. Ele faz aquilo que eu quero?
Confiabilidade
Refere-se à capacidade de um programa executar a função pretendida com a precisão
exigida. Ele se comporta com precisão o tempo todo?
Usabilidade
Refere-se ao esforço necessário para aprender, operar, preparar a entrada e interpretar a
saída de um programa. Ele foi projetado para o usuário?
Integridade
Refere-se à capacidade de controlar o acesso ao software ou a dados por pessoas não
autorizadas. Ele é seguro?
Eficiência
Refere-se à quantidade de recursos computacionais e de código exigida para que um
programa execute sua função. Ele rodará em meu hardware tão bem quanto possível?
Características de manutenção
Manutenibilidade
Refere-se ao esforço exigido para localizar e reparar erros em um programa. Posso
consertá-lo?
Flexibilidade
Refere-se ao esforço demandado para modificar um programa. Posso mudá-lo?
Testabilidade
Refere-se ao esforço exigido para testar um programa a fim de garantir que ele execute
a função pretendida. Posso testá-lo?
Características de adaptação a novos ambientes
Portabilidade
Refere-se ao esforço exigido para transferir o programa de um ambiente para outro.
Serei capaz de usá-lo em outra máquina?
Reusabilidade
Refere-se à capacidade de um programa, ou partes, ser reusado em outras aplicações.
Serei capaz de reutilizar parte do software?
Interoperabilidade
Refere-se ao esforço exigido para se acoplar um sistema a outro. Serei capaz de compor
uma interface com outro sistema?
Fatores de Qualidade ISO 9126
Funcionalidade: A funcionalidade diz respeito ao grau com que o software satisfaz as
necessidades indicadas pelos seguintes subatributos: adequabilidade, precisão,
interoperabilidade, atendibilidade e segurança.
Além da funcionalidade, outros fatores da ISO 9126: confiabilidade, usabilidade,
eficiência, manutenibilidade e portabilidade.
SEGUNDO PRESSMAN:
“O teste é o último reduto no qual a qualidade pode ser avaliada”;
“Você não pode testar qualidade. Se ela não estiver lá antes, ela não estará lá quando
terminar de testar”;
“Otimismo é o risco ocupacional da programação; teste é o tratamento";
“A qualidade de um software é função de quanto ele muda o mundo para melhor”.
Métricas de indicadores e de produto
É importante que você entenda as diferenças sutis entre os termos medida, medição e
métrica, empregados com frequência.
MEDIDA
Sob o contexto de engenharia de software, medida proporciona uma indicação
quantitativa da extensão, quantidade, capacidade ou tamanho de algum produto ou
processo.
MEDIÇÃO
A medição é o ato de determinar uma medida.
MÉTRICA
Segundo o IEEE (Standard Glossary of Software Engineering Terminology), métrica busca
obter uma medida quantitativa do grau com o qual um sistema, componente ou
processo possui determinado atributo.
Quando é coletado um único ponto de dado (por exemplo, o número de erros
descobertos em um componente de software), foi estabelecida uma medida.
A medição ocorre como resultado da coleção de um ou mais pontos de dados (por
exemplo, um conjunto de revisões de componentes e testes de unidade é investigado
para coletar medidas do número de erros para cada um).
Uma métrica de software relaciona as medidas individuais de alguma maneira (por
exemplo, o número médio de erros encontrados por revisão ou o número médio de
erros encontrados por teste de unidade).
Antes que um projeto possa ser planejado, deve-se:
Estabelecer os objetivos e o escopo do projeto;
Considerar soluções alternativas;
Identificar as restrições administrativas e técnicas.
Controle do softwares
É impossível controlar um software sem medições e feedback. Não se pode controlar o
que não se pode medir e a extensão do controle depende da precisão da medição.
Qualquer coisa que não se pode medir está fora de controle.
As medições e métricas ajudam a entender o processo usado para se desenvolver um
produto de software e o próprio produto.
O produto e o processo em relação à medição
Produto é medido para avaliar a sua qualidade e processo é medido para melhorá-lo.
Para efetivar a medição é necessário ter em mãos documentação de efeitos passados e
dados estatísticos de quantificação de efeitos futuros.
A medição e a inferência estatística são usadas em várias áreas para projetar o
desempenho futuro.
A medição pode levar a controvérsias e discussões como:
Que métricas usar?
Como os dados compilados devem ser usados?
É justo usar medições para se comparar pessoas, processos e produtos?
As estimativas mais importantes
A estimativa é uma das principais atividades do planejamento de software:
Esforço humano exigido
Duração do projeto
Custo
Métricas são frequentemente classificadas como métricas do processo ou métricas do
produto, e são aplicadas durante o processo de desenvolvimento ou ao produto de
software desenvolvido.
Métricas do processo
As métricas do processo quantificam atributos do processo de desenvolvimento e do
ambiente de desenvolvimento.
Métricas de recursos: experiência do programador, custo de desenvolvimento e
manutenção.
Métricas para o nível de experiência do pessoal: número de anos que uma equipe está
usando uma linguagem de programação; número de anos que um programador está na
organização.
Outros fatores relacionados ao desenvolvimento incluem:
Técnicas de desenvolvimento;
Auxílio para programação;
Técnicas de supervisão etc.
Métricas do produto
São medidas do produto de software. Podem não revelar nada sobre como o software
foi desenvolvido.
Incluem:
O tamanho do produto (linhas de código);
A complexidade da estrutura lógica (recursão – for, while, repeat, fluxo de
controle – ordem das instruções do programa – e profundidade de laços
aninhados);
A complexidade da estrutura de dados;
Funções (tais como tipo de software: comercial, científico etc.).
Atenção!
Nesse caso, é importante que você conheça um exemplo: O número de defeitos
descobertos durante o teste formal depende do produto (número de segmentos de
código que estão errados) e do processo usado na fase de teste (a extensão do teste).
Figura 5
Fonte: Elaborado pelo autor
Métricas diretas e métricas indiretas
Medidas Diretas do Processo de Software:
Custo e esforço aplicados.
Medidas Diretas do Produto:
Número de linhas de código produzidas (KLOC - Kilo Lines of Code ou simplesmente
“mil linhas de código”); Velocidade de execução; Tamanho de memória; Número de
defeitos registrados em um tempo qualquer.
Medidas Indiretas do Produto:
Qualidade;
Funcionalidade;
Complexidade;
Eficiência;
Confiabilidade;
Manutenibilidade.
Métricas orientadas ao tamanho
Linhas de Código (KLOC): uma linha de código é qualquer linha do texto de um
programa, exceto comentários e linhas em branco, sem levar em conta o número de
comandos ou fragmentos de comandos em uma linha. Estão incluídas na definição de
linhas de código todas as linhas que contém cabeçalho do programa, declarações e
comandos executáveis.
Vantagens:
É fácil de calcular;
É o fator mais importante para muitos modelos de estimativa.
Desvantagens:
Dependente da linguagem de programação;
Penalizam programas bem estruturados, porém mais curtos.
Métricas orientadas à função
São medidas indiretas do software;
Concentram-se na funcionalidade ou utilidade do programa;
Função: coleção de comandos executáveis que realizam uma determinada
tarefa.
Princípios de medição
Formulação: criação de medidas e métricas apropriadas para a representação
do software.
Coleção: no caso, refere-se ao mecanismo usado para acumular dados
necessários para criar as métricas formuladas.
Análise: é a computação das métricas e a aplicação de ferramentas
matemáticas.
Interpretação: relacionada à avaliação de métricas que resultam em
informações sobre a qualidade da representação.
Feedback: são recomendações derivadas da interpretação de métricas de
produto transmitidas para a equipe de software.
Atributos de métricas eficazes de software
Centenas de métricas já foram propostas para software, algumas demandam medições
muito complexas, outras são tão esotéricas que poucos profissionais do mundo real têm
qualquer esperança de entendê-las, e outras ainda violam as noções intuitivas básicas
do que é realmente um software de alta qualidade.
Pressman (Engenharia de Software) elege atributos que deverão ser abrangidos por
métricas. Clique aqui [../docs/a01_t28.pdf] para conhecer esses atributos, na íntegra.
Planejamento
Análise
Design
Programação