SonarQube e IntelliJ IDEA: integração correta


O SonarQube é uma excelente ferramenta para introduzir análise de código estático no processo de desenvolvimento de software. Ele suporta o Java usado em nossa empresa e um grande número de outras linguagens de programação.


No momento, essa ferramenta entrou em nossas vidas, seguindo um estilo único de código e protegendo-o contra vários tipos de erros. Os erros são encontrados ao criar no IC ou antes de aceitar uma solicitação de recebimento no armazenamento com versão. Todos os erros encontrados são exibidos na interface da Web, onde você pode estudá-los e gerenciá-los.


No entanto, o problema é que uma interface conveniente baseada na Web não significa a conveniência de eliminar os comentários encontrados no código do projeto. Para fazer uma correção, é necessário primeiro verificar em qual arquivo essa observação se encontra, abrir o arquivo e só então fazer uma correção. Isso também leva ao fato de o desenvolvedor aprender sobre um problema com um atraso muito grande (às vezes a análise no SonarQube pode levar dezenas de minutos), o que não contribui para manter a pureza do código.


Para facilitar a vida dos desenvolvedores de nossa empresa usando o IntelliJ IDEA, compilei as instruções. E depois percebi que poderia ser útil para um círculo mais amplo de especialistas e decidi colocá-lo em acesso público.


Algumas palavras sobre minha empresa

Como meu artigo é o primeiro no blog corporativo da NPO Krista, escreverei algumas palavras sobre minha empresa.


O campo de nossa atividade é a tecnologia da informação para os governos estadual e municipal. Estamos preocupados com a eficácia das reformas do governo, a eficácia do governo, a qualidade dos serviços públicos, a transparência dos relatórios financeiros, a abertura de dados orçamentários para a população, etc.


A história da empresa começou em Rybinsk. Às vezes, os turistas visitam nossa cidade, viajando de barco no Volga. Procure no mapa perto do reservatório de Rybinsk. A geografia moderna de nossos centros de produção, filiais e escritórios de representação é muito mais ampla, mas o principal centro da NPO "Krista" ainda está localizado em Rybinsk.


Primeiro, vamos ver quais inspeções o SonarQube geralmente suporta. Primeiro, essas são nossas próprias inspeções, que são fornecidas na entrega padrão. Além disso, também existem plugins para integrar vários analisadores de terceiros:


  • Checkstyle
  • Spotbugs (anteriormente chamados FindBugs, mas renomeados juntamente com a renomeação do próprio analisador)
  • PMD

Cada inspeção individual pode ser configurada individualmente e combinada em perfis, permitindo que você tenha um único conjunto de inspeções para toda a empresa. Assim, em nosso perfil principal, mais de 1200 inspeções diferentes são ativadas. É claro que ninguém é capaz de manter tantas regras em sua mente, o que significa que após cada estágio de escrita do código, o estágio de edição dos comentários do SonarQube segue. E quanto menor esse estágio, menos doloroso é para o desenvolvedor. Então, como isso pode ser simplificado?


Para resolver esse problema, vários IDEs possuem plugins que permitem extrair informações do servidor SonarQube e exibi-las diretamente no editor de código. No caso do IntelliJ IDEA, este é, antes de tudo, o SonarLint - o plug-in oficial dos desenvolvedores do próprio SonarQube. Ele usa apenas um perfil do servidor com as configurações de inspeções ativas, e a própria análise faz um ataque direto no IDE. Isso melhora significativamente a qualidade do desenvolvimento, permitindo que você veja imediatamente todos os novos comentários e os corrija rapidamente. Mas há uma mosca na pomada. O SonarLint trabalha exclusivamente com as próprias inspeções do SonarQube, ignorando completamente todas as outras inspeções. Você não verá comentários de FindBugs, nem de CheckStyle ou PMD. Mas pode conter muitas informações valiosas.


Mas não se desespere: o servidor SonarQube pode exportar configurações para todos os analisadores, o que significa que é possível configurar os plug-ins IDEA padrão para que eles produzam um resultado equivalente ao do servidor.


Vamos lidar com essas configurações em ordem.


Configurar o SonarLint


Não há truques aqui. Vamos às configurações do IDEA e, na seção Plugins , encontramos o plugin SonarLint e o instalamos.



