Resposta curta: Absolutamente positiva.
Resposta Longa: Testes de unidade são uma das práticas mais importantes que eu tento influenciar no meu local de trabalho (banco grande, negociação fx). Sim, eles são um trabalho extra, mas é um trabalho que paga de novo e de novo. Testes automatizados de unidade não apenas ajudam você a realmente executar o código que está escrevendo e, claro, a verificar suas expectativas, mas eles também agem como um tipo de cão de guarda para futuras mudanças que você ou outra pessoa possa fazer. A quebra do teste ocorrerá quando alguém alterar o código de forma indesejável. Eu acho que o valor relativo dos testes unitários diminui em correlação com o nível de mudança esperada e crescimento em uma base de código, mas a verificação inicial do que o código faz valer a pena, mesmo quando a mudança esperada é baixa. O valor do teste unitário também depende do custo dos defeitos. Se o custo (onde o custo é perda de tempo / dinheiro / reputação / esforço futuro) de um defeito for zero, então o valor relativo de um teste também é zero; no entanto, este quase nunca é o caso em um ambiente comercial.Geralmente, não contratamos mais pessoas que não criam testes de unidade rotineiramente como parte de seu trabalho - é apenas algo que esperamos, como aparecer todos os dias. Eu não vi uma análise de custo-benefício pura de ter testes unitários (alguém sinta-se livre para me indicar um), mas posso dizer por experiência que em um ambiente comercial, ser capaz de provar que funciona código em um sistema grande e importante vale a pena . Também me permite dormir melhor à noite, sabendo que o código que escrevi funciona (até certo ponto) e, se mudar, alguém será alertado sobre quaisquer efeitos colaterais inesperados causados por uma compilação quebrada.
Desenvolvimento orientado a testes, em minha mente não é uma abordagem de teste. Na verdade, é uma abordagem / prática de design com a saída sendo o sistema de trabalho e um conjunto de testes de unidade. Eu sou menos religioso sobre esta prática, pois é uma habilidade que é muito difícil de desenvolver e aperfeiçoar. Pessoalmente, se estou construindo um sistema e não tenho uma ideia clara de como ele funcionará, eu utilizarei o TDD para me ajudar a encontrar o meu caminho no escuro. No entanto, se eu estiver aplicando um padrão / solução existente, normalmente não o farei.
Na ausência de provas matemáticas para você de que faz sentido escrever testes de unidade, recomendo que você experimente durante um período prolongado e experimente os benefícios por si mesmo.