Pode ser parte de seu Pipeline de entrega contínua, automatizando parte da revisão.
É verdade, parte da revisão de código pode ser automatizada, e ser colocada no seu pipeline de entrega contínua!
No decorrer deste artigo mostro algumas ferramentas que podem ser utilizadas no Github. A ideia não é entrar em detalhes, mas apresentar que há opções, e explicar o quo cada uma destas opções fazem para você.
Tenho testado algumas destas ferramentas, no meu buscador de vagas, parapasa, se desejar você pode contribuir, o código é open-source (MIT), veja os Pull Request abertos automaticamente, o script de integração contínua é https://netstart.github.io/parapasa/
Iniciantes podem pensar que estas verificações estáticas de código é algo novo, na realidade não. Academicamente, há diversos textos propondo encontrar padrões de código conhecido a busca de conformidade, ou não conformidade. Há cerca de 5 anos eu mesmo escrevi um meio de encontrar padrões de bugs e formatação de código errado, em testes unitários em Java. Para isto, fiz um wrapper de ferramentas ainda mais antigas como PMD, Findbugs e Checkstyle.
Sua equipe compila, gera uma versão e roda os testes manualmente?
Ha várias ferramentas de integração contínua, hoje venho mostrar uma que integra bem em projetos open-source, o Travis, utilizando-se de scripts podemos construir no nosso pipeline de entrega contínua, ou de integração contínua. Nele, configuro o construção
da aplicação, execução de todos os testes automatizados, publicação da cobertura, verificação dos padrões, e até a publicação do projeto em ambiente de produção. A única coisa que você precisa fazer, é criar o script que ele faz tudo, sempre que você precisar.
No caso do meu projeto de busca de vagas, parapasa, parte do script é executado em todas as Pull Request, e sempre que é feito o Merge. O deploy em produção é executado apenas quando algum código entra na branch Master, se entrar, e não quebrar o código da Master é publicado, caso ocorra algum erro, o script é interrompido assim como a sua publicação no ambiente.
Sua equipe verifica se o código está aderente ao convenção?
Há diversas ferramentas para isto, e a boa prática nos direciona para executar estas ferramentas antes de enviar o código para o repositório remoto, mesmo antes de executar na ferramenta de integração continua a fim de antecipar a não aderência aos padrões da empresa. Algumas ferramentas que fazem isto para nós: ESLint, TSLint, Codelizer, Checkstyle, SonarQube. Estas ferramentas, através de plugins podem ser integradas a sua IDE, e te avisar da não conformidade enquanto você digita o código.
Se for do seu interesse, você pode incluir o husky.js em seu projeto de software node.js, afim de incluir no hook do git verificações automáticas, em outras palavras, você pode fazer com que o git execute execute ações como executar o lint, compilar, executar testes sempre quando alguém fizer o push.
Se você não está desenvolvendo sobre o node.js , tudo bem o conceito é o mesmo para outros ecossistemas, você pode entender como os hooks do git funciona e escrever o script você mesmo. O Husk.js apenas facilita algumas coisas.
Como você verifica a qualidade, padrões de bugs, utilização de código lento?
Codefactor, certifique-se de que seu código atenda aos padrões de qualidade. O CodeFactor.io integra-se perfeitamente ao GitHub, realiza instantaneamente o Code Review com cada GitHub Commit ou PR. Tempo de configuração zero. Receba feedback acionável em segundos para qualquer agência. Personalize regras e ignore problemas irrelevantes. Obtenha dicas de refatoração em todos os problemas.
Codacy, é uma ferramenta automatizada de análise/qualidade de código que ajuda os desenvolvedores a enviar um software melhor, mais rápido. Com Codacy, você obtém alterações de análise estática, complexidade ciclomática, duplicação e cobertura de teste de unidade de código em cada solicitação de confirmação e pull. Você pode usar o Codacy para impor seu padrão de qualidade de código, economizar tempo em revisões de código, aplicar melhor as práticas recomendadas de segurança e os desenvolvedores onboard mais rapidamente. Integre com seus repositórios GitHub para obter uma análise de qualidade de cada solicitação pull dentro do GitHub.
Codebeat, cansado de extrair manualmente seu código procurando os menores problemas? O codebeat é uma ferramenta automatizada de análise de código estático que suporta vários idiomas usados por desenvolvedores da Web e de dispositivos móveis em todo o mundo. Agora também fornece análise de estilo para projetos escritos em Swift. SwiftLint, um dos melhores linters para Swift em nosso aplicativo de revisão de código!
Você verifica se a cobertura de teste automatizado mudou?
Seria melhor se no Pull Request já estivesse esta informação, dizendo se a cobertura diminuiu ou aumentou? Além de oferecer esta informação no Pull Request, Coveralls também oferece relatórios do que foi coletado da execução dos seus testes automatizados, incluindo a cobertura por arquivo, quantidade de vezes que seu código foi atingido pelos testes, testes que falharam, entre outras informações.
Você ou sua equipe verifica se uma imagem pode ser menor?
Este é um trabalho manual, que envolve abrir a imagem, e trabalhar nela em um editor de imagem a fim de buscar uma qualidade adequada ao mesmo tempo que diminuimos o tamanho do arquivo (não confunda com as dimensões), lembre-se que estamos falando do tamanho que ele ocupa em disco.
Esta é uma tarefa importante, além de ocupar menos espaço em disco, no seu git, e consumir menos banda de dados, diminuindo assim o custo com o seu provedor de nuvem (cloud provider). Apesar disto, é uma tarefa esquecida, e desprezada por muitos, que pode ser feita de maneira automática.
No marketplace você vai encontrar o ImgBot, que é uma ferramenta que após você dar permissão, irá analisar o seu repositório, e sempre que encontrar uma imagem, irá otimizá-la e abrir um PullRequest com a imagem alterarada. Assim, você só terá o trabalho de avaliar a PR e aprovar.
Você verifica se é possível atualizar alguma dependência do seu projeto manualmente?
Dependabot, é uma ferramenta que visa manter as dependências atualizadas, ele analisa seu projeto, verifica se há uma versão mais nova, ou insegura e abre um Pull Request para você. É uma boa prática, ter em seu projeto alguma ferramenta de integração continua construindo e executando os testes automatizados também nas Pull Requests, assim, você verá se a atualização irá quebrar algo, antes de baixar a PR e averiguar manualmente.
Sua equipe verifica se há alguma dependência do projeto com falhas de segurança?
Snyk está em uma missão para ajudar os desenvolvedores a usar o código aberto e manter a segurança. O Snyk ajuda a encontrar, corrigir (e prevenir!) Vulnerabilidades conhecidas em seus aplicativos Node.js, Java, Ruby, Python e Scala. Snyk é gratuito para código aberto. O Snyk rastreia vulnerabilidades em mais de 800.000 pacotes de código aberto e ajuda a proteger mais de 25.000 aplicativos. 83% dos usuários do Snyk encontraram vulnerabilidades em seus aplicativos, e novas vulnerabilidades são divulgadas regularmente, colocando seu aplicativo em risco.
Conclusão
Todas estas ferramentas que apresentei, podem ser utilizadas individualmente, ao incluir muitas delas, você pode deixar a entrega mais lenta, porém, aumentará a confiabilidade de suas entregas.
Escolha as ferramentas que se adequam ao seu contexto. Elas proverão insumos para identificar códigos que podem ser aperfeiçoados, melhorando a entrega de forma consistente, automatizada e deixando o programador com mais tempo para se preocupar com código de negócio.
Gosto da idéia de ter mais de uma ferramenta de mesmo propósito em meus projetos, uma vez que cada uma mostra a informação de maneira diferente. Logo, isto tende a promover melhor entendimento do que elas estão apontando, tornando a decisão de aceitar ou recusar um Pull Request mais assertiva.
Caso alguma destas ferramentas falhe no seu pipeline, você ainda tem a opção de aprovar a Pull Request manualmente se assim desejar. Elas não irão te impedir, apenas irão apontar possíveis problemas!
Por: Clayton Passos, Remote Software Developer na Invillia