<?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: Nosso processo de integra&#231;&#227;o cont&#237;nua</title>
    <link>http://blog.improveit.com.br/articles/2007/10/05/nosso-processo-de-integracao-continua</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description></description>
    <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>"Nosso processo de integra&#231;&#227;o cont&#237;nua" by Rodrigo Urubatan</title>
      <description>&lt;p&gt;Amanha pela manha sera publicado no meu blog um exemplo de script do Rake que estou utilizando para integra&#231;&#227;o continua sincrona em alguns projetos, mas eu utilizo o GIT para controle de vers&#245;es em vez do SVN :D&lt;/p&gt;</description>
      <pubDate>Tue, 16 Oct 2007 19:34:47 -0200</pubDate>
      <guid isPermaLink="false">urn:uuid:31c07505-0747-4949-9294-5714c6a5f732</guid>
      <link>http://blog.improveit.com.br/articles/2007/10/05/nosso-processo-de-integracao-continua#comment-829</link>
    </item>
    <item>
      <title>"Nosso processo de integra&#231;&#227;o cont&#237;nua" by Vin&#237;cius Manh&#227;es Teles</title>
      <description>&lt;p&gt;Ol&#225;, Lucas.&lt;/p&gt;

&lt;p&gt;N&#227;o temos nenhum software para gerenciar bugs. Para n&#243;s, bug &#233; algo que deve ser eliminado assim que &#233; encontrado e felizmente &#233; raro identificarmos um problema nos nosso projetos, devido a taxa elevada de &lt;a href="http://www.improveit.com.br/xp/praticas/tdd" rel="nofollow"&gt;testes&lt;/a&gt;. Quando acontece algo errado, n&#243;s atacamos o problema imediatamente ou, no m&#225;ximo, colocamos um post it no quadro, sinalizado como priorit&#225;rio, para atacar o bug assim que poss&#237;vel. Para ser honesto, n&#243;s n&#227;o gostamos da id&#233;ia de uma lista de bugs. Preferimos a id&#233;ia de n&#227;o ter bugs quase nunca. :-)&lt;/p&gt;

&lt;p&gt;Quanto &#224;s atividades, h&#225; duas situa&#231;&#245;es. Nos projetos presenciais usamos apenas quadro branco e cart&#245;es. S&#227;o bem mais eficazes que qualquer tipo de software. Entretanto, nos projetos distribu&#237;dos, utilizamos o &lt;a href="http://www.basecamphq.com" rel="nofollow"&gt;Basecamp&lt;/a&gt; para gerenciar as atividades.&lt;/p&gt;

&lt;p&gt;Abra&#231;os, &lt;a href="http://www.improveit.com.br/vinicius" rel="nofollow"&gt;Vin&#237;cius Teles&lt;/a&gt;.&lt;/p&gt;</description>
      <pubDate>Tue, 16 Oct 2007 07:27:12 -0200</pubDate>
      <guid isPermaLink="false">urn:uuid:926f3645-938c-47b9-b3a3-dcf132a7771f</guid>
      <link>http://blog.improveit.com.br/articles/2007/10/05/nosso-processo-de-integracao-continua#comment-827</link>
    </item>
    <item>
      <title>"Nosso processo de integra&#231;&#227;o cont&#237;nua" by Lucas Fais</title>
      <description>&lt;p&gt;Voc&#234;s utilizam algum software para gerenciar atividades, lista de bugs e releases? Qual?&lt;/p&gt;

&lt;p&gt;Muito bom o post!&lt;/p&gt;</description>
      <pubDate>Tue, 16 Oct 2007 05:34:11 -0200</pubDate>
      <guid isPermaLink="false">urn:uuid:c14400bb-048e-4abe-819e-27599e6bf9db</guid>
      <link>http://blog.improveit.com.br/articles/2007/10/05/nosso-processo-de-integracao-continua#comment-826</link>
    </item>
    <item>
      <title>"Nosso processo de integra&#231;&#227;o cont&#237;nua" by Vin&#237;cius Manh&#227;es Teles</title>
      <description>&lt;p&gt;Ol&#225;, Eduardo.&lt;/p&gt;

&lt;p&gt;Sem problemas. Discordamos nesse ponto e n&#227;o h&#225; nada de errado nisso. S&#243; gostaria de refor&#231;ar uma coisa: o que n&#243;s fazemos n&#227;o &#233; imposs&#237;vel. :-) Se fosse, pode ter certeza de que n&#227;o perder&#237;amos nosso tempo. ;-)&lt;/p&gt;

