<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Desenvolvimento &#193;gil - Blog da Improve It: Tag TDD</title>
    <link>http://blog.improveit.com.br/articles/tag/tdd</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description></description>
    <item>
      <title>Improvecast 22: Entrevista com Edson de Lima</title>
      <description>&lt;p&gt;Acaba de ser publicado o &lt;a href="http://www.improveit.com.br/podcast/improvecast-22-entrevista-edson-de-lima-experienciais-ageis"&gt;Improvecast 22&lt;/a&gt; no qual entrevistei &lt;strong&gt;Edson de Lima&lt;/strong&gt;, que falou sobre a implanta&#231;&#227;o do &lt;a href="http://www.improveit.com.br/xp"&gt;Extreme Programming&lt;/a&gt; na &lt;a href="http://www.leosoft.com.br"&gt;LeoSoft&lt;/a&gt;, uma empresa do Paran&#225; que contou com o treinamento &lt;a href="http://www.improveit.com.br/servicos/imersao_agil"&gt;Imers&#227;o &#193;gil&lt;/a&gt; h&#225; alguns meses e est&#225; trabalhando com o &lt;a href="http://www.improveit.com.br/xp"&gt;XP&lt;/a&gt; desde ent&#227;o. Eu havia escrito h&#225; algum tempo sobre &lt;a href="http://blog.improveit.com.br/articles/2007/03/12/imersao-agil-na-leosoft"&gt;como foi o Imers&#227;o &#193;gil na LeoSoft&lt;/a&gt; e o pessoal de l&#225; nos concedeu &lt;a href="http://blog.improveit.com.br/articles/2007/03/12/depoimento-da-leosoft-imersao-agil"&gt;este depoimento&lt;/a&gt;. Se quiser, voc&#234; tamb&#233;m pode ver as &lt;a href="http://www.improveit.com.br/fotos/album/72157600286142565"&gt;fotos do treinamento&lt;/a&gt;.  &lt;/p&gt;

&lt;p&gt;&lt;img src="http://blog.improveit.com.br/files/edson-lima-leosoft.jpg" alt="Edson de Lima" title="Edson de Lima"/&gt;&lt;/p&gt;

