43
Globalcode – Open4education Trilha – Arquitetura Leandro Daniel Systems Architect

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

Embed Size (px)

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

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

Globalcode – Open4education

Trilha – ArquiteturaLeandro DanielSystems Architect

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

Globalcode – Open4education

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

Globalcode – Open4education

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

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

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

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

Globalcode – Open4education

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

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

Globalcode – Open4education

O que esse código diz?

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

Globalcode – Open4education

O que (todo) esse código diz?

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

Globalcode – Open4education

Manter as coisas como estão, exige trabalho!

Sim, a entropia em software existe ...

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

Globalcode – Open4education

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

Globalcode – Open4education

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

um produto.

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

Globalcode – Open4education

Termos comuns

Medida (indicação quantitativa)

Medição (ato de medir)

Métrica (medida quantitativa)

Indicador (combinação)

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

Globalcode – Open4education

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

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

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

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

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

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

Globalcode – Open4education

by Thom Holwerda

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

Globalcode – Open4education

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

Globalcode – Open4education

LOC

Vamos começar do básico! :)

ILCC

LOCM NOCABC

...

Métricas e indicadores

DIT Ca / Ce

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

Globalcode – Open4education

Ca e Ce

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

Globalcode – Open4education

Cyclomatic Complexity

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

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

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

Globalcode – Open4education

Grafo de acoplamento

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

Globalcode – Open4education

Grafo de acoplamento

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

Globalcode – Open4education

Grafo de acoplamento

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

Globalcode – Open4education

Grafo de acoplamento

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

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

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

Globalcode – Open4education

Um código...

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

Globalcode – Open4education

Uma abstração!

Assembly

Classe

Método

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

Globalcode – Open4education

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

Globalcode – Open4education

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

Globalcode – Open4education

Uma matriz diz muita coisa!

Classes mutuamente dependentes?

Alto acoplamento?

Quebrando princípíos?

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

Globalcode – Open4education

Uma abstração da JDK (by CodeCity)

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

Globalcode – Open4education

Visual Studio com NDepend

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

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!

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

Globalcode – Open4education

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

https://gist.github.com/2149474

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

Globalcode – Open4education

Classe antes do refactoring

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

Globalcode – Open4education

Depois do refactoring

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

Globalcode – Open4education

Resultado do refactoring (antes x depois)

Depois

Antes

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

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.

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

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!!

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

Globalcode – Open4education

Questões levantadas

Qual a relação entre Métricas x

Design?

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

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

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

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

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

Globalcode – Open4education