<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://pontonetpt.org/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Contra a Corrente</title><link>http://pontonetpt.org/blogs/contracorrente/default.aspx</link><description>Remar, remar...</description><dc:language>pt-PT</dc:language><generator>CommunityServer 2008.5 SP2 (Build: 40407.4157)</generator><item><title>Quero É Viver</title><link>http://pontonetpt.org/blogs/contracorrente/archive/2006/05/11/P7942.aspx</link><pubDate>Thu, 11 May 2006 12:20:00 GMT</pubDate><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:2515</guid><dc:creator>João Hugo Miranda</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://pontonetpt.org/blogs/contracorrente/rsscomments.aspx?PostID=2515</wfw:commentRss><comments>http://pontonetpt.org/blogs/contracorrente/archive/2006/05/11/P7942.aspx#comments</comments><description>&lt;p id="cmp"&gt;&lt;font face="Verdana" size="2"&gt;Procurar sempre mais, empurrar os horizontes sempre para mais longe. Manter a inquietação e ansiedade que me impede de parar. Beber a vida com sofreguidão. Receber com gratidão tudo o que ela tem para nos oferecer. Fazer por merecê-lo, mesmo que nem sempre seja possível.  Recusar que a mediocridade, a ignorância e o egoísmo me prendam no fundo.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana" size="2"&gt;Hoje é um bom dia. Aproveitem-no.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana" size="2"&gt;por António Variações&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana" size="2"&gt;Vou viver &lt;br /&gt;até quando eu não sei &lt;br /&gt;que me importa o que serei &lt;br /&gt;quero é viver &lt;br /&gt;&lt;br /&gt;Amanhã, espero sempre um amanhã &lt;br /&gt;e acredito que será &lt;br /&gt;mais um prazer &lt;br /&gt;&lt;br /&gt;e a vida é sempre uma curiosidade &lt;br /&gt;que me desperta com a idade &lt;br /&gt;interessa-me o que está para vir &lt;br /&gt;a vida em mim é sempre uma certeza &lt;br /&gt;que nasce da minha riqueza &lt;br /&gt;do meu prazer em descobrir &lt;br /&gt;&lt;br /&gt;encontrar, renovar, vou fugir ao repetir &lt;br /&gt;&lt;br /&gt;vou viver, &lt;br /&gt;até quando, eu não sei &lt;br /&gt;que me importa o que serei &lt;br /&gt;quero é viver &lt;br /&gt;amanhã, espero sempre um amanhã &lt;br /&gt;e acredito que será mais um prazer &lt;br /&gt;&lt;br /&gt;a vida é sempre uma curiosidade &lt;br /&gt;que me desperta com idade &lt;br /&gt;interessa-me o que está para vir &lt;br /&gt;a vida, em mim é sempre uma certeza &lt;br /&gt;que nasce da minha riqueza &lt;br /&gt;do meu prazer em descobrir &lt;br /&gt;&lt;br /&gt;encontrar, renovar vou fugir ao repetir &lt;br /&gt;&lt;br /&gt;vou viver &lt;br /&gt;até quando eu não sei &lt;br /&gt;que me importa o que serei &lt;br /&gt;quero é viver, &lt;br /&gt;amanhã, espero sempre um amanhã &lt;br /&gt;e acredito que será mais um prazer&lt;/font&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.org/aggbug.aspx?PostID=2515" width="1" height="1"&gt;</description><category domain="http://pontonetpt.org/blogs/contracorrente/archive/tags/Apontamentos_2E00__2E00__2E00_/default.aspx">Apontamentos...</category></item><item><title>Velocidade</title><link>http://pontonetpt.org/blogs/contracorrente/archive/2006/02/12/P7422.aspx</link><pubDate>Sun, 12 Feb 2006 12:30:00 GMT</pubDate><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:2513</guid><dc:creator>João Hugo Miranda</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://pontonetpt.org/blogs/contracorrente/rsscomments.aspx?PostID=2513</wfw:commentRss><comments>http://pontonetpt.org/blogs/contracorrente/archive/2006/02/12/P7422.aspx#comments</comments><description>&lt;div&gt;&lt;font face="Verdana" size="2"&gt;Uma vez que já &lt;a href="http://weblogs.pontonetpt.com/contracorrente/posts/7324.aspx"&gt;escrevemos um conjunto de histórias&lt;/a&gt; e já as estimámos, podemos começar a pensar numa release. Ok, uma mini-release, mas não se esqueçam que é um exemplo, os nossos dois programadores estão atolados em trabalho por isso vão levar tempo a concretizar as histórias... extrapolem!! ;)&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;O facto é que uma vez tendo as histórias, a pergunta do cliente mais natural é: &amp;quot;Quanto é que temos isto pronto?&amp;quot;. Ou, talvez mais provável, já temos uma data definida à priori e temos de ver como encaixar as histórias nessa data... :) De qq das maneiras, para podermos realizar o planeamento da release, falta-nos uma peça. Como mapear as estimativas, que são realizadas em dias ideais, em dias reais, em esforço real? É aqui que entra o conceito de Velocidade.&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;A Velocidade é o número de dias ideais que pode ser realizada numa iteração do projecto (uma release é constituída por um conjunto de iterações, mas estamos a adiantarmo-nos...), ou seja o esforço que pode ser dispendido numa iteração. Sabendo que uma iteração costuma ter a duração de uma a quatro semanas &lt;em&gt;reais&lt;/em&gt;, é necessário estimar o número de dias ideais que cabem neste período. Muito bem, mas então como estimamos a velocidade?? &lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;A dificuldade está na primeira estimativa, dado que não temos nada de concreto (o projecto ainda não começou) em que nos basear. Existem pelo menos três soluções: Usar dados históricos; Fazer uma primeira iteração para chegar a um valor; Atirar um número para o ar.&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;Utilizar dados históricos é uma boa hipótese, mas tem alguns problemas. O principal é que é relativamente raro uma mesma equipa fazer projectos muito semelhantes consecutivamente. No entanto, se esse for o caso, tire-se partido disso! Atenção que um projecto semelhante feito por uma equipa diferente pode não ser uma boa base para definir a velocidade, dado que as características da equipa podem ser diferentes.&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;Realizar uma primeira iteração também seria uma boa hipótese, mas não será muito realista. Quantas vezes é que já conseguiram dizer a um cliente: &amp;quot;Olhe, vamos trabalhar umas semanitas e depois logo decidimos como será o desenrolar o projecto daí para a frente.&amp;quot; e ele não se desatou a rir? Bom, mas se tiverem essa possibilidade aproveitem, potencialmente pode ser a melhor solução.&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;Atirar um número para o ar, não é mujito agradável, mas também não é o fim do mundo. Por vezes, não há outra possibilidade. Nesta situação, o facto de utilizarmos como estimativas dias ideais ajuda bastante. Para chegar a um número para a velocidade, ajuda tentar contabilizar a foram como os elementos da equipa têm gasto o tempo ultimamente - tarefas recorrentes; outros projectos em que estejam empenhados; trabalho ad-hoc - e com base nisso chegar a um número.&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;É importante tentarmos chegar a um valor minimamente realista, mas não tem de ser perfeito nem este número tem de ser um dogma. Se o fosse, deixava de ter qualquer relevância... quem consegue prever o futuro com 100% de correcção são os videntes, não somos nós, pobres informáticos. &lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;Pegando &lt;a href="http://weblogs.pontonetpt.com/contracorrente/posts/7324.aspx"&gt;no nosso exemplo&lt;/a&gt;, e dado que os nossos programadores estão assoberbados de trabalho, a velocidade definida é de 4 dias ideais. Ok, a velocidade estimada é uma miséria, mas é o possível... O chefe não quer contratar mais gente, dá nisto....&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;Uma vez obtida uma velocidade inicial, podemos começar a pensar em fazer um &lt;em&gt;release plan.&lt;/em&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.org/aggbug.aspx?PostID=2513" width="1" height="1"&gt;</description><category domain="http://pontonetpt.org/blogs/contracorrente/archive/tags/Metodologias+_2600_+Processos/default.aspx">Metodologias &amp; Processos</category></item><item><title>Architects Forum 2006</title><link>http://pontonetpt.org/blogs/contracorrente/archive/2006/02/10/P7404.aspx</link><pubDate>Fri, 10 Feb 2006 22:55:00 GMT</pubDate><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:2512</guid><dc:creator>João Hugo Miranda</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://pontonetpt.org/blogs/contracorrente/rsscomments.aspx?PostID=2512</wfw:commentRss><comments>http://pontonetpt.org/blogs/contracorrente/archive/2006/02/10/P7404.aspx#comments</comments><description>&lt;div&gt;&lt;font face="Verdana" color="#000000" size="2"&gt;Ontem e hoje decorreu o Architects Forum 2006, em Lisboa. (Muito) infelizmente apenas consegui ir ao primeiro dia, mas posso dizer que gostei muito e saí de lá menos céptico do que quando entrei. Antes de mais, deixem-me dizer que gostei bastante do orador, Beat Schwegler. Claro, conciso, objectivo, esclarecedor, informal e humorista q.b. (gostava que fosse ainda mais, mas é questão de gosto...). Não vou entrar em muitos detalhes sobre a apresentação, estou a contar que outros o façam... hint, hint!&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;O tema foram as Software Factories (o nome não é brilhante, como já várias pessoas o disseram), um temo que conheço ainda muito pela rama. Confesso que não lhe dei a atenção devida porque cheirou-me muito a nova tentativa de algo requentado e com falhas de base: tentar eliminar a necessidade de escrever código, podendo fazer tudo visualmente... a ideia do arquitecto génio e os programadores meros operários... nah! Se pensarmos que sou um grande apologista das metodologias ágeis, julgo que podem compreender melhor o meu cepticismo. Por outro lado, a questão das Domain Specific Languages (DSL) é algo que me interessa e provavelmente vai interessar ainda mais num futuro mais ou menos próximo.&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;O início da apresentação estava a confirmar os meus piores receios. O Beat começou com uma analogia com o fabrico dos aviões, como eles pensam tudo muito bem antes de avançar com a construção... como nós ainda somos artesãos (o que é verdade e é mau)... E no entanto... E no entanto, à medida que a apresentação foi avançando foi sempre a subir. As ideias subjacentes - Software Product Lines, Architectures Frameworks, Model-driven development e Guidance In Context -  às Software Factories parecem-me muito válidas e perfeitamente compatíveis com as metodologias ágeis.&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;Um ponto fulcral das software factories é não se pretender que elas sejam uma solução para todos os problemas. Não, a ideia é criar um conjunto de artefactos orientados a um determinado domínio do problema, standardizando tudo o que é comum, mas deixando em aberto a possibilidade de configurar e costumizar de forma simples. Ok, a ideia não é nova, mas a solução parece-me ter pernas para andar.&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;Outros pontos muito interessantes são a correspondência directa entre código e linguagem visual - algo a que se dá muita importância e que se pode contrastar com a geração de código via UML - e o ênfase que eles parecem mostrar no campo dos deployments e das operações, algo sempre muito negligenciado.&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;Em resumo, para já estou convencido. Lá vou ter de ler o &amp;quot;&lt;font color="#000000"&gt;Software Factories: Assembling Applications with Patterns, Models, Frameworks, and Tools&amp;quot;. Bom, depois de ler o &amp;quot;Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions&amp;quot;, que já comecei a ler... e o &amp;quot;Working Effectively with Legacy Code&amp;quot; e o &amp;quot;Agile Database Techniques&amp;quot;, que já encomendei... Ai, ai... pq é que o dia não tem mais horas (mas só para mim, pq se não não servia de nada....)&lt;/font&gt;&lt;br /&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.org/aggbug.aspx?PostID=2512" width="1" height="1"&gt;</description><category domain="http://pontonetpt.org/blogs/contracorrente/archive/tags/Metodologias+_2600_+Processos/default.aspx">Metodologias &amp; Processos</category><category domain="http://pontonetpt.org/blogs/contracorrente/archive/tags/.Net/default.aspx">.Net</category><category domain="http://pontonetpt.org/blogs/contracorrente/archive/tags/Desenho/default.aspx">Desenho</category></item><item><title>Só falta o filho... "Desenvolvimento Orientado Por Objectos - Domain-Driven Design, Testes Unitários e Refactoring"</title><link>http://pontonetpt.org/blogs/contracorrente/archive/2006/02/07/P7366.aspx</link><pubDate>Tue, 07 Feb 2006 21:42:00 GMT</pubDate><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:2511</guid><dc:creator>João Hugo Miranda</dc:creator><slash:comments>9</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://pontonetpt.org/blogs/contracorrente/rsscomments.aspx?PostID=2511</wfw:commentRss><comments>http://pontonetpt.org/blogs/contracorrente/archive/2006/02/07/P7366.aspx#comments</comments><description>&lt;div&gt;&lt;font face="Verdana" size="2"&gt;Notícia requentada, mas acho que chegou a altura em que sinto que pode ser dada por mim.&lt;/font&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;Este pequenino livro (ISBN: 9896150133) editado em Outubro de 2005 pela Centro Atlântico foi escrito por mim e pelo &lt;a href="http://weblogs.pontonetpt.com/josealmeida/"&gt;José Almeida&lt;/a&gt; (o blog não tem sido muuuiiito actualizado, mas quem sou eu para falar... ;) ):&lt;/font&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;img src="http://www.centroatl.pt/titulos/tecnologias/foto-capas/desenvolvimento130.gif" alt="" /&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;O nome é &amp;quot;Desenvolvimento Orientado Por Objectos&amp;quot;. Ok, o título não é o mais original, mas o importante é o subtítulo: &amp;quot;Domain-Driven Design, Testes Unitários e Refactoring&amp;quot;. Um conjunto de práticas que ajudam qualquer programador a tornar-se mais produtivo e a divertir-se mais com o seu trabalho. Os exemplos são em C#, mas como é natural, os conceitos aplicam-se a qq linguagem orientada-a-objectos e, nalguns casos, mesmo a linguagens assentes noutros paradigmas.&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;O livro não pretende ser um estudo exaustivo destas técnicas. Para isso há livros mais completos e escritos por &lt;em&gt;brighter minds than ours&lt;/em&gt;, a que aliás fazemos referência nos nossos escritos. O objectivo do livro é simples: oferecer uma introdução simples, muito prática, e em português sobre estes assuntos, para todos aqueles que são curiosos e gostam de aprender mas que não têm tempo e/ou paciência para ler grandes calhamaços ou não gostam de ler em inglês.&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;O livro está disponível nalgumas lojas on-line e também nas livrarias mais conhecidas. Comentários arrasadores são bem-vindos. Comentários bajuladores já chegam!!! ;P&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;Pq é que só escrevi sobre ele agora? Ainda bem que perguntam. Por uma razão idiota: dado que não escrevia há tanto tempo no blog, não me sentia bem em escrever apenas para fazer &amp;quot;publicidade&amp;quot;. Agora que tenho escrito mais (vamos ver até quando...), já me senti mais confortável com o assunto.&lt;/font&gt;&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.org/aggbug.aspx?PostID=2511" width="1" height="1"&gt;</description><category domain="http://pontonetpt.org/blogs/contracorrente/archive/tags/Apontamentos_2E00__2E00__2E00_/default.aspx">Apontamentos...</category><category domain="http://pontonetpt.org/blogs/contracorrente/archive/tags/.Net/default.aspx">.Net</category><category domain="http://pontonetpt.org/blogs/contracorrente/archive/tags/Programa_E700E300_o/default.aspx">Programação</category><category domain="http://pontonetpt.org/blogs/contracorrente/archive/tags/Desenho/default.aspx">Desenho</category></item><item><title>User Stories e Planeamento - Estimativas</title><link>http://pontonetpt.org/blogs/contracorrente/archive/2006/02/04/P7324.aspx</link><pubDate>Sat, 04 Feb 2006 13:14:00 GMT</pubDate><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:2510</guid><dc:creator>João Hugo Miranda</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://pontonetpt.org/blogs/contracorrente/rsscomments.aspx?PostID=2510</wfw:commentRss><comments>http://pontonetpt.org/blogs/contracorrente/archive/2006/02/04/P7324.aspx#comments</comments><description>&lt;div&gt;&lt;font face="Verdana" size="2"&gt;Acho que é uma boa altura para concretizar um pouco melhor esta coisa das User Stories e de como podemos realizar planeamentos (Release e Iteration Planning) com base nestas.&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;Consideremos &lt;a href="http://weblogs.pontonetpt.com/contracorrente/posts/7120.aspx"&gt;um exemplo a que recorri anteriormente&lt;/a&gt;. Imaginemos que o cliente pretende uma funcionalidade muito comum hoje em dia: &amp;quot;Um potencial cliente do nosso site deve poder registar-se de modo a receber notícias, ofertas, entre outros tipos de contactos.&amp;quot; &lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;É possível encontrar muitas histórias, mas mesmo muitas... Vamos ser pouco ambiciosos para já, considerando as seguintes histórias (criadas numa User Story Workshop).&lt;/font&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;font face="Verdana" size="2"&gt;&amp;quot;Um cliente deve-se registar indicando como código de utilizador o e-mail e escolhendo uma palavra-chave alfa-numérica.&amp;quot; &lt;/font&gt;
&lt;/li&gt;&lt;li&gt;&lt;font face="Verdana" size="2"&gt;&amp;quot;O cliente deve receber um e-mail de confirmação do registo.&amp;quot; &lt;/font&gt;
&lt;/li&gt;&lt;li&gt;&lt;font face="Verdana" size="2"&gt;&amp;quot;O cliente só fica devidamente registado depois de responder ao e-mail de confirmação.&amp;quot; &lt;/font&gt;
&lt;/li&gt;&lt;li&gt;&lt;font face="Verdana" size="2"&gt;&amp;quot;O cliente deve poder fornecer dados adicionais, como título honorífico, morada, telefone ou idade.&amp;quot;&lt;/font&gt; 
&lt;/li&gt;&lt;li&gt;&lt;font face="Verdana" size="2"&gt;&amp;quot;A equipa de Marketing (Mkt) deve poder criar o conteúdo, em HTML, das mensagens (e-mails, sms, mms, ...) sem auxílio da equipa técnica.&amp;quot;&lt;/font&gt; 
&lt;/li&gt;&lt;li&gt;&lt;font face="Verdana" size="2"&gt;&amp;quot;A equipa de Marketing pode escolher os destinários das mensagens com base nas características fornecidas pelos clientes.&amp;quot;&lt;/font&gt; 
&lt;/li&gt;&lt;li&gt;&lt;font face="Verdana" size="2"&gt;&amp;quot;A equipa de Marketing pode despoletar o envio das mensagens sem intervenção da equipa técnica.&amp;quot;&lt;/font&gt; 
&lt;/li&gt;&lt;li&gt;&lt;font face="Verdana" size="2"&gt;&amp;quot;A equipa de Marketing deve poder definir um grupo de destinatários de teste, que receberão as mensagens antes do envio das mensagens para os clientes.&amp;quot;&lt;/font&gt; 
&lt;/li&gt;&lt;li&gt;&lt;font face="Verdana" size="2"&gt;&amp;quot;As mensagens devem ser personalizadas com o título honorífico e o nome do destinatário.&amp;quot;&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;Temos aqui muitas histórias, que exigem esforços variados. Vamos assumir que as estimativas obtidas, &lt;a href="http://weblogs.pontonetpt.com/contracorrente/posts/7253.aspx"&gt;de acordo com o processo de que falámos anteriormente&lt;/a&gt;, chegamos aos seguintes valores:&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;&lt;/font&gt; &lt;/div&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;&lt;font face="Verdana" size="2"&gt;História&lt;/font&gt; &lt;/th&gt;
&lt;th&gt;&lt;font face="Verdana" size="2"&gt;Estimativa&lt;/font&gt; &lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;&amp;quot;Um cliente deve-se registar indicando como código de utilizador o e-mail e escolhendo uma palavra-chave alfa-numérica.&amp;quot; &lt;/font&gt;&lt;/div&gt;&lt;/td&gt;
&lt;td&gt;&lt;font face="Verdana" size="2"&gt;3&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;&amp;quot;O cliente deve receber um e-mail de confirmação do registo.&amp;quot; &lt;/font&gt;&lt;/div&gt;&lt;/td&gt;
&lt;td&gt;&lt;font face="Verdana" size="2"&gt;2&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;&amp;quot;O cliente só fica devidamente registado depois de responder ao e-mail de confirmação.&amp;quot; &lt;/font&gt;&lt;/div&gt;&lt;/td&gt;
&lt;td&gt;&lt;font face="Verdana" size="2"&gt;1&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;&amp;quot;O cliente deve poder fornecer dados adicionais, como título honorífico, morada, telefone ou idade.&amp;quot;&lt;/font&gt; &lt;/div&gt;&lt;/td&gt;
&lt;td&gt;&lt;font face="Verdana" size="2"&gt;1&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;&amp;quot;A equipa de Marketing (Mkt) deve poder criar o conteúdo, em HTML, das mensagens (e-mails, sms, mms, ...) sem auxílio da equipa técnica.&amp;quot;&lt;/font&gt; &lt;/div&gt;&lt;/td&gt;
&lt;td&gt;&lt;font face="Verdana" size="2"&gt;5&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;&amp;quot;A equipa de Marketing pode escolher os destinários das mensagens com base nas características fornecidas pelos clientes.&amp;quot;&lt;/font&gt; &lt;/div&gt;&lt;/td&gt;
&lt;td&gt;&lt;font face="Verdana" size="2"&gt;2&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;&amp;quot;A equipa de Marketing pode despoletar o envio das mensagens sem intervenção da equipa técnica.&amp;quot;&lt;/font&gt; &lt;/div&gt;&lt;/td&gt;
&lt;td&gt;&lt;font face="Verdana" size="2"&gt;3&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;&amp;quot;A equipa de Marketing deve poder definir um grupo de destinatários de teste, que receberão as mensagens antes do envio das mensagens para os clientes.&amp;quot;&lt;/font&gt; &lt;/div&gt;&lt;/td&gt;
&lt;td&gt;&lt;font face="Verdana" size="2"&gt;2&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;&amp;quot;As mensagens devem ser personalizadas com o título honorífico e o nome do destinatário.&amp;quot;&lt;/font&gt;&lt;/div&gt;&lt;/td&gt;
&lt;td&gt;&lt;font face="Verdana" size="2"&gt;3&lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;font face="Verdana" size="2"&gt;Dado que a equipa técnica é constituída por apenas por dois programadores sobrecarregados, com mais do que um projecto em simultâneo, temos aqui trabalho para algum tempo. Não se esqueçam que as estimativas são em dias ideais e os nossos dois amigos estão longe de ter dias ideais... &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Verdana" size="2"&gt;Nos próximos posts veremos como podemos partir daqui para o planeamento do projecto. E parece-me que o mais adequado não serão gráficos de Gantt nem Waterfalls. O tempo não está para isso...&lt;/font&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.org/aggbug.aspx?PostID=2510" width="1" height="1"&gt;</description><category domain="http://pontonetpt.org/blogs/contracorrente/archive/tags/Metodologias+_2600_+Processos/default.aspx">Metodologias &amp; Processos</category></item><item><title>Estimando User Stories</title><link>http://pontonetpt.org/blogs/contracorrente/archive/2006/01/30/P7253.aspx</link><pubDate>Mon, 30 Jan 2006 23:02:00 GMT</pubDate><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:2509</guid><dc:creator>João Hugo Miranda</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://pontonetpt.org/blogs/contracorrente/rsscomments.aspx?PostID=2509</wfw:commentRss><comments>http://pontonetpt.org/blogs/contracorrente/archive/2006/01/30/P7253.aspx#comments</comments><description>&lt;div&gt;&lt;font face="Verdana" size="2"&gt;Nota prévia: Muito dos conceitos aqui descritos baseiam-se num livro muito interessante escrito por Mike Cohn e editado pela Addisson-Wesley com o título &amp;quot;User Stories Applied - for Agile Software Development&amp;quot;. Os conceitos não são originais, mas este livro faz um muito bom trabalho na sua descrição.&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;Já vimos como as &lt;/font&gt;&lt;a href="http://weblogs.pontonetpt.com/contracorrente/posts/7120.aspx"&gt;&lt;font face="Verdana" size="2"&gt;User Stories podem funcionar com a &amp;quot;peça de Lego&amp;quot;&lt;/font&gt;&lt;/a&gt;&lt;font face="Verdana" size="2"&gt; a partir da qual &lt;em&gt;o cliente&lt;/em&gt; pode especificar as funcionalidades que pretende para o sistema. Mas as suas virtudes não se ficam por aqui, dado que também são uma óptima ferramenta para as actividades de planeamento. Comecemos por uma tarefa basilar: estimativas.&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;As User Stories, dado o facto de descreverem um &lt;em&gt;pequeno&lt;/em&gt; pedaço de funcionalidade (com valor para o negócio), devem poder ser implementadas num espaço de 1 a 5 cinco dias ideais. Um dia ideal é um dia em que trabalhamos todo o tempo na implementação de uma história. Como é natural, raramente temos esta oportunidade, mas usar dias ideiais simplifica o processo. Como as histórias têm uma curta duração, torna-se mais difícil, mas não impossível, de fazer erros muito grandes de estimativas. É de realçar que o objectivo não é realizar estimativas perfeitas, até porque isso é impossível. O objectivo é termos algo para trabalhar. Os acertos e o controlo do andamento do projecto faz-se de outras formas.&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;Vejamos então como estimar a duração de uma história.&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;&lt;u&gt;Estimar como equipa&lt;/u&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;u&gt;&lt;font face="Verdana" size="2"&gt;&lt;/font&gt;&lt;/u&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;Como em tudo o que é metodologia ágil, também o processo de estimação deve ser feito pela equipa e não individualmente. Note-se que não tem de ser necessariamente toda a equipa, mas o cliente e vários elementos da equipa técnica devem estar presentes. Por um lado, estimar em equipa permite obter mais opiniões e esclarecer mais dúvidas sobre as histórias. Por outro, ajuda a criar espírito de equipa e de trabalho conjunto. É necessário sentir que todos remam para o mesmo lado, todos têm a sua quota-parte de responsabilidades. Mentes iluminadas (arquitectos...) que definem estimativas para outros cumprirem não é boa ideia a este nível.&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;&lt;u&gt;Como estimar&lt;/u&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;O processo começar com a equipa técnica a fazer todas as perguntas que considere necessárias ao cliente, de modo a poder realizar estimativas o mais sólidas possíveis (o que não quer dizer correctas) sobre uma dada história. Note-se que não deve ser o cliente a realizar estimativas, mas a equipa técnica. Uma vez esclarecidas as dúvidas, inicia-se um curto processo iterativo. Primeiro, cada elemento da equipa técnica escreve num papel a sua estimativa, sendo muito importante que ninguém divulgue a sua estimativa antes de todos terem terminado. Em segundo lugar, todos indicam a sua estimativa. O mais natural é que existam estimativas díspares, logo o terceiro passo passa por cada um justificar as suas estimativas. Finalmente, tudo volta ao primeiro ponto. Ao fim de duas ou três iterações, as estimativas tendem a coincidir.&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;&lt;u&gt;Triangulação&lt;/u&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;u&gt;&lt;font face="Verdana" size="2"&gt;&lt;/font&gt;&lt;/u&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;Ao fim de umas quantas histórias, começa a tornar-se possível utilizar uma técnica auxiliar, a triangulação. A triangulação é muito simples. Imaginemos que temos uma história que leva 2 dias ideais a concretizar e outra 4 dias ideais. Ao considerar uma terceira história, podemos balizá-la, comparando-a com as estimativas das outras duas histórias. Por exemplo, se estimarmos 3 dias ideais, então ela deve exigir mais esforço do que a primeira história e menos do que a segunda.&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;Como podem ver, o processo é simples e muito intuitivo. O processo de estimação de histórias funciona como a base para a definição do planeamento do projecto, tanto para iterações como para releases... Mas isso é tema para outros posts...&lt;/font&gt;&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.org/aggbug.aspx?PostID=2509" width="1" height="1"&gt;</description><category domain="http://pontonetpt.org/blogs/contracorrente/archive/tags/Metodologias+_2600_+Processos/default.aspx">Metodologias &amp; Processos</category></item><item><title>Castle</title><link>http://pontonetpt.org/blogs/contracorrente/archive/2006/01/21/P7144.aspx</link><pubDate>Sat, 21 Jan 2006 23:51:00 GMT</pubDate><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:2508</guid><dc:creator>João Hugo Miranda</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://pontonetpt.org/blogs/contracorrente/rsscomments.aspx?PostID=2508</wfw:commentRss><comments>http://pontonetpt.org/blogs/contracorrente/archive/2006/01/21/P7144.aspx#comments</comments><description>&lt;div&gt;&lt;font face="Verdana" size="2"&gt;Há uns meses atrás encontrei um projecto que pareceu interessante, mas a que não dei muita atenção: o &lt;a href="http://www.castleproject.org/index.php/Main_Page"&gt;Castle&lt;/a&gt;. O Castle é como que um projecto de projectos e é fortemente inspirado na Web Framework do momento, o &lt;a href="http://www.rubyonrails.org/"&gt;Ruby on Rails&lt;/a&gt; (RoR). O RoR não é .Net, mas é muito interessante e permite aprender umas coisas.  Não deixem de dar uma vista de olhos.&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;Como dizia, o Castle é um projecto de projectos, integrando-os de forma elegante. Os seus mentores são muito pragmáticos e tiram proveito de um conjunto de componentes (ou aplicações) já existentes. Entre os diversos componentes do Castle contam-se:&lt;/font&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;font face="Verdana" size="2"&gt;MonoRail - uma plataforma Web MVC (mais ou menos equivalente ao Action Pack do RoR).&lt;/font&gt;&lt;/li&gt;
&lt;li&gt;&lt;font face="Verdana" size="2"&gt;ActiveRecord - equivalente ao ActiveRecord do RoR, implementa o padrão com o mesmo nome tal como definido no &lt;a href="http://martinfowler.com/books.html#eaa"&gt;PoEAA&lt;/a&gt;, do Martin Fowler. Utiliza ferramentas já existentes de OR/M, como o NHibernate ou o iBatis.Net.&lt;/font&gt;&lt;/li&gt;
&lt;li&gt;&lt;font face="Verdana" size="2"&gt;Aspect# - Uma framework de &lt;a href="http://aosd.net/"&gt;Aspect-Oriented Programming&lt;/a&gt;.&lt;/font&gt;&lt;/li&gt;
&lt;li&gt;&lt;font face="Verdana" size="2"&gt;Windsor - Uma ferramenta de &lt;a href="http://martinfowler.com/articles/injection.html"&gt;Inversion of Control&lt;/a&gt;.&lt;/font&gt;&lt;/li&gt;
&lt;li&gt;&lt;font face="Verdana" size="2"&gt;DynamicProxy - um componente que facilita a criação de proxies de objectos.&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;Nota importante: Ainda está muito orientado para .Net 1.1, à semelhança da maioria dos projectos Open Source.&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;Infelizmente ainda não tenho experiência prática com o Castle (nem sei quando terei tempo para tal), mas pelo que li, promete!&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;&lt;/font&gt; &lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.org/aggbug.aspx?PostID=2508" width="1" height="1"&gt;</description><category domain="http://pontonetpt.org/blogs/contracorrente/archive/tags/.Net/default.aspx">.Net</category><category domain="http://pontonetpt.org/blogs/contracorrente/archive/tags/Programa_E700E300_o/default.aspx">Programação</category></item><item><title>Mais sobre as User Stories (Histórias)</title><link>http://pontonetpt.org/blogs/contracorrente/archive/2006/01/21/P7142.aspx</link><pubDate>Sat, 21 Jan 2006 22:49:00 GMT</pubDate><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:2507</guid><dc:creator>João Hugo Miranda</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://pontonetpt.org/blogs/contracorrente/rsscomments.aspx?PostID=2507</wfw:commentRss><comments>http://pontonetpt.org/blogs/contracorrente/archive/2006/01/21/P7142.aspx#comments</comments><description>&lt;div&gt;&lt;font face="Verdana" size="2"&gt;Nota prévia: Muito dos conceitos aqui descritos baseiam-se num livro muito interessante escrito por Mike Cohn e editado pela Addisson-Wesley com o título &amp;quot;User Stories Applied - for Agile Software Development&amp;quot;. Os conceitos não são originais, mas este livro faz um muito bom trabalho na sua descrição.&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;No meu &lt;a href="http://weblogs.pontonetpt.com/contracorrente/posts/7120.aspx"&gt;post anterior&lt;/a&gt; descrevi o conceito de &lt;em&gt;user stories&lt;/em&gt;, mas acho que faltou realçar um ponto importante. &lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;&lt;/font&gt;&lt;font face="Verdana" size="2"&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;Toda a filosofia subjacente às metodologias ágeis exige comunicação, comunicação, comunicação. O cliente e a equipa de desenvolvimento têm de construir uma relação de confiança e abertura. Por vezes, como sabemos, isso é bastante complicado, mas é dever da equipa de desenvolvimento (e também do cliente, mas este não podemos controlar) fazer tudo ao seu alcance para que essa relação se estabeleça. Sobretudo não deve encarar o cliente como alguém que só está ali para dificultar a vida nem pensar que quanto mais longe ele estiver melhor. A atitude de &amp;quot;eu e o código&amp;quot;, do programador-cowboy, é fatal.&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;A definição das histórias não deve ser feita pelo cliente e formalizada num documento que depois é entregue à equipa de desenvolvimento. Essa atitude mata a comunicação e dificulta (para não dizer que impede) que uma relação saudável e de cooperação seja estabelecida. Se for realmente necessário - para obedecer a normas ou exigências de certificação, por exemplo -  as histórias podem ser formalizadas num documento, mas este deve ser sempre um produto&lt;em&gt; &lt;/em&gt;da comunicação profícua entre cliente e equipa de desenvolvimento.&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana" size="2"&gt;Aliás, os proponentes das &lt;em&gt;user stories&lt;/em&gt; defendem que apenas a descrição e os testes de aceitação devem obrigatoriamente ser escritos algures (as hipóteses são muitas, mas a mais defendida é a do papel e lápis...). As conversações que permitem compreender melhor a história devem ser sobretudo orais, precisamente para obrigar à comunicação entre cliente e equipa de desenvolvimento. É claro que isto nem sempre é possível e como sempre, devemos adaptar as recomendações ao nosso contexto.&lt;/font&gt;&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.org/aggbug.aspx?PostID=2507" width="1" height="1"&gt;</description><category domain="http://pontonetpt.org/blogs/contracorrente/archive/tags/Metodologias+_2600_+Processos/default.aspx">Metodologias &amp; Processos</category></item><item><title>User Stories</title><link>http://pontonetpt.org/blogs/contracorrente/archive/2006/01/19/P7120.aspx</link><pubDate>Thu, 19 Jan 2006 23:27:00 GMT</pubDate><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:2506</guid><dc:creator>João Hugo Miranda</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://pontonetpt.org/blogs/contracorrente/rsscomments.aspx?PostID=2506</wfw:commentRss><comments>http://pontonetpt.org/blogs/contracorrente/archive/2006/01/19/P7120.aspx#comments</comments><description>&lt;div&gt;&lt;font face="Verdana"&gt;Nota prévia: Muito dos conceitos aqui descritos baseiam-se num livro muito interessante escrito por Mike Cohn e editado pela Addisson-Wesley com o título &amp;quot;User Stories Applied - for Agile Software Development&amp;quot;. Os conceitos não são originais, mas este livro faz um muito bom trabalho na sua descrição.&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana"&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana"&gt;Um dos maiores... desafios (a palavra é muito maltratada, mas enfim) do desenvolvimento de software é a especificação de requisitos. É uma tarefa muito complicada devido a múltiplos factores. &lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana"&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana"&gt;Do meu ponto de vista, e na opinião de gente muito mais brilhante do que eu, o maior problema é que é tremendamente difícil, impossível mesmo, para o cliente descrever o que pretende, de for objectiva e não ambígua, apenas com o esforço da imaginação. A linguagem natural é naturalmente (&lt;em&gt;pun intended&lt;/em&gt;) ambígua. O cliente, ou um seu representante como um gestor de produto, muda de ideias a meio do percurso, como é &lt;em&gt;natural e desejável&lt;/em&gt;. Num ambiente em constante mudança, temos de entrar na onda e não contra ela.&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana"&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana"&gt;Se a isto juntarmos uma relação contratual entre cliente e fornecedor, baseada na especificação de requisitos de uma coisa tão volátil como o software, temos meio caminho andado para o desastre: uma luta feroz na interpretação de umas folhas de papel. Não é por acaso que as empresas de software não costumam ser demasiado bem vistas...&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana"&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana"&gt;Bom, mas então não temos solução? Como é que vamos conseguir manter o rumo com tantas nebulosas pelo caminho? Como vamos saber o que temos de construir, como acompanhamos a construção, como estimamos a data de entrega? Para quem conhece a filosofia que eu sigo, a solução provém de algumas práticas das metodologias ágeis, especialmente Extremme Programming.&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana"&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;em&gt;&lt;font face="Verdana"&gt;User Stories&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana"&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana"&gt;A primeira peça do puzzle são as &lt;em&gt;user stories&lt;/em&gt;. Uma história não é mais do que a descrição de uma pequena funcionalidade que o cliente pretende ver desenvolvida no sistema. Estas são a unidade atómica da especificação de requisitos, no sentido em que não é possível partir as &lt;em&gt;user stories&lt;/em&gt; em conceitos mais pequenos e é a partir delas que se define todo o planeamento. &lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana"&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana"&gt;Uma &lt;em&gt;user story&lt;/em&gt; é constituída por:&lt;/font&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;font face="Verdana"&gt;Um pequena descrição da história, utilizada como lembrete e para as actividades de planeamento. &lt;/font&gt;
&lt;/li&gt;&lt;li&gt;&lt;font face="Verdana"&gt;Conversações sobre a história, entre clientes e programadores, de modo a detalhar a história e esclarecer dúvidas. &lt;/font&gt;
&lt;/li&gt;&lt;li&gt;&lt;font face="Verdana"&gt;Um conjunto de testes de aceitação.&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;div&gt;&lt;font face="Verdana"&gt;Um ponto muito importante, e comum a todos os métodos de especificação de requisitos, é que as histórias devem ser escritas pelo cliente ou por um seu representante e nunca pela equipa de desenvolvimento. As histórias devem apresentar claramente algo de valor para o cliente.&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana"&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana"&gt;Analisemos cada um dos pontos com base numa funcionalidade muito comum: &amp;quot;Um potencial cliente do nosso site deve poder registar-se de modo a receber notícias, ofertas, entre outros tipos de contactos.&amp;quot; A possibilidade de se registar como utilizador de um site é uma característica cujo desenvolvimento pode ser muito complexo, pelo que convêm dividir a tarefa em algo mais pequeno, em várias &lt;em&gt;user stories&lt;/em&gt;.&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana"&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;u&gt;&lt;font face="Verdana"&gt;Pequena descrição&lt;/font&gt;&lt;/u&gt;&lt;/div&gt;
&lt;div&gt;&lt;u&gt;&lt;font face="Verdana"&gt;&lt;/font&gt;&lt;/u&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana"&gt;A primeira parte de uma história é uma pequena descrição, de uma ou duas frases, de modo a que nos possamos referir à história de forma simples sempre que necessário, nomeadamente no planeamento. Para o nosso exemplo, é possível encontrar muitas histórias, cujas descrições podiam ser:&lt;/font&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;font face="Verdana"&gt;&amp;quot;Um cliente deve-se registar indicando como código de utilizador o e-mail e escolhendo uma palavra-chave alfa-numérica.&amp;quot; &lt;/font&gt;
&lt;/li&gt;&lt;li&gt;&lt;font face="Verdana"&gt;&amp;quot;O cliente deve receber um e-mail de confirmação do registo.&amp;quot; &lt;/font&gt;
&lt;/li&gt;&lt;li&gt;&lt;font face="Verdana"&gt;&amp;quot;O cliente só fica devidamente registado depois de responder ao e-mail de confirmação.&amp;quot; &lt;/font&gt;
&lt;/li&gt;&lt;li&gt;&lt;font face="Verdana"&gt;&amp;quot;O cliente deve poder fornecer dados adicionais, como morada, telefone ou idade.&amp;quot;&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;div&gt;&lt;font face="Verdana"&gt;De certeza que vocês podem encontrar muitas outras, mas acho que dá para perceber a ideia. A história deve ser uma coisa simples, passível de completar em pouco tempo, idealmente de 1 a 5 dias. &lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana"&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;u&gt;&lt;font face="Verdana"&gt;Conversações sobre a história&lt;/font&gt;&lt;/u&gt;&lt;/div&gt;
&lt;div&gt;&lt;u&gt;&lt;font face="Verdana"&gt;&lt;/font&gt;&lt;/u&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana"&gt;Como é natural, não é possível construir a funcionalidade apenas com as mini-descrições. Bom, possível será sempre, mas o mais provável é que o resultado final seja bastante diferente do pretendido pelo cliente. Sendo assim, é fundamental que cliente e equipa desenvolvimento discutam entre si a história de modo a esclarecer tanto quanto possível o pretendido. &lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana"&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana"&gt;Peguemos na história &amp;quot;O cliente deve receber um e-mail de confirmação do registo.&amp;quot;. Existem um conjunto de questões que saltam imediatamente à vista. O cliente (o nosso, não o do site) deve poder alterar o conteúdo do e-mail sem intervenção da equipa de desenvolvimento? O e-mail deve ser personalizado? Deve ser enviado em texto puro, RTF, HTML? Todas estas questões devem ser debatidas e esclarecidas entre cliente e equipa de desenvolvimento antes e durante a construção da história. &lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana"&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana"&gt;Estas conversações também têm por objectivo permitir à equipa de desenvolvimento estimar o tempo de construção da história, um ponto importante mas que vou deixar para outra altura. ;)&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana"&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;u&gt;&lt;font face="Verdana"&gt;Testes de aceitação&lt;/font&gt;&lt;/u&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana"&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana"&gt;Os testes de aceitação têm uma finalidade semelhante à dos testes funcionais, confirmar que o sistema funciona de acordo com a especificação. No entanto, seguem uma filosofia muito diferente. A cada história estão associados um conjunto de testes de aceitação, que devem ser definidos &lt;em&gt;pelo cliente&lt;/em&gt;, &lt;em&gt;antes&lt;/em&gt; &lt;em&gt;da construção da história&lt;/em&gt;. Apesar de ser o cliente o primeiro responsável pela definição dos testes, a equipa de desenvolvimento, especialmente se tiver experiência no tipo de sistema a ser desenvolvido, também pode contribuir com a definição de alguns testes.&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana"&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana"&gt;O nome, testes de aceitação, tem como objectivo indicar que estes são os testes que o cliente definiu como sendo necessários o sistema passar de modo a que a história possa ser dada como concluída. Assim, temos uma forma clara e objectiva de saber se temos o trabalho pronto ou não, uma vantagem importantíssima.&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana"&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana"&gt;Imaginemos a história &amp;quot;Um cliente deve-se registar indicando como código de utilizador o e-mail e escolhendo uma palavra-chave alfa-numérica.&amp;quot;. Que testes de aceitação podemos definir? Não é difícil de imaginar alguns:&lt;/font&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;font face="Verdana"&gt;&amp;quot;O código de utilizador deve ser validado que tem o formato de um email, tanto quanto possível. Por exemplo, o código de utilizador &lt;/font&gt;&lt;a href="mailto:joao.hugo.miranda@pardaisaoninho.com"&gt;&lt;font face="Verdana"&gt;joao.hugo.miranda@pardaisaoninho.com&lt;/font&gt;&lt;/a&gt;&lt;font face="Verdana"&gt; deve ser válido mas o código de utilizador joao não.&amp;quot; &lt;/font&gt;
&lt;/li&gt;&lt;li&gt;&lt;font face="Verdana"&gt;&amp;quot;Uma palavra-chave não deve aceitar caracteres que não os A-Z, a-z e 0-9.&amp;quot; &lt;/font&gt;
&lt;/li&gt;&lt;li&gt;&lt;font face="Verdana"&gt;&amp;quot;Depois de registado, o cliente deve receber uma confirmação provisória do registo.&amp;quot; &lt;/font&gt;
&lt;/li&gt;&lt;li&gt;&lt;font face="Verdana"&gt;&amp;quot;Se o código de utilizador estiver errado, o cliente deve ser informado do motivo.&amp;quot;&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;div&gt;&lt;font face="Verdana"&gt;O mais bonito, é que muitos destes testes podem ser automatizados. A framework mais famosa é o &lt;/font&gt;&lt;a href="http://fit.c2.com/"&gt;&lt;font face="Verdana"&gt;Fit&lt;/font&gt;&lt;/a&gt;&lt;font face="Verdana"&gt;\&lt;/font&gt;&lt;a href="http://www.fitnesse.org/"&gt;&lt;font face="Verdana"&gt;Fitnesse&lt;/font&gt;&lt;/a&gt;&lt;font face="Verdana"&gt;.&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;u&gt;&lt;font face="Verdana"&gt;&lt;/font&gt;&lt;/u&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana"&gt;Em resumo, as histórias são o ponto de partida para resolver muitos dos problemas associados ao planeamento e à especificaçãod e requisitos. São &lt;strong&gt;simples&lt;/strong&gt;, estabelecem critérios bastante objectivos de conclusão, são facilmente entendíveis por todos os envolvidos.&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;u&gt;&lt;font face="Verdana"&gt;&lt;/font&gt;&lt;/u&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Verdana"&gt;Há muito mais para dizer sobre histórias, mas... não é para já. Se estiverem interessados, leiam o livro que indiquei acima ou outro sobre Extreme Programming. Entretanto, espero escrever mais algumas coisas sobre isto mas não tenho sido muito regular nos últimos... meses!!! ;P&lt;/font&gt;&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.org/aggbug.aspx?PostID=2506" width="1" height="1"&gt;</description><category domain="http://pontonetpt.org/blogs/contracorrente/archive/tags/Metodologias+_2600_+Processos/default.aspx">Metodologias &amp; Processos</category></item><item><title>Voltei a programar - Construção do Sistema (Logging)</title><link>http://pontonetpt.org/blogs/contracorrente/archive/2005/07/07/P5138.aspx</link><pubDate>Thu, 07 Jul 2005 22:26:00 GMT</pubDate><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:2505</guid><dc:creator>João Hugo Miranda</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://pontonetpt.org/blogs/contracorrente/rsscomments.aspx?PostID=2505</wfw:commentRss><comments>http://pontonetpt.org/blogs/contracorrente/archive/2005/07/07/P5138.aspx#comments</comments><description>&lt;p&gt;&lt;font face="Arial" size="2"&gt;Neste quinto post irei falar um pouco sobre uma parte que costuma ser muito negligenciada, pelo menos no desenvolvimento de aplicações servidor: Logging. Não terá muitoa ver com agilidade, mas também aqui existem alguns pontos importantes.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial" size="2"&gt;O componente de logging que utilizei foi o log4net (inspirado no log4j), do qual tomei conhecimento pela primeira vez através de um post do Pedro Santos. Outras possibilidades são o componente da Microsoft Enterprise Library ou o NLog (que nunca experimentei). O componente é muitíssimo bom e recomendo-o vivamente.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial" size="2"&gt;Desde o início do projecto, defini que a lógica de logging seria cidadão de primeira classe. A generalidade dos sistemas com os quais me deparei tem uma infra-estrutura de logging fraca... algumas vezes miserável ou inexistente mesmo! Este é um problema gravíssimo no momento em que o sistema passa a produção, como tenho a certeza que todos vocês reconhecem. O padrão habitual da infra-estrutura de logging, pela minha experiência tem as seguintes características:&lt;/font&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;font face="Arial" size="2"&gt;Utilização de apenas dois níveis de log: Erro e Debug. Nível de Aviso, Info ou outros, apesar de estarem disponíveis, são ignorados.&lt;/font&gt; 
&lt;/li&gt;&lt;li&gt;&lt;font face="Arial" size="2"&gt;O nível de Erro regista excepções (ou Err.Raises no VB6). O nível de Debug regista entrada e saída de métodos.&lt;/font&gt; 
&lt;/li&gt;&lt;li&gt;&lt;font face="Arial" size="2"&gt;As outras, poucas mensagens, são do tipo: &amp;quot;Estou aqui 1...&amp;quot;, &amp;quot;Estou aqui 2...&amp;quot;, &amp;quot;Passei, carago!&amp;quot;.&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;font face="Arial" size="2"&gt;Quando a aplicação passa a produção e começam a surgir os primeiros problemas, o resultado é o óbvio: horas infindas à procura do problema; adição de mensagens de forma totalmente ad-hoc e à pressão. Estou convencido que os problemas com as mensagens de log são fortes indutores do síndrome de abstinência do programador: &amp;quot;Eu preciso de acesso a Produção! Preciso! Dá-me acesso a Produção! Se não me deres acesso, amuo! Como é que eu sei o que se passa com o MEU sistema?&amp;quot;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial" size="2"&gt;Eu sou tão culpado disto como todos os outros. No meu primeiro projecto, necessitei de pegar em código legado. A minha primeira decisão? Apagar todas as mensagens de log que o componente continha. Quando chegou a Produção é que foi o bom e o bonito... um episódio muito revelador da minha &amp;quot;verdura&amp;quot; e da preocupação com a qualidade da empresa para que trabalhava...&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial" size="2"&gt;Bom, neste projecto as coisas foram muito diferentes. Defini diversas linhas de orientação:&lt;/font&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;font face="Arial" size="2"&gt;Abandonar os logs &amp;quot;mecânicos&amp;quot; no início e no fim de cada método.&lt;/font&gt; 
&lt;/li&gt;&lt;li&gt;&lt;font face="Arial" size="2"&gt;Pensar em cada momento quais as mensagens de logs necessárias. Qual o texto da mensagem, e quais os dados a &amp;quot;loggar&amp;quot;, tendo o devido cuidado com dados potencialmente sensíveis.&lt;/font&gt; 
&lt;/li&gt;&lt;li&gt;&lt;font face="Arial" size="2"&gt;O texto da mensagem de log deve estar sempre o mais próximo possível da linguagem do domínio, com as excepções em que a parte realmente importante é a técnica (detalhes de pedidos HTTP/XML, por exemplo).&lt;/font&gt; 
&lt;/li&gt;&lt;li&gt;&lt;font face="Arial" size="2"&gt;Utilizar todos os níveis de log de forma construtiva. Decidir conscientemente qual o nível de log a que uma dada mensagem pertence.&lt;/font&gt; 
&lt;/li&gt;&lt;li&gt;&lt;font face="Arial" size="2"&gt;Periodicamente, nos code reviews, analisar especificamente os logs. &amp;quot;Se a aplicação falhasse neste ponto, conseguia perceber o que se tinha passado até ao momento?&amp;quot;, &amp;quot;Este log deve ser um info, um debug, um warning?&amp;quot;&lt;/font&gt; 
&lt;/li&gt;&lt;li&gt;&lt;font face="Arial" size="2"&gt;Tomar em atenção o potencial impacto na performance das mensagens de log.&lt;/font&gt; 
&lt;/li&gt;&lt;li&gt;&lt;font face="Arial" size="2"&gt;Criar testes unitários para as mensagens de log.&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;font face="Arial" size="2"&gt;O resultado final, do meu ponto de vista, é muito satisfatório. Ao ler os logs no nível Info, é possível compreender facilmente o fluxo de execução do programa, os seus blocos lógicos. Aumentando o nível para Debug é possível, para além disso, recolher um manancial de informação, detalhada, que permite compreender o que realmente se passou durante a execução do programa.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial" size="2"&gt;Os logs foram úteis também numa outra situação. Por vezes, quando criamos testes, é dificíl testar determinados comportamentos internos (privados) de um objecto, existindo múltiplas técnicas para lidar com a situação. Algo de que tomei consciência neste projecto é que em algumas situações os logs permitem testar de forma indirecta esses comportamentos, o que representa uma vantagem adicional. É claro que este deve ser uma espécie de último recurso (ou recurso complementar), mas é mais uma ferramenta que podemos utilizar.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial" size="2"&gt;No próximo post... acho que será sobre performance counters. Também é algo muito engraçado.&lt;/font&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.org/aggbug.aspx?PostID=2505" width="1" height="1"&gt;</description><category domain="http://pontonetpt.org/blogs/contracorrente/archive/tags/Metodologias+_2600_+Processos/default.aspx">Metodologias &amp; Processos</category></item><item><title>Voltei a programar - Construção do Sistema (TDD)</title><link>http://pontonetpt.org/blogs/contracorrente/archive/2005/07/06/P5118.aspx</link><pubDate>Wed, 06 Jul 2005 21:55:00 GMT</pubDate><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:2504</guid><dc:creator>João Hugo Miranda</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://pontonetpt.org/blogs/contracorrente/rsscomments.aspx?PostID=2504</wfw:commentRss><comments>http://pontonetpt.org/blogs/contracorrente/archive/2005/07/06/P5118.aspx#comments</comments><description>&lt;p&gt;&lt;font face="Arial" size="2"&gt;Este é o quarto post sobre um projecto em que tive de conciliar formalidade com agilidade, no qual abordarei a Construção do Sistema do ponto de vista do programador.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial" size="2"&gt;O príncipio orientador de todo o processo foi utilizar o Test-Driven Development (TDD), o que implica e&lt;/font&gt;&lt;font face="Arial" size="2"&gt;screver os testes unitários antes do código em si (A parte &amp;quot;Red, Green&amp;quot; do mantra) e fazer &lt;/font&gt;&lt;font face="Arial" size="2"&gt;Refactoring intensivamente (A parte &amp;quot;Refactor&amp;quot; do mantra). &lt;/font&gt;&lt;font face="Arial" size="2"&gt;Consegui seguir a prática em toda a sua pureza? Não, por duas razões principais. &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial" size="2"&gt;Em primeiro lugar, devido aos constrangimentos relacionados com a necessidade de ter um desenho detalhado antes de avançar para a construção, naturalmente que não pude escrever os testes antes do código, pelo menos a 100%. No entanto, estes constrangimentos não me impediram de alterar o desenho sempre que necessário e não me impediram de criar os testes antes de criar o corpo do método (se bem se recordam, a API foi criada na fase de desenho, mas os métodos estavam todos vazios, sem código). De certa forma, confirmou-se aquilo em que acredito: o peso de definir a API previamente não compensa os ganhos, na maior parte dos casos. O BUFD (Big Up-Front Design) não compensa, especialmente nos casos em que os requisitos são mais voláteis. É claro que sou parcial, mas é a minha convicção, baseada na minha experiência e na de projectos que acompanhei de fora.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial" size="2"&gt;Em segundo lugar, ainda me falta alguma prática. É um método muito diferente do habitual e que exige prática. Nomeadamente, sinto que os meus testes podem ser simplificados, ou seja, nalguns casos crio testes demasiado grandes, que verificam demasiadas coisas. Apesar disso, este é um ponto em que acho que estou bastante melhor agora do que há uns meses atrás. Seguir o mantra &amp;quot;Red, Green, Refactor&amp;quot; - criar o teste, fazê-lo passar o mais depressa possível, arrumar o código - exige prática e concentração. Sinto que ainda posso melhorar um bocado, especialmente na separação entre o Green e o Refactor. Nalgumas situações mais complexas, ainda tendo a misturar as duas coisas e é importante mantê-las separadas.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial" size="2"&gt;No entanto, os efeitos do TDD são dramáticos, algo que senti desde que comecei a praticá-lo. Mesmo quando ainda tinha muito pouca (ou nenhuma) experiência na prática, mas muita vontade de aprender, a sensação de liberdade e segurança é extraordinária (às vezes demasiada...). O TDD liberta-nos do constragimento que costuma agrilhoar o processo de desenvolvimento: o medo de mexer (If it ain&amp;#39;t broke, don&amp;#39;t fix it). Com o TDD o software fica realmente soft, como diz o Fowler ou o Beck, a sua manipulação torna-se possível e deixa de ser uma coisa rígida... a comparação da programação com a engenharia civil perde um pouco o sentido... ;)&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial" size="2"&gt;Ao longo do processo de Construção o desenho do Sistema sofreu múltiplas alterações. Diversos conceitos, que estavam escondidos, apareceram e foram explicitados em objectos. O desenho final do Sistema é bastante melhor do que o inicial, algo que é muito raro acontecer com os métodos tradicionais. A liberdade de experimentar e moldar, com a segurança e disciplina do TDD, é algo que uma vez experimentado não se quer voltar a perder. &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial" size="2"&gt;Sem o TDD conseguiria toda esta flexibilidade? Não, não e não. A qualidade do desenho decairia à medida que se ia dando uma marteladinha ali, outra acolá, &amp;quot;só mais este toque aqui&amp;quot;. Expressões como &amp;quot;Sei que é uma martelada, mas agora não há tempo&amp;quot;, é algo que tende a desaparecer de uma forma totalmente natural, sem esforço. Claro que nunca desaparece totalmente, afinal o mundo real é cheio de imperfeições.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial" size="2"&gt;O TDD liberta-nos da necessidade de testes funcionais (ou de aceitação)? Não, de maneira nenhuma. Os testes funcionais abordam um problema diferente. Os testes unitários orientam o Programador, ajudam este a seguir o caminho que pretende. Os testes de aceitação certificam que o Sistema faz o que o Cliente pretende. Podem ser duas coisas diferentes... mas práticas como realizar iterações de desenvolvimento muito curtas, de que falei no post anterior, garantem que a dessincronização entre Programador e Cliente é negligenciável.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial" size="2"&gt;No próximo post continuamos com a saga,  para não tornar o post demasiado grande e maçador...&lt;/font&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.org/aggbug.aspx?PostID=2504" width="1" height="1"&gt;</description><category domain="http://pontonetpt.org/blogs/contracorrente/archive/tags/Metodologias+_2600_+Processos/default.aspx">Metodologias &amp; Processos</category></item><item><title>Voltei a programar - A Construção do Sistema (Gestão de Projecto)</title><link>http://pontonetpt.org/blogs/contracorrente/archive/2005/07/05/P5079.aspx</link><pubDate>Tue, 05 Jul 2005 07:23:00 GMT</pubDate><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:2503</guid><dc:creator>João Hugo Miranda</dc:creator><slash:comments>8</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://pontonetpt.org/blogs/contracorrente/rsscomments.aspx?PostID=2503</wfw:commentRss><comments>http://pontonetpt.org/blogs/contracorrente/archive/2005/07/05/P5079.aspx#comments</comments><description>&lt;p&gt;&lt;font face="Arial" size="2"&gt;Se bem se recordam, nos dois posts anteriores abordei o modo como ataquei o problema de ter de realizar um projecto de forma ágil, como eu acredito que é mais produtivo &lt;em&gt;e motivador&lt;/em&gt;, num enquadramento mais tradicional, de quatro fases: Concepção, Elaboração, Construção e Transição. Nos outros dois posts abordei as duas primeiras fases, vou agora falar da terceira.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;&lt;strong&gt;A Construção&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial" size="2"&gt;A fase de Construção foi aquela em que se tornou mais simples conciliar a agilidade com a formalidade. &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial" size="2"&gt;Iniciei esta fase com a definição do planeamento detalhado de toda a fase de Construção (+/- 2 meses), o que não é muito ágil... No entanto dividi o planeamento em iterações semanais, tendo por base duas linhas orientadoras:&lt;/font&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;font face="Arial" size="2"&gt;As user stories. As tarefas foram definidas em termos de implementar user stories, utilizando sempre a Linguagem Ubíqua e evitando termos técnicos. Por exemplo, não dividimos as tarefas em termos de camadas (UI, Negócio, BD), mas em termos de &amp;quot;Implementar Repositório de Templates&amp;quot;, ou &amp;quot;Gerar documentos Word Mono-Conteúdo&amp;quot;.&lt;/font&gt; 
&lt;/li&gt;&lt;li&gt;&lt;font face="Arial" size="2"&gt;Obter um aplicação funcional em permanência. No fim de cada iteração, a aplicação teria de ter qualidade para passar a produção se necessário.... e fazer algo de útil.&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;font face="Arial" size="2"&gt;Estas duas linhas orientadoras permitiram que a aplicação estivesse num estado &amp;quot;controlado&amp;quot;, quase em permanência, e permitiu também que a aplicação estivesse &amp;quot;usável&amp;quot; quase desde a primeira iteração. Reparem que estas duas características, pelo menos na minha experiência, são difíceis de conseguir numa aplicação desenvolvida através do modelo tradicional, simplesmente porque estas duas características não fazem parte dos objectivos definidos ao longo do projecto, mas apenas no &lt;em&gt;fim do projecto&lt;/em&gt;.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial" size="2"&gt;Para além disso, no início de cada iteração, ou seja, semanalmente, tinha uma reunião com o meu chefe, onde analisávamos a iteração anterior e, em função dessa iteração e das anteriores a essa, ajustávamos o planeamento. Neste caso em concreto, a diferença em relação ao normal não é muita. A diferença é que ajustávamos sempre o planeamento tendo como regra dividir as tarefas em iterações de uma semana. Tarefas que não estivessem terminadas numa dada iteração eram partidas em duas, sempre que possível.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial" size="2"&gt;Do ponto de vista de gestão do projecto, estas eram as grandes linhas. Por exemplo, no que diz respeito ao relacionamento com o cliente não havia grandes questões porque os clientes eramos nós... Posso afirmar que as duas linhas orientadoras que definimos tiveram uma importância fundamental no controlo (e sucesso) do projecto. É algo que recomendo vivamente, seja qual for (bom, já sabemos que hão-de existir algumas excepções...) o tipo de metodologia utilizada.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;&lt;font size="2"&gt;No próximo post abordarei a parte mais técnica do projecto, ou seja, a construção propriamente dita.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.org/aggbug.aspx?PostID=2503" width="1" height="1"&gt;</description><category domain="http://pontonetpt.org/blogs/contracorrente/archive/tags/Metodologias+_2600_+Processos/default.aspx">Metodologias &amp; Processos</category></item><item><title>Voltei a programar - A Elaboração do Sistema</title><link>http://pontonetpt.org/blogs/contracorrente/archive/2005/06/28/P4993.aspx</link><pubDate>Tue, 28 Jun 2005 07:21:00 GMT</pubDate><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:2502</guid><dc:creator>João Hugo Miranda</dc:creator><slash:comments>18</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://pontonetpt.org/blogs/contracorrente/rsscomments.aspx?PostID=2502</wfw:commentRss><comments>http://pontonetpt.org/blogs/contracorrente/archive/2005/06/28/P4993.aspx#comments</comments><description>&lt;p&gt;&lt;font face="Arial" size="2"&gt;Se bem se recordam (não foi assim há tanto tempo), estou a meio de uma história sobre a conciliação entre formalidade e agilidade... Entremos nas fases mais interessantes. No post anterior descrevi a fase de Concepção que não tem muito que saber. Avancemos para a próxima.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;&lt;strong&gt;Elaboração&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;font face="Arial" size="2"&gt;O Problema&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial" size="2"&gt;Na fase de elaboração realiza-se a análise funcional e técnica: elaboramos o caderno de requisitos; definimos a arquitectura do sistema; enquadramo-lo com os sistemas e a infra-estrutura existente; fazemos um desenho detalhado do sistema entre outras tarefas. O objectivo é ter tudo o mais planeado possível para diminuir o impacto dos imprevistos... bla, bla, bla. Todos sabem como é, não vale a pena estar a repetir-me. &lt;/font&gt;&lt;font face="Arial" size="2"&gt;Como provavelmente saberão, as metodologias ágeis não favorecem esta aproximação, pelo que me encontrei num dilema: o facto é que tinha de apresentar aqueles deliverables, mas eu queria à viva força tentar mitigar os problemas deste modo de trabalhar. Como conciliar as duas coisas? &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial" size="2"&gt;&lt;strong&gt;A Solução&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial" size="2"&gt;A resposta passou pelo aproveitamento do ambiente .Net e das ferramentas que a comunidade disponibiliza e, claro, pela aceitação dos chefes desta... experiência. Uma coisa que defini à partida foi que não queria fazer documentos Word inúteis, como aqueles que especificam o desenho do sistema, já que me parecem uma violação flagrante do princípio DRY (Don&amp;#39;t Repeat Yourself). Por outro lado, queria tentar montar desde o início um mecanismo iterativo, que me impusesse um ritmo saudável.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial" size="2"&gt;Os meus (três?) leitores regulares do meu blog irregular provavelmente já sabem a resposta: montar a Integração Contínua já nesta fase e programar desde o princípio. E foi mesmo a primeira coisa que fiz nesta fase.  Montei todo o ambiente de Integração Contínua:&lt;/font&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;font face="Arial" size="2"&gt;Criei imediatamente a estrutura do projecto no sistema de controlo de versões;&lt;/font&gt; &lt;font face="Arial" size="2"&gt;
&lt;li&gt;&lt;font face="Arial" size="2"&gt;Criei a solução no Visual Studio.Net;&lt;/font&gt; 
&lt;/li&gt;&lt;li&gt;&lt;font face="Arial" size="2"&gt;Configurei um projecto no CruiseControl.Net;&lt;/font&gt; 
&lt;/li&gt;&lt;li&gt;Criei o script de build, com o Nant;&lt;/li&gt;&lt;/font&gt; 
&lt;/li&gt;&lt;li&gt;&lt;font face="Arial" size="2"&gt;Muito importante nesta fase, montei desde logo o FxCop e o NDoc no processo de build;&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;font face="Arial" size="2"&gt;Depois de tudo montado, iniciei a especificação do código (ou desenho, ou modelação, ....), tal como necessário de acordo com os nossos métodos em vigor. Comecei por analisar os requisitos (que tentei criar em forma de user stories) e procurar os conceitos principais (não sei se alguma vez falei da Linguagem Ubíqua ou não... um dia mais tarde) e depois parti para o desenho detalhado do modelo de objectos.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial" size="2"&gt;Foi neste momento que realmente comecei a tirar partido do ambiente de Integração Contínua. No modelo tradicional, o desenho detalhado faz-se através de especificações em documentos Word (eventualmente com UML à mistura) que depois são transformadas em código na fase seguinte. Eu saltei os documentos e comecei logo com o código, mas obedecendo ao facto de esta fase ser somente de desenho:&lt;/font&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;font face="Arial" size="2"&gt;Criei apenas os objectos e as suas interfaces. Não criei o corpo dos métodos.&lt;/font&gt; 
&lt;/li&gt;&lt;li&gt;&lt;font face="Arial" size="2"&gt;Utilizei intensivamente os Xml Docs.&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;font face="Arial" size="2"&gt;O facto de ter realizado o desenho detalhado em código ofereceu-me várias vantagens:&lt;/font&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;font face="Arial" size="2"&gt;Obedeci a todos os requisitos, já que o código é apenas uma outra forma de documentação;&lt;/font&gt; 
&lt;/li&gt;&lt;li&gt;&lt;font face="Arial" size="2"&gt;Adiantei trabalho, já que a Integração Contínua ia ser montada de qq das formas;&lt;/font&gt; 
&lt;/li&gt;&lt;li&gt;&lt;font face="Arial" size="2"&gt;Graças ao NDoc, gerei documentação em HTML e CHM de forma automática, sendo que é possível criar um formato de documentação Word, pelo que temos essa documentação à mesma. O ponto importante é que a fonte é comum, pelo que não existem dessincronizações.&lt;/font&gt; 
&lt;/li&gt;&lt;li&gt;&lt;font face="Arial" size="2"&gt;Como o desenho foi realizado directamente no código, foi possível ir compilando tudo a cada momento, validando desde logo uma série de situações.&lt;/font&gt; 
&lt;/li&gt;&lt;li&gt;&lt;font face="Arial" size="2"&gt;Graças ao FxCop, em cada momento da &amp;quot;especificação&amp;quot; foi possível validar o desenho contra as guidelines da Microsoft.&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;font face="Arial" size="2"&gt;Um dos riscos desta abordagem, pelo menos do ponto de vista de quem defende uma fase de desenho separada da construção, é que a tendência dos programadores para começarem imediatamente a codificar tudo (dar comportamento aos objectos) e não apenas as interfaces é demasiado grande. Na minha experiência, apesar de ser totalmente a favor desse modelo (com algumas regras, naturalmente), consegui evitar a tentação, não foi difícil. Acho que na prática, não é um problema muito grande.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial" size="2"&gt;Em resumo, apesar de ter de seguir uma metodologia por fases, foi possível introduzir alguma agilidade no processo. Pouca, é verdade, mas com algumas vantagens que me parecem evidentes. O desenho detalhado que fiz tornou a fase de construção mais simples? Ajudou-me mesmo que não tenha me tenha impedido de redesenhar o modelo nalguns locais? &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial" size="2"&gt;Na fase seguinte, da Construção foi possível introduzir bastante mais agilidade no processo, com resultados (mais uma vez) muito satisfatórios, mas estou a pôr o carro à frente dos bois...&lt;/font&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.org/aggbug.aspx?PostID=2502" width="1" height="1"&gt;</description><category domain="http://pontonetpt.org/blogs/contracorrente/archive/tags/Metodologias+_2600_+Processos/default.aspx">Metodologias &amp; Processos</category></item><item><title>Voltei a programar - Como conciliar agilidade com formalidade?</title><link>http://pontonetpt.org/blogs/contracorrente/archive/2005/06/26/P4977.aspx</link><pubDate>Sun, 26 Jun 2005 21:24:00 GMT</pubDate><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:2501</guid><dc:creator>João Hugo Miranda</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://pontonetpt.org/blogs/contracorrente/rsscomments.aspx?PostID=2501</wfw:commentRss><comments>http://pontonetpt.org/blogs/contracorrente/archive/2005/06/26/P4977.aspx#comments</comments><description>&lt;p&gt;&lt;font face="Arial" size="2"&gt;Nos ultimos meses, voltei a fazer uma coisa que não fazia há bastante tempo: fiz um projecto de software do princípio ao fim. A questão é que o meu papel na empresa não é programar, é mais uma mistura de arquitectura, metodologias e processos, administração... uma série de tretas, mas o principal é mesmo metodologias e processos (pelo menos para mim). &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial" size="2"&gt;Há uns meses, surpreendentemente, o meu chefe (ou melhor, o chefe do meu chefe) atribui-me um projecto, um gerador de documentos (os pormenores são pouco importantes, não vem ao caso.). No essencial, tive de fazer tudo: análise e planeamento, desenho, programação, testes. &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial" size="2"&gt;Foi muito interessante porque o meu chefe é a favor de se realizar uma análise e um desenho detalhado, desde a arquitectura, passando ao modelo de objectos, até ao nível dos métodos e respectivas assinaturas, tudo devidamente documentado. Por outro lado, eu sou a favor das metodologias ágeis, como talvez ainda se lembrem. O meu desafio foi conseguir conciliar as duas coisas...&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial" size="2"&gt;Regra geral, a nossa metodologia é a tradicional, por fases: a Concepção, a Elaboração, a Construção e a Transição. Diga-se em abono da verdade que tem tido os seus resultados. &lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial" size="2"&gt;&lt;strong&gt;Concepção&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial" size="2"&gt;A fase de concepção é aquela em que se define qual o problema que pretendemos resolver e justificamos o investimento na sua resolução. Pensamos também, de modo muito geral qual a melhor forma de o resolver. Esta é uma fase que me parece que tem sempre de existir, porque não faz sentido resolver um problema que não existe! As diferenças começam daqui para a frente...&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial" size="2"&gt;As próximas fases (e o sumo de toda esta história) continuam no nos próximos posts, espero.... Agora tenho mais algum tempo do que tenho tido nos últimos (largos meses), vou tentar retomar o fio à meada. Não sei se alguém sente a falta, mas eu sinto. ;)&lt;/font&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.org/aggbug.aspx?PostID=2501" width="1" height="1"&gt;</description><category domain="http://pontonetpt.org/blogs/contracorrente/archive/tags/Metodologias+_2600_+Processos/default.aspx">Metodologias &amp; Processos</category></item><item><title>Common People</title><link>http://pontonetpt.org/blogs/contracorrente/archive/2005/03/12/P4046.aspx</link><pubDate>Sat, 12 Mar 2005 18:48:00 GMT</pubDate><guid isPermaLink="false">9d4b03f4-ce39-4703-ab9d-5b341a2c824e:2500</guid><dc:creator>João Hugo Miranda</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://pontonetpt.org/blogs/contracorrente/rsscomments.aspx?PostID=2500</wfw:commentRss><comments>http://pontonetpt.org/blogs/contracorrente/archive/2005/03/12/P4046.aspx#comments</comments><description>&lt;div&gt;&lt;font face="Arial" size="2"&gt;Tenho tanta coisa para falar, mas tão pouco tempo para o fazer, como devem ter reparado (espero!!!)... :( Performance Counters, Visual Studio.Net Templates, Word, Domain-Driven Design?&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Arial" size="2"&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Arial" size="2"&gt;Nos entretantos...&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Arial" size="2"&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Arial" size="2"&gt;&amp;#39;She came from Greece she had a thirst for knowledge,&lt;br /&gt;she studied sculpture at Saint Martin&amp;#39;s College,&lt;br /&gt;that&amp;#39;s where I,&lt;br /&gt;caught her eye.&lt;br /&gt;She told me that her Dad was loaded,&lt;br /&gt;I said &amp;quot;In that case I&amp;#39;ll have a rum and coca-cola.&amp;quot;&lt;br /&gt;She said &amp;quot;Fine.&amp;quot;&lt;br /&gt;and in thirty seconds time she said,&lt;br /&gt;&lt;br /&gt;&amp;quot;I want to live like common people,&lt;br /&gt;I want to do whatever common people do,&lt;br /&gt;I want to sleep with common people,&lt;br /&gt;I want to sleep with common people,&lt;br /&gt;like you.&amp;quot;&lt;br /&gt;&lt;br /&gt;Well what else could I do -&lt;br /&gt;I said &amp;quot;I&amp;#39;ll see what I can do.&amp;quot;&lt;br /&gt;I took her to a supermarket,&lt;br /&gt;I don&amp;#39;t know why but I had to start it somewhere,&lt;br /&gt;so it started there.&lt;br /&gt;I said pretend you&amp;#39;ve got no money,&lt;br /&gt;she just laughed and said,&lt;br /&gt;&amp;quot;Oh you&amp;#39;re so funny.&amp;quot;&lt;br /&gt;I said &amp;quot;yeah?&lt;br /&gt;Well I can&amp;#39;t see anyone else smiling in here.&lt;br /&gt;Are you sure you want to live like common people,&lt;br /&gt;you want to see whatever common people see,&lt;br /&gt;you want to sleep with common people,&lt;br /&gt;you want to sleep with common people,&lt;br /&gt;like me.&amp;quot;&lt;br /&gt;But she didn&amp;#39;t understand,&lt;br /&gt;she just smiled and held my hand.&lt;br /&gt;Rent a flat above a shop,&lt;br /&gt;cut your hair and get a job.&lt;br /&gt;Smoke some fags and play some pool,&lt;br /&gt;pretend you never went to school.&lt;br /&gt;But still you&amp;#39;ll never get it right,&lt;br /&gt;cos when you&amp;#39;re laid in bed at night,&lt;br /&gt;watching roaches climb the wall,&lt;br /&gt;if you call your Dad he could stop it all.&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Arial" size="2"&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Arial" size="2"&gt;You&amp;#39;ll never live like common people,&lt;br /&gt;you&amp;#39;ll never do what common people do,&lt;br /&gt;you&amp;#39;ll never fail like common people,&lt;br /&gt;you&amp;#39;ll never watch your life slide out of view,&lt;br /&gt;and dance and drink and screw,&lt;br /&gt;because there&amp;#39;s nothing else to do.&lt;br /&gt;&lt;br /&gt;Sing along with the common people,&lt;br /&gt;sing along and it might just get you through,&lt;br /&gt;laugh along with the common people,&lt;br /&gt;laugh along even though they&amp;#39;re laughing at you,&lt;br /&gt;and the stupid things that you do.&lt;br /&gt;Because you think that poor is cool.&lt;br /&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font&gt;&lt;font face="Arial" size="2"&gt;Like a dog lying in a corner&lt;br /&gt;They will bite you and never warn you&lt;br /&gt;Look out.&lt;br /&gt;&lt;br /&gt;They&amp;#39;ll tear your insides out&lt;br /&gt;&lt;br /&gt;`cos everybody hates a tourist&lt;br /&gt;Especially one who thinks it&amp;#39;s all such a laugh&lt;br /&gt;Yeah and the chip stain and grease will come out in the bath&lt;br /&gt;&lt;br /&gt;You will never understand&lt;br /&gt;How it feels to live your life&lt;br /&gt;With no meaning or control&lt;br /&gt;And with nowhere left to go&lt;br /&gt;You are amazed that they exist&lt;br /&gt;And they burn so bright whilst you can only wonder why.&lt;br /&gt;&lt;br /&gt;Rent a flat above a shop&lt;br /&gt;Cut your hair and get a job&lt;br /&gt;Smoke some fags and play some pool&lt;br /&gt;Pretend you never went to school&lt;br /&gt;But still you&amp;#39;ll never get it right&lt;br /&gt;`cos when you&amp;#39;re laid in bed at night&lt;br /&gt;Watching .... roaches climb the wall&lt;br /&gt;If you called your Dad he could stop it all, Yeah.&lt;br /&gt;&lt;br /&gt;Never live like common people&lt;br /&gt;Never do what common people do&lt;br /&gt;Never fail like common people&lt;br /&gt;Never watch your life .... slide out of view&lt;br /&gt;&lt;br /&gt;And then dance, and drink, .... and screw&lt;br /&gt;Because there&amp;#39;s nothing else to do&amp;#39;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font&gt;&lt;font face="Arial" size="2"&gt;&lt;/font&gt;&lt;/font&gt; &lt;/div&gt;
&lt;div&gt;&lt;font&gt;&lt;font face="Arial" size="2"&gt;                                                         Pulp&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://pontonetpt.org/aggbug.aspx?PostID=2500" width="1" height="1"&gt;</description><category domain="http://pontonetpt.org/blogs/contracorrente/archive/tags/Apontamentos_2E00__2E00__2E00_/default.aspx">Apontamentos...</category></item></channel></rss>
