Capítulo 3: O Testador também necessita saber programar?

Autores: Karine Birnfeld e Fabrício Ferrari de Campos
Revisora: Anna Carolina Rocha

Introdução

Uma visão comum do Teste de Software é de que ele consiste apenas na execução do sistema, e devido a isso, existe a dúvida se realmente é necessário que um testador de software possua um conhecimento aprofundado de programação para executar suas tarefas.

Quando procuramos na bibliografia pelas tarefas típicas de um profissional da área de teste de software, encontramos atividades que vão desde o planejamento dos testes, especificação, configuração do ambiente, criação da massa de dados, execução manual e automatizada até o registro dos resultados obtidos.

Na verdade o que acontece é que algumas empresas não possuem bem definidas as diferentes especialidades existentes na área de testes de software. Caso um mesmo profissional seja responsável pela execução de todas as atividades de testes, pode-se concluir que este profissional necessita ter bons conhecimentos de gestão de projetos, análise de requisitos, especificação de testes, banco de dados e inclusive bons conhecimentos de programação.

Especialidades da Área de Teste de Software

Este tópico tem como objetivo principal apresentar as diferentes divisões (especialidades) que existem na área de Teste de Software. Para cada especialidade são apresentadas as principais atividades bem como os conhecimentos necessários.

É possível encontrar cinco especialidades diferentes na área de Testes de Software, conforme segue:

  • Líder de Teste / Gerente de Teste / Coordenador de Teste: Planejamento e controle de teste. Deve possuir conhecimento e experiência na área de teste de software, qualidade de software, gerenciamento de projetos e gestão de pessoas.
  • Engenheiro de Teste / Arquiteto de Teste: Organização da infra-estrutura de teste. Necessário possuir conhecimento para instalar e operar o ambiente de teste, realizando a sua administração e suporte a rede.
  • Analista de Teste: Modelagem e especificação de testes. Exigido conhecimento e experiência em técnicas de teste para realizar a especificação dos testes, além de conhecimento em banco de dados, sendo que também é de sua responsabilidade a preparação e aquisição da massa de dados de teste.
  • Automatizador de Teste: Criação e execução de testes automatizados. Um automatizador de teste necessita de conhecimento básicos de testes, porém excelentes conhecimentos e experiência em programação com ferramentas de automação de teste.
  • Testador: Execução dos casos de teste. Necessário conhecimentos para execução de testes e registro de resultados.

Conhecimentos de Programação

Este tópico visa tratar especificamente da necessidade de saber programar para cada especialista da área de testes.

Começando pelo líder de teste, este profissional deve ser capaz de auxiliar sua equipe na resolução de problemas. Para isso, é fortemente recomendável o conhecimento de linguagens de programação para auxiliar sua equipe. Além disso, este profissional precisa saber utilizar ferramentas de gerenciamento de projeto, bem como testwares e ainda ter boas habilidades na gestão de pessoas.

O engenheiro de teste necessita saber programar, pois ele precisa ser capaz de coletar informações no código fonte do programa para realizar as configurações e parametrizações necessárias no ambiente de teste, além disso, ele também necessita de conhecimentos de programação para entender a arquitetura do software e, com isso, conseguir disponibilizar um ambiente mais próximo possível do ambiente de produção.

Já o analista de testes não precisa ter excelentes conhecimentos de programação, mas necessita ter bons conhecimentos de lógica de programação para inferir sobre os testes que deverão ser realizados. Este conhecimento em lógica de programação auxiliará o analista de testes na identificação dos principais pontos em que uma falha pode ocorrer. Além disso, o analista de testes necessita saber analisar os requisitos do cliente, visando extrair o máximo de cenários de teste possíveis.

Para o automatizador de teste, sem sombra de dúvidas, é exigido excelente conhecimento em programação, visto que sua atividade gira em torno da criação e execução de scripts de teste em diferentes linguagens de programação, dependendo da ferramenta de automação utilizada.

