public void Depositar(decimal valorDoDeposito) { this.SaldoAtual += valorDoDeposito; }
[TestMethod] public void Deve_Realizar_Deposito_de_10_Em_Conta_Com_Saldo_10_E_Saldo_Deve_Ficar_20() { var conta = new ContaBancaria(10); conta.Depositar(10); Assert.AreEqual(20, conta.SaldoAtual); }
Uma coisa que penso a respeito de teste de unidade é que eles fazem mais sentido quando os programadores são menos experientes.
Bom, estudando a técnica (TDD), você quebra muitos, mas muitos paradigmas de desenvolvimento e design de aplicações.
Dentro do blog do autor que originou a discussão gostaria de destacar aqui um trecho da apresentação, escrita por ele, sobre quem ele é e o que faz:
"I work on Outlook Mobile, specifically Messaging -- the email / SMS client for Pocket PCs and Smartphones. Although it's one of the most visible and important apps on Windows Mobile, it's actually fairly prosaic work ... working on various features now and then, but mostly just a lot of bugfixing. Still, the challenges are there, not unlike in most software engineering projects."
Ele mesmo já se definiu e através de seu post já sabemos o porque dele trabalhar duro em seus “just a lot of bugfixing”. (acredito que chegamos fácil à conclusão do "porque")
Suas declarações acabam mostrando que, apesar de tentar, não foram boas suas experiências com TDD e a aplicação da técnica, talvez por uma errada inserção neste mundo ou uma errada abordagem quanto a adoção da mesma.
A conclusão a que chego e o que me leva a regredir a pensamentos, é do quão importante e deve ser cuidadoso o caminho de adoção de novas técnicas junto à equipe e preparar a mesma para novos desafios, pensando não apenas no início e empolgação da adoção, mas lembrando que qualquer nova abordagem deve haver um trabalho para que a mesma se perpetue de maneira correta ou em contínua melhoria.
Abraço.
Uma coisa que penso a respeito de teste de unidade é que eles fazem mais sentido quando os programadores são menos experientes. A adoção tende a subir o nível de um time iniciante ou mediano. Para programadores veteranos, acostumados com o domínio da aplicação e familiares com a plataforma, a adoção de alta porcentagem de cobertura de código vai diminuir a produtividade deles - sem ganho em contra partida de grandes benefícios.
"Agile dogma says that tests should be fine grained, but really, what's the point? Debugging is easy, at least in comparison to writing all those tedious tests. If you think about it, all you really need is something that alerts you that something, somewhere, has gone wrong—a “tripwire” test, so to speak."
Eu acho bastante sensato o posicionamento do autor.
Não testar será ainda mais custoso?
A resposta errada é sim.
A resposta certa é talvez.
Escrever uma porrada de testes unitários - mesmo tendo uma boa noção
do que você está fazendo, pode sim ser pior do que não escrever nenhum
deles.
Escreva um código limpo, expressivo e apoiado em boas técnicas.
Especifique e garanta o funcionamento de negócio com testes de
aceitação e integração.
TDD não é a única arma para se chegar a um bom design, documentar o
código ou prevenir bugs.
E nem sempre deixar de testar é faltar com profissionalismo.
Escreva um código limpo, expressivo e apoiado em boas técnicas.
Especifique e garanta o funcionamento de negócio com testes de
aceitação e integração.
Testes unitários corretamente escritos garantem pouca coisa.
Quando um deles quebra significa que UM OBJETO deixou de se comportar
da maneira que você esperava.
Escreva testes de integração - focados nas expectativas de negócio, e
se alguma coisa quebrar durante uma manutenção, um destes testes
deverá acusar.
Se a rotina é simples, não faz sentido fazer o teste pois eu consigo debugar muito mais rapidamente do que se eu escrever um teste antes pra pegar todos os possiveis erros
Não concordo muito não. Primeiro porque vc tem overhead de vc definir muito bem esta "especificação". E embora muitos falem que não, eu acho que fazer uma spec pra qqer coisa é um overkill. Imagina, vc vai fazer uma função trivial int Mult(int a,int b) { return a * b;}. Trivial certo? Escrevi "on the fly", em segundos. Se eu fosse fazer TDD disto iria primeiro escrever o teste... aí tentar imaginar como eu quero que isto funcione e como eu espero que isto quebre. O que acontece se eu passar ints de maneira que dê overflow? O que acontece se fo uma aplicação muti-thread? Como os erros devem ser retornados. Segundos vão virar vários e vários minutos.... Ou seja, TDD tem o potencial de tornar qqer coisa, por mais simples que seja, em um monstrinho! :-). E se vc for fazer o simples, que é testar se o resultado = a * b, isto seria completamente inútil (qual a chance do comp "errar" na conta? rsrs). Ou seja, pra coisas simples, ou complica sem necessidade ou é inutil., Pra coisas complexas, complica e muito... E pior, se vc vai fazer pra algumas coisas e pra outras não, qual o critério de decisão? No final, vc pode ter erros nesta fase tbm, e aí todo o seu esforço é questionávellll
Então. Mas aí vem, é necessário se ter testes integrados pra todos os sistemas? Se já estávamos falando de custos aliados a TDD, temos aí agora toda uma nova gama de custos. Montar um ambiente de integração contínua (que não é trivial) e manter este ambiente é caro no mínimo pelo nível dos profissionais que são capazes de fazer isto.
E quando o projeto tem partes "legadas" complica ainda mais para montar um ambiente assim. Eu já participei da montagem de dois, nos dois casos eu não achei que valeu o custo/benefício, se eu estivesse no lugar do cliente. Mas é claro que existem outros fatores (nestes casos, o marketing foi muito importante, daí se justificou).
Acho que no final das contas, como mencionei, todas as metodologias e ferramentas devem ser usadas para resolver um problema e não porque elas são "legais". Se seu ambiente tem equipe numerosa, deploys grandes e frequentes e o seu sistema seja extremamente crítico, talvez TDD + Integração contínua seja ideal. No meu caso, equipe mínima, só seniores, projetos em sua maioria antigos (alguns com 10 anos), entregas pequenas mensais (quinzenais no pior caso), e nada crítico o suficiente que não possa mesmo ficar parado por algumas poucas horas (e nem me lembro quando isto aconteceu da ultima vez!), para empresas médias que estão extremamente preocupadas com ROI, com certeza não se justifica.
O pragmatismo que falta às vezes nos desenvolvedores acaba se
desenvolvendo quando a pessoa passar a ser responsável (ou lida de
perto) com as necessidades comerciais de um projeto. Fazer um projeto
dar lucro, cuidar com o custo/benefício de cada decisão, não fazer de
mais, nem de menos na arquitetura, enfim... eu acho que esse equilíbrio
vem mais rápido para quem tem um olhar (também) comercial. Quem está
trabalhando com tecnologia e se preocupa apenas com a tecnologia, a sopa
de letrinhas sempre vai ser justificável e atraente.
[]s
Eu acho bastante sensato o posicionamento do autor.
É o que eu venho defendendo ultimamente: avalie o custo de tudo.
Testar é custoso, ponto.
Não testar será ainda mais custoso?
A resposta errada é sim.
A resposta certa é talvez.
Escrever uma porrada de testes unitários - mesmo tendo uma boa noção
do que você está fazendo, pode sim ser pior do que não escrever nenhum
deles.
Escreva um código limpo, expressivo e apoiado em boas técnicas.
Especifique e garanta o funcionamento de negócio com testes de
aceitação e integração.
TDD não é a única arma para se chegar a um bom design, documentar o
código ou prevenir bugs.
E nem sempre deixar de testar é faltar com profissionalismo.
Isso não passa de uma excelente jogada de marketing do Uncle Bob.
Oi,Sou mais um do "contra". No meu caso especificamente, eu concordo completamente com o autor. Testar (bem) é caro, e com certeza diminuiu minha produtividade. (Já imagino a facção fundamentalista TDD preparando para o fuzilamento! rsrs). E sim, conheço TDD, já vi pessoas que fazem isto muito bem trabalhando e eu mesmo já usei, da maneira prevista, em vários cenários para avaliar. E minha conclusão é a mesma do autor, em vários cenários isto pode se mostrar inviavelmente caro.Significa que TDD é ruim? Óbvio que não, estou falando do meu caso em específico.... Claro que em equipes onde várias pessoas, de níveis diferentes mexem no código e em uma diversidade de outros cenários, com cerrteza TDD é muito útil. Mas eu vou contra a opinião de vários xiitas de que TDD "is the only true way"... :-). Acredito que em times pequenos, só de seniores, a utilização de TDD vai aumentar custo sem contrapartida. E aí o seu uso tem que ser ponderado, pode ser que valha a pena, pode ser que não valha... Nos meus projetos atuais, com certeza não vale.absAlexandre ValenteMCSE+I, MCSD, MDCBA, ITIL, CSM
2009/11/5 Vinicius Quaiato <vinicius...@gmail.com>
@Rafael
Eu acho bastante sensato o posicionamento do autor.
Por que?
Não testar será ainda mais custoso?
A resposta errada é sim.
A resposta certa é talvez.
Eu diria que a resposta é: Não ter testes que garantam aquilo é perigoso, não te dá garantias de futuras modificações! Logo, você perderá mais tempo em "testes do macaco".Escrever uma porrada de testes unitários - mesmo tendo uma boa noção
do que você está fazendo, pode sim ser pior do que não escrever nenhum
deles.
Por que podem ser pior?Escreva um código limpo, expressivo e apoiado em boas técnicas.
Especifique e garanta o funcionamento de negócio com testes de
aceitação e integração.
Existem bugs que não são vistos a olho nu...TDD não é a única arma para se chegar a um bom design, documentar o
código ou prevenir bugs.Eu considero que os testes que ali estão garantem a não criação de bugs no futuro. Mantenha-os verde e tudo está ok. Evolua o código, evolua os testes e tudo está ok. Altere um classe, mantenha os testes verdes e tudo está ok.E nem sempre deixar de testar é faltar com profissionalismo.Não?!
Acredito que seja possível alcançar o mesmo objetivo sem testar todo o sistema unitariamente.
>> > E nem sempre deixar de testar é faltar com profissionalismo.
> >
> >Não?!
Definitivamente não.
Se o meu código é bem estruturado, eu não preciso testar cada
pedacinho dele, já que a responsabilidade de cada pedacinho é
evidente.
> > Escreva um código limpo, expressivo e apoiado em boas técnicas.
> > Especifique e garanta o funcionamento de negócio com testes de
> > aceitação e integração.
>
> Escreva um teste limpo, expressivo e apoiado em boas técnicas e você vaiSe o meu código é bem estruturado, eu não preciso testar cada
> perceber que escrever um código desse jeito nem é tão importante. O simples
> fato de criar testes unitários facilitará seu caminho em tornar aquele
> código independente o suficiente para ser mudado assim que preciso.
>
> Sério, imagine um processo muito grande. Imagine esse processo todo descrito
> num único método sem comentários (mas que funciona). Você, bom programador,
> pensa "Putz, isso está errado. Deixe-me quebrar esse método em métodos
> menores". Nesse ponto, você assume a responsabilidade de fazer o método
> continuar funcionando, e é uma senhora responsabilidade.
>
pedacinho dele, já que a responsabilidade de cada pedacinho é
evidente. Testes de integração serão o suficiente, já que testar o
micro não gera valor significativo.
Me parece que a documentação que você gera através de seus testes
> Agora, imagine que existem dezenas de métodos que especificam os caminhos
> mais críticos desse processo. Esses são os testes unitários, exercendo sua
> segunda melhor função: documentar. Nesse ponto, você passa a entender o que
> o processo deveria fazer, e sente-se muito mais confiante para mudar o
> código para melhor, apertar o "Run" e ver que os testes continuam passando.
> Sem melhor design, sem comentários inline. Não que coesão não seja
> importante, mas toda a coesão realmente necessária pode ser aquela obtida
> pelo que os testes unitários lhe obriga.
unitários, eu gero diretamente no meu código em produção, com o
capricho que ao seu ver não é tão importante.
Além disto os testes de integração são a forma mais perfeita de
documentação.
Já viu o que é possível fazer com o Fitnesse?
"Mas se ele não sabe testar, não é sênior em nada. "
Giovanni, a diferença é que você tem pra você que [testar == testes de
unidade], enquanto outros do grupo usam os testes de unidade em menor
porção e cobrem o restante dos testes de outra maneira - seja depurando
com breakpoints, ou com testes de integração, testes de "caixa preta",
testes de aceitação pelo cliente que comprou o software, testes com
gravação de macros usando Watin, Selenium, Fitnesse... Isso vai da
cultura da empresa e do desenvolvedor. Eu já trabalhei em empresa grande
que tinha "departamento de testes", onde contratavam pessoas para seguir
um script, executando ações no programa e observando seu comportamento,
observando o estado do banco, etc. Essa é melhor forma de testar?
Provavelemente não. Mas funcionava? Sim, funcionava.
No desenvolvimento de software é muito comum você ter várias formas de
fazer um trabalho (seja em código ou metodologia), bifurcações onde
decidimos com o critério do gosto e da cultura (e não do certo ou
errado), então acho que rotular de profissional / não profissional
apenas porque é diferente da forma que você mesmo pratica, aí já vira
religião. E de religião tecnológica já basta o R. Stallman e FOSS :-)
[]s
The tendency – either by you or your colleagues – to avoid improving and refactoring application code out of fear that it may break a load of unit tests and hence incur extra work
Exatamente! Se o desenvolvedor é senior o suficiente pra ter estas dúvidas e saber se é necessário ou não testar, ele provavelmente já está fazendo o código correto pro cenário dele. E aí então pra que perder tempo com testes?
Oi Emmanuel,Exatamente! Se o desenvolvedor é senior o suficiente pra ter estas dúvidas e saber se é necessário ou não testar, ele provavelmente já está fazendo o código correto pro cenário dele. E aí então pra que perder tempo com testes? Se o cara não consegue nem ter estas dúvidas, ele provavelmente não vai conseguir escrever o teste correto, então, de novo, pra que testes? rsrs.Por testes eu me refiro a testes escritos (unit tests)... Claro que fazemos isto mentalmente. Sei que estou jogando pros extremos, mas minha idéia e fazer uma oposição a uma crença crescente de que TDD é a a única e melhor maneira de programar... Discordo, acho que depende... :-).AbsAlexandre
2009/11/6 Emmanuel G. Brandão <egomes...@gmail.com>
Alexandre,Quando você disse que a sua equipe sênior já tem muita prática e eles sabem o que terá problema ou não, eles mentalmente não estão fazendo testes? Pois é, será que quando eles inserem um código novo eles mentalmente testam todo o software? Não, é impossível concorda?Tá então, alguma coisa seria interessante ser testada, alguma regra de negócio, alguma funcionalidade, e para isso que serve a cobertura de testes. Você vai definir até que ponto quer testar.O seu exemplo é algo que eu provavelmente não testaria... Ou testaria já que você questionou dar um overflow no int. Tudo depende. Agora, esse seu exemplo é simplório demais, porém, você garante que o usuário não vai colocar um inteiro gigante pra dar esse overflow? Como? O desenvolvedor sempre verifica todas as possibilidades?Ao longo do dia quantas vezes o desenvolvedor irá rodar um debugg? E se quando ele arrumar um problema conflitar em outro lugar?A conclusão que eu cheguei quanto a testes é: se eu vou testar uma única vez o software o teste é caríssimo! Mas qual software é testado apenas uma vez?
Brandão, Emmanuel G.
CSM
blog.egomesbrandao.net
___________________________________
Ao encaminhar esta mensagem, por favor:
1 - Apague meu endereço eletrônico;
2 - Apague também os endereços dos amigos que receberam juntamente com você a mensagem, antes de enviar;
3 - Encaminhe como Cópia Oculta (Cco ou BCc) aos seus destinatários. Dificulte assim a disseminação de vírus, spams e banners.
2009/11/6 Alexandre Valente <alexandre...@gmail.com>
Oi Felipe,Não concordo muito não. Primeiro porque vc tem overhead de vc definir muito bem esta "especificação". E embora muitos falem que não, eu acho que fazer uma spec pra qqer coisa é um overkill. Imagina, vc vai fazer uma função trivial int Mult(int a,int b) { return a * b;}. Trivial certo? Escrevi "on the fly", em segundos. Se eu fosse fazer TDD disto iria primeiro escrever o teste... aí tentar imaginar como eu quero que isto funcione e como eu espero que isto quebre. O que acontece se eu passar ints de maneira que dê overflow? O que acontece se fo uma aplicação muti-thread? Como os erros devem ser retornados. Segundos vão virar vários e vários minutos.... Ou seja, TDD tem o potencial de tornar qqer coisa, por mais simples que seja, em um monstrinho! :-). E se vc for fazer o simples, que é testar se o resultado = a * b, isto seria completamente inútil (qual a chance do comp "errar" na conta? rsrs). Ou seja, pra coisas simples, ou complica sem necessidade ou é inutil., Pra coisas complexas, complica e muito... E pior, se vc vai fazer pra algumas coisas e pra outras não, qual o critério de decisão? No final, vc pode ter erros nesta fase tbm, e aí todo o seu esforço é questionávellllAssim, vale a pena? Depende muito do sistema, do nivel que se quer de testes automatizados e etc... De repente, como o Carlos colocou, isto é uma ferramenta de marketing já que o cliente fica feliz de ver um monte de luzinhas verdes ao final de uma iteração..... Os meus com certeza não querem nem saber disto e querem é o software funcionando. :-)E ainda no lance de especificação, usar testes para descrever é complicado... Sendo uma "linguagem de especificação", o desenvolvedor tem que ser treinado pra isto, pra pensar nos casos de erros, para não fazer só o lugar comum do caminho mais fácil etc... Possível? Claro, como falei conheço gente que faz isto muito bem. Mas para todos? Dificilmente. E eu sei que é muito caro treinar alguem pra trabalhar desta forma.Portanto, sim, pra mim no final TDD is all about tests, ainda que vc chame isto de "especificação" :-). E seu uso, como qqer metodologia ou ferramenta, deve ser avaliado caso a caso.
2009/11/6 Felipe Borges <felip...@gmail.com>
Eu acredito que TDD nao se resume somente a testes, ele influencia num entendimento maior dos requisitos e funcionalidades do sistema por parte dos desenvolvedores, vcs estao comentando sobre TDD como se fosse somente testes e mais testes, em um post do Giovanni Bassi (http://unplugged.giggio.net/unplugged/post/TDD-nao-existe.aspx) tem uma visao interessante sobre isso: "Um nome mais adequado seria Specification Driven Development, ou Specification Driven Design (SDD)."
Esta é minha opiniao.
[]'s
2009/11/6 Vinicius Quaiato <vinicius...@gmail.com>
Eu não entendo esse papo de "testes são caros", sinceramente.A verdade é que o cliente JÁ ESTÁ PAGANDO por isso, no entanto nós não estamos fazendo isso.O cliente já paga por um software testado, sem erros e que funcione como ele espera. Porém nós cobramos isso e não entregamos isso.Att,Vinicius Quaiato.www.viniciusquaiato.com
2009/11/6 Carlos Garcia <carlosga...@gmail.com>
Minha opinião? Testes são caros... quem paga? O cliente! É um investimento que ele está disposto a fazer pela qualidade do produto que ele está comprando, se o cliente não quiser pagar os testes, eu não vendo o projeto. Mas TODOS os clientes ficam muito empolgados quando eu falo que o software dele pode ser testado de forma AUTOMATICA depois de qualquer alteração.
Apoio o TDD!
2009/11/6 Alexandre Valente <alexandre...@gmail.com>
Oi Vinicius,Detectei um leve tom de ironia... :-). Mas muito longe disto. A equipe é senior, só isto. :-)Eu sei que o que eu escrevi vai contra o que muitos "papas" falam. Mas eu realmente questiono muito TDD como algo que todos deveriam usar e como sendo algo que é benéfico sempre. Mas ok, continuo mantendo uma mente aberta e vou continuar fazendo análises sobre isto. Mas confesso que fiquei feliz de ver que não sou só eu que penso assim! :-)
absAlexandre ValenteMCSE+I, MCSD, MDCBA, ITIL, CSM
2009/11/6 Vinicius Quaiato <vinicius...@gmail.com>
Oi Alexandre,
Não vejo que o tempo de dev. com TDD seja maior, não vejo mesmo. Como já foi dito, se você não escreve testes, acredita que o código esteja pronto. De fato em algumas situações ele estará mesmo, mas na grande maioria das aplicações comerciais, com regras de negócios complexas (sempre existem), com objetos que interagem entre si gerando outros objetos e desencadeando comportamentos, etc, o debug é deveras lento e complicado, principalmente em se tratando de aplicações web, web services e services.
O tempo de debug é muito superior ao tempo de um teste sendo executado.
Entendo que este seja o seu caso, e talvez você e sua equipe se encaixem no que o Kent Beck diz ser um "genius", e isso é realmente muito bom.
No entanto não acho justo você dizer que TDD eleva o custo e o tempo de desenvolvimento, ainda que isso se aplique à sua equipe.
Se sua equipe não consegue escrever testes simples, de baixa granularidade e dependência, talvez tenha algo errado aí, mas não quero questionar suas capacidades, lendo seu blog vejo que realmente vocês são bons.
Acho que, pelo menos eu, vou parar por aqui. Estamos quase caindo na guerra santa da outra thread, hehehehe.
Oi Vinicius,Como eu falei, este é o meu caso. Com certeza não deve ser o de outros. Mas no meu caso, quando eu vou fazer uma rotina com TDD, o tempo é maior em qualquer cenário. Se a rotina é simples, não faz sentido fazer o teste pois eu consigo debugar muito mais rapidamente do que se eu escrever um teste antes pra pegar todos os possiveis erros (e não, não tenho probelmas no futuro, como falei minha equipe é pequena e só de seniores, assim são todos capazes de fazer refactors sem quebrar muita coisa ... e mesmo o custo de eventuais quebras é menor do que o de TDD sem si).Se a rotina é complexa, projetar o teste antes leva tempo. Além de eu ter que pensar em quais casos eu tenho que montar pra tentar quebrar o código (os casos simples obviamente não servem pra quase nada), como o design é orientado ao teste bem sucedido, muitas vezes eu gasto um tempo grande refatorando a rotina em conforme ela vai sendo criada pra atender o teste. Quando eu parto pra rotina primeiro, em uma abordagem estruturada, o design quase sempre é correto da primeira vez. Ou seja, qto mais complexa a rotina, mais rápido eu faço sem TDD, simples assim.Isto sem falar em treinamento de equipe. É muito raro encontrar alguém que seja produtivo usando TDD (eu só conheci um em toda minha carreira). E treinar alguem pra usar TDD é muito, muito caro.Então, como falei, no meu caso TDD é sempre ruim, do aspecto de produtividade (e na qualidade, o que produzimos hoje é bom o suficiente). Claro que eu uso testes em alguns cenários, quando a rotina é complexa, quando ela é muito crítica (e é importante ter um teste unitário), como ferramenta de debug em situações complexas. Mas TDD por TDD, nos meus projetos atuais eu não acho que valha a pena.
absAlexandre ValenteMCSE+I, MCSD, MDCBA, ITIL, CSM
2009/11/5 Vinicius Quaiato <vinicius...@gmail.com>
@Alexandre,
Por que você diz que testar é caro, ou praticar TDD é caro? Não entendo como isso pode ser mais caro.
Na minha singela utilização de TDD tenho percebido que é mais rápido, prático, e garante muito mais do que simplesmente o teste do macaco.
Para mim caro é perder tempo, e não vejo perda de tempo com TDD.
Além do TDD ser rápido e prático, os testes permanecem lá, ao contrário dos testes do macaco.
2009/11/5 Alexandre Valente <alexandre...@gmail.com>
Oi,Sou mais um do "contra". No meu caso especificamente, eu concordo completamente com o autor. Testar (bem) é caro, e com certeza diminuiu minha produtividade. (Já imagino a facção fundamentalista TDD preparando para o fuzilamento! rsrs). E sim, conheço TDD, já vi pessoas que fazem isto muito bem trabalhando e eu mesmo já usei, da maneira prevista, em vários cenários para avaliar. E minha conclusão é a mesma do autor, em vários cenários isto pode se mostrar inviavelmente caro.Significa que TDD é ruim? Óbvio que não, estou falando do meu caso em específico.... Claro que em equipes onde várias pessoas, de níveis diferentes mexem no código e em uma diversidade de outros cenários, com cerrteza TDD é muito útil. Mas eu vou contra a opinião de vários xiitas de que TDD "is the only true way"... :-). Acredito que em times pequenos, só de seniores, a utilização de TDD vai aumentar custo sem contrapartida. E aí o seu uso tem que ser ponderado, pode ser que valha a pena, pode ser que não valha... Nos meus projetos atuais, com certeza não vale.absAlexandre ValenteMCSE+I, MCSD, MDCBA, ITIL, CSM
2009/11/5 Vinicius Quaiato <vinicius...@gmail.com>
@Rafael
Eu acho bastante sensato o posicionamento do autor.Por que?Não testar será ainda mais custoso?
A resposta errada é sim.
A resposta certa é talvez.
Eu diria que a resposta é: Não ter testes que garantam aquilo é perigoso, não te dá garantias de futuras modificações! Logo, você perderá mais tempo em "testes do macaco".Escrever uma porrada de testes unitários - mesmo tendo uma boa noção
do que você está fazendo, pode sim ser pior do que não escrever nenhum
deles.Por que podem ser pior?Escreva um código limpo, expressivo e apoiado em boas técnicas.
Especifique e garanta o funcionamento de negócio com testes de
aceitação e integração.Existem bugs que não são vistos a olho nu...TDD não é a única arma para se chegar a um bom design, documentar o
código ou prevenir bugs.
Eu considero que os testes que ali estão garantem a não criação de bugs no futuro. Mantenha-os verde e tudo está ok. Evolua o código, evolua os testes e tudo está ok. Altere um classe, mantenha os testes verdes e tudo está ok.E nem sempre deixar de testar é faltar com profissionalismo.Não?!
PRABOR - Software Development - fel...@prabor.com.br
--
[]s
Carlos Garcia
--
----------------------------------------------------------------
Felipe Prata L. Borges
MCT, MCPD .Net Framework 2.0: Web Applications
Contact: +55 19 9356 1355
msn: felip...@hotmail.com
skype: felipe.prabor
Minha pergunta é: Dado que o desenvolvedor não gasta tempo pensando nestes problemas como que ele consegue ainda assim escrever um código que resolve todos estes problemas?
Discordo. Pensar nos cenários automaticamente é parte do trabalho. Escrever testes unitários não é. Ou vc escreve e codifica tão rápido quanto pensa? :-)
Alexandre, você já desenvolveu um projeto do início ao fim usando TDD?