&lt;p&gt;Falamos sobre diversos assuntos relacionados &#224; ado&#231;&#227;o do &lt;a href="http://www.improveit.com.br/xp"&gt;XP&lt;/a&gt; e tamb&#233;m sobre a implanta&#231;&#227;o do &lt;a href="http://pt.wikipedia.org/wiki/Melhoria_de_Processos_do_Software_Brasileiro"&gt;MPS.BR&lt;/a&gt; na &lt;a href="http://www.leosoft.com.br"&gt;LeoSoft&lt;/a&gt;. Antes do treinamento &lt;a href="http://www.improveit.com.br/servicos/imersao_agil"&gt;Imers&#227;o &#193;gil&lt;/a&gt;, a &lt;a href="http://www.leosoft.com.br"&gt;LeoSoft&lt;/a&gt; havia iniciado um processo de implanta&#231;&#227;o do &lt;a href="http://pt.wikipedia.org/wiki/Melhoria_de_Processos_do_Software_Brasileiro"&gt;MPS.BR&lt;/a&gt; junto a outras empresas da regi&#227;o. Algum tempo ap&#243;s o &lt;a href="http://www.improveit.com.br/servicos/imersao_agil"&gt;Imers&#227;o &#193;gil&lt;/a&gt;, come&#231;ou de fato a implanta&#231;&#227;o do &lt;a href="http://pt.wikipedia.org/wiki/Melhoria_de_Processos_do_Software_Brasileiro"&gt;MPS.BR&lt;/a&gt; em um dos projetos da empresa. Isso est&#225; sendo um desafio, visto que a filosofia do &lt;a href="http://pt.wikipedia.org/wiki/Melhoria_de_Processos_do_Software_Brasileiro"&gt;MPS.BR&lt;/a&gt; &#233;, em v&#225;rios aspectos, bem diferente da filosofia do &lt;a href="http://www.improveit.com.br/xp"&gt;Extreme Programming&lt;/a&gt;. Esta &#233; uma das quest&#245;es que discutimos no &lt;a href="http://www.improveit.com.br/podcast/improvecast-22-entrevista-edson-de-lima-experienciais-ageis"&gt;Improvecast 22&lt;/a&gt;. Se voc&#234; quiser saber mais sobre o &lt;a href="http://pt.wikipedia.org/wiki/Melhoria_de_Processos_do_Software_Brasileiro"&gt;MPS.BR&lt;/a&gt;, escute o &lt;a href="http://www.improveit.com.br/podcast/improvecast-8-entrevista-carlos-barbieri-mpsbr"&gt;Improvecast 8&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Ou&#231;a a &lt;a href="http://www.improveit.com.br/podcast/improvecast-22-entrevista-edson-de-lima-experienciais-ageis"&gt;entrevista com Edson de Lima&lt;/a&gt;!&lt;/p&gt;</description>
      <pubDate>Fri, 02 Nov 2007 17:02:00 -0200</pubDate>
      <guid isPermaLink="false">urn:uuid:839d5f0c-2c4a-4d35-9b5a-98906bad0a7a</guid>
      <author>Vinicius Manh&#227;es Teles</author>
      <link>http://blog.improveit.com.br/articles/2007/11/02/improvecast-22-entrevista-edson-de-lima</link>
      <category>xp</category>
      <category>agile</category>
      <category>podcast</category>
      <category>TDD</category>
    </item>
    <item>
      <title>Barrigas abertas</title>
      <description>&lt;p&gt;O Marcelo Baltar fez alguns &lt;a href="http://blog.improveit.com.br/articles/2007/10/05/nosso-processo-de-integracao-continua#comment-810"&gt;coment&#225;rios&lt;/a&gt;, &lt;a href="http://blog.improveit.com.br/articles/2007/10/05/nosso-processo-de-integracao-continua"&gt;nesse artigo&lt;/a&gt;, sobre a utiliza&#231;&#227;o do &lt;a href="http://cruisecontrol.sourceforge.net/"&gt;CruiseControl&lt;/a&gt; no processo de &lt;a href="http://www.improveit.com.br/xp/praticas/integracao"&gt;integra&#231;&#227;o cont&#237;nua&lt;/a&gt; e &lt;a href="http://www.improveit.com.br/vinicius"&gt;eu&lt;/a&gt; gostaria de levantar algumas considera&#231;&#245;es. Preferi fazer isso atrav&#233;s de um novo artigo. O Marcelo cita o seguinte:&lt;/p&gt;

&lt;p&gt;"Parab&#233;ns, mais um excelente post. Mas devo dizer que eu tamb&#233;m tenho uma prefer&#234;ncia pelos testes ass&#237;ncronos (CruiseControl-like ;) ). Al&#233;m das quest&#245;es t&#233;cnicas, j&#225; bem exploradas no seu post e em alguns coment&#225;rios, esse tipo de abordagem aproxima-se mais dos conceitos pregados pelas metodologias '&#225;geis'.&lt;/p&gt;

&lt;p&gt;No meu entender &#233; mais proveitoso o desenvolvedor 'commitar' seu trabalho o quanto antes (l&#243;gico, com os devidos testes implementados) e j&#225; avan&#231;ar para as pr&#243;ximas tarefas ao inv&#233;s de ser obrigado a passar por todo esse processo de integra&#231;&#227;o 'pr&#233;-commit'. Afinal de contas, qu&#227;o realmente grave/problem&#225;tico seria o commit de c&#243;digo que quebra o que est&#225; no reposit&#243;rio? Pela minha experi&#234;ncia, isso acontece pouqu&#237;ssimo, e quando acontece, gra&#231;as a granularidade dos commits, pode ser facilmente corrigido."&lt;/p&gt;

