Concrete Logo
Hamburger button

Testadores de software precisam aprender a programar?

  • Blog
  • 4 de Agosto de 2017
Share

Versão autorizada do artigo Do software testers need to learn coding? de Anand Ramdeo.

__________

Testadores de software precisam escrever um programa? Provavelmente não.

Testadores de software deveriam aprender a programar? Na minha opinião sim, devemos.

Essa questão tem sido discutida inúmeras vezes. Muitas pessoas argumentam que testadores não precisam escrever o código e não tenho nenhum problema com isso. No meu trabalho gasto menos de 20% do meu tempo escrevendo códigos, então isso não é importante.

Em equipes que costumo trabalhar, programadores escrevem felizes testes automatizados: unidade, integração, aceitação, GUI, desempenho. Meu trabalho é frequentemente dividido em fazer testes exploratórios, esclarecendo histórias/requisitos com os analistas de negócios/proprietários do produto, discutindo o que deve ser testado e a melhor maneira de ser testado junto com os desenvolvedores, planejamento/execução de teste end-to-end ou teste do sistema, coordenação de lançamentos em vários ambientes e produção, preparação de dados de teste e muitas outras atividades do tipo.

Escrever códigos é uma parte pequena do meu trabalho.

Então sim, eu concordo que testadores não precisam escrever códigos. No entanto fico perturbado com a visão de que os testadores não precisam aprender a programar. Na minha opinião, testadores precisam aprender a programar. Sem desculpas.

Há muitos benefícios em aprender a programar. Algumas das vantagens que tenho percebido são:

  • Capacidade de programar me deixa confortável em ter/preparar ambientes de teste. Eu não tenho medo de tecnologia e me sinto confiante em poder lidar com isso; posso encontrar os possíveis problemas, pesquiso, peço ajuda e muitas vezes resolvo os problemas rapidamente. Posso facilmente ir mais fundo e fico confiante em lidar com servidores web, bancos de dados, filas de mensagens, sistemas operacionais e assim por diante. Além disso, quando necessário, posso escrever (ou sugerir) scripts para manter, monitorar e preparar ambientes de teste;
  • É mais fácil de conduzir a testabilidade se me sinto confortável em programar. Não preciso escrever o código, só preciso ter uma boa compreensão do que pode tornar o código por trás mais testável. Posso discutir com os desenvolvedores, porque pode ser uma boa ideia testar somente os end-points, hooks no sistema ou configurações test-only. Também posso avaliar as limitações na implementação de alguns deles;
  • Eu posso ver claramente as fronteiras e camadas de sistemas subjacentes. Essa percepção ajuda a evitar a duplicação dos esforços de teste, assim como dá a oportunidade de me concentrar em coisas que são importantes para testar a partir do ponto de vista do sistema;
  • A habilidade de programar dá uma melhor compreensão do processo de liberação de versões. Posso avaliar diferentes estratégias de ramificação; posso ver a importância da integração contínua e posso discutir méritos e riscos de deployments contínuos. Acho mais fácil uma integração contínua para testes automatizados;
  • Posso avaliar e entender melhor as complexidades do desenvolvimento. Acho mais fácil detectar riscos, encontrar problemas na arquitetura, falar a língua dos desenvolvedores, compreender suas decisões de design e ser capaz de contribuir de forma significativa para as discussões técnicas.

Além destas, na minha opinião, precisamos aprender a programar porque o mercado exige. As novas formas de organização das equipes exigem. Nossa forma de desenvolver software está mudando e temos que acompanhar essas mudanças para permanecermos relevantes.

Então, há muitas razões para aprender a programar. Ainda assim, não consigo entender o receio que alguns testadores têm para aprender uma linguagem. Na minha opinião, testadores qualificados devem construir suas ferramentas (e antes que você dê sua interpretação para a palavra: checklists, lembretes etc. são ferramentas) e ter a capacidade de ler, compreender e escrever um código quando necessário pode ser uma ferramenta muito útil para testadores.

Ser um hábil testador e aprender a programar não são mutuamente exclusivos. Na minha opinião, a capacidade de programar é uma habilidade importante para os testadores e a maioria dos bons testadores com quem trabalhei se sentiam confortáveis em escrever um código. Eles não têm que escrever códigos, no entanto estavam à vontade e usaram a sua capacidade de programar para se tornarem melhores e mais eficazes no que fazem.

Antes de falar mais sobre, vou dizer a razão pela qual escrevi este post.

Eu li o texto de Rob Lambert (em inglês) e segui a discussão no Twitter. Havia argumentos habituais de que não é importante aprender a programar e eu pensei: e se mudarmos a pergunta? E se ao invés de mostrarmos os benefícios de aprender uma linguagem, fizermos uma pergunta diferente para entender por que algumas pessoas não estão aprendendo a programar? É o custo de oportunidade, inércia, falta de interesse, medo ou outra coisa?

Eu postei essa pergunta no Twitter e algumas das razões que recebi em resposta foram:

  • Custo de oportunidade
  • Interesse
  • Teste e desenvolvimento são coisas diferentes

Vamos analisar essas razões:

Custo de oportunidade – Aprender a programar leva tempo

Concordo que o aprendizado de uma linguagem leva tempo, no entanto se essa é a única razão tudo bem, porque não há controvérsias sobre a importância de se aprender a programar. Outra razão pode ser a que você precisa estudar outras coisas que vão melhorar seu conhecimento e uma nova linguagem não é importante o suficiente no momento.

Se for este o caso, sugiro que faça uma lista de coisas que você precisa aprender ou está aprendendo. Anotar seus objetivos de aprendizagem irá ajudá-lo.

Analise o que você está ganhando aprendendo uma habilidade especial, como ela pode ajudar sua equipe e como ela pode ajudá-lo a progredir em sua carreira.

Se você tem muitas coisas para aprender e programar está na lista, mas você tomou uma decisão consciente de aprender outras coisas antes de programar, tudo bem. Nenhum problema com isso, basta tomar esta decisão de forma consciente e garantir que você está aprendendo outras coisas constantemente. Contanto que esteja na lista, e você está eliminando itens anteriores a este, está bem.

Falta de interesse – nenhum interesse em programação

Não tenho nenhum problema com este argumento também. Desde que você já tenha aprendido como programar e não queira escrever códigos.

Vou repetir:

Está ok não programar, mas não está ok não aprender a programar.

Eu sei programar, mas não querer fazer isso é diferente de eu não saber como fazer ou não ter interesse em aprender a programar. Tudo bem não ter interesse, mas não use esse argumento se você nunca tentou programar. Faça uma tentativa honesta. Há muitos lugares onde você pode aprender.

Além disso, aprender a programar não significa que você vai ter que programar. Ao aprender, você provavelmente vai entender um pouco mais sobre decomposição de problemas, arquiteturas, as escolhas que os desenvolvedores estão fazendo e tudo o que pode afetar seu teste.

Diferentes competências – Teste e desenvolvimento são diferentes

Sim, claro que são diferentes.

Eu não espero que os testadores escrevam um bom programa e que programadores testem de forma tão eficaz quanto um testador qualificado. No entanto, acredito que:

Nós não estamos no negócio de testes de software. Estamos no negócio de entrega de software.

É uma coisa complicada e acho que é útil ter uma compreensão básica de tudo o que está envolvido na entrega do software. Entregar um software inclui tudo, dos requisitos de desenvolvimento à implantação e suporte ao cliente. Tudo.

Tenho um forte interesse em testes, minha área de foco. No entanto a compreensão de como um software é desenvolvido e entregue me ajuda a testar melhor.

Vejo programação, arquitetura e princípios de design como blocos fundamentais para a entrega de software. Acho útil entender a arquitetura, discutir as decisões de design, ter uma compreensão em vários níveis e esse conhecimento muitas vezes orienta o meu teste. Esse conhecimento se torna uma parte importante do todo.

Estou certamente ciente dos riscos de escrever código ruim e como ele pode afetar o teste. Não estou defendendo que os testadores devam ser generalistas para que se tornem um testador médio e um programador ruim.

O que estou sugerindo é: por favor, não considerem habilidades de desenvolvimento e teste como mutuamente exclusivas. A capacidade de programar é uma habilidade importante para um testador, logo faça um esforço para aprender.

Seria bom saber os seus pontos de vista sobre isso. Quais são os benefícios de aprender a programar? Quais são as outras razões legítimas para os testadores não aprenderem a programar, que eu não estou levando em conta?

Gosta de testar? 😉 Cadastre seu currículo e vem trabalhar com a gente!