Você está na página 1de 6

Abordagens Tradicionais de Desenvolvimento

Esta seção traz artigos que apresentam como e quando utilizar as diferentes abordagens
tradicionais de apoio ao desenvolvimento de projetos de software

Métricas de Software
Como utilizá-las no gerenciamento de projetos de software

De que se trata o artigo?


O artigo trata da utilização de métricas de software
no gerenciamento de projetos, sendo fortes aliadas
na estimativa, acompanhamento e apoio em toma-
Thamine Chaves de Abreu Marco Antônio Pereira Araújo da de decisões durante a construção de produtos de
thamine.abreu@gmail.com maraujo@acessa.com software, visando uma melhor qualidade de todo
Atualmente cursa especialização em De- Doutor e Mestre em Engenharia de Sistemas este processo.
senvolvimento de Aplicações para Web no e Computação pela COPPE/UFRJ, Especialista
Centro de Ensino Superior de Juiz de Fora em Métodos Estatísticos Computacionais e
(CES/JF), Bacharel em Sistemas de Infor- Bacharel em Matemática com Habilitação em
Para que serve?
mação pela Universidade Severino Sombra Informática pela UFJF, Professor dos cursos de Métricas de software servem para apresentar medi-
(USS), Desenvolvedor de Sistemas Web na Bacharelado em Sistemas de Informação do das, preferencialmente quantitativas, que re�itam
Granbery Consultoria Júnior em projeto Centro de Ensino Superior de Juiz de Fora e características especí�cas de processos e de produtos
para a Fundação COPPETEC, possui expe- da Faculdade Metodista Granbery, Analista de em construção, podendo ser utilizadas em diferentes
riência de 4 anos em desenvolvimento de Sistemas da Prefeitura de Juiz de Fora e Editor
dimensões, como esforço, tamanho, complexidade,
sistemas Java (web/desktop). da Engenharia de Software Magazine.
dentre outras.
Leonardo da Silva Mota
leonardo.smota@hotmail.com
Em que situação o tema é útil?
Atualmente cursa especialização em De-

A
senvolvimento de Aplicações para Web no
garantia da qualidade é uma A coleta adequada de métricas, com suas res-
Centro de Ensino Superior de Juiz de Fora das principais preocupações da pectivas análises, pode auxiliar o Engenheiro
(CES/JF), Bacharel em Sistemas de Infor- indústria de desenvolvimento de Software na tomada de decisões ao longo
mação pela Universidade Severino Sombra de software, pois atualmente a maior do desenvolvimento de um projeto, visando a
(USS), Desenvolvedor de Sistemas Web na parte das empresas atuantes no mercado melhoria da qualidade do processo e do produto
Granbery Consultoria Júnior em projeto
para a Fundação COPPETEC, programa-
utiliza esse tipo de aplicação para gerir em construção.
dor certificado Java (SCJP), atuou como seus negócios, produtos e relacionamen-
professor assistente no curso de Sistemas tos com clientes, necessitando maior
de Informação da USS e dos cursos de in- confiabilidade e qualidade. Existem dentre elas, uma das mais simples e
formática da Fundação de Apoio a Escola diversas medidas de garantia de qua- menos custosa, é a medição de software.
Técnica (FAETEC), possui experiência de
4 anos em desenvolvimento de sistemas
lidade fundamentais para o sucesso de Nesse sentido, a medição de software
Java (web/desktop). qualquer tipo de aplicação de software, auxilia a tomada de decisão, pois através

50 Engenharia de Software Magazine - Métricas de Software


GERÊNCIA DE PROJ E TOS

