É importante um testador de software saber programar?

Iniciei minha carreira como estagiária, no cargo de Desenvolvedora Java WEB. Acredito que isso tenha sido o ponta pé inicial para eu entender como seria o mundo real fora da universidade. Antes desse estágio, tudo era muito complexo e os projetos da universidade não pareciam ser suficientes para alguém realmente usar.

O estágio me ajudou a compreender mais as disciplinas do curso de computação. Após 2 anos como desenvolvedora Jr, surgiu a oportunidade de atuar como Líder do time de Controle de Qualidade da empresa, apesar de não ter experiência no assunto, apenas a teoria durante a graduação, aceitei, foi a melhor coisa que me aconteceu.

Durante esses anos de carreira como Analista de Qualidade, alguns estagiários me perguntavam se era necessário saber programar para ser testador. A resposta era “não”, mas gostava de deixar claro que isso não deveria ser um motivo para eles não aprenderem a programar.

Saber programar foi essencial para minha carreira como testadora de software. Pois podia prever possíveis erros nos sistemas baseados na minha experiência. Conseguia até perceber em qual camada da arquitetura do sistema os erros encontrados ocorriam. Isso tornou meus roteiros de teste mais robustos e eficientes, já que sabia que uma falha na interface poderia ocasionar erros na camada de negócio e virse versa.

Em resumo, ter conhecimento de programação pode ajudar o testador a:

  1. Entender a arquitetura do sistema
  2. Criar casos de teste baseados em lógica de programação
  3. Realizar consultas no banco de dados
  4. Identificar camada da aplicação onde a falha ocorre
  5. Realizar testes automáticos
  6. Realizar atividade de revisão de código
  7. Criar scripts de teste com Polimorfismo, permitindo o reuso de código
  8. Configurar ambiente de integração contínua
  9. Realizar controle de versão dos scripts de teste
  10. Usar objetos Mock nos scripts de teste 

Além dos motivos acima, precisamos entender que quando decidimos seguir a carreira de TI, teremos que nos atualizar constantemente. É importante estarmos sempre atentos às novas tecnologias, aos novos frameworks, às novas linguagens de programação, aos novos dispositivos, etc. Ao longo desse tempo, percebi que o teste de software tem evoluído em conjunto com as novas tecnologias.

Montei um breve histórico dessa evolução dos testes nos últimos 15 anos, que pode ser observado na tabela abaixo:



Histórico da evolução dos sistema x testes de software em 15 anos. 

Fonte dos dados históricos: Web Apps, Mobile Apps, Mock Testing, Deep Learning, SeleniumHq, JMeter, Web API, API Testing, WebServices, Microservices, Mockito, SprintBoot, Postman, Appium, Docker, CI/CD, Cypress, ReactJS, VueJS, AngularJS, Jest, Flutter Mobile.

Ao observar a evolução dos testes, na tabela acima, percebemos que cada vez mais há ferramentas de automação para testes de software, que atendem a diferentes contextos. A necessidade de automação dos testes cresce proporcionalmente à medida que novas versões dos sistemas são lançadas continuamente em processos ágeis. Isso torna cada vez mais inviável realizar, manualmente, testes de regressão nos sistemas, para garantir que o sistema continuará funcionando durante sua evolução ou manutenção.

Os testes de regressão possuem menor custo quando automatizados em maior quantidade nos níveis de testes unitários e em menor quantidade nos testes de sistema. A proporção de testes pode ser baseada na Pirâmide de Teste, sugerida por Mike Cohn.

Pirâmide de Teste para guiar a automação dos testes.

Fonte: Fowler, M. The practical test pyramid. 2018 https://martinfowler.com/articles/practical-test-pyramid.html

Um aspecto importante da pirâmide de teste é que os testes não precisam ser duplicados ou triplicados em cada camada. À medida que os testes das camadas inferiores da pirâmide já cobrem grande parte das funcionalidades do sistema, não é necessário refazer os mesmos testes nas camadas superiores.

Apesar da pirâmide de teste ser referente aos testes automatizados, os testes manuais ainda serão necessários. Pois, há cenários subjetivos que não são passíveis de automação. Alguns fatores que podem evidenciar falhas no sistema são: baixa conectividade, usabilidade, sequência de passos no sistema, entre outros.

Uma recomendação para quem está na área de testes de software é aprender técnicas de automação de testes e estudar também os novos frameworks de programação (Reativa, Mobile, API, etc). Dessa forma, esse testador terá um diferencial no mercado, além disso poderá criar casos de teste mais robustos e com maior chance de encontrar defeitos, que é o principal objetivo do seu trabalho.

Vídeo sobre o tema: