Download - Métricas de Código
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 desenvolvimentopara 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 aolongo 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 oucomplexidade de McCabe
• Número de possíveis caminhos de execução que um determinado trecho de código possui
Exemplo – ComplexidadeCiclomática
Exemplo – ComplexidadeCiclomática
Exemplo – ComplexidadeCiclomá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 essecó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 cobertopor testes?
• Será que todo código deve estar 100% coberto por testes?
Métricas devem sercombinadas• 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 sercombinadas• 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 + Muitasmudanç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 partirde 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 sidopropostas 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émpoucas acabam chegando a indústria
• Como provar o valor disso ?
Obrigado
• Perguntas ?
• Meus contatos:
• @pauloortins
• Paulo César Ortins Brito