de dados quantitativos, é capaz de informar que aspectos do GQM (Goal/Question/Metric), desenvolvido por Basili em 1988, é
produto atendem ou não ao padrão de qualidade especificado, uma abordagem para aplicação de métricas afim de aprimorar
além de permitir a avaliação dos benefícios de novos métodos o processo de desenvolvimento de software (e, consequente-
e ferramentas de engenharia de software, o entendimento e mente, os produtos de software gerados) enquanto mantém
aperfeiçoamento do processo de produção, a avaliação do os objetivos de negócio e objetivos técnicos da organização
retorno do investimento e tornar o gerenciamento de projetos nivelados. É uma abordagem top-down que estabelece uma
baseado em fatos e não “achismos”, por exemplo. medição sistemática para objetivos relacionados ao processo
Para medir software, são utilizadas diversas métricas que são de desenvolvimento, em que a equipe começa estabelecendo
como tipos de medições aplicadas a um sistema de software, os objetivos organizacionais, define metas de medição, insere
documentação ou processo relacionado. Através dessas métri- questões com o propósito de abordar os objetivos especifica-
cas é possível determinar o esforço ou tempo para realização dos e identifica as métricas que fornecem respostas para as
de uma tarefa ou o tamanho do produto, por exemplo. Além questões definidas.
disso, as métricas de software são facilmente calculadas, en- O GQM define um modelo de três níveis, ilustrado na Figura 1.
tendidas e testadas e independem do observador que as aplica,
sendo também uma boa fonte para estudos estatísticos acerca
do ciclo de vida do software.
Dentro desse contexto, este artigo tem por objetivo apresentar
algumas métricas de software e sua importância no processo
de desenvolvimento. Para isso, algumas métricas serão aplica-
das em pequenos exemplos, permitindo ao leitor compreender
e analisar seus benefícios imediatos.

Utilização de métricas
Existem dois tipos de métricas no contexto de desenvolvi- Figura 1. ������ �� ������ �� ���
mento de produtos de software: as métricas diretas, que são
realizadas em termos de atributos observáveis, como por O GQM pode ser aplicado em todo o ciclo de vida de produ-
exemplo, esforço, tamanho e custo, e as métricas indiretas ou tos, processos e artefatos de software e é bem alinhado com
derivadas, que podem ser obtidas através de outras métricas, o ambiente organizacional, sendo um meio adequado para
como por exemplo, complexidade, confiabilidade, e facilidade conseguir dados confiáveis e conhecimento sobre as práticas
de manutenção. Quanto ao contexto, podem ser aplicadas em de software da organização para conduzir a melhoria do
produtos ou em processos. Quando as métricas incidem dire- processo. Nesse contexto, é útil para auxiliar na compreensão
tamente no produto de software, são chamadas de métricas de e formar um baseline das práticas aplicadas no desenvolvi-
predição, quando em processos de software, são comumente mento de software, evoluir as atividades de medição, guiar e
chamadas de métricas de controle e sua aplicação normalmente monitorar processos de software e reduzir custos de desen-
é realizada em processos já maduros e controlados. volvimento, por exemplo. O GQM pode ser utilizado também
Para obter resultados significativos, as métricas devem ser como base de fundamentação para outras técnicas de medição
aplicadas em um ciclo constante, que envolve as etapas de de software.
planejamento, medição, análise de resultados, tomada de de- O GQM pode ser muito útil na definição de quais métricas
cisão e implementação das decisões. Desta maneira, pode-se são necessárias de serem coletadas e analisadas para responder
construir uma base histórica do artefato medido que permitirá questões sobre um determinado objetivo. Isso é importante
ao engenheiro de software analisar que processos, ferramentas para evitar que esforço seja gasto com coleta desnecessária de
e métodos melhor se aplicam àquele tipo de produto. Alguns métricas, que provavelmente nunca serão utilizadas.
cuidados também devem ser tomados no processo de medição,
como o momento e a escolha do conjunto de métricas mais Algumas métricas comumente utilizadas
relevantes a serem aplicadas, e a comparação entre produtos Softwares podem ser medidos (ou estimados) baseados em
através da aplicação de métricas (pois nenhum produto é igual diversos tipos de perspectivas, como tamanho e complexidade.
a outro). O escopo, os desenvolvedores e o ambiente são fatores Além disso, em função da etapa do desenvolvimento, diferen-
que podem influenciar o processo de desenvolvimento. Assim, tes métricas podem ser colhidas para um mesmo produto. Por
comparações devem ser cuidadosamente analisadas. exemplo, para a medição de tamanho na etapa de levantamento
As métricas podem e devem ser aplicadas durante as fases de requisitos, podemos utilizar como métrica o número de
de desenvolvimento do software, o que garante ainda mais requisitos especificados. Já na fase de projeto, o tamanho pode
seu impacto positivo no produto final. ser medido em função do número de classes e, na fase de codi-
Segundo alguns especialistas, para medir artefatos de softwa- ficação, a partir no número de linhas de código fonte.
re através de métricas significativas, as medições devem ser A seguir, serão apresentadas algumas das principais mé-
definidas de acordo com objetivos específicos. Nesse sentido, o tricas baseadas nos tipos de medição citados e, para melhor

