Introdução às regras de qualidade de código com FindBugs e PMD
*1. Visão geral *
Neste artigo, destacaremos algumas das regras importantes apresentadas nas ferramentas de análise de código, como FindBugs, PMD e CheckStyle.
===* 2. Complexidade ciclomática *
====* 2.1 O que é a complexidade ciclomática? *
A complexidade do código é importante, mas é uma métrica difícil de medir. O PMD oferece um conjunto sólido de regras em sua seção Regras de tamanho de código, essas regras foram projetadas para detectar violações em relação ao tamanho dos métodos e à complexidade da estrutura .
O CheckStyle é conhecido por sua capacidade de analisar o código em relação aos padrões de codificação e regras de formatação. No entanto, ele também pode detectar problemas no design de classes/métodos calculando alguma complexidade metrics.
Uma das medidas de complexidade mais relevantes apresentadas nas duas ferramentas é a CC (Complexidade Ciclomática).
O valor CC pode ser calculado medindo o número de caminhos de execução independentes de um programa.
Por exemplo, o método a seguir produzirá uma complexidade ciclomática de 3:
public void callInsurance(Vehicle vehicle) {
if (vehicle.isValid()) {
if (vehicle instanceof Car) {
callCarInsurance();
} else {
delegateInsurance();
}
}
}
O CC leva em consideração o aninhamento de instruções condicionais e expressões booleanas de várias partes.
De um modo geral, um código com um valor superior a 11 em termos de CC é considerado muito complexo e difícil de testar e manter.
Alguns valores comuns usados pelas ferramentas de análise estática são mostrados abaixo:
-
1-4: baixa complexidade - fácil de testar
-
5-7: complexidade moderada - tolerável
-
8-10: alta complexidade - a refatoração deve ser considerada para facilitar o teste *11 + complexidade muito alta - muito difícil de testar
O nível de complexidade também afeta a testabilidade do código,* quanto maior o CC, maior a dificuldade de implementar testes pertinentes *. De fato, o valor da complexidade ciclomática mostra exatamente o número de casos de teste necessários para atingir uma pontuação de cobertura de 100% das filiais.
O gráfico de fluxo associado ao método _callInsurance () _ é:
link:/wp-content/uploads/2016/11/flowgraph_CC-1.png [imagem:/wp-content/uploads/2016/11/flowgraph_CC-1-246x300.png [flowgraph_cc-1, largura = 283, altura = 345]]
Os possíveis caminhos de execução são:
-
0 ⇒ 3
-
0 ⇒ 1 ⇒ 3
-
0 ⇒ 2 ⇒ 3
Matematicamente, o CC pode ser calculado usando a seguinte fórmula simples:
CC = E - N + 2P
-
E: Número total de arestas
-
N: número total de nós *P: Número total de pontos de saída
====* 2.2 Como reduzir a complexidade ciclomática? *
Para escrever código substancialmente menos complexo, os desenvolvedores tendem a usar abordagens diferentes, dependendo da situação:
-
Evite escrever longas instruções switch usando padrões de design, por exemplo os padrões do construtor e da estratégia podem ser bons candidatos para lidar com problemas de tamanho e complexidade do código
-
Escreva métodos reutilizáveis e extensíveis modularizando a estrutura do código e implementando o *Single Responsibility Princípio *
-
Seguir outras regras do PMD tamanho do código pode ter um impacto direto no CC , por exemplo regra de comprimento excessivo do método, muitos campos em uma única classe, lista de parâmetros excessivos em um único método … etc
Você também pode considerar os seguintes princípios e padrões em relação ao tamanho e complexidade do código, por exemplo o KISS (mantenha-o simples e estúpido) * e *https://en.wikipedia.org/wiki/Don’t_repeat_yourself [DRY (Don ' t Repita-se)].