TDD com Ruby

Aula 1

Esta aula tem dois objetivos: 1) introduzir o conceito e a prática de TDD e 2) aumentar a familiaridade dos(as) alunos(as) com Ruby.

O que é TDD?

Ciclo do TDD

tdd-cycle.jpg

Fonte: Dojo@SP

Coisas legais

Leituras Recomendadas

Exercício prático em estilo Coding Dojo

  • Objetivo: constuir uma planilha eletrônica simples (inspiração: Test-First Challenge; fonte: TDD Problems)
  • requisitos:
    • colunas: A a Z, linhas: 1 a n
    • deve ser possível armazenar um valor em uma célula e o ler de volta tanto o valor literal (e.g. formulas) quanto o valor final (resultado das fórmulas)
    • fórmulas: x+y, x*y, sum(x:y), onde x e y são nomes de células (A1, B17 etc)
    • quando uma célula é modificada células que conteem referências a ela devem ser atualizadas automaticamente.
  • ferramentas:
    • um editor de texto
    • autotest
    • shoulda

Nosso resultado em anexo

Aula 2

Na primeira aula conseguimos eu aprox. 1 hora e meia constuir uma planilha eletrônica simples, com suporte a referência de células e fórmulas de soma. Mas alguns trechos do nosso código ficaram complexos, e para incluir cada novo

Então nossos objetivos nesta segunda aula foi:

  1. DONE refatorar o código existente para simplificar a introdução de novos tipos de fórmulas
  2. DONE incluir fórmula de multiplicação (=A1*A2)
  3. ALERT! incluir fórmula de soma da intervalos de células (=sum(A1:B10))

Para isso vamos discutir brevemente conceitos de refatoração e padrões de projeto.

Não conseguimos alcançar o último objetivo, mas conseguimos discutir coisas importantes:

  • Refatoração: mover método, substituir acesso a atributo por chamada de método, substituir condicionais por polimorfismo
  • Padrões de Projeto: Factory

Nosso resultado: código em anexo

Leituras Recomendadas

  • Refactoring (Martin Fowler)
  • Extreme Programming Explained (Kent Beck)
  • Agile Software Development (Robert C. Martin)

Aula 3

Quando localizamos a criação dos objetos Expression no método create, por um lado nós melhoramos o código da classe Spreadsheet mas por outro lados deixamos parte da complexidade do tratamento de expressões no método create, de forma que ele sempre precisa ser alterado para incluir novos tipos de expressão. Isso viola o Princípio do Aberto-Fechado (Martin): um módulo deve estar a aberto a extensão, mas fechado para modificações. Nesta aula nosso objetivo é:

  • Refatorar a criação de objetos Expression de forma que o Expression.create não precise ser modificado para incluir novos tipos de expressão
  • Implementar um novo tipo de expressão: soma de intervalos de células (=sum(A1:B2), que deve somar os valores de A1, A2, B1 e B2) ( Refatorar Soma e Multiplicação para extrair o comportamento comum para uma superclasse.

Resultado: em anexo

Exercício compulsório: refatorar Soma de Intervalo (RangeSum) para aproveitar o comportamento comum que foi extraído de Soma e Multiplicação. Notar as diferenças (e.g. um loop, dois loops etc) e modularizá-las apropriadamente.





-- terceiro

Script shell para contar o tempo no coding dojo:

  • fish (tudo numa linha só):
    while true; notify-send -u critical 'ACABOU O TEMPO; PILOTO SAI; CO-LILOTO VIRA PILOTO; ALGUEM SE TORNA CO-PILOTO'; sleep 7m; end
  • bash (tudo numa linha só):
    while true; do notify-send -u critical 'ACABOU O TEMPO; PILOTO SAI; CO-LILOTO VIRA PILOTO; ALGUEM SE TORNA CO-PILOTO'; sleep 7m; done

-- terceiro

Sobre a sessão de Coding Dojo:

Infelizmente a turma ficou um pouco acanhada pra vir programar na frente, não sei por quê. A maioria da turma não se dispôs a participar.

Mas apesar disso acho que a sessão foi muito legal, conseguimos avançar num problema que não é muito trivial e em apenas 1 hora e 20 minutos tínhamos uma implementação interessante de uma planilha eletrônica simples.

-- terceiro

 
Topic attachments
I Attachment Action Size Date Who Comment
elsegz spreadsheet-2.tar.gz manage 1.1 K 24 Mar 2009 - 19:06 AntonioSoaresDeAzevedoTerceiro resultado da nossa segunda sessão de Dojo - ainda a planilha eletrônica
elsegz spreadsheet-3.tar.gz manage 1.8 K 26 Mar 2009 - 17:55 AntonioSoaresDeAzevedoTerceiro resultado da nossa terceira sessão de Dojo - planilha eletrônica plus plus mega power
zipzip spreadsheet-thiago.zip manage 3.3 K 11 Sep 2009 - 11:25 ChristinaVonFlachGarciaChavez Exercício sobre spreadsheet (refeito) em ruby, com script e testes (T. Freire em 2009.2)
elsegz spreadsheet.tar.gz manage 0.8 K 19 Mar 2009 - 18:35 AntonioSoaresDeAzevedoTerceiro resultado da nossa primeira sessão de Dojo - planilha eletrônica
jpgjpg tdd-cycle.jpg manage 9.7 K 12 Mar 2009 - 01:22 AntonioSoaresDeAzevedoTerceiro  
Topic revision: r7 - 11 Sep 2009 - 11:25:05 - ChristinaVonFlachGarciaChavez
 
This site is powered by FoswikiCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding Foswiki? Send feedback