Edição 21 - Engenharia de Software Magazine 51


compreensão, serão utilizados exemplos de códigos e aplicação SEI (Software Engineering Institute) definiu uma faixa de
das métricas. valores para a CC, que indicam o grau de complexidade de
um algoritmo, conforme mostra a Tabela 2.
Análise de Pontos de Função (APF): visa estimar o ta- Para exemplificar o cálculo da complexidade ciclomática,
manho do software baseado em Pontos de Função (PFs). será utilizado um algoritmo para cálculo de aprovação de
Seu objetivo é medir as funcionalidades do software, sem um aluno. Os possíveis caminhos no algoritmo são nume-
se preocupar com a tecnologia que será utilizada na im- rados, conforme mostra a Figura 2.
plementação e, pode ser aplicado já nos estágios iniciais
do desenvolvimento de software. A Tabela 1 apresenta as
fases para sua medição.
Número de linhas de código (LOC, KLOC): assim como a
APF, visa estabelecer o tamanho de um sistema, baseando-se
no número de linhas de código. Essa medição pode auxiliar
o engenheiro de software a determinar o tamanho de uma
aplicação já construída ou estimar o esforço a ser conside-
rado para a obtenção de um produto a ser desenvolvido.
Embora seja bastante objetiva, bastando analisar o código-
fonte de produtos concluídos para obtê-la, ela pode variar
de acordo com a linguagem de programação utilizada e,
portanto, as estimativas devem considerar dados de projetos Figura 2. Numeração de possíveis caminhos em um algoritmo
similares apenas na mesma linguagem.
Existem diversas formas de cálculo da CC, através de fór-
Complexidade Ciclomática (CC): proposta por McCabe mulas, ou pela contagem de caminhos possíveis. A Tabela 3
em 1976, fornece uma medida quantitativa da complexidade ilustra as possíveis formas de cálculo da complexidade
lógica de um programa. Através dessa métrica é possível ciclomática para este algoritmo.
definir o número de caminhos possíveis de um algoritmo Para programas grandes e complexos, calcular a com-
através do seu número de condições (if, for, while, do e plexidade ciclomática de cada função pode se tornar uma
switch) e assim, especificar o quanto um sistema é complexo tarefa exaustiva. Por este motivo, ferramentas automatizadas
e, por conseqüência, testável, pois apresenta um indício do podem ser utilizadas, como o plugin Metrics for Eclipse
número de casos de teste a serem realizados para cobrir as (ver seção Links), um plugin gratuito para a IDE Eclipse
possibilidades de um algoritmo. O ideal é que a complexi- que calcula a complexidade em sistemas desenvolvidos na
dade ciclomática seja baixa, pois desta forma, as funções linguagem Java. A Figura 3 ilustra o cálculo realizado pela
podem ser mais facilmente entendidas e modificadas. O ferramenta.

