tdc 2012 - métricas de código na arquitetura
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.TRANSCRIPT
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