<?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>Herberth Amaral &#187; agile</title> <atom:link href="http://herberthamaral.com/tag/agile/feed/" rel="self" type="application/rss+xml" /><link>http://herberthamaral.com</link> <description>Software development adventures</description> <lastBuildDate>Thu, 26 Aug 2010 13:59:42 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.0.1</generator> <item><title>Parabéns</title><link>http://herberthamaral.com/2010/06/parabens/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=parabens</link> <comments>http://herberthamaral.com/2010/06/parabens/#comments</comments> <pubDate>Thu, 03 Jun 2010 16:41:19 +0000</pubDate> <dc:creator>Herberth Amaral</dc:creator> <category><![CDATA[agile]]></category> <category><![CDATA[tdd]]></category> <category><![CDATA[controle de versão]]></category> <category><![CDATA[integração contínua]]></category> <category><![CDATA[rails]]></category> <category><![CDATA[ruby]]></category> <category><![CDATA[xp]]></category><guid isPermaLink="false">http://herberthamaral.com/?p=523</guid> <description><![CDATA[Parabéns! Você trabalhou de uma forma tão impressionantemente dura durante os últimos sete meses e meio neste projeto. Você atendeu à todas demandas do cliente que vieram. Você completou o projeto no prazo e dentro do orçamento de $30,000, economizando $2000. O cliente está muito satisfeito por isso. Você pode dizer isso pelos sinais 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%2Fherberthamaral.com%2F2010%2F06%2Fparabens%2F"> <img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fherberthamaral.com%2F2010%2F06%2Fparabens%2F&amp;source=HerberthAmaral&amp;style=normal" height="61" width="50" /> </a></div><p>Parabéns! Você trabalhou de uma forma tão <i>impressionantemente</i> dura durante os últimos sete meses e meio neste projeto. Você atendeu à todas demandas do cliente que vieram. Você completou o projeto no prazo e dentro do orçamento de $30,000, economizando $2000. O cliente está muito satisfeito por isso. Você pode dizer isso pelos sinais de dólar nos olhos dele. O cliente também está satisfeito pois ele foi capaz de colocar o Website no ar para o mundo para crescer e conquista-lo, o website já tem alguns usuários vindos dos convites beta que você mandou no início da semana. Você ainda mantém contato com o cliente quase todo dia. Ele diz que o site está indo muito bem.</p><p>Mas.</p><p>Há um usuário que está reportando uma falha com uma funcionalidade que você implementou há três meses. O cliente configurou seu email para receber relatórios de bugs. Você os recebeu pouco tempo depois que o usuário mandou. Uma páginas está mostrando &#8220;Desculpe-nos mas algumas coisa deu errada&#8221;.</p><p>Uh oh.</p><p>Você entra no website e checa você mesmo. Certo o suficiente que a página está dando erro 500. Mas por quê? Essa funcionalidade foi concluída três meses atrás e funcionou bem, não foi? Você testou na sua máquina local e viu que talvez fosse algo simples. Talvez uma variável digitada incorretamente no controller. Ou talvez não. Talvez isso vai levar mais de dois segundos seus para identificar o problema. Talvez leve uma hora, um dia.</p><p>Uma semana.</p><p>Então como esse erro pode existir? Você escreveu testes, né?</p><p>Oh, eu entendo.</p><p>Por causa da deadline iminente você estava pressionado pelo tempo e não se incomodou em aprender nenhum dos frameworks de testes. Você quis aprender. Muitas pessoas falam sobre testes com uma atitude positiva&#8230; foi só você que não teve tempo. Quando você fala sobre o assunto, seu chefe diz &#8220;o cliente não está pagando para você escrever testes, ele está pagando para você escrever funcionalidades&#8221;. Mesmo seu conhecimento sobre Rails cresceu três ou quatro vezes, comparado com o que era antes, durante a vida deste projeto, você ainda não sabe merda nenhuma sobre testes. Talvez seja hora de aprender, você pensa. Ah, mas O Chefe não quer que você gaste seu tempo em coisas que não produzem funcionalidades. &#8220;Testes são um desperdício do dinheiro do cliente&#8221;, ele diz. Você suspira. &#8220;Eu irei fazer melhor no próximo projeto. Eu irei fazer com que ele veja a luz. Eu irei fazer testes de verdade&#8230;&#8221;, você diz na sua cabeça. Ok, então você não escreveu os testes.</p><p>Então aqui vão os fatos:</p><p>Há um bug.<br /> Você trabalhou nele no passado.<br /> Você precisa conserta-lo. Agora.<br /> Então como você debuga este bug para garantir que ele não aconteça denovo? Bem, você o conserta e sabe que ele não irá acontecer denovo, certo? Você deixará um comentário decente (na verdade, você irá pensar em deixar um comentário decente) depois que estiver consertado, para que ninguem passe pelo mesmo erro. Certo?</p><p>Errado.</p><p>Tudo bem, então você sabe que está em algum lugar do passado. Você pode ver a lista de branches e talvez algum dispare um gatilho na sua memória, e você tem certeza que tem branches com nomes memoráveis?</p><p>Ah sim, branching no SVN é um pé no saco. Eu concordo. Se você pudesse ao menos convencer seu chefe a usar Git também. Branching no Git é muito mais legal. Talvez você fará que ele &#8220;veja a luz&#8221; sobre isso no próximo projeto também. Então todas as modificações são no trunk, e navegar regressivamente sobre ele vai, claro, levar bastante tempo. Boa sorte com isso.</p><p>Então vamos assumir que você passa pelo trunk. Você se lembra da revisão e conserta o bug. Feito. Morto. Destruído. Vencido. Manda para as profundezas do inferno com um oitavo da sua sanidade. Isso foi um pouco duro. Você escreve um teste de regressão para ter certeza que não irá acontecer denovo, certo?</p><p>Oh, eu entendo.</p><p>Você comentou no item a fazer do Basecamp dizendo que foi consertado. Eu acho que é um nome procurável, certo? Somente no caso de acontecer denovo. É chamado de &#8220;alguma coisa deu errdo&#8221; ou &#8220;A página está quebrada&#8221;?</p><p>Uh oh.</p><p>Então você vai pra casa, satisfeito que você deu um pé na bunda de um bug que esteve na sua mente por dias. Você venceu.</p><p>Parabéns.</p><p>Você acorda no dia seguinte, pega seu café/leite/suco de laranja e checa seus emails. Há três do facebook, uns dois de algumas listas de email que você está inscrito e catorze do seu cliente. Esses emails não são catorze cartas de amor. Você vê que o primeiro foi enviado para você 20 minutos depois que você foi pra cama. Se você pelo menos ficasse ficado até tarde&#8230;</p><p>Você lê o primeiro. É um relatório de erro. O próximo também. E o próximo depois desse também. E adivinha? O próximo também.</p><p>Todos os catorze emails que seu cliente enviou a você tarde da noite não foram &#8220;Obrigado por seu trabalho fabuloso no site&#8221;, eles tinham o linguajar parecido com &#8220;Por que essa merda está dando pau?&#8221;. Ele acha pagou uma boa grana nisso. Você está feliz sendo pago o quanto que você ganha. De qualquer forma, não faz muito tempo que você está fazendo isso e você tinha que iniciar de algum lugar. As pessoas cometem erros, né?</p><p>Parabéns.</p><p>Agora você tem alguns relatórios de bugs para lidar quando você chegar no trabalho pela manhã. Oito horas por dia, sendo que cada bug leva uns 30 minutos para consertar. Fácil, com tempo de sobra. &#8220;Pfft. Faço até o fim do dia&#8221;, você pensa. Você percebe que um dos relatórios de bug que foi enviado foi um bug que você consertou outro dia. Outro desenvolvedor trabalhando no seu projeto teve um conflito com o arquivo e acidentalmente colocou o código quebrado ao invés do código que estava funcionando. Ok, tudo bem. Você conserta denovo. Talvez você não tenha escrito aquele comentário e você irá inseri-lo aogra. Beleza, isso irá fazer com que eles parem de introduzir o bug denovo.</p><p>Há uma reunião de duas horas com outro cliente no início do dia, deixando você com apenas 6 horas para consertar aqueles bugs até o fim do dia. Você gasta meia hora a mais no almoço. Cinco horas e meia. Mas até o almoço você &#8220;matou&#8221; quatro deles. Você estava um pouco grogue nesta manhã e você achou que aquele almoço iria curar aquele sentimento. Você irá conquistar os outros dez nesta tarde.</p><p>Você não conquista.</p><p>Você terminou quatro, talvez cinco deles e deixou oito, talvez nove bugs consertados. O cliente não está satisfeito. Você fez apenas parte do trabalho. TODOS os bugs eram críticos. Sua empresa é pequena e você é o único com conhecimento do projeto, e, os outros desenvolvedores estão ocupados em seus próprios projetos. O cliente espera&#8230; DEMANDA&#8230; respostas 7 dias por semana, 24 horas por dia.</p><p>Por que você é a puta dele.</p><p>Tudo bem. Então seu chefe o envia um grande email de desculpas dizendo que você irá trabalhar duro no futuro para atender todas as demandas porque você não quer perder este cliente. Ele investiu $30,000 nesta empresa e com a versão 2 do site &#8220;pronta pra ir ao forno&#8221; ele irá investir bem mais.</p><p>Então você volta a corrigir aqueles bugs que faltam. Durante a noite mais três chegaram. O número de bugs agora é oito. Oito horas no dia, oito bugs na lista. Feitos até o fim do dia. Você completa cinco durante seu expediente e dois quando chega em casa, depois do jantar. Você está exausto. Eles levaram o dia todo para serem debugados. Você envia um email para o cliente dizendo que você consertou sete dos oito bugs. Ele te envia um email de volta, vinte minutos depois de você ter ido dormir, naturalmente, dizendo que o último bug &#8220;deixa o site inutilizável&#8221;. Seu chefe vem até você pela manhã e diz que seu trabalho não é bom o bastante. Você não aprecia muito a sugestão dele. Você reclama e diz que consertou treze dos catorze bugs que o cliente enviou no início da semana. Você sente que foi colocado num ritmo de trabalho excepcionalmente duro essa semana. Hoje você completou o décimo quarto, você está muito confiante sobre isso. Ele naturalmente pergunta o porquê de ter catorze bugs. Você não tem uma resposta imediata, embora você pensa em mencionar os testes. Ele continua com seu discurso retórico sobre aquilo que você deveria estar testando o código toda vez que você o coloca em produção. O seu chefe continua com a encheção de saco por uma hora. Você tenta contra argumentar os argumentos dele mas sua visão parece algo de um &#8220;ser superior&#8221; e pela sua falta de experiência você não pode colocar a culpa nele. Ele é o chefe no fim das contas. Ele chegou aqui de alguma forma. Ele tem que estar certo sobre tudo?</p><p>Sua empresa pagou todos estes débitos técnicos que você não tinha orçamento para tal. Todo o processo extra custou um mês a mais e o cliente estourou seu orçamento em $2000. $2000 que ele nunca quis gastar. Ao invés de economizar $2000, ele agora gastou $2000 extra da sua própria conta pessoal para fazer com que o projeto andasse. Ele está falando de deixar sua empresa e ir para uma que pode fazer um trabalho melhor. Este é provavelmente o caso. Seu chefe te chama no canto e te diz como está o projeto. O cliente está saindo. No próximo dia ele demite você.</p><p>Parabéns, Freebird. Você está sem emprego e com muito, muito pouco dinheiro. Uns $2000 é tudo o que você ainda tem. Hora de ir à caça denovo.</p><p>Então como você pode prevenir que algo assim aconteça?</p><p>Você eventualmente pega um novo emprego com uma nova empresa. Você se senta com o cliente e faz as coisas direito. Você cria specs das histórias de usuário usando algo parecido com o Pivotal Tracker. Você é ensinado a escrever testes religiosamente para cada história usando o Cucumber. Não há história sem um teste. Isso reduz o débito técnico a longo prazo Você não tem tantos bugs como você tinha quando não testava com as aplicações anteriores. Embora você ainda tenha alguns bugs, você não irá gastar todas aquelas longas noites os consertando porque você tem testes cobrindo todos eles. Os testes irão mostrar onde alguma coisa deu errado, pois, geralmente, uma parte defeituosa do site significa um teste que não está passando. Viu um bug que não foi coberto por uma história ou teste? Isso acontece algumas vezes, mas você agora tem esse framework fantástico que te dá certeza que não o mesmo erro não irá acontecer denovo: teste de regressão. Escreva o teste. Ele não passa. Conserte o bug. Ele agora passa. Se você ou seu time segue a regra Green is Good, então eles NUNCA MAIS irão reintroduzir este bug. Em teoria. Pessoas cometem erros.</p><p>Então você inicia uma história simples como &#8220;Login de usuário&#8221; e você escreve uma funcionalidade para o cucumber para ela com dois cenários. Um para login e outra para logout. Você escreveu todos os passos para ela mas alguns deles não estão implementados, outros estão quebrados. Isso é devido ao fato que você ainda não escreveu nenhum código para a funcionalidade ainda. Parece meio retrógrado e improdutivo à princípio. Isso é chamado de Desenvolvimento Orientado à Comportamento (Behaviour Driven Development &#8211; BDD). Você está aprendendo BDD e você irá fazer certo de agora pra frente. Você está se tornando um Jedi de BDD. Você implementa cada passo por vez e eventualmente sua funcionalidade está toda verde.</p><p>Pra que você faz isso?</p><p>Para que no futuro, daqui uns três meses, você não veja essa funcionalidade dando pau e não precise trabalhar numa máquina do tempo para voltar e dar um pé na sua bunda.</p><p>Você ainda ganha alguns pontos extra se você estiver usando um servidor de Integração Contínua para garantir que esta funcionalidade e seus eventuais irmãos de testes fiquem verde. Um build falho significa uma aplicação falha e seu único objetivo se aquele build está quebrado é fazer com que ele seja consertado.</p><p>Parabéns.</p><p>Agora você pode marcar como a história como &#8220;terminada&#8221; no Pivotal. Então você pode implanta-la num staging server e marca-la como &#8220;entregue&#8221;. Daí o cliente pode logar no no Pivotal e ver que a história está marcada como &#8220;entregue&#8221; e logar no staging server, testar a feature e apertar aquele amado santo-graal botão &#8220;Aceitar&#8221;. Você quer ver histórias verdes na sua lista do Pivotal. Verde é a cor que você quer ver em todo canto.</p><p>Verde é bom.</p><p>Então a próxima funcionalidade vem aí e envolve uma lógica de controller um pouco mais complexa que retorna um hash JSON. Você pode escrever isso em Cucumber, o você pode escrever um teste para seu controller com o RSpec. Este é o tipo de coisa que é realmente legal para discussões com o time. Você sugere o Jeito A de fazer isso, e talvez outra pessoa do do time irá concordar ou sugerir o Jeito B, e essa adorável dinâmica de discussão de idéias produz um resultado melhor. De qualquer forma, você irá escrever o teste primeiro e então o código. Behaviour Driven Development. Então o teste passa. Então você pode refatorar o código se ele ainda não estiver bom o bastante e ele ainda irá passar. Com certeza você irá se sentir mais devagar no início, mas o motivo disso é que você ainda está aprendendo como fazer. Não lute contra isso. Este tipo de coisa irá te poupar muito tempo no futuro, onde é mais importante. Foque-se mais nos ganhos a longo prazo do que a curto prazo.</p><p>Eventualmente depois dos sete meses e meio você terá todas aquelas histórias do Pivotal Tracker em verde na seção de &#8220;Concluída&#8221; e talvez um ou dois no &#8220;Backlog&#8221; que o cliente quer pronto apenas para a próxima entrega. Você irá rodar todas as specs no seu sistema. Todas elas estão verdes. Você irá rodar todas as funcionalidades. Elas estarão todas verdes. Você irá implantar no server de staging pela última vez nesta release. O cliente adora isso. Você implanta no server de produção e envia os convites. Todo mundo adora isso.</p><p>Mas.</p><p>Há um bug. Entretanto, desta vez você instalou algo tipo o Hoptoad para o erro ir para sua caixa de entrada na mesma hora que ele ocorre. Você é o time de suporte para esta aplicação, NÃO o cliente. Depois de tudo, você ainda está trabalhando numa empresa pequena. O relatório de erros contem uma stacktrace e você pode ver onde deu errado imediatamente. Você escreve um teste/funcionalidade para garantir que este bug jamais aconteça denovo. O teste falha, pois você ainda não consertou o bug. O erro é o mesmo reportado no email do Hoptoad. Você conserta o bug.</p><p>Parabéns. Você escreveu um teste de regressão para o bug com sucesso. Este bug jamais irá ocorrer pelo resto da vida do projeto.</p><p>O cliente está feliz. Seu chefe pergunta se o cliente pode bater um papo com você. Você está fazendo um trabalho excelente. Os outros caras tinham um salário maior que o seu porque você foi contratado como um desenvolvedor Junior. Não mais. Você percorreu um caminho surpreendentemente grande. Agora você é igual. O cliente quer que mais coisas sejam feitas na aplicação. O cliente está querendo que seu chefe vá até o escritório dele na próxima semana. Ele requisitou especificamente que você vá junto também, pois você parece estar &#8220;ligado&#8221;. Você se encontra com o cliente e discute os termos da próxima iteração, uma bem grande. O acordo avança e sua empresa precisa crescer. Massivamente. A aplicação explode, no sentido positivo. Você tem problemas com escalabilidade. Você contrata outros dez caras no próximo ano só para trabalhar nesta aplicação.  Você e uns dois do time original os ensina tudo sobre sua aplicação e o processo que vocês desenvolveram. Então eles irão ensinar outras vinte pessoas que você irá contratar nos próximos seis meses.</p><p>Parabéns. Agora você está fazendo certo.</p><p><strong>UPDATE</strong></p><p>Este post é uma tradução do <a href="http://ryanbigg.com/2010/02/congratulations/" target="_blank">excelente post</a> do <a href="http://ryanbigg.com/" target="_blank">Ryan Bigg</a>. Thank you Ryan!</p><p>Notem que eu não coloquei nenhum link no texto. Como é um texto mais &#8220;educativo&#8221;, eu espero que as pessoas que o lerem tenham a iniciativa de pesquisar os termos desconhecidos por conta própria. Links são muito cômodos e não incentivam a pesquisa <img src='http://herberthamaral.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p><p>Sem posts relacionados.</p>]]></content:encoded> <wfw:commentRss>http://herberthamaral.com/2010/06/parabens/feed/</wfw:commentRss> <slash:comments>2</slash:comments> </item> <item><title>Streaming do Mare de Agilidade na Unimontes</title><link>http://herberthamaral.com/2010/04/streaming-do-mare-de-agilidade-na-unimontes/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=streaming-do-mare-de-agilidade-na-unimontes</link> <comments>http://herberthamaral.com/2010/04/streaming-do-mare-de-agilidade-na-unimontes/#comments</comments> <pubDate>Fri, 23 Apr 2010 11:19:50 +0000</pubDate> <dc:creator>Herberth Amaral</dc:creator> <category><![CDATA[Eventos]]></category> <category><![CDATA[agile]]></category> <category><![CDATA[palestras]]></category> <category><![CDATA[infobits]]></category> <category><![CDATA[maré de agilidade]]></category> <category><![CDATA[scrum]]></category> <category><![CDATA[unimontes]]></category> <category><![CDATA[xp]]></category><guid isPermaLink="false">http://herberthamaral.com/?p=385</guid> <description><![CDATA[Nos dias 20, 21 e 22 de maio de 2010, o Maré de Agilidade reúne em Belo Horizonte palestras, mini-cursos e workshops com a temática de metodologias ágeis. Participam do evento grandes nomes do segmento, sempre com o apoio de empresas e instituições de destaque no mercado de metodologias ágeis Infelizmente, as vagas para o [...]]]></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%2Fherberthamaral.com%2F2010%2F04%2Fstreaming-do-mare-de-agilidade-na-unimontes%2F"> <img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fherberthamaral.com%2F2010%2F04%2Fstreaming-do-mare-de-agilidade-na-unimontes%2F&amp;source=HerberthAmaral&amp;style=normal" height="61" width="50" /> </a></div><blockquote><p>Nos dias 20, 21 e 22 de maio de 2010, o Maré de Agilidade reúne em Belo Horizonte palestras, mini-cursos e workshops com a temática de metodologias ágeis. Participam do evento grandes nomes do segmento, sempre com o apoio de empresas e instituições de destaque no mercado de metodologias ágeis</p></blockquote><p>Infelizmente, as vagas para o Maré de BH já estão esgotadas. Mas a boa notícia é que haverá o streaming do evento (da mesma forma que aconteceu com o <a href="http://herberthamaral.com/2010/02/flex-for-kids-foi-10/" target="_blank">Flex For Kids</a>) na <a href="http://unimontes.br">Unimontes</a>!</p><p>Para participar é super simples: basta se inscrever no evento e apresentar o comprovante de pagamento no dia (sábado, 22 de Maio).</p><p>O streaming acontecerá na Unimontes, muito provavelmente no auditório do CCET (mesmo lugar do Flex For Kids. Poderá acontecer também na sala da Infobits, dependendo do número de participantes).</p><p>Viste a <a href="http://www.maredeagilidade.com.br/eventos/belo_horizonte/05_2009/index.html" target="_blank">página oficial</a> do evento e <a href="http://twitter.com/maredeagilidade" target="_blank">siga-os no Twitter</a> para mais informações.</p><p><h4>Posts relacionados:</h4><ol><li><a href='http://herberthamaral.com/2009/12/codingdojo-na-unimontes/' rel='bookmark' title='Permanent Link: CodingDojo na Unimontes!'>CodingDojo na Unimontes!</a></li></ol></p>]]></content:encoded> <wfw:commentRss>http://herberthamaral.com/2010/04/streaming-do-mare-de-agilidade-na-unimontes/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Testes unitarios no Flex usando o FlexUnit 4</title><link>http://herberthamaral.com/2010/01/testes-unitarios-no-flex-usando-o-flexunit-4/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=testes-unitarios-no-flex-usando-o-flexunit-4</link> <comments>http://herberthamaral.com/2010/01/testes-unitarios-no-flex-usando-o-flexunit-4/#comments</comments> <pubDate>Thu, 28 Jan 2010 14:12:08 +0000</pubDate> <dc:creator>Herberth Amaral</dc:creator> <category><![CDATA[Flex & Actionscript]]></category> <category><![CDATA[agile]]></category> <category><![CDATA[tdd]]></category> <category><![CDATA[flex]]></category> <category><![CDATA[flex builder]]></category> <category><![CDATA[flexunit 4]]></category> <category><![CDATA[integração contínua]]></category> <category><![CDATA[tutorial]]></category><guid isPermaLink="false">http://herberthamaral.com/?p=179</guid> <description><![CDATA[O FlexUnit 4 é a mais nova versão (não tem a oficial, só a RC, por enquanto) e apresenta uma série de vantagens sobre o seu antecessor, o FlexUnit 0.9, como os metadados de teste ([Test], [After] e [Before], para citar as mais populares), Theories, DataPoints e Assumptions que são úteis para testar grandes quantidades [...]]]></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%2Fherberthamaral.com%2F2010%2F01%2Ftestes-unitarios-no-flex-usando-o-flexunit-4%2F"> <img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fherberthamaral.com%2F2010%2F01%2Ftestes-unitarios-no-flex-usando-o-flexunit-4%2F&amp;source=HerberthAmaral&amp;style=normal" height="61" width="50" /> </a></div><p>O FlexUnit 4 é a mais nova versão (não tem a oficial, só a RC, por enquanto) e apresenta uma série de vantagens sobre o seu antecessor, o FlexUnit 0.9, como os metadados de teste ([Test], [After] e [Before], para citar as mais populares), Theories, DataPoints e Assumptions que são úteis para testar grandes quantidades (talvez até infinita) de dados e ver como a aplicação se comporta e a possibilidade de executar os testes com diferentes Runners.</p><p>Este tutorial tem como objetivo mostrar o básico de testes unitários no Flex, sem se aprofundar muito nos recursos avançados do framework de testes.  Eu pretendo ir postando mais tutoriais à medida que eu for me aprofundando na tecnologia.</p><p><strong>O setup</strong></p><p>Para usar o FlexUnit4, você precisa baixa-lo <a href="http://opensource.adobe.com/wiki/display/flexunit/Downloads" target="_blank">aqui</a>. Após isso, crie um projeto no Flex Builder e adicione todas as libs que vieram no pacote no seu diretório libs:<br /> <a href="http://herberthamaral.com/wp-content/uploads/2010/01/flex_new_project.png"><img class="aligncenter size-full wp-image-180" title="flex_new_project" src="http://herberthamaral.com/wp-content/uploads/2010/01/flex_new_project.png" alt="" width="680" height="591" /></a></p><div id="attachment_182" class="wp-caption aligncenter" style="width: 275px"><a href="http://herberthamaral.com/wp-content/uploads/2010/01/flex_navigator1.png"><img class="size-full wp-image-182" title="flex_navigator" src="http://herberthamaral.com/wp-content/uploads/2010/01/flex_navigator1.png" alt="" width="265" height="308" /></a><p class="wp-caption-text">Verifique se todas as libs estão lá</p></div><p>Como o bom e velho TDD manda, vamos primeiro escrever a classe de teste de exemplo antes de escrever nosso código de produção.</p><p><strong>A classe de teste</strong></p><p>Uma classe de testes é uma classe comum que usa a classe Assert para fazer asserções. No exemplo que irei mostrar, usarei dois tipos básicos de asserção, mas se você observar, o FlexUnit possui vários tipos diferentes de asserções:</p><pre class="brush:java">package tests
{
	import org.flexunit.Assert;
	import org.flexunit.runner.manipulation.filters.IncludeAllFilter;

	import production.BasicClass;

	public class BasicTests
	{
		public function BasicTests(){}
		private var basicClass:BasicClass;

		[Before]
		public function before():void
		{
			basicClass = new BasicClass();
		}

		[Test]
		public function Verifica_Se_As_Duas_Strings_Sao_Iguais():void
		{
			var str:String = "MinhaString";
			Assert.assertTrue(basicClass.areStringsEqual(str,"MinhaString"));
		}

		[Test]
		public function Verifica_Se_A_Soma_Retorna_Resultado_Correto():void
		{
			var soma:int = 10;
			Assert.assertEquals(soma,basicClass.somar(2,8));
		}

		[After]
		public function after():void
		{
			//codigo de after
		}

	}
}</pre><p><strong>A suíte de teste</strong></p><p>A suíte de testes inclui nosso caso de teste descrito acima e será útil para o Flex executar nossos testes. Sendo assim, nossa suíte de testes ficaria mais ou menos desse jeito:</p><pre class="brush:java">package tests
{
	[Suite]
	[RunWith("org.flexunit.runners.Suite")]
	public class MyTestSuite
	{
		public var baseTest:BasicTests;
		public function MyTestSuite(){}

	}
}</pre><p><strong>UITestRunner e o FlexUnitCore</strong></p><p>O UITestRunner é um componente do FlexUnit que mostra os testes numa interface gráfica. Ele ficará na nossa aplicação e mostrará os resultados dos testes.</p><p>O FlexUnitCore será o responsável por carregar as suítes de teste e por passar os dados de saída de testes para o UITestRunner. No nosso caso, nossa aplicação principal ficaria assim:</p><pre class="brush:xml">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="run()" layout="absolute" xmlns:flexUnitUIRunner="http://www.adobe.com/2009/flexUnitUIRunner"&gt;
    &lt;mx:Script&gt;
    &lt;![CDATA[
       import tests.MyTestSuite;
       import org.flexunit.listeners.UIListener;
       import org.flexunit.runner.FlexUnitCore;

       public var core:FlexUnitCore;
       public function run():void
       {
           core = new FlexUnitCore();
           core.addListener(new UIListener(uiRunner));
           core.run(MyTestSuite);
      }
    ]]&gt;
   &lt;/mx:Script&gt;
   &lt;flexUnitUIRunner:TestRunnerBase id="uiRunner"  width="100%" height="100%"/&gt;
