DEV Community

Cover image for Além dos Testes unitários: Não é somente escrever
Marlon Marques
Marlon Marques

Posted on

Além dos Testes unitários: Não é somente escrever

Este artigo expande o tópico anterior sobre Como implementar uma Cultura de Testes Unitários na sua Equipe. Mergulhando mais profundamente nos Testes Automatizados para impulsionar o Desenvolvimento Ágil.

Agora que a sua equipe realiza entregas de funcionalidades com testes unitários. Os incidentes caíram em 90%, não existem mais bombeiros para apagar incêndio, os QAs não encontram mais bugs e estão destinados apenas em validar a qualidade do software. Bem, era isso que eu queria poder dizer, mas não é bem assim rs.

Ao alcançar entregas de funcionalidades com testes unitários, pode-se esperar uma significativa redução de incidentes e uma transição suave para uma cultura de desenvolvimento mais segura. No entanto, a realidade muitas vezes não reflete essa expectativa inicial, como será discutido ao longo deste artigo.

Longo prazo vs Curto prazo

Aprender a arte dos testes unitários enquanto se realiza entregas de funcionalidades não é uma tarefa trivial e impacta o tempo de entrega. No entanto, esse esforço inicial é um investimento fundamental na qualidade a longo prazo. Além dos pontos negativos iniciais, como o esforço adicional e o aumento do tempo de entrega, os benefícios começam a surgir à medida que a equipe ganha experiência.

  • Esforço: Obviamente, escrever testes unitários não é nada fácil. Além de ter que pensar em como validar uma funcionalidade, você tem que saber utilizar artifícios para que isso se torne possível. Alguns desses artifícios são por exemplo: Mock's, Spies etc.

  • Aumento do tempo de entrega: Alinhado ao esforço, acaba-se levando mais tempo para entregar uma funcionalidade, é claro, além de implementar, ainda é necessário testar (que saco 😵‍💫).

Entregas mais rápidas tornam-se possíveis à medida que os desenvolvedores dominam a prática de escrever testes unitários, o que acaba levando a uma redução de bugs encontrados.

  • Entregas mais rápidas: O que antes exigia um maior esforço, acabou-se tornando menos burocrático, devido a experiência obtida na arte de escrever testes unitários, levando a entregas mais rápidas.

  • Redução de bugs: Isso, por sua vez, leva a uma redução significativa nos bugs encontrados durante as revisões das funcionalidades pelos QAs, resultando em menos incidentes após a implantação.

Qualidade do Código

Muitos autores citam que os testes unitários devem ser tão legíveis quanto o código (ou talvez até mais), porém, como você vai escrever um teste legível se você ainda está sofrendo para fazê-lo passar?

A qualidade dos testes unitários é crucial para o sucesso a longo prazo. Embora, inicialmente, os testes possam parecer longos e complexos, a prática constante leva a uma compreensão mais clara e a testes mais eficientes. Com isso, surgem conceitos como Injeção de Dependência e Inversão de Dependência. Abordagens essas, não apenas aprimoram a legibilidade dos testes, mas também contribuem para um código mais limpo e menos acoplado.

Os fantasmas voltam a assombrar a equipe

Vocês estão indo bem, os testes unitários estão evoluindo, mais entregas sendo feitas com testes unitários. Vocês começam a definir uma régua para a Cobertura do Código. Agora todos tem o costume de rodar os testes unitários para verificar se a cobertura de código está sendo respeitada. Porém, o fantasma volta a te assombrar!

Mesmo com o progresso, os testes unitários não são imunes a desafios. A questão dos Testes Não-Determinísticos pode surgir, causando inconsistências nos resultados dos testes. (Para que serve um teste que não podemos confiar? De nada!)

Martin Fowler sugere uma solução prática: mover esses testes para quarentena. Isso envolve segregá-los para que não impactem a confiança nos testes unitários enquanto são analisados e corrigidos.

Integração Continua

Após superar desafios, a equipe amadurece para adotar os Testes Unitários como métrica de confiança e qualidade do software. A Integração Contínua, ativada sempre que um PR é feito para a branch de desenvolvimento, desempenha um papel crucial nesse processo. Alguns pontos importantes a serem seguidos incluem:

  • Com o consentimento da equipe, não reduzir a régua da cobertura dos testes unitários.
  • O PR não é mesclado se a cobertura ficar abaixo do estipulado.
  • Se algum teste quebrar durante a varredura dos testes unitários, o PR não é mesclado até que o teste seja corrigido.

Por fim, algo de suma importância é não dar um passo para atrás. No decorrer desse processo, você pode se deparar com cenários como: Remover a régua da cobertura dos testes unitários, ou abrir uma exceção para um PR de incidente etc. Esses são males que você deve resistir se quiser alcançar um software de qualidade.

Conclusão

Escrever testes unitários vai além da codificação; é uma questão cultural e organizacional. Embora inicialmente desafiador, o investimento em práticas eficazes de testes unitários resulta em entregas mais rápidas, qualidade de código aprimorada e uma experiência mais estável para os usuários. Como defensores da Qualidade de Software, é crucial manter a integridade dos testes unitários, apoiando a equipe para alcançar a cobertura desejada. Em última análise, aproveitar todo o potencial dos testes unitários exige uma abordagem holística e contínua.

Top comments (0)