Inicialmente, o plug-in usa as configurações de inspeção padrão. Agora você pode ir para a janela do plug-in e configurar a conexão com o servidor SonarQube. Como é melhor ver uma vez do que ler centenas de vezes, apenas darei uma série de capturas de tela da sequência de configuração. Daqui em diante, os locais que requerem atenção serão circulados em vermelho. Esses são os campos a serem preenchidos, os botões nos quais você deseja clicar ou os sinalizadores que você deseja trazer para a exibição especificada:








O principal é não esquecer de clicar em Update binding após adicionar um novo servidor para que o plug-in carregue o perfil com as configurações. Este botão deverá ser pressionado sempre que o perfil for alterado no servidor (inspeções adicionadas / removidas, alteradas suas configurações).


Se você conectou vários módulos em um projeto IDEA, nas configurações você terá que mudar para um módulo específico sempre que precisar analisá-lo para obter comentários. Isso não é muito conveniente, mas é.


A lista de comentários será atualizada automaticamente em segundo plano sempre que um novo arquivo for aberto ou forem feitas alterações nesse arquivo. Se esse comportamento for indesejável, você poderá desativá-lo nas configurações do plugin.


Um exemplo de como o trabalho com o SonarLint pode ser visto abaixo (a imagem é clicável):



Se algo desse errado

Há situações em que o SonarLint, por algum motivo, se recusa a trabalhar. Nesse caso, na janela do SonarLint, você pode ir para a guia de log e ver o que aconteceu. Infelizmente, as informações desse log nem sempre são claras e suficientes.


Por exemplo, após a última versão do IntelliJ IDEA (2019.2), parei de trabalhar com este erro:



É muito informativo ... E não consegui descobrir como obter mais informações por conta própria.


A situação foi salva pelo FAQ no site da SonarQube . Acontece que na janela do SonarLint no IDEA, você pode alterar o nível do registro de erros:



Se você selecionar os itens selecionados, um registro mais detalhado começará a aparecer, a partir do qual você já poderá entender o que está acontecendo:



Sim! Agora o erro apareceu e ficou claro o que estava acontecendo.


De fato, houve um conflito de versão desagradável. Nossos aplicativos ainda usam Java 8 e são testados no SonarQube 7.1. Ao mesmo tempo, todo o processo de produção está vinculado aos recursos do SonarQube para analisar a diferença de erros entre o principal ramo de desenvolvimento e o Pull Request.


Mas o mais desagradável é que, desde o SonarQube 7.2, esse recurso foi pago, e é por isso que ainda não atualizamos para a versão mais recente. E o suporte ao Java 11 foi implementado apenas no SonarQube 7.3.


Outro ponto importante é que o plug-in do SonarLint, ao analisar o código, compila o código-fonte com a ajuda do JRE executando o IntelliJ IDEA. Enquanto o IDEA trabalhou no Java 8, tudo estava bem conosco. Mas quando passou a usar o Java 11 na versão 2019.2, tudo desmoronou, porque na verdade há compilação no bytecode do Java 11 ( arquivo de classe versão principal 55 ) e é analisado pela versão do analisador que está instalado no servidor, t ou seja, não suporta este formato de bytecode. E esse é um problema conhecido .


Aparentemente, você precisa procurar com urgência maneiras de atualizar o SonarQube para a versão mais recente. Talvez usando um plug-in de terceiros, o sonarqube-community-branch-plugin que ofereça as funções que precisamos.


Download das configurações do analisador do SonarQube


Cada um dos plugins, exceto o SonarLint, precisa de seus próprios arquivos de configuração, cada um em seu próprio formato. Felizmente, o SonarQube pode baixar esses arquivos. Eles estão localizados na janela de configurações do perfil de análise.


Para chegar lá, você precisa ir para a seção Quality Profile na interface da Web do servidor SonarQube e selecionar o perfil usado para analisar o projeto:



Na página que se abre, é exibida uma seção que fornece links para configurações de exportação para cada um dos analisadores:



As configurações de FindBugs e PMD devem ser carregadas em um disco local com a extensão XML , mas as configurações do CheckStyle podem ser usadas diretamente a partir da URL do site.


Configurar CheckStyle


No IDEA, o plug-in é chamado CheckStyle-IDEA . Este é talvez o plug-in mais livre de problemas em termos de uso, pois permite carregar as configurações diretamente por URL e não requer alternância entre módulos, como o SonarLint.


