June 18th, 2007XP 2007 – Dia 1
Apesar de ler e concordar com o Thiago que esse tipo de post não é o ideal, meu blog se encaixa nessa categoria a maioria das vezes, portanto por que não continuar mais um pouco? :-) Prometo tentar melhorar depois dessa série. Além disso, sei que algumas pessoas vão se beneficiar desses relatos (me incluo nessa lista, pois esse tipo de registro já me foi útil em outras ocasiões e agora eu terei que escrever um relatório de qualquer jeito). Então, aproveitem os meus comentários sobre a XP 2007, diretamente de Como, na Itália.
Selling: How to Effectively Communicate the Value of Agility? – Joshua Kerievsky
Quem nunca teve problemas “vendendo” ou apresentando algumas das práticas ágeis para outras pessoas? Na AgilCoop eu me vi nessa situação diversas vezes: “Programação Pareada? Metade da Produtividade?”, “Parar para escrever testes e refatorar? Não posso parar, preciso entregar novas funcionalidades!”, e por aà vai. Por causa dessas e outras pré-concepções (não estou dizendo preconceito, muitas vezes eles são infudados), muitas pessoas resistem a mudanças.No tutorial, Joshua, fundador da Industrial Logic e escritor do ótimo livro Refactoring to Patterns (que, por sinal, estou lendo agora), nos fez passar pela experiência da mudança através de uma pequena simulação, mostrando como mudar é anti-natural para as pessoas e como geralmente associamos mudança com a perda de alguma coisa (ao invés de ganho). Uma das discussões foi sobre a curva de mudanças de Virginia Satir, que diz que toda mudança leva um tempo para surtir efeito, passando por uma fase de caos antes de atingir um novo patamar, melhor que o anterior:Através de algumas histórias sobre vendas bem e mal sucedidas, ele apresentou algumas das caracterÃsticas de uma boa venda:- Venda apenas o necessário: Isso inclui conhecer muito bem o problema e o contexto do seu cliente. Muitas vezes a solução para um problema pode ser obtida com custo reduzido se o verdadeiro problema é identificado. Quando a única ferramenta disponÃvel é um martelo, todos os problemas se parecem com um prego.
- Venda riscos: ao invés de enfatizar os benefÃcios de uma prática ou outra, discuta com os interessados quais os riscos associados a não implementá-las.
- Compartilhe experiências: um gerente ou executivo não vai entender os benefÃcios dos testes automatizados, pois essa não é a linguagem que ele entende. Procure compartilhar vÃdeos, fotos e experiências de equipes que obtiveram sucesso, para que ele vivencie os benefÃcios.
Diversos outros assuntos e histórias foram compartilhados nesse tutorial, além de algumas boas recomendações de leitura: Selling the Invisible e The Secrets of Consultancy (esse eu já ouvi falar muito bem em diversos outros lugares).
Coder's Dojo: Acceptance-Test Driven Development in Python – Emily Bache and Geoff Bache
Nessa apresentação, em formato de Dojo, resolvemos parte de um problema do Ruby Quiz (Texas Hold'em) em Python, usando uma variação um pouco diferente de TDD, escrevendo os testes de aceitação antes. Nesse caso, o teste de aceitação final seria a saÃda esperada do programa, conforme a página de descrição no Ruby Quiz. Ao partir de cenários mais simplificados (porém ainda de aceitação) e utilizando o TextTest como ferramenta de teste, resolvemos parte do problema (infelizmente, o problema era grande demais para o tempo disponÃvel). Algumas das minhas impressões da experiência:- Como o exercÃcio era relativamente simples comparado a um cenário real, os testes de aceitação, que escrevÃamos incrementalmente, eram muito parecidos com testes de unidade. Apesar disso, os exemplos ainda estavam na “linguagem de negócio” do poker. Isso pode ter confundido um pouco algumas pessoas da platéia que não tinham experiência com TDD.
- Para quem tem experiência com TDD os passos pareciam um pouco grandes demais, apesar de ainda pequenos. Muitas vezes precisamos implementar muita coisa para fazer um teste de aceitação passar. Uma discussão interessante que tive depois da sessão, com o Emmanuel Gallot (fundador do Dojo de Paris, o mais antigo Dojo em funcionamento) e os apresentadores, percebemos que existem duas abordagens para aplicar TDD: enquanto alguns preferem escrever diversos testes de aceitação para “pedir” por uma implementação, outros preferem quebrar as necessidades que vão surgindo ao longo do caminho, e aplicar TDD separadamente para cada parte antes de integrar tudo no cenário de aceitação inicial. A primeira abordagem tem a vantagem de conectar toda funcionalidade com um teste de aceitação, enquanto a segunda acaba gerando diversos passos intermediários que, em muitas situações, são mais fáceis de acompanhar e fazem o design surgir da necessidade. Eu me identifiquei mais com a segunda abordagem, apesar de entender que é possÃvel seguir outro caminho.
- O TextTest é uma ferramenta de teste em Python baseada na comparação de texto ou, em outras palavras, um teste baseado em diffs da saÃda do programa. Eu não conhecia a ferramenta e achei interessante duas práticas aplicadas pelos apresentadores (que estavam seguindo a primeira das abordagens que apresentei acima): em primeiro lugar, a ferramenta permite salvar a saÃda esperada de acordo com o que aconteceu (resultado da execução do teste). Isso permite que você diga que o resultado do teste que acabou de falhar, na verdade está correto. A princÃpio, isso me pareceu “roubar”, mas como a abordagem deles era diferente, permitiu que eles convivessem com a implementação atual, podendo refatorar no verde (no final da sessão, algumas pessoas disseram preferir uma cor amarela para essa situação. Eu concordo). A segunda prática é a utilização de logs nos cenários de teste. Como a ferramenta se baseia na saÃda de texto do programa, os apresentadores puderam testar passos intermediários com logs que “explicam” o que o programa está fazendo. Eu pessoalmente batizei a técnica de printf-debugging automatizado :-)
Bom, por hoje foi isso. Continuo com os relatos com o passar da semana. Se estiverem interessados em fazer alguma pergunta para alguém importante aqui na conferência, deixem um comentário que eu tentarei entrar em contato. Alguns dos nomes que podem interessar estão disponÃveis no website da Conferência.
June 19th, 2007 at 3:58 am
Dei uma browseada por alto no site do TextTest mas não entendi como ele é diferente (ou, em particular, melhor) do que doctest com uma interface gráfica. Ou ele é exatamente isso? :)
June 19th, 2007 at 4:17 am
Talvez o funcionamento seja parecido mesmo, mas o que muda é a linguagem na qual você escreve/define os testes. No doctest, você ainda é obrigado a ser um programador, pois escreve os testes como se estivesse programando Python. No Texttest, você pode fazer com que o seu cliente defina os cenários de aceitação. Se olhar na página do RubyQuiz, os exemplos de lá são testes de aceitação (na linguagem do cliente). Mas, como falei, esse exemplo era bem simples e não deixa tão claro a diferença entre testes de aceitaçnao e de unidade.
June 20th, 2007 at 4:19 am
Danilo, eu não classificaria esse seu post como entrada de diário tão rápido. Afinal, o que você fez aqui não foi somente referenciar o site da conferência e dizer “fui para a XP 2007, aqui estão algumas fotos que tirei com alguns nerds famosos”, você expressou sua opinião sobre o evento e — o mais importante — acrescentou algo de útil para seus leitores.
Se todos os blogs-diário que encontro por aà fossem apinhados de artigos como este seu, com certeza a web seria um lugar melhor para se navegar.
June 23rd, 2007 at 12:58 pm
Valeu Thiago. Isso alivia um pouco minha consciência pesada :-)