&lt;p&gt;Marcelo, muito obrigado pelo &lt;a href="http://blog.improveit.com.br/articles/2007/10/05/nosso-processo-de-integracao-continua#comment-810"&gt;coment&#225;rio&lt;/a&gt;. Compreendo sua percep&#231;&#227;o de que o uso do &lt;a href="http://cruisecontrol.sourceforge.net/"&gt;CruiseControl&lt;/a&gt; possa estar mais associado a &lt;a href="http://www.improveit.com.br/xp/manifesto_agil"&gt;metodologias &#225;geis&lt;/a&gt;, por&#233;m n&#227;o compartilho essa mesma vis&#227;o. Acredito que isso tem a ver com a interpreta&#231;&#227;o do que seja uma "metodologia &#225;gil". N&#227;o sei se voc&#234; chegou a ler o artigo sobre &lt;a href="http://blog.improveit.com.br/articles/2007/05/22/agilidade-ou-agilidade"&gt;agilidade x Agilidade&lt;/a&gt;. O termo "&#225;gil" n&#227;o est&#225; associado apenas ao conceito de velocidade, mas sim ao &lt;a href="http://www.improveit.com.br/xp/manifesto_agil"&gt;Manifesto &#193;gil&lt;/a&gt; e seus &lt;a href="http://www.agilemanifesto.org/principles.html"&gt;princ&#237;pios&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Um dos &lt;a href="http://www.improveit.com.br/vinicius"&gt;valores&lt;/a&gt; fundamentais no mundo &lt;a href="http://www.improveit.com.br/xp/manifesto_agil"&gt;&#225;gil&lt;/a&gt; &#233; &lt;a href="http://www.improveit.com.br/xp/valores/feedback"&gt;feedback&lt;/a&gt;. Receber &lt;a href="http://www.improveit.com.br/xp/valores/feedback"&gt;feedback&lt;/a&gt; cedo e agir sobre ele rapidamente. A forma de receber &lt;a href="http://www.improveit.com.br/xp/valores/feedback"&gt;feedback&lt;/a&gt; e atuar sobre ele &#233; diferente dependendo se voc&#234; utiliza um modelo de &lt;a href="http://www.improveit.com.br/xp/praticas/integracao"&gt;integra&#231;&#227;o s&#237;ncrona&lt;/a&gt; ou ass&#237;ncrona. No ass&#237;ncrono, o &lt;a href="http://www.improveit.com.br/xp/valores/feedback"&gt;feedback&lt;/a&gt; tende a ser mais demorado e pode passar despercebido. Por exemplo, se ele vier por email, pode ser que o desenvolvedor n&#227;o esteja consultando os emails com freq&#252;&#234;ncia. Isso &#233; comum de acontecer em &lt;a href="http://www.improveit.com.br/xp"&gt;XP&lt;/a&gt;, por exemplo, devido &#224; &lt;a href="http://www.improveit.com.br/xp/praticas/programacao_par"&gt;programa&#231;&#227;o em par&lt;/a&gt; e outros fatores.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.improveit.com.br/xp/manifesto_agil"&gt;Desenvolvimento &#225;gil&lt;/a&gt; tamb&#233;m est&#225; relacionado a entregar software funcionando. Ent&#227;o, cada novo c&#243;digo introduzido no projeto tem que estar funcionando para gerar valor de verdade. Por essa raz&#227;o, o c&#243;digo que vem do reposit&#243;rio tem que estar em ordem permanentemente. O uso de uma ferramenta como o &lt;a href="http://cruisecontrol.sourceforge.net/"&gt;CruiseControl&lt;/a&gt;, pelas raz&#245;es descritas acima, permite a exist&#234;ncia de c&#243;digo quebrado no reposit&#243;rio. Ele n&#227;o leva a isso, mas permite. &lt;/p&gt;

&lt;p&gt;Nos projetos que eu conheci, que utilizavam &lt;a href="http://cruisecontrol.sourceforge.net/"&gt;CruiseControl&lt;/a&gt;, era comum o reposit&#243;rio estar quebrado. A raz&#227;o era sempre alguma coisa "boba" que ia ficando l&#225; porque ningu&#233;m queria parar para consertar. N&#243;s aqui chamamos isso de &lt;strong&gt;"barriga aberta"&lt;/strong&gt;. Pense em um cirurgi&#227;o. Quando ele vai operar uma pessoa, ele abre a barriga, faz o que precisa ser feito e fecha, antes de partir para outra cirurgia. Ele n&#227;o abre a barriga de um, come&#231;a a operar e, em seguida, abre a barriga de outro antes de terminar a primeira cirurgia (como ilustrado abaixo). Ele sabe que isso seria perigoso e improdutivo. N&#243;s n&#227;o. N&#243;s somos de computa&#231;&#227;o, ent&#227;o a gente adora fazer aquilo que &lt;strong&gt;parece r&#225;pido&lt;/strong&gt;, mas costuma gerar dores de cabe&#231;a mais adiante. :-)&lt;/p&gt;

