25 de Maio de 2009

O Desenvolvedor “Cozinheiro Italiano”

Arquivado sob: Implementação — marco @ 12:33

Todos sabem que o Spagetti é uma massa de origem italiana muito popular no Brasil. Nem todos sabem, entretanto, o que é um código spagetti. Um código desta natureza é normalmente formado por um longo conjunto de instruções, com um vários níveis de aninhamento e grande complexidade técnica. A sua manutenção é trabalhosa e muitas vezes injeta erros colaterais na aplicação sendo mantida. Diferentemente do seu primo culinário, portanto, o código spagetti não é bem visto no mundo de TI.

Cortando spaggettis com o uso da métrica de complexidade ciclomática
Cortar um spagetti com faca é um crime culinário para os italianos. Na TI, infelizmente, não nos resta outra opção. Devemos cortar o mal pela raiz, literalmente.

Para isso, podemos usar como métrica um algoritmo que mede o quão simples ou complexos são os métodos e funções que compõem uma aplicação. Chamado de complexidade ciclomática e formalizado por Thomas McCabe, este algoritmo basicamente mede o número de caminhos lineares independentes encontrados em um método ou função. Quanto maior o número de caminhos, mais complexo é o seu código. Valores maiores que 10 geram um alerta amarelo, pois isto indica que o código está muito complexo para um ser humano manter. Surpreendentemente, vemos códigos em empresas com valores maiores que 100, 200 ou 500 (!!!), que são verdadeiros lamaçais de spagetti.

Felizmente não precisamos conhecer os detalhes do algoritmo (baseado em teoria de grafos) para usá-lo. Ferramentas simples e gratuitas analisam todo o código fonte das nossas aplicações e produzem uma análise de complexidade média e de ofensores individuais. Compilo abaixo algumas ferramentas para suporte este processo.

  • Source Monitor - Ferramenta simples que calcula a complexidade ciclomática e outras métricas para Delphi, VB, VB.NET, HTML, C#, C++, Ansi C e Java.
  • Metrics - Excelente plugin para eclipse, compila diversas métricas de qualidade de código, incluindo a complexidade ciclomática.

Com os resultados em mãos, podemos refatorar os códigos para torná-los mais simples.

Pensamento do dia: “A evolução do conhecimento humano é em direção à simplicidade, e não à complexidade”, L. Ron Hubbard

Sem Comentários »

Ainda não há comentários

RSS de comentários deste artigo. URI para link desta publicação:

Deixe um comentário

You must be conectado to post a comment.

Blog do Marco Mendes | Artigos, Comentários e Opiniões sobre Engenharia de Software, Arquitetura de Software, SOA e Java