&lt;/mx:Application&gt;</pre><p><strong>O código de produção</strong></p><p>Ufa! Depois de escrever a classe de teste, a suíte de teste e o runner, podemos nos focar em fazer nosso código de produção <img src='http://herberthamaral.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Dêem uma olhada em como ficaria o dito:</p><pre class="brush:java">package production
{
	public class BasicClass
	{
		public function BasicClass(){}

		public function areStringsEqual(string1:String,string2:String):Boolean
		{
			return (string1==string2);
		}

		public function somar(valor1:int,valor2:int):int
		{
			return valor1+valor2;
		}

	}
}</pre><p><strong>E Voilà!</strong></p><p>Depois de tudo pronto, a cara da criança ficaria mais ou menos assim:</p><p><a href="http://herberthamaral.com/wp-content/uploads/2010/01/ui_runner.png"><img class="aligncenter size-medium wp-image-190" title="ui_runner" src="http://herberthamaral.com/wp-content/uploads/2010/01/ui_runner-300x177.png" alt="" width="300" height="177" /></a></p><p>Legal, não? E ainda dá pra fazer com que o FlexUnit4 exporte o resultado dos testes para um arquivo XML, permitindo que seus testes no Flex sejam importados pelo seu sistema de Integração Contínua, mas isso é assunto para outro post <img src='http://herberthamaral.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p><p>Você pode baixar o código fonte <a href="http://herberthamaral.com/wp-content/tutoriais/flexunit4/UsandoFlexUnit4.zip" target="_blank">aqui</a> e ver os exemplos rodando online <a href="http://herberthamaral.com/wp-content/tutoriais/flexunit4/" target="_blank">aqui</a>.</p><p>Good testing!</p><p>Sem posts relacionados.</p>]]></content:encoded> <wfw:commentRss>http://herberthamaral.com/2010/01/testes-unitarios-no-flex-usando-o-flexunit-4/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>DojoMoc #5 &#8211; O mais emocionante de todos</title><link>http://herberthamaral.com/2010/01/dojomoc-5-o-mais-emocionante-de-todos/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=dojomoc-5-o-mais-emocionante-de-todos</link> <comments>http://herberthamaral.com/2010/01/dojomoc-5-o-mais-emocionante-de-todos/#comments</comments> <pubDate>Wed, 27 Jan 2010 02:28:56 +0000</pubDate> <dc:creator>Herberth Amaral</dc:creator> <category><![CDATA[JavaScript]]></category> <category><![CDATA[News]]></category> <category><![CDATA[agile]]></category> <category><![CDATA[coding dojo]]></category> <category><![CDATA[tdd]]></category> <category><![CDATA[dojomoc]]></category><guid isPermaLink="false">http://herberthamaral.com/?p=174</guid> <description><![CDATA[Hoje nos reunimos na Unimontes para realização de mais um Coding Dojo. No total foram quatro pessoas: Diego Caxito Elvis (não, ele não morreu Diego Guimarães eu A linguagem escolhida foi o JavaScript (\o/) e usamos o QUnit como suíte de testes. Apesar de todo o esforço do setup inicial do nosso caso de teste, [...]]]></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%2Fherberthamaral.com%2F2010%2F01%2Fdojomoc-5-o-mais-emocionante-de-todos%2F"> <img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fherberthamaral.com%2F2010%2F01%2Fdojomoc-5-o-mais-emocionante-de-todos%2F&amp;source=HerberthAmaral&amp;style=normal" height="61" width="50" /> </a></div><p>Hoje nos reunimos na Unimontes para realização de mais um Coding Dojo. No total foram quatro pessoas:</p><ol><li>Diego Caxito</li><li>Elvis (não, ele não morreu <img src='http://herberthamaral.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></li><li>Diego Guimarães</li><li>eu</li></ol><p>A linguagem escolhida foi o JavaScript (\o/) e usamos o QUnit como suíte de testes. Apesar de todo o esforço do setup inicial do nosso caso de teste, o pessoal gostou bastante de fazer testes usando o QUnit.</p><p><strong>O problema</strong></p><p>Resolvemos escolher o problema na hora (inclusive, esse foi um dos motivos pelos quais nos atrasamos). O problema escolhido foi o <a href="http://codekata.pragprog.com/2007/01/code_kata_fifte.html" target="_blank">A Diversion</a>, um problema simples aparentemente, mas que nos deu um pouco de trabalho, principalmente na hora de explicar.</p><p>Os testes rodaram bem no Chrome 4 e no Internet Explorer 8. Como rodou no IE8, dá até pra considerar o código à prova de balas <img src='http://herberthamaral.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p><p>Os testes possuem uma versão online disponível <a href="http://herberthamaral.com/wp-content/dojo/5/" target="_blank">aqui</a>. Pra quem quiser baixar, o link é <a href="http://herberthamaral.com/wp-content/dojo/5/dojomoc_5.zip">esse</a>.</p><p><strong>A emoção</strong></p><p>Tivemos que quebrar o problema principal em 3 problemas de menor tamanho para conseguirmos resolver. A última parte consistia em fazer um conversor decimal-binário na mão! Eu até tentei sugerir pra que pegássemos um pronto na net e focássemos mais na resolução do problema, mas a galera quis ser matuta. E foi bom assim, pois deixou o problema muito mais divertido.</p><p>Além do mais, é a primeira vez que trabalhamos com uma linguagem dinâmica no DojoMoc. Espero que se torne preferência da galera trabalhar com linguagens dinâmicas, pois, na minha opinião, facilita o trabalho.</p><p>Uma coisa que deu mais emoção ainda foi ter feito tudo usando o Notepad++ sem o langs.xml estar funcionando direito. Foi a primeira vez que não usamos uma IDE <img src='http://herberthamaral.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /></p><p>E pra completar: dos 5 Dojos que fizemos até hoje, nós só conseguimos resolver o problema em duas vezes. O de hoje foi uma dessas vezes. Parabéns pra galera!</p><p>Não vai dar pra postar a nossa retrospectiva aqui agora porque os post-its ficaram com o Diego Caxito, mas em breve estaremos disponibilizando mais informações sobre o nosso Dojo de hoje no <a href="http://dojomoc.wordpress.com" target="_blank">blog oficial</a>.</p><p>É isso aí pessoal, até a próxima!</p><p><h4>Posts relacionados:</h4><ol><li><a href='http://herberthamaral.com/2010/01/dojomoc-4-se-voce-nao-foi-voce-perdeu/' rel='bookmark' title='Permanent Link: DojoMoc #4 &#8211; Se voce não foi, voce perdeu!'>DojoMoc #4 &#8211; Se voce não foi, voce perdeu!</a></li></ol></p>]]></content:encoded> <wfw:commentRss>http://herberthamaral.com/2010/01/dojomoc-5-o-mais-emocionante-de-todos/feed/</wfw:commentRss> <slash:comments>7</slash:comments> </item> <item><title>Como voce testa seu JavaScript?</title><link>http://herberthamaral.com/2010/01/como-voce-testa-seu-javascript/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=como-voce-testa-seu-javascript</link> <comments>http://herberthamaral.com/2010/01/como-voce-testa-seu-javascript/#comments</comments> <pubDate>Mon, 25 Jan 2010 01:57:02 +0000</pubDate> <dc:creator>Herberth Amaral</dc:creator> <category><![CDATA[JavaScript]]></category> <category><![CDATA[agile]]></category> <category><![CDATA[tdd]]></category> <category><![CDATA[integração contínua]]></category><guid isPermaLink="false">http://herberthamaral.com/?p=168</guid> <description><![CDATA[Testes unitários é um assunto muito comum hoje em dia entre desenvolvedores. Mas somente assunto, pois apenas 2% dos desenvolvedores escrevem testes. Depois de ler o post do Giovanni Bassi, eu queria saber: quanto desses 2% que escrevem testes para suas aplicações desenvolvem E escrevem testes em JavaScript? É, acho que entrei num ponto crítico [...]]]></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%2Fherberthamaral.com%2F2010%2F01%2Fcomo-voce-testa-seu-javascript%2F"> <img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fherberthamaral.com%2F2010%2F01%2Fcomo-voce-testa-seu-javascript%2F&amp;source=HerberthAmaral&amp;style=normal" height="61" width="50" /> </a></div><p><a href="http://herberthamaral.com/wp-content/uploads/2010/01/qunit.png"></a>Testes unitários é um assunto muito comum hoje em dia entre desenvolvedores. Mas somente assunto, pois <a href="http://unplugged.giggio.net/unplugged/post/TDD-nao-existe.aspx" target="_blank">apenas 2% dos desenvolvedores escrevem testes</a>. Depois de ler o post do Giovanni Bassi, eu queria saber: quanto desses 2% que escrevem testes para suas aplicações desenvolvem <strong>E </strong>escrevem testes em JavaScript?</p><p>É, acho que entrei num ponto crítico aqui. Nas minhas pesquisas sobre <a href="http://en.wikipedia.org/wiki/Test-driven_development" target="_blank">TDD</a> , eu vi muita documentação para Java, .NET, Python, Ruby, PHP, Flex e Silverlight, mas é raro ver alguem falar de JavaScript. Será se são os devs que acham que JavaScript é coisa de menino ou é realmente difícil de testar apps em JS?</p><p><strong>A dificuldade</strong></p><p>Não há um único ambiente de testes para JavaScript. Há divergência entre os interpretadores que estão presentes em cada browser, o que nos obriga a testar em todos eles (ou pelo menos nos mais populares). IE, Firefox, Safari e Google Chrome são os mais comuns. Isso sem contar os browsers para Smartphones.</p><p>Imagine um desenvolvedor que esteja acostumado com o JUnit, NUnit, PHPUnit ou outros xUnit da vida, onde é necessário o mínimo de esforço para fazer testes. Agora imagine esse mesmo desenvolvedor abrindo 3 browsers diferentes e apertando F5 a cada vez que ele escreve um teste. Não tiro a razão de não testar JavaScript&#8230;. é simplesmente chato&#8230;</p><p>Há bibliotecas de teste que ajudam no desenvolvimento dos testes, como é o caso do js-test-driver, JSPec e JSUnit, por exemplo. Essas ferramentas têm recursos para fazer os testes rodarem em vários browsers através da linha de comando, mas todas elas possuem inconvenientes graves. O js-test-driver não suporta HTML <a href="http://en.wikipedia.org/wiki/Test_fixture" target="_blank">fixtures</a>, ou seja, se você quer testar alguma função em JavaScript que envolva manipulação do DOM, você terá que escrever o código HTML dentro do código JS. O JSUnit exige que você carregue cada caso de teste em JS dentro de um HTML. Além de ter de ficar escrevendo HTML toda hora na mão, ele não possui uma boa ferramenta de testes pela linha de comando. O JSPec parece funcionar muito bem. É o meu sonho de consumo atualmente: suporta fixtures, boa separação HTML/JS, Ajax <a href="http://en.wikipedia.org/wiki/Mock_object">Mocking</a>, suporte à ferramentas de integração contínua e tem um conjunto de Shell Scripts que funcionam muito bem em um Unix.<strong> Somente em Unix.</strong></p><p>A coisa é tão crítica que essa semana eu estava reparando isso na página do <a href="http://docs.jquery.com/QUnit" target="_blank">QUnit</a>:</p><p style="text-align: center;"><a href="http://herberthamaral.com/wp-content/uploads/2010/01/qunit.png"><img class="aligncenter" title="qunit" src="http://herberthamaral.com/wp-content/uploads/2010/01/qunit.png" alt="" width="614" height="509" /></a></p><p style="text-align: left;">Quantos plugins que o jQuery tem? Vários, correto? Alguem pode explicar o porquê de <strong>somente </strong>o plugin de validação do jQuery ter testes decentes? Acho que isso ajuda a mostrar o quanto é difícil de testar JavaScript.</p><p style="text-align: left;"><strong>A solução e o futuro</strong></p><p style="text-align: left;">Bem, no atual estado da arte das ferramentas de testes unitários de JavaScript, nós temos que nos sujeitar à uns procedimentos um tanto quanto chatos se quisermos testar nossas aplicações. Felizmente, há projetos muito ativos e muito bons que eu pude ver (js-test-driver e JSPec, principalmente) que estão avançando. Eu espero que o js-test-driver dê suporte a loading de HTML fixtures assim como o JSPec suporte plataformas Microsoft (sim, eu ainda desenvolvo em Windows) em um futuro próximo (assim como eu espero que eu cumpra a promessa de ajudar nesses projetos).</p><p style="text-align: left;">Você que está lendo esse texto já teve o mesmo tipo de experiência? O que achou? Conseguiu solucionar alguns dos problemas que eu citei aqui? Então saia do modo read-only e comente <img src='http://herberthamaral.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /></p><p><h4>Posts relacionados:</h4><ol><li><a href='http://herberthamaral.com/2010/03/o-que-fazer-quando-seu-codigo-javascript-se-torna-um-monstro/' rel='bookmark' title='Permanent Link: O que fazer quando seu codigo JavaScript se torna um monstro'>O que fazer quando seu codigo JavaScript se torna um monstro</a></li></ol></p>]]></content:encoded> <wfw:commentRss>http://herberthamaral.com/2010/01/como-voce-testa-seu-javascript/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Banindo a procrastinacao: O Manifesto do Culto ao Pronto.</title><link>http://herberthamaral.com/2009/12/banindo-a-procrastinacao-o-manifesto-do-culto-ao-pronto/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=banindo-a-procrastinacao-o-manifesto-do-culto-ao-pronto</link> <comments>http://herberthamaral.com/2009/12/banindo-a-procrastinacao-o-manifesto-do-culto-ao-pronto/#comments</comments> <pubDate>Thu, 31 Dec 2009 23:04:58 +0000</pubDate> <dc:creator>Herberth Amaral</dc:creator> <category><![CDATA[agile]]></category> <category><![CDATA[pomodoro]]></category> <category><![CDATA[produtividade]]></category><guid isPermaLink="false">http://herberthamaral.com/?p=141</guid> <description><![CDATA[Procrastinação é a arte de enrolar. É o que te faz assistir aquele episódio da sua série favorita quando você tem um trabalho chato pra fazer. Infelizmente, não há como ser imune à procrastinação.  Todos nós procrastinamos, em um nível ou outro. Esse post trata sobre O manifesto do culto ao pronto, uma série 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%2Fherberthamaral.com%2F2009%2F12%2Fbanindo-a-procrastinacao-o-manifesto-do-culto-ao-pronto%2F"> <img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fherberthamaral.com%2F2009%2F12%2Fbanindo-a-procrastinacao-o-manifesto-do-culto-ao-pronto%2F&amp;source=HerberthAmaral&amp;style=normal" height="61" width="50" /> </a></div><p>Procrastinação é a arte de enrolar. É o que te faz assistir aquele episódio da sua série favorita quando você tem um trabalho chato pra fazer. Infelizmente, não há como ser imune à procrastinação.  Todos nós procrastinamos, em um nível ou outro. Esse post trata sobre <em>O manifesto do culto ao pronto,</em> uma série de dicas e regras simples que visam diminuir o nosso nível de procrastinação.</p><p>Pra mim, a procrastinação aparece quando falta uma coisa: disciplina. Quando nossos pais ainda mandam no nosso nariz, eles nos fazem &#8220;andar na linha&#8221;. Eles cobram, brigam e castigam para termos disciplina. Depois que crescemos, essa influência paternal impondo disciplina diminui, o que nos dá mais liberdade.</p><p>Aí que está o problema: nós não sabemos lidar com a liberdade. É muito bom saber que se pode fazer o que quiser quando quiser, mas será que estaremos realmente <em>fazendo algo? </em>Antes nós tínhamos nossos pais. Agora é quem? Por causa disso, precisamos de algumas regras para conseguirmos aproveitar a liberdade que nos foi dada de um jeito mais produtivo. Algumas dessas regras eu encontrei no<em> <a href="http://www.brepettis.com/blog/2009/3/3/the-cult-of-done-manifesto.html" target="_blank">The Cult Of Done Manifesto</a>.</em></p><p><em> </em></p><p><em> </em></p><p><a href="http://www.brepettis.com/blog/2009/3/3/the-cult-of-done-manifesto.html"><img class="aligncenter size-large wp-image-142" title="3327377382_be705a4089_o" src="http://herberthamaral.com/wp-content/uploads/2009/12/3327377382_be705a4089_o-787x1024.png" alt="" width="700" height="1000" /></a></p><p>Vamos ao manifesto:</p><ol><li>Há três estados do ser: não saber, ação e realização.</li><li>Aceite que tudo é um rascunho. Isso ajuda a terminar.</li><li>Não há estágio de edição.</li><li>Fingir que você sabe o que está fazendo é quase a mesma coisa de saber o que você está fazendo. Então aceite que você sabe o que está fazendo, mesmo que não saiba, e faça.</li><li>Banir a procrastinação: se você demorar mais de uma semana para ao menos iniciar algo, descarte-o.</li><li>O ponto de estar pronto não é pra terminar, mas para fazer outras coisas.</li><li>Uma vez que você terminou uma tarefa, você pode descarta-la (e partir para próxima).</li><li>Ria da perfeição. Ela é entediante e lhe impede de terminar as coisas.</li><li>Pessoas sem as mãos sujas estão erradas. Fazer algo te torna certo.</li><li>Falhas contam como pronto. Então cometa erros.</li><li>Destruição é uma variação de pronto.</li><li>Se você tem uma idéia e a publica na Internet, isso conta como um fantasma do pronto.</li><li>Pronto é o motor de mais coisas prontas.</li></ol><p><span style="font-style: normal;">É um manifesto simples, mas que vai direto ao ponto. Ele levou 20 minutos para ser feito, pois os autores não tinham mais tempo para faze-lo.</span></p><p><span style="font-style: normal;">Espero que todos tenham um 2010 com o mínimo de procrastinação possível <img src='http://herberthamaral.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </span></p><p><span style="font-style: normal;"><em>See ya.</em></span></p><p>Sem posts relacionados.</p>]]></content:encoded> <wfw:commentRss>http://herberthamaral.com/2009/12/banindo-a-procrastinacao-o-manifesto-do-culto-ao-pronto/feed/</wfw:commentRss> <slash:comments>7</slash:comments> </item> <item><title>Foco e produtividade &#8211; A tecnica do Pomodoro.</title><link>http://herberthamaral.com/2009/12/foco-e-produtividade-a-tecnica-do-pomodoro/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=foco-e-produtividade-a-tecnica-do-pomodoro</link> <comments>http://herberthamaral.com/2009/12/foco-e-produtividade-a-tecnica-do-pomodoro/#comments</comments> <pubDate>Tue, 22 Dec 2009 01:07:15 +0000</pubDate> <dc:creator>Herberth Amaral</dc:creator> <category><![CDATA[Misc]]></category> <category><![CDATA[agile]]></category> <category><![CDATA[nerdson]]></category> <category><![CDATA[pomodoro]]></category> <category><![CDATA[produtividade]]></category><guid isPermaLink="false">http://herberthamaral.com/?p=120</guid> <description><![CDATA[Quem nunca passou por uma situação parecida com essa aí de cima que jogue a primeira pedra! 1 &#8211; O problema Esse tipo de situação acontece com muitos profissionais todos os dias. E, no meu ver, o principal problema é a liberdade. Digo, não a liberdade em si, mas o seu mau aproveitamento. Muitos 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%2Fherberthamaral.com%2F2009%2F12%2Ffoco-e-produtividade-a-tecnica-do-pomodoro%2F"> <img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fherberthamaral.com%2F2009%2F12%2Ffoco-e-produtividade-a-tecnica-do-pomodoro%2F&amp;source=HerberthAmaral&amp;style=normal" height="61" width="50" /> </a></div><p style="text-align: center;"><p style="text-align: center;"><em> </em></p><div id="attachment_121" class="wp-caption aligncenter" style="width: 610px"><a href="http://nerdson.com/blog/deficit/"><img class="size-full wp-image-121" title="Foco" src="http://herberthamaral.com/wp-content/uploads/2009/12/nerdson200.png" alt="" width="600" height="250" /></a><p class="wp-caption-text">O que?! Vai dizer que você caiu nessa denovo?</p></div><p style="text-align: center;"><p style="text-align: left;">Quem nunca passou por uma situação parecida com essa aí de cima que jogue a primeira pedra!</p><h4>1 &#8211; O problema</h4><p style="text-align: left;">Esse tipo de situação acontece com muitos profissionais todos os dias. E, no meu ver, o principal problema é a liberdade. Digo, não a liberdade em si, mas o seu mau aproveitamento. Muitos de nós, profissionais de TI, não somos questionados sobre o que estamos acessando e que horas estamos acessando, desde que entreguemos tudo no prazo. Daí você já viu: hora extra, noites sem dormir e finais de semana em casa para cumprir com aquele prazo&#8230;</p><p style="text-align: left;">Várias metodologias foram criadas para sanar o problema da procrastinação. Uma delas é o famoso <a href="http://en.wikipedia.org/wiki/Getting_Things_Done" target="_blank">Getting Things Done (GTD) </a>ou no seu título em português: <em>A arte de fazer acontecer. </em>O GTD tem seus pontos fortes e fracos. Dos pontos fortes, o principal é que ele fornece um &#8220;framework&#8221; para organização de vários níveis de tempo: desde de como vai ser cada hora do seu dia até planos para daqui dez anos. O ponto fraco é quase o mesmo que dá o ponto forte, pois, por ser um &#8220;framework&#8221;, ele é genérico. A maioria das coisas que eu li nele são simplesmente frutos do bom senso comum.</p><h4>2 &#8211; A Técnica do Pomodoro</h4><p style="text-align: left;">A técnica do pomodoro é um pouco diferente. Ela é simplesmente prática, vai direto ao ponto e é bem simples: você trabalha 25 minutos, pausa 5, trabalha mais 25 e pausa mais 5 e assim por diante. Cada 25 minutos corresponde a um <em>Pomodoro. </em>Depois de 4 pomodoros, você pode fazer uma pausa maior (25 minutos).</p><p style="text-align: left;">Cada <em>Pomodoro </em>é<em> </em>indivisível, ou seja, você não olha seu Twitter, email, chat ou responde à sua mãe quando ela pede uma sugestão pro almoço durante estes 25 minutos. Totalmente focado no trabalho. A mágica da técnica do <em>Pomodoro</em> é que você sabe que você terá seus 5 minutinhos de descanso pra olhar seu Twitter, seu email, zuar o colega do lado e talvez até beber uma água (e esse tempo geralmente dá pra fazer isso tudo! Experiência própria.)</p><p style="text-align: left;">Essa explanação foi bem básica. Você pode conferir mais detalhes <a href="http://www.pomodorotechnique.com" target="_blank">no livro disponível gratuitamente em PDF.</a></p><h4>3 &#8211; Um pouco de história</h4><p style="text-align: left;">A técnica foi criada por um sujeito italiano chamado <a href="http://cirillosscrapbook.wordpress.com/" target="_blank">Francesco Cirillo</a>. O Francesco estava passando por maus bocados com os estudos pois ele não conseguia se concentrar nos estudos. Foi aí que ele olhou pra cima de sua geladeira, viu um <em>Pomodoro </em>(aqueles timers em forma de tomate que são usados na cozinha) e pensou consigo mesmo: &#8220;Será se eu consigo me concentrar só nisso durante 10 minutos?&#8221;. Dito e feito. O sujeito pegou o timer, ajustou pra 10 minutos e desceu a lenha no livro. Wow! E ele conseguiu se concentrar por 10 minutos.</p><p style="text-align: left;"><div id="attachment_132" class="wp-caption aligncenter" style="width: 293px"><a href="http://herberthamaral.com/wp-content/uploads/2009/12/pomodoro.png"><img class="size-full wp-image-132" title="pomodoro" src="http://herberthamaral.com/wp-content/uploads/2009/12/pomodoro.png" alt="" width="283" height="241" /></a><p class="wp-caption-text">Vai um tomatinho aí?</p></div><p style="text-align: left;">O episódio descrito acima aconteceu em meados da década de 1980. De lá pra cá, ele vem experimentando diferentes <em>timeboxes</em> (diferentes tempos para o <em>Pomodoro</em>), também vem ministrando palestras e organizando workshops e chegou na conclusão que 25 minutos é o tempo que funciona bem para maioria das pessoas. Mas isso é somente um conselho, você pode colocar um <em>timebox</em> mais curto ou mais longo, dependendo da sua necessidade.</p><h4>4 &#8211; Mãos à massa! Já!</h4><p style="text-align: left;">Com o GTD você tem N desculpas para procrastinar. Com o Pomodoro não. São apenas 25 minutos, o que é que lhe custa? Teste por uma ou duas horas e veja qual foi o resultado.</p><p style="text-align: left;">Há pessoas que tem dificuldade (ou preguiça) de fazer a lista de tarefas e ainda sim utilizam a técnica do Pomodoro. Elas conseguem sucesso porque conseguem eliminar a <strong>ansiedade</strong>. Elas sabem que terão os 5 minutinhos pra fazer o que está em segundo plano e sabem que isso irá faze-las render no trabalho.</p><h4>5 &#8211; Minha experiência</h4><p style="text-align: left;">No início é cansativo. Os 25 minutos não parecem passar nunca e os 5 minutos são simplesmente muito curtos. Dá vontade de desistir. &#8220;Po, isso não é humano&#8221;, pensei eu. Mas depois de dois dias de trabalho utilizando a técnica eu já consegui me acostumar.</p><p style="text-align: left;">Hoje eu tenho 4 meses de <em>Pomodoro. </em>Cinco minutos é tempo suficiente pra fazer muita coisa. De fato, 5 minutos hoje parecem mais suficiente para muita coisa. Eu tenho um nível de produtividade que eu invejável pelo Herberth de 4 ou 5 meses atrás, não sofro mais da ansiedade do email não lido ou do tweet não respondido, não tenho medo de ignorar o Google Talk (tem uma parte do livro que fala como lidar com interrupções, é bem interessante) e meu serviço rende bem mais.</p><p style="text-align: left;">O mais legal de tudo é quando as pessoas começam a sincronizar pomodoros. Além de divertido, essa forma de fazer as coisas ajuda para que você não desista.</p><h4>6 &#8211; Timers para o Pomodoro</h4><p style="text-align: left;">Bem, eu imagino que a maioria das pessoas que estão lendo esse post não tem um timer de cozinha. Então, há alguns programinhas legais para ajudar você a praticar a técnica do Pomodoro. Segue a lista de alguns deles:</p><ul><li><a href="http://code.google.com/p/pomodairo/" target="_blank">Pomodairo</a></li><li><a href="http://pomodo.areacriacoes.com.br/" target="_blank">Pomodo</a></li><li><a href="http://www.focusboosterapp.com/live.cfm" target="_blank">Focus booster</a></li></ul><p>(Essa lista pode aumentar. Comente esse post se você achar um que não está listado aqui).</p><p>Galera, acho que é isso. Bom Pomodoro pra vocês também!</p><p><em>P.S: Esse post foi escrito com 2 pomodoros e duas interrupções. Nesse meio tempo eu tive 14 tweets não lidos (thank you, <a href="https://chrome.google.com/extensions/detail/encaiiljifbdbjlphpgpiimidegddhic" target="_blank">ChromedBird</a></em><em>), 4 emails a mais na minha caixa de entrada, duas conversas não respondidas no Google Talk e minha mãe realmente pediu uma sugestão para a janta <img src='http://herberthamaral.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </em></p><p>Sem posts relacionados.</p>]]></content:encoded> <wfw:commentRss>http://herberthamaral.com/2009/12/foco-e-produtividade-a-tecnica-do-pomodoro/feed/</wfw:commentRss> <slash:comments>9</slash:comments> </item> <item><title>&#8220;A gente nao quer so codigo&#8230; a gente quer codigo, controle de versao e bug track&#8221;</title><link>http://herberthamaral.com/2009/12/a-gente-nao-quer-so-codigo-a-gente-quer-codigo-controle-de-versao-e-bug-track/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=a-gente-nao-quer-so-codigo-a-gente-quer-codigo-controle-de-versao-e-bug-track</link> <comments>http://herberthamaral.com/2009/12/a-gente-nao-quer-so-codigo-a-gente-quer-codigo-controle-de-versao-e-bug-track/#comments</comments> <pubDate>Thu, 10 Dec 2009 09:18:42 +0000</pubDate> <dc:creator>Herberth Amaral</dc:creator> <category><![CDATA[Misc]]></category> <category><![CDATA[agile]]></category> <category><![CDATA[controle de versão]]></category> <category><![CDATA[pdca]]></category> <category><![CDATA[scrum]]></category> <category><![CDATA[tdd]]></category> <category><![CDATA[unimontes]]></category> <category><![CDATA[xp]]></category><guid isPermaLink="false">http://herberthamaral.com/?p=46</guid> <description><![CDATA[Tá certo. A paródia da música dos Titãs não ficou boa. Mas acho que já deu pra sacar do que este post trata. Enfrentar as matérias de programação na faculdade para quem já trabalha com desenvolvimento deve ser um saco para muita gente. Os professores geralmente não trabalham na área, não sacam nada além da linguagem e [...]]]></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%2Fherberthamaral.com%2F2009%2F12%2Fa-gente-nao-quer-so-codigo-a-gente-quer-codigo-controle-de-versao-e-bug-track%2F"> <img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fherberthamaral.com%2F2009%2F12%2Fa-gente-nao-quer-so-codigo-a-gente-quer-codigo-controle-de-versao-e-bug-track%2F&amp;source=HerberthAmaral&amp;style=normal" height="61" width="50" /> </a></div><p>Tá certo. A paródia da música dos Titãs não ficou boa. Mas acho que já deu pra sacar do que este post trata.</p><p>Enfrentar as matérias de programação na faculdade para quem já trabalha com desenvolvimento deve ser um saco para muita gente. Os professores geralmente não trabalham na área, não sacam nada além da linguagem e ainda tem coragem de nos fazer de trouxa, explicando como é a sintaxe da linguagem, como fazer algumas coisas básicas (leia-se CRUD) e acham que está tudo ok. Não está. Óbvio que não. Então, eu tenho algumas coisas a dizer para tais professores (e para os alunos também).</p><h3>1 &#8211; Ensinar algumas coisas sobre a sintaxe e mostrar um CRUD <em>não </em>é o suficiente.</h3><p>Precisamos mais além disso para desenvolver um trabalho final decente. Nós, alunos, precisamos aprender a nos virar, mas precisamos saber com <strong>o que</strong> devemos nos virar. Coisas básicas como indentação de código deveria ser cobrada. <em><a href="http://en.wikipedia.org/wiki/Separation_of_concerns" target="_blank">Separation of Concerns</a></em> deveria ser incentivado e cobrado desde o início, por exemplo.</p><p>Não serei injusto. Algumas coisas como &#8220;comente seu código para documenta-lo&#8221; nos é ensinada. Isso é importante para quem está começando, pois saber se orientar dentro do próprio código é uma boa. Mas é algo insuficiente. Eles não ensinam como código pode ser autodocumentado, como bons nomes de variáveis podem ajudar nisso, como codificar &#8220;de cima para baixo&#8221; e outras coisas relacionadas a codificação.</p><h3>2 &#8211; Nos passar trabalhos em grupo não necessariamente nos ensina a trabalhar como uma equipe.</h3><p>Há vários trabalhos finais para fazermos e a forma mais fácil de fazer isso é deixar um para cada um. Dá pra eliminar vários problemas de comunicação e sincronização de código assim. Acho que já deu pra perceber que não aprendemos muito sobre ferramentas para desenvolvimento em equipe&#8230;</p><p>Quem for tentar desenvolver em equipe, provavelmente o fará enviando código por email, trocando pen-drives ou enviando via compartilhamento de arquivos, se tiver na mesma rede (impressionante, mas <strong>já vi </strong>&#8220;profissionais&#8221; trabalhando assim) e notarão o trabalho que isso dá. Obviamente, dá pra notar que não tivemos uma aula sobre <a href="http://pt.wikipedia.org/wiki/Sistema_de_controle_de_vers" target="_blank">controles de versão</a>&#8230;</p><h3>3 &#8211; O trabalho não acaba com a entrega&#8230;</h3><p>Quem trabalha com desenvolvimento de software há um tempo sabe do que eu estou falando. De acordo com <a href="http://users.jyu.fi/~koskinen/smcosts.htm" target="_blank">esse paper</a>, mais de 90% dos custos de um software estão na sua manutenção. Vendo por esse lado, não estamos fazendo nem 10% do trabalho que deveríamos fazer.</p><p>Várias práticas de programação importantes são feitas durante a manutenção. Uma delas é a adição/mudança de recursos. Se fizéssemos isso, perceberíamos que coisas como refatoração e testes unitários são importantes.</p><h3>4 &#8211; Metodologias são sempre bem vindas</h3><p>Uma das dúvidas de quem começa a desenvolver é: como devo proceder, qual metodologia adotar. Um professor tem que ser um guia para um aluno escolher um método de trabalho. <a href="http://pt.wikipedia.org/wiki/Praxis_(engenharia_de_software)" target="_blank">Praxis</a>? <a href="http://pt.wikipedia.org/wiki/Programa%C3%A7%C3%A3o_Extrema" target="_blank">XP</a>? <a href="http://pt.wikipedia.org/wiki/Scrum" target="_blank">Scrum</a>? <a href="http://pt.wikipedia.org/wiki/PDCA" target="_blank">PDCA</a>? Sair fazendo na doida não é das melhores escolhas <img src='http://herberthamaral.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p><p>Na matéria de Engenharia de Software, nós temos uma visão teórica de cada uma dessas metodologias. Uma matéria de programação com um projeto pra entregar poderia ser um cenário perfeito para coloca-las em prática.</p><h3>5 &#8211; Conclusão</h3><p>Matérias como essa são muito desperdiçadas na nossa universidade. E eu imagino que seja em outras também. Se você é professor, comece a pensar nisso e pense em como você pode ajudar a mudar o quadro aqui exposto. Se você é aluno, cobre isso do seu professor. Ou pelo menos tenha a boa vontade de estudar sozinho <img src='http://herberthamaral.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p><p>Sem posts relacionados.</p>]]></content:encoded> <wfw:commentRss>http://herberthamaral.com/2009/12/a-gente-nao-quer-so-codigo-a-gente-quer-codigo-controle-de-versao-e-bug-track/feed/</wfw:commentRss> <slash:comments>11</slash:comments> </item> <item><title>CodingDojo na Unimontes!</title><link>http://herberthamaral.com/2009/12/codingdojo-na-unimontes/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=codingdojo-na-unimontes</link> <comments>http://herberthamaral.com/2009/12/codingdojo-na-unimontes/#comments</comments> <pubDate>Mon, 07 Dec 2009 20:49:44 +0000</pubDate> <dc:creator>Herberth Amaral</dc:creator> <category><![CDATA[agile]]></category> <category><![CDATA[coding dojo]]></category> <category><![CDATA[tdd]]></category> <category><![CDATA[unimontes]]></category><guid isPermaLink="false">http://herberthamaral.com/?p=52</guid> <description><![CDATA[É com muito prazer que estou anunciando o nosso primeiro CodingDojo na Unimontes, sendo realizado pelo GWIB. Mais detalhes no post do evento Até lá! Posts relacionados:Streaming do Mare de Agilidade na Unimontes]]></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%2Fherberthamaral.com%2F2009%2F12%2Fcodingdojo-na-unimontes%2F"> <img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fherberthamaral.com%2F2009%2F12%2Fcodingdojo-na-unimontes%2F&amp;source=HerberthAmaral&amp;style=normal" height="61" width="50" /> </a></div><p>É com muito prazer que estou anunciando o nosso primeiro CodingDojo na Unimontes, sendo realizado pelo <a href="http://gwibbers.wordpress.com" target="_blank">GWIB</a>.<br /> Mais detalhes no <a href=" http://gwibbers.wordpress.com/2009/12/07/codingdojo-na-unimontes-11122009-apareca-la/" target="_blank">post do evento</a></p><p>Até lá!</p><p><h4>Posts relacionados:</h4><ol><li><a href='http://herberthamaral.com/2010/04/streaming-do-mare-de-agilidade-na-unimontes/' rel='bookmark' title='Permanent Link: Streaming do Mare de Agilidade na Unimontes'>Streaming do Mare de Agilidade na Unimontes</a></li></ol></p>]]></content:encoded> <wfw:commentRss>http://herberthamaral.com/2009/12/codingdojo-na-unimontes/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> </channel> </rss>