Referente ao testador, cujas atribuições incluem a execução dos testes manuais e registro dos resultados obtidos, não é obrigatório possuir conhecimentos de programação. Este profissional pode tanto ser um profissional da TI como um profissional que tenha bons conhecimentos do negócio a ser validado no sistema. Porém, isso depende muito do nível em que o teste é especificado e do tipo de projeto. Caso existam profissionais que não sejam da área da TI, ou seja, não possuam conhecimentos em lógica de programação, banco de dados e sistemas operacionais, por exemplo, a especificação dos testes a serem executados deverá chegar ao nível de detalhe dos procedimentos de teste, fornecendo a este testador cada passo que ele deverá realizar para executar os testes.

Como é trabalhoso realizar a especificação de teste até o nível dos procedimentos, é mais fácil para as empresas contratarem profissionais que já tenham essa base de conhecimento de TI, podendo ser utilizada uma especificação de testes num nível mais alto, visto que um profissional da área de TI saberá realizar uma validação em banco de dados ou realizar operações em diferentes sistemas operacionais.

Programação a serviço do Teste de Software

Como vimos, o conhecimento de programação se fará necessário dependendo da especialidade que o profissional pretende seguir, sendo que em algumas delas conhecimentos de programação são essenciais. Além disso, há outros fatores que poderão influenciar na necessidade do profissional de teste saber ou não programar, dentre os quais os principais são:

  • Cultura da empresa: dependendo dela, pode haver uma forte tendência a execução de testes manuais, o que não demandaria conhecimentos de programação; por outro lado, poderia haver uma forte tendência na automação dos testes, onde aí sim, se faz necessário possuir conhecimentos de programação;
  • Metodologia adotada: hoje em dia, com o crescimento das metodologias ágeis, acaba se tornando importante/diferencial o profissional de teste saber programar, se ele desejar atuar numa equipe ágil, uma vez que metodologias ágeis, incentivam a automação dos testes.

Além disso, o conhecimento de programação pode agregar muito ao profissional e tornar o seu trabalho mais efetivo, tanto no planejamento de um teste, uma vez que se ele tiver conhecimentos de programação, poderá ter insights mais específicos (por exemplo, fazer “injeções SQL“), como também poderá utilizar esse conhecimento para automatizar testes de regressão ou criar massa de dados, e assim poupar o seu tempo com tarefas repetitivas.Ou seja, mesmo se o profissional não for usar na prática o seu conhecimento sobre programação, ele poderá ser muito útil para a execução das tarefas habituais de um profissional de Teste de Software, uma vez que ele terá uma percepção mais afinada, sob uma perspectiva técnica, quanto ao comportamento do sistema. Deste modo, poderá fazer asserções mais pertinentes e elaborar casos de testes mais complexos.Quando falamos em automação na área de Teste de Software, dificilmente poderemos abdicar de profissionais com conhecimento de programação, por mais que existam ferramentas que sejam fáceis de serem utilizadas para automatizar os testes, como por exemplo o Selenium IDE. Isso porque, geralmente, há certos cenários de testes mais complexos, que demandarão um uso mais avançado da ferramenta, o que muitas vezes, envolve o desenvolvimento de algum script.Dentre as vantagens que podemos ter quando sabemos programar, citadas pelo Shmuel Gershon, estão:

  • O testador é capaz de entender os tipos de problemas que o aplicativo pode apresentar, pois o testador pode montar seu modelo mental de como o software funciona por dentro e testar os limites desse modelo.
  • O testador é capaz de fazer testes automáticos quando necessário. Talvez até mais importante, a criação de pequenas ferramentas que facilitam a configuração rápida do sistema, ou que recolhem dados para relatórios podem fazer do testador um jogador importante com influência na equipe toda.
  • Facilita a comunicação com os programadores.

Conclusão

O Teste de Software já passou por grandes evoluções e tende a continuar evoluindo. Caso o profissional de testes não acompanhe esta evolução, no sentido de se interar de novas tecnologias e aprender a arte da programação, será sempre apenas um testador de software, visto que para todas as demais especialidades é exigido ou fortemente recomendado este conhecimento.

 

Referências Bibliográficas

[1] Spillner, A., Linz T., Schaefer H. (2007) Software Testing Foundations. Santa Barbara, Rocky Nook, 2nd Edition.