&lt;p&gt;&lt;img src="http://blog.improveit.com.br/files/barriga_aberta.gif" alt="Evite deixar barrigas abertas." title="Evite deixar barrigas abertas."/&gt;
Ilustra&#231;&#227;o de &lt;a href="http://www.improveit.com.br/leandro"&gt;Leandro Mello&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Na minha opini&#227;o, fazer um commit e partir para outra atividade, antes de receber &lt;a href="http://www.improveit.com.br/xp/valores/feedback"&gt;feedback&lt;/a&gt; sobre o que foi colocado no reposit&#243;rio &#233; o mesmo que "deixar uma barriga aberta". Para n&#243;s, desenvolvedores, que estamos sempre ansiosos para passar para a pr&#243;xima atividade, &#233; tentador demais seguir com o pr&#243;ximo cart&#227;o, mesmo enquanto ainda h&#225; pend&#234;ncias no atual. E o modelo de integra&#231;&#227;o ass&#237;ncrona permite isso. J&#225; a &lt;a href="http://www.improveit.com.br/xp/praticas/integracao"&gt;integra&#231;&#227;o s&#237;ncrona&lt;/a&gt;, n&#227;o. Ela obriga o desenvolvedor a parar momentaneamente, ter certeza de que tudo correu bem e s&#243; ent&#227;o prosseguir para a pr&#243;xima atividade. Isso est&#225; alinhado a um &lt;a href="http://www.improveit.com.br/xp/principios"&gt;princ&#237;pio&lt;/a&gt; do &lt;a href="http://www.improveit.com.br/xp"&gt;XP&lt;/a&gt; chamado &lt;a href="http://www.improveit.com.br/xp/principios/passos_bebe"&gt;passos de beb&#234;&lt;/a&gt;. Acredito que o importante n&#227;o seja a velocidade com que partimos para a pr&#243;xima atividade, mas sim qu&#227;o r&#225;pido conseguimos entregar c&#243;digo que temos certeza de estar funcionando.&lt;/p&gt;

&lt;p&gt;Outra quest&#227;o, tamb&#233;m ligada ao &lt;a href="http://www.improveit.com.br/xp/valores/feedback"&gt;feedback&lt;/a&gt; &#233; o pr&#243;prio tempo de execu&#231;&#227;o dos &lt;a href="http://www.improveit.com.br/xp/praticas/tdd"&gt;testes&lt;/a&gt;. A &lt;a href="http://www.improveit.com.br/xp/praticas/integracao"&gt;integra&#231;&#227;o s&#237;ncrona&lt;/a&gt;, para funcionar, exige &lt;a href="http://www.improveit.com.br/xp/praticas/tdd"&gt;testes&lt;/a&gt; que executem rapidamente. Mais de cinco minutos para integrar j&#225; &#233; um problema. &lt;a href="http://en.wikipedia.org/wiki/Kent_Beck"&gt;Kent Beck&lt;/a&gt; costuma dizer: se essa atividade &#233; dif&#237;cil, execute-a freq&#252;entemente. Fazer &lt;a href="http://www.improveit.com.br/xp/praticas/build_dez"&gt;builds&lt;/a&gt; que executem rapidamente &#233; desafiador. &#201; algo que exige aten&#231;&#227;o permanente. A &lt;a href="http://www.improveit.com.br/xp/praticas/integracao"&gt;integra&#231;&#227;o s&#237;ncrona&lt;/a&gt; nos obriga a ter essa aten&#231;&#227;o e nos leva a melhorar os &lt;a href="http://www.improveit.com.br/xp/praticas/tdd"&gt;testes&lt;/a&gt; quando o tempo cresce. Na ass&#237;ncrona, &#233; f&#225;cil demais deixar os &lt;a href="http://www.improveit.com.br/xp/praticas/tdd"&gt;testes&lt;/a&gt; demorarem cada vez mais e n&#227;o fazer nada a respeito.&lt;/p&gt;

