<?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: Software saud&#225;vel</title>
    <link>http://blog.improveit.com.br/articles/2007/01/06/software-saudavel</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description></description>
    <item>
      <title>Software saud&#225;vel</title>
      <description>&lt;p&gt;Ontem, ap&#243;s ler o artigo sobre &lt;a href="http://blog.improveit.com.br/articles/2007/01/05/nada-de-janelas-quebradas"&gt;janelas quebradas&lt;/a&gt;, o Rafael MVC, do grupo &lt;a href="http://groups-beta.google.com/group/rails-br"&gt;rails-br&lt;/a&gt; fez uma &#243;tima pergunta: "100% de cobertura n&#227;o &#233; muito caro? Muitas vezes &#233; desnecess&#225;rio ter 100% de cobertura. O que voc&#234; acha?"   &lt;/p&gt;

&lt;p&gt;Acredito que pode ser caro, ou barato, dependendo da forma como a quest&#227;o &#233; encarada e da tecnologia empregada. Na parte tecnol&#243;gica, &#233; mais f&#225;cil manter 100% de cobertura em &lt;a href="http://www.ruby-lang.org/en"&gt;Ruby&lt;/a&gt; que em Java, por exemplo. Seja como for, acho que o ponto fundamental &#233; a forma como encaramos desenvolvimento de software.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://blog.improveit.com.br/files/saude-software.jpg" alt="Software saud&#225;vel" title="Software saud&#225;vel"/&gt;&lt;/p&gt;

&lt;p&gt;Conhe&#231;o algumas pessoas que est&#227;o sempre em forma. N&#227;o t&#234;m barriga, n&#227;o t&#234;m problemas de sa&#250;de, e quase n&#227;o se v&#234; gordura pelo corpo. Ainda assim, elas fazem exerc&#237;cios freq&#252;entemente e comem pouco. Por que fazem isso, se n&#227;o precisam? Porque se n&#227;o mantiverem bons h&#225;bitos alimentares e se exercitarem freq&#252;entemente, deixar&#227;o de ter um bom preparo f&#237;sico e come&#231;ar&#227;o a acumular gordura. Chamo isso de "paradoxo do atleta".  &lt;/p&gt;

&lt;p&gt;Em software acontece o mesmo, se voc&#234; n&#227;o exercit&#225;-lo constantemente, atrav&#233;s de uma bateria de testes automatizados, ele ter&#225; baixo condicionamento e n&#227;o ser&#225; t&#227;o saud&#225;vel quanto o software "malhado" que est&#225; sempre sendo exercitado.  &lt;/p&gt;

&lt;p&gt;Qual o problema disso? Pense em uma pessoa obesa, como a da foto acima. Por ter baixo condicionamento, sua press&#227;o sobe e seu batimento card&#237;aco se acelera quando passa por qualquer tipo de estresse. J&#225; um atleta, se comporta de forma diferente. Diante de um estresse, sua press&#227;o e seus batimentos card&#237;acos quase n&#227;o se alteram.&lt;/p&gt;

&lt;p&gt;Software &#233; um organismo que enfrente os mais diversos tipos de estresses permanentemente. Ele se manifesta na forma de mudan&#231;as. Quando uma mudan&#231;a &#233; introduzida em um sistema, seu "batimento card&#237;ado" e sua "press&#227;o" podem variar abruptamente, ou permanecer est&#225;veis dependendo de seu condicionamento. Sistemas bem testados, com elevada cobertura de testes, s&#227;o como atletas muito bem preparados. Mudan&#231;as podem ocorrer, mas raramente ir&#227;o comprometer o bom funcionamento e a boa sa&#250;de do software.  &lt;/p&gt;

