<?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>AgileZ &#187; Práticas</title>
	<atom:link href="http://www.brasiltech.net/agilez/tag/praticas/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.brasiltech.net/agilez</link>
	<description>Metodologias e técnicas aplicadas a desenvolvimento e gerenciamento</description>
	<lastBuildDate>Wed, 29 Dec 2010 23:40:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>Vamos simplificar?</title>
		<link>http://www.brasiltech.net/agilez/2010/12/29/vamos-simplificar/</link>
		<comments>http://www.brasiltech.net/agilez/2010/12/29/vamos-simplificar/#comments</comments>
		<pubDate>Wed, 29 Dec 2010 23:36:00 +0000</pubDate>
		<dc:creator>Douglas Cunha</dc:creator>
				<category><![CDATA[produtividade]]></category>
		<category><![CDATA[Práticas]]></category>

		<guid isPermaLink="false">http://www.brasiltech.net/agilez/?p=157</guid>
		<description><![CDATA[Fim de ano sempre é sinônimo de reflexão, seja no aspecto pessoal ou profissional. Paramos para refletir sobre o que funcionou e o que não funcionou no ano que termina, fazendo novos planos para o ano que chega. O que podemos melhorar em nossa vida pessoal? E na profissional? Seja qual for sua profissão, uma [...]]]></description>
			<content:encoded><![CDATA[<p align="justify"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 10px 0px; display: inline; border-top: 0px; border-right: 0px" title="mafalda" border="0" alt="mafalda" align="left" src="http://www.brasiltech.net/agilez/wp-content/uploads/2010/12/mafalda.jpg" width="211" height="240" /> </p>
<p align="justify">Fim de ano sempre é sinônimo de reflexão, seja no aspecto pessoal ou profissional. Paramos para refletir sobre o que funcionou e o que não funcionou no ano que termina, fazendo novos planos para o ano que chega. O que podemos melhorar em nossa vida pessoal? E na profissional? Seja qual for sua profissão, uma coisa é sempre certa: seu objetivo é solucionar problemas. O marceneiro resolve o problema da dona de casa ao construir uma nova mesa, o dentista resolve algum problema de carie, o motorista um problema de trânsito e o analista de sistemas um problema de software. Cada um em sua especialidade, sempre procurando a melhor solução.    <br />O famoso físico alemão Albert Einstein dedicou a sua vida a solucionar o maior problema da física até hoje: encontrar uma teoria que explicasse, de forma única, o funcionamento de tudo o que existe no universo. Ele não teve sucesso. Hoje existem algumas teorias que tentam resolver o mesmo problema, entretanto não são soluções <strong>simples</strong>. Destaquei a palavra <strong>simples</strong> por um motivo. Einstein acreditava que toda solução deveria ser simples para ser correta. Até os últimos instantes de sua vida ele perseguiu esse ideal. Eu acredito que ele estava certo. Durante o dia nos deparamos com inúmeros desafios, mas será que aplicamos as soluções mais simples? Leia a pequena estória abaixo:</p>
<p> <span id="more-157"></span>
<p align="justify">Recentemente recebi um email com um video onde um palestrante contava um caso que ocorreu em uma grande empresa. Era uma fabricante de pastas de dentes, e eles estavam enfrentando alguns processos de clientes que alegavam ter comprado caixas de pastas de dentes vazias. Havia uma falha no processo que fazia com que aleatoriamente algumas caixas não recebessem o tubo de creme dental. Para resolver o problema, os diretores da empresa contrataram uma equipe de engenheiros. Após muitos estudos e testes, os engenheiros criaram um complexo mecanismo composto de uma balança super sensível e um braço mecânico que, ao constatar que a caixa que percorria a esteira estivesse com um peso menor do que o normal, parava a linha de produção e removia a caixa vazia.    <br />O sistema foi colocado em produção e em pouco tempo as reclamações dos clientes pararam. Após alguns meses um dos donos da fábrica foi até a linha de produção averiguar como estavam as coisas, e lá ocorreu o seguinte dialogo com um dos operadores:    <br />- O que vocês acharam do novo sistema?     <br />- Na verdade nós não gostamos muito, porque toda hora a esteira ficava parando pro braço mecânico retirar a caixa. Atrapalhava muito o nosso trabalho e acabamos por deixa-lo desligado &#8211; disse o operador.    <br />- Ué, mas ele ficou desligado esse tempo todo? &#8211; disse espantado o empresário    <br />- Ficou sim senhor.    <br />- Mas como, se as reclamações dos clientes pararam?    <br />- Na verdade nós resolvemos o problema do nosso jeito. Fizemos uma vaquinha e compramos um ventilador grande pra colocar na altura da esteira. Quando uma caixa vazia passava o vento era mais forte e a jogava pra fora da esteira.     <br />(empresário atônito e mudo)    <br />Quantas vezes não agimos como os caríssimos engenheiros e criamos braços mecânicos para resolver os problemas encontrados diariamente? Será que, como Einstein acreditava, as melhores soluções não são as mais simples? Lembre-se que não basta ter o conhecimento, temos que aplicá-lo com sabedoria, na dose certa. Se para fazer um sistema de venda você teve que aplicar todos os padrões de projeto (design pattern) que conhece, provavelmente não foi a solução mais simples. O algoritmo super complexo que você criou pode ser a prova de erros e resolver todos os problemas que você pensou que fossem ocorrer, em um futuro desconhecido, mas será que foi a melhor escolha agora? Muitas vezes uma solução complexa que resolve todos os problemas de uma vez é mais custosa e trabalhosa de ser mantida do que várias soluções simples, isso porque simples + simples + simples é sempre igual a simples, enquanto o complexo tende a ficar cada vez mais complexo. Em desenvolvimento de software essas situações são freqüentes e pretendo abordar alguns casos em breve. Até lá e um ótimo ano novo.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brasiltech.net/agilez/2010/12/29/vamos-simplificar/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Gerenciando seu c&#243;digo-fonte</title>
		<link>http://www.brasiltech.net/agilez/2010/02/09/gerenciando-seu-cdigo-fonte/</link>
		<comments>http://www.brasiltech.net/agilez/2010/02/09/gerenciando-seu-cdigo-fonte/#comments</comments>
		<pubDate>Tue, 09 Feb 2010 19:53:42 +0000</pubDate>
		<dc:creator>Pitty</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[codigo-fonte]]></category>
		<category><![CDATA[cvs]]></category>
		<category><![CDATA[Práticas]]></category>

		<guid isPermaLink="false">http://www.brasiltech.net/agilez/2010/02/09/gerenciando-seu-cdigo-fonte/</guid>
		<description><![CDATA[Um código fonte ‘sadio’ é uma das chaves para o sucesso de um projeto, e um CVS (control version system) é uma ferramenta fundamental para manter a saúde do seu código fonte. No entanto, somente uma boa ferramenta não garante um bom controle de versão. Ela deve ser amparada por boas práticas que normatizam sua [...]]]></description>
			<content:encoded><![CDATA[<p>Um código fonte ‘sadio’ é uma das chaves para o sucesso de um projeto, e um CVS (control version system) é uma ferramenta fundamental para manter a saúde do seu código fonte. No entanto, somente uma boa ferramenta não garante um bom controle de versão. Ela deve ser amparada por boas práticas que normatizam sua utilização. Para analisar se você utiliza corretamente seu controle de versão, verifique se pelo menos as seguintes perguntas podem ser rapidamente atendidas:<a href="http://exocortex.files.wordpress.com/2010/02/codigofonte.jpg"><img style="border-right-width: 0px;border-top-width: 0px;border-bottom-width: 0px;margin-left: 0px;border-left-width: 0px;margin-right: 0px" border="0" alt="codigo-fonte" align="right" src="http://exocortex.files.wordpress.com/2010/02/codigofonte_thumb.jpg" width="242" height="190" /></a></p>
<ul>
<li>
<p>Como era o método XYZ da classe FooBar na versão 2.0.3.12 do projeto?</p>
</li>
<li>
<p>Quais foram as alterações feitas para incluir suporte à NF-e?</p>
</li>
<li>
<p>Quando esta linha de código foi adicionada ao método XYZ?</p>
</li>
<li>
<p>Consigo compilar e executar o sistema na versão 2.0.2.15 para reproduzir e consertar o bug de um cliente?</p>
</li>
</ul>
<p>Se o seu controle de versão não consegue responder a estas perguntas, então está na hora de rever as práticas do seu time. Uma ferramenta de controle de versão não deve servir somente como um backup do código fonte, onde, ao final do dia, o desenvolvedor deposita seu trabalho inacabado. Ela deve ser um santuário, o repositório sagrado que exige do desenvolvedor todo respeito e cuidado. Afinal, o artefato mais valioso de um projeto, o código fonte, está guardado ali. Portanto, não basta instalar um controle de versão e sair usando. O time deve rever seus conceitos e absorver as mudanças necessárias, que podem ser dolorosas. No entanto, após um tempo, o time começa a colher os frutos do terreno bem preparado.</p>
<p>Há pouco tempo li um artigo muito bom do <a href="http://eduardomiranda.net/blogs/dotnet" target="_blank">Eduardo Miranda</a> sobre gerência de versionamento, onde ele cita algumas práticas boas e ruins. Vamos a elas:</p>
</p>
<p> <span id="more-131"></span>
</p>
<h6></h6>
<h4><strong>Boas práticas</strong></h4>
<ol>
<li>
<p><strong>O código-fonte no servidor deve estar sempre pronto para compilação. </strong>Ou seja, a qualquer momento do dia deve ser possível buscar a cópia da última versão disponível do servidor e compilar uma nova versão da aplicação.</p>
</li>
<li>
<p><strong>Toda <em>changelist </em>(conjunto de alterações que foram submetidas juntas) submetida visa <span style="text-decoration: underline">melhorar</span> o produto, <span style="text-decoration: underline">nunca piorar</span>.</strong> O código fonte é sagrado e deve ser total e completamente respeitado. Uma changelist corrige um defeito, adiciona uma funcionalidade, refatora um trecho de código. O desenvolvedor não pode submeter changelists que quebrem o build, seja pela adição de erros de compilação ou pela quebra dos testes automatizados. O time com o qual trabalho tem uma prática problemática que é fazer chekins parciais de código para compartilhar com outro desenvolvedor as alterações feitas. Não tem problema, desde que feito em um ramo de versão temporário especialmente criado para isso (também conhecido como <em>branch)</em>. Assim, o ramo principal (o chamado <em>trunk) </em>não fica ‘contaminado’ com códigos incompletos. Somente quando toda codificação estiver terminada e os testes unitários completos, podemos fazer um merge do ramo temporário com o ramo principal. Claro que o trabalho é maior devido ao merge, mas a maioria das atuais ferramentas de CVS oferecem um bom suporte para isso.</p>
</li>
<li>
<p><strong>Submeta suas alterações o mais rápido possível e com freqüência. </strong>Quanto mais tempo um arquivo fica em alteração mais difícil se torna seu merge e mais aumenta o risco de quebra do build. Divida suas alterações em pequenos pacotes compiláveis e testáveis e submeta sempre.</p>
</li>
<li>
<p><strong>Oh-oh! Atenção, build quebrado! </strong>Se o build está quebrado não submeta alterações nem sincronize sua cópia de trabalho. Um <em>build break</em> é um estado que deve ser tratado com a máxima prioridade. Neste estado não é possível garantir que a sua alteração compila e não quebra testes, portanto não é possível garantir sua qualidade. Por outro lado, sincronizar sua cópia de trabalho irá corrompê-la, o que te impedirá de compilar e testar as funções localmente.</p>
</li>
<li>
<p><strong>Controle tudo que é necessário para compilar e instalar a aplicação.</strong> Código-fonte não é a única matéria prima para compilação e instalação dos aplicativos. Sua aplicação pode depender de bibliotecas de terceiros. Neste caso, é necessário armazenar no repositório uma cópia do binário na versão utilizada pela aplicação. Em caso de atualização, a nova versão deve ser submetida junto com toda a alteração no código-fonte da sua aplicação necessária para suportar a versão.</p>
</li>
<li>
<p><strong>Estabeleça critérios de qualidade. </strong>Código sem erros de compilação é o mínimo aceitável. A partir do momento que o objetivo passa a ser melhorar a aplicação, novos parâmetros de qualidade devem ser adotados para aprovação de um check in: código sem <em>warnings</em> e <em>hints, </em>testes unitários executados, métricas de complexidade mantidas, etc.</p>
</li>
</ol>
<h4>Práticas ruins</h4>
<p>Qualquer prática que vá de encontro ao objetivo de ter no repositório uma versão compilável, testada e sempre melhor da aplicação, é uma prática ruim e deve ser evitada. Mas algumas são típicas e merecem destaque:</p>
<ul>
<li>
<p><strong>Não submeta alterações em cima da hora.</strong> Sexta-feira, 18h, você louco para ir embora e não estará no sábado de amanhã de prontidão para resolver algum problema.</p>
</li>
<li>
<p><strong>Não segure as alterações em sua cópia de trabalho por muito tempo. </strong>Código-fonte fora de repositório estraga como comida fora da geladeira. Tentar submeter uma alteração feita há 2 meses no repositório gera um trabalho enorme e um elevado risco de quebra de build.</p>
</li>
<li>
<p><strong>Nunca ignore a política de check in. </strong>Mesmo alterações simples podem quebrar um build. </p>
</li>
</ul>
<h4>Finalizando</h4>
<p>O controle de versão é provavelmente a ferramenta mais útil e fundamental no desenvolvimento de software e uma das mais utilizadas no dia-a-dia do desenvolvedor. É necessário sempre se preocupar com a facilidade de uso, para que ela não atrapalhe a produtividade nem caia em desuso, sem, contudo, abrir mão dos seus objetivos primordiais.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brasiltech.net/agilez/2010/02/09/gerenciando-seu-cdigo-fonte/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

