segunda-feira, 8 de junho de 2020

Métricas orientadas a função - Pontos de Função (PF) ou FP (Function Points)

A métrica Ponto de Função (PF) ou Function Point (FP) pode ser utilizada como forma de medir a funcionalidade fornecida por um sistema. Pressman e Maxim (2016, p. 659) indicam que podem ser usadas para:

  • estimar o custo ou trabalho necessário para projetar, codificar e testar o software;
  • prever o número de erros que serão encontrados durantes os testes; e
  • prever o número de componentes e/ou o número de linhas de código-fonte projetadas.

Os PFs são derivados de medidas calculáveis do domínio de informações do software com base em:

  1. ExternalInputs-EIs (número de entradas externas): cada entrada externa tem origem em um usuário ou é transmitida de outra aplicação. Fornece dados distintos orientados à aplicação ou informações de controle.
  2. External Outputs-EOs (número de saídas externas): cada saída externa é formada por dados derivados da aplicação e fornece informações para o usuário.
  3. ExternalinQuiries-EQs (número de consultas externas): refere-se a uma entrada online que resulta na geração de alguma resposta imediata do software na forma de uma saída online.
  4. InternalLogical Files-ILFs (número de arquivos lógicos internos): cada arquivo lógico interno é um conjunto de dados que fica dentro dos limites da aplicação e é mantido por meio de entradas externas.
  5. External Interface Files-EIFs (número de arquivos de interface externos): cada arquivo de interface externo é um conjunto de dados que fica fora da aplicação, mas fornece dados que podem ser usados pela aplicação.

Para o cálculo de Pontos de Função, os passos descritos a seguir devem ser seguidos.

[1] Primeiro passo: preencher as colunas sombreadas da tabela. Note que nessa tabela você deve preencher apenas os dados da coluna Contagem e fazer o cálculo da coluna Contagem x Fator de Peso e totalizar a Contagem Total. As colunas Valor do domínio da informação e Fator de Pesos já estão preenchidas, pois são valores são propostos pelo modelo e, a princípio, são fixos. Então, nesse passo, você terá que estimar a quantidade de cada parâmetro previsto para o software a ser desenvolvido e atribuir um fator de peso para cada um deles.

Uma grande questão que surge é como minimizar a subjetividade na atribuição desses fatores de ponderação, porque isso pode variar de pessoa para pessoa. O IFPUG – International Function Points Users Group – disponibiliza uma série de recomendações visando minimizar essa subjetividade.

Uma vez preenchida a tabela, você terá o valor de Contagem Total, o qual será utilizado no terceiro passo do cálculo.

Tabela para Pontos de Função
Valor do domínio da informação Contagem Fator de Peso Contagem x Fator de Peso
Simples Médio Complexo
Nº de Entradas Externas (EIs)   3 4 6  
Nº de Saídas Externas (EOs)   4 5 7  
Nº de Consultas Externas (EQs)   3 4 6  
Nº de ArqLóg Internos (ILFs)   7 10 15  
Nº de ArqInterf Externos (EIFs)   5 7 10  
Contagem Total  
Fonte: baseada em Pressman; Maxim (2016, p. 660).

domingo, 7 de junho de 2020

Métricas de Qualidade e Métricas para o Modelo de Requisitos

O desenvolvimento de um projeto inicia-se com a criação do modelo de requisitos e é nesta fase que os requisitos são formulados e a base do projeto é estabelecida. Desta forma, as métricas de produto que fornecem informação sobre a qualidade do modelo de análise são bastante desejáveis.

Software Metric
 
Fonte: Profit_Image/Shutterstock

A qualidade de um sistema, aplicação ou produto é tão melhor quanto melhor estejam descritos os requisitos que o descrevem, o projeto que modela sua solução, o código que o implementa e os testes que o exercitam para descobrir defeitos e erros.

Desta forma, métricas como erros por ponto de função, erros descobertos por horas de revisão, erros descobertos por horas de teste e eficiência na remoção de defeitos proporcionam informações relevantes que ajudam no controle de qualidade do software.

sábado, 6 de junho de 2020

Considerações sobre Métricas

Há um grande número de métricas de software, que normalmente são aplicadas de forma isolada e consideradas insatisfatórias por grande parte dos desenvolvedores.

No passado, várias métricas e uma série de processos foram propostos, mas a maioria não possuía uma base teórica suficiente e/ou uma significativa validação experimental. Várias delas foram definidas e, em seguida, testadas e utilizadas em apenas um ambiente limitado. Apesar de, em alguns casos, existirem relatos de validação ou de aplicação dessas métricas, testes ou uso em ambientes diferentes produziram resultados não esperados. Essas diferenças acabam por não serem surpreendentes, uma vez que faltam definições claras e hipóteses de testes bem definidas.