FASE DESCRIÇÃO
Determinar o tipo de contagem de pontos de função Existem três tipos de contagem que podem ser levadas em conta: contagem de PF de projeto de desenvolvimento, de aplicações instaladas e
de projetos de manutenção.
Determinar o escopo de contagem e a fronteira da aplicação A fronteira da aplicação é definida estabelecendo um limite lógico entre a aplicação que está sendo medida, o usuário e outras aplicações. O
escopo para a contagem define a parte do sistema (funcionalidades) a ser contada.
Determinar a contagem de pontos de função não ajustados Essa contagem leva em conta dois tipos de função: de dados e transacionais, bem como sua complexidade (simples, média ou complexa).
Contagem das funções de dados Contagem referente às funcionalidades relativas aos requisitos de dados internos e externos à aplicação.
Contagem das funções transacionais Contagem referente às funcionalidades de processamento de dados do sistema fornecidas para o usuário, como entradas e consultas externas.
Determinar o valor do fator de ajuste Baseado em diversas características gerais de sistemas, que avaliam a funcionalidade geral da aplicação que está sendo contada e seus níveis
de influência que podem ser determinados com base em uma escala de 0 a 5.
Calcular os pontos de função ajustados PFs ajustados são calculados, considerando o tipo de contagem definido no primeiro passo.

Tabela 1. Fases para a medição por pontos de função

Complexidade Situação
1-10 Programa simples, baixo risco.
11-20 Programa mais complexo, risco moderado.
21-50 Programa complexo, risco alto.
Maior que 50 Programa não testável, risco elevado.

Tabela 2. ������ �� ������������ ������������ ������ ��� � �������� ����������� ��������� �������� ����������������

52 Engenharia de Software Magazine - Métricas de Software


GERÊNCIA DE PROJ E TOS

Forma de cálculo Cálculo


para reutilização, visto que provavelmente possuem alto
Contagem através dos números de CC = E – N + 2 nível de abstração, (ii) pode indicar que a classe herda mui-
arcos e nós onde: tos serviços, o que pode aumentar consideravelmente sua
E= número de arcos complexidade.

N= número de nós 3. NOC (Number of children - Número de filhos): número


Contagem através do número de CC = P + 1 de subclasses posicionadas imediatamente abaixo da classe
nós predicados (que indicam uma onde: em questão. Um NOC alto indica que uma superclasse possui
decisão) P= número nós predicados (decisões) muitos filhos que necessitaram implementar características
Contagem visual Através do número de regiões fechadas do gráfico próprias, demonstrando baixo nível de abstração, visto que
construído, considerando também a região externa podem existir poucas características em comum entre as
Contagem dos caminhos possíveis CC = 5 classes filhas. A Figura 4 exibe uma hierarquia de classes,
1, 2, 10 que demonstra um NOC de valor três. Pode-se observar que
1, 3, 4, 10 quanto maior o número de métodos e atributos especializados,
1, 3, 5, 6, 10 menores são as chances de reutilização das classes filhas e
1, 3, 5, 7, 8, 10 mais complexas ficam as operações de polimorfismo. Em uma
1, 3, 5, 7, 9, 10 situação simples, como a do exemplo, o valor NOC não tem
Tabela 3. Formas para cálculo da Complexidade Ciclomática impacto negativo sobre o sistema, porém caso o cenário seja
um sistema complexo com muitas classes “filhas”, é importante
acompanhar os valores de NOC, com o propósito de tomar
medidas que evitem números altos.

Figura 3. Cálculo da complexidade ciclomática no plugin Metrics for Eclipse

Métricas de Chidamber & Kemerer (CK): foram propostas


