TDC 2012 - Métricas de código na arquitetura

Preview:

DESCRIPTION

Através das métricas de código podemos conhecer a complexidade, tamanho, quantidade de métodos, nível de coesão, grau de acoplamento entre classes, dentre inúmeras outras possibilidades. Esta apresentação demonstrou a utilidade das métricas de software para arquitetos.

Citation preview

Globalcode – Open4education

Trilha – ArquiteturaLeandro DanielSystems Architect

Globalcode – Open4education

Globalcode – Open4education

MÉTRICAS DE CÓDIGOSob a óptica da arquitetura de software:

Globalcode – Open4education

O que veremos?

O que são métricas de

código?

Conhecendo algumas métricas

Usando métricas de

código

Indicadores de qualidade

Queryable source code

Métricas guiando o

design

Case: relação entre métricas, design e testes

Algumas ferramentas

Globalcode – Open4education

Não seria muito útil usar um monóculo aqui, certo?

Globalcode – Open4education

O que esse código diz?

Globalcode – Open4education

O que (todo) esse código diz?

Globalcode – Open4education

Manter as coisas como estão, exige trabalho!

Sim, a entropia em software existe ...

Globalcode – Open4education

Globalcode – Open4education

As medições e as métricas ajudam a entender o processo técnico usado para desenvolver

um produto.

Globalcode – Open4education

Termos comuns

Medida (indicação quantitativa)

Medição (ato de medir)

Métrica (medida quantitativa)

Indicador (combinação)

Globalcode – Open4education

Uma métrica precisa ser válida, confiável e barata.

Globalcode – Open4education

Potencial das métricas (1 de 2)

Analisar qualidade e

produtividade do processo de

desenvolvimento e manutenção bem como do

produto de software

construído

Qualificar a performance técnica dos produtos do

ponto de vista do

desenvolvedor

Medidas funcionais são necessárias

para qualificar a performance dos produtos

pela perspectiva do

usuário

Utilizadas para comparar a

produtividade de diferentes

técnicas e tecnologias

Globalcode – Open4education

Potencial das métricas (2 de 2)

Reduzir frustrações e pressões de cronograma

Embasar solicitações de

novas ferramentas e treinamentos

Formar uma linha básica

para estimativas

No nível técnico, as

medições são importantes

para determinar parâmetros

como quantidade de

teste necessário e impacto de mudanças

Globalcode – Open4education

by Thom Holwerda

Globalcode – Open4education

Globalcode – Open4education

LOC

Vamos começar do básico! :)

ILCC

LOCM NOCABC

...

Métricas e indicadores

DIT Ca / Ce

Globalcode – Open4education

Ca e Ce

Globalcode – Open4education

Cyclomatic Complexity

Globalcode – Open4education

Calculando CC (Complexidade Ciclomática)

Em linguagens como C#, as seguintes expressões são desconsideradas para cálculo da CC:

else | do | switch | try | using | throw | finally | return | object creation | method call | field access

Globalcode – Open4education

Grafo de acoplamento

Globalcode – Open4education

Grafo de acoplamento

Globalcode – Open4education

Grafo de acoplamento

Globalcode – Open4education

Grafo de acoplamento

Globalcode – Open4education

Acredite, todos falam em redução de acoplamento!

Law of Demete

r

Tell, Don't Ask

CQS Feature Envy

Shotgun Surgery

Say It Once

and Only Once

IoC DI

Globalcode – Open4education

Um código...

Globalcode – Open4education

Uma abstração!

Assembly

Classe

Método

Globalcode – Open4education

Globalcode – Open4education

Globalcode – Open4education

Uma matriz diz muita coisa!

Classes mutuamente dependentes?

Alto acoplamento?

Quebrando princípíos?

Globalcode – Open4education

Uma abstração da JDK (by CodeCity)

Globalcode – Open4education

Visual Studio com NDepend

Globalcode – Open4education

Queryable source code

SELECT     [method name]FROM    [my entire solution]WHERE    MethodCa == 0 AND    !MethodIsPublic AND    !MethodIsProtected AND    !MethodIsEntryPoint AND    !MethodIsExplicitInterfaceImplementation AND    !MethodIsClassConstructor AND    !MethodIsFinalizer

Dead code!

Globalcode – Open4education

Relação entre testes, design e métricas (gist)

https://gist.github.com/2149474

Globalcode – Open4education

Classe antes do refactoring

Globalcode – Open4education

Depois do refactoring

Globalcode – Open4education

Resultado do refactoring (antes x depois)

Depois

Antes

Globalcode – Open4education

Questões levantadas

Qual a relação entre Testes x CC?

Se CC = N, então N é o número mínimo de testes necessário.

Testar métodos com CC=1 pode ser inútil.

Existem outros pontos que aumentam a complexidade

ciclomática sem ela aparecer nas métricas. Um Math.Max, é um exemplo.

Globalcode – Open4education

Questões levantadas

Qual a relação entre Cobertura de testes x CC?

Em uma classe coesa, os métodos privados no fundo servem pra diminuir a

CC e aumentar a legibilidade dos métodos públicos.

Batalha!Membros públicos Vs privados!!

Globalcode – Open4education

Questões levantadas

Qual a relação entre Métricas x

Design?

Globalcode – Open4education

Referências

Relação entre métricas, design e testes (Github) https://gist.github.com/2149474

Emergent design through metrics (by Neal Ford) http://goo.gl/tdyVO

Série de posts sobre Code Metrics http://leandrodaniel.com/?tag=/Code+Metrics

Globalcode – Open4education

Ferramentas

Lista de ferramentas para análise de código estático

http://goo.gl/KjLq

FluentCodeMetrics (by Elemar Jr) http://goo.gl/CvnAW

NDepend http://ndepend.com

JArchitect http://jarchitect.com

Globalcode – Open4education