Métricas de código
Paulo Ortins
pauloortins@oncedev.com
@pauloortins
Paulo Ortins
• Sócio e programador na OnceDev
• Atuo em comunidades desde 2011
• Frequentador assíduo de eventos, dojos, bate-papos e etc.
• Mestrando na UFBA (Engenharia de Software/Mineração de
Repositórios de Software)
Pra que serve o Google
Analytics?
Google Analytics
Google Analytics
• Série de métricas
• Usuários
• Perfis de acesso
• Tempo de Permanência
• Fluxo de Navegação
• Empresas utilizam para auxiliar na tomada de decisões
O caso do Walmart
Business Intelligence
E na Engenharia de Software?
• Onde coloco esse trecho de código?
• Devo criar uma classe nova?
• Quando devo refatorar o meu código?
• Quais as classes merecem a maior atenção?
Desenvolvendo um software
Início do desenvolvimento
+ Decisões ruins
+ Decisões ruins
+ Decisões ruins
Fim do Projeto
Leis de Evolução do Software
• Mudança Contínua
• Complexidade Crescente
• Crescimento Contínuo
• Qualidade Decrescente
Software Intelligence
• Business Intelligence para projetos de software
• Uso de dados gerados durante o processo de desenvolvimento
para auxiliar a tomada de decisões
Fontes de Dados
• Bug trackers
• Listas de emails
• Repositórios de software
• Rastros de execução
Métricas de Código
Como medir a qualidade do
código?
• Quando um código é bom?
• Quando um código deve ser refatorado?
• Quando um código deve ser melhor testado?
Linhas de Código
• Já foi/é utilizada de diversas formas
• Complexidade/Tamanho
• Produtividade
• Qual o número de linhas que uma classe deve ter ? E um
método ?
• 10? 20? 50? 2000 ?
Número de Mudanças
• Número de vezes que um determinado código é alterado ao
longo do ciclo de vida do projeto
• O que isso pode nos dizer?
• Instabilidade?
• Importância?
• Uso?
Complexidade Ciclomática
• Também conhecido como número ciclomático ou
complexidade de McCabe
• Número de possíveis caminhos de execução que um
determinado trecho de código possui
Exemplo – Complexidade
Ciclomática
Exemplo – Complexidade
Ciclomática
Exemplo – Complexidade
Ciclomática
Complexidade Ciclomática
• Recomenda-se manter a CC de um código o menor possível
• Caso um código possua uma CC alta é desejável que esse
código seja refatorado
Coesão
• O que é coesão?
• LCOM (Lack of Cohesion of Methods)
• Calcula a ausência de similaridade entre métodos
• Número de pares de métodos que não compartilham variáveis –
Número de pares de métodos que compartilham
• Quanto maior a LCOM, pior é a coesão de uma classe
Acoplamento
• O que é Acoplamento?
• Acoplamento Aferente
• Acoplamento Eferente
• O acoplamento é sempre ruim?
Linhas de Comentários
• Quantas linhas de comentários deve ter em um código?
• Comentar código é uma boa prática ou uma má prática?
Cobertura de Código
• Qual o percentual do nosso código que está sendo coberto
por testes?
• Será que todo código deve estar 100% coberto por testes?
Métricas devem ser
combinadas
• Complexidade Ciclomática + Linhas de Código
• Código grande e complexo
• CC + Linhas de Código + Poucas mudanças
• Código grande e complexo mas que está estável
Métricas devem ser
combinadas
• Acoplamento Aferente + Muitas mudanças + Baixa cobertura
de testes
• Você vai ser caçado por outros desenvolvedores em breve.
• Complexidade Ciclomática + Linhas de Código + Muitas
mudanças + Baixa Cobertura + Acoplamento Aferente
• O fim do mundo está próximo
Visualização de Software
• A extração de métricas, por si só, não é suficiente
• Seres humanos não são bons em extrair informações a partir
de dados brutos
Visualização de Software
Visualização de Software
Code City
Treemap
Pack View
Color Highlighting
Ferramentas
• Visualizações: Web, Desktop ou Nenhuma
• Linguagens Suportadas
• Suporte a controles de versão
• Métricas por Desenvolvedor
Sonar
NDepend
Code Climate
Estado Atual
• Apesar das primeiras métricas de software tenham sido
propostas nos anos 70, seu uso ainda é pequeno
• A NASA, Motorola, HP e Boeing possuem casos de sucesso
Estado Atual
• Diversas ferramentas são propostas na academia, porém
poucas acabam chegando a indústria
• Como provar o valor disso ?
Obrigado
• Perguntas ?
• Meus contatos:
• @pauloortins
• pauloortins@oncedev.com
• Paulo César Ortins Brito

Métricas de Código

Notas do Editor

  • #28 Tem haveremcomo um objeto se relaciona com o sistemaqueeleestáinserido, emcomo a finalidade de códigoestábemdefinida e comooscomponentesquecompõem o método se relacionam entre siafim de cumpriressafuncionalidade
  • #29 Acoplamentoestárelacionado a inter-dependência entre classes e/oupacotes do nossosistema.Aferentequantidade de classes quedependem da classeEferentequantidade de classes queumaclassedepende