por Chidamber & Kemerer em 1994, um conjunto de seis mé- Figura 4. ���������� �� �������� ��� ��������� �� ��� �� ����� �
tricas que permitem a análise quantitativa dos artefatos de
software construídos utilizando o paradigma da orientação a 4.CBO (Coupling between object classes - Acoplamento
objetos. Essas métricas têm o objetivo de salientar as classes entre classes de objetos): é o nível de acoplamento entre as
que possivelmente contém maior número de defeitos, com o classes. Um CBO alto indica que a classe possui muitos rela-
propósito de direcionar os esforços de teste. cionamentos, o que dificulta sua reutilização e aumenta sua
complexidade, visto que a classe torna-se dependente de outras
1. WMC (Weighted methods per class - Métodos ponderados para efetuar suas operações. Essa métrica auxilia o engenheiro
por classe): cálculo do número de serviços por classe, que de software a avaliar o nível de reaproveitamento da aplicação
pode auxiliar o engenheiro de software indicando o esforço e o esforço despendido em testes.
necessário para o teste de complexidade da classe. Quando
classes apresentam um alto WMC, significa que tendem ser 5.LCOM (Lack of cohesion in methods - Falta de coesão em
específicas, ou seja, destinando-se a necessidades individuais, métodos): Número de acessos a um ou mais atributos em co-
o que restringe sua reutilização. mum pelos métodos da própria classe. Quanto maior o LCOM,
menos coesa é a classe. A coesão em métodos é a capacidade
2. DIT (Depth of the inheritance tree - Profundidade da dos métodos realizarem apenas a função a que são destinados
árvore de herança): número máximo de superclasses acima e, para isso devem acessar apenas atributos essenciais ao seu
da classe em questão. Um DIT alto pode indicar que (i) a classe funcionamento. Portanto, é importante que o LCOM seja baixo
em questão herdou muitas características comuns a outras a fim de aumentar a reutilização e diminuir a complexidade
classes, indicando que suas superclasses estão preparadas da classe.

Edição 21 - Engenharia de Software Magazine 53


6.RFC (Response for a class - Resposta de uma classe): Listagem 1. ������� ���������� � ���������������� ����������� �� ������ �������
Indica a capacidade de resposta que a classe tem ao receber public String getCargo (){
mensagens de seus objetos (conjunto resposta). É o número de return “Gerente”;
}
métodos que podem ser chamados em resposta a uma mensa- public double calculaSalario(){
double taxaTotal=(getSalario()*taxaDependentes)*numDependentes;
gem recebida por um objeto ou por algum método da classe. return getSalario()-getDesconto() + taxaTotal;
}
Quanto maior o RFC, maior a possibilidade da classe atender
às suas funções. Em contrapartida, para obter um RFC alto, Listagem 2. ������ ���������������� ���������� �� ������ ��������
é necessário projetar uma estrutura de classes adequada que
public double calculaSalario(){
possa tender a essa particularidade, o que acaba gerando maior return horasTrabalhadas * valorHora;
}
complexidade, tornando necessário maior esforço de teste.
Listagem 3. ������� ������������������ ���������� � ����������������

Métricas de Lorenz & Kidd: Lorenz & Kidd, também em 1994, redefinidos na classe Vendedor

propuseram um conjunto de quatro métricas, comumente cha- public Departamento getDepartamento(){


return new Departamento(Departamento.VENDAS);
madas métricas LK, que se baseiam assim como as métricas }
public String getCargo(){
CK, no cálculo quantitativo de alguns aspectos fundamentais return “vendedor”;
da Orientação a Objetos, como os atributos, métodos, herança, }
public double calculaSalario(){
coesão e acoplamento. A diferença entre as métricas LK e as return (getSalario()- getDesconto())+(numeroVendas *
comissaoPorVenda);
métricas CK é em relação à metodologia empregada em seu }
cálculo.

1.CS (Class size - Tamanho da classe): é o número de métodos


e atributos da própria classe e herdados de suas superclasses.
Um número alto de CS indica que a classe pode ser muito espe-
cífica, atendendo necessidades privadas, o que pode dificultar
sua reutilização e aumentar sua complexidade.

