Para aprender automação de testes e Test Driven Development (TDD)

Em 2001-2002 conheci o JUnit, ferramenta para escrita de testes unitários em Java. Em 2003 entendi mais da importância dela para o desenvolvimento de software. Descobri junto Delphi Unit, PHP Unit e outras várias versões e pude ajudar amigos a conhecem mais de uma cultura de melhoria contínua e de busca por código de qualidade e automatizado.

O que mudou?

Continuar a ler

Quer praticar programação? Coding Dojo!

Todos times deveriam ter um momento de prática. Um momento para desligar e viver situações diferentes. Treinar programação. Compartilhar pensamentos que não apareceriam no dia a dia de projeto.

Um Dojo é o lugar do caminho, é a casa dos praticantes de artes marciais. Desenvolvimento de Software além de ser uma atividade criativa, é uma arte. E como tal, deve ser estudada, praticada, e melhorada de forma constante.

A troca de experiências que ocorre em uma sessão de treinamento, entre pessoas com mais experiência e iniciantes é algo  único, uma oportunidade de aprender e de ensinar. De colaborar e ajudar na formação de melhores desenvolvedores.

É um ambiente de colaboração. Competição não possui lugar. É um ambiente de treinamento, onde práticas do eXtreme Programming como Desenvolvimento Orientado a Testes (TDD), Design Simples, Programação em Pares e Posse Coletiva podem ser compartilhadas. As ideias devem ser provadas com código. E todo novo código precisa aparecer evoluindo dentro do ciclo do TDD (Red-Green-Refactor). Explico: primeiro se faz a criação de um teste falhando um determinado cenário em foco, depois criar o mínimo necessário de código para fazer o teste passar e por fim aplicar técnicas de refatoração para melhorar a estrutura do código fonte, deixando ele mais simples. Ciclos curtos fazendo isto até fazer o que precisa ser feito.

Normalmente para se fazer um dojo se precisa de:

  1. Um problema a ser resolvido. É normalmente um problema de lógica, onde através de técnicas de design, evolução constante do código através da criação de testes e pequenos passos, este problema vai sendo trabalhado e evoluído. Eventualmente se pode chegar na solução do problema, mas o propósito do Dojo é estudar situações e oportunidades de projetar e resolver um determinado problema.
  2. Datashow ou forma de compartilhar o que está ocorrendo com os participantes.
  3. Uma estratégia para tocar o Dojo. Existem algumas, como o (a) Prepared Kata, onde um especialista resolve o problema do início ao fim. O que mais uso, o (b) Randori Kata, possui um timer tocando a cada 5-7 minutos, indicando uma nova rotação a ser feita. Temos apenas um computador sendo usado nesta abordagem, assim como é com o Prepared Kata. A cada rotação o desenvolvedor que ficou na máquina tem a tarefa de passar o conhecimento e situar quem está chegando. Aqui estão as oportunidades perfeitas para parear pessoas com grande diferença de conhecimento. Assim o aprendizado funciona muito melhor. Ainda temos o conceito de (c) Kake Kata, onde pequenos grupos se formam e resolvem o mesmo problena. As rotações ocorrem dentro do grupo e entre grupos. O desafio neste caso comparado com o Randori, é que a cada ciclo, estaremos visualizando código diferente e que não foi tocado anteriormente pelo time. Então o processo de aprendizado tem mais desafios.
  4. Pessoas. Pelo menos 1 pessoa. Se pode fazer um Prepared Kata e gravar para publicar online.  🙂
  5. E o tempo? Uma hora pode ser o suficiente para passar a mensagem e fazer o time trabalhar junto. Gosto de usar 60-80mins de tempo de trabalho.

E quer saber qual a parte mais legal? Esta estrutura de pareamento e colaboração pode ser usada para diversas abordagens! Desenvolvimento de um Business Canvas, escrita de requisitos em um dojo de análise de negócios, e por aí vai.

Update Jan/2019, vídeo sobre Coding Dojo.

Extras:

Dúvida para o seu primeiro Dojo? Pegue um problema simples como o FizzBuzz, escolha uma linguagem, um framework de teste e mande ver!

Oração, com uma pequena adaptação… :-)

A sensação do momento é ouvir A Banda Mais Bonita da Cidade, e a infinidade de clones dos vídeos deles. Depois de um papo que rolou na empresa eu comecei a pensar em uma versão para a música.