&lt;p&gt;No meu entender, essa &#233; uma quest&#227;o sist&#234;mica, ou seja, no curto prazo, trabalhar com o &lt;a href="http://cruisecontrol.sourceforge.net/"&gt;CruiseControl&lt;/a&gt; pode parecer uma boa id&#233;ia, pela aparente velocidade que ele traz ao processo de &lt;a href="http://www.improveit.com.br/xp/praticas/integracao"&gt;integra&#231;&#227;o&lt;/a&gt;. No m&#233;dio e longo prazo, entretanto, o comportamento da equipe, influenciado pelas facilidades oferecidas pelo &lt;a href="http://cruisecontrol.sourceforge.net/"&gt;CruiseControl&lt;/a&gt;, atrapalham o projeto. Digo isso com base no que pude observar em projetos que usavam o &lt;a href="http://cruisecontrol.sourceforge.net/"&gt;CruiseControl&lt;/a&gt;. Entretanto, cada projeto &#233; uma realidade. Se no seu caso o &lt;a href="http://cruisecontrol.sourceforge.net/"&gt;CruiseControl&lt;/a&gt; funciona e n&#227;o causa os problemas sist&#234;micos que mencionei, use-o. No meu caso, ainda prefiro a &lt;a href="http://www.improveit.com.br/xp/praticas/integracao"&gt;integra&#231;&#227;o s&#237;ncrona&lt;/a&gt;.&lt;/p&gt;</description>
      <pubDate>Thu, 11 Oct 2007 10:08:00 -0300</pubDate>
      <guid isPermaLink="false">urn:uuid:47d16956-1a35-45a1-b31c-6230e4bef221</guid>
      <author>Vinicius Manh&#227;es Teles</author>
      <link>http://blog.improveit.com.br/articles/2007/10/11/barrigas-abertas</link>
      <category>integra&#231;&#227;o</category>
      <category>TDD</category>
      <category>agile</category>
      <category>xp</category>
    </item>
    <item>
      <title>Nosso processo de integra&#231;&#227;o cont&#237;nua</title>
      <description>&lt;p&gt;O &lt;a href="http://lucashungaro.wordpress.com/"&gt;Lucas H&#250;ngaro&lt;/a&gt; deixou-nos um coment&#225;rio pedindo que escrev&#234;ssemos sobre nossa infra-estrutura de &lt;a href="http://pt.wikipedia.org/wiki/Sistema_de_controle_de_vers&#227;o"&gt;controle de vers&#227;o&lt;/a&gt;, &lt;a href="http://www.improveit.com.br/xp/praticas/integracao"&gt;integra&#231;&#227;o cont&#237;nua&lt;/a&gt;, &lt;a href="http://www.improveit.com.br/xp/praticas/tdd"&gt;testes unit&#225;rios&lt;/a&gt; e &lt;a href="http://www.improveit.com.br/xp/praticas/tdd/rcov"&gt;cobertura de c&#243;digo&lt;/a&gt; para projetos &lt;a href="http://www.rubyonrails.com.br"&gt;Rails&lt;/a&gt;. &#211;tima pergunta! Muito obrigado, &lt;a href="http://lucashungaro.wordpress.com/"&gt;Lucas&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;N&#243;s utilizamos o &lt;a href="http://pt.wikipedia.org/wiki/Subversion"&gt;Subversion&lt;/a&gt; como &lt;a href="http://pt.wikipedia.org/wiki/Sistema_de_controle_de_vers&#227;o"&gt;reposit&#243;rio&lt;/a&gt; e optamos por um modelo de &lt;a href="http://www.improveit.com.br/xp/praticas/integracao"&gt;integra&#231;&#227;o cont&#237;nua s&#237;ncrono&lt;/a&gt;. Isso significa que toda vez que um desenvolvedor precisa integrar, ele roda uma script do &lt;a href="http://docs.rubyrake.org/"&gt;Rake&lt;/a&gt; que faz o &lt;a href="http://pt.wikipedia.org/wiki/Sistema_de_controle_de_vers&#227;o#1.C2.B0_passo:_atualizando"&gt;update&lt;/a&gt; do c&#243;digo, executa todos os &lt;a href="http://www.improveit.com.br/xp/praticas/tdd"&gt;testes&lt;/a&gt;, verifica a &lt;a href="http://www.improveit.com.br/xp/praticas/tdd/rcov"&gt;cobertura de c&#243;digo&lt;/a&gt; e, se tudo estiver em ordem, faz o &lt;a href="http://pt.wikipedia.org/wiki/Sistema_de_controle_de_vers&#227;o#6.C2.B0_e_.C3.BAltimo_passo:_submetendo_a_vers.C3.A3o_final"&gt;commit&lt;/a&gt; do c&#243;digo.  &lt;/p&gt;