Assim, existe um grande número de métricas que podem ser utilizadas, mas devemos observar quais delas têm sido mais amplamente utilizadas ou aceitas, pois certamente apresentam resultados mais efetivos.

Se o desenvolvedor construir uma aplicação apoiada por métricas escolhidas de forma criteriosa, elas poderão produzir resultados úteis se forem utilizadas de acordo com o ambiente especificado.

Independentemente das métricas adotadas. é muito importante para as organizações a coleta efetiva dessas métricas e o registro histórico dos projetos, formando uma base de conhecimento que auxilie nos processos de análise, melhoria e tomada de decisão.

Muitos fatores devem ser levados em consideração para a escolha das métricas. Recomendamos que você identifique qual a necessidade de medição do projeto (qualidade, produtividade, erros, falhas etc.) para, em seguida, adotar mecanismos que permitam uma medição mais significativa e efetiva.

sexta-feira, 5 de junho de 2020

Métricas de Processo e Projeto

De acordo com Pressman e Maxim (2016, p. 703), métricas de processo e de projeto de software são medidas quantitativas que permitem aos engenheiros de software vislumbrar a eficácia tanto do processo quanto dos projetos que são conduzidos usando este processo como framework. As medições permitem que julgamentos deixem de ser subjetivos e tendências possam ser detectadas de forma que estimativas possam ser feitas e aperfeiçoamentos buscados.

Métricas: busca pelo aperfeiçoamento
 
Fonte: G7 Stock/Shutterstock

As métricas de processo têm finalidade estratégica e objetivam fornecer um conjunto de indicadores de processo visando o seu aperfeiçoamento no longo prazo. As métricas de projeto têm finalidade tática e permitem ao gerente de projeto avaliar o estado de um projeto em desenvolvimento, acompanhar riscos em potencial, descobrir setores que apresentam problemas antes que se tornem críticos, ajustar o fluxo de trabalho e ainda avaliar a capacidade da equipe para controlar a qualidade do produto e dos artefatos de software.

As medidas que são coletadas com base em dados de qualidade e produtividade são convertidas em métricas e analisadas e comparadas com métricas anteriores. Essas métricas podem ser usadas durante o projeto para detectar problemas ocorridos no desenvolvimento e serem transmitidas para quem tem responsabilidade sobre o aperfeiçoamento do processo de software. Desta forma, muitas métricas são usadas tanto no domínio do processo quanto do projeto.

Ainda de acordo com Pressman e Maxim, o processo situa-se no centro de um triângulo (conforme ilustra a figura) que liga três fatores que influenciam significativamente tanto a qualidade de software quanto o desempenho da organização:

  • Pessoas: a capacidade e a motivação das pessoas reúnem os fatores individuais que mais influenciam a qualidade e o desempenho.
  • Produto: a complexidade do produto pode ter um forte impacto sobre a qualidade e o desempenho das pessoas que formam a equipe.
  • Tecnologia: os métodos e as ferramentas de engenharia de software são fundamentais, pois impactam o processo.

Além destes fatores, o triângulo do processo encontra-se dentro de um círculo que inclui o ambiente de desenvolvimento (exemplo: ferramentas CASE), condições de negócios (exemplo: prazos e regras de negócio) e características do cliente (exemplo: facilidade de comunicação).

Triângulo de fatores que impactam o processo

Fonte: Pressman; Maxim (2016, p. 705).

A eficácia de um processo pode ser medida pelas saídas dele derivadas como: medidas dos erros descobertos antes da entrega do produto, defeitos relatados pelos usuários finais, produtividade da equipe, esforço humano dispendido, tempo gasto, cumprimento do cronograma, entre outras. Desta forma, as métricas de processo podem fornecer benefícios significativos na medida em que a organização trabalha para corrigir e melhorar seus problemas, buscando maior maturidade de processo. Em um nível mais avançado, a organização pode adotar a abordagem SSPI – Statistical Software Process Improvement, que usa a análise de falhas de software para coletar informação sobre erros e defeitos encontrados no produto em operação.

As métricas de projeto são usadas por um gerente de projeto para adaptar o fluxo de trabalho e sua primeira aplicação ocorre, geralmente, durante a estimativa. Métricas usadas em projetos anteriores podem ser usadas como base. O gerente utiliza medidas de esforço e tempo dispendidos comparadas com as estimativas previstas no cronograma para monitorar e controlar o progresso do projeto.

Na medida em que o trabalho técnico prossegue, outras métricas de projeto são utilizadas, como taxa de produção, horas de revisão, pontos por função, linhas de código entregues etc. Além disso, os erros descobertos são registrados e outras métricas técnicas são utilizadas para avaliar a qualidade do projeto, o que irá influenciar a abordagem de testes.

