<?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</title>
	<atom:link href="http://www.brasiltech.net/agilez/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>Tue, 09 Feb 2010 19:53:42 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=abc</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<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>0</slash:comments>
		</item>
		<item>
		<title>Voc&#234; &#233; uma pessoa produtiva? &#8211; Agile Focus, novo aplicativo para controle de foco</title>
		<link>http://www.brasiltech.net/agilez/2010/01/15/agile-focus-aplicativo-para-controle-de-foco-tecnica-pomodoro/</link>
		<comments>http://www.brasiltech.net/agilez/2010/01/15/agile-focus-aplicativo-para-controle-de-foco-tecnica-pomodoro/#comments</comments>
		<pubDate>Fri, 15 Jan 2010 23:22:36 +0000</pubDate>
		<dc:creator>Douglas Cunha</dc:creator>
				<category><![CDATA[Metodologias]]></category>
		<category><![CDATA[downloads]]></category>
		<category><![CDATA[agile focus]]></category>
		<category><![CDATA[download]]></category>

		<guid isPermaLink="false">http://www.brasiltech.net/agilez/2010/01/15/agile-focus-aplicativo-para-controle-de-foco-tecnica-pomodoro/</guid>
		<description><![CDATA[
Você se considera uma pessoa produtiva no trabalho ou em sua vida pessoal? Quanto tempo consegue se concentrar em uma determinada tarefa antes de ser interrompido ou mudar o foco? A produtividade de uma pessoa está diretamente ligada a capacidade que ela tem de manter o foco. Quanto mais focada for, melhor e mais rápida [...]]]></description>
			<content:encoded><![CDATA[<p><img style="margin: 0px 20px 25px 0px; display: inline; border: 0px;" title="pomodoro-timer" src="http://www.brasiltech.net/agilez/wp-content/uploads/2010/01/pomodorotimer.png" border="0" alt="pomodoro-timer" width="225" height="225" align="left" /></p>
<p>Você se considera uma pessoa produtiva no trabalho ou em sua vida pessoal? Quanto tempo consegue se concentrar em uma determinada tarefa antes de ser interrompido ou mudar o foco? A produtividade de uma pessoa está diretamente ligada a capacidade que ela tem de manter o foco. Quanto mais focada for, melhor e mais rápida vai atingir o objetivo, seja no campo profissional ou pessoal.</p>
<p>Porém, nem sempre ‘mais’ significa ‘melhor’. O cérebro humano tem um limite, e não consegue produzir com qualidade satisfatória após um determinado tempo de esforço contínuo. Cada pessoa tem um ritmo e os intervalos regulares são necessários, seja pra ver emails, conversar, fazer uma ligação ou tomar um café.<span id="more-118"></span></p>
<p>Foi um italiano, <a rel="nofollow" href="http://www.pomodorotechnique.com/" target="_blank">Francesco Cirillo</a>, que, em meados de 1980, criou uma técnica chamada Pomodoro, inicialmente como forma de desafio aos colegas de faculdade: “Você pode estudar – verdadeiramente – por 10 minutos?”. O nome diferente veio da forma usada para medir o tempo: um timer de cozinha que tinha o formato de um pomodoro (um tipo de tomate em italiano).</p>
<p>A técnica foi evoluindo, e hoje ficou assim:</p>
<ul>
<li>Só se trabalha em uma tarefa por vez, e por 25 minutos (um pomodoro);</li>
<li>A cada pomodoro, descansa-se de 3 a 5 minutos;</li>
<li>A cada 4 pomodoros, o descanso é maior, 15 minutos (o tamanho pode variar e chegar até 30 minutos);</li>
<li>Se por algum motivo o pomodoro for interrompido, a contagem deve ser reiniciada;</li>
<li>Procure pensar em pomodoros ao invés de horas (‘vou levar 4 pomodoros pra concluir esta tarefa x’).</li>
</ul>
<p>Com o objetivo de controlar seus pomodoros enquanto trabalha no computador, foi criado o Agile Focus, um aplicativo windows escrito em C#, que pode ser configurado para funcionar de acordo com o seu ritmo, e, a cada fim de pomodoro ou intervalo, pode mostrar um aviso na tela, tocar um som no formato wav, ou mostrar um aviso (balloon hint) ao lado do relógio. É possível também configurar até quatro paradas agendadas, como almoço, janta, café e etc.</p>
<p>Estou disponibilizando para download gratuíto a primeira versão. Gostaria que contribuissem com sugestões e problemas encontrados.</p>
<p>Requer o Microsoft.net Framework 3.5 para funcionar.</p>
<p><img class="alignnone" title="Agile Focus" src="http://www.brasiltech.net/agilez/wp-includes/images/aplicativos/agilefocus.JPG" alt="" width="436" height="514" /></p>
<p>Baixe agora o Agile Focus &#8211; <a class="downloadlink" href="http://www.brasiltech.net/agilez/wp-content/plugins/download-monitor/download.php?id=1" title="Version1.0.0.3 downloaded 21 times" >Agile Focus (21)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.brasiltech.net/agilez/2010/01/15/agile-focus-aplicativo-para-controle-de-foco-tecnica-pomodoro/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Os 12 mandamentos do Agile</title>
		<link>http://www.brasiltech.net/agilez/2009/12/22/os-12-mandamentos-do-agile/</link>
		<comments>http://www.brasiltech.net/agilez/2009/12/22/os-12-mandamentos-do-agile/#comments</comments>
		<pubDate>Wed, 23 Dec 2009 01:18:18 +0000</pubDate>
		<dc:creator>Pitty</dc:creator>
				<category><![CDATA[Metodologias]]></category>

		<guid isPermaLink="false">http://www.brasiltech.net/agilez/2009/12/22/os-12-mandamentos-do-agile/</guid>
		<description><![CDATA[A fim de ajudar as pessoas a entenderem melhor o desenvolvimento ágil de software, em 2001 os membros da Agile Alliance refinaram o enunciado do Manifesto Ágil, criando doze princípios que as metodologias ágeis devem seguir. Estes princípios são os seguintes:

Nossa maior prioridade é satisfazer o cliente através de entregas rápidas e contínuas de software [...]]]></description>
			<content:encoded><![CDATA[<p>A fim de ajudar as pessoas a entenderem melhor o desenvolvimento ágil de software, em 2001 os membros da Agile Alliance refinaram o enunciado do Manifesto Ágil, criando doze princípios que as metodologias ágeis devem seguir. Estes princípios são os seguintes:</p>
<ol>
<li>Nossa maior prioridade é satisfazer o cliente através de entregas rápidas e contínuas de software funcional.</li>
<li>Abrace as mudanças de requisitos do projeto, mesmo que ocorram tardiamente. Os processos ágeis apóiam a mudança como uma vantagem competitiva para o cliente.</li>
<li>Entregue software funcionando com uma freqüência de duas semanas a dois meses, escolhendo sempre a menor escala de tempo possível.</li>
<li>O pessoal de negócio e os desenvolvedores devem trabalhar juntos no projeto diariamente.</li>
<li>Construa os projetos com pessoas motivadas. Forneça o ambiente, os equipamentos e as ferramentas de que elas precisam e confie que elas farão o trabalho.</li>
<li>Uma conversa cara a cara é a melhor forma de transmitir e receber informação do time de desenvolvimento.</li>
<li>Software funcionando é a principal medida de progresso.</li>
<li>Processos ágeis promovem um desenvolvimento sustentado. Gerência, desenvolvedores e usuários devem ser capazes de manter um ritmo constante indefinidamente.</li>
<li>A atenção contínua à excelência técnica e a um bom design aumentam a agilidade.</li>
<li>Simplicidade – a arte de maximizar a quantidade de trabalho desnecessária – é essencial.</li>
<li>As melhores arquiteturas, designs e requisitos surgem de times auto-gerenciados.</li>
<li>A intervalos regulares, o time reflete sobre como se tornar mais eficaz, e então ajusta seu comportamento de acordo com as reflexões.</li>
</ol>
<p>Pare por um momento e reflita sobre os princípios acima. Serão tão radicais e impossíveis como algumas pessoas acham ou simplesmente seguem o bom senso? Será tão difícil fazer os projetos funcionarem desta forma? Você realmente acredita que seu cliente prefere uma ótima e farta documentação a um sistema funcionando em um curto prazo? Ou que um e-mail substitua um bom bate-papo? E que tal fazer somente o necessário, sem ficar ‘viajando na maionese’?</p>
<p>Estes princípios formam um senso comum e prático, sobre o qual podemos alicerçar nossos esforços para a construção de um software de sucesso.</p>
<p><em>(Referência: Agile Modelling – Scott Ambler)</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.brasiltech.net/agilez/2009/12/22/os-12-mandamentos-do-agile/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mais agilidade em suas estimativas com o Planning Poker</title>
		<link>http://www.brasiltech.net/agilez/2009/12/13/mais-agilidade-em-suas-estimativas-com-o-planning-poker/</link>
		<comments>http://www.brasiltech.net/agilez/2009/12/13/mais-agilidade-em-suas-estimativas-com-o-planning-poker/#comments</comments>
		<pubDate>Sun, 13 Dec 2009 13:38:34 +0000</pubDate>
		<dc:creator>Douglas Cunha</dc:creator>
				<category><![CDATA[Metodologias]]></category>
		<category><![CDATA[estimativas]]></category>
		<category><![CDATA[planejamento]]></category>
		<category><![CDATA[planning poker]]></category>
		<category><![CDATA[scrum]]></category>

		<guid isPermaLink="false">http://www.brasiltech.net/agilez/2009/12/13/mais-agilidade-em-suas-estimativas-com-o-planning-poker/</guid>
		<description><![CDATA[ 
Quem trabalha com desenvolvimento de software sabe que um dos nossos maiores desafios é conseguir mensurar o tamanho de cada tarefa com uma boa precisão, e, conseqüentemente, conseguir prever quando determinado recurso deverá ser concluído. A forma como fazemos nossas estimativas tem um grande impacto na confiabilidade de nossos prazos, porém, nem sempre as [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.brasiltech.net/agilez/wp-content/uploads/2009/12/PlanningPoker617x410.jpg"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 20px 20px 0px; display: inline; border-top: 0px; border-right: 0px" title="PlanningPoker617x410" border="0" alt="PlanningPoker617x410" align="left" src="http://www.brasiltech.net/agilez/wp-content/uploads/2009/12/PlanningPoker617x410_thumb.jpg" width="240" height="159" /></a> </p>
<p>Quem trabalha com desenvolvimento de software sabe que um dos nossos maiores desafios é conseguir mensurar o tamanho de cada tarefa com uma boa precisão, e, conseqüentemente, conseguir prever quando determinado recurso deverá ser concluído. A forma como fazemos nossas estimativas tem um grande impacto na confiabilidade de nossos prazos, porém, nem sempre as equipes tomam consciência desse fato, e continuam dando pouco valor ou dedicando menos esforço do que deveriam a essa atividade.</p>
<p>Seja qual for a metodologia de trabalho que sua equipe utiliza (scrum + XP ou outra mais tradicional) você pode utilizar diversas técnicas de estimativas. Neste artigo vou apresentar a que é mais utilizada por equipes que empregam metodologias ágeis: o Planning Poker.</p>
<p>Antes de começar, devo introduzir um conceito que pode não ser conhecido ou aceito por todos: uma estimativa é da equipe e não de um programador ou analista em específico, ou seja, o ato de estimar é uma atividade de TODA a equipe, e esse detalhe é primordial para o sucesso do Planning Poker. Com isso em mente, vamos à definição:</p>
<p> <span id="more-114"></span>
</p>
<blockquote><p>O Planning Poker é uma técnica de estimativa baseada no consenso de toda a equipe, onde é utilizado um conjunto de cartas com valores específicos que podem representar pontos relativos ou até mesmo horas (esses valores podem seguir a seqüência de fibonacci) e é praticado como se fosse um jogo. Uma pessoa apresenta a tarefa ou estória para o time, e, após uma <strong>breve</strong> discussão, cada um escolhe uma carta e coloca virada para baixo sobre uma mesa. Quando todas as cartas estiverem lançadas, elas são viradas e caso não haja consenso nos valores escolhidos, as diferenças são discutidas de forma <strong>breve</strong>, e uma nova rodada acontece até que haja a convergência.</p>
</blockquote>
<p>Vale notar que eu enfatizei que as discussões devem ser breves. Esse ponto é muito importante, pois tem o objetivo de evitar longas argumentações técnicas, que não devem de forma alguma ser o foco de uma estimativa.    <br />Exemplo: quatro membros da equipe jogaram o valor 3 para uma determinada tarefa, e um quinto jogou o valor 8. Houve uma diferença muito grande, e por isso o quinto jogador deve argumentar brevemente porque entendeu que a tarefa demanda mais esforço. Pode ser porque ele não entendeu bem o que deve ser feito, ou porque tem mais experiência naquele tipo de tarefa e conseguiu prever algumas dificuldades que os demais não conseguiram.</p>
<p>Algumas vantagens do Planning Poker:</p>
<p>· Equipe mais comprometida, pois todos participam;</p>
<p>· Força a equipe a ter um conhecimento de negócio mais homogêneo;</p>
<p>· Aumenta bastante a precisão das estimativas, pois considera a experiência de todos;</p>
<p>· Mais atraente (divertida) que as demais técnicas.</p>
<p>Se seu time está tentando implementar o <strong>scrum</strong>, algumas considerações:</p>
<p>· Estórias são funcionalidades, na forma como tem valor para o cliente (no scrum, o PO ou Product Owner). Exemplo: Eu como usuário quero poder cadastrar um produto;</p>
<p>· Tarefas são as implementações que devem ser feitas para que a funcionalidade seja entregue. Uma estória pode possuir uma ou mais tarefas;</p>
<p>· Nós só conseguimos estimar com precisão as tarefas pequenas. Se estiver estimando em horas, um valor maior que oito já é considerado um ‘chute’, e geralmente significa que aquela tarefa deve ser particionada em pelo menos duas partes, e reestimada, portanto, é recomendável assumir que cada tarefa deve ser pequena o suficiente para poder ser executada em um dia;</p>
<p>· Nem todas as estórias precisam ser detalhadas durante as estimativas. Se você trabalha com scrum, durante o <em>backlog estimate </em>(reunião, geralmente semanal, onde estimamos apenas as estórias de usuário) todas as estórias são reestimadas, e as estórias grandes são quebradas de acordo com a priorização do Product Owner. Dessa forma, as estórias com prioridade mais baixas podem ser estimadas com valores mais altos, e seu detalhamento pode ser postergado para quando se tornarem mais próximas de serem selecionadas para o sprint;</p>
<p>· Estimativas por horas devem ser feitas sem considerar as interrupções, ou seja, o tempo que efetivamente levaríamos para concluir a tarefa em um dia ideal;</p>
<p>· Estimativas por pontos é uma técnica muito boa para se estimar as estórias de usuário e não as tarefas, que usamos estimativas por horas em dias ideais (veja mais sobre estimativas por pontos <a title="Estimando pelo tamanho e não pela duração" href="http://www.brasiltech.net/agilez/2009/09/22/estimando-pelo-tamanho-e-no-pela-durao/" target="_blank">aqui</a>).</p>
<p>Existe um site bem interessante onde é possível jogar online o Planning Poker com sua equipe: <a href="http://www.planningpoker.com/" rel="nofollow" target="_blank">planningpoker.com</a>. Mas note que o poker real, com cartas de papel, é mais recomendável e geralmente mais ágil. Existem vários sites que fornecem as cartas para impressão, como: <a href="http://www.sprintplanning.com/PlanningPoker.aspx" rel="nofollow" target="_blank">sprintplanning.com</a> (para mais, deem uma olhada nas referências da <a href="http://en.wikipedia.org/wiki/Planning_poker" rel="nofollow" target="_blank">Wikipedia</a>).</p>
<p>Aqui tem uma explicação bem legal sobre como funciona a dinâmica do jogo: <a href="http://www.crisp.se/planningpoker" rel="nofollow" target="_blank">www.crisp.se/planningpoker</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.brasiltech.net/agilez/2009/12/13/mais-agilidade-em-suas-estimativas-com-o-planning-poker/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Um dia na terra do Kanban</title>
		<link>http://www.brasiltech.net/agilez/2009/12/01/um-dia-na-terra-do-kanban/</link>
		<comments>http://www.brasiltech.net/agilez/2009/12/01/um-dia-na-terra-do-kanban/#comments</comments>
		<pubDate>Tue, 01 Dec 2009 03:08:02 +0000</pubDate>
		<dc:creator>Pitty</dc:creator>
				<category><![CDATA[Metodologias]]></category>
		<category><![CDATA[kanban]]></category>
		<category><![CDATA[scrum]]></category>

		<guid isPermaLink="false">http://www.brasiltech.net/agilez/2009/12/01/um-dia-na-terra-do-kanban/</guid>
		<description><![CDATA[Como um amigo meu disse certa vez… ‘na internet nada se cria, tudo se copia’. Acabei me rendendo a essa frase, e publicarei uma estorinha já contada em outros blogs. Essa eu peguei do blog do André Dourado (blog muito bom, recomendo). O post original é de Henrik Kniberg, autor do livro ‘Scrum e XP [...]]]></description>
			<content:encoded><![CDATA[<p>Como um amigo meu disse certa vez… ‘na internet nada se cria, tudo se copia’. Acabei me rendendo a essa frase, e publicarei uma estorinha já contada em outros blogs. Essa eu peguei do blog do <a href="http://blog.adsystems.com.br/">André Dourado</a> (blog muito bom, recomendo). O post original é de Henrik Kniberg, autor do livro ‘<a href="http://www.infoq.com/br/minibooks/scrum-xp-from-the-trenches">Scrum e XP direto das trincheiras</a>’. </p>
<p>É uma historinha bem humorada do dia a dia de negociações com nossos Product Owners. O André fez uma tradução livre para o português. O post original pode ser visto em <a href="http://blog.crisp.se/henrikkniberg/2009/06/26/1246053060000.html">One Day in Kanban Land</a>.</p>
<p><a href="http://www.brasiltech.net/agilez/wp-content/uploads/2009/12/Kanban1_ptbr.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="Kanban1_ptbr" src="http://www.brasiltech.net/agilez/wp-content/uploads/2009/12/Kanban1_ptbr_thumb.jpg" width="504" height="619" /></a>&#160;</p>
<p><a href="http://www.brasiltech.net/agilez/wp-content/uploads/2009/12/Kanban2_ptbr.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="Kanban2_ptbr" src="http://www.brasiltech.net/agilez/wp-content/uploads/2009/12/Kanban2_ptbr_thumb.jpg" width="504" height="610" /></a> </p>
<p><a href="http://www.brasiltech.net/agilez/wp-content/uploads/2009/12/Kanban3_ptbr.jpg"><img style="border-right-width: 0px;border-top-width: 0px;border-bottom-width: 0px;border-left-width: 0px" border="0" alt="Kanban3_ptbr" src="http://www.brasiltech.net/agilez/wp-content/uploads/2009/12/Kanban3_ptbr_thumb.jpg" width="504" height="610" /></a> </p>
</p>
<p><a href="http://www.brasiltech.net/agilez/wp-content/uploads/2009/12/Kanban4_ptbr.jpg"><img style="border-right-width: 0px;border-top-width: 0px;border-bottom-width: 0px;border-left-width: 0px" border="0" alt="Kanban4_ptbr" src="http://www.brasiltech.net/agilez/wp-content/uploads/2009/12/Kanban4_ptbr_thumb.jpg" width="504" height="636" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.brasiltech.net/agilez/2009/12/01/um-dia-na-terra-do-kanban/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A import&#226;ncia do desenvolvimento orientado a teste ou TDD</title>
		<link>http://www.brasiltech.net/agilez/2009/11/08/a-importancia-do-desenvolvimento-orientado-a-teste-tdd-teste-driven-development/</link>
		<comments>http://www.brasiltech.net/agilez/2009/11/08/a-importancia-do-desenvolvimento-orientado-a-teste-tdd-teste-driven-development/#comments</comments>
		<pubDate>Mon, 09 Nov 2009 01:47:23 +0000</pubDate>
		<dc:creator>Douglas Cunha</dc:creator>
				<category><![CDATA[Metodologias]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Testes]]></category>
		<category><![CDATA[xUnit]]></category>

		<guid isPermaLink="false">http://www.brasiltech.net/agilez/2009/11/08/a-importancia-do-desenvolvimento-orientado-a-teste-tdd-teste-driven-development/</guid>
		<description><![CDATA[
Se você e sua equipe são adeptos do scrum ou outra metodologia ágil provavelmente devem conhecer ou utilizar testes unitários, mas não necessariamente o desenvolvimento orientado a testes (TDD). O teste unitário consiste basicamente em validar dados válidos e inválidos via entrada e saída, já o TDD utiliza teste unitário como parte de sua metodologia [...]]]></description>
			<content:encoded><![CDATA[<p><img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="Grafo" src="http://www.brasiltech.net/agilez/wp-content/uploads/2009/11/Grafo.png" border="0" alt="Grafo" width="240" height="204" align="left" /></p>
<p>Se você e sua equipe são adeptos do scrum ou outra metodologia ágil provavelmente devem conhecer ou utilizar testes unitários, mas não necessariamente o desenvolvimento orientado a testes (TDD). O teste unitário consiste basicamente em validar dados válidos e inválidos via entrada e saída, já o TDD utiliza teste unitário como parte de sua metodologia cujo principal objetivo não é testar as unidades (é um dos objetivos, mas não o único).</p>
<p>Em um cenário de desenvolvimento ágil, sem uso de TDD, o programador geralmente não conta com um modelo de classes em forma de diagramas &#8211; como outras metodologias pesadas. Por isso é comum a modelagem ser feita apenas mentalmente, em algum outro formato (rascunho em papel de pão?) ou até mesmo diretamente no código. As classes, operações e atributos vão surgindo conforme a necessidade, e são constantemente alterados e implementados até a conclusão da tarefa associada. Eventualmente, alguns testes de unidade são implementados baseando-se nas classes já prontas.<span id="more-100"></span></p>
<p>Este tipo de abordagem implica em alguns problemas, entre eles:</p>
<ul>
<li>o programador não tem segurança em saber quando uma implementação acabou;</li>
<li>o programador não precisa implementar a classe de forma que ela fique desacoplada das demais;</li>
<li>o programador tende a não desenvolver para a interface e sim para a implementação;</li>
<li>métodos não coesos (fazem mais ou menos do que deveriam fazer);</li>
<li>nomes de atributos e operações não representam adequadamente a funcionalidade.</li>
</ul>
<p>O TDD pretende resolver todas as deficiências citadas acima e várias outras. Mas, o que é o TDD? TDD ou Test Driven Development pode ser considerada uma metodologia de design de software, onde escrevemos primeiro um teste e depois o código necessário para o teste passar. A idéia é que o desenho das classes seja guiado pelos testes. O TDD força o desenvolvedor a pensar primeiro em o que ele precisa, e em como fazer, via teste unitário, para testar se a implementação a ser feita fará o que deve, nada mais e nada menos. Com isso, se ganha em vários aspectos:</p>
<ul>
<li>as classes devem ser desacopladas, senão o teste não pode ser executado;</li>
<li>os métodos são bem coesos, ou seja, fazem somente o necessário para o teste passar;</li>
<li>o programador sabe exatamente quando concluiu uma implementação, pois o teste passou;</li>
<li>o programador consegue validar rapidamente uma alteração que pode ter causado um impacto em outras unidades, apenas rodando um conjunto de testes;</li>
<li>operações e atributos possuem nomes claros e representam exatamente o que fazem.</li>
</ul>
<p>O workflow do TDD pode ser descrito basicamente em cinco passos básicos:</p>
<ol>
<li>Crie a classe de teste e o primeiro teste
<ol>
<li>Nesse ponto o programador deve pensar em como será a assinatura do método testado. O fato de ter que escrever um teste para o método, faz com que, tanto o nome quanto os parâmetros de entrada e saída sejam bem claros e coesos.</li>
</ol>
</li>
<li>Compile o teste
<ol>
<li>O teste não vai compilar. Neste momento, crie a classe e a declaração do método. Recompile e rode o teste. O teste deve falhar, pois o método testado ainda não está implementado.</li>
</ol>
</li>
<li>Implemente o código testado de modo que o teste falhe
<ol>
<li>O objetivo do teste é detectar defeitos, e essa fase é importante para averiguar se o teste está cumprindo seu papel. Geralmente codificar para que o método testado retorne um valor errado é o suficiente. Rode o teste e veja o teste falhar.</li>
</ol>
</li>
<li>Agora corrija o código, de forma que o teste passe
<ol>
<li>Implemente o suficiente para o teste passar. Você deve garantir que o teste exija o suficiente. Se precisar implementar mais do que o necessário para o teste passar, provavelmente seu teste não está bom o suficiente, ou seu método não está coeso. Neste caso, refaça o teste ou corrija a implementação do código testado.</li>
</ol>
</li>
<li>Faça alguma refatoração necessária e reexecute os testes
<ol>
<li>Na fase anterior nos preocupamos apenas em fazer o teste passar. Nessa etapa, faça uma revisão no código e veja se precisa de alguma refatoração. Em seguida rode todos os testes construídos até agora para certificar-se de que a refatoração não quebrou algum outro código.</li>
</ol>
</li>
<p>Antes que me perguntem: TDD não é burocrático e demorado?.  Não. Usar TDD não implica em aumentar o tempo de desenvolvimento. Desconsiderando o tempo de adaptação de sua equipe, a tendência é que o desenvolvimento com TDD aumente consideravelmente a produtividade, e, consequentemente, a segurança e qualidade dos produtos desenvolvidos. Essa é a experiência de quase toda equipe de aderiu ao TDD, e provavelmente sua equipe só vai se sentir confortável com a idéia quando efetivamente aplicar os conceitos da metodologia.</ol>
<p>Neste artigo não abordei as ferramentas de teste unitário, pois não é o foco do TDD, porém praticamente todos os ambientes de desenvolvimento moderno possuem algum framework de testes unitários. Posso citar alguns: NUnit (C#), DUnit (Delphi) e JUnit (Java). Escolha o que melhor se adequar a sua realidade.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brasiltech.net/agilez/2009/11/08/a-importancia-do-desenvolvimento-orientado-a-teste-tdd-teste-driven-development/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Porque o planejamento tradicional n&#227;o funciona?</title>
		<link>http://www.brasiltech.net/agilez/2009/11/04/porque-o-planejamento-tradicional-nao-funciona-2/</link>
		<comments>http://www.brasiltech.net/agilez/2009/11/04/porque-o-planejamento-tradicional-nao-funciona-2/#comments</comments>
		<pubDate>Wed, 04 Nov 2009 23:52:42 +0000</pubDate>
		<dc:creator>Pitty</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[planejamento]]></category>

		<guid isPermaLink="false">http://www.brasiltech.net/agilez/2009/11/04/porque-o-planejamento-tradicional-nao-funciona-2/</guid>
		<description><![CDATA[Estimativa e planejamento são passos críticos para o sucesso de qualquer projeto de desenvolvimento de software. No entanto, planejar é uma atividade difícil e os planos geralmente falham. Estimativas feitas no início de um planejamento ou projeto tem pouquíssima exatidão e a probabilidade de termos uma estimativa correta para um planejamento de 1 ano é [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.brasiltech.net/agilez/wp-content/uploads/2009/11/planejamento.jpg"><img style="border-right-width: 0px;margin: 0px 15px 0px 0px;border-top-width: 0px;border-bottom-width: 0px;border-left-width: 0px" src="http://www.brasiltech.net/agilez/wp-content/uploads/2009/11/planejamento_thumb.jpg" border="0" alt="planejamento" width="180" height="181" align="left" /></a>Estimativa e planejamento são passos críticos para o sucesso de qualquer projeto de desenvolvimento de software. No entanto, planejar é uma atividade difícil e os planos geralmente falham. Estimativas feitas no início de um planejamento ou projeto tem pouquíssima exatidão e a probabilidade de termos uma estimativa correta para um planejamento de 1 ano é muito menor que a probabilidade de acertarmos a estimativa para um planejamento de 2 semanas. Esse refinamento na probabilidade do acerto das estimativas é chamado de <em>cone da incerteza (Boehm, 1981)</em>.</p>
<p>No entanto, a dificuldade em planejar não é desculpa para não fazê-lo. O planejamento reduz o risco, diminui a incerteza, ajuda na tomada de decisões, estabelece uma maior confiança e dissemina informações. Infelizmente, o planejamento tradicional não vem funcionando. Ao tentar combinar e responder às necessidades do trio escopo\cronograma\recursos, o planejamento tradicional não nos leva a respostas e produtos satisfatórios.</p>
<p>E por que o planejamento tradicional não funciona? Mike Cohn, em seu livro <em>Agile Estimating and Planning,</em> elenca 5 causas para as falhas de planejamento.<span id="more-95"></span></p>
<ol>
<li>
<div><strong>O planejamento é baseado nas tarefas necessárias e não nos recursos desejados.<br />
</strong>É vital o time manter o foco nos requisitos solicitados; são eles que agregam valor para o cliente (veja <a href="http://www.brasiltech.net/agilez/2009/10/12/voce-entrega-algo-de-valor-para-seu-cliente-fdd-desenvolvimento-orientado-a-funcionalidade/" target="_blank">&#8220;Você entrega algo de valor para seu cliente?&#8221;</a>). Tarefas por si só não agregam valor algum. Além disso, os planejamentos tradicionais, por basearem-se em tarefas, preocupam-se com a dependência entre elas. Assim, atrasos em qualquer tarefa acumulam-se no final do cronograma, pois são repassados pela cadeia de dependência.</div>
</li>
<li>
<div><strong>Executar tarefas simultaneamente agora acaba gerando atrasos no futuro.<br />
</strong>Com a melhor das intenções, o time pode ver a multitarefa como uma possível solução para atrasos. No entanto, ao trabalhar em duas tarefas ao mesmo tempo, um membro do time provavelmente prorrogará o término das duas. Como outras tarefas dependem das primeiras (lembra do item anterior?), é quase certo que um atraso será embutido na cadeia de dependência, refletindo-se no prazo de entrega final.
<div></div>
</div>
</li>
<li>
<div><strong>Não se atende aos requisitos pela prioridade dos mesmos.<br />
</strong>O pensamento tradicional diz que, se todo trabalho é completado, não importa a ordem em que é feito. Nesse caso, é natural que a seqüência e priorização das tarefas siga a conveniência do time de desenvolvimento e não a importância dos requisitos para o cliente. Como conseqüência, é muito provável que no final do projeto, para manter o cronograma, o time acabe descartando requisitos importantes que não foram corretamente priorizados.</div>
</li>
<li>
<div><strong>O planejamento antecipado sempre contém um certo grau de incerteza que é ignorado.<br />
</strong>O planejamento tradicional não considera as incertezas presentes em todo projeto de software. Ele assume que a análise inicial será completa e perfeita e que coletará todos os requisitos do produto. Assume também que os usuários não mudarão de idéia, que nenhuma necessidade nova aparecerá durante a execução do projeto e que sabemos exatamente como os requisitos serão  implementados. É claro que isso não é verdade; tudo o que não sabemos no início do projeto é uma incerteza que deve ser considerada no planejamento, e a melhor forma de lidar com as incertezas é através de iterações curtas com feedbacks rápidos e constantes.</div>
</li>
<li>
<div><strong>Estimativas com alto nível de incertezas e baixa probabilidade de acerto acabam se tornando compromissos.<br />
</strong>Dentro de cada estimativa está embutida uma <em>probabilidade </em>do trabalho ser finalizado no tempo previsto. Uma probabilidade varia de 0 a 100%. Portanto, ao estimar a duração de uma tarefa estamos dizendo que existe uma probabilidade de x % de terminarmos a tarefa em y dias. O problema é que compromissos não podem ser assumidos sobre probabilidades; eles são assumidos sobre uma data.</div>
</li>
</ol>
<p>O planejamento ágil ataca esses problemas focando nos requisitos. A unidade mínima de entrega é um requisito completo; não importa quantas tarefas foram terminadas, se um requisito não está completamente implementado, ele não está entregue. A priorização baseia-se nos requisitos de maior valor para o cliente e não nas tarefas do time de desenvolvimento. O time todo trabalha para entregar um requisito, por isso praticamente não existe multitarefa. O planejamento é incremental; assume-se que no início do projeto sabemos muito pouco sobre o que será feito e sobre como será feito. O time encontrará essas respostas gradativamente, conforme implementa requisito por requisito.</p>
<p>Parece utópico, mas funciona. Qualquer um que desenvolveu software sabe que nunca conseguimos levantar todos os requisitos necessários para um sistema, por maior que seja o esforço. Conheço uma pessoa que trabalha para uma grande empresa indiana que possui a famosa certificação CMM5. Há 2 anos ela realiza levantamento de requisitos para o sistema de um grande banco brasileiro. Dois longos anos de trabalho da equipe; nenhuma linha de código foi escrita, nenhum requisito foi entregue; somente algumas centenas de artefatos obrigatoriamente gerados pela especificação do CMM5. Claro, CMM5 garante qualidade, mesmo que a um custo altíssimo, certo? Mas qual a probabilidade dos requisitos levantados há dois anos ainda serem válidos? Será que ainda representam o que o cliente <em>quer</em> <em>atualmente</em>? Acho pouco provável.</p>
<p>E você, qual sua opinião?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brasiltech.net/agilez/2009/11/04/porque-o-planejamento-tradicional-nao-funciona-2/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Voc&#234; entrega algo de valor para seu cliente?</title>
		<link>http://www.brasiltech.net/agilez/2009/10/12/voce-entrega-algo-de-valor-para-seu-cliente-fdd-desenvolvimento-orientado-a-funcionalidade/</link>
		<comments>http://www.brasiltech.net/agilez/2009/10/12/voce-entrega-algo-de-valor-para-seu-cliente-fdd-desenvolvimento-orientado-a-funcionalidade/#comments</comments>
		<pubDate>Mon, 12 Oct 2009 22:23:10 +0000</pubDate>
		<dc:creator>Douglas Cunha</dc:creator>
				<category><![CDATA[Metodologias]]></category>
		<category><![CDATA[estimativas]]></category>
		<category><![CDATA[fdd]]></category>
		<category><![CDATA[produtividade]]></category>
		<category><![CDATA[projeto]]></category>
		<category><![CDATA[scrum]]></category>

		<guid isPermaLink="false">http://www.brasiltech.net/agilez/2009/10/12/voce-entrega-algo-de-valor-para-seu-cliente-fdd-desenvolvimento-orientado-a-funcionalidade/</guid>
		<description><![CDATA[
Quando trabalhamos com equipes mais enxutas, utilizando metodologias ágeis (como o Scrum), temos um considerável poder de decisão e planejamento sobre o que será implementado em cada build. Digo considerável pois existem vários fatores que influenciam o que fará parte do seu sprint (sprint é uma interação que segue o ciclo PDCA e entrega incremento [...]]]></description>
			<content:encoded><![CDATA[<p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="dilbert" src="http://www.brasiltech.net/agilez/wp-content/uploads/2009/10/dilbert.gif" border="0" alt="dilbert" width="591" height="208" /></p>
<p>Quando trabalhamos com equipes mais enxutas, utilizando metodologias ágeis (como o Scrum), temos um considerável poder de decisão e planejamento sobre o que será implementado em cada build. Digo considerável pois existem vários fatores que influenciam o que fará parte do seu sprint (<a rel="nofollow" href="http://pt.wikipedia.org/wiki/Scrum" target="_blank">sprint</a> é uma interação que segue o ciclo <a rel="nofollow" href="http://pt.wikipedia.org/wiki/Ciclo_pdca" target="_blank">PDCA</a> e entrega incremento de software pronto), como a priorização do <em>Product Owner (</em>o cliente)<em>, </em>tamanho estimado para cada uma das <em>user stories </em>que farão parte da interação, restrições técnicas e outras.</p>
<p>Durante o processo de estimativa, é comum decompormos as <em>user stories</em> em várias tarefas menores, com o objetivo de facilitar a pontuação de cada uma delas. Esse processo é adequado e, se bem feito, aumenta muito a precisão das estimativas, porém, ao quebrar uma solicitação em atividades menores, corremos um sério risco de perdermos de vista o real objetivo de cada uma das tarefas, que é contribuir para a conclusão de um recurso solicitado pelo cliente. Convém não esquecermos que, para o cliente, essas pequenas atividades geralmente não possuem valor por si, a não ser que todas sejam feitas e a <em>feature </em>solicitada seja entregue.<span id="more-90"></span></p>
<p>No parágrafo anterior, introduzi dois conceitos chaves para este artigo: o conceito de <em>feature </em>e <em>valor.</em> Uma <em>Feature </em>pode ser definida como um recurso/funcionalidade e geralmente é escrita da seguinte forma: &lt;ação&gt;&lt;resultado&gt;&lt;objeto&gt;. Por exemplo &lt;emitir&gt;&lt;a nota fiscal&gt;&lt;de venda&gt; (para mais detalhes, veja <a rel="nofollow" href="http://www.heptagon.com.br/fdd-oque" target="_blank">FDD</a> – uma metodologia ágil guiada por funcionalidade). Já <em>valor</em>, neste contexto, é toda <em>feature </em>que traga algum benefício para o cliente, ou seja, é seu cliente (no scrum chamado de <em>Product Owner</em>) quem deve <strong>valorar </strong>o recurso.</p>
<p>Tendo isto em mente, podemos dizer que uma interação deve ter como <strong>principal </strong>objetivo entregar uma nova versão/build com novas funcionalidades para o cliente. Toda implementação que não contribua para a inclusão das novas <em>features</em> deve ser considerada tempo perdido e ser removida do <em>sprint.</em> Um pouco radical? Vejamos: refactoring, melhorias visuais, troca de tecnologia, otimizações e outras, será que tudo isto pode ser considerado tempo perdido? A resposta é sim e não. Não se a alteração for necessária para dar estrutura ao desenvolvimento de um novo recurso, e sim se for somente para satisfazer o ego do programador. É claro que tudo tem sua exceção, e uma refatoração visual pode, por exemplo, ser uma necessidade de mercado e ser solicitada pelo departamento de marketing, e por esse motivo ser considerada uma <em>feature </em>de valor devido ao seu significado estratégico para o  mercado.</p>
<p>Ao planejar seu <em>sprint </em>focando em funcionalidades, deverá tomar cuidado para que nenhuma funcionalidade seja entregue pela metade. Por isso, verifique a possibilidade com o cliente de desmembrar recursos maiores em partes, e entregue uma parte a cada final de interação, deixando claro que a cada fim de <em>sprint </em>ele deverá ter uma versão do programa funcionando e com um novo valor agregado.</p>
<p>Relatórios como o <em>Parking Lot</em>, que nos dá uma visão de progresso por <em>feature</em>, são indispensáveis para gerenciar o andamento do <em>sprint</em> e antecipar qualquer problema que implique na não entrega de uma funcionalidade completa para o cliente. Veja abaixo um exemplo:</p>
<p><a href="http://www.brasiltech.net/agilez/wp-content/uploads/2009/10/ParkingLot.045.preview.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="ParkingLot.045.preview" src="http://www.brasiltech.net/agilez/wp-content/uploads/2009/10/ParkingLot.045.preview_thumb.png" border="0" alt="ParkingLot.045.preview" width="593" height="445" /></a></p>
<p>(imagem de: <a title="http://www.featuredrivendevelopment.com/node/1038" href="http://www.featuredrivendevelopment.com/node/1038">http://www.featuredrivendevelopment.com/node/1038</a>)</p>
<p>Existem vários outros conceitos utilizados neste relatório, como a divisão de funcionalidades por área de negócio, que não irei explicar aqui neste artigo. Para se aprofundar mais sobre o desenvolvimento dirigido à funcionalidade, leia o excelente livro do Alexandre Magno: <a rel="nofollow" href="http://www.visaoagil.com/downloads/biblioteca/axmagno_FDDEmUmaCascaDeBanana.pdf" target="_blank">FDD em uma casca de banana</a> e veja o que se encaixa na realidade de sua equipe.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brasiltech.net/agilez/2009/10/12/voce-entrega-algo-de-valor-para-seu-cliente-fdd-desenvolvimento-orientado-a-funcionalidade/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A import&#226;ncia da interface com o usu&#225;rio</title>
		<link>http://www.brasiltech.net/agilez/2009/09/27/como-desenhar-boas-interfaces-graficas-iu-com-eficiencia/</link>
		<comments>http://www.brasiltech.net/agilez/2009/09/27/como-desenhar-boas-interfaces-graficas-iu-com-eficiencia/#comments</comments>
		<pubDate>Sun, 27 Sep 2009 20:15:56 +0000</pubDate>
		<dc:creator>Douglas Cunha</dc:creator>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[iu]]></category>

		<guid isPermaLink="false">http://www.brasiltech.net/agilez/2009/09/27/como-desenhar-boas-interfaces-graficas-iu-com-eficiencia/</guid>
		<description><![CDATA[
Programar muitas vezes é considerado como sinônimo de codificar, ou seja, escrever código para ser compilado. A importância de um bom algoritmo na qualidade final de um software é indiscutível e não pretendo levantar discussões a este respeito por aqui, mas colocar em pauta outro aspecto – que também é programação – porém nem sempre [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.brasiltech.net/agilez/wp-content/uploads/2009/09/dilbert3.jpg"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="dilbert3" src="http://www.brasiltech.net/agilez/wp-content/uploads/2009/09/dilbert3_thumb.jpg" border="0" alt="dilbert3" width="375" height="383" /></a></p>
<p>Programar muitas vezes é considerado como sinônimo de codificar, ou seja, escrever código para ser compilado. A importância de um bom algoritmo na qualidade final de um software é indiscutível e não pretendo levantar discussões a este respeito por aqui, mas colocar em pauta outro aspecto – que também é programação – porém nem sempre tem a atenção merecida: a interface gráfica, ou, mais precisamente, a interface de usuário (IU).</p>
<p>Assim como a parte que fica por debaixo dos panos (o código) a interface gráfica tem uma importância fundamental para o sucesso de seu sistema. Padrões de projeto (Design Patterns), Grasp, POO, POA e etc. São inúmeras as técnicas existentes para auxiliar a construção de excelentes softwares. Mas, quantos de vocês conhecem alguma para desenhos de interfaces gráficas? O que deve ter em mente o programador ou projetista de interface para construir uma boa IU?</p>
<p><span id="more-81"></span></p>
<p>Imagine a seguinte situação: você acabou de liberar uma nova versão de seu sistema com um novo e badalado recurso de cálculo de preço, baseado em uma intricada fórmula de previsão de custos, cujo código você morre de orgulho de dizer que foi de sua autoria. A janela que implementa este recurso possui alguns campos para digitação dos materiais aos quais o usuário pretende calcular o preço, e, eventualmente atualizar seu cadastro de produtos com os valores obtidos. O que parecia ter tudo pra ser um sucesso não repercutiu como o esperado, e você logo se pergunta: o que pode ter saído errado? O código está perfeito, fiz testes unitários e utilizeis todos os padrões GoF aplicáveis, entretanto, um recurso que teria tudo pra ser um sucesso não está sendo utilizado como o esperado.</p>
<p>Voltando a atenção à interface do usuário, constatamos que ela possui uma grave falha: o sistema possui um cadastro de produtos extenso, e a nova tela não permite que o usuário faça uma seleção para importar os produtos pelo grupo, por intervalo de código, por classificação ABC ou por algum outro critério. O usuário, frustrado por não conseguir digitar os produtos com facilidade, acaba evitando utilizar o novo recurso. Se uma análise de usabilidade fosse feita ANTES de o recurso ser liberado ao mundo externo, o resultado seria diferente.</p>
<p>A palavra chave, quando falamos em IU, é USABILIDADE. Interfaces gráficas foram feitas para – além de serem bonitinhas – facilitarem o trabalho de quem as utiliza. Beleza sem usabilidade é a mesma coisa que uma Ferrari sem volante. É linda, porém não vai servir para o propósito ao qual foi feita.</p>
<p>A tarefa do projetista de IU não é fácil. Cometemos vários equívocos ao desenhar uma nova janela ou página apenas porque não pensamos como um usuário. E não é pra menos: nós não somos usuários. Se colocar no lugar do usuário é uma tarefa difícil e é o segredo para o sucesso de qualquer IU. Com qual freqüência o recurso será utilizado? É crítico? Velocidade faz diferença? É acessível via teclado ou exige o uso do mouse?</p>
<p>Chega de perguntas. O objetivo é apenas um:</p>
<blockquote><p>Uma boa IU é aquela que se comporta da forma como o usuário espera que ela se comporte.</p></blockquote>
<p>Simples, direto, claro. Se você coloca um botão lindo com ícones em 3D, mas não deixa claro para o que ele serve, não está construindo uma interface boa para o usuário. Coloque legendas claras e, se possível, <em>hints </em>explicativos e teclas de atalho <strong>explicitas</strong>, pois nem todo mundo gosta ou pode ficar utilizando mouse (cansa mais que teclado, principalmente em tarefas repetitivas). Se o padrão do sistema operacional é que em caixas de mensagens o botão <strong>OK</strong> venha antes do <strong>Cancelar</strong>, siga desta forma. Se tem um recurso não implementado, não coloque o botão na janela apenas para que o usuário tenha que clicar e ver que nada acontece. Recursos incompletos são piores que a ausência total deles.</p>
<p>Outra característica interessante relacionada ao usuário: eles não gostam de ler. Não adianta fazer um manual explicando como utilizar a nova janela, pois eles não o lerão de forma alguma. Da mesma forma, não adianta escrever caixas de diálogos com textos explicativos muito grandes. Eles não lerão e sequer pensarão em clicar em <strong>OK</strong> ou <strong>Cancelar </strong>antes de apertar a tecla <strong>ENTER </strong>do teclado. Textos curtos e claros são ideais. Ao invés de dizer: ‘Você apertou a tecla X, tem certeza que quer executar o procedimento X?’ utilize &#8216;Executar X?&#8217;.</p>
<p>Muitos usuários também são inseguros, portanto, evite questionar as ações dele a menos que seja necessário. Mensagens do tipo: ‘Tem certeza que deseja fazer isto?’ ou ‘Isto vai finalizar o sistema, tem certeza que quer finalizar o sistema?’ tem efeito negativo, pois sugere ao usuário que ele fez algo que não devia. É mais adequado usar: ‘Sair agora?’ ou ‘Fazer X?’.</p>
<p>Usuários gostam de pensar que recursos parecidos devem se comportar da mesma forma. Então, se vai construir uma janela nova, pergunte-se se não existe um padrão a ser seguido. Não inove sem critério, um aplicativo cujas IUs tem aspectos funcionais diferentes umas das outras são difíceis de usar. Se o botão para sair da janela se chama &#8216;Sair&#8217;, utilize sempre assim e não &#8216;Fechar&#8217;, &#8216;Encerrar&#8217;. Se a tecla ESC fecha a tela, procure disponibilizar o mesmo atalho para todas as janelas. A janela de Contas a pagar pode ser redimensionada, então a janela de Contas a receber também o deve.</p>
<p>Tem dúvida sobre qual melhor abordagem para um recurso? Não invente, pergunte ao usuário, faça um teste de interface com ele, observe como ele interage com os botões, menus e mensagens. É a melhor forma de descobrir.</p>
<p>p.s. Acabei de digitar o texto aqui no Word, e tentei selecionar tudo usando a combinação de teclas CTRL+A, que é padrão na maioria dos editores de texto. Não preciso falar que não funcionou, lembrei que no Word é CTRL+T.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brasiltech.net/agilez/2009/09/27/como-desenhar-boas-interfaces-graficas-iu-com-eficiencia/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Estimando pelo tamanho e n&#227;o pela dura&#231;&#227;o</title>
		<link>http://www.brasiltech.net/agilez/2009/09/22/estimando-pelo-tamanho-e-no-pela-durao/</link>
		<comments>http://www.brasiltech.net/agilez/2009/09/22/estimando-pelo-tamanho-e-no-pela-durao/#comments</comments>
		<pubDate>Tue, 22 Sep 2009 04:35:43 +0000</pubDate>
		<dc:creator>Pitty</dc:creator>
				<category><![CDATA[Metodologias]]></category>
		<category><![CDATA[estimativas]]></category>
		<category><![CDATA[scrum]]></category>

		<guid isPermaLink="false">http://www.brasiltech.net/agilez/2009/09/22/estimando-pelo-tamanho-e-no-pela-durao/</guid>
		<description><![CDATA[Estimativas de tamanho são diferentes das estimativas de duração. Ao estimar a duração tentamos estabeler quanto tempo será necessário para concluir uma tarefa. Mas, ao estimar pelo tamanho, analisamos quanto esforço (ou quanto trabalho) será necessário dispender para executar a tarefa.
Times ágeis estimam pelo tamanho e separam essa estimativa da estimativa de duração. Utilizarei uma [...]]]></description>
			<content:encoded><![CDATA[<p>Estimativas de tamanho são diferentes das estimativas de duração. Ao estimar a duração tentamos estabeler quanto <strong><em>tempo</em></strong> será necessário para concluir uma tarefa. Mas, ao estimar pelo tamanho, analisamos quanto <strong><em>esforço</em></strong> (ou quanto trabalho) será necessário dispender para executar a tarefa.</p>
<p>Times ágeis estimam pelo tamanho e separam essa estimativa da estimativa de duração. Utilizarei uma metáfora como exemplo para entendermos melhor essa distinção.</p>
<p><a href="http://www.brasiltech.net/agilez/wp-content/uploads/2009/09/2617756.jpg"><img style="border-right-width: 0px;margin: 0px 10px 0px 0px;border-top-width: 0px;border-bottom-width: 0px;border-left-width: 0px" src="http://www.brasiltech.net/agilez/wp-content/uploads/2009/09/2617756_thumb.jpg" border="0" alt="2617756" width="317" height="205" align="left" /></a>Suponha que, em uma bela manhã de domingo, minha esposa me incumba de recolher uma grande pilha de folhas e lixo de um canto do nosso jardim. Após um café da manhã reforçado, posso olhar aquela enorme pilha, analisar e avaliar minhas ferramentas (uma pá e um carrinho de mão) e estimar imediatamente que levarei 5 horas para terminar o trabalho. Para chegar a esse valor, ignorei qualquer estimativa de <strong>tamanho</strong> e parti diretamente para uma estimativa de <strong>duração</strong>.</p>
<p>Agora, imagine que eu olhe para a pilha e estime seu <strong>tamanho</strong>. Baseando-me nas suas dimensões, estimo que a pilha contem cerca de 10 metros cúbicos de sujeira. Essa é minha estimativa do <strong>tamanho</strong> da tarefa. Mas, nesse caso, somente uma estimativa de tamanho não é lá muito útil. Como no domingo tem um joguinho de futebol, quero saber quanto tempo vou demorar para limpar toda a sujeira. Ou seja, preciso converter minha estimativa de <strong>tamanho</strong> em uma estimativa de <strong>duração</strong>.</p>
<p><span id="more-74"></span></p>
<p>Uma etiqueta no meu carrinho de mão informa que o mesmo possui uma capacidade de 0,2 metros cúbicos. Dividindo os 10 metros cúbicos de sujeira pela capacidade do carrinho, concluo que precisarei de 50 viagens para dar um fim na bagunça. Ainda estimo que levarei cerca de 3 minutos para carregar o carrinho, mais 2 minutos para movê-lo até a lixeira e outro minuto para retornar com o carrinho vazio. Isso dá um total de 6 minutos por viagem. Como antecipei que precisaria de 50 viagens, chego à uma duração total de 300 minutos, ou 5 horas, para minha tarefa doméstica.</p>
<p>Em ambas as estimativas cheguei a 5 horas de duração. No entanto, a segunda estimativa é mais confiável, pois analisamos uma dimensão absoluta: o <strong>tamanho</strong> (ou esforço) da tarefa. Na primeira estimativa trabalhamos diretamente com a <strong>duração</strong>, que é uma dimensão relativa, pois se meu carrinho tiver uma capacidade de carga maior, a duração da tarefa será menor. E se o carrinho possuir uma capacidade menor, a duração da tarefa será maior.</p>
<p>Similarmente, o processo que agilistas utilizam para estimar um projeto de software segue os seguintes passos:</p>
<ol>
<li>Definir as funcionalidades desejadas;</li>
<li>Estimar o tamanho das tarefas;</li>
<li>Estimar a duração das tarefas;</li>
<li>Programar as datas de entrega.</li>
</ol>
<p>Existem duas medidas de tamanho que podemos utilizar no desenvolvimento de software: pontos de estória (<em>story points</em>) e dia ideal (<em>ideal time</em>). O que são, quais as diferenças entre essas medidas e como podemos utilizá-las será assunto de um próximo tópico.</p>
<p>Enjoy it!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.brasiltech.net/agilez/2009/09/22/estimando-pelo-tamanho-e-no-pela-durao/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
