Testes automatizados, o pilar de sustentação | Pirâmide Lean - O Framework de Transformação Lean
Início Testes automatizados, o pilar de sustentação
piramidelean 10 de julho de 2014 Comente! Engenharia e Produção
Numa breve discussão hoje sobre testes lembrei de alguns pontos importantes sobre o tema e gostaria de registrá-los aqui. Nos meus 20 anos de experiência com desenvolvimento de software passei por inúmeras situações onde a utilização de testes automatizados me trouxe benefícios e em alguns casos outros efeitos que eu preferia ter evitado.
Primeiramente acho importante frisar que desenvolver software sem o uso de testes automatizados, IMHO, é loucura. Todo bom desenvolvedor que presa pela qualidade do produto que está desenvolvendo, cria e mantém uma suite confiável de testes automatizados nos mais diferentes níveis: unitário, de integração, funcional, de aceitação, performance, carga, etc.
Todavia, manter tal suite de testes não é tarefa simples e requer disciplina e muito esforço. Afinal, o código de teste escrito pode tornar-se facilmente um legado adicional a ser mantido. Por isso, recomenda-se todos os cuidados para escrita de testes concisos, efetivos e suficientes, seguindo todas as boas práticas de escrita de código limpo e bem documentado.
O desenvolvedor que ancora a qualidade do seu trabalho em testes tem inúmeros benefícios. Ele pode ganhar velocidade optando pela construção de uma arquitetura mais simples, que evolua de forma emergente de acordo com as necessidades do negócio. Ele também sente-se seguro para alterar o código, inserindo novas funcionalidade e refatorando a estrutura para que a arquitetura torne-se mais robusta e o código mais legível e de fácil manutenção. Quem usa testes automatizados, economiza dinheiro, gastando menos tempo com debug e entregando soluções que de fato geram menos problemas e custam menos para manter.
A utilização de testes também proporciona a implementação de alguns importantes princípios do Lean, mencionados na Pirâmide Lean, como Jidoka, Poka Yoke, Cultura Stop the Line, a melhoria contínua e a criação e conhecimento implícita durante o processo de trabalho. (Veja aqui um vídeo onde explico esses 3 princípios)
O desenvolvedor pode obter feedback imediato sobre efeitos colaterais em outras partes do código e garantir que erros sejam detectados nas fases de concepção (quando usando test first approach) e implementação. Estes são períodos do ciclo de vida em que a correção de um problema custa 100 vezes menos do que quando o sistema está em produção e os clientes são quem descobrem os erros. Por fim, quando usando TDD (Test Driven Development), desenvolvedores podem escrever um código muito melhor estruturado, mais desacoplado e elegante, alem de exercitar um pensamento muito mais refinado no que diz respeito às regras que está implementando.
Na pirâmide Lean os testes automatizados estão na base. Isso significa que a utilização de testes automatizados é fundação de um bom software, é construir o seu castelo na rocha!
O leitor deve estar imaginando que com tantos tipos de teste teria que escrever tanto código adicional que inviabilizaria o uso por conta do custo e do tempo de implementação. Assim como todas as coisas referenciadas na Pirâmide Lean, tudo necessita um equilíbrio. Testes automatizados por si só não farão tudo sozinhos. As praticas precisam ser equilibradas e combinadas umas com as outras para que haja efetividade. Um bom exemplo disso é o trio, simplicidade, testes e refatoração. A simplicidade garante velocidade ao processo de desenvolvimento. Isto significa utilizar o caminho mais rápido possível para validar sua hipótese de negócio. Em outras palavras, seu castelo neste momento pode ser uma palafita, desde que lhe permita entrar pra dentro e se proteger da chuva.
Simplicidade também significa arquitetura emergente e um outro princípio do Lean, Just-In-Time. Os testes automatizados, neste caso, garantem que o que está funcionando vai continuar funcionando e, no dia seguinte, quando fizer sol, você poderá refatorar a arquitetura de sua palafita, substituindo os troncos de eucalipto por pilares de sustentação de concreto armado, fortes e robustos o suficiente para sustentar a base do seu castelo, que poderá crescer de forma emergente e segura.