&lt;p&gt;Trabalhando com &lt;a href="http://www.improveit.com.br/xp/praticas/tdd"&gt;TDD&lt;/a&gt; h&#225; alguns anos, comecei a notar o que chamaria de "paradoxo dos testes". Os testes automatizados que crio raramente detectam bugs! N&#227;o porque eles sejam ruins, ou pouco abrangentes. Simplesmente &#233; raro introduzir um bug quando se trabalha com &lt;a href="http://www.improveit.com.br/xp/praticas/tdd"&gt;TDD&lt;/a&gt;. A forma de pensar se altera e leva voc&#234; a criar c&#243;digo sem erros a maior parte do tempo.  &lt;/p&gt;

&lt;p&gt;O &lt;strong&gt;exerc&#237;cio&lt;/strong&gt; de criar os testes &#233; o que leva &#224; baixa incid&#234;ncia de bugs. Ent&#227;o, se os testes raramente detectam erros, eu poderia deixar de produzi-los, certo? A&#237; &#233; que est&#225; o paradoxo. Se eu n&#227;o os escrever, come&#231;arei a introduzir mais bugs, porque &lt;strong&gt;o segredo est&#225; no exerc&#237;cio&lt;/strong&gt;. &#201; a mesma coisa com o corpo humano. Uma pessoa que esteja em forma aparentemente n&#227;o precisaria se exercitar. Mas, se ela parar de se exercitar, come&#231;ar&#225; a precisar!&lt;/p&gt;

&lt;p&gt;Outra quest&#227;o cr&#237;tica na sa&#250;de de um software &#233; a forma como ele &#233; alimentado.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://blog.improveit.com.br/files/saude-codigo.jpg" alt="C&#243;digo saud&#225;vel" title="C&#243;digo saud&#225;vel"/&gt;&lt;/p&gt;

&lt;p&gt;Voc&#234; &#233; o que voc&#234; come. Portanto, se voc&#234; s&#243; come porcaria, sua sa&#250;de tende a ser prec&#225;ria. Por outro lado, se voc&#234; mant&#233;m uma dieta saud&#225;vel, seu corpo tende a se manter em forma. Com nossos sistemas &#233; a mesma coisa. Aliment&#225;-los com gambiarras, c&#243;digo duplicado, m&#233;todos ileg&#237;veis e outras coisas pavorosas &#233; o que leva, &lt;strong&gt;gradualmente&lt;/strong&gt;, &#224; cria&#231;&#227;o de um aplicativo moribundo, incapaz de ser alterado facilmente e propenso aos mais diversos tipos de defeitos. Portanto, alimente seu sistema com c&#243;digo saud&#225;vel e bem testado. &lt;/p&gt;

&lt;p&gt;Para fechar, relembrando &lt;a href="http://blog.improveit.com.br/articles/2007/01/04/como-nao-matar-um-projeto-um-dia-de-cada-vez+"&gt;um outro artigo&lt;/a&gt; fique atendo ao que acontece gradualmente com seu c&#243;digo, pois &lt;strong&gt;mudan&#231;as graduais s&#227;o mais dif&#237;ceis de serem notadas&lt;/strong&gt;. Quando engordamos, fazemos isso um pouquinho a cada dia. Cada pequena extravag&#226;ncia di&#225;ria leva o ponteiro da balan&#231;a para o alto. Algumas gramas di&#225;rias &#224; mais, se tornam muitos quilos depois de algumas semanas, ou alguns meses. Com o c&#243;digo &#233; igual. N&#227;o &#233; uma gambiarra que ir&#225; mat&#225;-lo. &#201; a sucess&#227;o de pequenas gambiarras que vamos introduzindo a cada dia que condena nosso software ao caos e nos condena a dias estressantes tentando cont&#234;-lo.&lt;/p&gt;</description>
      <pubDate>Sat, 06 Jan 2007 13:11:00 -0200</pubDate>
      <guid isPermaLink="false">urn:uuid:573709c2-734f-46dd-a256-a430da03da25</guid>
      <author>Vinicius Manh&#227;es Teles</author>
      <link>http://blog.improveit.com.br/articles/2007/01/06/software-saudavel</link>
      <category>java</category>
      <category>ruby</category>
      <category>agile</category>
      <category>qualidade</category>
      <category>teste</category>
    </item>
  </channel>
</rss>