&lt;p&gt;H&#225; um ponto a&#237; que talvez n&#227;o esteja claro e pode estar gerando algum erro de interpreta&#231;&#227;o naquilo que eu havia mencionado antes.  &lt;/p&gt;

&lt;p&gt;Vamos supor o seguinte cen&#225;rio. H&#225; oito pessoas na equipe. Eu fa&#231;o checkout do projeto &#224;s 9:00h e come&#231;o a trabalhar em uma atividade. &#192;s 9:45h resolvo integrar o c&#243;digo. Acontece que outras pessoas colocaram c&#243;digo no reposit&#243;rio &#224;s 9:20h, 9:33h e 9:42h. Portanto, a vers&#227;o do projeto que est&#225; no meu computador est&#225; diferente da que est&#225; no reposit&#243;rio, n&#227;o s&#243; devido ao que acabei de implementar, mas tamb&#233;m em fun&#231;&#227;o do que meus colegas colocaram l&#225; antes de mim.&lt;/p&gt;

&lt;p&gt;No momento em que eu executo o script de integra&#231;&#227;o s&#237;ncrona, eu trago automaticamente para a minha m&#225;quina as altera&#231;&#245;es introduzidas &#224;s 9:20h, 9:33h e 9:42h. Agora, todos os testes s&#227;o executados e t&#234;m que passar. Eles v&#227;o levar em conta as altera&#231;&#245;es dos meus colegas e as minhas. Se tudo estiver ok, um commit ser&#225; realizado. Sen&#227;o, farei os ajustes necess&#225;rios.&lt;/p&gt;

&lt;p&gt;Portanto, a integra&#231;&#227;o n&#227;o est&#225; preocupada com o que est&#225; na m&#225;quina de cada pessoa. O problema &#233; o que foi para o reposit&#243;rio entre o momento em que eu fiz checkout e o momento em que farei o commit. A premissa &#233;: eu peguei o projeto funcionando, vou devolv&#234;-lo para o reposit&#243;rio funcionando. Esse &#233; o tipo de verifica&#231;&#227;o que n&#243;s fazemos e, como voc&#234; pode notar, n&#227;o &#233; imposs&#237;vel. &lt;/p&gt;

&lt;p&gt;Entendo seu ponto de vista. Mas, particularmente, me agrada bastante a possibilidade de fazer um checkout do projeto a qualquer momento e ter a certeza de que ele funcionar&#225;. Sei que isso n&#227;o &#233; o usual e para muitos projetos parece uma realidade distante, mas ela &#233; perfeitamente alcan&#231;&#225;vel.  E, na minha opini&#227;o, faz uma tremenda diferen&#231;a.&lt;/p&gt;

&lt;p&gt;Muio obrigado pelas opini&#245;es.&lt;/p&gt;

&lt;p&gt;Grande abra&#231;o, Vin&#237;cius.&lt;/p&gt;</description>
      <pubDate>Mon, 15 Oct 2007 11:45:06 -0200</pubDate>
      <guid isPermaLink="false">urn:uuid:a62ebf50-8379-414b-a851-d7ddb4324a91</guid>
      <link>http://blog.improveit.com.br/articles/2007/10/05/nosso-processo-de-integracao-continua#comment-821</link>
    </item>
    <item>
      <title>"Nosso processo de integra&#231;&#227;o cont&#237;nua" by Eduardo Scoz</title>
      <description>&lt;p&gt;Ol&#225; Vinicius&lt;/p&gt;

&lt;p&gt;Desculpe a demora em responder, eu havia perdido o link para o post. &lt;/p&gt;

&lt;p&gt;Entendo a diferen&#231;a do que voce est&#225; querendo dizer (teste de integra&#231;ao X integra&#231;ao do c&#243;digo), mas n&#227;o concordo com a sua opini&#227;o. &lt;/p&gt;

&lt;p&gt;Acho comum, e n&#227;o errado, ter c&#243;digo quebrando unit tests no scm. De uma forma meio estranha, d&#225; at&#233; pra triar algo positivo disso, pois assim d&#225; pra saber que os desenvolvedores est&#227;o seguindo a id&#233;ia do TDD (criar testes primeiro, depois desenvolver o c&#243;digo). Acho melhor que o trabalho que os desenvolvedores est&#227;o fazendo seja salvos e testados em conjunto o quanto antes poss&#237;vel, e se para isso c&#243;digo que falha os unit tests tem que ir pro SCM, tudo bem. O importante &#233; que os erros n&#227;o permanecam no codigo por muito tempo, e que os desenvolvedores trabalhem para acabar com eles.&lt;/p&gt;

&lt;p&gt;For&#231;ar os desenvolvedores em colocar somente codigo que passa todos os testes no scm &#233;, se n&#227;o imposs&#237;vel(posi voc&#234; nunca vai poder testar o que outros desenvolvedores estao fazendo), uma grande pedida para que os testes sejam deletados/n&#227;o feitos apropriadamente. Voc&#234; pode at&#233; confiar nos desenvolvedores do seu grupo (e confio plenamente nos meus), mas acho melhor ter regras que incentivem o uso de testes do que regras que garantem o imposs&#237;vel.&lt;/p&gt;

&lt;p&gt;Bom, engenharia de software eh a minha segunda paix&#227;o (logo depois da minha esposa). N&#227;o leve nada de forma pessoal.&lt;/p&gt;

&lt;p&gt;Abra&#231;os&lt;/p&gt;

&lt;p&gt;Eduardo Scoz&lt;/p&gt;</description>
      <pubDate>Mon, 15 Oct 2007 11:15:51 -0200</pubDate>
      <guid isPermaLink="false">urn:uuid:b09ecea6-e855-4da4-86df-8ed63fc01a92</guid>
      <link>http://blog.improveit.com.br/articles/2007/10/05/nosso-processo-de-integracao-continua#comment-820</link>
    </item>
    <item>
      <title>"Nosso processo de integra&#231;&#227;o cont&#237;nua" by Vin&#237;cius Manh&#227;es Teles</title>
      <description>&lt;p&gt;Marcelo,&lt;/p&gt;

&lt;p&gt;Muito obrigado por seu coment&#225;rio. Ele me motivou a escrever &lt;a href="http://blog.improveit.com.br/articles/2007/10/11/barrigas-abertas" rel="nofollow"&gt;esse outro artigo&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Grande abra&#231;o, &lt;a href="http://www.improveit.com.br/vinicius" rel="nofollow"&gt;Vin&#237;cius&lt;/a&gt;.&lt;/p&gt;</description>
      <pubDate>Thu, 11 Oct 2007 10:22:49 -0300</pubDate>
      <guid isPermaLink="false">urn:uuid:aef71ccd-f7c6-401d-8f74-76c0d93071bf</guid>
      <link>http://blog.improveit.com.br/articles/2007/10/05/nosso-processo-de-integracao-continua#comment-815</link>
    </item>
    <item>
      <title>"Nosso processo de integra&#231;&#227;o cont&#237;nua" by Tapaj&#243;s</title>
      <description>&lt;p&gt;Oi Eduardo, tudo bom ?&lt;/p&gt;

&lt;p&gt;Nos nossos sistemas n&#227;o usamos o assert_select. A presen&#231;a de elementos na p&#225;gina s&#227;o verificados atrav&#233;s dos testes do Selenium.&lt;/p&gt;

&lt;p&gt;Nossos testes do selenium n&#227;o s&#227;o apenas para verificar elementos na p&#225;gina, ele simula a itera&#231;&#227;o de um usu&#225;rio, preenchendo campos, selecionando combos e etc.&lt;/p&gt;

&lt;p&gt;Um abra&#231;&#227;o&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.improveit.com.br/tapajos" rel="nofollow"&gt;Tapaj&#243;s&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Mon, 08 Oct 2007 07:05:40 -0300</pubDate>
      <guid isPermaLink="false">urn:uuid:676b2685-7256-45cf-b8fa-19fa437438fc</guid>
      <link>http://blog.improveit.com.br/articles/2007/10/05/nosso-processo-de-integracao-continua#comment-812</link>
    </item>
    <item>
      <title>"Nosso processo de integra&#231;&#227;o cont&#237;nua" by Eduardo Fiorezi</title>
      <description>&lt;p&gt;Abordando um lado que ainda me gera muitas d&#250;vidas... Voc&#234;s fazem uso do assert_select para testar os elementos html do software?&lt;/p&gt;

&lt;p&gt;Ou tudo isso se torna parte do Selenium on Rails? ou Testes funcionais?&lt;/p&gt;

&lt;p&gt;Nos projetos que estou envolvido fazemos muitos testes com assert_select nos testes funcionais... Mas tenho a impress&#227;o de que esse teste deveriam estar em outro lugar...&lt;/p&gt;

&lt;p&gt;Como &#233; com voc&#234;s?&lt;/p&gt;

&lt;p&gt;Abra&#231;os&lt;/p&gt;</description>
      <pubDate>Sun, 07 Oct 2007 16:51:10 -0300</pubDate>
      <guid isPermaLink="false">urn:uuid:82978245-c669-42e3-9add-51c3bc1ea8df</guid>
      <link>http://blog.improveit.com.br/articles/2007/10/05/nosso-processo-de-integracao-continua#comment-811</link>
    </item>
    <item>
      <title>"Nosso processo de integra&#231;&#227;o cont&#237;nua" by Marcelo Baltar</title>
      <description>&lt;p&gt;Oi Vin&#237;cius,&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;Muito coerente inclusive com as id&#233;ias do pr&#243;prio pessoal do Ruby, ao serem confrontados com supostos "problemas" da linguagem: "ei, isso &#233; mesmo um problema? Quantas vezes escrever tanto XML melhorou seu projeto?", e por a&#237; vai... :)&lt;/p&gt;

&lt;p&gt;My 2 cents! &lt;/p&gt;

&lt;p&gt;Abra&#231;os!&lt;/p&gt;</description>
      <pubDate>Sat, 06 Oct 2007 14:02:56 -0300</pubDate>
      <guid isPermaLink="false">urn:uuid:c16c7cb8-600b-4cef-80d2-be76d6e7babe</guid>
      <link>http://blog.improveit.com.br/articles/2007/10/05/nosso-processo-de-integracao-continua#comment-810</link>
    </item>
    <item>
      <title>"Nosso processo de integra&#231;&#227;o cont&#237;nua" by Vin&#237;cius Manh&#227;es Teles</title>
      <description>&lt;p&gt;Excelente, Leandro. O que ele descreve nesse artigo &#233; basicamente o que n&#243;s fazemos, com duas pequenas diferen&#231;as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;N&#243;s usamos o Bob Esponja ao inv&#233;s daquela galinha. :-)  Encontre-o nessas &lt;a href="http://www.improveit.com.br/fotos/album/72157602233041553" rel="nofollow"&gt;fotos&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Nosso script tamb&#233;m testa se a cobertura do c&#243;digo mant&#233;m-se permanentemente nos 100%.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Grande abra&#231;o, &lt;a href="http://www.improveit.com.br/vinicius" rel="nofollow"&gt;Vin&#237;cius&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Fri, 05 Oct 2007 15:50:17 -0300</pubDate>
      <guid isPermaLink="false">urn:uuid:8eef6f74-cc61-4a5a-b37c-09732a5b59a6</guid>
      <link>http://blog.improveit.com.br/articles/2007/10/05/nosso-processo-de-integracao-continua#comment-809</link>
    </item>
    <item>
      <title>"Nosso processo de integra&#231;&#227;o cont&#237;nua" by Vin&#237;cius Manh&#227;es Teles</title>
      <description>&lt;p&gt;Ol&#225;, Eduardo.&lt;/p&gt;

&lt;p&gt;Com rela&#231;&#227;o a quest&#227;o do servidor, acho importante diferenciar a a&#231;&#227;o de &lt;a href="http://www.improveit.com.br/xp/praticas/integracao" rel="nofollow"&gt;integrar o c&#243;digo&lt;/a&gt; do desenvolvedor do ato de executar &lt;a href="http://en.wikipedia.org/wiki/Integration_testing" rel="nofollow"&gt;testes de integra&#231;&#227;o&lt;/a&gt;. Os termos s&#227;o parecidos, mas o significado n&#227;o &#233; o mesmo. Quando digo "&lt;a href="http://www.improveit.com.br/xp/praticas/integracao" rel="nofollow"&gt;integrar o c&#243;digo&lt;/a&gt;", quero dizer coloc&#225;-lo no reposit&#243;rio de maneira segura, com a garantia de que ele n&#227;o ir&#225; quebrar algo que j&#225; estava l&#225;. &lt;a href="http://en.wikipedia.org/wiki/Integration_testing" rel="nofollow"&gt;Testes de integra&#231;&#227;o&lt;/a&gt;, por sua vez, t&#234;m a ver com testar a aplica&#231;&#227;o, em um ambiente o mais pr&#243;ximo poss&#237;vel do de produ&#231;&#227;o, interagindo com outros aplicativos ou equipamentos, quando aplic&#225;vel.&lt;/p&gt;

&lt;p&gt;O primeiro tipo de &lt;a href="http://www.improveit.com.br/xp/praticas/integracao" rel="nofollow"&gt;integra&#231;&#227;o&lt;/a&gt;, ou seja, colocar no reposit&#243;rio, &#233; mais seguro da forma como fazemos, em minha opini&#227;o. Porque o desenvolvedor n&#227;o consegue colocar c&#243;digo ruim no reposit&#243;rio. S&#243; se consegue fazer commit se os &lt;a href="http://www.improveit.com.br/xp/praticas/tdd" rel="nofollow"&gt;testes&lt;/a&gt; realmente executarem com perfei&#231;&#227;o. Quando digo &lt;a href="http://www.improveit.com.br/xp/praticas/tdd" rel="nofollow"&gt;testes&lt;/a&gt;, quero dizer &lt;a href="http://www.improveit.com.br/xp/praticas/tdd" rel="nofollow"&gt;testes&lt;/a&gt; de todo o aplicativo e n&#227;o apenas aqueles &lt;a href="http://www.improveit.com.br/xp/praticas/tdd" rel="nofollow"&gt;testes&lt;/a&gt; que o desenvolvedor acabou de criar. Essa restri&#231;&#227;o automatizada garante que o reposit&#243;rio esteja sempre em um estado no qual tudo est&#225; funcionando. Nossos scripts garantem isso.&lt;/p&gt;

&lt;p&gt;No modelo ass&#237;ncrono, o desenvolvedor pode fazer commit de qualquer coisa. O m&#225;ximo que o &lt;a href="http://cruisecontrol.sourceforge.net/" rel="nofollow"&gt;CruiseControl&lt;/a&gt; vai fazer &#233; notificar as pessoas de que algo est&#225; errado. Mas, ele n&#227;o impede a entrada de c&#243;digo ruim no reposit&#243;rio. Do modo que n&#243;s fazemos, ao contr&#225;rio, n&#227;o se consegue colocar c&#243;digo ruim no reposit&#243;rio.&lt;/p&gt;

&lt;p&gt;Agora vamos a segunda quest&#227;o que voc&#234; levantou que &#233; a execu&#231;&#227;o de &lt;a href="http://en.wikipedia.org/wiki/Integration_testing" rel="nofollow"&gt;testes de integra&#231;&#227;o&lt;/a&gt;. Nesse sentido, acho o &lt;a href="http://cruisecontrol.sourceforge.net/" rel="nofollow"&gt;CruiseControl&lt;/a&gt; muito v&#225;lido sim. Inclusive existem testes desse g&#234;nero que, pela pr&#243;pria natureza, demandam muito tempo. &#192;s vezes precisam ser executados de madrugada, por exemplo. Para esses casos, vejo o &lt;a href="http://cruisecontrol.sourceforge.net/" rel="nofollow"&gt;CruiseControl&lt;/a&gt; como algo bastante &#250;til. &lt;/p&gt;

&lt;p&gt;N&#227;o entendi direito o que voc&#234; quis dizer no par&#225;grafo que come&#231;a com "outra coisa &#233; que voc&#234; acaba for&#231;ando os usu&#225;rios a n&#227;o salvarem c&#243;digo no servidor (...) pode-se dizer que vc nunca saber&#225; ao certo se o que est&#225; no svn &#233; realmente 100% test&#225;vel." Seria legal se voc&#234; pudesse esclarecer melhor. Em todo caso, no nosso processo, temos garantias de que o c&#243;digo no SVN &#233; sempre 100% test&#225;vel e testado.&lt;/p&gt;

&lt;p&gt;Nos nossos projetos, pensamos v&#225;rias vezes em adotar o &lt;a href="http://cruisecontrol.sourceforge.net/" rel="nofollow"&gt;CruiseControl&lt;/a&gt; para fazer &lt;a href="http://en.wikipedia.org/wiki/Integration_testing" rel="nofollow"&gt;testes integrados&lt;/a&gt;, mas nunca chegamos a faz&#234;-lo. Provavelmente porque ainda n&#227;o tivemos uma necessidade t&#227;o forte nesse sentido, pela pr&#243;pria natureza dos projetos. Entretanto, temos clientes onde a natureza dos projetos deles torna essencial o uso do &lt;a href="http://cruisecontrol.sourceforge.net/" rel="nofollow"&gt;CruiseControl&lt;/a&gt; para &lt;a href="http://en.wikipedia.org/wiki/Integration_testing" rel="nofollow"&gt;testes de integra&#231;&#227;o&lt;/a&gt;. Em alguns casos, &#233; fundamental tamb&#233;m para a &lt;a href="http://www.improveit.com.br/xp/praticas/integracao" rel="nofollow"&gt;integra&#231;&#227;o cont&#237;nua&lt;/a&gt;. &#201; o caso, por exemplo, de um cliente que trabalha fortemente com C++. S&#243; o processo de compila&#231;&#227;o de todo o c&#243;digo e suas bibliotecas j&#225; &#233; suficientemente demorado para justificar o uso de um &lt;a href="http://cruisecontrol.sourceforge.net/" rel="nofollow"&gt;CruiseControl&lt;/a&gt;. N&#227;o &#233; o que acontece no nosso caso particular, mas se fosse, tamb&#233;m adotar&#237;amos o &lt;a href="http://cruisecontrol.sourceforge.net/" rel="nofollow"&gt;CruiseControl&lt;/a&gt; na &lt;a href="http://www.improveit.com.br/xp/praticas/integracao" rel="nofollow"&gt;integra&#231;&#227;o cont&#237;nua&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;No fim das contas, tudo depende do projeto. Em todo caso, sempre que o projeto permite, preferimos fazer a &lt;a href="http://www.improveit.com.br/xp/praticas/integracao" rel="nofollow"&gt;integra&#231;&#227;o s&#237;ncrona&lt;/a&gt;, para n&#227;o permitir a entrada de c&#243;digo ruim no reposit&#243;rio, mesmo que seja por pouco tempo. Para &lt;a href="http://en.wikipedia.org/wiki/Integration_testing" rel="nofollow"&gt;testes de integra&#231;&#227;o&lt;/a&gt;, por sua vez, o uso do &lt;a href="http://cruisecontrol.sourceforge.net/" rel="nofollow"&gt;CruiseControl&lt;/a&gt; me parece uma &#243;tima id&#233;ia, por&#233;m nem todos os projetos t&#234;m uma demanda t&#227;o forte nesse sentido. &lt;/p&gt;

&lt;p&gt;Grande abra&#231;o, &lt;a href="http://www.improveit.com.br/vinicius" rel="nofollow"&gt;Vin&#237;cius&lt;/a&gt;.&lt;/p&gt;</description>
      <pubDate>Fri, 05 Oct 2007 15:26:46 -0300</pubDate>
      <guid isPermaLink="false">urn:uuid:10979db5-0e92-433c-97a7-dcd1b4d9d70e</guid>
      <link>http://blog.improveit.com.br/articles/2007/10/05/nosso-processo-de-integracao-continua#comment-808</link>
    </item>
    <item>
      <title>"Nosso processo de integra&#231;&#227;o cont&#237;nua" by Leandro Zis</title>
      <description>&lt;p&gt;Ola Eduardo, o James Shore n&#227;o &#233; contra usar uma maquina para integra&#231;&#227;o, ele &#233; contra usar um servidor de integra&#231;&#227;o tipo o CruiseControl. Este &lt;a href="http://www.jamesshore.com/Blog/Continuous-Integration-on-a-Dollar-a-Day.html" rel="nofollow"&gt;artigo&lt;/a&gt; explica melhor: &lt;/p&gt;</description>
      <pubDate>Fri, 05 Oct 2007 14:16:32 -0300</pubDate>
      <guid isPermaLink="false">urn:uuid:821858ac-b4d8-42af-bef8-99f27b3c0b93</guid>
      <link>http://blog.improveit.com.br/articles/2007/10/05/nosso-processo-de-integracao-continua#comment-807</link>
    </item>
    <item>
      <title>"Nosso processo de integra&#231;&#227;o cont&#237;nua" by Eduardo Scoz</title>
      <description>&lt;p&gt;Ol&#225; Vinicius,
Legal o seu post. Gostei especialmente de saber as ferramentas pra testes que vc usa, mas eu realmente discordo totalmente do James Shore quanto a n&#227;o utilizar um servidor de integra&#231;&#227;o.&lt;/p&gt;

