O Testador também necessita saber programar?

A oitava Mesa Redonda DFTestes de 2010 teve como tema “O Testador também necessita saber programar?”, 29 respostas e  20 participantes, sendo eles: eu, Ismael Munchen, Milton Vopato, Felipe Silva, Ronaldo Cruz, Rodrigo Souza, Rodrigo Almeida de Oliveira, Anna Carolina Rocha, Edwagney Luz, Andrea Cruz, Shmuel Gershon, Jorge Diz, Eduardo Gomes,  André Dias, Camilo Ribeiro, Renata Eliza, Robson Agapito, Ueslei Aquino, Elias Nogueira e a Sarah Pimentel.

Abaixo, segue o “resumo” dessa excelente discussão (para conferir-la na íntegra, basta acessa esse link).

O Testador também necessita saber programar?

O Milton Vopato acredita que programação é um conhecimento que pode ser uma vantagem competitiva ao profissional da área de Teste de Software:

A rigor, não é necessário saber programar para realizar certos tipos de teste, em específico, testes funcionais, pois são validações em alto nível das regras de negócio, mas eu particularmente, acredito que qualquer profissional de TI, deve conhecer não só programação, mas o ciclo de vida de um software por completo (Requisitos, Desenvolvimento, Teste, Implantação resumidamente). Mesmo não sendo obrigatório conhecimentos de programação no teste, eu vejo como uma vantagem competitiva muito importante, para entender melhor o problema, desenvolver automações e participar de reuniões com dev. para discutir o defeito encontrado.

O Felipe Silva lembrou que para automação é fundamental você saber programar, e que um dia quem poderá ter tal papel é você, portanto é importante se aperfeiçoar:

Um dia pode ser você o escolhido para automatizar, estar preparado para pelo menos aceitar o novo desafio proposto com certeza te fará bem visto pela empresa. Ainda que não use no momento o seu conhecimento em automação no projeto, você pode criar uma automação de suporte ao seu dia dia, automação não é apenas criar o script de teste funcional de uma funcionalidade do projeto, mas sim é simplificar as suas tarefas, seja criando um pequeno aplicativo que te ajude a manter algum tipo de informação para gerar futuros relatórios, criando um macro no “office” e/ou qualquer coisa que aumente a tua produtividade. Pense à frente, seja criativo, MUDE para melhor!

Para o Ronaldo Cruz o testador não precisa conhecer programação ao nível de conseguir criar um sistema, mas o básico poderá ser muito útil, já que irá ajudar a realizar melhor as suas tarefas de Teste de Software:

Penso que quando se fala que o testador precisa saber programar, a maioria imagina que o testador necessita de conhecimentos a nível de criação de sistemas. Na verdade, o profissional não precisa chegar a tanto (só se quiser é claro), mas precisa conhecer o básico da linguagem. Isso ajuda em planejar melhor os testes, saber o que é efetivamente erro ou não e melhor explicar os bugs a equipe de desenvolvimento.

E o Ronaldo Cruz ainda finaliza o seu comentário dizendo:

Então do meu ponto de vista, o testador precisa saber programar? Sim, bem como também precisa saber analisar requisitos, mexer em banco de dados, ter conhecimentos em infra ou suporte.

Um ponto interessante levantado pelo Rodrigo Souza, foi em relação ao seu contexto:

O quanto é necessário destes conhecimentos, cada projeto, cada empresa e cada teste vai variar, e com certeza só acresce ao testador. Ter esses conhecimentos ajuda muito, claro que o profissional não vai ser o melhor programador e trabalhar com testes, mas dependendo do projeto sim teria que ser um ótimo programador, afinal quem são os tester do Eclipse e outros? se não tester com muito conhecimento em programação.

O Rodrigo Almeida compartilhou uma experiência que teve na sua empresa:

Em se tratando de automação de testes de software, aqui na empresa só obtivemos resultados satisfatórios depois que trocamos todas as pessoas que não eram programadores por programadores. As ferramentas de automaçao exigem que você saiba programar. Não tem jeito mais de voltar atrás neste cenário.

A Anna Carolina compartilhou a visão de pessoas que tem outras preferência na área de TI, até porque a área de TI não é feita só de programadores, nela há espaço para os mais variados tipos de perfis, e na área de Teste de Software há espaço tanto para quem gosta de programar quanto para quem não gosta:

