<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.3.3" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title>Programando na madrugada</title>
	<link>http://www.luizpicanco.com</link>
	<description>Programação na melhor hora do dia</description>
	<pubDate>Tue, 13 May 2008 20:41:03 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.3.3</generator>
	<language>en</language>
			<item>
		<title>Hello World em 366 linguagens</title>
		<link>http://www.luizpicanco.com/2008/05/13/hello-world-em-366-linguagens/</link>
		<comments>http://www.luizpicanco.com/2008/05/13/hello-world-em-366-linguagens/#comments</comments>
		<pubDate>Tue, 13 May 2008 20:40:59 +0000</pubDate>
		<dc:creator>Luiz Antonio Picanço</dc:creator>
		
		<category><![CDATA[Geek]]></category>

		<category><![CDATA[Programação]]></category>

		<guid isPermaLink="false">http://www.luizpicanco.com/2008/05/13/hello-world-em-366-linguagens/</guid>
		<description><![CDATA[Coleção interessante listando programas hello world para 366 linguages de programação. Vai de assembly até PDF.
The Hello World Collection
]]></description>
			<content:encoded><![CDATA[<p>Coleção interessante listando programas hello world para 366 linguages de programação. Vai de assembly até PDF.</p>
<p><a href="http://www.roesler-ac.de/wolfram/hello.htm" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.roesler-ac.de/wolfram/hello.htm');">The Hello World Collection</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.luizpicanco.com/2008/05/13/hello-world-em-366-linguagens/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Lista de 22 APIs para ActionScript 3.0</title>
		<link>http://www.luizpicanco.com/2008/05/06/lista-de-22-apis-para-actionscript-30/</link>
		<comments>http://www.luizpicanco.com/2008/05/06/lista-de-22-apis-para-actionscript-30/#comments</comments>
		<pubDate>Wed, 07 May 2008 00:10:47 +0000</pubDate>
		<dc:creator>Luiz Antonio Picanço</dc:creator>
		
		<category><![CDATA[AIR]]></category>

		<category><![CDATA[ActionScript]]></category>

		<category><![CDATA[Adobe]]></category>

		<category><![CDATA[Flash]]></category>

		<category><![CDATA[Flex]]></category>

		<category><![CDATA[Programação]]></category>

		<category><![CDATA[Web 2.0]]></category>

		<guid isPermaLink="false">http://www.luizpicanco.com/2008/05/06/lista-de-22-apis-para-actionscript-30/</guid>
		<description><![CDATA[Foi publicado no blog sean the flex guy uma lista interessante contendo uma lista de 22 APIs para ActionScript 3.0
A listagem é muit boa e inclui APIs para serviços como digg, last.fm e amazon.
Uma mão na roda para o pessoal que está desenvolvendo em Flex, AIR e Flash.
Vale a visita: List of 22 ActionScript 3.0 [...]]]></description>
			<content:encoded><![CDATA[<p>Foi publicado no blog <a href="http://seantheflashguy.com" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://seantheflashguy.com');">sean the flex guy</a> uma lista interessante contendo uma lista de 22 APIs para ActionScript 3.0</p>
<p>A listagem é muit boa e inclui APIs para serviços como digg, last.fm e amazon.</p>
<p>Uma mão na roda para o pessoal que está desenvolvendo em Flex, AIR e Flash.</p>
<p>Vale a visita: <a href="http://seantheflashguy.com/blog/2007/08/13/list-of-22-actionscript-30-apis/" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://seantheflashguy.com/blog/2007/08/13/list-of-22-actionscript-30-apis/');">List of 22 ActionScript 3.0 API’s</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.luizpicanco.com/2008/05/06/lista-de-22-apis-para-actionscript-30/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Homer Simpson em CSS</title>
		<link>http://www.luizpicanco.com/2008/05/02/homer-simpson-em-css/</link>
		<comments>http://www.luizpicanco.com/2008/05/02/homer-simpson-em-css/#comments</comments>
		<pubDate>Fri, 02 May 2008 03:15:58 +0000</pubDate>
		<dc:creator>Luiz Antonio Picanço</dc:creator>
		
		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://www.luizpicanco.com/2008/05/02/homer-simpson-em-css/</guid>
		<description><![CDATA[Muito legal o trabalho realizado por Roman Cortes: Desenhou o Homer Simpson em CSSConfira no link.
]]></description>
			<content:encoded><![CDATA[<p>Muito legal o trabalho realizado por Roman Cortes: Desenhou o Homer Simpson em CSS<br />Confira no <a href="http://www.romancortes.com/blog/homer-css/" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.romancortes.com/blog/homer-css/');">link</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.luizpicanco.com/2008/05/02/homer-simpson-em-css/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Efetuando downgrade do firmware 1.1.4 para 1.1.3 no iPhone</title>
		<link>http://www.luizpicanco.com/2008/02/27/efetuando-downgrade-do-firmware-114-para-113-no-iphone/</link>
		<comments>http://www.luizpicanco.com/2008/02/27/efetuando-downgrade-do-firmware-114-para-113-no-iphone/#comments</comments>
		<pubDate>Wed, 27 Feb 2008 14:39:30 +0000</pubDate>
		<dc:creator>Luiz Antonio Picanço</dc:creator>
		
		<category><![CDATA[Hacking]]></category>

		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://www.luizpicanco.com/2008/02/27/efetuando-downgrade-do-firmware-114-para-113-no-iphone/</guid>
		<description><![CDATA[Olá pessoal,
Ontem atualizei sem querer para o firmware 1.1.4 e acabei com um telefone que só faz chamada de emergência. Após muito sufoco, descobri como voltar para o 1.1.3.
Passos:
1 - Efetue um restore no iTunes para o 1.1.3 (Vai dar erro, sem problemas)
2 - Utilizando o ZiPhone, efetue o JailBreak e a ativação
3 - Via [...]]]></description>
			<content:encoded><![CDATA[<p>Olá pessoal,</p>
<p>Ontem atualizei sem querer para o firmware 1.1.4 e acabei com um telefone que só faz chamada de emergência. Após muito sufoco, descobri como voltar para o 1.1.3.</p>
<p>Passos:</p>
<p>1 - Efetue um restore no iTunes para o 1.1.3 (Vai dar erro, sem problemas)<br />
2 - Utilizando o ZiPhone, efetue o JailBreak e a ativação<br />
3 - Via SSH suba <a href="http://www.luizpicanco.com/uploads/downgrade-04.04.05-04.03.13.rar" >esse arquivo</a>(descompactado) para um diretório qualquer do iPhone e de as permissoes 755 para o bbupdater e ieraser<br />
3 - Efetue unload no commcenter (ulctl)<br />
4 - No terminal do iPhone execute:</p>
<p>./ieraser<br />
./bbupdater -f ICE04.03.13_G.fls -e ICE04.03.13_G.eep</p>
<p>5 - Efetue load no commcenter denovo e reinicie seu iphone<br />
6 - Pelo ZiPhone, efetue o unlock no SIM-Card</p>
<p>Bom pessoal é isso, o ideal é esperarem sair o Jailbreak e a ativação oficial para o 1.1.4, mas para quem atualizou essa dica pode ajudar.<br />
Lembrando que o meu iPhone é o 1.0.0 OTB</p>
<p><strong>Update 28/02/2008:  O <a href="http://www.ziphone.org/" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://www.ziphone.org/');">ZiPhone</a> já está fazendo o downgrade automaticamente. Recomendo utilizar o ZiPhone para realizar o downgrade.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.luizpicanco.com/2008/02/27/efetuando-downgrade-do-firmware-114-para-113-no-iphone/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Mudança de domínio - www.luizantonio.com</title>
		<link>http://www.luizpicanco.com/2008/02/27/mudanca-de-dominio-wwwluizantoniocom/</link>
		<comments>http://www.luizpicanco.com/2008/02/27/mudanca-de-dominio-wwwluizantoniocom/#comments</comments>
		<pubDate>Wed, 27 Feb 2008 03:00:33 +0000</pubDate>
		<dc:creator>Luiz Antonio Picanço</dc:creator>
		
		<category><![CDATA[Geek]]></category>

		<category><![CDATA[Notícia]]></category>

		<guid isPermaLink="false">http://www.luizpicanco.com/2008/02/27/mudanca-de-dominio-wwwluizantoniocom/</guid>
		<description><![CDATA[Olá pessoal,
andei um bom tempo sumido daqui, pois não estava sobrando tempo para blogar !!!
Tenho me dedicado ao estudo de algoritmos genéticos e inteligência artificial.
Estou desenvolvendo um framework de desenvolvimento com suporte a GA e AI.
Como novidade, abandonei o domínio antigo (luizantonio.com) e adotei um novo: luizpicanco.com
]]></description>
			<content:encoded><![CDATA[<p>Olá pessoal,</p>
<p>andei um bom tempo sumido daqui, pois não estava sobrando tempo para blogar !!!</p>
<p>Tenho me dedicado ao estudo de algoritmos genéticos e inteligência artificial.<br />
Estou desenvolvendo um framework de desenvolvimento com suporte a GA e AI.</p>
<p>Como novidade, abandonei o domínio antigo (luizantonio.com) e adotei um novo: luizpicanco.com</p>
]]></content:encoded>
			<wfw:commentRss>http://www.luizpicanco.com/2008/02/27/mudanca-de-dominio-wwwluizantoniocom/feed/</wfw:commentRss>
		</item>
		<item>
		<title>De Belo Horizonte a Miami - Google Maps feito por analistas ?</title>
		<link>http://www.luizpicanco.com/2007/11/02/de-belo-horizonte-a-miami-google-maps-feito-por-analistas/</link>
		<comments>http://www.luizpicanco.com/2007/11/02/de-belo-horizonte-a-miami-google-maps-feito-por-analistas/#comments</comments>
		<pubDate>Fri, 02 Nov 2007 19:11:45 +0000</pubDate>
		<dc:creator>Luiz Antonio Picanço</dc:creator>
		
		<category><![CDATA[Bug]]></category>

		<category><![CDATA[Google]]></category>

		<category><![CDATA[Google Maps]]></category>

		<category><![CDATA[Humor]]></category>

		<category><![CDATA[Piadas]]></category>

		<guid isPermaLink="false">http://www.luizantonio.com/2007/11/02/de-belo-horizonte-a-miami-google-maps-feito-por-analistas/</guid>
		<description><![CDATA[Seria a imagem abaixo uma prova de que o google maps foi desenvolvido por analistas ?

Confira no google maps (Item 43):
Belo Horizonte - Miami - Como Chegar
]]></description>
			<content:encoded><![CDATA[<p>Seria a imagem abaixo uma prova de que o google maps foi desenvolvido por analistas ?</p>
<p><a href='http://www.luizantonio.com/wp-content/uploads/2007/11/nadandooceanoatlantico.jpg' title='Atravessando o oceano atlântico a nado'><img src='http://www.luizantonio.com/wp-content/uploads/2007/11/nadandooceanoatlantico.thumbnail.jpg' alt='Atravessando o oceano atlântico a nado' /></a></p>
<p>Confira no google maps (Item 43):<br />
<a href="http://maps.google.com/maps?f=d&#038;hl=pt-BR&#038;geocode=&#038;time=&#038;date=&#038;ttype=&#038;saddr=Belo+horizonte&#038;daddr=miami&#038;sll=37.0625,-95.677068&#038;sspn=46.14027,69.082031&#038;ie=UTF8&#038;ll=1.406109,-56.074219&#038;spn=56.206246,69.082031&#038;z=4&#038;om=1" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://maps.google.com/maps?f=d&#038;hl=pt-BR&#038;geocode=&#038;time=&#038;date=&#038;ttype=&#038;saddr=Belo+horizonte&#038;daddr=miami&#038;sll=37.0625,-95.677068&#038;sspn=46.14027,69.082031&#038;ie=UTF8&#038;ll=1.406109,-56.074219&#038;spn=56.206246,69.082031&#038;z=4&#038;om=1');">Belo Horizonte - Miami - Como Chegar</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.luizpicanco.com/2007/11/02/de-belo-horizonte-a-miami-google-maps-feito-por-analistas/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Desbloqueando o iPhone após um Restore - Couldn&#8217;t locate the bytes to patch</title>
		<link>http://www.luizpicanco.com/2007/10/23/desbloqueando-o-iphone-apos-um-restore-couldnt-locate-the-bytes-to-patch/</link>
		<comments>http://www.luizpicanco.com/2007/10/23/desbloqueando-o-iphone-apos-um-restore-couldnt-locate-the-bytes-to-patch/#comments</comments>
		<pubDate>Tue, 23 Oct 2007 22:55:48 +0000</pubDate>
		<dc:creator>Luiz Antonio Picanço</dc:creator>
		
		<category><![CDATA[Geek]]></category>

		<category><![CDATA[Hacking]]></category>

		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://www.luizantonio.com/2007/10/23/desbloqueando-o-iphone-apos-um-restore-couldnt-locate-the-bytes-to-patch/</guid>
		<description><![CDATA[Após ter instalado várias aplicações no meu iPhone, a aplicação de e-mail parou de funcionar, com isso, resolvi restaurá-lo pelo iTunes para realizar o processo de desbloqueio novamente.
Quando fui rodar o anySim, recebi a seguinte mensagem: couldn&#8217;t locate the bytes to patch
O problema é que como o baseband já estava hackeado o anySim não consegui [...]]]></description>
			<content:encoded><![CDATA[<p>Após ter instalado várias aplicações no meu iPhone, a aplicação de e-mail parou de funcionar, com isso, resolvi restaurá-lo pelo iTunes para realizar o processo de desbloqueio novamente.<br />
Quando fui rodar o anySim, recebi a seguinte mensagem: couldn&#8217;t locate the bytes to patch<br />
O problema é que como o baseband já estava hackeado o anySim não consegui hackea-lo novamente. Para resolver o problema tive que recorrer ao bbupdater</p>
<p>Segue abaixo a solução para o problema:<br />
1 - Você vai precisar dos seguintes arquivos (Download <a href="http://rs157.rapidshare.com/files/55991876/314_bbfirmware.zip" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://rs157.rapidshare.com/files/55991876/314_bbfirmware.zip');">aqui</a>):</p>
<li>314.eep</li>
<li>314.fls</li>
<li>bbupdater</li>
<p>2 - Com o iBrickr, crie um diretório para guardar esses arquivos (Ex.: restore) e copie os 3 arquivos para lá<br />
3 - Pelo iBrickr, instale a aplicação MobileTerminal<br />
4 - No iPhone, execute o MobileTerminal<br />
5 - Digite os seguintes comandos:</p>
<p><code>cd /restore </p>
<p>launchctl unload /System/Library/LaunchDaemons/com.apple.CommCenter.plist</p>
<p>chmod +x bbupdater</p>
<p>bbupdater -f *.fls -e *.eep </p>
<p>launchctl load /System/Library/LaunchDaemons/com.apple.CommCenter.plist<br />
</code><br />
Se você receber uma mensagem do launchtcl dizendo &#8220;no process&#8221;, ignore-a.<br />
6 - Execute o AnySim<br />
7 - Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.luizpicanco.com/2007/10/23/desbloqueando-o-iphone-apos-um-restore-couldnt-locate-the-bytes-to-patch/feed/</wfw:commentRss>
		</item>
		<item>
		<title>A Evolução da Engenharia de Software</title>
		<link>http://www.luizpicanco.com/2007/10/03/a-evolucao-da-engenharia-de-software/</link>
		<comments>http://www.luizpicanco.com/2007/10/03/a-evolucao-da-engenharia-de-software/#comments</comments>
		<pubDate>Wed, 03 Oct 2007 23:55:26 +0000</pubDate>
		<dc:creator>Luiz Antonio Picanço</dc:creator>
		
		<category><![CDATA[Engenharia de Software]]></category>

		<category><![CDATA[Programação]]></category>

		<category><![CDATA[Reflexão]]></category>

		<guid isPermaLink="false">http://www.luizantonio.com/2007/10/03/a-evolucao-da-engenharia-de-software/</guid>
		<description><![CDATA[Introdução
Nos últimos anos tem se observado uma crescente movimentação no mercado em torno do modelo de desenvolvimento denominado Fábrica de Software. Esse modelo tem uma grande característica que é o uso de técnicas utilizadas na engenharia industrial de produção em série, para a criação de um ambiente produtivo de desenvolvimento de software com qualidade e [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Introdução</strong></p>
<p>Nos últimos anos tem se observado uma crescente movimentação no mercado em torno do modelo de desenvolvimento denominado Fábrica de Software. Esse modelo tem uma grande característica que é o uso de técnicas utilizadas na engenharia industrial de produção em série, para a criação de um ambiente produtivo de desenvolvimento de software com qualidade e baixo custo.<br />
Esse modelo de desenvolvimento não é novo, surgiu na década de 60, mas só agora começa a ser intensivamente utilizado pelas empresas de desenvolvimento de software.<br />
Os avanços da engenharia de software nos últimos anos e as mudanças ocorridas nos processos de desenvolvimento de sistemas, como o software livre e o surgimento de padrões abertos para desenvolvimento corporativo, fizeram surgir um novo modelo de fábrica de software no mercado. As novas facilidades tornaram possíveis que empresas de médio e até de pequeno porte, pudessem montar suas fábricas de software para prestar serviços de desenvolvimento de sistemas à crescente terceirização do mercado, resultando numa proliferação deste novo modelo de fábrica pelo mundo.</p>
<p><strong>Evolução</strong></p>
<p>Empresas em todo mundo estão  percebendo que o desenvolvimento de software é uma atividade bastante especializada para ser absorvida e custeada internamente. Desta forma é crescente o número de terceirização na área de informática, especialmente na área de desenvolvimento de software.<br />
Juntamente com esta crescente demanda por terceirização, cresce também o nível de exigência do mercado em termos de qualidade e custo do software.  Como resultado, empresas estão investindo em ferramentas de automação, enquanto trabalhos de pesquisas em novos paradigmas de implementação, como orientação a aspectos, estão obtendo resultados significativos.<br />
Algumas destas pesquisas já possuem resultados práticos, como o AspectJ, uma extensão da linguagem Java para  o paradigma orientado a aspectos desenvolvida pelos Institutos de Pesquisa da Xerox. Com a evolução e amadurecimento da orientação a aspectos, será possível desenvolver software de forma mais consistente, abordando de uma única vez importantes aspectos não-funcionais do sistema, que poderão ser reutilizados em várias demandas da fábrica, eliminando desta forma o retrabalho e a replicação de código.<br />
Segundo Jack Greenfield, importante arquiteto de software da Microsoft, “os métodos e práticas de desenvolvimento de software terão que mudar radicalmente&#8230; A solução deve envolver a modificação dos nossos métodos e práticas. Devemos encontrar formas de  tornar os desenvolvedores muito mais produtivos”.<br />
A Microsoft está desenvolvendo uma nova arquitetura de desenvolvimento de sistemas denominada “Software Facotories” (Fábricas de Software).<br />
Segunda a própria Microsoft será uma arquitetura revolucionária, que elevará bastante os níveis de reutilização de software, através de conceitos como o de linhas de produção de software, onde componentes poderão ser montados, configurados e empacotados, resultando num produto final completo. O desenvolvedor se preocupará apenas em  customizar os aspectos altamente especializados e específicos do projeto.<br />
Um outro tópico que será um diferencial no futuro são os significativos avanços das ferramentas case nos últimos anos, que permitirá a visualização e controle de todas as fases de desenvolvimento do sistema em uma única ferramenta. Atualmente o nível de integração entre todos os artefatos das várias fases do projeto é alto,  mas não permite uma automação e rastreabilidade de todos os pontos do sistema. Porém num futuro próximo, com a evolução dos processos de software e das tecnologias de construção de ferramentas case, se espera abranger  todo o sistema, desde a geração do código à partir dos artefatos de análise e projeto até a automação na realização dos testes.<br />
Com a constante evolução da engenharia de software e das tecnologias envolvidas no desenvolvimento de sistemas, as fábricas de software poderão vir a ser uma realidade cada vez mais presente no mercado e se tornando cada vez mais efetivas dentro de seu objetivo de produzir software de qualidade em pouco tempo e com baixo custo. Como resultado, espera-se em todo mercado mundial um crescimento ainda maior  na adoção do modelo de fábricas de software para o desenvolvimento de sistemas.</p>
<p><strong>Conclusão</strong></p>
<p>Como pode-se observar a engenharia de software está sempre evoluindo. Novos paradigmas, linguagens, ambientes surgem a cada dia, buscando aumentar a produtividade e qualidade no desenvolvimento de software. Sistemas que levavam dois anos para serem codificados hoje em dia podem ser feitos em meses.<br />
O profissional ligado a área de desenvolvimento de software deve ficar atento a esses novos paradigmas, pois se não o fizer, correrá o risco de tornar-se obsoleto.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.luizpicanco.com/2007/10/03/a-evolucao-da-engenharia-de-software/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Um ano de Programando na Madrugada</title>
		<link>http://www.luizpicanco.com/2007/09/20/um-ano-de-programando-na-madrugada/</link>
		<comments>http://www.luizpicanco.com/2007/09/20/um-ano-de-programando-na-madrugada/#comments</comments>
		<pubDate>Fri, 21 Sep 2007 01:54:25 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://www.luizantonio.com/2007/09/20/um-ano-de-programando-na-madrugada/</guid>
		<description><![CDATA[É isso aí pessoal.
Hoje está completando um ano que comecei o blog Programando na Madrugada.
Espero ter mais tempo para me dedicar ao blog.
]]></description>
			<content:encoded><![CDATA[<p>É isso aí pessoal.</p>
<p>Hoje está completando um ano que comecei o blog Programando na Madrugada.</p>
<p>Espero ter mais tempo para me dedicar ao blog.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.luizpicanco.com/2007/09/20/um-ano-de-programando-na-madrugada/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Catálogo de Anti-Padrões em TDD</title>
		<link>http://www.luizpicanco.com/2007/09/20/catalogo-de-anti-padroes-em-tdd/</link>
		<comments>http://www.luizpicanco.com/2007/09/20/catalogo-de-anti-padroes-em-tdd/#comments</comments>
		<pubDate>Thu, 20 Sep 2007 04:45:04 +0000</pubDate>
		<dc:creator>Luiz Antonio Picanço</dc:creator>
		
		<category><![CDATA[Programação]]></category>

		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://www.luizantonio.com/2007/09/20/catalogo-de-anti-padroes-em-tdd/</guid>
		<description><![CDATA[Catálogo interessante prouzido pelo James Carr e traduzido pelo Victor

The Liar 

Todos os metodos de um       teste unitário estão passando perfeitamente, aparentando serem validos,       entretanto sob uma inspeção mais próxima é descoberto que o teste       unitário não [...]]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal" style="margin-bottom: 12pt; line-height: normal"><span style="font-size: 10pt; font-family: "Arial","sans-serif"">Catálogo interessante prouzido pelo <a href="http://blog.james-carr.org/" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://blog.james-carr.org/');">James Carr</a> e traduzido pelo <a href="http://malditacomedia.blogspot.com/2007/08/tdd-anti-patterns.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://malditacomedia.blogspot.com/2007/08/tdd-anti-patterns.html');">Victor</a><o:p></o:p></span></p>
<ul type="disc">
<li class="MsoNormal" style="line-height: normal"><strong><span style="font-size: 10pt; font-family: "Arial","sans-serif"">The Liar <o:p></o:p></span></strong>
<ul type="circle">
<li class="MsoNormal" style="line-height: normal"><span style="font-size: 10pt; font-family: "Arial","sans-serif"">Todos os metodos de um       teste unitário estão passando perfeitamente, aparentando serem validos,       entretanto sob uma inspeção mais próxima é descoberto que o teste       unitário não testa o real intuíto para que foi criado.<o:p></o:p></span></li>
</ul>
</li>
</ul>
<ul type="disc">
<li class="MsoNormal" style="line-height: normal"><strong><span style="font-size: 10pt; font-family: "Arial","sans-serif"">Excessive Setup <o:p></o:p></span></strong>
<ul type="circle">
<li class="MsoNormal" style="line-height: normal"><span style="font-size: 10pt; font-family: "Arial","sans-serif"">Um teste que necessita       muito trabalho para ser configurado antes mesmo de ser executado. Algumas       vezes centenas de linhas de código tornam-se necessárias para adaptar o       ambiente a um único método de testes, com dezenas de objetos envolvidos.       Aqui a maior dificuldade é compreender &#8220;o quê&#8221; realmente está       sendo testado dentro de toda a &#8220;sujeira&#8221; que um setup pode       causar. (tradutor: <em>Lembrem-se sempre do princípio <a href="http://en.wikipedia.org/wiki/KISS_principle" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://en.wikipedia.org/wiki/KISS_principle');"><span style="color: blue">KISS</span></a></em>)<o:p></o:p></span></li>
</ul>
</li>
</ul>
<ul type="disc">
<li class="MsoNormal" style="line-height: normal"><strong><span style="font-size: 10pt; font-family: "Arial","sans-serif"">The Giant <o:p></o:p></span></strong>
<ul type="circle">
<li class="MsoNormal" style="line-height: normal"><span style="font-size: 10pt; font-family: "Arial","sans-serif"">Um teste unitário que,       mesmo sendo verdadeiro na intenção de validar um objeto, pode possuir       centenas de linhas contendo inúmeros casos de teste (inúmeros mesmos).       Esta pode ser uma indicação do que chamamos de <a href="http://en.wikipedia.org/wiki/God_object" onclick="javascript:pageTracker._trackPageview('/outbound/article/http://en.wikipedia.org/wiki/God_object');"><span style="color: blue">God       Object</span></a>, objeto que possui responsabilidades demais dentro do       sistema. Indício claro de alto acoplamento em seu sistema.<o:p></o:p></span></li>
</ul>
</li>
</ul>
<ul type="disc">
<li class="MsoNormal" style="line-height: normal"><strong><span style="font-size: 10pt; font-family: "Arial","sans-serif"">The Mockery <o:p></o:p></span></strong>
<ul type="circle">
<li class="MsoNormal" style="line-height: normal"><span style="font-size: 10pt; font-family: "Arial","sans-serif"">Muitas vezes um mock pode       ser útil e bastante indicado. Mas desenvolvedores podem perder tempo       desnecessariamente esforçando-se em mockear o que não está sendo testado.       Percebe-se neste caso que a classe possuí tantos mocks, stubs ou fakes       que no final das coisas o sistema não está sendo testado, mas o que é       retornado da interação entre os mocks. (tradudor: <em>use apenas o que for       estritamente necessário!</em>)<o:p></o:p></span></li>
</ul>
</li>
</ul>
<ul type="disc">
<li class="MsoNormal" style="line-height: normal"><strong><span style="font-size: 10pt; font-family: "Arial","sans-serif"">The Inspector <o:p></o:p></span></strong>
<ul type="circle">
<li class="MsoNormal" style="line-height: normal"><span style="font-size: 10pt; font-family: "Arial","sans-serif"">Um teste unitáro que viola       o encapsulamente em um esforço de atingir 100% de cobertura de testes,       mas está situação nem sempre é favoravél, pois qualquer tentativa de       refactor pode quebrar testes desnecessariamente, necessitanto adequações       nas classes de teste unitário.<o:p></o:p></span></li>
</ul>
</li>
<li class="MsoNormal" style="line-height: normal"><strong><span style="font-size: 10pt; font-family: "Arial","sans-serif"">Generous Leftovers<o:p></o:p></span></strong>
<ul type="circle">
<li class="MsoNormal" style="line-height: normal"><span style="font-size: 10pt; font-family: "Arial","sans-serif"">Uma instância de um teste       unitário cria um dado que é persistido em algum lugar, e outro teste       utiliza tal dado para seus próprios asserts. Caso algo saia errado, o       teste que utiliza o dado cadastrado também falhará. (tradutor: <em>Testes       devem ser independentes!</em> )<o:p></o:p></span></li>
</ul>
</li>
</ul>
<ul type="disc">
<li class="MsoNormal" style="line-height: normal"><strong><span style="font-size: 10pt; font-family: "Arial","sans-serif"">The local Hero<o:p></o:p></span></strong>
<ul type="circle">
<li class="MsoNormal" style="line-height: normal"><span style="font-size: 10pt; font-family: "Arial","sans-serif"">Um teste que é dependente       de algo específico do ambiente de desenvolvimento em que ele foi escrito.       O resultado: o teste passa perfeitamente na células de desenvolvimento,       mas falha quando alguém tenta executá-lo fora desse ambiente.<o:p></o:p></span></li>
</ul>
</li>
</ul>
<ul type="disc">
<li class="MsoNormal" style="line-height: normal"><strong><span style="font-size: 10pt; font-family: "Arial","sans-serif"">The Nitpicker<o:p></o:p></span></strong>
<ul type="circle">
<li class="MsoNormal" style="line-height: normal"><span style="font-size: 10pt; font-family: "Arial","sans-serif"">Um teste unitáro que       compara toda a saída quando o que lhe deveria interessar é uma pequena       parte apenas, assim o teste deve se manter sempre alinhado com detalhes       que o teste não deveria tratar. Esta situação é endemica em testes de       aplicações web.<o:p></o:p></span></li>
</ul>
</li>
</ul>
<ul type="disc">
<li class="MsoNormal" style="line-height: normal"><strong><span style="font-size: 10pt; font-family: "Arial","sans-serif"">The Dodger</span></strong><span style="font-size: 10pt; font-family: "Arial","sans-serif""> <o:p></o:p></span>
<ul type="circle">
<li class="MsoNormal" style="line-height: normal"><span style="font-size: 10pt; font-family: "Arial","sans-serif"">Um teste unitário que       possui muitos testes para efeitos pequenos (e presumidamente simples de       testar), mas nunca testando o comportamente real desejado. Encontrado em       testes relacionados para testes de banco de dados, onde um método é       chamado, e então o teste seleciona itens do banco e procede asserts       contra os resultados.<o:p></o:p></span></li>
</ul>
</li>
</ul>
<ul type="disc">
<li class="MsoNormal" style="line-height: normal"><strong><span style="font-size: 10pt; font-family: "Arial","sans-serif"">The Loudmout </span></strong><span style="font-size: 10pt; font-family: "Arial","sans-serif""><o:p></o:p></span>
<ul type="circle">
<li class="MsoNormal" style="line-height: normal"><span style="font-size: 10pt; font-family: "Arial","sans-serif"">Um teste unitário (ou suite       de testes) que enxe o console com mensagens de diagnóstico, logs e       qualquer outro tipo de saídas, mesmo quando os testes estão passando.       Algumas vezes durante a criação dos testes existe o desejo de manualmente       ver a saída dos metodos, mas mesmo eles deixando de serem necessários, são       deixados para trás.<o:p></o:p></span></li>
</ul>
</li>
</ul>
<ul type="disc">
<li class="MsoNormal" style="line-height: normal"><strong><span style="font-size: 10pt; font-family: "Arial","sans-serif"">The Greedy Catcher <o:p></o:p></span></strong>
<ul type="circle">
<li class="MsoNormal" style="line-height: normal"><span style="font-size: 10pt; font-family: "Arial","sans-serif"">Um teste unitário que trata       exceções e sobrepões pilhas de execução (stack trace) algumas vezes com       mensagens menos informativas, mas algumas vezes ainda apenas logando       (Loudmouth) e deixando o teste passar.<o:p></o:p></span></li>
</ul>
</li>
</ul>
<ul type="disc">
<li class="MsoNormal" style="line-height: normal"><strong><span style="font-size: 10pt; font-family: "Arial","sans-serif"">The Sequencer </span></strong><span style="font-size: 10pt; font-family: "Arial","sans-serif""><o:p></o:p></span>
<ul type="circle">
<li class="MsoNormal" style="line-height: normal"><span style="font-size: 10pt; font-family: "Arial","sans-serif"">Um teste unitário       dependente de uma lista que sempre é retornada em forma desordenada.<o:p></o:p></span></li>
</ul>
</li>
</ul>
<ul type="disc">
<li class="MsoNormal" style="line-height: normal"><strong><span style="font-size: 10pt; font-family: "Arial","sans-serif"">Hidden Dependecy</span></strong><span style="font-size: 10pt; font-family: "Arial","sans-serif""><o:p></o:p></span>
<ul type="circle">
<li class="MsoNormal" style="line-height: normal"><span style="font-size: 10pt; font-family: "Arial","sans-serif"">Primo de primeiro grau do       &#8220;The Local Hero&#8221;, um teste unitário dependente de um dado que       deve ser populado em algum lugar par ao teste rodar. Se o dado não estive       presente, o teste falhará deixando pouca informação para o desenvolvedor       o que é necessário, ou porque o teste falhou&#8230; forçando-o a buscar       através de uma floresta de código para descobrir de onde vem o dado que o       teste deveria utilizar.<o:p></o:p></span></li>
</ul>
</li>
</ul>
<ul type="disc">
<li class="MsoNormal" style="line-height: normal"><strong><span style="font-size: 10pt; font-family: "Arial","sans-serif"">The Enumerator</span></strong><span style="font-size: 10pt; font-family: "Arial","sans-serif""><o:p></o:p></span>
<ul type="circle">
<li class="MsoNormal" style="line-height: normal"><span style="font-size: 10pt; font-family: "Arial","sans-serif"">Um teste unitário em que os       nomes de métodos são apenas uma enumeração: teste1, teste2, teste3. Como       resultado, a intenção dos testes torna-se pouco clara, e a única maneira       de ter certeza é ler o código fonte e rezar para que esteja bem escrito.<o:p></o:p></span></li>
</ul>
</li>
</ul>
<ul type="disc">
<li class="MsoNormal" style="line-height: normal"><strong><span style="font-size: 10pt; font-family: "Arial","sans-serif"">The Stranger<o:p></o:p></span></strong>
<ul type="circle">
<li class="MsoNormal" style="line-height: normal"><span style="font-size: 10pt; font-family: "Arial","sans-serif"">Um método de teste que nem       ao menos pertence ao Teste Unitário que ele está inserido. O método está       realmente testando um objeto separado e independente, normalmente um       objeto utilizado pelo objeto que sofre o teste.<o:p></o:p></span></li>
</ul>
</li>
</ul>
<ul type="disc">
<li class="MsoNormal" style="line-height: normal"><strong><span style="font-size: 10pt; font-family: "Arial","sans-serif"">The Operating System      Evangelist<o:p></o:p></span></strong>
<ul type="circle">
<li class="MsoNormal" style="line-height: normal"><span style="font-size: 10pt; font-family: "Arial","sans-serif"">Um teste unitário que está       ajustado apenas para um determinado sistema operacional para que possa       funcionar. Um bom exemplo seria um caso de teste que utilize o separador       de linhas do Windows para um assert, que falha apenas rodando em Linux.<o:p></o:p></span></li>
</ul>
</li>
</ul>
<ul type="disc">
<li class="MsoNormal" style="line-height: normal"><strong><span style="font-size: 10pt; font-family: "Arial","sans-serif"">Success Against All Odds<o:p></o:p></span></strong>
<ul type="circle">
<li class="MsoNormal" style="line-height: normal"><span style="font-size: 10pt; font-family: "Arial","sans-serif"">Um teste escrito para       passar antes mesmo de falhar. Como um infeliz efeito colateral, o caso de       teste acaba sempre passando mesmo que tenha sido feito para falhar.<o:p></o:p></span></li>
</ul>
</li>
</ul>
<ul type="disc">
<li class="MsoNormal" style="line-height: normal"><strong><span style="font-size: 10pt; font-family: "Arial","sans-serif"">The Free Ride<o:p></o:p></span></strong>
<ul type="circle">
<li class="MsoNormal" style="line-height: normal"><span style="font-size: 10pt; font-family: "Arial","sans-serif"">Ao invés de escrever um       novo teste para uma nova funcionalidade ou característica, apenas um novo       assert é criado ao final de um teste já existente.<o:p></o:p></span></li>
</ul>
</li>
</ul>
<ul type="disc">
<li class="MsoNormal" style="line-height: normal"><strong><span style="font-size: 10pt; font-family: "Arial","sans-serif"">The One<o:p></o:p></span></strong>
<ul type="circle">
<li class="MsoNormal" style="line-height: normal"><span style="font-size: 10pt; font-family: "Arial","sans-serif"">Uma combinação de alguns       outros padrões, particularmente o TheFreeRide e TheGiant. Um teste       unitário que contém apenas um único metodo que teste todo tipo de       funcionalidade que um objeto pode conter. Um indicador comum é que o       teste possui o mesmo nome da classe, e ainda com múltiplas linhas, setups       e asserts<o:p></o:p></span></li>
</ul>
</li>
</ul>
<ul type="disc">
<li class="MsoNormal" style="line-height: normal"><strong><span style="font-size: 10pt; font-family: "Arial","sans-serif"">The Peeping Tom<o:p></o:p></span></strong>
<ul type="circle">
<li class="MsoNormal" style="line-height: normal"><span style="font-size: 10pt; font-family: "Arial","sans-serif"">Um teste que,       compartilhando recursos, pode ver o resultado de outro test, e pode       falhar mesmo que o sistema testado esteja em perfeito funcionamento.       Verificado na ferramenta Fitnesse, onde a utilização de variáveis       estáticas para abrigar coleções não eram corretamente limpas após a       execução do teste, podendo surgir erros durante a execução de qualquer       teste. Também conhecido com TheUninvitedGuests.<o:p></o:p></span></li>
</ul>
</li>
</ul>
<ul type="disc">
<li class="MsoNormal" style="line-height: normal"><strong><span style="font-size: 10pt; font-family: "Arial","sans-serif"">The Slow Poke<o:p></o:p></span></strong>
<ul type="circle">
<li class="MsoNormal" style="line-height: normal"><span style="font-size: 10pt; font-family: "Arial","sans-serif"">Um teste unitário que é       incrivelmente lento para ser executado. Quando o teste é iniciado, os       programadores podem ir ao banheiro, fumar um cigarro ou pior ainda,       inicar o teste no final do dia e ir para casa, esperando que o resultado       saia no dia seguinte.<o:p></o:p></span></li>
</ul>
</li>
</ul>
<p class="MsoNormal"><span style="font-size: 10pt; line-height: 115%; font-family: "Arial","sans-serif""><o:p> </o:p></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.luizpicanco.com/2007/09/20/catalogo-de-anti-padroes-em-tdd/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
