Introdução às regras de qualidade de código com FindBugs e PMD

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)].