&lt;p&gt;N&#243;s trabalhamos com 100% de &lt;a href="http://www.improveit.com.br/xp/praticas/tdd/rcov"&gt;cobertura&lt;/a&gt; em todos os projetos. Para isso usamos o &lt;a href="http://www.improveit.com.br/xp/praticas/tdd/rcov"&gt;Rcov&lt;/a&gt;. O script de integra&#231;&#227;o executa a &lt;a href="http://www.improveit.com.br/xp/praticas/tdd/rcov"&gt;an&#225;lise de cobertura&lt;/a&gt; antes de cada &lt;a href="http://pt.wikipedia.org/wiki/Sistema_de_controle_de_vers&#227;o"&gt;commit&lt;/a&gt; e cancela a &lt;a href="http://www.improveit.com.br/xp/praticas/integracao"&gt;integra&#231;&#227;o&lt;/a&gt; caso o desenvolvedor tenha esquecido de fazer os &lt;a href="http://www.improveit.com.br/xp/praticas/tdd"&gt;testes&lt;/a&gt; para um c&#243;digo rec&#233;m-introduzido.&lt;/p&gt;

&lt;p&gt;A &lt;a href="http://www.improveit.com.br/xp/praticas/integracao"&gt;integra&#231;&#227;o s&#237;ncrona&lt;/a&gt; obriga o desenvolvedor a aguardar a execu&#231;&#227;o do script de &lt;a href="http://www.improveit.com.br/xp/praticas/integracao"&gt;integra&#231;&#227;o&lt;/a&gt;, antes de partir para outra tarefa de programa&#231;&#227;o. Isso &#233; bom porque evita que a gente comece outra coisa antes de saber que fizemos corretamente a atividade corrente. Al&#233;m disso, ter que esperar pela execu&#231;&#227;o do script nos leva a ter aten&#231;&#227;o permanente com o tempo de execu&#231;&#227;o dele. Se crescer muito, a gente o aprimora para reduzir o tempo. No geral, tentamos manter o tempo de execu&#231;&#227;o sempre abaixo dos cinco minutos. &lt;/p&gt;

&lt;p&gt;O contr&#225;rio da &lt;a href="http://www.improveit.com.br/xp/praticas/integracao"&gt;integra&#231;&#227;o s&#237;ncrona&lt;/a&gt; &#233; a ass&#237;ncrona, que utiliza algum servidor, como um &lt;a href="http://cruisecontrol.sourceforge.net/"&gt;CruiseControl&lt;/a&gt;. Nesse caso, o desenvolver faz o &lt;a href="http://pt.wikipedia.org/wiki/Sistema_de_controle_de_vers&#227;o"&gt;commit&lt;/a&gt;, o qual dispara um script no servidor do &lt;a href="http://cruisecontrol.sourceforge.net/"&gt;CruiseControl&lt;/a&gt;. Ele executa todos os &lt;a href="http://www.improveit.com.br/xp/praticas/tdd"&gt;testes&lt;/a&gt; e demais verifica&#231;&#245;es enquanto o desenvolvedor j&#225; passou para outra atividade. Algum tempo depois ele recebe um email ou outro tipo de notifica&#231;&#227;o avisando se tiver acontecido um erro. &#201; um modelo interessante em v&#225;rias circunst&#226;ncias, mas nos projetos que fazemos tentamos evit&#225;-lo. &lt;a href="http://www.jamesshore.com"&gt;James Shore&lt;/a&gt; escreveu um &lt;a href="http://www.jamesshore.com/Blog/Why%20I%20Dont%20Like%20CruiseControl.html"&gt;excelente artigo&lt;/a&gt; que resume as raz&#245;es para n&#227;o usar o &lt;a href="http://cruisecontrol.sourceforge.net/"&gt;CruiseControl&lt;/a&gt;. Nossas raz&#245;es s&#227;o basicamente as mesmas.&lt;/p&gt;

