Professional Documents
Culture Documents
TechGuides
Como podemos avaliar ou classificar um projeto de software? Como podemos quantificar seu
status ou suas capacidades, e medir quantitativamente sua evoluo?
Ferramentas, existem vrias, porm, carecemos de um padro nico, que nos permita tirarmos
concluses a partir das mtricas, sem nos prendermos aos construtos artificiais de cada uma delas.
Critrios para avaliar projetos de software de Cleuton Sampaio de Melo Jr est licenciado com uma
Licena Creative Commons - Atribuio-CompartilhaIgual 4.0 Internacional.
Contedo
Medidas resumo de dados.................................................................................................................... 3
Medidas de tendncia central...........................................................................................................3
Medidas de disperso.......................................................................................................................4
Quando a mdia deixa de ser boa estimativa...................................................................................5
Isso aplicado s mtricas de software..............................................................................................7
Ento, como avaliar as mtricas de software?.................................................................................9
Impacto negativo.......................................................................................................................10
reas de avaliao..............................................................................................................................12
ARQUITETURA...........................................................................................................................13
Nota Embaralhamento...............................................................................................................13
Nota DMS................................................................................................................................. 14
PROJETO...................................................................................................................................... 14
Nota de Complexidade ciclomtica.......................................................................................... 15
Nota violaes SRP (Coeso)................................................................................................... 16
Nota RFC (Acoplamento).........................................................................................................16
IMPLEMENTAO..................................................................................................................... 17
Nota Aderncia s Regras......................................................................................................... 18
Nota de Testes........................................................................................................................... 20
Nota de duplicao de linhas.....................................................................................................22
Segundo a rea de Anlise descritiva de dados, medidas resumo servem, como o nome diz, para
resumir a informao contida em uma amostra, nos permitindo enxergar alguma caracterstica da
distribuio dos valores da amostra, entre elas: valores centrais, valores extremos, disperso,
assimetria etc.
Mas por que estamos falando sobre isso? Quando pensamos em qualquer tipo de amostra, a Mdia
logo o resumo mais utilizado. Por exemplo, algum nos diz: O preo do tomate est muito caro
nessa regio, pensamos logo em quanto est o preo mdio do tomate nos mercados regionais.
Porm, quando falamos em avaliar software, temos muitos itens a serem avaliados, e, devido sua
distribuio de frequncias, a mdia pode deixar de ser a melhor estimativa.
Para avaliar se a mdia um bom valor de estimativa de uma amostra, devemos considerar a sua
distribuio de frequncias.
Para exemplificar isto, vamos considerar o peso dos jogadores de um time de futebol:
Neste caso, temos as trs medidas praticamente iguais (Mdia, Mediana e Moda), logo, a
distribuio das frequncias dos pesos dos jogadores est centrada em torno da mdia. Neste caso,
dizemos que a distribuio normal e simtrica:
Medidas de disperso
A amplitude da distribuio nos informa o quo prximos da mdia os valores esto prximos da
mdia:
AT = Mximo Mnimo
O desvio padro, nos diz o quanto os valores esto distantes da mdia (tipicamente). Com ele,
podemos determinar o grau de confiana na mdia. O desvio padro a raiz quadrada da varincia,
e calculado pela frmula:
Neste caso, temos 68% dos valores agrupados em torno da mdia, com menos de um desvio padro
de diferena para ela.
Agora, temos uma disperso maior em relao Mdia. E tambm podemos ver que a relao das
trs medidas centrais mudou: Mdia < Mediana < Moda. Isto nos dis que temos maior ocorrncia de
pesos maiores que a mdia, o que indica assimetria direita:
E por que isso um problema? Voc diz que o peso mdio dos seus jogadores de 65 Kg
(aproximadamente), porm, temos jogadores que chegam a pesar 10 kg (ou mais) a menos que a
mdia. Se analisarmos o desvio padro, isso fica mais claro:
Desvio padro da distribuio original: 2,4271195049;
Desvio padro da nova distribuio: 8,9534147879;
O desvio padro da segunda amostra praticamente o tripo do da primeira amostra. Fica claro que a
mdia deixou de ser uma boa estimativa dessa grandeza.
Assim como podemos ter assimetria direita, temos tambm o caso da assimetria esquerda,
quando a relao : Mdia > Mediana > Moda:
Alm dessa distino nas Classes, as diferenas funcionais entre os softwares podem acarretar
maior disperso nas amostras das mtricas.
Vamos pegar uma mtrica muito comum em qualidade de software: Complexidade ciclomtica, que
mede a quantidade de caminhos independentes de execuo em uma unidade de cdigo fonte.
Podemos considerar a mdia da complexidade ciclomtica dos mtodos como uma boa estimativa
da qualidade do cdigo?
Que tal a mdia? Vamos supor uma classe tpica, com 6 mtodos:
Temos um nico mtodo complexo: clculo, que apresenta um valor de CC = 6. Note que o
desvio padro praticamente igual mdia, e que existe uma assimetria. Se pegarmos a mdia da
Complexidade ciclomtica como um resumo desta classe, ela ser considerada de baixa
complexidade. Porm, esta uma concluso FALSA, ou seja, um falso negativo.
Se temos um mtodo da Classe com CC = 6, significa que temos pelo menos seis caminhos bsicos
a serem testados, fora os outros mtodos. O Mtodo clculo est acima da complexidade ideal e
deveria ser refatorado.
Logo, considerar a Classe de baixa complexidade uma concluso errada, a qual fomos induzidos
por usamos uma medida de resumo de dados incorreta.
E, se avaliarmos o projeto como um todo, usando a mdia da CC das classes, estaremos incorrendo
no mesmo erro, s que em escala maior.
Pegar o maior valor de CC dos mtodos de uma classe pode no ser o melhor indicador de CC da
mesma, porm, melhor do que usarmos a mdia dos valores de CC de seus mtodos.
Note que temos 10 classes, sendo que 5 esto com valores de CC maiores que o aceitvel (at 5), e
uma delas tem CC > 10. Podemos calcular o ndice de violaes para cada valor limtrofe:
Qtde de ocorrncias
ndice =
Qtde de elementos
Isto nos d um valor que pode ser entendido como percentual. Por exemplo, temos 10 classes, sendo
que 5 delas esto com CC > 5. Temos um ndice de 0,5 ou 50%. E temos uma classe (10%) que
apresenta CC > 10.
Vamos considerar apenas o ndice de classes com CC > 5 (ICC5). fcil transformar o ndice em
nota, de zero a 10:
Neste caso, a nota seria 5. Se ns tivssemos menos classes com CC > 5, a nota seria maior:
3 Classes, nota = 7;
1 Classes, nota = 9;
Impacto negativo
No podemos simplesmente atribuir a nota apenas usando o ICC5, pois preciso considerar o
impacto das classes com CC > 10 (ICC10). Podemos usar Mdia ponderada para isso.
Podemos calcular uma nota a atribu-la CC do sistema. Vamos trabalhar com notas de zero a 10,
que so mais fceis de assimilar. Ento, podemos calcular a nota utilizando a Mdia ponderada:
Podemos atribuir pesos aos elementos da nota e depois dividir pela soma dos mesmos.
Ento, podemos calcular duas notas e us-las para calcular a nota mdia de CC do sistema:
NCC5 = 10 (ICC5 *10) = 5;
NCC10 = 10 (ICC10 * 10) = 9;
Nota CC = ((NCC5 * 4) + (NCC10 * 6)) / 10 = 7,4;
Embora tenhamos 50% das classes com CC > 5, o que elevou a mdia foi o fato de termos poucas
classes com CC > 10.
Porm, a nota 7,4 indica que o sistema est bem, do pondo de vista de Complexidade ciclomtica, o
que tambm uma avaliao incorreta. Ele possui mais de 50% das classes com alta complexidade,
logo, no poderia ter nota to alta.
Existe a questo do impacto negativo. O fato de haver classes com CC > 5 a nota do sistema,
porm o fato de haver classes com CC > 10 um impacto negativo na nota geral, jamais podendo
ser utilizado para melhorar a nota. como se um aluno tivesse perdido um ponto por no entregar
um trabalho. Uma das maneiras de fazer isso calcular a nota geral desta forma:
NCC5 = 10 (ICC5 *10);
NCC10 = ICC10 * 10;
Nota CC = NCC 5 NCC10 = 4;
Agora me parece mais real, ou seja, a nota demonstra que o sistema tem um problema com alta
complexidade.
reas de avaliao
A avaliao de um projeto de software pode ser feita com base em notas, variando de 1 a 10, cujo
clculo seria a Mdia ponderada das notas de suas reas de avaliao.
As reas de avaliao podem ser divididas de acordo com o seu impacto na qualidade geral do
projeto:
1. Arquitetura do software;
2. Projeto dos componentes;
3. Implementao.
A nota geral de um projeto de software pode ser calculada de acordo com a frmula:
Exemplos:
ARQUITETURA
Nota Embaralhamento
Exemplos:
Total de pacotes: 5;
Total de pacotes embaralhados: 2;
Nota = 6;
Nota DMS
Exemplos:
Total de pacotes: 7;
Total de pacotes com dms > 30%: 4;
Nota = 4,3;
PROJETO
As notas de projeto so baseadas em classes. O clculo feito com base nas notas obtidas nas
avaliaes de: Complexidade ciclomtica, Violaes do Princpio da Responsabilidade nica
(coeso) e Response For a Class (acoplamento):
Exemplo:
A nota calculada levando-se em conta o ndice de classes com CC > 5 e o impacto negativo das
classes com CC > 10:
Exemplos:
qct = 30;
qc5 = 10;
qc10 = 5;
pcc5 = 10 - ((10 / 30) * 10) = 6,67;
pcc10 = (5 / 30) * 10 = 1,67;
notacc = 6,67 - 1,67 = 5;
qct = 30;
qc5 = 3;
qc10 = 17;
pcc5 = 10 - ((3 / 30) * 10) = 9,0;
pcc10 = ((5 / 30) * 10) = 5,67;
notacc = 6,67 - 1,67 = 3,33;
exemplos:
Exemplos
IMPLEMENTAO
Para a parte de testes (Cobertura), usamos o critrio de linhas vlidas da ferramenta Cobertura
(executveis).
Como pode haver mais de uma violao por linha de cdigo, considerada apenas a violao de
maior severidade.
Exemplos:
nregras = 7, ntestes = 8, ndupl = 4, nota = 6,9;
nregras = 9, ntestes = 3, ndupl = 7, nota = 5,6;
nregras = 6, ntestes = 8, ndupl = 9, nota = 7,6;
Exemplos:
npmd = 7, ncks = 4;
nota = ((7 * 6) + (4 * 4)) / 10 = 5,8;
Para calcular as notas do PMD e do Checkstyle, Temos que calcular os ndices de violaes por
cada categoria de erro. As categorias podem ser agrupadas em:
NONE: Nenhum erro ou s informacional;
CRITICAL: Erro crtico, que bloqueia o projeto para qualquer outra coisa;
SEVERE: Erro muito grave;
MAJOR: Erro grave;
MINOR: Erro leve;
WARNING: Observao. Pode at no significar um erro;
nota = ((vcritical * 4) +
(vsevere * 2,5) +
(vmajor * 2) +
(vminor * 1) +
(vwarning * 0,5)) / 10
Exemplos:
ql = 1500
qtde violaes critical = 300
qtde violaes severe = 100
qtde violaes major = 150
qtde violaes minor = 200
qtde violaes warning = 80
vcritical = 10 - ((300 / 1500) * 10) = 8
vsevere = 10 - ((100 / 1500) * 10) = 9,33
vmajor = 10 - ((150 / 1500) * 10) = 9
vminor = 10 - ((200 / 1500) *10) = 8,67
vwarning = 10 - ((80 / 1500) * 10) = 9,47
Nota PMD =((8 * 4) + (9,33 * 2,5) + (9 * 2) + (8,67 * 1) + (9,47 * 0,5)) / 10 = 8,67;
ql = 1500
qtde violaes critical = 1000
qtde violaes severe = 800
qtde violaes major = 1700
qtde violaes minor = 1000
qtde violaes warning = 800
vcritical = 10 - ((1000 / 1500) * 10) = 3,33
vsevere = 10 - ((800 / 1500) * 10) = 4,66
vmajor = 10 - ((1700 / 1500) * 10) = 0,0
vminor = 10 - ((1000 / 1500) *10) = 3,33
ql = 1500
qtde violaes critical = 10
qtde violaes severe = 50
qtde violaes major = 80
qtde violaes minor = 20
qtde violaes warning = 100
vcritical = 10 - ((10 / 1500) * 10) = 9,93
vsevere = 10 - ((50 / 1500) * 10) = 9,66
vmajor = 10 - ((80 / 1500) * 10) = 9,46
vminor = 10 - ((20 / 1500) *10) = 9,86
vwarning = 10 - ((100 / 1500) * 10) = 9,33
Nota PMD =((9,93 * 4) + (9,66 * 2,5) + (9,46 * 2) + (9,86 * 1) + (9,33 * 0,5)) / 10 = 9,73
Nota de Testes
Exemplos:
ncob = 6, ntok = 7;
nota = ((6 * 6) + (7 * 4)) / 10 = 6,4;
Apenas no caso de cobertura de testes, o SLOC fornecido pelo prprio plugin Cobertura:
ql = qtde total de linhas;
qt = qtde total de linhas testadas;
nota = (qt / ql) * 10;
Como o ndice positivo, ou seja, quanto maior, melhor, ento a nota calculada no a diferena
para 10.
Exemplos:
ql = 1500, qt = 750
nota = ((750 / 1500) *10) = 5
ql = 1500, qt = 300
nota = ((300 / 1500) *10) = 2
ql = 1500, qt = 950
nota = ((300 / 1500) *10) = 6,33
Exemplos
qtst = 10, qf = 3
qtst = 10, qf = 8
nota = 10 - ((8/10) * 10) = 1
qtst = 10, qf = 1
nota = 10 - ((1/10) * 10) = 9
Exemplos: