Por onde começar para aprender a Desenvolver Testes

Olá pessoal

Estou cursando Tecnologia em Análises de Sistemas e tenho me interessado por aprender mais sobre a área de testes, gostaria inclusive de ver alguma coisa nesta área para o meu TCC, tenho percebido que esta é uma área muito importante e que muitas vezes tem sido renegada por algumas empresas no mercado.
Bom, mas a minha dúvida é que eu sou novo na área e na realidade não sei muito bem nem por onde começar a aprender sobre a área de testes. Por exemplo, quando busco informações sobre testes de unidades com JUnit aparecem vários tutorias que mostram apenas o trivial, mas quando o sistema é um pouco mais complexo fica um pouco difícil visualizar a maneira correta de implementar testes de unidade.
Desde já agradeço a todos pela ajuda.

Você normalmente testa uma funcionalidade, não o sistema todo.

Existe um exemplo muito usado que é o de calculadora, vc vai fazer uma soma, para 2 valores de entrada vc tem um de retorno. E para esses 2 valores sempre sera o mesmo retorno.
Normalmente metodos com acesso a base não devem ser testados, pois vc não pode garantir uma entrada especifica para algo que é completamente mutavel.

[quote=feliperoliveira]Olá pessoal

Estou cursando Tecnologia em Análises de Sistemas e tenho me interessado por aprender mais sobre a área de testes, gostaria inclusive de ver alguma coisa nesta área para o meu TCC, tenho percebido que esta é uma área muito importante e que muitas vezes tem sido renegada por algumas empresas no mercado.
Bom, mas a minha dúvida é que eu sou novo na área e na realidade não sei muito bem nem por onde começar a aprender sobre a área de testes. Por exemplo, quando busco informações sobre testes de unidades com JUnit aparecem vários tutorias que mostram apenas o trivial, mas quando o sistema é um pouco mais complexo fica um pouco difícil visualizar a maneira correta de implementar testes de unidade.
Desde já agradeço a todos pela ajuda.[/quote]

Desenvolvimento de testes sim é complexo. O Junit é uma ferramenta da familia Xunit que visa facilitar a escrita de testes, contudo, ele não é a unica forma e nada o impede de desenhar uma API de testes especifica para a sua apliação conforme a necessidade.

Existem város tipos de teste. Começa por ai. O Junit serve para testes unitátios, de integração e algumas extensões existem que usam o junit para testes de aceitação . Mas existem muitos outros testes, como os testes de carga (JMetter).

Pesquise por V-Model. É uma modelo interessante que deriva os testes conforme as “áreas” do projeto.
O custo de fazer testes automaticos vc testes manuais vs o beneficio de fazer testes também é relevante. O uso de testes como forma de definição de que a features está “pronta” é igualmente interessante. Ou seja, testes como pontos de controle do estado do projeto.

A escrita de testes em si tb é desafiadora. Não é facil testar todas as opções de uma feature. Conceitos como cobertura são necessários assim como formas de a alcançar. Anti-padrões e padrões de testes. Por exemplo, fazer um método só para testar um gets/set é imebcil, isso será testado num teste que use esse campo. Lembrar sempre que um teste nulo é verde. ou seja, um teste que nada faz nunca dá problemas. Portanto, “verde” não significa que o software está ok. É preciso que o teste tb esteja ok.

finalmente testes automáticos só são possiveis em OO com mecanismos não estáticos. Isso porque testas implica em simular e simular significa usar um objeto especial em vez do objeto real. Isto leva a considerações de que bons testes são mais faceis com bom design OO. E que o teste pode guiar o desenho das classes e as interações dos objetos. a escrita de testes é uma ferramenta para desacoplar o design e permite sempre um pensamento dual no projeto , ou seja, cada classe tem que ser construida para funcionar em ambiente normal e em ambiente de testes.

finalmente o uso de injetores automáticos de dependencia é uma outra tecnica que ajuda a realizar os testes já que facilita a configuração do ambiente de testes e das condições de cada verificação. Integração Continua é outro assunto relacionado.

Testar um software pode ser tão complexo e desafiador como construir o software e não deve ser encarado como “aquilo que faremos na ultima semana antes da entrega”

[quote=sergiotaborda]

Testar um software pode ser tão complexo e desafiador como construir o software e não deve ser encarado como “aquilo que faremos na ultima semana antes da entrega”[/quote]

Caramba, essa vo anotar aqui, gostei dessa frase hein

auhauhah

Aproveitando o ensejo, algum colega saberia me indicar algum projeto open-source cujos testes sejam bem feitos e possam ser usados para estudo?

Abraços!