&lt;p&gt;Para os &lt;a href="http://www.improveit.com.br/xp/praticas/tdd"&gt;testes unit&#225;rios&lt;/a&gt;, utilizamos o &lt;a href="http://manuals.rubyonrails.com/read/chapter/21"&gt;Test::Unit&lt;/a&gt;, naturalmente, al&#233;m do &lt;a href="http://mocha.rubyforge.org"&gt;Mocha&lt;/a&gt; para os &lt;a href="http://www.improveit.com.br/xp/praticas/tdd/mock_objects"&gt;mock objects&lt;/a&gt; e o &lt;a href="http://www.openqa.org/selenium-on-rails/"&gt;Selenium on Rails&lt;/a&gt; para os testes de aceita&#231;&#227;o.&lt;/p&gt;</description>
      <pubDate>Fri, 05 Oct 2007 09:45:00 -0300</pubDate>
      <guid isPermaLink="false">urn:uuid:e37e0827-a659-4adb-813c-888fbcf8b385</guid>
      <author>Vinicius Manh&#227;es Teles</author>
      <link>http://blog.improveit.com.br/articles/2007/10/05/nosso-processo-de-integracao-continua</link>
      <category>TDD</category>
      <category>xp</category>
      <category>rails</category>
      <category>agile</category>
    </item>
    <item>
      <title>Podcast &amp;quot;Tudo que quero saber&amp;quot;</title>
      <description>&lt;p&gt;&lt;a href="http://tudoquequerosaber.com"&gt;Eduardo Fiorezi&lt;/a&gt; publicou mais um &lt;a href="http://podcasts.tudoquequerosaber.com/podcast/Pod10-Disciplina_em_XP_com_Danilo_Sato_e_Marcos_Tapajos.mp3"&gt;podcast&lt;/a&gt; da s&#233;rie &lt;a href="http://tudoquequerosaber.com/?p=40"&gt;"Tudo que quero saber!"&lt;/a&gt;. Dessa vez foi sobre disciplina em projetos com &lt;a href="http://www.improveit.com.br/xp"&gt;eXtreme Programming&lt;/a&gt; e &lt;a href="http://www.improveit.com.br/tapajos"&gt;eu&lt;/a&gt; fui entrevistado junto com o &lt;a href="http://www.dtsato.com/"&gt;Danilo Sato&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Fiquei muito feliz com o convite do &lt;a href="http://tudoquequerosaber.com"&gt;Eduardo&lt;/a&gt; e em conhecer o Danilo, com quem j&#225; troquei algumas figurinhas sobre o &lt;a href="http://groups.google.com/group/dojo_sp"&gt;Dojo-SP&lt;/a&gt;. Obrigado &lt;a href="http://tudoquequerosaber.com"&gt;Eduardo&lt;/a&gt; !&lt;/p&gt;

&lt;p&gt;Mais informa&#231;&#245;es sobre o &lt;a href="http://podcasts.tudoquequerosaber.com/podcast/Pod10-Disciplina_em_XP_com_Danilo_Sato_e_Marcos_Tapajos.mp3"&gt;podcast&lt;/a&gt; &lt;a href="http://tudoquequerosaber.com/?p=40"&gt;aqui&lt;/a&gt;.&lt;/p&gt;</description>
      <pubDate>Mon, 27 Aug 2007 18:03:00 -0300</pubDate>
      <guid isPermaLink="false">urn:uuid:035ce8fe-09ef-49be-b0fb-ea7e77ea5f6f</guid>
      <author>Marcos Tapaj&#243;s</author>
      <link>http://blog.improveit.com.br/articles/2007/08/27/podcast-tudo-que-quero-saber</link>
      <category>xp</category>
      <category>extreme</category>
      <category>programming</category>
      <category>Testes</category>
      <category>TDD</category>
      <category>dojo</category>
      <category>passos de bebe</category>
      <category>baby steps</category>
      <category>podcast</category>
      <category>Marcos</category>
      <category>Tapaj&#243;s</category>
      <category>Danilo Sato</category>
    </item>
    <item>
      <title>Plugin Brazilian Rails</title>
      <description>&lt;p&gt;Acabei de publicar no &lt;a href="http://www.rubyforge.org"&gt;RubyForge&lt;/a&gt; a primeira vers&#227;o do plugin &lt;a href="http://rubyforge.org/projects/brazilian-rails/"&gt;Brazilian Rails&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Desde que eu comecei a programar em &lt;a href="http://www.ruby-lang.org"&gt;Ruby&lt;/a&gt;, usando o &lt;a href="http://www.rubyonrails.org/"&gt;Ruby on Rails&lt;/a&gt;, sempre adorei o sistema de plugins, onde facilmente podemos incorporar novas funcionalidades que atendem a v&#225;rios projetos. &lt;/p&gt;

