<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Rafael Naufal's blog</title>
	
	<link>http://rafaelnaufal.com/blogpt</link>
	<description>Java, Scrum, XP, TDD... Desenvolvimento de software em geral</description>
	<lastBuildDate>Wed, 09 May 2012 00:00:00 PDT</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/rafaelnaufal-pt-rss" /><feedburner:info uri="rafaelnaufal-pt-rss" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://superfeedr.com/hubbub" /><image><url>http://www.rafaelnaufal.com/favicon.ico</url></image><item><title>Links for 2012-05-08 [del.icio.us]</title><link>http://feedproxy.google.com/~r/rafaelnaufal-pt-rss/~3/DT2sRhaD7kM/rnaufal</link><pubDate>Wed, 09 May 2012 00:00:00 PDT</pubDate><guid isPermaLink="false">http://del.icio.us/rnaufal#2012-05-08</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.ibm.com/developerworks/training/kp/j-kp-altlang/index.html?ca=drs-"&gt;Explore alternative languages for the Java platform&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/rafaelnaufal-pt-rss/~4/DT2sRhaD7kM" height="1" width="1"/&gt;</description><feedburner:origLink>http://del.icio.us/rnaufal#2012-05-08</feedburner:origLink></item><item><title>Links for 2012-05-04 [del.icio.us]</title><link>http://feedproxy.google.com/~r/rafaelnaufal-pt-rss/~3/HV9mtLJzxDg/rnaufal</link><pubDate>Sat, 05 May 2012 00:00:00 PDT</pubDate><guid isPermaLink="false">http://del.icio.us/rnaufal#2012-05-04</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://java.dzone.com/articles/useful-svn-commands?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed%3A+javalobby%2Ffrontpage+%28Javalobby+%2F+Java+Zone%29&amp;utm_content=Google+Reader"&gt;Useful SVN Commands | Javalobby&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/rafaelnaufal-pt-rss/~4/HV9mtLJzxDg" height="1" width="1"/&gt;</description><feedburner:origLink>http://del.icio.us/rnaufal#2012-05-04</feedburner:origLink></item><item><title>Links for 2012-04-26 [del.icio.us]</title><link>http://feedproxy.google.com/~r/rafaelnaufal-pt-rss/~3/kBQ41avBzvA/rnaufal</link><pubDate>Fri, 27 Apr 2012 00:00:00 PDT</pubDate><guid isPermaLink="false">http://del.icio.us/rnaufal#2012-04-26</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="https://community.jboss.org/wiki/DoesJBossMQSupportLoadBalancing?_sscc=t"&gt;DoesJBossMQSupportLoadBalancing | JBoss Community&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://community.jboss.org/wiki/HowDoIGetAnMDBSingleton"&gt;HowDoIGetAnMDBSingleton | JBoss Community&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/rafaelnaufal-pt-rss/~4/kBQ41avBzvA" height="1" width="1"/&gt;</description><feedburner:origLink>http://del.icio.us/rnaufal#2012-04-26</feedburner:origLink></item><item><title>Links for 2012-04-18 [del.icio.us]</title><link>http://feedproxy.google.com/~r/rafaelnaufal-pt-rss/~3/creEE56oBII/rnaufal</link><pubDate>Thu, 19 Apr 2012 00:00:00 PDT</pubDate><guid isPermaLink="false">http://del.icio.us/rnaufal#2012-04-18</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.htm2pdf.co.uk/"&gt;Convert HTML to PDF | htm2pdf.co.uk&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/rafaelnaufal-pt-rss/~4/creEE56oBII" height="1" width="1"/&gt;</description><feedburner:origLink>http://del.icio.us/rnaufal#2012-04-18</feedburner:origLink></item><item><title>Links for 2012-04-05 [del.icio.us]</title><link>http://feedproxy.google.com/~r/rafaelnaufal-pt-rss/~3/Gb6SqP0LSjQ/rnaufal</link><pubDate>Fri, 06 Apr 2012 00:00:00 PDT</pubDate><guid isPermaLink="false">http://del.icio.us/rnaufal#2012-04-05</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="http://docs.oracle.com/cd/E15051_01/wls/docs103/jta/trxman.html#wp1043014"&gt;Managing Transactions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://docs.jboss.org/jbosstm/docs/4.2.3/manuals/html/xts/ProgrammersGuide.html#_Toc97020641"&gt;Arjuna PROD x&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/rafaelnaufal-pt-rss/~4/Gb6SqP0LSjQ" height="1" width="1"/&gt;</description><feedburner:origLink>http://del.icio.us/rnaufal#2012-04-05</feedburner:origLink></item><item><title>Links for 2012-02-13 [del.icio.us]</title><link>http://feedproxy.google.com/~r/rafaelnaufal-pt-rss/~3/_1yUEbEcls0/rnaufal</link><pubDate>Tue, 14 Feb 2012 00:00:00 PST</pubDate><guid isPermaLink="false">http://del.icio.us/rnaufal#2012-02-13</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="https://community.jboss.org/wiki/ClassLoadingConfiguration"&gt;ClassLoadingConfiguration | JBoss AS | JBoss Community&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/rafaelnaufal-pt-rss/~4/_1yUEbEcls0" height="1" width="1"/&gt;</description><feedburner:origLink>http://del.icio.us/rnaufal#2012-02-13</feedburner:origLink></item><item><title>Links for 2012-02-10 [del.icio.us]</title><link>http://feedproxy.google.com/~r/rafaelnaufal-pt-rss/~3/GllZmGcS6kQ/rnaufal</link><pubDate>Sat, 11 Feb 2012 00:00:00 PST</pubDate><guid isPermaLink="false">http://del.icio.us/rnaufal#2012-02-10</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="https://community.jboss.org/wiki/HowDoIConfigureAnEJB3MDBToTalkToARemoteQueue"&gt;HowDoIConfigureAnEJB3MDBToTalkToARemoteQueue | JBoss Community&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://community.jboss.org/wiki/HowDoIConfigureAnMDBToTalkToARemoteQueue"&gt;HowDoIConfigureAnMDBToTalkToARemoteQueue | JBoss Community&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/rafaelnaufal-pt-rss/~4/GllZmGcS6kQ" height="1" width="1"/&gt;</description><feedburner:origLink>http://del.icio.us/rnaufal#2012-02-10</feedburner:origLink></item><item>
		<title>Propagação de mudanças no código</title>
		<link>http://feedproxy.google.com/~r/rafaelnaufal-pt-rss/~3/6Hls0h8N6EY/</link>
		<comments>http://rafaelnaufal.com/blogpt/2010/07/19/propagacao-de-mudancas-no-codigo/#comments</comments>
		<pubDate>Mon, 19 Jul 2010 17:31:15 +0000</pubDate>
		<dc:creator>rnaufal</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[legado]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[testes]]></category>
		<category><![CDATA[testes unitários]]></category>

		<guid isPermaLink="false">http://rafaelnaufal.com/blogpt/?p=86</guid>
		<description><![CDATA[Estou lendo o livro &#8216;Working Effectively With LegacyCode&#8217; de autoria de Michael Feathers sobre como tornar código testável. Para Feathers, Todo código sem testes é código legado Essas são suas heurísticas para descobrir a propagação de mudanças no código: Identifique o método que vai mudar. Se o método tem valor de retorno, fique atento aos [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F07%2F19%2Fpropagacao-de-mudancas-no-codigo%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F07%2F19%2Fpropagacao-de-mudancas-no-codigo%2F&amp;source=rnaufal&amp;style=normal&amp;hashtags=legado,programa%C3%A7%C3%A3o,testes,testes+unit%C3%A1rios&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Estou lendo o livro <a href="http://www.amazon.co.uk/Working-Effectively-Legacy-Robert-Martin/dp/0131177052/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1255440556&#038;sr=8-1">&#8216;Working Effectively With LegacyCode&#8217;</a> de autoria de Michael Feathers sobre como tornar código testável. Para Feathers,</p>
<blockquote><p align="center">Todo código sem testes é código legado</p>
</blockquote>
<p>Essas são suas heurísticas para descobrir a propagação de mudanças no código:</p>
<ol>
<li>Identifique o método que vai mudar.</li>
<li>Se o método tem valor de retorno, fique atento aos que o invocam.</li>
<li>Repare se o método modifica variáveis de instância. Se ele modificar, olhe o método que usa essas variáveis e os métodos que usam esses métodos.</li>
<li>Repare em superclasses e subclasses que utilizam essas variáveis de instância e métodos também.</li>
<li>Olhe os parâmetros dos métodos. Veja se eles ou outros objetos que esses métodos retornam são utilizados pelo código que se você quer modificar.</li>
<li>Procure por variáveis globais e regiões estáticas que são modificados nos métodos que foram identificados.</li>
</ol>
Compartilhe:<a rel="nofollow" target="_blank"  href="http://twitter.com/home?status=Propaga%C3%A7%C3%A3o%20de%20mudan%C3%A7as%20no%20c%C3%B3digo%20-%20http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F07%2F19%2Fpropagacao-de-mudancas-no-codigo%2F" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/twitter.png" class="sociable-img sociable-hovers" title="Twitter" alt="Twitter" /></a><a rel="nofollow" target="_blank"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F07%2F19%2Fpropagacao-de-mudancas-no-codigo%2F&amp;title=Propaga%C3%A7%C3%A3o%20de%20mudan%C3%A7as%20no%20c%C3%B3digo&amp;bodytext=Estou%20lendo%20o%20livro%20%27Working%20Effectively%20With%20LegacyCode%27%20de%20autoria%20de%20Michael%20Feathers%20sobre%20como%20tornar%20c%C3%B3digo%20test%C3%A1vel.%20Para%20Feathers%2C%0D%0A%0D%0ATodo%20c%C3%B3digo%20sem%20testes%20%C3%A9%20c%C3%B3digo%20legado%0D%0A%0D%0AEssas%20s%C3%A3o%20suas%20heur%C3%ADsticas%20para%20descobrir%20a%20propaga%C3%A7%C3%A3o%20de" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/digg.png" class="sociable-img sociable-hovers" title="Digg" alt="Digg" /></a><a rel="nofollow" target="_blank"  href="http://delicious.com/post?url=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F07%2F19%2Fpropagacao-de-mudancas-no-codigo%2F&amp;title=Propaga%C3%A7%C3%A3o%20de%20mudan%C3%A7as%20no%20c%C3%B3digo&amp;notes=Estou%20lendo%20o%20livro%20%27Working%20Effectively%20With%20LegacyCode%27%20de%20autoria%20de%20Michael%20Feathers%20sobre%20como%20tornar%20c%C3%B3digo%20test%C3%A1vel.%20Para%20Feathers%2C%0D%0A%0D%0ATodo%20c%C3%B3digo%20sem%20testes%20%C3%A9%20c%C3%B3digo%20legado%0D%0A%0D%0AEssas%20s%C3%A3o%20suas%20heur%C3%ADsticas%20para%20descobrir%20a%20propaga%C3%A7%C3%A3o%20de" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/delicious.png" class="sociable-img sociable-hovers" title="del.icio.us" alt="del.icio.us" /></a><a rel="nofollow" target="_blank"  href="http://reddit.com/submit?url=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F07%2F19%2Fpropagacao-de-mudancas-no-codigo%2F&amp;title=Propaga%C3%A7%C3%A3o%20de%20mudan%C3%A7as%20no%20c%C3%B3digo" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/reddit.png" class="sociable-img sociable-hovers" title="Reddit" alt="Reddit" /></a><a rel="nofollow" target="_blank"  href="http://www.google.com/reader/link?url=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F07%2F19%2Fpropagacao-de-mudancas-no-codigo%2F&amp;title=Propaga%C3%A7%C3%A3o%20de%20mudan%C3%A7as%20no%20c%C3%B3digo&amp;srcURL=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F07%2F19%2Fpropagacao-de-mudancas-no-codigo%2F&amp;srcTitle=Rafael+Naufal%26%23039%3Bs+blog+Java%2C+Scrum%2C+XP%2C+TDD...+Desenvolvimento+de+software+em+geral" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/googlebuzz.png" class="sociable-img sociable-hovers" title="Google Buzz" alt="Google Buzz" /></a><a rel="nofollow" target="_blank"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F07%2F19%2Fpropagacao-de-mudancas-no-codigo%2F&amp;title=Propaga%C3%A7%C3%A3o%20de%20mudan%C3%A7as%20no%20c%C3%B3digo&amp;annotation=Estou%20lendo%20o%20livro%20%27Working%20Effectively%20With%20LegacyCode%27%20de%20autoria%20de%20Michael%20Feathers%20sobre%20como%20tornar%20c%C3%B3digo%20test%C3%A1vel.%20Para%20Feathers%2C%0D%0A%0D%0ATodo%20c%C3%B3digo%20sem%20testes%20%C3%A9%20c%C3%B3digo%20legado%0D%0A%0D%0AEssas%20s%C3%A3o%20suas%20heur%C3%ADsticas%20para%20descobrir%20a%20propaga%C3%A7%C3%A3o%20de" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/googlebookmark.png" class="sociable-img sociable-hovers" title="Google Bookmarks" alt="Google Bookmarks" /></a><a rel="nofollow" target="_blank"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F07%2F19%2Fpropagacao-de-mudancas-no-codigo%2F&amp;t=Propaga%C3%A7%C3%A3o%20de%20mudan%C3%A7as%20no%20c%C3%B3digo" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/facebook.png" class="sociable-img sociable-hovers" title="Facebook" alt="Facebook" /></a><a rel="nofollow" target="_blank"  href="http://technorati.com/faves?add=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F07%2F19%2Fpropagacao-de-mudancas-no-codigo%2F" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/technorati.png" class="sociable-img sociable-hovers" title="Technorati" alt="Technorati" /></a><a rel="nofollow" target="_blank"  href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F07%2F19%2Fpropagacao-de-mudancas-no-codigo%2F&amp;title=Propaga%C3%A7%C3%A3o%20de%20mudan%C3%A7as%20no%20c%C3%B3digo" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/stumbleupon.png" class="sociable-img sociable-hovers" title="StumbleUpon" alt="StumbleUpon" /></a><a rel="nofollow" target="_blank"  href="http://www.friendfeed.com/share?title=Propaga%C3%A7%C3%A3o%20de%20mudan%C3%A7as%20no%20c%C3%B3digo&amp;link=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F07%2F19%2Fpropagacao-de-mudancas-no-codigo%2F" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/friendfeed.png" class="sociable-img sociable-hovers" title="FriendFeed" alt="FriendFeed" /></a><a rel="nofollow" target="_blank"  href="http://www.myspace.com/Modules/PostTo/Pages/?u=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F07%2F19%2Fpropagacao-de-mudancas-no-codigo%2F&amp;t=Propaga%C3%A7%C3%A3o%20de%20mudan%C3%A7as%20no%20c%C3%B3digo" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/myspace.png" class="sociable-img sociable-hovers" title="MySpace" alt="MySpace" /></a><a rel="nofollow" target="_blank"  href="http://slashdot.org/bookmark.pl?title=Propaga%C3%A7%C3%A3o%20de%20mudan%C3%A7as%20no%20c%C3%B3digo&amp;url=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F07%2F19%2Fpropagacao-de-mudancas-no-codigo%2F" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/slashdot.png" class="sociable-img sociable-hovers" title="Slashdot" alt="Slashdot" /></a><br/><br/><img src="http://feeds.feedburner.com/~r/rafaelnaufal-pt-rss/~4/6Hls0h8N6EY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://rafaelnaufal.com/blogpt/2010/07/19/propagacao-de-mudancas-no-codigo/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://rafaelnaufal.com/blogpt/2010/07/19/propagacao-de-mudancas-no-codigo/</feedburner:origLink></item>
		<item>
		<title>Um pouco de história de Java e JDBC</title>
		<link>http://feedproxy.google.com/~r/rafaelnaufal-pt-rss/~3/B-np5dwaQAI/</link>
		<comments>http://rafaelnaufal.com/blogpt/2010/07/19/um-pouco-de-historia-de-java-e-jdbc/#comments</comments>
		<pubDate>Mon, 19 Jul 2010 16:58:48 +0000</pubDate>
		<dc:creator>rnaufal</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jdbc]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[vídeo]]></category>

		<guid isPermaLink="false">http://rafaelnaufal.com/blogpt/?p=84</guid>
		<description><![CDATA[Um pequeno vídeo postado no Javalobby há um tempo atrás sobre a evolução da plataforma Java desde 1991. Vale a pena conferir. Compartilhe:]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F07%2F19%2Fum-pouco-de-historia-de-java-e-jdbc%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F07%2F19%2Fum-pouco-de-historia-de-java-e-jdbc%2F&amp;source=rnaufal&amp;style=normal&amp;hashtags=java,jdbc,programa%C3%A7%C3%A3o,v%C3%ADdeo&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Um pequeno vídeo postado no <a href="http://java.dzone.com/videos/brief-history-java-and-jdbc">Javalobby</a> há um tempo atrás sobre a evolução da plataforma Java desde 1991. Vale a pena conferir.</p>
Compartilhe:<a rel="nofollow" target="_blank"  href="http://twitter.com/home?status=Um%20pouco%20de%20hist%C3%B3ria%20de%20Java%20e%20JDBC%20-%20http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F07%2F19%2Fum-pouco-de-historia-de-java-e-jdbc%2F" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/twitter.png" class="sociable-img sociable-hovers" title="Twitter" alt="Twitter" /></a><a rel="nofollow" target="_blank"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F07%2F19%2Fum-pouco-de-historia-de-java-e-jdbc%2F&amp;title=Um%20pouco%20de%20hist%C3%B3ria%20de%20Java%20e%20JDBC&amp;bodytext=Um%20pequeno%20v%C3%ADdeo%20postado%20no%20Javalobby%20h%C3%A1%20um%20tempo%20atr%C3%A1s%20sobre%20a%20evolu%C3%A7%C3%A3o%20da%20plataforma%20Java%20desde%201991.%20Vale%20a%20pena%20conferir." ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/digg.png" class="sociable-img sociable-hovers" title="Digg" alt="Digg" /></a><a rel="nofollow" target="_blank"  href="http://delicious.com/post?url=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F07%2F19%2Fum-pouco-de-historia-de-java-e-jdbc%2F&amp;title=Um%20pouco%20de%20hist%C3%B3ria%20de%20Java%20e%20JDBC&amp;notes=Um%20pequeno%20v%C3%ADdeo%20postado%20no%20Javalobby%20h%C3%A1%20um%20tempo%20atr%C3%A1s%20sobre%20a%20evolu%C3%A7%C3%A3o%20da%20plataforma%20Java%20desde%201991.%20Vale%20a%20pena%20conferir." ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/delicious.png" class="sociable-img sociable-hovers" title="del.icio.us" alt="del.icio.us" /></a><a rel="nofollow" target="_blank"  href="http://reddit.com/submit?url=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F07%2F19%2Fum-pouco-de-historia-de-java-e-jdbc%2F&amp;title=Um%20pouco%20de%20hist%C3%B3ria%20de%20Java%20e%20JDBC" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/reddit.png" class="sociable-img sociable-hovers" title="Reddit" alt="Reddit" /></a><a rel="nofollow" target="_blank"  href="http://www.google.com/reader/link?url=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F07%2F19%2Fum-pouco-de-historia-de-java-e-jdbc%2F&amp;title=Um%20pouco%20de%20hist%C3%B3ria%20de%20Java%20e%20JDBC&amp;srcURL=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F07%2F19%2Fum-pouco-de-historia-de-java-e-jdbc%2F&amp;srcTitle=Rafael+Naufal%26%23039%3Bs+blog+Java%2C+Scrum%2C+XP%2C+TDD...+Desenvolvimento+de+software+em+geral" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/googlebuzz.png" class="sociable-img sociable-hovers" title="Google Buzz" alt="Google Buzz" /></a><a rel="nofollow" target="_blank"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F07%2F19%2Fum-pouco-de-historia-de-java-e-jdbc%2F&amp;title=Um%20pouco%20de%20hist%C3%B3ria%20de%20Java%20e%20JDBC&amp;annotation=Um%20pequeno%20v%C3%ADdeo%20postado%20no%20Javalobby%20h%C3%A1%20um%20tempo%20atr%C3%A1s%20sobre%20a%20evolu%C3%A7%C3%A3o%20da%20plataforma%20Java%20desde%201991.%20Vale%20a%20pena%20conferir." ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/googlebookmark.png" class="sociable-img sociable-hovers" title="Google Bookmarks" alt="Google Bookmarks" /></a><a rel="nofollow" target="_blank"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F07%2F19%2Fum-pouco-de-historia-de-java-e-jdbc%2F&amp;t=Um%20pouco%20de%20hist%C3%B3ria%20de%20Java%20e%20JDBC" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/facebook.png" class="sociable-img sociable-hovers" title="Facebook" alt="Facebook" /></a><a rel="nofollow" target="_blank"  href="http://technorati.com/faves?add=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F07%2F19%2Fum-pouco-de-historia-de-java-e-jdbc%2F" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/technorati.png" class="sociable-img sociable-hovers" title="Technorati" alt="Technorati" /></a><a rel="nofollow" target="_blank"  href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F07%2F19%2Fum-pouco-de-historia-de-java-e-jdbc%2F&amp;title=Um%20pouco%20de%20hist%C3%B3ria%20de%20Java%20e%20JDBC" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/stumbleupon.png" class="sociable-img sociable-hovers" title="StumbleUpon" alt="StumbleUpon" /></a><a rel="nofollow" target="_blank"  href="http://www.friendfeed.com/share?title=Um%20pouco%20de%20hist%C3%B3ria%20de%20Java%20e%20JDBC&amp;link=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F07%2F19%2Fum-pouco-de-historia-de-java-e-jdbc%2F" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/friendfeed.png" class="sociable-img sociable-hovers" title="FriendFeed" alt="FriendFeed" /></a><a rel="nofollow" target="_blank"  href="http://www.myspace.com/Modules/PostTo/Pages/?u=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F07%2F19%2Fum-pouco-de-historia-de-java-e-jdbc%2F&amp;t=Um%20pouco%20de%20hist%C3%B3ria%20de%20Java%20e%20JDBC" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/myspace.png" class="sociable-img sociable-hovers" title="MySpace" alt="MySpace" /></a><a rel="nofollow" target="_blank"  href="http://slashdot.org/bookmark.pl?title=Um%20pouco%20de%20hist%C3%B3ria%20de%20Java%20e%20JDBC&amp;url=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F07%2F19%2Fum-pouco-de-historia-de-java-e-jdbc%2F" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/slashdot.png" class="sociable-img sociable-hovers" title="Slashdot" alt="Slashdot" /></a><br/><br/><img src="http://feeds.feedburner.com/~r/rafaelnaufal-pt-rss/~4/B-np5dwaQAI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://rafaelnaufal.com/blogpt/2010/07/19/um-pouco-de-historia-de-java-e-jdbc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://rafaelnaufal.com/blogpt/2010/07/19/um-pouco-de-historia-de-java-e-jdbc/</feedburner:origLink></item>
		<item>
		<title>Template para Log4J no Eclipse</title>
		<link>http://feedproxy.google.com/~r/rafaelnaufal-pt-rss/~3/WZBOHR7xAw4/</link>
		<comments>http://rafaelnaufal.com/blogpt/2010/05/09/template-para-log4j-no-eclipse/#comments</comments>
		<pubDate>Sun, 09 May 2010 19:04:55 +0000</pubDate>
		<dc:creator>rnaufal</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[log4j]]></category>
		<category><![CDATA[logger]]></category>
		<category><![CDATA[templates]]></category>

		<guid isPermaLink="false">http://rafaelnaufal.com/blogpt/?p=63</guid>
		<description><![CDATA[Há um tempo atrás o Bruno me passou uma dica muito útil para se criar um template para o Log4J no Eclipse. Faça o seguinte: Vá em Window > Preferences > Java > Editor > Templates Clique em New Nos campos Name e Description, escreva, por exemplo, logger (este é o nome que será utilizado [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F05%2F09%2Ftemplate-para-log4j-no-eclipse%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F05%2F09%2Ftemplate-para-log4j-no-eclipse%2F&amp;source=rnaufal&amp;style=normal&amp;hashtags=eclipse,java,log4j,logger,templates&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Há um tempo atrás o <a href="http://bpfurtado.livejournal.com">Bruno</a> me passou uma dica muito útil para se criar um template para o <a href="http://logging.apache.org/log4j/">Log4J</a> no Eclipse. Faça o seguinte:</p>
<ol>
<li>Vá em <em>Window > Preferences > Java > Editor > Templates</em></li>
<li> Clique em <em>New</em></li>
<li>Nos campos <em>Name</em> e <em>Description</em>, escreva, por exemplo, <strong>logger</strong> (este é o nome que será utilizado para invocar o template) </li>
<li>No campo <em>Pattern</em>, digite:<br />
<blockquote><p align="center">private static final Logger LOGGER = Logger.getLogger(${enclosing_type}.class);</p>
</blockquote>
</li>
<li>Clique em <em>OK</em></li>
</ol>
<p>A variável <em>${enclosing_type}</em> referencia o nome da classe atual. Pronto, basta digitar <strong>logger</strong> na declaração da classe que um logger para a classe vai ser adicionado!</p>
Compartilhe:<a rel="nofollow" target="_blank"  href="http://twitter.com/home?status=Template%20para%20Log4J%20no%20Eclipse%20-%20http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F05%2F09%2Ftemplate-para-log4j-no-eclipse%2F" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/twitter.png" class="sociable-img sociable-hovers" title="Twitter" alt="Twitter" /></a><a rel="nofollow" target="_blank"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F05%2F09%2Ftemplate-para-log4j-no-eclipse%2F&amp;title=Template%20para%20Log4J%20no%20Eclipse&amp;bodytext=H%C3%A1%20um%20tempo%20atr%C3%A1s%20o%20Bruno%20me%20passou%20uma%20dica%20muito%20%C3%BAtil%20para%20se%20criar%20um%20template%20para%20o%20Log4J%20no%20Eclipse.%20Fa%C3%A7a%20o%20seguinte%3A%0D%0A%0D%0A%0D%0A%09V%C3%A1%20em%20Window%20%3E%20Preferences%20%3E%20Java%20%3E%20Editor%20%3E%20Templates%0D%0A%09%20Clique%20em%20New%0D%0A%09Nos%20campos%20Name%20e%20Description%2C%20escreva%2C%20p" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/digg.png" class="sociable-img sociable-hovers" title="Digg" alt="Digg" /></a><a rel="nofollow" target="_blank"  href="http://delicious.com/post?url=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F05%2F09%2Ftemplate-para-log4j-no-eclipse%2F&amp;title=Template%20para%20Log4J%20no%20Eclipse&amp;notes=H%C3%A1%20um%20tempo%20atr%C3%A1s%20o%20Bruno%20me%20passou%20uma%20dica%20muito%20%C3%BAtil%20para%20se%20criar%20um%20template%20para%20o%20Log4J%20no%20Eclipse.%20Fa%C3%A7a%20o%20seguinte%3A%0D%0A%0D%0A%0D%0A%09V%C3%A1%20em%20Window%20%3E%20Preferences%20%3E%20Java%20%3E%20Editor%20%3E%20Templates%0D%0A%09%20Clique%20em%20New%0D%0A%09Nos%20campos%20Name%20e%20Description%2C%20escreva%2C%20p" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/delicious.png" class="sociable-img sociable-hovers" title="del.icio.us" alt="del.icio.us" /></a><a rel="nofollow" target="_blank"  href="http://reddit.com/submit?url=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F05%2F09%2Ftemplate-para-log4j-no-eclipse%2F&amp;title=Template%20para%20Log4J%20no%20Eclipse" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/reddit.png" class="sociable-img sociable-hovers" title="Reddit" alt="Reddit" /></a><a rel="nofollow" target="_blank"  href="http://www.google.com/reader/link?url=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F05%2F09%2Ftemplate-para-log4j-no-eclipse%2F&amp;title=Template%20para%20Log4J%20no%20Eclipse&amp;srcURL=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F05%2F09%2Ftemplate-para-log4j-no-eclipse%2F&amp;srcTitle=Rafael+Naufal%26%23039%3Bs+blog+Java%2C+Scrum%2C+XP%2C+TDD...+Desenvolvimento+de+software+em+geral" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/googlebuzz.png" class="sociable-img sociable-hovers" title="Google Buzz" alt="Google Buzz" /></a><a rel="nofollow" target="_blank"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F05%2F09%2Ftemplate-para-log4j-no-eclipse%2F&amp;title=Template%20para%20Log4J%20no%20Eclipse&amp;annotation=H%C3%A1%20um%20tempo%20atr%C3%A1s%20o%20Bruno%20me%20passou%20uma%20dica%20muito%20%C3%BAtil%20para%20se%20criar%20um%20template%20para%20o%20Log4J%20no%20Eclipse.%20Fa%C3%A7a%20o%20seguinte%3A%0D%0A%0D%0A%0D%0A%09V%C3%A1%20em%20Window%20%3E%20Preferences%20%3E%20Java%20%3E%20Editor%20%3E%20Templates%0D%0A%09%20Clique%20em%20New%0D%0A%09Nos%20campos%20Name%20e%20Description%2C%20escreva%2C%20p" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/googlebookmark.png" class="sociable-img sociable-hovers" title="Google Bookmarks" alt="Google Bookmarks" /></a><a rel="nofollow" target="_blank"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F05%2F09%2Ftemplate-para-log4j-no-eclipse%2F&amp;t=Template%20para%20Log4J%20no%20Eclipse" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/facebook.png" class="sociable-img sociable-hovers" title="Facebook" alt="Facebook" /></a><a rel="nofollow" target="_blank"  href="http://technorati.com/faves?add=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F05%2F09%2Ftemplate-para-log4j-no-eclipse%2F" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/technorati.png" class="sociable-img sociable-hovers" title="Technorati" alt="Technorati" /></a><a rel="nofollow" target="_blank"  href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F05%2F09%2Ftemplate-para-log4j-no-eclipse%2F&amp;title=Template%20para%20Log4J%20no%20Eclipse" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/stumbleupon.png" class="sociable-img sociable-hovers" title="StumbleUpon" alt="StumbleUpon" /></a><a rel="nofollow" target="_blank"  href="http://www.friendfeed.com/share?title=Template%20para%20Log4J%20no%20Eclipse&amp;link=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F05%2F09%2Ftemplate-para-log4j-no-eclipse%2F" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/friendfeed.png" class="sociable-img sociable-hovers" title="FriendFeed" alt="FriendFeed" /></a><a rel="nofollow" target="_blank"  href="http://www.myspace.com/Modules/PostTo/Pages/?u=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F05%2F09%2Ftemplate-para-log4j-no-eclipse%2F&amp;t=Template%20para%20Log4J%20no%20Eclipse" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/myspace.png" class="sociable-img sociable-hovers" title="MySpace" alt="MySpace" /></a><a rel="nofollow" target="_blank"  href="http://slashdot.org/bookmark.pl?title=Template%20para%20Log4J%20no%20Eclipse&amp;url=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F05%2F09%2Ftemplate-para-log4j-no-eclipse%2F" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/slashdot.png" class="sociable-img sociable-hovers" title="Slashdot" alt="Slashdot" /></a><br/><br/><img src="http://feeds.feedburner.com/~r/rafaelnaufal-pt-rss/~4/WZBOHR7xAw4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://rafaelnaufal.com/blogpt/2010/05/09/template-para-log4j-no-eclipse/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://rafaelnaufal.com/blogpt/2010/05/09/template-para-log4j-no-eclipse/</feedburner:origLink></item>
		<item>
		<title>Meu artigo MIMECORA-DS no Google Books</title>
		<link>http://feedproxy.google.com/~r/rafaelnaufal-pt-rss/~3/GSCuuqLSqP8/</link>
		<comments>http://rafaelnaufal.com/blogpt/2010/05/01/meu-artigo-mimecora-ds-no-google-books/#comments</comments>
		<pubDate>Sat, 01 May 2010 19:51:17 +0000</pubDate>
		<dc:creator>rnaufal</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[aspectos]]></category>
		<category><![CDATA[diagrama_sequencia]]></category>
		<category><![CDATA[mimecora-ds]]></category>
		<category><![CDATA[objetos]]></category>
		<category><![CDATA[POA]]></category>
		<category><![CDATA[poo]]></category>
		<category><![CDATA[UML]]></category>

		<guid isPermaLink="false">http://rafaelnaufal.com/blogpt/?p=55</guid>
		<description><![CDATA[Googando o termo MIMECORA-DS, que é o nome do meu trabalho de conclusão de curso de pós-graduação, descobri que meu artigo publicado no FP-UML 2009 referente a esta abordagem está presente no Google Books, referente ao evento ER 2009! O título do artigo foi A Collaborative Support Approach on UML Sequence Diagrams for Aspect-Oriented Software, [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F05%2F01%2Fmeu-artigo-mimecora-ds-no-google-books%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F05%2F01%2Fmeu-artigo-mimecora-ds-no-google-books%2F&amp;source=rnaufal&amp;style=normal&amp;hashtags=aspectos,diagrama_sequencia,mimecora-ds,objetos,POA,poo,UML&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p><a href="http://pt.wikipedia.org/wiki/Googlar">Googando</a> o termo MIMECORA-DS, que é o nome do meu trabalho de conclusão de curso de pós-graduação, descobri que meu artigo publicado no <a href="http://gplsi.dlsi.ua.es/congresos/fpuml09/">FP-UML 2009</a> referente a esta abordagem está presente no <a href="http://books.google.com.br/books?id=9HnQrlSoO3EC&#038;pg=PA124&#038;lpg=PA124&#038;dq=MIMECORA-DS&#038;source=bl&#038;ots=j017DsrJwp&#038;sig=sdhZkrOf-yu3EkRB4by3ztZTwPo&#038;hl=pt-BR&#038;ei=D4LcS8j4GY6ouAea4-CMBw&#038;sa=X&#038;oi=book_result&#038;ct=result&#038;resnum=4&#038;ved=0CB4Q6AEwAw#v=onepage&#038;q=MIMECORA-DS&#038;f=false">Google Books</a>, referente ao evento <a href="http://www.inf.ufrgs.br/er2009/">ER 2009</a>!</p>
<p>O título do artigo foi <em>A Collaborative Support Approach on UML Sequence Diagrams for Aspect-Oriented Software</em>, que significa Uma Abordagem com Suporte Colaborativo em Diagramas de Seqüência da UML para Software Orientado a Aspectos. Neste artigo apresentamos uma extensão baseada no meta-modelo padrão da <a href="http://pt.wikipedia.org/wiki/UML">UML</a>, para representar as interações objeto-objeto, objeto-aspecto e aspecto-aspecto no diagrama de seqüências da UML.</p>
<p>Parabéns a todos os que colaboraram para este trabalho, principalmente ao @<a href="http://twitter.com/ffs_ffs">ffs_ffs</a> e ao @<a href="http://twitter.com/emguerra">emguerra</a>!</p>
Compartilhe:<a rel="nofollow" target="_blank"  href="http://twitter.com/home?status=Meu%20artigo%20MIMECORA-DS%20no%20Google%20Books%20-%20http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F05%2F01%2Fmeu-artigo-mimecora-ds-no-google-books%2F" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/twitter.png" class="sociable-img sociable-hovers" title="Twitter" alt="Twitter" /></a><a rel="nofollow" target="_blank"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F05%2F01%2Fmeu-artigo-mimecora-ds-no-google-books%2F&amp;title=Meu%20artigo%20MIMECORA-DS%20no%20Google%20Books&amp;bodytext=Googando%20o%20termo%20MIMECORA-DS%2C%20que%20%C3%A9%20o%20nome%20do%20meu%20trabalho%20de%20conclus%C3%A3o%20de%20curso%20de%20p%C3%B3s-gradua%C3%A7%C3%A3o%2C%20descobri%20que%20meu%20artigo%20publicado%20no%20FP-UML%202009%20referente%20a%20esta%20abordagem%20est%C3%A1%20presente%20no%20Google%20Books%2C%20referente%20ao%20evento%20ER%202009%21%0D%0A%0D%0AO%20t%C3%ADt" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/digg.png" class="sociable-img sociable-hovers" title="Digg" alt="Digg" /></a><a rel="nofollow" target="_blank"  href="http://delicious.com/post?url=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F05%2F01%2Fmeu-artigo-mimecora-ds-no-google-books%2F&amp;title=Meu%20artigo%20MIMECORA-DS%20no%20Google%20Books&amp;notes=Googando%20o%20termo%20MIMECORA-DS%2C%20que%20%C3%A9%20o%20nome%20do%20meu%20trabalho%20de%20conclus%C3%A3o%20de%20curso%20de%20p%C3%B3s-gradua%C3%A7%C3%A3o%2C%20descobri%20que%20meu%20artigo%20publicado%20no%20FP-UML%202009%20referente%20a%20esta%20abordagem%20est%C3%A1%20presente%20no%20Google%20Books%2C%20referente%20ao%20evento%20ER%202009%21%0D%0A%0D%0AO%20t%C3%ADt" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/delicious.png" class="sociable-img sociable-hovers" title="del.icio.us" alt="del.icio.us" /></a><a rel="nofollow" target="_blank"  href="http://reddit.com/submit?url=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F05%2F01%2Fmeu-artigo-mimecora-ds-no-google-books%2F&amp;title=Meu%20artigo%20MIMECORA-DS%20no%20Google%20Books" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/reddit.png" class="sociable-img sociable-hovers" title="Reddit" alt="Reddit" /></a><a rel="nofollow" target="_blank"  href="http://www.google.com/reader/link?url=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F05%2F01%2Fmeu-artigo-mimecora-ds-no-google-books%2F&amp;title=Meu%20artigo%20MIMECORA-DS%20no%20Google%20Books&amp;srcURL=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F05%2F01%2Fmeu-artigo-mimecora-ds-no-google-books%2F&amp;srcTitle=Rafael+Naufal%26%23039%3Bs+blog+Java%2C+Scrum%2C+XP%2C+TDD...+Desenvolvimento+de+software+em+geral" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/googlebuzz.png" class="sociable-img sociable-hovers" title="Google Buzz" alt="Google Buzz" /></a><a rel="nofollow" target="_blank"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F05%2F01%2Fmeu-artigo-mimecora-ds-no-google-books%2F&amp;title=Meu%20artigo%20MIMECORA-DS%20no%20Google%20Books&amp;annotation=Googando%20o%20termo%20MIMECORA-DS%2C%20que%20%C3%A9%20o%20nome%20do%20meu%20trabalho%20de%20conclus%C3%A3o%20de%20curso%20de%20p%C3%B3s-gradua%C3%A7%C3%A3o%2C%20descobri%20que%20meu%20artigo%20publicado%20no%20FP-UML%202009%20referente%20a%20esta%20abordagem%20est%C3%A1%20presente%20no%20Google%20Books%2C%20referente%20ao%20evento%20ER%202009%21%0D%0A%0D%0AO%20t%C3%ADt" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/googlebookmark.png" class="sociable-img sociable-hovers" title="Google Bookmarks" alt="Google Bookmarks" /></a><a rel="nofollow" target="_blank"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F05%2F01%2Fmeu-artigo-mimecora-ds-no-google-books%2F&amp;t=Meu%20artigo%20MIMECORA-DS%20no%20Google%20Books" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/facebook.png" class="sociable-img sociable-hovers" title="Facebook" alt="Facebook" /></a><a rel="nofollow" target="_blank"  href="http://technorati.com/faves?add=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F05%2F01%2Fmeu-artigo-mimecora-ds-no-google-books%2F" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/technorati.png" class="sociable-img sociable-hovers" title="Technorati" alt="Technorati" /></a><a rel="nofollow" target="_blank"  href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F05%2F01%2Fmeu-artigo-mimecora-ds-no-google-books%2F&amp;title=Meu%20artigo%20MIMECORA-DS%20no%20Google%20Books" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/stumbleupon.png" class="sociable-img sociable-hovers" title="StumbleUpon" alt="StumbleUpon" /></a><a rel="nofollow" target="_blank"  href="http://www.friendfeed.com/share?title=Meu%20artigo%20MIMECORA-DS%20no%20Google%20Books&amp;link=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F05%2F01%2Fmeu-artigo-mimecora-ds-no-google-books%2F" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/friendfeed.png" class="sociable-img sociable-hovers" title="FriendFeed" alt="FriendFeed" /></a><a rel="nofollow" target="_blank"  href="http://www.myspace.com/Modules/PostTo/Pages/?u=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F05%2F01%2Fmeu-artigo-mimecora-ds-no-google-books%2F&amp;t=Meu%20artigo%20MIMECORA-DS%20no%20Google%20Books" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/myspace.png" class="sociable-img sociable-hovers" title="MySpace" alt="MySpace" /></a><a rel="nofollow" target="_blank"  href="http://slashdot.org/bookmark.pl?title=Meu%20artigo%20MIMECORA-DS%20no%20Google%20Books&amp;url=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F05%2F01%2Fmeu-artigo-mimecora-ds-no-google-books%2F" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/slashdot.png" class="sociable-img sociable-hovers" title="Slashdot" alt="Slashdot" /></a><br/><br/><img src="http://feeds.feedburner.com/~r/rafaelnaufal-pt-rss/~4/GSCuuqLSqP8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://rafaelnaufal.com/blogpt/2010/05/01/meu-artigo-mimecora-ds-no-google-books/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://rafaelnaufal.com/blogpt/2010/05/01/meu-artigo-mimecora-ds-no-google-books/</feedburner:origLink></item>
		<item>
		<title>Sobre programação em par</title>
		<link>http://feedproxy.google.com/~r/rafaelnaufal-pt-rss/~3/yRtCdGbnCeM/</link>
		<comments>http://rafaelnaufal.com/blogpt/2010/05/01/sobre-programacao-em-par/#comments</comments>
		<pubDate>Sat, 01 May 2010 19:33:26 +0000</pubDate>
		<dc:creator>rnaufal</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[código]]></category>
		<category><![CDATA[IDE]]></category>
		<category><![CDATA[programação em par]]></category>
		<category><![CDATA[refatoração]]></category>
		<category><![CDATA[revisão]]></category>

		<guid isPermaLink="false">http://rafaelnaufal.com/blogpt/?p=52</guid>
		<description><![CDATA[No meu trabalho utilizamos Scrum para gerenciar o desenvolvimento de novas funcionalidades do sistema e também programação em par, basicamente por 3 motivos: Disseminar o conhecimento da base de código Familiarizar-se com as regras do sistema Duas cabeças pensantes facilitam o desenvolvimento da tarefa Eu não tinha tido a oportunidade de colocar esse tipo de [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F05%2F01%2Fsobre-programacao-em-par%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F05%2F01%2Fsobre-programacao-em-par%2F&amp;source=rnaufal&amp;style=normal&amp;hashtags=c%C3%B3digo,IDE,programa%C3%A7%C3%A3o+em+par,refatora%C3%A7%C3%A3o,revis%C3%A3o&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>No meu trabalho utilizamos <a href="http://pt.wikipedia.org/wiki/Scrum">Scrum</a> para gerenciar o desenvolvimento de novas funcionalidades do sistema e também <a href="http://pt.wikipedia.org/wiki/Programa%C3%A7%C3%A3o_extrema">programação em par</a>, basicamente por 3 motivos:</p>
<ol>
<li>Disseminar o conhecimento da base de código</li>
<li>Familiarizar-se com as regras do sistema</li>
<li>Duas cabeças pensantes facilitam o desenvolvimento da tarefa</li>
</ol>
<p>Eu não tinha tido a oportunidade de colocar esse tipo de técnica em prática anteriormente, mas tenho reparado como ela é importante e benéfica para um projeto. Algumas vezes sou eu quem está programando (papel conhecido como <em>driver</em>) e outras vezes sou o observador (<em>observer</em>). O observador tem a tarefa de realizar a revisão de código durante o desenvolvimento. Esse último ponto é muito importante: <strong>revisão de código</strong>.<br />
Programação em par encoraja a revisão de código. Provavelmente você não teria a oportunidade de refatorar um código como você tem quando está <em>pareando</em> com alguém. Eu acho que revisão de código é importante pelos seguintes motivos:</p>
<ul>
<li>Melhora a qualidade do código: são 2 pessoas pensando na mesma tarefa ao mesmo tempo</li>
<li>Surgem oportunidade de refatoração de código</li>
<li>Quando se tem o suporte de uma boa IDE (como o Eclipse), algumas refatorações (extração de classe, extração de método, etc..) são bem automatizadas</li>
<li>Código é mais lido que escrito: duas pessoas lendo o código podem aprender muito mais sobre o sistema</li>
<li>Novas idéias surgem em função de pontos de vista diferentes</li>
<li>Bugs podem ser resolvidos pela complemento de conhecimento dos pares sobre a base de código</li>
</ul>
<p>E você? Qual sua experiência sobre a programação em par?</p>
Compartilhe:<a rel="nofollow" target="_blank"  href="http://twitter.com/home?status=Sobre%20programa%C3%A7%C3%A3o%20em%20par%20-%20http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F05%2F01%2Fsobre-programacao-em-par%2F" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/twitter.png" class="sociable-img sociable-hovers" title="Twitter" alt="Twitter" /></a><a rel="nofollow" target="_blank"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F05%2F01%2Fsobre-programacao-em-par%2F&amp;title=Sobre%20programa%C3%A7%C3%A3o%20em%20par&amp;bodytext=No%20meu%20trabalho%20utilizamos%20Scrum%20para%20gerenciar%20o%20desenvolvimento%20de%20novas%20funcionalidades%20do%20sistema%20e%20tamb%C3%A9m%20programa%C3%A7%C3%A3o%20em%20par%2C%20basicamente%20por%203%20motivos%3A%0D%0A%0D%0A%0D%0A%09Disseminar%20o%20conhecimento%20da%20base%20de%20c%C3%B3digo%0D%0A%09Familiarizar-se%20com%20as%20regras%20do%20sis" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/digg.png" class="sociable-img sociable-hovers" title="Digg" alt="Digg" /></a><a rel="nofollow" target="_blank"  href="http://delicious.com/post?url=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F05%2F01%2Fsobre-programacao-em-par%2F&amp;title=Sobre%20programa%C3%A7%C3%A3o%20em%20par&amp;notes=No%20meu%20trabalho%20utilizamos%20Scrum%20para%20gerenciar%20o%20desenvolvimento%20de%20novas%20funcionalidades%20do%20sistema%20e%20tamb%C3%A9m%20programa%C3%A7%C3%A3o%20em%20par%2C%20basicamente%20por%203%20motivos%3A%0D%0A%0D%0A%0D%0A%09Disseminar%20o%20conhecimento%20da%20base%20de%20c%C3%B3digo%0D%0A%09Familiarizar-se%20com%20as%20regras%20do%20sis" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/delicious.png" class="sociable-img sociable-hovers" title="del.icio.us" alt="del.icio.us" /></a><a rel="nofollow" target="_blank"  href="http://reddit.com/submit?url=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F05%2F01%2Fsobre-programacao-em-par%2F&amp;title=Sobre%20programa%C3%A7%C3%A3o%20em%20par" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/reddit.png" class="sociable-img sociable-hovers" title="Reddit" alt="Reddit" /></a><a rel="nofollow" target="_blank"  href="http://www.google.com/reader/link?url=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F05%2F01%2Fsobre-programacao-em-par%2F&amp;title=Sobre%20programa%C3%A7%C3%A3o%20em%20par&amp;srcURL=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F05%2F01%2Fsobre-programacao-em-par%2F&amp;srcTitle=Rafael+Naufal%26%23039%3Bs+blog+Java%2C+Scrum%2C+XP%2C+TDD...+Desenvolvimento+de+software+em+geral" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/googlebuzz.png" class="sociable-img sociable-hovers" title="Google Buzz" alt="Google Buzz" /></a><a rel="nofollow" target="_blank"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F05%2F01%2Fsobre-programacao-em-par%2F&amp;title=Sobre%20programa%C3%A7%C3%A3o%20em%20par&amp;annotation=No%20meu%20trabalho%20utilizamos%20Scrum%20para%20gerenciar%20o%20desenvolvimento%20de%20novas%20funcionalidades%20do%20sistema%20e%20tamb%C3%A9m%20programa%C3%A7%C3%A3o%20em%20par%2C%20basicamente%20por%203%20motivos%3A%0D%0A%0D%0A%0D%0A%09Disseminar%20o%20conhecimento%20da%20base%20de%20c%C3%B3digo%0D%0A%09Familiarizar-se%20com%20as%20regras%20do%20sis" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/googlebookmark.png" class="sociable-img sociable-hovers" title="Google Bookmarks" alt="Google Bookmarks" /></a><a rel="nofollow" target="_blank"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F05%2F01%2Fsobre-programacao-em-par%2F&amp;t=Sobre%20programa%C3%A7%C3%A3o%20em%20par" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/facebook.png" class="sociable-img sociable-hovers" title="Facebook" alt="Facebook" /></a><a rel="nofollow" target="_blank"  href="http://technorati.com/faves?add=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F05%2F01%2Fsobre-programacao-em-par%2F" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/technorati.png" class="sociable-img sociable-hovers" title="Technorati" alt="Technorati" /></a><a rel="nofollow" target="_blank"  href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F05%2F01%2Fsobre-programacao-em-par%2F&amp;title=Sobre%20programa%C3%A7%C3%A3o%20em%20par" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/stumbleupon.png" class="sociable-img sociable-hovers" title="StumbleUpon" alt="StumbleUpon" /></a><a rel="nofollow" target="_blank"  href="http://www.friendfeed.com/share?title=Sobre%20programa%C3%A7%C3%A3o%20em%20par&amp;link=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F05%2F01%2Fsobre-programacao-em-par%2F" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/friendfeed.png" class="sociable-img sociable-hovers" title="FriendFeed" alt="FriendFeed" /></a><a rel="nofollow" target="_blank"  href="http://www.myspace.com/Modules/PostTo/Pages/?u=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F05%2F01%2Fsobre-programacao-em-par%2F&amp;t=Sobre%20programa%C3%A7%C3%A3o%20em%20par" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/myspace.png" class="sociable-img sociable-hovers" title="MySpace" alt="MySpace" /></a><a rel="nofollow" target="_blank"  href="http://slashdot.org/bookmark.pl?title=Sobre%20programa%C3%A7%C3%A3o%20em%20par&amp;url=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F05%2F01%2Fsobre-programacao-em-par%2F" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/slashdot.png" class="sociable-img sociable-hovers" title="Slashdot" alt="Slashdot" /></a><br/><br/><img src="http://feeds.feedburner.com/~r/rafaelnaufal-pt-rss/~4/yRtCdGbnCeM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://rafaelnaufal.com/blogpt/2010/05/01/sobre-programacao-em-par/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://rafaelnaufal.com/blogpt/2010/05/01/sobre-programacao-em-par/</feedburner:origLink></item>
		<item>
		<title>Integrando JUnit e Hamcrest</title>
		<link>http://feedproxy.google.com/~r/rafaelnaufal-pt-rss/~3/1LKaRlVIjKQ/</link>
		<comments>http://rafaelnaufal.com/blogpt/2010/04/22/integrando-hamcrest-e-junit/#comments</comments>
		<pubDate>Fri, 23 Apr 2010 01:22:48 +0000</pubDate>
		<dc:creator>rnaufal</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[hamcrest]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[junit]]></category>
		<category><![CDATA[matchers]]></category>
		<category><![CDATA[testes]]></category>

		<guid isPermaLink="false">http://rafaelnaufal.com/blogpt/?p=41</guid>
		<description><![CDATA[Há uns tempos atrás comecei a testar o projeto Hamcrest junto com o framework JUnit para criar testes unitários mais legíveis. O projeto Hamcrest foi criado para melhorar a legibilidade do código de testes. É um framework que facilita a criação de objetos do tipo matcher que combinam regras presentes em testes de unidade. Seguem [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F04%2F22%2Fintegrando-hamcrest-e-junit%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F04%2F22%2Fintegrando-hamcrest-e-junit%2F&amp;source=rnaufal&amp;style=normal&amp;hashtags=google,hamcrest,java,junit,matchers,testes&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Há uns tempos atrás comecei a testar o projeto  <a href="http://junit.sourceforge.net/doc/ReleaseNotes4.4.html">Hamcrest</a> junto com o framework JUnit para criar testes unitários mais legíveis.</p>
<p>O projeto Hamcrest foi criado para melhorar a legibilidade do código de testes. É um framework que facilita a criação de objetos do tipo <em>matcher</em> que combinam regras presentes em testes de <em>unidade</em>. Seguem alguns examplos para deixar a idéia mais clara:</p>
<pre class="gutterH"><span class="syntax0"><span class="gutter">   1 </span><span class="syntax-KEYWORD2">import</span> <span class="syntax-KEYWORD1">static</span> org.hamcrest.CoreMatchers.equalTo;
<span class="gutter">   2 </span><span class="syntax-KEYWORD2">import</span> <span class="syntax-KEYWORD1">static</span> org.hamcrest.CoreMatchers.is;
<span class="gutter">   3 </span><span class="syntax-KEYWORD2">import</span> <span class="syntax-KEYWORD1">static</span> org.junit.Assert.assertThat;
<span class="gutter">   4 </span>
<span class="gutterH">   5 </span><span class="syntax-KEYWORD4">@</span><span class="syntax-KEYWORD4">Test</span>
<span class="gutter">   6 </span><span class="syntax-KEYWORD1">public</span> <span class="syntax-KEYWORD3">void</span> <span class="syntax-FUNCTION">shouldBeTheSamePerson</span><span class="syntax-OPERATOR">(</span><span class="syntax-OPERATOR">)</span>
<span class="gutter">   7 </span><span class="syntax-OPERATOR">{</span>
<span class="gutter">   8 </span>    Person me <span class="syntax-OPERATOR">=</span> <span class="syntax-KEYWORD1">new</span> <span class="syntax-FUNCTION">Person</span><span class="syntax-OPERATOR">(</span> <span class="syntax-LITERAL1">&quot;</span><span class="syntax-LITERAL1">Rafael</span><span class="syntax-LITERAL1">&quot;</span> <span class="syntax-OPERATOR">)</span>;
<span class="gutter">   9 </span>    Person theOther <span class="syntax-OPERATOR">=</span> <span class="syntax-KEYWORD1">new</span> <span class="syntax-FUNCTION">Person</span><span class="syntax-OPERATOR">(</span> <span class="syntax-LITERAL1">&quot;</span><span class="syntax-LITERAL1">Rafael</span><span class="syntax-LITERAL1">&quot;</span> <span class="syntax-OPERATOR">)</span>;
<span class="gutterH">  10 </span>    <span class="syntax-FUNCTION">assertThat</span><span class="syntax-OPERATOR">(</span> me, <span class="syntax-FUNCTION">is</span><span class="syntax-OPERATOR">(</span> theOther <span class="syntax-OPERATOR">)</span> <span class="syntax-OPERATOR">)</span>;
<span class="gutter">  11 </span><span class="syntax-OPERATOR">}</span>
<span class="gutter">  12 </span>
<span class="gutter">  13 </span><span class="syntax-KEYWORD4">@</span><span class="syntax-KEYWORD4">Test</span>
<span class="gutter">  14 </span><span class="syntax-KEYWORD1">public</span> <span class="syntax-KEYWORD3">void</span> <span class="syntax-FUNCTION">shouldHaveFixedSizeNumbers</span><span class="syntax-OPERATOR">(</span><span class="syntax-OPERATOR">)</span>
<span class="gutterH">  15 </span><span class="syntax-OPERATOR">{</span>
<span class="gutter">  16 </span>    List<span class="syntax-OPERATOR">&lt;</span>Integer<span class="syntax-OPERATOR">&gt;</span> numbers <span class="syntax-OPERATOR">=</span> Arrays.<span class="syntax-FUNCTION">asList</span><span class="syntax-OPERATOR">(</span> <span class="syntax-DIGIT">1</span>, <span class="syntax-DIGIT">2</span>, <span class="syntax-DIGIT">3</span>, <span class="syntax-DIGIT">4</span>, <span class="syntax-DIGIT">5</span> <span class="syntax-OPERATOR">)</span>;
<span class="gutter">  17 </span>    <span class="syntax-FUNCTION">assertThat</span><span class="syntax-OPERATOR">(</span> numbers.<span class="syntax-FUNCTION">size</span><span class="syntax-OPERATOR">(</span><span class="syntax-OPERATOR">)</span>, <span class="syntax-FUNCTION">is</span><span class="syntax-OPERATOR">(</span> <span class="syntax-FUNCTION">equalTo</span><span class="syntax-OPERATOR">(</span> <span class="syntax-DIGIT">5</span> <span class="syntax-OPERATOR">)</span> <span class="syntax-OPERATOR">)</span> <span class="syntax-OPERATOR">)</span>;
<span class="gutter">  18 </span><span class="syntax-OPERATOR">}</span>
</span></pre>
<p>O primeiro exemplo checa se um objeto do tipo <code>Person</code> é igual a outro usando o método <code>equals</code>, que foi sobrescrito na classe <code>Person</code>. A sintaxe <code>is</code> define um <em>matcher</em> que é um sinônimo para <code>is(equalTo(valor))</code>. O segundo exemplo utiliza o <em>matcher</em> <code>is(equalTo(valor))</code> para checar o tamanho de uma lista de inteiros de tamanho fixo. O método <code>assertThat</code> é usado em conjunto com o <em>matcher</em> <code>is(equalTo(valor))</code>, que faz com que as sentenças de teste se tornem mais legíveis.</p>
<p>Algo interessante é a possibilidade de customizar a API de <em>matcher</em>, extendendo-os, como este exemplo que testa se uma dada lista contém somente números pares:</p>
<pre class="gutterH"><span class="syntax0"><span class="gutter">   1 </span><span class="syntax-KEYWORD1">public</span> <span class="syntax-KEYWORD3">class</span> AreEvenNumbers <span class="syntax-KEYWORD1">extends</span> TypeSafeMatcher<span class="syntax-OPERATOR">&lt;</span>Collection<span class="syntax-OPERATOR">&lt;</span>Integer<span class="syntax-OPERATOR">&gt;</span><span class="syntax-OPERATOR">&gt;</span> <span class="syntax-OPERATOR">{</span>
<span class="gutter">   2 </span>
<span class="gutter">   3 </span>    <span class="syntax-KEYWORD4">@</span><span class="syntax-KEYWORD4">Override</span>
<span class="gutter">   4 </span>    <span class="syntax-KEYWORD1">public</span> <span class="syntax-KEYWORD3">boolean</span> <span class="syntax-FUNCTION">matchesSafely</span><span class="syntax-OPERATOR">(</span>Collection<span class="syntax-OPERATOR">&lt;</span>Integer<span class="syntax-OPERATOR">&gt;</span> numbers<span class="syntax-OPERATOR">)</span> <span class="syntax-OPERATOR">{</span>
<span class="gutterH">   5 </span>        <span class="syntax-KEYWORD1">for</span> <span class="syntax-OPERATOR">(</span>Integer number : numbers<span class="syntax-OPERATOR">)</span> <span class="syntax-OPERATOR">{</span>
<span class="gutter">   6 </span>            <span class="syntax-KEYWORD1">if</span> <span class="syntax-OPERATOR">(</span>number <span class="syntax-OPERATOR">%</span> <span class="syntax-DIGIT">2</span> <span class="syntax-OPERATOR">!</span><span class="syntax-OPERATOR">=</span> <span class="syntax-DIGIT">0</span><span class="syntax-OPERATOR">)</span> <span class="syntax-OPERATOR">{</span>
<span class="gutter">   7 </span>                <span class="syntax-KEYWORD1">return</span> <span class="syntax-LITERAL2">false</span>;
<span class="gutter">   8 </span>            <span class="syntax-OPERATOR">}</span>
<span class="gutter">   9 </span>        <span class="syntax-OPERATOR">}</span>
<span class="gutterH">  10 </span>        <span class="syntax-KEYWORD1">return</span> <span class="syntax-LITERAL2">true</span>;
<span class="gutter">  11 </span>    <span class="syntax-OPERATOR">}</span>
<span class="gutter">  12 </span>
<span class="gutter">  13 </span>    <span class="syntax-KEYWORD4">@</span><span class="syntax-KEYWORD4">Override</span>
<span class="gutter">  14 </span>    <span class="syntax-KEYWORD1">public</span> <span class="syntax-KEYWORD3">void</span> <span class="syntax-FUNCTION">describeTo</span><span class="syntax-OPERATOR">(</span>Description description<span class="syntax-OPERATOR">)</span> <span class="syntax-OPERATOR">{</span>
<span class="gutterH">  15 </span>        description.<span class="syntax-FUNCTION">appendText</span><span class="syntax-OPERATOR">(</span><span class="syntax-LITERAL1">&quot;</span><span class="syntax-LITERAL1">even</span><span class="syntax-LITERAL1"> </span><span class="syntax-LITERAL1">numbers</span><span class="syntax-LITERAL1">&quot;</span><span class="syntax-OPERATOR">)</span>;
<span class="gutter">  16 </span>    <span class="syntax-OPERATOR">}</span>
<span class="gutter">  17 </span>
<span class="gutter">  18 </span>    <span class="syntax-KEYWORD4">@</span><span class="syntax-KEYWORD4">Factory</span>
<span class="gutter">  19 </span>    <span class="syntax-KEYWORD1">public</span> <span class="syntax-KEYWORD1">static</span> <span class="syntax-OPERATOR">&lt;</span>T<span class="syntax-OPERATOR">&gt;</span> Matcher<span class="syntax-OPERATOR">&lt;</span>Collection<span class="syntax-OPERATOR">&lt;</span>Integer<span class="syntax-OPERATOR">&gt;</span><span class="syntax-OPERATOR">&gt;</span> <span class="syntax-FUNCTION">evenNumbers</span><span class="syntax-OPERATOR">(</span><span class="syntax-OPERATOR">)</span> <span class="syntax-OPERATOR">{</span>
<span class="gutterH">  20 </span>        <span class="syntax-KEYWORD1">return</span> <span class="syntax-KEYWORD1">new</span> <span class="syntax-FUNCTION">AreEvenNumbers</span><span class="syntax-OPERATOR">(</span><span class="syntax-OPERATOR">)</span>;
<span class="gutter">  21 </span>    <span class="syntax-OPERATOR">}</span>
<span class="gutter">  22 </span><span class="syntax-OPERATOR">}</span>
</span></pre>
<p>E abaixo temos dois testes que utilizam o novo <em>matcher</em> <code>AreEvenNumbers</code>:</p>
<pre class="gutterH"><span class="syntax0"><span class="gutter">   1 </span><span class="syntax-KEYWORD2">import</span> <span class="syntax-KEYWORD1">static</span> org.hamcrest.CoreMatchers.is;
<span class="gutter">   2 </span><span class="syntax-KEYWORD2">import</span> <span class="syntax-KEYWORD1">static</span> org.junit.Assert.assertThat;
<span class="gutter">   3 </span><span class="syntax-KEYWORD2">import</span> <span class="syntax-KEYWORD1">static</span> br.com.rafael.hamcrest.AreEvenNumbers.evenNumbers;
<span class="gutter">   4 </span>
<span class="gutterH">   5 </span><span class="syntax-KEYWORD4">@</span><span class="syntax-KEYWORD4">Test</span>
<span class="gutter">   6 </span><span class="syntax-KEYWORD1">public</span> <span class="syntax-KEYWORD3">void</span> <span class="syntax-FUNCTION">shouldHaveOnlyEvenNumbers</span><span class="syntax-OPERATOR">(</span><span class="syntax-OPERATOR">)</span>
<span class="gutter">   7 </span><span class="syntax-OPERATOR">{</span>
<span class="gutter">   8 </span>    List<span class="syntax-OPERATOR">&lt;</span>Integer<span class="syntax-OPERATOR">&gt;</span> numbers <span class="syntax-OPERATOR">=</span> Arrays.<span class="syntax-FUNCTION">asList</span><span class="syntax-OPERATOR">(</span> <span class="syntax-DIGIT">2</span>, <span class="syntax-DIGIT">4</span>, <span class="syntax-DIGIT">6</span>, <span class="syntax-DIGIT">8</span>, <span class="syntax-DIGIT">10</span> <span class="syntax-OPERATOR">)</span>;
<span class="gutter">   9 </span>    <span class="syntax-FUNCTION">assertThat</span><span class="syntax-OPERATOR">(</span> numbers, <span class="syntax-FUNCTION">is</span><span class="syntax-OPERATOR">(</span> <span class="syntax-FUNCTION">evenNumbers</span><span class="syntax-OPERATOR">(</span><span class="syntax-OPERATOR">)</span> <span class="syntax-OPERATOR">)</span> <span class="syntax-OPERATOR">)</span>;
<span class="gutterH">  10 </span><span class="syntax-OPERATOR">}</span>
<span class="gutter">  11 </span>
<span class="gutter">  12 </span><span class="syntax-KEYWORD4">@</span><span class="syntax-KEYWORD4">Test</span>
<span class="gutter">  13 </span><span class="syntax-KEYWORD1">public</span> <span class="syntax-KEYWORD3">void</span> <span class="syntax-FUNCTION">shouldNotHaveOddNumbers</span><span class="syntax-OPERATOR">(</span><span class="syntax-OPERATOR">)</span>
<span class="gutter">  14 </span><span class="syntax-OPERATOR">{</span>
<span class="gutterH">  15 </span>    List<span class="syntax-OPERATOR">&lt;</span>Integer<span class="syntax-OPERATOR">&gt;</span> numbers <span class="syntax-OPERATOR">=</span> Arrays.<span class="syntax-FUNCTION">asList</span><span class="syntax-OPERATOR">(</span> <span class="syntax-DIGIT">1</span>, <span class="syntax-DIGIT">2</span>, <span class="syntax-DIGIT">4</span>, <span class="syntax-DIGIT">6</span>, <span class="syntax-DIGIT">8</span>, <span class="syntax-DIGIT">10</span> <span class="syntax-OPERATOR">)</span>;
<span class="gutter">  16 </span>    <span class="syntax-FUNCTION">assertThat</span><span class="syntax-OPERATOR">(</span> numbers, <span class="syntax-FUNCTION">not</span><span class="syntax-OPERATOR">(</span> <span class="syntax-FUNCTION">evenNumbers</span><span class="syntax-OPERATOR">(</span><span class="syntax-OPERATOR">)</span> <span class="syntax-OPERATOR">)</span> <span class="syntax-OPERATOR">)</span>;
<span class="gutter">  17 </span><span class="syntax-OPERATOR">}</span>
</span></pre>
<p>Estes dois testes utilizam o método estático <code>evenNumbers</code> que fabrica os <em>matchers</em> no código de teste. Note o uso do <em>matcher</em> <code>not</code> no teste  <code>shouldNotHaveOddNumbers</code> para garantir que números ímpares não estão presentes na lista. Todos os testes usam a funcionalidade de <a href="http://java.sun.com/j2se/1.5.0/docs/guide/language/static-import.html">import estático</a>, que torna o teste mais limpo e claro sem o nome da classe para invocar o método.</p>
<p>Ainda não tive a oportunidade de testar os <em>matchers</em> Beans, Collections e Number nos testes unitários. Eu acho que eles deixam os testes mais claros e mais fáceis de mudar. E você? Já utilizou o projeto <a href="http://junit.sourceforge.net/doc/ReleaseNotes4.4.html">Hamcrest</a>? Se você tem mais exemplos, poste-os aqui!</p>
Compartilhe:<a rel="nofollow" target="_blank"  href="http://twitter.com/home?status=Integrando%20JUnit%20e%20Hamcrest%20-%20http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F04%2F22%2Fintegrando-hamcrest-e-junit%2F" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/twitter.png" class="sociable-img sociable-hovers" title="Twitter" alt="Twitter" /></a><a rel="nofollow" target="_blank"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F04%2F22%2Fintegrando-hamcrest-e-junit%2F&amp;title=Integrando%20JUnit%20e%20Hamcrest&amp;bodytext=H%C3%A1%20uns%20tempos%20atr%C3%A1s%20comecei%20a%20testar%20o%20projeto%20%20Hamcrest%20junto%20com%20o%20framework%20JUnit%20para%20criar%20testes%20unit%C3%A1rios%20mais%20leg%C3%ADveis.%0D%0A%0D%0AO%20projeto%20Hamcrest%20foi%20criado%20para%20melhorar%20a%20legibilidade%20do%20c%C3%B3digo%20de%20testes.%20%C3%89%20um%20framework%20que%20facilita%20a%20cri" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/digg.png" class="sociable-img sociable-hovers" title="Digg" alt="Digg" /></a><a rel="nofollow" target="_blank"  href="http://delicious.com/post?url=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F04%2F22%2Fintegrando-hamcrest-e-junit%2F&amp;title=Integrando%20JUnit%20e%20Hamcrest&amp;notes=H%C3%A1%20uns%20tempos%20atr%C3%A1s%20comecei%20a%20testar%20o%20projeto%20%20Hamcrest%20junto%20com%20o%20framework%20JUnit%20para%20criar%20testes%20unit%C3%A1rios%20mais%20leg%C3%ADveis.%0D%0A%0D%0AO%20projeto%20Hamcrest%20foi%20criado%20para%20melhorar%20a%20legibilidade%20do%20c%C3%B3digo%20de%20testes.%20%C3%89%20um%20framework%20que%20facilita%20a%20cri" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/delicious.png" class="sociable-img sociable-hovers" title="del.icio.us" alt="del.icio.us" /></a><a rel="nofollow" target="_blank"  href="http://reddit.com/submit?url=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F04%2F22%2Fintegrando-hamcrest-e-junit%2F&amp;title=Integrando%20JUnit%20e%20Hamcrest" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/reddit.png" class="sociable-img sociable-hovers" title="Reddit" alt="Reddit" /></a><a rel="nofollow" target="_blank"  href="http://www.google.com/reader/link?url=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F04%2F22%2Fintegrando-hamcrest-e-junit%2F&amp;title=Integrando%20JUnit%20e%20Hamcrest&amp;srcURL=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F04%2F22%2Fintegrando-hamcrest-e-junit%2F&amp;srcTitle=Rafael+Naufal%26%23039%3Bs+blog+Java%2C+Scrum%2C+XP%2C+TDD...+Desenvolvimento+de+software+em+geral" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/googlebuzz.png" class="sociable-img sociable-hovers" title="Google Buzz" alt="Google Buzz" /></a><a rel="nofollow" target="_blank"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F04%2F22%2Fintegrando-hamcrest-e-junit%2F&amp;title=Integrando%20JUnit%20e%20Hamcrest&amp;annotation=H%C3%A1%20uns%20tempos%20atr%C3%A1s%20comecei%20a%20testar%20o%20projeto%20%20Hamcrest%20junto%20com%20o%20framework%20JUnit%20para%20criar%20testes%20unit%C3%A1rios%20mais%20leg%C3%ADveis.%0D%0A%0D%0AO%20projeto%20Hamcrest%20foi%20criado%20para%20melhorar%20a%20legibilidade%20do%20c%C3%B3digo%20de%20testes.%20%C3%89%20um%20framework%20que%20facilita%20a%20cri" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/googlebookmark.png" class="sociable-img sociable-hovers" title="Google Bookmarks" alt="Google Bookmarks" /></a><a rel="nofollow" target="_blank"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F04%2F22%2Fintegrando-hamcrest-e-junit%2F&amp;t=Integrando%20JUnit%20e%20Hamcrest" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/facebook.png" class="sociable-img sociable-hovers" title="Facebook" alt="Facebook" /></a><a rel="nofollow" target="_blank"  href="http://technorati.com/faves?add=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F04%2F22%2Fintegrando-hamcrest-e-junit%2F" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/technorati.png" class="sociable-img sociable-hovers" title="Technorati" alt="Technorati" /></a><a rel="nofollow" target="_blank"  href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F04%2F22%2Fintegrando-hamcrest-e-junit%2F&amp;title=Integrando%20JUnit%20e%20Hamcrest" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/stumbleupon.png" class="sociable-img sociable-hovers" title="StumbleUpon" alt="StumbleUpon" /></a><a rel="nofollow" target="_blank"  href="http://www.friendfeed.com/share?title=Integrando%20JUnit%20e%20Hamcrest&amp;link=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F04%2F22%2Fintegrando-hamcrest-e-junit%2F" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/friendfeed.png" class="sociable-img sociable-hovers" title="FriendFeed" alt="FriendFeed" /></a><a rel="nofollow" target="_blank"  href="http://www.myspace.com/Modules/PostTo/Pages/?u=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F04%2F22%2Fintegrando-hamcrest-e-junit%2F&amp;t=Integrando%20JUnit%20e%20Hamcrest" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/myspace.png" class="sociable-img sociable-hovers" title="MySpace" alt="MySpace" /></a><a rel="nofollow" target="_blank"  href="http://slashdot.org/bookmark.pl?title=Integrando%20JUnit%20e%20Hamcrest&amp;url=http%3A%2F%2Frafaelnaufal.com%2Fblogpt%2F2010%2F04%2F22%2Fintegrando-hamcrest-e-junit%2F" ><img src="http://rafaelnaufal.com/blogpt/wp-content/plugins/sociable-30/images/default/16/slashdot.png" class="sociable-img sociable-hovers" title="Slashdot" alt="Slashdot" /></a><br/><br/><img src="http://feeds.feedburner.com/~r/rafaelnaufal-pt-rss/~4/1LKaRlVIjKQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://rafaelnaufal.com/blogpt/2010/04/22/integrando-hamcrest-e-junit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://rafaelnaufal.com/blogpt/2010/04/22/integrando-hamcrest-e-junit/</feedburner:origLink></item>
	</channel>
</rss>

