Porque usar Lint no seu projeto de testes?
Fala galera!
Esse é um assunto que não vejo sendo muito discutido entre os QA's que eu converso, mas vocês acham que devem passar Lint no seu projeto de teste?
Eu espero que a resposta tenha sido sim :P
Obs: Lembrando que isso vale para todos que escrevem pelo menos uma linha de código, até porque QA's que automatizam também são desenvolvedores.
Antes de eu começar seria interessante saber o que seria o tal do Lint ou melhor dizendo análise estática de código, esse será o nome que utilizaremos daqui em diante.
Análise estática do código nada mais é do que uma depuração do seu código fonte, procurando por possíveis bugs no seu código, verificando erros de sintaxe, complexidade ciclomática de código, também sendo possível a verificação de style code e boas práticas, existem outras possibilidades mas acredito que isso já te faça olhar com outros olhos.
Qual o ganho que eu vou ter realizando uma análise estática do meu código?
Os principais ganhos é automatizar um processo que é demorado e requer muita atenção a cada linha que será analisada, como no exemplo abaixo:
Legal, temos um pedaço de código que só vai no retornar os números que são pares, mas e ai?
Conseguem olhar e já saber quais são os problemas desse código?
Para realizar a análise estática de código em Ruby, vou utilizar o RuboCop que é baseado no Ruby style guide. No link existem uma parte onde ensina como instalar, então vou focar aqui somente em como utilizar e configurar.
Com o rubocop instalado, vamos rodar para saber o que esse código nos apresenta.
Vocês vão olhar e me falar, nossa um código tão pequeno pode existir tantos "problemas" ?
Eu te respondo que sim, e é por isso que quando abrindo por exemplo o Android Studio ele nos da pelo menos 30k de warnings e possíveis problemas.
Vamos refatorar esse pequeno código problemático para seguir as boas práticas?
Agora vamos rodar novamente o rubocop
Podemos ver que agora estamos seguindo as boas práticas e nosso Lint não acusa nenhum problema que fere tais práticas.
Um fator importante é que é possível configurar o que sera verificado através de um arquivo rubocop.yml que deve ficar na raiz do seu projeto, abaixo um exemplo de um que criei e venho usando durante um tempo nos projetos por onde eu passo:
Temos também um ganho em legibilidade do código onde não tenho um código hadouken, onde mesmo que seja pequeno já iniciamos o processo de hadoukenização:
código hadouken:
É de extrema importância ressaltar que o Lint não substitui o bom e velho code review, ele apenas automatiza parte do processo e faz isso muito mais rápido que olhar linha por linha :)
FAÇAM CODE REVIEW
Então da mesma maneira que o lint é passado nos projetos de backend ou front, ele deve ser passado no seu teste, mas por quê?
Seu teste automatizado também é código e por ser código, deve seguir as boas práticas de programação, e seguir o style de cada linguagem. Fazendo isso você garante que quem for pegar seu código para olhar não dar de cara com um mini monstro e sim com um código bonito e fácil de ler.
Nesse exemplo citei apenas de Ruby, mas existem Lint's para diversas linguagens, então não existe desculpa para rodar naquela classe que você acabou de escrever e não se preocupou com a granularidade de seus métodos, nem com complexidade ciclomatica, entre outras coisas.
Espero que esse texto sirva de inspiração para que vocês comecem a passar um lint no código e que isso evolua para um lint que rode numa integração contínua.