&lt;p&gt;Sempre tive vontade de colocar nossos c&#243;digos dispon&#237;veis como plugins mas nunca tive tempo para fazer isso. Inevitavelmente continuo sem tempo mas agora estou contando com um time de amigos que resolveram me ajudar. S&#227;o eles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Andr&#233; Luiz Kupkovski (&lt;a href="http://www.ancar.com.br"&gt;Ancar&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Celestino Ferreira Gomes (&lt;a href="http://www.ancar.com.br"&gt;Ancar&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Rafael Fraga Walter (&lt;a href="http://www.ancar.com.br"&gt;Ancar&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Fernando Jo&#227;o Manfroi (&lt;a href="http://www.ancar.com.br"&gt;Ancar&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Luciene Souza Luna (&lt;a href="http://www.ancar.com.br"&gt;Ancar&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Esse plugin surgiu da necessidade de usar o m&#233;todo error&lt;em&gt;_&lt;/em&gt;messages_for para sinalizar na camada de vista os erros encontrados nas valida&#231;&#245;es do nosso modelo. Essas mensagens eram em ingl&#234;s, o que fazia com que os desenvolvedores tivessem que implementar algo semelhante no RHTML.&lt;/p&gt;

&lt;p&gt;Acabamos notando que v&#225;rias outras coisas poderiam ficar mais simples aos brasileiros usando-as como estamos acostumados. Por exemplo, nosso formato padr&#227;o de data &#233; DD/MM/AAAA mas &lt;a href="http://www.ruby-lang.org"&gt;Ruby&lt;/a&gt; n&#227;o trabalha da mesma forma. Para solucionar esse problema fizemos uma implementa&#231;&#227;o que modifica o m&#233;todo to_date do modulo String para lidar com esse nosso formato.&lt;/p&gt;

&lt;p&gt;Esse nosso primeiro release n&#227;o abrange todas as nossas implementa&#231;&#245;es mas resolvemos publicar o quanto antes para poder contar com o &lt;a href="http://www.improveit.com.br/xp/valores/feedback"&gt;feedback&lt;/a&gt; dos nossos usu&#225;rios e melhorar continuamente. &lt;/p&gt;

&lt;p&gt;Trata-se de um projeto Open Source, onde gostar&#237;amos de contar com a colabora&#231;&#227;o da comunidade Brasileira com sugest&#245;es e quem sabe com novos desenvolvedores. Minha &#250;nica exig&#234;ncia com rela&#231;&#227;o aos patches &#233; que eles venham acompanhados de &lt;a href="http://www.improveit.com.br/xp/praticas/tdd"&gt;testes&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Quem quiser experimentar nosso plugin basta executar uma &#250;nica linha e reiniciar sua aplica&#231;&#227;o &lt;a href="http://www.rubyonrails.org/"&gt;Rails&lt;/a&gt;.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;script/plugin install -x \
svn://rubyforge.org/var/svn/brazilian-rails
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Como temos v&#225;rios tipos de c&#243;digos diferentes devemos fazer outros plugins em breve !&lt;/p&gt;</description>
      <pubDate>Fri, 06 Jul 2007 21:30:00 -0300</pubDate>
      <guid isPermaLink="false">urn:uuid:8ceaaf97-3329-4baa-81b8-75731631f831</guid>
      <author>Marcos Tapaj&#243;s</author>
      <link>http://blog.improveit.com.br/articles/2007/07/06/plugin-brazilian-rails</link>
      <category>ruby</category>
      <category>rails</category>
      <category>Plugins</category>
      <category>Testes</category>
      <category>TDD</category>
      <category>Active</category>
      <category>Record</category>
      <category>Action</category>
      <category>View</category>
      <category>brazilianrails</category>
    </item>
  </channel>
</rss>
