Desenvolvendo aplicações de confiança com Test Driven Development
Ultimamente, a informatização e a criação de sistemas complexos para manipulação de dados têm se tornado práticas cada vez mais populares, porém como garantir o bom funcionamento de tais aplicações? Na palestra da Isabella Silveira, engenheira web da Huge, você entenderá como o Desenvolvimento Orientado a Testes pode ser uma ferramenta poderosa para a construção de aplicações confiáveis e de qualidade, mostrando diferentes tipos de testes que atuam em cada camada do seu sistema e os melhores frameworks para por tudo isso em prática. Confira a entrevista que fizemos com a Isabella sobre esse tema.
1) O que é o Desenvolvimento Orientado a Testes e sua importância para a qualidade do software?
Desenvolvimento Orientado a Testes, o famoso TDD (do inglês, Test Driven Development), é uma metodologia de desenvolvimento de software onde os testes são escritos antes das funcionalidades em si. Essa prática contribui muito para a qualidade do código desenvolvido pois garante que toda a base de código da aplicação é 100% testada; além disso, proporciona arquiteturas mais modulares, já que após o TDD teremos um código inteiramente testável, com pequenas funções com escopos de atuação bem definidas. Isso possibilita a reutilização, legibilidade e reduz a complexidade do código implementado.
2) Como o Desenvolvimento Orientado a Testes pode contribuir para a construção de aplicações confiáveis?
Acho que todos os desenvolvedores já passaram pelo famigerado momento em que o código quebra em momentos ou funções inesperadas, e sabem muito bem o gostinho do perrengue que é procurar um bug no palheiro. O Desenvolvimento Orientado a Testes acaba justamente com essa imprevisibilidade do código, já que, por meio dos testes, o comportamento de cada função desenvolvida é mapeado e é possível identificar um erro imediatamente após o desenvolvimento de cada funcionalidade, acabando com estas surpresas desagradáveis e o medo da refatoração. Depois de trabalhar com clientes de perfis muito variados na Huge, que é especializada na criação de experiências digitais com projetos de escala global, a necessidade do TDD fica ainda mais evidente; nada compra a tranquilidade de ir dormir sabendo que está tudo bem com o seu código.
3) Quais são os principais frameworks de trabalho existentes para o Desenvolvimento Orientado a Testes?
Existem inúmeras ferramentas e frameworks de desenvolvimento de testes, cada qual com diferentes linguagens e especificidades. Pessoalmente, gosto muito do Jasmine e do Mocha para testes unitários e de integração em Javascript e do JUnit para testes unitários e de integração em Java. Já para testes de aceitação, aqueles que simulam o comportamento do usuário na camada da vista, o queridinho é sempre o Selenium. Os testes do Selenium WebDriver em si podem ser implementados em Java, mas o mesmo serve de base para dezenas de outros frameworks de testes de aceitação com linguagens diferentes. Em Javascript o meu favorito é o Nightwatch, por sua sintaxe simples e prática.
4) Como que você visualiza os ambientes de testes no futuro? O que você ainda acha que precisa melhorar?
A preocupação com a qualidade de software tem crescido cada vez mais e ganhado cada vez mais espaço na forma como desenvolvemos. Com isso, atualmente já não é aceitável que haja código de produção sem uma boa cobertura de testes, principalmente em softwares de grande utilização e importância para o usuário, como plataformas de e-commerce e aplicativos de geolocalização. O domínio de ferramentas de testes e boas práticas de software se tornará uma habilidade indispensável para qualquer desenvolvedor, tanto no front como no backend.
O tempo de execução de testes de aceitação ainda é bem lento, por desempenhar funções custosas como criar uma nova instância do browser e esperar o tempo de resposta do servidor, mas com o grande avanço tecnológico e o aumento do poder de processamento dos computadores, os testes serão executados ainda mais rápido, o que despertará um foco ainda maior e facilitará a execução dos testes de integração e de aceitação, que são indispensáveis para monitorar o funcionamento de cada módulo da aplicação.