&lt;p&gt;Toda a id&#233;ia de um servidor de integra&#231;&#227;o &#233; pra certificar que tudo o que voc&#234; est&#225; fazendo ir&#225; &lt;strong&gt;integrar&lt;/strong&gt; corretamente com todas as outras partes do sistema. Isso inclui servicos externos, c&#243;digo sendo criado por outros desenvolvedores, requerimentos, e principalmente ambiente no qual a aplica&#231;&#227;o estar&#225; rodando. &lt;/p&gt;

&lt;p&gt;No momento em que voc&#234; tira esse servi&#231;o, e passa a rodar tudo a partir da maquina do desenvolvedor, vc perde uma grande parte: o ambiente &#233; diferente/errado. Isso j&#225; &#233; suficiente pra vc n&#227;o poder confiar 100% no que est&#225; no servidor. &lt;/p&gt;

&lt;p&gt;Outra coisa &#233; que voc&#234; acaba for&#231;ando os usu&#225;rios a n&#227;o salvarem c&#243;digo no servidor, o que &#233; algo terrivel. Claramente, vc est&#225; dizendo que ele segue as normas, ou salva o que est&#225; fazendo. O que acabar&#225; acontecendo &#233; que os desenvolvedores vao acabar enviando c&#243;digo nao claramente testado. Dum outro ponto de vista, pode-se dizer que vc nunca saber&#225; ao certo se o que est&#225; no svn &#233; realmente 100% testavel.&lt;/p&gt;

&lt;p&gt;Enquanto isso pode funcionar (e claramente funciona pra vcs), acho que vc acaba perdendo muito por causa de algo t&#227;o simples como n&#227;o ter um outro ambiente s&#243; para testes.&lt;/p&gt;</description>
      <pubDate>Fri, 05 Oct 2007 13:40:53 -0300</pubDate>
      <guid isPermaLink="false">urn:uuid:a75d9497-d954-4831-8e51-c2f5f3a71a60</guid>
      <link>http://blog.improveit.com.br/articles/2007/10/05/nosso-processo-de-integracao-continua#comment-806</link>
    </item>
    <item>
      <title>"Nosso processo de integra&#231;&#227;o cont&#237;nua" by Daniel Passos</title>
      <description>&lt;p&gt;Excelente post. Bastante instrutivo para quem deseja implementar testes com rails.&lt;/p&gt;</description>
      <pubDate>Fri, 05 Oct 2007 13:10:49 -0300</pubDate>
      <guid isPermaLink="false">urn:uuid:8b09dfeb-e939-4248-9319-842258087fff</guid>
      <link>http://blog.improveit.com.br/articles/2007/10/05/nosso-processo-de-integracao-continua#comment-805</link>
    </item>
    <item>
      <title>"Nosso processo de integra&#231;&#227;o cont&#237;nua" by Lucas H&#250;ngaro</title>
      <description>&lt;p&gt;Vin&#237;cius, obrigado pelo post, est&#225; bem informativo.&lt;/p&gt;

&lt;p&gt;Estou tentando implantar as pr&#225;ticas do XP na empresa em que trabalho. Seria mais f&#225;cil ir trabalhar em uma empresa que j&#225; pratique, mas o desafio de construir tudo do zero me motiva =D.&lt;/p&gt;

&lt;p&gt;Parab&#233;ns pelo processo desenvolvido, me pareceu bem consistente e eficaz.&lt;/p&gt;</description>
      <pubDate>Fri, 05 Oct 2007 12:21:19 -0300</pubDate>
      <guid isPermaLink="false">urn:uuid:938e6e9c-2bce-40e8-bb43-2a396c485277</guid>
      <link>http://blog.improveit.com.br/articles/2007/10/05/nosso-processo-de-integracao-continua#comment-804</link>
    </item>
    <item>
      <title>"Nosso processo de integra&#231;&#227;o cont&#237;nua" by Rodrigo</title>
      <description>&lt;p&gt;Muito interessante a estrat&#233;gia de voc&#234;s. Poderiam mostrar como &#233; essa task rake que faz isso tudo?&lt;/p&gt;</description>
      <pubDate>Fri, 05 Oct 2007 11:44:43 -0300</pubDate>
      <guid isPermaLink="false">urn:uuid:8e58edce-1727-47b2-973b-9e64978b7ba4</guid>
      <link>http://blog.improveit.com.br/articles/2007/10/05/nosso-processo-de-integracao-continua#comment-802</link>
    </item>
  </channel>
</rss>
