Na semana passada eu e o Daniel Sakuma, participamos de um curso de verão na USP: “Desenvolvimento de Software de Qualidade através de Testes Automatizados”. O curso teve duração de 5 dias e foi ministrado pelo pessoal da Agilcoop.
Para o post não ficar imenso, vou colocar uma síntese da cada dia, e no final uma conclusão. Espero que gostem.
1º Dia
Na primeira parte do dia o Fábio Kon fez uma apresentação sobre o curso e uma explicação introdutória sobre testes automatizados, enfatizando o quanto é importante os testes e principalmente os testes automatizados. Já na segunda parte, o palestrante Paulo Cheque fez uma apresentação sobre conceitos de testes, mostrando os vários tipos, níveis e termos de testes.
2º Dia
No segundo dia houve duas palestras uma sobre teste de unidade, na qual houve a apresentação na prática, usando a linguagem Scala e estando com o Junit. E a segunda foi sobre Padrões em Testes Automatizados, onde foram apresentados bons e mals padrões, tendo como referência o livro “xUnit Test Patterns, Refactoring Test Code“. Ambas as palestras foram ministradas pelo Paulo Cheque.
3º Dia
A primeira palestra do terceiro dia foi ministrada pela Mariana Bravo, sobre Objetos Dublês. Ela fez a sua palestra usando exemplos práticos em Java, cada um dos tipos de objetos dublês que podemos usar. E a segunda palestra foi sobre Testes de Interface de Usuário, onde foram apresentadas ferramentas para fazer testes automatizados na interface, utilizando o Selenium, FEST e WebDriver, essa palestra foi ministrada pelo Paulo Cheque.
4º Dia
Neste dia houve três palestras: a primeira sobre Testes com Banco de Dados, apresentada pelo Helves Domingues, que abordou as dificuldades e estratégias para testar banco de dados; a segunda sobre Testes de Aceitação ministra pelo Hugo Corbucci, que mostrou o que são ferramentas para testes de aceitação; e a última foi sobre Técnicas de Escrita de Testes Automatizados, ministrada pelo Paulo Cheque, que abordou refatoração, TAD, TFD/POUT, TDD, BDD, Padrões e Antipadrões.
5º Dia
No último dia tivemos uma palestra muito legal sobre TDD (Test-Driven Development), onde o Fabrício Souza apresentou na prática como fazer testes antes do desenvolvimento, com exemplos em Ruby, uma linguagem que parece ser bem bacana. E a última foi sobre Métricas para Testes Automatizados, ministrada pelo Paulo Cheque, que mostrou algumas ferramentas e maneiras para medimos os testes automatizados.
Conclusão
Sempre quis aprender mais sobre Testes automatizados, confesso que mesmo após o curso, se você me pedir para fazer um teste no Junit agora, não saberei fazer de primeira. Mas acredito que mais importante do que decorar sintaxes ou ser “evangelizado” e sair falando que testes automatizados é a salvação e que teste manual é uma m#!$*, é entender a real importância e papel dos testes automatizados dentro do desenvolvimento de software.
É considerável a eficiência que os testes automatizados pode trazer para o código, com ele programar certo na primeira, se torna algo frequente e não raro. O código se torna mais limpo, e se precisarmos corrigir algo, ou implementar uma nova funcionalidade, não ficaremos inseguros, com medo de estragar algo, pois poderemos executar todos os testes automatizados, que irão cobrir todos os cenários e nos darão confiança de que nada irá quebrar.
Mas antes de partir para a automatização dos testes, necessitamos analisar se ela realmente é viável, e se a equipe e o nosso processo estão maduros para suportar essa mudança. Pois os resultados da implantação de testes automatizados só aparecem a médio e longo prazo, e é preciso esforço e boa vontade de todos para dá certo.
Para encerrar o post, um muito obrigado ao André Pantalião, por ter nos incentivado a participar do curso, e parabéns ao pessoal da Agilcoop pela iniciativa e qualidade do curso, que foi uns dos primeiros, senão até o primeiro sobre o tema, a ser realizado no Brasil.
Quem ficou interessado no assunto, visite o site da Agilcoop, lá se encontram os slides utilizados no curso, além de um ótimo material sobre metodologia ágil em geral.