Cara, teste de software é um assunto bastante abrangente. Teoricamente, você poderia modelar um sistema com algum formalismo, como redes de Petri e provar matematicamente o seu funcionamento. Alguns sistemas críticos são construidos assim. Porém, para a maioria dos sistemas comerciais isso não é possível, e para isso existem as atividades de teste, que tem como finalidade verificar se o sistema contruído não possui erros e se o mesmo atende aos requisitos.
A técnica de teste mais básica que existe é simplesmente usar o sistema depois de pronto. Acho que na maioria das empresas ainda é isso o que acontece. Existe um setor de desenvolvimento e um setor de testes, que fica “usando” o software para verificar o seu funcionamento. Infelizmente ainda predomina a visão de que basta contratar alguns estagiários para ficar clicando no sistema e tentar encontrar erros.
As abordagens para testar um software são várias. Os testes mais básicos que existem são os testes unitários. Um teste unitário é um programa como qualquer outro, mas que tem a finalidade de verificar o funcionamento de uma classe ou método isoladamente. Existem também os chamados testes de integração, que verificam como as partes do sistema interagem. Em sua maioria, os testes verificam se o sistema atende aos requisitos funcionais, mas as equipes de QA também podem desenvolver teste para requisitos não-funcionais, como o tempo de resposta de uma requisição, a quantidade de usuários simultâneos que o sistema suporta, etc.
As ferramentas também são muitas:
:arrow: para testes unitários, existem o JUnit e o TestNG. O JUnit também é conhecido como xUnit, pois ele existe para várias linguagens. Nos teste unitários, também podem ser usados frameworks para criação de mock objects, como o EasyMock, JMock e Mockito.
:arrow: o DBUnit é uma extensão específica do JUnit para testes que envolvem bancos de dados,
:arrow: o Selenium permite gravar as interações do usuário com o browser e executar estas interações como se fosse um script
:arrow: o JMeter permite fazer testes de carga e performance
e existem ainda muitas outras. Sinceramente, é uma área que eu recomendo muito para especialização, se existe carência de bons programadores, a carência de bons testers é maior ainda. Particularmente, eu considero o profissional de QA mais importante ainda que os chamados “analistas de sistemas”. Mas é uma pena que o mercado brasileiro ainda não acordou para o real valor deste especialista.