Então eu fiquei pensando em como mostrar alguns conceitos de Métodos Ágeis usando a brincadeira da música. Então aí vai. Pensei nos desafios que meu “timão” de trabalho passa no dia a dia. Apesar da equipe que me inspirei trabalhar com fluxo contínuo nos dias de hoje, em um modelo incremental de desenvolvimento e não mais com desenvolvimento iterativo e incremental, a minha brincadeira estava rimando com iteração, então vale uma licença poética. 🙂

Produção

Meu timão, só mais uma iteração
Pra deploy em produção
Aceitação não é tão simples quanto pensa
Nela cabe o que não cabe na cabeça
Do testador
TDD pra vida inteira
É design sem besteira
Pareando nós dois
E review do meu timão, só mais uma iteração
… e assim vai. 🙂

Bom, para ver a música original:

Curiosidade: O primeiro CD da Banda Mais Bonita da Cidade foi financiado de forma colaborativa (CrowdFunding) através do Catarse! Siga a Banda pelo Twitter.

Atualização: Se você quiser ver esta minha “versão” sendo tocada, veja este vídeo que fiz para o Agile Brazil 2011.

Testes para Desenvolvedores Delphi – Palestra da Delphi Online Conference

Eu tive a oportunidade de palestrar na Delphi Online Conference, evento realizado no dia 25 de fevereiro de 2010. Palestrei sobre Testes para Desenvolvedores Delphi, e foi uma oportunidade para tratar do assunto Metodologias Ágeis para a comunidade Delphi.

Esta mesma palestra eu apresentei ao vivo na Delphi Conference realizada em 2009.

Falei sobre Manifesto Ágil, princípios do Manifesto Ágil, falei sobre Sistema Toyota de Produção e Lean, falei sobre eXtreme Programming.

Depois entrei para ferramentas e um exemplo de uso. Na parte de ferramentas, falei sobre DUnit, Selenium IDE, Delphi Discover, Want, e inclusive publiquei o exemplo usado no Google Code (projeto Delphi Test Automation). Pretendo seguir trabalhando este exemplo para adicionar mais ferramentas e gerar mais informação para a comunidade.

É importante que todo desenvolvedor saiba trabalhar com diferentes técnicas de teste, exemplo testes de unidade ou testes funcionais. Ainda, que busquem técnicas e ferramentas de automação que levem a maior produtividade.

Afinal, tempo é dinheiro certo?

Não! 🙂

Como já diz o Jaime Wagner, tempo é vida. Então use seu tempo para automatizar ao máximo seu trabalho e invista seu tempo em outras coisas ao invés de ficar horas testando uma aplicação manualmente. Faça certo da primeira vez, construa seu software com qualidade, seja transparente com seu cliente, e trabalhe em equipe.

Bom, você pode fazer download da apresentação ou assistir a mesma online. Ela dura pouco mais de 1h e 10min. Aproveite e qualquer comentário, por favor, colabore, critique e mande feedback.

— Daniel Wildt

en: Introduction to Test Driven Development

So, I have done one presentation about Test Driven Development yesterday, touching TDD concepts and also lots of concepts about Behavior Driven Development (BDD).

There are simple concepts about the test first process. You have to write a test that fails, write code to make the test pass and then refactor your code. Keep the bar green to keep the code clean, remember this.

Repeat this cycle until you don’t have anything else to test for a specific feature.

Looking at a User Story and its acceptance tests, you also have to make sure you are adding business value on every test.

Simple right?

Well, you have to practice.

A lot.

Really.

I’m not kidding.

Believe me.

By the way, don’t leave technical debt behind.

Just for information, currently I manage teams developing in Java (Web), Java (Mobile) and Delphi (Desktop/WebBroker).

Looking at Java Web, I’m starting to teach teams how to use JUnit for automated unit tests, and code coverage with Emma and EclEmma (Eclipse Plug-in).

For Java Mobile, the solution will be based on J2ME Unit and Cobertura for Java ME.

And Delphi, we are going with DUnit and Delphi Discover, a Coverage Tool for Delphi programmers.

And also looking at test automation, both Delphi and Java Web apps will use Selenium to help on automation of web processes.

Well, you can wait more articles on each of those tools and relation to Agile Development and eXtreme Programming practices.

So, remember: you are build tests for prevention of defects. With this you are also building tests to do regression testing.

Keep quality high, always.