Para conectar a configuração, vá para as configurações da IDEA e selecione a seção CheckStyle . Em seguida, você precisa adicionar um novo item à tabela Configuration File :



E indique a fonte da configuração:



Além disso, não esqueça de marcar a configuração recém-adicionada como ativa na tabela da janela de configurações.


É isso, agora você pode ir para a janela CheckStyle e iniciar a análise (o botão superior selecionado):



Se o perfil no servidor SonarQube mudou, você precisa atualizar as configurações clicando no botão correspondente na mesma janela (o botão marcado na parte inferior).


Se algo desse errado

No caso do erro "O arquivo de regras do Checkstyle não pôde ser analisado", ou seja, "SuppressionCommentFilter não é permitido como filho no Checker", é necessário diminuir a versão do Checkstyle nas configurações de plug-in usadas no servidor SonarQube. A conformidade da versão pode ser encontrada na tabela na descrição do plug-in Checkstyle para SonarQube.


Configurando FindBugs


No IDEA, o plug-in é chamado FindBugs-IDEA . Ao contrário dos plugins anteriores revisados, este não pode receber configurações diretamente do servidor e requer um arquivo local.


Para conectar a configuração, vá para as configurações da IDEA e selecione a seção FindBugs-IDEA . Em seguida, na guia Filter , adicione um novo item à tabela Include filter files :



O plugin está pronto para uso. Em sua janela, você pode iniciar a análise de um único arquivo e de todo o projeto ou qualquer outra águia-pescadora para escolher:



Nota importante 1: nas configurações do plug-in, há uma guia Share , na qual é proposto conectar o arquivo de configurações do SonarQube. Não recomendo usar essa configuração, porque ela não funcionou corretamente, mas as consequências são tratadas de maneira não trivial. O fato é que apenas a exclusão dessa configuração não funcionou. O plug-in não começou a funcionar normalmente. Para restaurar o trabalho, tive que excluir o .idea/findbugs-idea.xml no diretório do projeto e reconfigurar tudo novamente.


Nota importante 2: Se as configurações no servidor SonarQube foram alteradas, você deve enviá-lo para o disco novamente.


Nota importante 3: infelizmente, o desenvolvimento deste plugin foi interrompido após o desenvolvimento do FindBugs em si ter sido transferido para o fork dos SpotBugs. No bugtracker do JetBrains, há um ticket sobre este tópico. Portanto, se, junto conosco, você quiser suporte completo para todos os comentários do SonarQube em casa, no seu IDE favorito, poderá votar neste ingresso. Talvez o carrinho se mova.


Configuração PMD


No IDEA, o plug-in é chamado PMDPlugin. Semelhante ao FindBugs, este plugin requer um arquivo de configurações no disco. Para configurar, acesse as configurações do IDEA e adicione o arquivo baixado do SonarQube:



O nome do arquivo tem um papel importante, porque no futuro será usado pelo plug-in para formar o item de menu correspondente para iniciar a análise.


Também na contribuição vizinha, você deve especificar a versão do Java que o projeto usa (bem, a codificação ao mesmo tempo):



Agora você pode iniciar a análise do arquivo atual usando o menu de contexto:


 Run PMD->Custom Rules-><  > 

Nota importante 1: O PMD também pode ser iniciado pelo menu principal, mas isso não é recomendado, pois nesse caso, nenhum arquivo será verificado, mas o projeto inteiro será aberto no IDE. Isso pode levar muito tempo e sobrecarregar significativamente o sistema.


Nota importante 2: Como o FindBugs, o PMD requer um arquivo de configuração no disco. Portanto, você deve atualizá-lo sempre que as configurações do perfil do SonarQube forem alteradas.


Conclusão


Em resumo, observo o seguinte. Apesar de você precisar gerenciar as configurações de até 4 plugins para rastrear comentários, ainda é melhor do que esperar cada vez que os resultados da edição apareçam no servidor SonarQube e permite que você comprometa imediatamente um código mais limpo.


Espero que as informações aqui apresentadas ajudem alguém mais fácil a fazer amizade com analisadores estáticos em geral e com o SonarQube em particular.


Também quero agradecer aos meus colegas que me ajudaram a escrever e apoiar a relevância deste artigo: Dmitry Zimichev, Yuri Krupin e Artyom Ganev.

Source: https://habr.com/ru/post/pt469963/


All Articles