Show Menu
TÓPICOS×

Teste de qualidade de código

O teste de qualidade de código avalia a qualidade do código do aplicativo. É o objetivo principal de um gasoduto de qualidade-código e é executado imediatamente após a etapa de construção em todos os gasodutos de não-produção e de produção.
Consulte Configuração do seu pipeline CI-CD para saber mais sobre diferentes tipos de pipeline.

Understanding Code Quality Rules

Em Teste de qualidade de código, o código fonte é verificado para garantir que ele atenda a determinados critérios de qualidade. Atualmente, esta ação é implementada através de uma combinação de SonarQube e exame de nível de pacote de conteúdo utilizando OakPAL. Há mais de 100 regras que combinam regras genéricas do Java e regras específicas do AEM. Algumas das regras específicas do AEM são criadas com base nas práticas recomendadas AEM engenharia e são chamadas de Regras de qualidade de código personalizado.
Você pode baixar a lista completa de regras aqui .
Porta de três níveis
Há uma estrutura em três níveis nesta etapa de teste de qualidade de código para os problemas identificados:
  • Crítico : Estes são problemas identificados pela porta que causam uma falha imediata do pipeline.
  • Importante : Esses são problemas identificados pela porta que fazem com que o pipeline entre em um estado de pausa. Um gerente de implantação, gerente de projeto ou proprietário de negócios pode substituir os problemas, caso em que o pipeline continua, ou pode aceitar os problemas, caso em que o pipeline pára com uma falha.
  • Informações : Trata-se de questões identificadas pela porta, que são fornecidas apenas para fins informativos e não têm impacto na execução do gasoduto
Os resultados desta etapa são fornecidos como Classificações .
A tabela a seguir resume as classificações e os limiares de falha para cada uma das categorias Críticas, Importantes e de Informações:
Nome
Definição
Categoria
Limite de falha
Classificação de segurança
A = 0 Vulnerabilidade
B = pelo menos 1 Vulnerabilidade
Menor C = pelo menos 1 Vulnerabilidade Principal
D = pelo menos 1 Vulnerabilidade Crítica
E = pelo menos 1 Vulnerabilidade Bloqueadora
Crítico
< B
Classificação da confiabilidade
A = 0 Bug
B = pelo menos 1 Bug Menor
C = pelo menos 1 Bug Principal
D = pelo menos 1 Bug Crítico E = pelo menos 1 Bug Bloqueador
Importante
< C
Classificação da manutenção
O custo de correção excepcional para cheiros de código é:
  • <=5% do tempo que já passou para o aplicativo, a classificação é A
  • entre 6 e 10%, a classificação é de
  • entre 11 e 20% a classificação é de C
  • entre 21 e 50% a classificação é um D
  • algo acima de 50% é um E
Importante
< A
Cobertura
Uma combinação da cobertura da linha de teste da unidade e da cobertura da condição usando esta fórmula:
Coverage = (CT + CF + LC)/(2*B + EL)
em que: CT = condições que foram avaliadas como 'true' pelo menos uma vez durante a execução de testes de unidade
CF = condições que foram avaliadas como 'false' pelo menos uma vez durante a execução de testes de unidade
LC = linhas cobertas = lines_to_cover - uncovered_lines
B = número total de condições
EL = número total de linhas executáveis (lines_to_cover)
Importante
< 50%
Testes de unidade ignorados
Número de testes de unidade ignorados.
Informações
> 1
Problemas em aberto
Tipos de edição geral - Vulnerabilidades, Erros e Cheiros de código
Informações
> 0
Linhas Duplicadas
Número de linhas envolvidas em blocos duplicados.
Para que um bloco de código seja considerado como duplicado:
  • Projetos não Java:
  • Deve haver pelo menos 100 tokens sucessivos e duplicados.
  • Esses tokens devem ser espalhados pelo menos em:
  • 30 linhas de código para COBOL
  • 20 linhas de código para ABAP
  • 10 linhas de código para outras línguas
  • Projetos Java:
  • Deve haver pelo menos 10 declarações sucessivas e duplicadas, independentemente do número de tokens e linhas.
As diferenças no recuo, bem como nos literais de string, são ignoradas ao detectar duplicações.
Informações
> 1%
Compatibilidade com Cloud Service
Número de problemas de compatibilidade de Cloud Service identificados.
Informações
> 0
Consulte Definições de métricas para obter definições mais detalhadas.
Para saber mais sobre as regras de qualidade de código personalizadas executadas pelo Cloud Manager, consulte Regras de qualidade de código personalizadas.

Lidar com falsos positivos

O processo de verificação da qualidade não é perfeito e, por vezes, identificará incorretamente questões que não são realmente problemáticas. Isso é chamado de falso positivo .
Nesses casos, o código fonte pode ser anotado com a @SuppressWarnings anotação padrão Java que especifica a ID da regra como o atributo de anotação. Por exemplo, um problema comum é que a regra SonarQube para detectar senhas codificadas pode ser agressiva sobre como uma senha codificada é identificada.
Para ver um exemplo específico, esse código seria bastante comum em um projeto AEM que tem código para se conectar a algum serviço externo:
@Property(label = "Service Password")
private static final String PROP_SERVICE_PASSWORD = "password";

A SonarQube criará uma Vulnerabilidade do Bloqueador. Depois de revisar o código, você identifica que isso não é uma vulnerabilidade e pode anotar isso com a ID de regra apropriada.
@SuppressWarnings("squid:S2068")
@Property(label = "Service Password")
private static final String PROP_SERVICE_PASSWORD = "password";

No entanto, por outro lado, se o código era realmente este:
@Property(label = "Service Password", value = "mysecretpassword")
private static final String PROP_SERVICE_PASSWORD = "password";

Em seguida, a solução correta é remover a senha codificada.
Embora seja uma prática recomendada tornar a @SuppressWarnings anotação o mais específica possível, ou seja, anotar somente a declaração específica ou o bloco que está causando o problema, é possível fazer anotações em nível de classe.
Embora não haja nenhuma etapa explícita de Teste de segurança, ainda existem regras de qualidade de código relacionadas à segurança avaliadas durante a etapa de qualidade do código. Consulte Visão geral de segurança para obter AEM como Cloud Service para saber mais sobre segurança no Cloud Service.