Embora eu adore a área de informática, eu me considero uma pessoa muito comunicativa e não consigo passar o dia inteiro simplesmente olhando pra tela do computador programando. Logo, eu considero não possuir o perfil de programadora.
Fui em busca de outras áreas dentro da informática que me permitissem maior interação com outras pessoas, sejam elas usuários ou colegas da informática. Como a primeira opção que minha primeira chefe me passou com este perfil foi a área de testes, comecei a estudá-la e me apaixonei por ela. E cada vez menos dei importância para a programação.
Não trabalho com testes automatizados, então talvez a programação não me faça tanta falta. Mas é claro que também não estou na situação de quem não sabe nada: se você me pedir para escrever um código para resolver tal problema, eu talvez não consiga ou leve muito tempo para fazê-lo, pois gastarei muito procurando a sintaxe correta e as funções a serem usadas. Mas se eu preciso analisar um código que está dando problema, eu consigo assimilar o que foi feito pelo programador e raciocinar em cima disso para localizar a origem do erro.

A visão do Edwagney sobre o tema:

Minha visão desse tema vai um pouco mais além do conceito de saber programar para encontrar problemas mais rápido, ou abrir o código e entender. Saber programar e sobre banco de dados e etc,  significa conhecer a mente de quem está por trás de um trabalho. Conhecer a mente de um programador, conhecer a mente de quem modela banco de dados, etc. Partimos do pressuposto de que conseguimos entender que TODOS são seres humanos e erram, mas com a vantagem de conhecer quais os principais pontos em que uma falha pode ocorrer durante um trabalho de codificação, por exemplo. Nossa função é fazer um forte elo entre o que pensa o cliente e quem desenvolve o projeto e fazer com que o produto acordado entre os dois saia o mais próximo possível do estimado.

A Andrea acredita que é necessário ter conhecimentos básicos, mas que ainda não é imprescindível saber programação, para poder trabalhar na área de Teste de Software:

Ao meu ver saber programar, ou ter pelos menos conhecimentos básicos de Lógica de Programação, if..then, case, for (i=0..10) é importantíssimo para alguém que trabalhe na Área de Teste de Software porém hoje ainda não é imprescindível. Quem tem algumas noções pode se encaixar em qualquer projeto, ler qualquer Diagrama de Estado, Diagrama de Sequência, Fluxograma e ter uma noção plena de como funciona o fluxo do sistema como um todo.

O Shmuel citou as vantagens que o testador irá ter, caso conheça programação:
– O tester é capaz de entender os tipos de problemas que o aplicativo pode apresentar, pois o tester pode montar seu modelo mental de como o software funciona por dentro e testar os limites desse modelo.
– O tester é 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 tester um jogador importante com influência na equipe toda.
– Facilita a comunicação com os programadores. Bom ponto levantado pelo Milto e Felipe. Gostaria de dizer: “Programadores são seres que, bem, só entendem a linguagem de programadores, fazer o que :)”  mas como gosto muito dos programadores vou dizer diferente: É mais fácil conversar com eles quando nos colocamos no mesmo contexto que eles.

O Shmuel ainda falou sobre o que eu acredito ser o conhecimento mais importante para o testador, conhecer o domínio em que atua, utilizando um ótimo exemplo:

Cem Kaner uma vez comentou que “Eu não aceitaria um estudante de informática ou doutorado em meu laboratório se eles tem habilidades de comunicação fracas. Pela minha experiência essa característica é mais importante para o sucesso do que habilidades de programação”
A visao de Kaner, nos artigos que ele escreve sobre recrutamento de testers, é que os times devem ser heterogêneos, e nem todos devem saber programação. O conhecimento da area sobre a qual o software atua (domain knowledge) é essencial para se ter testes efetivos.

Por exemplo:
Se você estiver montando uma equipe para testar um software que faz transações na bolsa de valores, qual tipo de pessoas você recrutaria? Que soubessem programar ou que entendessem do mercado de ações? A melhor resposta, diz Cem, é “pessoas de ambos os lados”.

Pessoalmente, se eu tivesse que escolher um dos extremos, eu iria recrutar alguém com experiência no mercado de ações.  Ei, mas ele não sabe programar! Bom, o usuário final também não! 🙂

O Ismael Munchem acredita que:

Um testador com conhecimentos em programação seria mais completo. O conhecimento da linguagem não precisa ser um requisito para contratação, mas deveria ser algo a aprender em seguida.

O Jorge Diz começou o seu comentário fazendo uma analogia com o futebol:

A analogia que imaginei foi o futebol: “O Goleiro também necessita saber chutar ?”. Ai começou a cair a ficha: no futebol, o papel do goleiro está bem definido, com regras
claras sobre o que se espera dele em campo. Não acontece o mesmo com o profissional de testes: em particular, o “testador” poderia ser identificado como aquele que segue roteiros repetitivos, criados por outro profissional mais graduado (“analista de teste”). Seguindo com a analogia futebolística, a pergunta ficaria: “O Gandula também necessita saber chutar ?”