As métricas de projeto são usadas tanto para minimizar o tempo do cronograma, buscando evitar atrasos e diminuir riscos, quanto para avaliar a qualidade do produto. Na medida em que a qualidade é melhorada, os defeitos são reduzidos e a quantidade de retrabalho também é minimizada, levando à redução do custo do projeto.

quinta-feira, 4 de junho de 2020

Classificação das Métricas de Software

Existem muitas classificações para métricas de software. Um software pode ser medido orientado ao tamanho, a funções, aos objetos, aos recursos humanos envolvidos, a qualidade e pela produtividade, entre outras medições.

Apresentamos algumas classificações de métricas a seguir, com base no trabalho de Meirelles (2008).

  • Classificação quanto ao objeto
    • Métricas de produto: são relacionadas à complexidade, tamanho, qualidade (confiabilidade, manutenibilidade etc.) do software produzido.
    • Métricas de processo: referem-se ao processo de concepção e desenvolvimento do software, medindo por exemplo, o processo de desenvolvimento, o tipo de metodologia usada e o tempo de desenvolvimento.
  • Classificação quanto ao critério utilizado na sua determinação
    • Métricas objetivas: são obtidas através de regras bem definidas, sendo a melhor forma de possibilitar comparações posteriores consistentes. Nessa categoria, os valores obtidos devem ser sempre os mesmos, independentemente do instante, condições ou indivíduos que os determinam. A determinação dessas métricas é passível de automatização (por exemplo, número de linhas de código).
    • Métricas subjetivas: podem partir de valores, mas dependem de um julgamento, que também é um dado de entrada, para serem levantadas (por exemplo, o modelo de estimativa de custo, que depende da classificação do tipo de software).
  • Classificação quanto ao método de obtenção
    • Métricas primitivas: são aquelas que podem ser observadas diretamente em uma única medida (por exemplo, o número de linhas de código, erros indicados em um teste de unidade ou ainda o total de tempo de desenvolvimento de um projeto).
    • Métricas compostas: são as combinações de uma ou mais medidas (por exemplo, o número de erros encontrados a cada mil linhas de código ou ainda o número de linhas de teste por linha de código).

Existem outras classificações, como métricas privadas e públicas.

As métricas privadas se aplicam ao indivíduo e as informações e resultados são de divulgação restrita. Os dados coletados com base individual devem ser privados e servir como indicadores apenas para o indivíduo. Servem para ajudar o engenheiro de software a aperfeiçoar seu trabalho individual. Algumas métricas são privadas de uma determinada equipe (por exemplo, proporção de defeitos por indivíduo).
As métricas públicas têm origem privada, mas acabam por serem divulgadas para toda a equipe. Elas permitem que as organizações realizem mudanças estratégicas para melhorar o processo de desenvolvimento do software.

quarta-feira, 3 de junho de 2020

Medição, Medidas, Métricas e Indicadores

Métricas de software estão se tornando cada vez mais uma parte importante na prática da Engenharia de Software. A cada dia, um número maior de empresas e governos está adotando e reportando métricas de qualidade como parte dos requisitos contratuais de desenvolvimento.

Métricas: medidas para o sucesso
 
Fonte: Kenishirotie/Shutterstock

Padrões, modelos e normas como ISO (International Organization for Standardization), CMMI (Capability Maturity Model Integration), entre outros, consideram as métricas entre as suas práticas recomendadas. Empresas estão usando métricas para melhor compreender, mapear, controlar e predizer projetos, processos e produtos de software.

De acordo com Maitino Neto (2016, p. 148), a medição é o processo pelo qual “os números são atribuídos aos atributos de entidades do mundo real”. O autor exemplifica o conceito dizendo que quando medimos a separação entre dois pontos e obtemos 10, o valor 10 é atribuído à grandeza física denominada distância. Isso indica que a medição é uma quantificação direta, que utiliza um único valor. Mas quando tratamos de métrica, utilizamos uma medição indireta, pois esta envolve o cálculo e uso de mais de uma medida. Como exemplo, podemos utilizar a medida de número de linhas de código e a medida de número de defeitos encontrados no programa para determinar a métrica de quantidade de defeitos por linha de código.

Ainda como exemplos de medição, podemos considerar, no campo da Engenharia, medidas como consumo de energia, peso, dimensões físicas, temperatura voltagem etc.

Maitino Neto (2016) ainda afirma que é desejável que as métricas sejam capazes de fornecer informação relevante para auxiliar a tomada de decisão e ainda contribuir para que se possa realizar comparação de desempenhos.

Embora existam métricas referenciais, usadas de forma padronizada pelos desenvolvedores de software, métricas podem ser baseadas nos objetivos da organização e na sua necessidade de informação para a tomada de decisão.

