**Observacoes:**1. Esse artigo e focado em iniciantes, por isso eu resolvi usar um estilo mais popular, evitando termos muito tecnicos relacionados a testes de software.1. Nao pretendo esgotar o assunto sobre TDD nem sobre teste de software, que sao campos muito amplos de estudo. O que busco aqui e simplesmente fazer uma introducao didatica ao assunto.Agora, vamos ao que interessa.Sempre ouvimos que praticar TDD e importante e que e vantajoso. Mas qual a vantagem? Por que, exatamente, TDD e importante e em que ele pode me ajudar?Antes de falarmos sobre TDD, lembre-se que existem dois conceitos maiores: Testes automatizados e _Test First_.Vamos comecar por testes automatizados.Se voce ja conhece sobre testes automatizados e _Test First_ pode pular para "Explicando TDD", la embaixo. Se voce tem duvidas sobre o assunto, sugiro ler todo o artigo, principalmente a secao sobre _Test First_.Testes automatizados--------------------Imagine entrar tela por tela, opcao por opcao, funcionalidade por funcionalidade do sistema e fazer ali dentro tudo que for possivel para certificar que ele esta funcionando corretamente. Imagine fazer isso para todos os perfis de usuario existentes: gerentes, vendedores, revisores, administradores, clientes, usuarios visitantes, etc. Imagine, alem disso, testar a integracao do seu sistema com outros sistemas. Por exemplo, enviar/receber arquivos de movimento bancario, ler ultimos tweets, avisar usuarios sobre reposicao de estoque, enviar emails, etc.Testar uma aplicacao exige muito esforco e nao e simples, alem de ser uma tarefa repetitiva. Eu ja trabalhei em lugares onde pessoas eram pagas para fazer todos os testes manualmente, todos os dias. Adivinha o que acontecia? Acertou se voce disse que nem tudo era testado. Certamente esse problema nao acontecia somente onde eu trabalhava porque devido a esse cenario surgiu a ideia de fazer com que o computador desempenhasse a funcao de um robo e executasse todos os testes, avisando quais deram errado.Esse e o conceito de testes automatizados: usar um "robo" -- seu computador -- para testar o sistema inteiro com uma certa frequencia.Existem diversas abordagens para testes automatizados e ha um certo problema de nomenclatura nessa area, mas e certo que testar um sistema inteiro e tarefa demorada, mesmo para computadores, e exige um ambiente controlado. Afinal, voce nao pode enviar um email para um cliente se ele, de fato, nao fez um pedido de compra, certo?Apesar de o computador ajudar bastante nos testes, ele nao e capaz de fazer tudo. Um ser humano precisa dizer o que e o certo ou o errado em cada situacao, em cada cenario de teste.Dai surge o outro conceito, que citei no inicio do artigo, _Test First_._Test First_------------_Test First_ significa "primeiro, o teste".Como assim? E que voce deve escrever o teste antes. Mas antes de que? Antes de existir o que voce quer testar.E muito estranho a principio, mas faz sentido e a forma de pensar e natural. Fazemos isso o tempo todo quando desenvolvemos software, mas nao percebemos. Acompanhe meu racioncinio.Quando um cliente te diz o que ele precisa, ele esta te contando o que ele espera como resultado da funcionalidade. Exemplo:> Eu quero ver na tela de consultar estoque, alem da quantidade em