Em seguida, o Jorge expressou a sua opinião, frisando bem que a repetição de trabalho no Teste de Software é algo que deve ser evitado, e uma das soluções para isso é justamente a automação, mas a mesma não resolve tudo:

O papel de testador como subalterno seguidor de roteiros escritos está condenado. Não acredito, no médio prazo, haver espaço para que uma pessoa faça tarefas
repetitivas e alienantes de maneira produtiva, e mantendo um mínimo de motivação. Talvez uma exceção sejam as pessoas com um certo grau de autismo, como exemplificado pelo trabalho de empresas e organizações como Specialisterne na Dinamarca e Aspiritech nos EUA. Vejam, por exemplo, este artigo de Harvard: http://hbswk.hbs.edu/item/5869.html

Não descarto teste manual. Acredito, sim, em sessões exploratórias guiadas pela experiência, feitas por profissionais com perfil investigativo, utilizando recursos e conceitos de tecnologia para identificar e localizar defeitos no software de maneira similar aos policiais e peritos forenses do seriado CSI. Não imagino este perfil profissional sem um mínimo de vivência em diversas áreas de TI, incluindo desenvolvimento: infelizmente, não é o perfil procurado hoje pelas empresas quando é anunciada uma vaga de testador.

Note-se que nem falei ainda de automação: parece ser consenso do grupo que nesse caso o conhecimento de programação é indispensável. Reforço, no entanto, que automação não é tudo.

Outro papel do profissional de testes deveria ser o de promover a testabilidade dos sistemas. Para isto, é necessário conhecer bem padrões de arquitetura de software, orientação a objetos, técnicas de dublês de testes, injeção de dependência, polimorfismo, concorrência… Em minha opinião, isto vai muito além de if, for, while …

O Eduardo Gomes lembrou muito bem que a maneira como o testador faz os testes (caixa-branca e caixa-preta) irá exigir conhecimentos específicos e diferentes:

Entendo que a questão do testador ter ou não que saber programar merece uma análise conforme o contexto.

Se estamos falando de testes nos níveis mais baixos (unitário e integração), é interessante que o testador conheça bem lógica de programação, a sintaxe e a estrutura da linguagem utilizada na construção da aplicação, aspectos sobre o banco de dados utilizado e a arquitetura da solução. Além disso, pode ser necessária a construção de drivers ou stubs e o conhecimento de programação será muito útil.  Lembremos que esses testes são predominantemente caixa-branca.

Mas se falamos dos testes no nível de sistema ou mesmo dos testes de aceitação realizados pelo usuário, esse conhecimento para os testadores passa a ser menos relevante, pois o foco será a validação dos requisitos e das necessidades do usuário.  Trabalhamos muito mais com testes caixa-preta.

O Camilo Ribeiro levantou um ponto interessante, sobre os profissionais de Teste de Software, precisarem ser generalistas:

O Analista de Teste, Engenheiro de Teste, Líder de Teste, ao meu ver, são um generalistas. Não devem encontrar defeitos somente no software desenvolvido, mas em todo o sistema e em todo o processo para o desenvolvimento do sistema (sistema != software).

O que acontece quando um analista de teste resolve se tornar “o sênior” dos testers, sem ter adquirido conhecimento em OO, programação, requisitos, negócios e etc., é que ele se torna um especialista em achar “bugs”. Ele tem cinco certificações, oito cursos “mais ou menos” de teste, MBA em teste de software e etc. Ótimo currículo, para um testador.

Para a Renata Eliza todo conhecimento adquirido poderá ser útil:

Eu acredito que o Tester não necessita ser um desenvolvedor nato, mas precisa conhecer de programação sim. Acho que vale inclusive aquele conhecimento acadêmico, dos tempos da faculdade… Todo e qualquer conhecimento a mais só vai agregar qualidade ao teste.

O Robson Agapito relatou a sua experiência em desenvolver sistemas, justamente para apoiar o processo de Teste de Software, e essa é uma aplicação muito legal do conhecimento de programação, pois é difícil encontrar uma ferramenta que se adeque ao seu processo sem ter que realizar alguma customização:

