Em fevereiro de 2013, um artigo foi traduzido e publicado na InfoQ a respeito da “morte” da área de QA (Quality Assurance – Garantia de Qualidade) e de testes com o advento das práticas do Desenvolvimento Ágil. Segundo o autor, o TDD e os testes unitários, por exemplo, substituem o trabalho dos analistas de teste. Espere aí… como?! Aí que ele se engana, meu amigo…
Antes de iniciar o artigo, gostaria de fazer um grande agradecimento à minha namorada, Beatriz Makiyama, por todo o apoio, motivação e confiança no meu trabalho aqui no blog!
Bom, os leitores que me acompanham sabem que sou um grande adepto ao Desenvolvimento Ágil em virtude da quantidade de artigos já publicados sobre este tema. No entanto, eu acho que esse fanatismo, algumas vezes, chega a ser prejudicial para um agilista e também para a imagem da metodologia. Vários profissionais que estudam e empregam o Desenvolvimento ágil formulam uma mentalidade que se resume em acreditar que essa metodologia é a solução para todos os problemas do desenvolvimento de software.
Uma dessas crenças, por exemplo, é considerar que os pilares do eXtreme Programming, como o TDD (Test-Driven Development), é um mero substituto do trabalho dos analistas de testes. Embora eu seja um entusiasta pelo XP, não afirmo, em nenhuma ocasião, que testes unitários são a muralha de concreto que impedem a ocorrência de bugs no software em sua totalidade.
A verdade é que, ao meu ver, os testes realizados pelos desenvolvedores e analistas de teste são essencialmente diferentes.
Por um lado, os desenvolvedores criam classes de testes, capazes de testar a funcionalidade em âmbito técnico, evitando exceções, ausência de validações e garantindo a padronização relacionada à arquitetura do código. Através dos testes unitários, além de avaliar os cenários mais evidentes da funcionalidade implementada, também é possível evitar que futuras refatorações ou modificações nesse código impactem no que já está funcional. Perfeito.
Agora, por outro lado, consideremos os analistas de testes. É correto afirmar que o trabalho deles se restringe ao que foi descrito no parágrafo anterior? Claro que não! A função destes analistas não é verificar se uma condição IF está correta ou se os objetos estão sendo liberados da memória. É um nível mais alto e específico. O trabalho dos analistas de teste envolve o comportamento tanto sob a perspectiva de requisitos funcionais, como as regras de negócio, quanto da usabilidade, desempenho, segurança e de qualquer outro requisito não-funcional que esteja relacionado com a experiência do usuário ao utilizar a aplicação.
Para isso, eles criam cenários automatizados e executam testes de regressão, testes de integração, testes funcionais e testes de “caixa” (preta, branca e cinza) para analisar os resultados e validar os requisitos. Esses são os pontos ausentes nos testes unitários, ou melhor, são essas as características que esses testes não possuem para explorar todo o contexto de uma funcionalidade.
Um teste unitário, por exemplo, não irá identificar que uma determinada tela da aplicação passou a demorar 20 segundos para ser exibida ao usuário em comparação com 5 segundos antes da implementação. Um analista de teste, por sua vez, registraria essa falha de desempenho, evitando que o artefato fosse liberado para o ambiente de produção e, portanto, impedindo que um novo incidente fosse aberto pelo cliente no dia seguinte.
Já trabalhei em uma equipe que escrevia testes unitários (bem eficientes, diga-se de passagem) e, mesmo assim, erros eram encontrados nas evoluções ou correções recém-implementadas. Pergunto: o motivo é que os testes unitários eram ineficazes? Não! É pelo simples fato de que os testes unitários não eram suficientes o bastante para cobrir todos os cenários possíveis de operações que o usuário do sistema pode reproduzir. Como solução, os gestores da empresa criaram um departamento de testes e, a curto prazo, já observaram a redução de falhas em produção.
A realidade é clara: testes unitários não simulam o raciocínio do usuário em cada operação do sistema enquanto consideram os detalhes das regras de negócio e os parâmetros de aceitação dos requisitos.
Os analistas de testes continuam exercendo um papel importante e primordial no ciclo de vida do software, mesmo após a ascensão das metodologias ágeis. A área de testes está evidentemente associada à qualidade do software e, consequentemente, à satisfação do usuário. Em uma análise mais conclusiva, o retorno garantido do investimento de tempo e dinheiro no projeto se torna visível em função do trabalho destes profissionais.
A minha opinião é que, de fato, a área de testes sofreu uma mudança com a abordagem do Desenvolvimento Ágil nas empresas, porém, essa mudança é uma evolução, e não uma extenuação como destacado no artigo.
Bom, apesar da minha defesa, vale realçar que, assim como acontece com os desenvolvedores, as técnicas e ferramentas dos analistas de teste também são atualizadas, logo, cabe a estes profissionais acompanharem este avanço para desempenhar um trabalho eficiente e aprimorar a produtividade da equipe.
E você, o que acha a respeito?
Abraço, pessoal!
Muito bom, mas acho que quanto maior a quantidade e elaboração de testes antes de entregar ao cliente é imprescindível. Certa vez quando trabalhei como auxiliar de estoque em uma empresa, ela comprou um software de uma das maiores empresas do brasil, pagaram uma fortuna, era um software completo
feito por uma equipe de especialista (tudo que tinha direito). Os Computadores da minha empresa eram bloqueados quanto ao uso da internet, para que funcionários não parassem de trabalhar. Porém, com a implementação do software, eu, um simples usuário com pouco conhecimento, descobri uma porta interna por dentro do software e consegui acesso total à internet. Certa vez quando liguei para empresa e relatei o mesmo, eles não entenderam nada do que eu falei e mandaram um representante para ver o que eu tinha feito, e ele me perguntou “porque você fez isso?”. (Resposta, eu era um mero usuário. O usuário sempre vai tenta fazer o absurdo dificilmente só o certo, ai é que entra a parte de testes: quanto mais testar menor a possibilidade de erro). Ótimo artigo, André.
Olá, André, tudo certo?
Obrigado pelo depoimento. Conforme você disse, a brecha de segurança no software provavelmente foi explorada devido à ausência de testes funcionais, ou melhor, ausência do trabalho dos Analistas de Teste. Na verdade, se os testes fossem executados antes da liberação, o software teria sido distribuído já com a correção, impedindo que os usuários encontrassem a falha.
Esse é um dos fatores que está fomentando a área de testes nas empresas de desenvolvimento de software. Ao meu ver, Analistas de Teste, hoje, representam uma peça fundamental no ciclo de vida de uma aplicação.
Abraço!
Bom dia André!
Venho acompanhando seus artigos semanalmente e gostaria de compartilhar aqui, que tenho aprendido muito com eles.
O seu trabalho contribui muito para nós profissionais da área de T.I.C.
Parabéns pela dedicação e pelo excelente trabalho!!
Abração.
Fala, grande Teles!
É um enorme prazer receber um comentário seu, companheiro de empresa!
Muito obrigado pelo feedback sobre os artigos e pela motivação para continuar o meu trabalho!
Fico contente que esteja acompanhado o blog!
Grande abraço!
Olá André! Rs
Obrigada pela dedicatória e parabéns mais uma vez pelo assunto abordado! 😉
Na minha humilde opinião, pessoas que reduzem os testes unitários como a solução total para qualidade de um produto, ou elas são inexperientes ou desconhecem o papel de um QA em um time.
Testes automatizados, não só unitários, são importantíssimos para a garantia da qualidade, porém não podemos dizer que são limitados a isso, porque então teríamos as famosas “balas de prata”.
Muito bem pontuado o seu artigo, ao dizer que a área sofreu uma mudança e que como qualquer outra área, precisamos evoluir!
Agradeço-te imensamente por esse artigo!
Um beijo enorme!
Fiquei muito contente com o seu comentário! 🙂
Obrigado por ter expressado a sua opinião sobre o assunto, afinal, por ser um ponto de vista de quem já tem uma grande experiência na área, traz bastante valor para o artigo!
Concordo com você a respeito da inexperência ou desconhecimento do papel de QA quando os testes são negligenciados. Mesmo assim, acredito que a segunda afirmação é mais comum.
Um grande beijo!
Obs: A dedicatória foi merecida 😉