2.NOO (Number of operations overriden by a subclass


- Número de operações redefinidas por uma subclasse):
número de sobrescritas de métodos em subclasses. Os
métodos herdados de uma superclasse podem ser sobres-
critos, ou seja, redefinidos em subclasses, com o propósito
de tornar sua funcionalidade mais específica. De certa Figura 5. Coleta da Métrica NOO pela ferramenta Metrics for Eclipse, aqui
chamada de Number of Overridden Methods
forma, essa redefinição de métodos pode ferir a abstração
implícita da superclasse e um número elevado de NOO dizer que a subclasse adicionou muitos métodos e atributos
pode indicar problemas estruturais, pois muitas subclas- em sua definição, o que indica um problema estrutural, já que
ses do sistema têm métodos redefinidos e possivelmente boa parte de seus atributos deveria ser definida em super-
estão hierarquicamente mal projetadas. Utilizando ainda classes. Além de aumentar a complexidade do sistema como
o exemplo da Figura 4, nas Listagens 1, 2 e 3 pode-se ob- um todo, um valor elevado de NOA reduz as possibilidades
servar trechos de código das três classes (Gerente, Diarista de reutilização.
e Vendedor), que redefinem o método calculaSalario(). As
classes Gerente e Vendedor também redefinem o método 4. SI (Specialization index - Índice de especialização): nú-
getCargo(), e ainda,a classe Vendedor redefine o método mero de métodos adicionados, eliminados ou redefinidos em
getDepartamento(). Apesar de não representar um risco uma classe. Na verdade, essa métrica complementa as métricas
estrutural para o projeto, no caso do exemplo, o número NOO e NOA e um valor alto indica também um problema de
de métodos redefinidos indica quais classes devem ter sua estruturação de classes, já que possivelmente foram realizadas
evolução acompanhada. Em um projeto de grande porte e alterações para atendimento de necessidades específicas. Clas-
crítico, pode ser complicado reestruturar uma hierarquia ses muito específicas dificilmente são reaproveitadas, ferindo
de classes no meio do projeto e o NOC indica que classes um dos princípios básicos da OO, a reutilização.
possivelmente devem ser reestruturadas o quanto antes. A
Figura 5 apresenta o resultado da coleta dessa métrica com A seguir, são apresentadas na Figura 6 as possíveis mé-
a ferramenta Metrics for Eclipse. tricas coletadas de um fragmento de sistema de controle de
Recursos Humanos, através da ferramenta Metrics for Eclipse,
3. NOA (Number of operations added by a subclass - Número para demonstrar como é simples e rápida a coleta de um
de operações adicionadas por subclasse): número de métodos conjunto significativo de métricas através de ferramentas
e atributos definidos em uma subclasse. Um NOA alto quer automatizadas.

54 Engenharia de Software Magazine - Métricas de Software


GERÊNCIA DE PROJ E TOS

Figura 6. Métricas coletadas pela ferramenta Metrics for Eclipse

Alguns outros tipos de métricas algumas das métricas mais conhecidas e exemplificar o uso
Diversos outros tipos de métricas são largamente utilizados, de algumas delas através de exemplos simplificados, com o
como métricas de confiabilidade e esforço. propósito de acentuar a importância de sua utilização em um
Métricas de confiabilidade são normalmente baseadas em projeto. As métricas são capazes de indicar pontos em que
número de defeitos apresentados por uma aplicação, poden- são necessários maiores esforços de teste e acompanhamento.
do ser medidas por intervalo de tempo ou por versão de um Através de ferramentas automatizadas, é possível coletar um
produto em uso. Nessa categoria, ferramentas de apoio como grande número de métricas com menor esforço, o que viabi-
BugZilla, Mantis ou Trac são boas aliadas para o registro e liza a implantação de processos de medição em qualquer tipo
acompanhamento de defeitos. de sistema, desde os mais simples até os mais críticos, o que
Métricas de esforço são importantes no acompanhamento de contribui para a qualidade do produto final.
processos de software, sendo comumente utilizada a medição
de esforço por Homem/Hora, ou alguma derivada desta, como Feedback
Dê seu feedback sobre esta edição! eu
Homem/Mês, que refletem a quantidade de recursos humanos Dê
s
alocados ao projeto por unidade de tempo. A Engenharia de Software Magazine tem que ser feita ao seu gosto.

sobre e
Para isso, precisamos saber o que você, leitor, acha da revista!
s
ta

Conclusão
edição
Dê seu voto sobre este artigo, através do link:
Métricas de software são medidas quantitativas acerca de www.devmedia.com.br/esmag/feedback
processos ou produtos de software. O artigo procurou mostrar

Edição 21 - Engenharia de Software Magazine 55

Você também pode gostar