Como ele foi desenvolvedor , a cada conhecimento adquirido ele foi desenvolvendo uma ferramenta especifica para a sua equipe… e desenvolvendo consultas para que pudesse colher os resultados de testes, além de gerenciar os mesmos. Claro se não fosse desenvolvedor também conseguiria isso, mas como já estava acostumado foi muito mais fácil e muito mais rápido este salto, hoje a equipe dele possui várias ferramentas de apoio que são fundamentais para o andamento e a agilidade da célula (mesmo o tempo ainda sendo um grande vilão dos testes), ganhando sempre em produtividade, deixando as coisas mais automáticas. E a gestão dos testes é bem menos trabalhosa do que na gestão anterior.

Para o Ueslei o conhecimento em programação ajudou no desenvolvimento de sua carreira:

Eu particularmente já passei pela cadeira de desenvolvedor, e isso me ajudou muito quando assumi a posição de gestor de testes em uma empresa e tive que fazer prova de conceito em ferramentas de automação e até mesmo em executar automação.

A empresa tinha resistências em investir em profissionais especializados e de acordo com a demanda de trabalho, eu trocava o boné e ora testava, ora gerenciava, ora automatizava e ainda treinava outros testers na ferramenta.

O Elias apresentou os cargos existentes na nossa área, é comentou que pessoas que conhecem e gostam de programação, costumam ser Automatizadores de Teste:

Se puxarmos para os cargos dentro da área de Teste de software, teremos os abaixo:
– Testador
– Automatizador de Teste
– Analista de Teste
– Engenheiro/Arquiteto de Teste
– Líder/Coordenador de Teste
– Gerente de Teste

Bom, como todos já sabem, já temos um cargo específico para o Testador que sabe programar; o Automatizador de Teste.

A Sarah fez o seu comentário relacionando o cargo com o conhecimento de programação necessário:

Testador
Não precisa saber programar.
Mas ter boas noções de programação ajuda a encontrar bugs e reporta-los adequadamente.
Automatizador de Teste
Nem precisa comentar 🙂
Precisa saber programar e BEM.
Analista de Teste
Não precisa saber programar.
Mas saber programar ajuda muito a avaliar a aplicação e inferir sobre os testes que serão realizados, escolha das técnicas aplicadas e análise de riscos.
Engenheiro/Arquiteto de Teste
Precisa saber programar, conhecer design patterns também. Deveria participar de reuniões de revisão de arquitetura e de código para ajudar a encontrar bugs mais cedo no projeto.
Líder/Coordenador de Teste
Eu vejo esse papel como se uma pessoa que sabe se virar muito bem tecnicamente. Isso inclui programação também. Não quer dizer que a pessoa precise saber tudo de tudo, mas deve ser capaz de auxiliar sua equipe a encontrar respostas. Fica mais fácil quando se tem o conhecimento.
Obviamente fora o técnico também precisa ter bons skills pessoais.
Gerente de Teste
Houve uma época que se dizia que um gerente não precisava conhecer o que estava gerenciando, apenas “gerenciamento”. Eu sempre discordei. Não imagino como alguém consegue gerenciar o que não conhece.
O gerente realmente não precisa saber programar.

Conclusão

Essa mesa redonda foi uma das mais produtivas, e para mim os seguintes pontos ficaram claros:

  • Na área de Teste de Software há espaço tanto para pessoas que sabem e gostam de programar, como para pessoas que não sabem ou não gostam de programar;
  • É de extrema importância você saber o que você quer, pois dependendo da função que você deseja exercer, conhecimentos específicos serão exigidos, ou seja, não adianta por exemplo, ter vontade em ser um Automatizador de Teste se os seus conhecimentos sobre programação são limitados;
  • Os profissionais de Teste de Software devem ser especialistas-generalistas! Como assim Fabrício? Devem ser especialistas em Teste de Software e no domínio que atua, e ainda precisam ter bons conhecimentos sobre as tecnologias utilizadas na sua empresa; (tava achando que a vida de um profissional de Teste de Software é moleza!?)
  • Programação é um conhecimento importante na nossa área, mas dependendo da sua realidade, é capaz que você nunca venha a precisar utilizá-lo, mas não é por isso que você precisa ignorá-lo;
  • Ao se especializar em programação e automação, não podemos perder o nosso mindset de profissionais da área de Teste de Software, pois somos “representantes” dos usuários finais, portanto precisamos saber falar e pensar na “língua” do usuário final, na nossa e ainda na dos programadores.

Bem pessoal é isso. Continuem de olho na lista do DFTestes, pois sempre há assuntos bem interessantes lá, e poderão haver novas respostas nessa mesa redonda.

Fique por dentro das novidades, assine o feed do QualidadeBR.

Um comentário sobre “O Testador também necessita saber programar?

  1. Pingback: ITester testEngineer = Tester.Developer(Discipline testing); | The Bug Bang Theory

Deixe um comentário