<?xml version="1.0" encoding="UTF-8"?>
<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/"
	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/"
	>

<channel>
	<title>Mauricio Aniche &#187; Uncategorized</title>
	<atom:link href="http://www.aniche.com.br/category/uncategorized/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.aniche.com.br</link>
	<description>Pensamentos sobre desenvolvimento de software</description>
	<lastBuildDate>Mon, 17 Oct 2011 00:59:31 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Eu faço TDD. Preciso testar?</title>
		<link>http://www.aniche.com.br/2010/06/eu-faco-tdd-preciso-testar/</link>
		<comments>http://www.aniche.com.br/2010/06/eu-faco-tdd-preciso-testar/#comments</comments>
		<pubDate>Thu, 24 Jun 2010 15:00:35 +0000</pubDate>
		<dc:creator>mauricioaniche</dc:creator>
				<category><![CDATA[agile]]></category>
		<category><![CDATA[tdd]]></category>
		<category><![CDATA[teste de software]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[software design]]></category>

		<guid isPermaLink="false">http://www.aniche.com.br/?p=173</guid>
		<description><![CDATA[Claro que sim. TDD é uma atividade de design. O teste de unidade que você escreve serve basicamente para definir suas expectativas em relação ao código que você vai escrever. E, ao fazer isso, você pensa não só no nível da implementação do algoritmo, mas em um nível um pouco mais alto: no nível de <a href='http://www.aniche.com.br/2010/06/eu-faco-tdd-preciso-testar/'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p>Claro que <strong>sim</strong>.</p>
<p>TDD é uma atividade de design. O teste de unidade que você escreve serve basicamente para definir suas expectativas em relação ao código que você vai escrever. E, ao fazer isso, você pensa não só no nível da implementação do algoritmo, mas em um nível um pouco mais alto: no nível de design. TDD permite que você brinque e experimente diferentes possíveis designs, dando feedback rápido sobre o resultado obtido, até que você encontre o design ideal para aquela situação.</p>
<p>Ou seja, quando você faz TDD, você pensa exclusivamente em design e não em testes. É uma prática de suporte para <strong>design</strong> de software.</p>
<p>Mas&#8230; É claro que você precisa testar! Você não apaga os testes que você produziu usando TDD, óbvio. Mas muito provavelmente eles não testam todas as possibilidades possíveis. E é aí que outras técnicas entram em cena, e você pode encontrar muita informação sobre elas em [1][2].</p>
<p>Resumindo, use TDD quando você precisa trabalhar no design de determinada classe ou módulo. Quando você estiver satisfeito com design, é hora de testar! Aí você pode fazer test-first, test-last, ou que você preferir, mas teste de verdade!</p>
<p>[1] The Art of Software Testing &#8211; Myers<br />
[2] Introdução ao Teste de Software &#8211; Maldonado, Delamaro, Jino</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.aniche.com.br%2F2010%2F06%2Feu-faco-tdd-preciso-testar%2F&amp;title=Eu%20fa%C3%A7o%20TDD.%20Preciso%20testar%3F" id="wpa2a_2"><img src="http://www.aniche.com.br/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.aniche.com.br/2010/06/eu-faco-tdd-preciso-testar/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Atualizar-se até que ponto?</title>
		<link>http://www.aniche.com.br/2009/02/atualizar-se-ate-que-ponto/</link>
		<comments>http://www.aniche.com.br/2009/02/atualizar-se-ate-que-ponto/#comments</comments>
		<pubDate>Thu, 19 Feb 2009 20:00:00 +0000</pubDate>
		<dc:creator>mauricioaniche</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[carreira]]></category>
		<category><![CDATA[pensamento agil]]></category>
		<category><![CDATA[programador]]></category>

		<guid isPermaLink="false">/post/2009/02/19/Atualizar-se-ate-que-ponto.aspx</guid>
		<description><![CDATA[Programação é um mundo fantástico&#8230; E mais fantástico ainda é a velocidade com que as novidades surgem e desaparecem&#8230; A pergunta é: até que ponto devemos nos atualizar a cada nova tecnologia que surge? Se pensarmos em plataforma .NET, é impossível lembrar de cabeça todas as novidades apresentadas pela Microsoft nesses últimos tempos: WCF, WPF, <a href='http://www.aniche.com.br/2009/02/atualizar-se-ate-que-ponto/'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p>Programação é um mundo fantástico&#8230; E mais fantástico ainda é a velocidade com que as novidades surgem e desaparecem&#8230; A pergunta é: <em>até que ponto devemos nos atualizar a cada nova tecnologia que surge?</em></p>
<p>Se pensarmos em plataforma .NET, é impossível lembrar de cabeça todas as novidades apresentadas pela Microsoft nesses últimos tempos: <a href="http://msdn.microsoft.com/en-us/netframework/aa663324.aspx" target="_blank">WCF</a>, <a href="http://msdn.microsoft.com/en-us/netframework/aa663326.aspx" target="_blank">WPF</a>, <a href="http://silverlight.net/" target="_blank">Silverlight</a>, <a href="http://msdn.microsoft.com/en-us/library/aa697427(VS.80).aspx" target="_blank">Entity Framework</a>, <a href="http://msdn.microsoft.com/en-us/vcsharp/aa904594.aspx" target="_blank">LINQ</a>, <a href="http://www.asp.net/mvc/" target="_blank">ASP.NET MVC</a>, etc, etc&#8230; É simplesmente impossível manter-se atualizado (com um bom nível de conhecimento, obviamente) em todas elas!</p>
<p>Pergunto novamente: Mas precisamos mesmo nos atualizar? <em>Não, não precisamos</em>. O principal objetivo de um desenvolvedor de software é <strong>entregar software para o cliente</strong>. Se hoje você desenvolve bons softwares, que agregam valor para seus clientes, e não faz uso das últimas novidades, não se culpe, você não está errado! Você não precisa re-programar todo seu sistema só porque dizem que o novo framework XPTO é bom! Programamos não para satisfazer nossos egos (afinal, quem não gosta de estar sempre atualizados, utilizando das melhores e mais modernas práticas?), mas sim para atender a necessidade do cliente. Se você já atende o seu cliente, não tem porquê mudar!</p>
<p>É a velha história do projeto perfeito e do projeto bom, onde todo projeto perfeito quer ser um projeto bom! O projeto perfeito nunca fica pronto, pois não dá tempo, seus desenvolvedores sempre querem o manter atualizado com as últimas novidades! Já o projeto bom, como o próprio nome diz, não é perfeito, não utiliza das últimas tecnologias de mercado, mas funciona, e o melhor, atende ao cliente!</p>
<p>Não estou dizendo que você não deva se atualizar. Claro que deve! Mas tudo isso deve ser feito de maneira cautelosa, estudada, e o mais importante: <strong>seu cliente não deve pagar por isso! </strong>Se algum framework promete ajudar no desenvolvimento e poupar futuras horas de desenvolvimento, faça testes, brinque, use e abuse dele, até ter certeza de que ele vai realmente lhe agregar valor, e que ele não vai ser um gargalo na hora do desenvolvimento.</p>
<p>Uma coisa que tem me chamado a atenção é o foco que as pessoas tem dado ao novo ASP.NET MVC, da Microsoft. As pessoas tem pulado de cabeça nessa novidade, sem nem pensar no impacto que isso vai ter sobre a equipe de desenvolvedores e sobre a qualidade do software que será desenvolvido. Será que os WebForms são tão ruins assim que merecem serem trocados de forma praticamente instantânea? Caso você ache que vale a pena trocar toda a experiência que sua equipe e investir horas de estudo nesse novo framework, pois o MVC vai lhe ajudar a escrever melhores softwares, siga em frente; caso contrário, não se sinta mal, continue usando WebForms e atendendo seu cliente da melhor maneira possível!</p>
<p>Não se esqueça da frase (da qual não me recordo o autor): <strong>Bons desenvolvedores DESENVOLVEM software. Ótimos desenvolvedores ENTREGAM software</strong>.</p>
<p><em>(Uma <a href="http://groups.google.com/group/dotnetarchitects/browse_thread/thread/23e2b5b41a5a2b41/dd95f1d53f1ac989?lnk=gst&amp;q=cenoura#" target="_blank">discussão</a> do grupo <a href="http://www.dotnetarchitects.net/" target="_blank">.NET Architects</a> me levou a escrever esse post)</em></p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.aniche.com.br%2F2009%2F02%2Fatualizar-se-ate-que-ponto%2F&amp;title=Atualizar-se%20at%C3%A9%20que%20ponto%3F" id="wpa2a_4"><img src="http://www.aniche.com.br/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.aniche.com.br/2009/02/atualizar-se-ate-que-ponto/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>PRE &#8211; Princípio da Responsabilidade Exclusiva</title>
		<link>http://www.aniche.com.br/2009/01/pre-principio-da-responsabilidade-exclusiva/</link>
		<comments>http://www.aniche.com.br/2009/01/pre-principio-da-responsabilidade-exclusiva/#comments</comments>
		<pubDate>Wed, 28 Jan 2009 22:57:00 +0000</pubDate>
		<dc:creator>mauricioaniche</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[pre]]></category>
		<category><![CDATA[srp]]></category>

		<guid isPermaLink="false">/post/2009/01/28/PRE-Principio-da-Responsabilidade-Exclusiva.aspx</guid>
		<description><![CDATA[Segundo o livro Use a Cabeça: Desenvolvimento de Softwares, a definição de PRE é: Cada objeto de seu sistema deve ter uma responsabilidade exclusiva e todos os serviços do objeto devem estar orientados à execução dessa responsabilidade. Em outras palavras, uma classe deve ser responsável por uma determinada função, e só ela pode exercê-la. Uma <a href='http://www.aniche.com.br/2009/01/pre-principio-da-responsabilidade-exclusiva/'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p align="justify">Segundo o livro <em>Use a Cabeça: Desenvolvimento de Softwares</em>, a definição de PRE é: <em>Cada objeto de seu sistema deve ter uma <strong>responsabilidade exclusiva </strong>e todos os serviços do objeto devem estar orientados à execução dessa responsabilidade.</em> Em outras palavras, uma classe deve ser responsável por uma determinada função, e só ela pode exercê-la.</p>
<p align="justify">Uma classe <em>Carro</em>, por exemplo, deve ser unica e exclusivamente responsável por realizar funções de um carro (como medir óleo, acender farol, etc). A classe Carro não deve ser responsável por saber se lavar (essa é uma responsabilidade que poderia ser entregue a uma classe <em>LavaRapido</em>, por exemplo).</p>
<p align="justify">Conversando hoje com o <a href="http://www.muriloamendola.com.br" target="_blank">Murilo Amêndola</a>, discutimos sobre como saber quais as responsabilidades de uma classe. Concordamos que não é uma tarefa trivial e que depende de muita experiência para que todas suas classes tenham um alto nível de coesão. Lendo hoje um trecho do livro citado acima, encontrei um algoritmo muito interessante para saber se determinada responsabilidade deve ou não pertencer a determinada classe. Vou reproduzí-lo aqui:</p>
<div>
<ol>
<li>Escreva, em uma folha de papel, várias linhascomo essa: <strong>O [espaço] [espaço] sozinho.</strong> Escreva 1 linha dessa para cada método da classe que você está testando quanto ao PRE.</li>
<li>No primeiro espaço em branco de cada linha, preencha o nome da classe. No segundo espaço em branco, anote um dos métodos da classe. Faça isso para todos os métodos.</li>
<li>Leia cada linha em voz alta. Você pode até adicionar uma letra ou palavra para que a leitura fique adequada. Se a frase que você disse fez algum sentido, então esse método realmente pertence a essa classe. Se não fizer nenhum sentido, então provavalmente esse método não pertence a essa classe.</li>
</ol>
</div>
<p align="justify">Voltando ao exemplo da classe Carro:</p>
<div>
<ul>
<li>O <strong>carro </strong><span style="text-decoration: underline;">se liga</span> sozinho. (CERTO)</li>
<li>O <strong>carro </strong><span style="text-decoration: underline;">se desliga</span> sozinho. (CERTO)</li>
<li>O <strong>carro </strong><span style="text-decoration: underline;">trocaPneus</span> sozinho. (ERRADO)</li>
<li>O <strong>carro </strong><span style="text-decoration: underline;">dirige</span> sozinho. (ERRADO)</li>
<li>O <strong>carro </strong><span style="text-decoration: underline;">se lava</span> sozinho. (ERRADO)</li>
<li>O <strong>carro </strong><span style="text-decoration: underline;">medeOleo</span> sozinho. (CERTO)</li>
</ul>
</div>
<p align="justify">Repare que faz todo sentido o carro medir óleo sozinho, enquanto não faz sentido nenhum o carro se dirigir sozinho (esse método deveria estar em uma classe Motorista), ou se lavar sozinho (deveria ser responsabilidade da classe LavaRapido)!</p>
<p align="justify">O método liga e desliga não fazem taaanto sentido (afinal, um carro não se liga sozinho), mas nesse caso, não vejo outra alternativa (é o carro que sabe como se ligar!). Isso mostra que a regra acima é apenas uma diretriz, e por isso você deve usar de bom senso e de sua experiência.</p>
<p align="justify">O interessante é que você pode adaptar essa regra até para métodos que recebem parâmetros. Se você tiver um método troca(peça), você escreve a seguinte sentença: O <strong>carro </strong><span style="text-decoration: underline;">troca [uma]  peça</span> sozinho. No caso, também não faz muito sentido, você poderia ter uma classe Mecânico, com o método troca(peça, carro).</p>
<p align="justify">Enfim, é uma análise interesse, não acham?</p>
<p align="justify"><em>(Exemplo retirado do livro Use a Cabeça: Desenvolvimento de Softwares, capítulo 5.</em>)</p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fwww.aniche.com.br%2F2009%2F01%2Fpre-principio-da-responsabilidade-exclusiva%2F&amp;title=PRE%20%26%238211%3B%20Princ%C3%ADpio%20da%20Responsabilidade%20Exclusiva" id="wpa2a_6"><img src="http://www.aniche.com.br/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.aniche.com.br/2009/01/pre-principio-da-responsabilidade-exclusiva/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

