Introdução — Detekt

Gabriel Prado
Android Dev BR
Published in
3 min readMay 21, 2020

Detekt é uma ferramenta de análise estática de código para a linguagem de programação Kotlin. Seu objetivo é auxiliar os desenvolvedores a aprimorar a qualidade de código gerado, possuí funcionalidades que irão analisar o código e gerar relatórios alertando sobre possíveis vulnerabilidades e imperfeições. Para utilizar essa ferramenta, é necessário realizar a integração no projeto através do Gradle e utilizar as Tasks geradas para realizar as análises, também é possível customizar suas Tasks para adequar ao seu projeto e suas particularidades.

Funcionalidades

  1. Code Smell: são características de código que indicam a violação de um princípio fundamental de Design e que podem ter impacto na qualidade do código, possivelmente aumentando o risco de ocorrência de bugs e falhas futuras na aplicação.
    Exemplos: Códigos duplicados, Mutação de variáveis, Classes e métodos gigantes, etc;
  2. Complexity Report: relatório gerado a partir da análise realizada pela ferramenta, indicando quantidade de Code Smells, Linhas de códigos, Comentários, etc;
  3. Highly configurable: através do XML de configuração, é possível determinar quais regras serão utilizadas pela ferramenta e quais deverão ser aplicadas. É possível desativar e adicionar critérios de aceite para cada regra;
  4. Suppress findings: possibilidade de suprimir erros e avisos através do uso das anotações @Suppress (Kotlin) e @SuppressWarnings (Java);
  5. Thresholds: são valores de aceite para determinadas regras, possibilitando que uma violação exista dentro de uma classe até o valor de Threshold definido;
  6. Baseline: responsável por definir exceções que serão consideradas Whitelist (apenas novos casos serão analisados) e Blacklist (todos os casos serão analisados) para fins de alertar o desenvolvedor sobre os problemas encontrados;
  7. Intelij Plugin: plugin que irá auxiliar o desenvolvedor a não gerar novas infrações de código, indicando alertas para cada violação de regras;
  8. Gradle Tasks: são tarefas customizáveis para alterar o comportamento da ferramenta;
  9. Danger integration: através do relatório gerado pelo Detekt é possível envia-lo para o Danger interpretar e comentar nos Pull Requests, assim recusando ou aprovando a validação automática.

Integração

Iremos criar um package chamado config no root do projeto, que irá conter todas configurações relacionadas a Análise Estática;

Devemos criar o arquivo detekt.gradle que irá conter as configurações da Task que iremos executar para obter o relatório da análise, ele estará localizado no diretório config/detekt/;

Agora, devemos criar o arquivo de configuração detekt-config.yml no diretório /cofing/detekt/ que irá conter as regras que o Detekt irá adotar para suas análises. No momento, não iremos entrar em detalhes do arquivo de configuração.

Após criar o detekt-config.yml, está na hora de incluir as dependências em nosso build.gradle (root):

Para finalizar, devemos incluir o detekt.gradle em nosso build.gradle (app) através da linha: apply from: “${rootDir}/config/detekt/detekt.gradle” (essa linha será incluída embaixo das linhas com “apply plugin …”). Assim poderemos executar a task detektVerification.

Agora podemos conferir o resultado da task (executando ./gradlew detektVerification) através do exemplo:

O resultado será exibido no terminal em que a task foi executada, neste exemplo vemos que foram detectados infrações relacionadas a EmpyBlocks (Blocos vazios de código), MatchingDeclarationName (Classe com nome diferente do Arquivo) e NewLineAtEndOfFile (Ausência de uma linha em branco no final do código).

Repositório: https://github.com/sp4wna1/StaticAnalysis

Bitrise: https://app.bitrise.io/app/0156ce9156d4f261

--

--