<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: Programadores de Schrödinger</title>
	<atom:link href="http://gc.blog.br/2008/04/29/programadores-de-schrodinger/feed/" rel="self" type="application/rss+xml" />
	<link>http://gc.blog.br/2008/04/29/programadores-de-schrodinger/</link>
	<description>Blog sobre desenvolvimento de software e tecnologia</description>
	<lastBuildDate>Sun, 16 Oct 2011 12:18:18 -0400</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: while(availableTime&#62;0) { : Continuous Integration – Integrating People</title>
		<link>http://gc.blog.br/2008/04/29/programadores-de-schrodinger/comment-page-1/#comment-11481</link>
		<dc:creator>while(availableTime&#62;0) { : Continuous Integration – Integrating People</dc:creator>
		<pubDate>Wed, 29 Jul 2009 01:09:33 +0000</pubDate>
		<guid isPermaLink="false">http://gc.blog.br/2008/04/29/programadores-de-schrodinger/#comment-11481</guid>
		<description>[...] the ones I already said, is that we do not want to become Shrödinger’s programmers. Excerpt from Guilherme Chapiewsky’s post (Translated from [...]</description>
		<content:encoded><![CDATA[<p>[...] the ones I already said, is that we do not want to become Shrödinger’s programmers. Excerpt from Guilherme Chapiewsky’s post (Translated from [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Rafael Lima Joia</title>
		<link>http://gc.blog.br/2008/04/29/programadores-de-schrodinger/comment-page-1/#comment-680</link>
		<dc:creator>Rafael Lima Joia</dc:creator>
		<pubDate>Mon, 12 May 2008 19:05:11 +0000</pubDate>
		<guid isPermaLink="false">http://gc.blog.br/2008/04/29/programadores-de-schrodinger/#comment-680</guid>
		<description>Eu observo muitas vezes os profissionais de nossa área discutirem TDD, unit tests, etc... Mas vejo poucas iniciativas em projetos e também casos de sucesso. Tenho enxergado que existe uma lacuna muito grande até chegarmos a adoção / convencimento do uso de TDD em projetos corporativos de grandes empresas.

Não é fácil montar uma equipe relativamente grande e consciente da necessidade de se criar testes automatizados, pelo menos atualmente. Os projetos brasileiros, (e o trabalhador brasileiro, de modo quase geral) possuem uma necessidade de &#039;sobreviver&#039; maior do que de inovar, isso por que nossa situação econômica não nos permite inventar muito as coisas (todos nós não estamos discutindo termos criados no estrangeiro?).

Todos sabemos que testes automatizados são vantajosos, mas por que ATÉ HOJE são adotados por apenas 3% dos projetos (sendo que muitas das pessoas que o utilizam no Brasil participam deste blogroll e similares)?

Acho que existe um lado oculto que geralmente a equipe que está envolvida num projeto reconhece, porém não combate. Por exemplo, no caso da carência de testes, esta está relacionada à idéia de que testes são caros, chatos e consomem tempo, porém todos reconhecem que a carência deles ocasiona retrabalho. O lado oculto neste caso é que o próprio retrabalho geralmente custa mais caro e consome mais tempo que a construção de testes automatizados.

A pergunta é: por que todos aceitam o retrabalho? Ora, não vivemos na república perfeita de Platão ... As pessoas possuem problemas e sentimentos que não são &#039;ajustáveis&#039; em processos. Vejam bem: o cara trabalha numa grande empresa, onde a equipe alocada no projeto varia de 2 em 2 meses; muitas vezes corrigir os trabalhos dos outros é querer ser &#039;Madre Tereza de Calcutá&#039; num mundo competitivo; muitas vezes estamos presos a processos burocráticos existentes; ele pensa: vou perder meu tempo querendo seguir o que os acadêmicos dizem?

Estou participando de um projeto a uns 2 anos para uma grande petrolífera brasileira. Nossos objetivos: definir uma metodologia de desenvolvimento utilizando práticas de Agile Development e também estando em conformidade com os processos burocráticos do cliente.

Primeiro passo: montar uma equipe de 20 desenvolvedores qualificados.
Segundo passo: introduzir as práticas de testes automatizados.
Terceiro passo: introduzir um ambiente de integração contínua auto-ajustável.
...
Passo final: entregar o sistema pronto depois de 6 meses de desenvolvimento.

Muito bem, esbarramos em diversos problemas. Primeiro, somente eu e mais um é que tinhamos prática em programar com testes automatizados. Segundo, todos nós éramos quase desconhecidos, até todos se conhecerem e entenderem as qualidades e defeitos demorou um certo tempo. Terceiro, queríamos um ambiente de integração contínua sem ter ao menos uma equipe que soubesse desta importância... Foram momentos difíceis...

Mais dificuldades:

Não adiantava querer explicar para o desenvolvedor que TDD era o máximo, enquanto que o projeto estava pegando fogo nos bastidores.

Não adiantava querer adotar o Maven 2.0 com o Continuum, quando na verdade tínhamos etapas antecedentes a resolver.

Não adiantava querer criar testes unitários, sendo que a equipe tinha dificuldade de criar mocks para alimentar os cenários...

Aonde nós chegamos:

Criamos um ambiente automatizado de testes funcionais, baseado no DBUnit, e focando nas regras de negócio do sistema. Testávamos apenas os métodos públicos das chamadas dos eventos. Configuramos um banco de dados Oracle Express local para testes. Não criamos um ambiente de integração contínua naquele momento...

Nenhum teste criado por nós utilizou TDD, todos foram criados logo após o desenvolvimento. Sinceramente não vi nenhuma desvantagem nesta abordagem.

Se você perguntar pra mim se sentimos falta dos testes unitários, direi que foi muito pouca. Nossos testes funcionais automatizados nos supriu bastante. Não concordo com o Knuth mas também não penso que &#039;TDD + unit test&#039; DEVE ser adotado por que é assim que manda o figurino.

Somente hoje é que estamos pensando em configurar um ambiente de integração contínua...</description>
		<content:encoded><![CDATA[<p>Eu observo muitas vezes os profissionais de nossa área discutirem TDD, unit tests, etc&#8230; Mas vejo poucas iniciativas em projetos e também casos de sucesso. Tenho enxergado que existe uma lacuna muito grande até chegarmos a adoção / convencimento do uso de TDD em projetos corporativos de grandes empresas.</p>
<p>Não é fácil montar uma equipe relativamente grande e consciente da necessidade de se criar testes automatizados, pelo menos atualmente. Os projetos brasileiros, (e o trabalhador brasileiro, de modo quase geral) possuem uma necessidade de &#8217;sobreviver&#8217; maior do que de inovar, isso por que nossa situação econômica não nos permite inventar muito as coisas (todos nós não estamos discutindo termos criados no estrangeiro?).</p>
<p>Todos sabemos que testes automatizados são vantajosos, mas por que ATÉ HOJE são adotados por apenas 3% dos projetos (sendo que muitas das pessoas que o utilizam no Brasil participam deste blogroll e similares)?</p>
<p>Acho que existe um lado oculto que geralmente a equipe que está envolvida num projeto reconhece, porém não combate. Por exemplo, no caso da carência de testes, esta está relacionada à idéia de que testes são caros, chatos e consomem tempo, porém todos reconhecem que a carência deles ocasiona retrabalho. O lado oculto neste caso é que o próprio retrabalho geralmente custa mais caro e consome mais tempo que a construção de testes automatizados.</p>
<p>A pergunta é: por que todos aceitam o retrabalho? Ora, não vivemos na república perfeita de Platão &#8230; As pessoas possuem problemas e sentimentos que não são &#8216;ajustáveis&#8217; em processos. Vejam bem: o cara trabalha numa grande empresa, onde a equipe alocada no projeto varia de 2 em 2 meses; muitas vezes corrigir os trabalhos dos outros é querer ser &#8216;Madre Tereza de Calcutá&#8217; num mundo competitivo; muitas vezes estamos presos a processos burocráticos existentes; ele pensa: vou perder meu tempo querendo seguir o que os acadêmicos dizem?</p>
<p>Estou participando de um projeto a uns 2 anos para uma grande petrolífera brasileira. Nossos objetivos: definir uma metodologia de desenvolvimento utilizando práticas de Agile Development e também estando em conformidade com os processos burocráticos do cliente.</p>
<p>Primeiro passo: montar uma equipe de 20 desenvolvedores qualificados.<br />
Segundo passo: introduzir as práticas de testes automatizados.<br />
Terceiro passo: introduzir um ambiente de integração contínua auto-ajustável.<br />
&#8230;<br />
Passo final: entregar o sistema pronto depois de 6 meses de desenvolvimento.</p>
<p>Muito bem, esbarramos em diversos problemas. Primeiro, somente eu e mais um é que tinhamos prática em programar com testes automatizados. Segundo, todos nós éramos quase desconhecidos, até todos se conhecerem e entenderem as qualidades e defeitos demorou um certo tempo. Terceiro, queríamos um ambiente de integração contínua sem ter ao menos uma equipe que soubesse desta importância&#8230; Foram momentos difíceis&#8230;</p>
<p>Mais dificuldades:</p>
<p>Não adiantava querer explicar para o desenvolvedor que TDD era o máximo, enquanto que o projeto estava pegando fogo nos bastidores.</p>
<p>Não adiantava querer adotar o Maven 2.0 com o Continuum, quando na verdade tínhamos etapas antecedentes a resolver.</p>
<p>Não adiantava querer criar testes unitários, sendo que a equipe tinha dificuldade de criar mocks para alimentar os cenários&#8230;</p>
<p>Aonde nós chegamos:</p>
<p>Criamos um ambiente automatizado de testes funcionais, baseado no DBUnit, e focando nas regras de negócio do sistema. Testávamos apenas os métodos públicos das chamadas dos eventos. Configuramos um banco de dados Oracle Express local para testes. Não criamos um ambiente de integração contínua naquele momento&#8230;</p>
<p>Nenhum teste criado por nós utilizou TDD, todos foram criados logo após o desenvolvimento. Sinceramente não vi nenhuma desvantagem nesta abordagem.</p>
<p>Se você perguntar pra mim se sentimos falta dos testes unitários, direi que foi muito pouca. Nossos testes funcionais automatizados nos supriu bastante. Não concordo com o Knuth mas também não penso que &#8216;TDD + unit test&#8217; DEVE ser adotado por que é assim que manda o figurino.</p>
<p>Somente hoje é que estamos pensando em configurar um ambiente de integração contínua&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Marinho</title>
		<link>http://gc.blog.br/2008/04/29/programadores-de-schrodinger/comment-page-1/#comment-679</link>
		<dc:creator>Marinho</dc:creator>
		<pubDate>Mon, 05 May 2008 13:16:37 +0000</pubDate>
		<guid isPermaLink="false">http://gc.blog.br/2008/04/29/programadores-de-schrodinger/#comment-679</guid>
		<description>A Questão do TDD é que ele te dah pelo menos mais uma forma de pensar no problema, algo que sem o mesmo talvez saísse uma solução &quot;engessada&quot; na primeira vez que a fizermos ( e pelo menos 99% das vezes acontece isso mesmo ). Então quando mentalizamos um design e montamos um teste e depois a implementação, temos um feedback rápido e a possibilidade de pensar de novo na solução.

Essa questão de &quot;monkey programmer&quot;, &quot;pedreiro de software&quot; e tudo mais, eu gosto muito de comparar com esse artigo do Martin Fowler : http://martinfowler.com/bliki/PreferDesignSkills.html

Particularmente eu acho q ele diz tudo sobre o tema nesse artigo.

ps: tô até agora rindo com a imagem do pobre coitado do gato flutuando e girando infinitamente com o pão nas costas :D

[]&#039;s
Marinho</description>
		<content:encoded><![CDATA[<p>A Questão do TDD é que ele te dah pelo menos mais uma forma de pensar no problema, algo que sem o mesmo talvez saísse uma solução &#8220;engessada&#8221; na primeira vez que a fizermos ( e pelo menos 99% das vezes acontece isso mesmo ). Então quando mentalizamos um design e montamos um teste e depois a implementação, temos um feedback rápido e a possibilidade de pensar de novo na solução.</p>
<p>Essa questão de &#8220;monkey programmer&#8221;, &#8220;pedreiro de software&#8221; e tudo mais, eu gosto muito de comparar com esse artigo do Martin Fowler : <a href="http://martinfowler.com/bliki/PreferDesignSkills.html" rel="nofollow" onclick="urchinTracker('/outgoing/martinfowler.com/bliki/PreferDesignSkills.html?referer=');">http://martinfowler.com/bliki/PreferDesignSkills.html</a></p>
<p>Particularmente eu acho q ele diz tudo sobre o tema nesse artigo.</p>
<p>ps: tô até agora rindo com a imagem do pobre coitado do gato flutuando e girando infinitamente com o pão nas costas <img src='http://gc.blog.br/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>[]&#8217;s<br />
Marinho</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Guilherme Chapiewski</title>
		<link>http://gc.blog.br/2008/04/29/programadores-de-schrodinger/comment-page-1/#comment-678</link>
		<dc:creator>Guilherme Chapiewski</dc:creator>
		<pubDate>Sun, 04 May 2008 16:12:04 +0000</pubDate>
		<guid isPermaLink="false">http://gc.blog.br/2008/04/29/programadores-de-schrodinger/#comment-678</guid>
		<description>@Pedro Werneck

1) Se a sua suite de testes demora muito pra rodar, o problema está em quem desenvolveu a suite e não nos testes em sí. Uma das premissas da técnica é que os testes rodem MUITO rápido justamente para que possam ser executados muitas vezes sem onerar o desenvolvimento.

2) Se algum desenvolvedor do seu time rodou a suite de testes após alterar a documentação, vocês estão com um sério problema de falta de capacitação profissional. Novamente o problema não está nos testes, mas sim no desenvolvedor. Além do mais, rodar testes após os commits é trabalho do Cruise Control.

3) Python, Ruby e Java requerem unit tests, com ou sem TDD. Não sei o que você quis dizer com &quot;senzala do software&quot; e nem com essa última frase que ficou muito confusa, mas acho que você está precisando se atualizar.

[ ]s, gc</description>
		<content:encoded><![CDATA[<p>@Pedro Werneck</p>
<p>1) Se a sua suite de testes demora muito pra rodar, o problema está em quem desenvolveu a suite e não nos testes em sí. Uma das premissas da técnica é que os testes rodem MUITO rápido justamente para que possam ser executados muitas vezes sem onerar o desenvolvimento.</p>
<p>2) Se algum desenvolvedor do seu time rodou a suite de testes após alterar a documentação, vocês estão com um sério problema de falta de capacitação profissional. Novamente o problema não está nos testes, mas sim no desenvolvedor. Além do mais, rodar testes após os commits é trabalho do Cruise Control.</p>
<p>3) Python, Ruby e Java requerem unit tests, com ou sem TDD. Não sei o que você quis dizer com &#8220;senzala do software&#8221; e nem com essa última frase que ficou muito confusa, mas acho que você está precisando se atualizar.</p>
<p>[ ]s, gc</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Pedro Werneck</title>
		<link>http://gc.blog.br/2008/04/29/programadores-de-schrodinger/comment-page-1/#comment-677</link>
		<dc:creator>Pedro Werneck</dc:creator>
		<pubDate>Sat, 03 May 2008 02:56:09 +0000</pubDate>
		<guid isPermaLink="false">http://gc.blog.br/2008/04/29/programadores-de-schrodinger/#comment-677</guid>
		<description>Concordo em parte, nem necessariamente com o Knuth. Apesar de eu advogar o uso de unittests, XP, as coisas estão indo longe demais.

Por exemplo, muito tempo acaba sendo perdido em ambientes em que exige-se do desenvolvedor rodar toda uma suite de testes antes de qualquer committ do código, em casos em que é óbvio e cristalino que não pode haver nada. Hoje mesmo alguém me comentou que rodou testes depois de corrigir documentação.

TDD é uma prática essencial para encontrar erros em linguagens mais dinâmicas como Python e Ruby para um momento mais próximo do desenvolvimento, como aquelas linguagens cheias de restrições, feitas para as &quot;senzalas&quot; de software, como Java.</description>
		<content:encoded><![CDATA[<p>Concordo em parte, nem necessariamente com o Knuth. Apesar de eu advogar o uso de unittests, XP, as coisas estão indo longe demais.</p>
<p>Por exemplo, muito tempo acaba sendo perdido em ambientes em que exige-se do desenvolvedor rodar toda uma suite de testes antes de qualquer committ do código, em casos em que é óbvio e cristalino que não pode haver nada. Hoje mesmo alguém me comentou que rodou testes depois de corrigir documentação.</p>
<p>TDD é uma prática essencial para encontrar erros em linguagens mais dinâmicas como Python e Ruby para um momento mais próximo do desenvolvimento, como aquelas linguagens cheias de restrições, feitas para as &#8220;senzalas&#8221; de software, como Java.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Guilherme Chapiewski</title>
		<link>http://gc.blog.br/2008/04/29/programadores-de-schrodinger/comment-page-1/#comment-676</link>
		<dc:creator>Guilherme Chapiewski</dc:creator>
		<pubDate>Wed, 30 Apr 2008 13:52:46 +0000</pubDate>
		<guid isPermaLink="false">http://gc.blog.br/2008/04/29/programadores-de-schrodinger/#comment-676</guid>
		<description>Discordo dessa teoria do spaghetti aí. Se você pegar um projeto open-source grande com uma grande base de testes e vai ver que a diferença é notável para projetos grandes e sem testes. Esse spaghetti ao contrário que você fala não depende de usar ou não TDD, mas sim do talento e organização dos programadores. E note que eu não estou falando de um projeto de CRUDs, mas de um projeto para qualquer coisa.

Resumindo, não podemos misturar as coisas. O efeito Spaghetti pode acontecer em qualquer situação independente do propósito do sistema, técnicas e linguagens utilizadas.

Condordo com o seu ponto de que teste unitário não é a única forma válida de testar (já tinha concordado antes), mas para certas linguagens e situações não tem como fugir...

E por último, é perfeitamente possível desenvolver sistemas sem uma linha de código de testes, com baixíssimo acoplamento e sem usar TDD. Só que vai ser bem mais difícil :D

&quot;There´s no silver bullet.&quot; Eu não defendo que TDD ou testes unitários são silver bullets, mas na maioria dos casos é uma ótima prática.

[ ]s, gc</description>
		<content:encoded><![CDATA[<p>Discordo dessa teoria do spaghetti aí. Se você pegar um projeto open-source grande com uma grande base de testes e vai ver que a diferença é notável para projetos grandes e sem testes. Esse spaghetti ao contrário que você fala não depende de usar ou não TDD, mas sim do talento e organização dos programadores. E note que eu não estou falando de um projeto de CRUDs, mas de um projeto para qualquer coisa.</p>
<p>Resumindo, não podemos misturar as coisas. O efeito Spaghetti pode acontecer em qualquer situação independente do propósito do sistema, técnicas e linguagens utilizadas.</p>
<p>Condordo com o seu ponto de que teste unitário não é a única forma válida de testar (já tinha concordado antes), mas para certas linguagens e situações não tem como fugir&#8230;</p>
<p>E por último, é perfeitamente possível desenvolver sistemas sem uma linha de código de testes, com baixíssimo acoplamento e sem usar TDD. Só que vai ser bem mais difícil <img src='http://gc.blog.br/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>&#8220;There´s no silver bullet.&#8221; Eu não defendo que TDD ou testes unitários são silver bullets, mas na maioria dos casos é uma ótima prática.</p>
<p>[ ]s, gc</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Lucindo</title>
		<link>http://gc.blog.br/2008/04/29/programadores-de-schrodinger/comment-page-1/#comment-675</link>
		<dc:creator>Lucindo</dc:creator>
		<pubDate>Wed, 30 Apr 2008 13:33:05 +0000</pubDate>
		<guid isPermaLink="false">http://gc.blog.br/2008/04/29/programadores-de-schrodinger/#comment-675</guid>
		<description>GC,

Estava justamente discutindo TDD ontem com o Paulo no MSN. Quando leio algo como as 3 regras de TDD do uncle Bob eu não consigo pensar que não seja algo para disciplinar monkey coders.

Quanto a influenciar o design, forçando um desacoplamento baixo, eu tenho minhas dúvidas. Pode ajudar? Talvez. É uma solução? Talvez. A única? De maneira alguma. Um bom design tem a ver com quem desenha e não com a técnica que usa. O que eu vejo é que para projetos pequenos, CRUDs e afins funciona muito bem, o que força ainda mais o meu ponto de linha de produção.

Agora, projetos grandes e complexos o que se acaba gerando é um código que é completamento oposto do spaghetti e igualmente difícil de se entender, onde é impossível não se perder na rio de camadas e classes que não fazem nada a não ser delegar, onde o código de verdade fica todo escondido.

Mas o ponto de tudo isso é: TDD/Unit tests não é única maneira de se testar o que se faz.</description>
		<content:encoded><![CDATA[<p>GC,</p>
<p>Estava justamente discutindo TDD ontem com o Paulo no MSN. Quando leio algo como as 3 regras de TDD do uncle Bob eu não consigo pensar que não seja algo para disciplinar monkey coders.</p>
<p>Quanto a influenciar o design, forçando um desacoplamento baixo, eu tenho minhas dúvidas. Pode ajudar? Talvez. É uma solução? Talvez. A única? De maneira alguma. Um bom design tem a ver com quem desenha e não com a técnica que usa. O que eu vejo é que para projetos pequenos, CRUDs e afins funciona muito bem, o que força ainda mais o meu ponto de linha de produção.</p>
<p>Agora, projetos grandes e complexos o que se acaba gerando é um código que é completamento oposto do spaghetti e igualmente difícil de se entender, onde é impossível não se perder na rio de camadas e classes que não fazem nada a não ser delegar, onde o código de verdade fica todo escondido.</p>
<p>Mas o ponto de tudo isso é: TDD/Unit tests não é única maneira de se testar o que se faz.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jônatas Wingeter Rodrigues</title>
		<link>http://gc.blog.br/2008/04/29/programadores-de-schrodinger/comment-page-1/#comment-674</link>
		<dc:creator>Jônatas Wingeter Rodrigues</dc:creator>
		<pubDate>Wed, 30 Apr 2008 13:20:23 +0000</pubDate>
		<guid isPermaLink="false">http://gc.blog.br/2008/04/29/programadores-de-schrodinger/#comment-674</guid>
		<description>Olá Guilherme.

Talvez o Lucindo tenha falado isso porque diversos defensores do TDD comentam que um programador júnior pode se &quot;tornar&quot; um experto ao realizar testes unitários, melhorando a qualidade de seu software.
Eu uso práticas do TDD dependendo do projeto, mas como o Lucindo falou, não achou que seja a única maneira de testar.

Sobre o Knuth, ele é um caso à parte. Possui uma abstração muito alta, mente científica, QI alto, e uma visão matemática (Talvez seja um gênio). Pelos caminhos matemáticos, sabemos que é mais fácil chegar ao provável do que ao improvável, como na física. Uma pessoa que pensa em algorítimo como abstrações matemáticas, onde os corolários são pontuais e factíveis, deve pensar em testes implícitos no próprio algorítimo. :-) Para quem leu algum dos livros &quot;The Art of Computing Programming&quot;, deve ter percebido isso.

[]&#039;s,

Jônatas</description>
		<content:encoded><![CDATA[<p>Olá Guilherme.</p>
<p>Talvez o Lucindo tenha falado isso porque diversos defensores do TDD comentam que um programador júnior pode se &#8220;tornar&#8221; um experto ao realizar testes unitários, melhorando a qualidade de seu software.<br />
Eu uso práticas do TDD dependendo do projeto, mas como o Lucindo falou, não achou que seja a única maneira de testar.</p>
<p>Sobre o Knuth, ele é um caso à parte. Possui uma abstração muito alta, mente científica, QI alto, e uma visão matemática (Talvez seja um gênio). Pelos caminhos matemáticos, sabemos que é mais fácil chegar ao provável do que ao improvável, como na física. Uma pessoa que pensa em algorítimo como abstrações matemáticas, onde os corolários são pontuais e factíveis, deve pensar em testes implícitos no próprio algorítimo. <img src='http://gc.blog.br/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  Para quem leu algum dos livros &#8220;The Art of Computing Programming&#8221;, deve ter percebido isso.</p>
<p>[]&#8217;s,</p>
<p>Jônatas</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: AkitaOnRails</title>
		<link>http://gc.blog.br/2008/04/29/programadores-de-schrodinger/comment-page-1/#comment-673</link>
		<dc:creator>AkitaOnRails</dc:creator>
		<pubDate>Wed, 30 Apr 2008 13:17:32 +0000</pubDate>
		<guid isPermaLink="false">http://gc.blog.br/2008/04/29/programadores-de-schrodinger/#comment-673</guid>
		<description>De qualquer forma, não podemos comparar o que faz um Donald Knuth, com um programador normal. Ele pode tudo! Ele é o Knuth!! :-) O dia que chegarmos a ser um Knuth talvez possamos deixar de usar testes também, mas até lá é melhor usar testes. Nunca vou esquecer como fiquei perplexo quando folheei o The Art of Computer Programming, 15 anos atrás. Preciso confessar que eu não consigo ler tudo aquilo e ainda entender cada passo. Me falta o talento matemático para isso.

Alguém já disse isso mas por outro lado o Knuth não trabalha - que eu saiba - em ambientes enterprise, prazos apertados, escopos absurdos, clientes babacas. Ele é um acadêmico, estuda seus algoritmos com precisão matemática, ele literalmente pode fazer um Big Up Front Design de tudo e construir pedaço a pedaço com precisão cirúrgica. São coisas que não temos o luxo de fazer.</description>
		<content:encoded><![CDATA[<p>De qualquer forma, não podemos comparar o que faz um Donald Knuth, com um programador normal. Ele pode tudo! Ele é o Knuth!! <img src='http://gc.blog.br/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  O dia que chegarmos a ser um Knuth talvez possamos deixar de usar testes também, mas até lá é melhor usar testes. Nunca vou esquecer como fiquei perplexo quando folheei o The Art of Computer Programming, 15 anos atrás. Preciso confessar que eu não consigo ler tudo aquilo e ainda entender cada passo. Me falta o talento matemático para isso.</p>
<p>Alguém já disse isso mas por outro lado o Knuth não trabalha &#8211; que eu saiba &#8211; em ambientes enterprise, prazos apertados, escopos absurdos, clientes babacas. Ele é um acadêmico, estuda seus algoritmos com precisão matemática, ele literalmente pode fazer um Big Up Front Design de tudo e construir pedaço a pedaço com precisão cirúrgica. São coisas que não temos o luxo de fazer.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Guilherme Chapiewski</title>
		<link>http://gc.blog.br/2008/04/29/programadores-de-schrodinger/comment-page-1/#comment-672</link>
		<dc:creator>Guilherme Chapiewski</dc:creator>
		<pubDate>Wed, 30 Apr 2008 13:00:04 +0000</pubDate>
		<guid isPermaLink="false">http://gc.blog.br/2008/04/29/programadores-de-schrodinger/#comment-672</guid>
		<description>Entendo o Lucindo. Realmente, para determinados tipos de linguagens, pode fazer sentido testar de outra forma que não seja com testes unitários. Em Java, por exemplo, faz total sentido usar testes unitários (com TDD ou não), mock objects e etc.

A questão é que é interessante testar a menor quantidade de componentes de cada vez para isolar os problemas, e que a execução desses testes seja automatizada.

E por último, TDD não eh um técnica para &quot;code monkeys&quot;. Nesse ponto, Lucindo, vc está totalmente equivocado. O que eu vejo é justamente o oposto: os programadores mais experientes é que usam mais e melhor a técnica, lembrando que o objetivo maior do TDD não é o teste em sí mas influenciar positivamente no design das classes.

[ ]s, gc</description>
		<content:encoded><![CDATA[<p>Entendo o Lucindo. Realmente, para determinados tipos de linguagens, pode fazer sentido testar de outra forma que não seja com testes unitários. Em Java, por exemplo, faz total sentido usar testes unitários (com TDD ou não), mock objects e etc.</p>
<p>A questão é que é interessante testar a menor quantidade de componentes de cada vez para isolar os problemas, e que a execução desses testes seja automatizada.</p>
<p>E por último, TDD não eh um técnica para &#8220;code monkeys&#8221;. Nesse ponto, Lucindo, vc está totalmente equivocado. O que eu vejo é justamente o oposto: os programadores mais experientes é que usam mais e melhor a técnica, lembrando que o objetivo maior do TDD não é o teste em sí mas influenciar positivamente no design das classes.</p>
<p>[ ]s, gc</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Lucindo</title>
		<link>http://gc.blog.br/2008/04/29/programadores-de-schrodinger/comment-page-1/#comment-671</link>
		<dc:creator>Lucindo</dc:creator>
		<pubDate>Wed, 30 Apr 2008 04:50:10 +0000</pubDate>
		<guid isPermaLink="false">http://gc.blog.br/2008/04/29/programadores-de-schrodinger/#comment-671</guid>
		<description>Sim Paulo, Knuth não falou que não testa seus códigos, ele apenas disse que faz testes unitários. Como eu disse, TDD/Unit test não é a única maneira de se testar.</description>
		<content:encoded><![CDATA[<p>Sim Paulo, Knuth não falou que não testa seus códigos, ele apenas disse que faz testes unitários. Como eu disse, TDD/Unit test não é a única maneira de se testar.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Paulo Silveira</title>
		<link>http://gc.blog.br/2008/04/29/programadores-de-schrodinger/comment-page-1/#comment-670</link>
		<dc:creator>Paulo Silveira</dc:creator>
		<pubDate>Wed, 30 Apr 2008 04:46:04 +0000</pubDate>
		<guid isPermaLink="false">http://gc.blog.br/2008/04/29/programadores-de-schrodinger/#comment-670</guid>
		<description>Vale lembrar que o Knuth escreve dezenas de testes funcionais, com arquivos texto definindo grafos que devem dar resultado X ou Y</description>
		<content:encoded><![CDATA[<p>Vale lembrar que o Knuth escreve dezenas de testes funcionais, com arquivos texto definindo grafos que devem dar resultado X ou Y</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Lucindo</title>
		<link>http://gc.blog.br/2008/04/29/programadores-de-schrodinger/comment-page-1/#comment-669</link>
		<dc:creator>Lucindo</dc:creator>
		<pubDate>Wed, 30 Apr 2008 04:25:44 +0000</pubDate>
		<guid isPermaLink="false">http://gc.blog.br/2008/04/29/programadores-de-schrodinger/#comment-669</guid>
		<description>Marcos,

O meu ponto é que TDD e testes unitários não são a única forma de se testar software. Acho fundamental testar claro. Agora eu não sou muito fã da idéia de escrever primeiro os testes, depois código e escrever apenas código suficiente para passar nos testes. Para linha de produção e monkey coders eu acho ótimo, mas para mim não serve.

Eu geralmente abuso do REPL (quando estou programando em alguma linguagem que permite isso). Uso ele para fazer pequenos testes e experimentações enquanto desenvolvo, e o que acho mais importante coloco em rotinas de teste (que não são testes unitários, são coisas um pouco maiores).

Gosto muito da idéia de contrato e de testes gerados automaticamente tomando como base esses contratos, o que funciona muito bem com linguagens funcionais. Veja o QuickCheck como um exemplo disso, ou o sistema de contratos do PLT Scheme.

Outra coisa que eu acho útil, e que uso no dia a dia, são scripts de testes funcionais, que geralmente é possível escrever numa linguagem mais fácil. Faço scripts em Ruby e Python para testar meus códigos C++.

Quanto ao desenvolvimento colaborativo eu acho muito importante fazer code review, mas parece que as pessoas costumam depositar toda sua fé testes unitários mesmo, achando que TDD é a bala de prata.

Em suma, eu raramente faço testes unitários, não sou adepto de TDD e testo sim os meus programas.</description>
		<content:encoded><![CDATA[<p>Marcos,</p>
<p>O meu ponto é que TDD e testes unitários não são a única forma de se testar software. Acho fundamental testar claro. Agora eu não sou muito fã da idéia de escrever primeiro os testes, depois código e escrever apenas código suficiente para passar nos testes. Para linha de produção e monkey coders eu acho ótimo, mas para mim não serve.</p>
<p>Eu geralmente abuso do REPL (quando estou programando em alguma linguagem que permite isso). Uso ele para fazer pequenos testes e experimentações enquanto desenvolvo, e o que acho mais importante coloco em rotinas de teste (que não são testes unitários, são coisas um pouco maiores).</p>
<p>Gosto muito da idéia de contrato e de testes gerados automaticamente tomando como base esses contratos, o que funciona muito bem com linguagens funcionais. Veja o QuickCheck como um exemplo disso, ou o sistema de contratos do PLT Scheme.</p>
<p>Outra coisa que eu acho útil, e que uso no dia a dia, são scripts de testes funcionais, que geralmente é possível escrever numa linguagem mais fácil. Faço scripts em Ruby e Python para testar meus códigos C++.</p>
<p>Quanto ao desenvolvimento colaborativo eu acho muito importante fazer code review, mas parece que as pessoas costumam depositar toda sua fé testes unitários mesmo, achando que TDD é a bala de prata.</p>
<p>Em suma, eu raramente faço testes unitários, não sou adepto de TDD e testo sim os meus programas.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Pedro Teixeira</title>
		<link>http://gc.blog.br/2008/04/29/programadores-de-schrodinger/comment-page-1/#comment-668</link>
		<dc:creator>Pedro Teixeira</dc:creator>
		<pubDate>Wed, 30 Apr 2008 04:05:03 +0000</pubDate>
		<guid isPermaLink="false">http://gc.blog.br/2008/04/29/programadores-de-schrodinger/#comment-668</guid>
		<description>Haha! Muito bom :) [fiquei rindo durante muito tempo]

Mas, levando a sério o princípio da incerteza para software, implica em dizer que nunca poderemos saber todo o estado do sistema - e, inclusive, a própria medição já afetaria o seu estado :p

E, [som de suspense] será que o seu software realmente existe quando ele está rodando em um datacenter abandonado e desconectado de tudo? Na verdade, um bug só existe quando um humano observa o log do xunit e força as ondas de probabilidade colapsarem (de forma desfavorável às vezes :p).</description>
		<content:encoded><![CDATA[<p>Haha! Muito bom <img src='http://gc.blog.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  [fiquei rindo durante muito tempo]</p>
<p>Mas, levando a sério o princípio da incerteza para software, implica em dizer que nunca poderemos saber todo o estado do sistema &#8211; e, inclusive, a própria medição já afetaria o seu estado :p</p>
<p>E, [som de suspense] será que o seu software realmente existe quando ele está rodando em um datacenter abandonado e desconectado de tudo? Na verdade, um bug só existe quando um humano observa o log do xunit e força as ondas de probabilidade colapsarem (de forma desfavorável às vezes :p).</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Marcos Silva Pereira</title>
		<link>http://gc.blog.br/2008/04/29/programadores-de-schrodinger/comment-page-1/#comment-667</link>
		<dc:creator>Marcos Silva Pereira</dc:creator>
		<pubDate>Wed, 30 Apr 2008 02:40:20 +0000</pubDate>
		<guid isPermaLink="false">http://gc.blog.br/2008/04/29/programadores-de-schrodinger/#comment-667</guid>
		<description>Lucindo,

Não que seja um pergunta puramente provocativa, mas quais as outras maneiras (efetivas) de se realizar testes?</description>
		<content:encoded><![CDATA[<p>Lucindo,</p>
<p>Não que seja um pergunta puramente provocativa, mas quais as outras maneiras (efetivas) de se realizar testes?</p>
]]></content:encoded>
	</item>
</channel>
</rss>