No contexto da engenharia de software, Pressman e Maxim (2016, p. 654) definem medida como um valor que “fornece uma indicação quantitativa da extensão, quantidade, dimensão, capacidade ou tamanho de algum atributo de um produto ou processo”. Os autores fazem referência ao IEEE Standard Glossary of Software Engineering Terminology que define métrica como uma “medida quantitativa do grau em que um sistema, componente ou processo possui um determinado atributo”.

Ainda de acordo com os autores, quando um único ponto de dados foi coletado (como, por exemplo, o número de erros descoberto em um único componente de software) uma medida foi estabelecida. Medição ocorre como resultado da coleção de um ou mais pontos de dados (por exemplo, um certo número de revisões de componentes e testes de unidade são investigados para coletar medidas do número de erros em cada um). Uma métrica de software relaciona as medidas individuais de algum modo, como, por exemplo, o número médio de erros encontrados por revisão ou número médio de erros encontrados por teste unitário.

Um engenheiro de software coleta medidas e desenvolve métricas de modo que indicadores sejam obtidos. Pressman e Maxim (2016, p. 655) definem um indicador como “uma métrica ou combinação de métricas que fornece profundidade na visão do processo, projeto ou produto de software”. Um indicador fornece um parâmetro que permite ao gerente do projeto ou engenheiros de software ajustarem o processo, projeto ou produto para torná-lo melhor e gerenciável. A figura ilustra esses conceitos.

De acordo com a figura, na Engenharia de Software a medição é útil principalmente quando relacionada ao processo, projeto e produto de software.

Visão geral sobre medidas, métricas e indicadores

Pode ser aplicada ao processo de software com o objetivo de melhorá-lo continuamente. No caso do projeto de software, as medidas podem auxiliar nas estimativas de prazos e custos, no controle de qualidade, na avaliação da produtividade, no controle do projeto e na tomada de decisões, conforme o projeto evolui. As medidas relacionadas ao produto de software focalizam atributos específicos de artefatos e são coletadas à medida que tarefas técnicas (análise, projeto, codificação e teste) são conduzidas.

Meirelles (2008) afirma que uma grande variedade de métricas já foram propostas, mas nem todas mostram resultados satisfatórios. Isso ocorre por vários fatores: algumas exigem medições muito complexas, outras são muito restritas, limitando sua aplicação, e outras violam as noções básicas dos atributos de um software (qualidade, por exemplo).

As métricas de software consideradas efetivas devem possuir alguns atributos que incluem:

  • Simples e computáveis: deve ser relativamente fácil aprender como derivar a métrica e seu cálculo não deve exigir esforço ou tempo exagerado.
  • Empíricas e intuitivamente persuasivas: a métrica deve satisfazer as noções intuitivas do engenheiro de software sobre o atributo do produto que está sendo considerado.
  • Consistentes e objetivas: a métrica deve produzir sempre resultados que não sejam ambíguos.
  • Independentes da linguagem de programação: métricas devem ser baseadas no modelo de análise, modelo de projeto ou na estrutura do programa.
  • Capazes de atuar como mecanismo efetivo para realimentação de alta qualidade: isto é, a métrica deve levar a um produto final da mais alta qualidade.

Enfim, as métricas devem permitir a comparação dos resultados para medir qualidade, eficiência, custo, produtividade, entre outros aspectos mensuráveis da análise, desenho, codificação e testes de software.

terça-feira, 2 de junho de 2020

Métricas de Software

As Métricas de Software é de grande relevância, para os profissionais envolvidos na produção do software. Este tema é parte fundamental da prática da Engenharia de Software e é cada vez mais comum nos requisitos contratuais para dimensionar o software e sua qualidade.
Organizações que criam padrões e modelos para a indústria, como os padrões ISO e CMMI, se preocupam com medidas e métricas a fim de apurar e garantir a qualidade de produtos e serviços. Empresas e órgãos governamentais, no Brasil e no mundo, estão usando métricas para compreender, controlar, prever e melhorar projetos, processos e produtos de software.
As métricas desempenham um papel fundamental em uma das áreas mais críticas do desenvolvimento de software: a área de estimativas de custos, prazos e recursos.
A importância de se ter um programa bem estabelecido de coleta de medidas, cálculo de métricas e armazenamento dessas informações em uma base de dados robusta, é fundamental para a precisão das estimativas realizadas para cada projeto em andamento.
Todo empreendimento, incluindo o desenvolvimento de software: a gestão de riscos. Todo projeto está exposto a riscos e é de suma importância que você adote uma estratégia proativa em relação a eles. Isso implica conseguir prever a quais riscos o projeto está vulnerável, qual a probabilidade desses riscos se tornarem realidade e qual o impacto deles no projeto, caso realmente venham a ocorrer.
A “Análise do Valor Agregado”, que pode auxiliar no monitoramento e controle do andamento de um projeto.