
Queremos compartilhar nossa experiência na implementação da plataforma para análise contínua e medição da qualidade do código SonarQube nos processos de desenvolvimento do sistema DPO (complemento ao sistema de contabilidade depositária e de compensação "Alameda") do Depositário Nacional.
O Depositário Nacional (grupo de empresas "Bolsa de Valores de Moscou") é uma das empresas chave da infraestrutura financeira, armazenando e contabilizando títulos de emissões russas e estrangeiras no total superior a 50 trilhões de rublos. O aumento no volume de operações realizadas pelo sistema, bem como a contínua expansão de funcionalidades, exigem a manutenção de um alto padrão de qualidade no código-fonte dos sistemas. Uma das ferramentas para alcançar esse objetivo é o analisador de código estático SonarQube. Neste artigo, descreveremos a experiência bem-sucedida da integração perfeita do analisador de código estático SonarQube nos processos de desenvolvimento do nosso departamento.
Sobre o departamento
Nossa competência abrange os seguintes módulos: pagamentos aos clientes do NRD, troca eletrônica de documentos (EDO), processamento de mensagens do depositário de negociação (registro de transações de balcão), canais de interação eletrônica entre clientes e NRD e muito mais. No geral, lidamos com uma ampla gama de atividades na parte técnica das operações. Trabalhamos com base em solicitações. As solicitações dos operadores são processadas pelos analistas: eles coletam os requisitos do cliente e nos apresentam sua visão de como isso deve ser implementado no programa. Em seguida, o esquema padrão: desenvolvimento de código – teste – operação experimental – entrega do código ao cliente final.
Por que SonarQube?
Esta é a primeira experiência do nosso departamento na implementação de uma plataforma para controle de qualidade de código – anteriormente fazíamos isso manualmente, realizando apenas revisões de código. Mas o volume crescente de trabalho exige a automação desse processo. Além disso, na equipe há funcionários inexperientes que não estão totalmente familiarizados com os regulamentos internos de desenvolvimento e tendem a cometer mais erros. Para o controle de qualidade do código, decidimos implementar um analisador estático. Como o SonarQube já havia sido utilizado em alguns sistemas da NVD, a escolha foi rápida. Anteriormente, colegas de outros departamentos analisavam, com sua ajuda, o código dos microsserviços no sistema
Processo de implementação
Temos:
- compilação automática do sistema no TeamCity;
- processo de upload de código configurado através de MergeRequest da branch feature para a branch master no GitLab (processo de desenvolvimento de acordo com o GitHub Flow);
- SonarQube, configurado para análise de código para o sistema DPO em uma base agendada.
Nosso objetivo: implementar análise automática de código nos processos CI/CD do DPO.
É necessário configurar: processo de verificação automática de código com o analisador estático em cada MergeRequest para a branch principal.
Ou seja, a imagem alvo é a seguinte: assim que o desenvolvedor faz o upload de alterações na branch feature, uma verificação automática é iniciada para encontrar novos erros no código. Se não há erros, a aceitação das alterações é permitida, caso contrário, será necessário corrigir os erros. Desde o início, conseguimos identificar uma quantidade significativa de erros no código. O sistema possui configurações muito flexíveis: ele pode ser ajustado de maneira a funcionar para as tarefas específicas dos desenvolvedores, para cada sistema e estilo de programação.
Configuração do QualityGate no SonarQube
A análise QualityGate é um conceito que encontramos nas profundezas da internet. Inicialmente, utilizamos uma abordagem diferente, mais complexa e, de certa forma, não totalmente correta. Primeiro, realizávamos a varredura pelo SonarQube duas vezes: uma vez na branch da funcionalidade e outra na branch para a qual planejávamos mesclar essa funcionalidade, e em seguida comparávamos o número de erros. Esse método não era estável e nem sempre apresentava resultados precisos. Então, descobrimos que em vez de executar o SonarQube duas vezes, poderíamos estabelecer um limite para o número de erros permitidos (QualityGate) e analisar apenas a branch que você está enviando e comparando.

Até agora, ainda estamos utilizando uma verificação de código bastante primitiva. É importante observar que o SonarQube não é compatível com algumas linguagens de programação, incluindo Delphi. Atualmente, para nosso sistema, analisamos apenas o código PLSql.
Funciona da seguinte maneira:
- Analisamos para nosso projeto apenas o código PL/SQL.
- O QualityGate no SonarQube está configurado de forma que o número de erros não aumente com o commit.
- O número de erros na primeira execução foi de 229. Se o número de erros durante o commit aumentar, a mesclagem não é permitida.
- Em seguida, caso os erros sejam corrigidos, será possível reconfigurar o QualityGate.
- Também é possível adicionar novos itens para análise, como a cobertura do código por testes, etc.
Esquema de funcionamento:

Nos comentários da execução do script, é evidente que o número de erros na branch da funcionalidade não aumentou. Isso significa que está tudo OK.

O botão Merge se torna disponível.

Nos comentários da execução do script, fica claro que o número de erros na branch da funcionalidade ultrapassou o limite permitido. Isso significa que está tudo RUIM.

O botão Merge fica vermelho. Atualmente, não há restrição para enviar alterações devido a código com erros, mas isso é feito a critério do desenvolvedor responsável. Futuramente, pode-se proibir a introdução de tais commits na branch principal.

Trabalho individual sobre os erros
Em seguida, é necessário verificar todos os erros identificados pelo sistema, pois o SonarQube analisa segundo seus padrões rigorosos. O que ele considera um erro, pode não ser realmente um problema em nosso código. Portanto, é preciso revisar e marcar se realmente se trata de um erro ou se não há necessidade de correção nas nossas condições. Assim, reduzimos o número de erros. Com o tempo, o sistema aprenderá a entender essas nuances.
Aonde chegamos
Nosso objetivo era entender se, no nosso caso, era viável traduzir a verificação de código para automação. E o resultado superou as expectativas. O SonarQube nos permite trabalhar com as linguagens que precisamos, realiza uma análise bastante precisa e tem o potencial de aprender com as sugestões dos desenvolvedores. No geral, estamos satisfeitos com nossa primeira experiência utilizando o SonarQube e planejamos avançar nessa direção. Esperamos que, no futuro, possamos economizar mais tempo e esforço na verificação de código e torná-la mais qualitativa, eliminando o fator humano. É possível que, no processo, descubramos deficiências na plataforma ou, ao contrário, confirmemos mais uma vez que é uma ferramenta incrível com grande potencial.
Neste artigo de revisão, falamos sobre nosso encontro com o analisador estático SonarQube. Se você tiver alguma dúvida, por favor, escreva nos comentários. Se você está interessado neste tema, em uma nova publicação já detalharemos como configurar tudo corretamente e escrever código para realizar essa verificação.
Autor do texto:
Fonte: habr.com
