Bem amigos do Coding Dojo, hoje o encontro foi especialmente legal!! Primeiro porque voltamos a programar em Ruby (que foi a linguagem escolhida pela equipe para o protótipo do novo Portal), e depois porque tivemos nosso primeiro contato com as práticas de BDD (Behavior Driven Development), usando Cucumber e RSpec.
No início foi meio estranho por não estarmos acostumados ainda a essa cultura de testes, mas depois fomos pegando o jeitinho.
O desafio foi interessante também pelo fato de não precisarmos nos prender tanto na resolução do problema em si, fazendo assim com que nós focassemos mais nos testes.
E para fechar com chave de ouro, o lanche na restrospectiva foi “mara”: com bolacha calipso e trakinas, e claro o ótimo cafézinho do @marcomoura! ;D
Origem do kata: http://codingdojo.org/cgi-bin/wiki.pl?KataDictionaryReplacer
Código Fonte: https://gist.github.com/723424
dicionario.feature
# language: pt # features/dicionario.feature # @author Marco Moura # @author Luciana Mendes # @author Rafael Salomao # @author Patricia Carvalho # @author Carlos Eduardo Funcionalidade: Dicionary Replace Kata para substituir string em um texto Cenário: Entrada vazia Dado que entrei "" E entrei um dicionario "" Então o software me retorna "" Cenário: Texto 2 temporary Dado que entrei "$temp$" E entrei um dicionario ["temp", "temporary"] Então o software me retorna "temporary" Cenário: Com um parametro apenas diferente de temporario Dado que entrei "$temp$" E entrei um dicionario ["temp","hello world"] Então o software me retorna "hello world" Cenário: Texto 3.John Doe Dado que entrei "$temp$ here comes the name $name$" E entrei dois dicionario [["temp","temporary"],["name","John Doe"]] Então o software me retorna "temporary here comes the name John Doe"
dicionario.rb
# lib/dicionario.rb # @author Marco Moura # @author Luciana Mendes # @author Rafael Salomao # @author Patricia Carvalho # @author Carlos Eduardo class Dicionario @text def set_text(t) @text = t end @dict def set_dict(dict) @dict = dict end def replace() if @dict == [""] "" else @text.sub(/\$temp\$/, @dict.first['temp']) end end end
dicionario_steps.rb
# encoding: utf-8 # features/steps_definitions/dicionario_steps.rb # @author Marco Moura # @author Luciana Mendes # @author Rafael Salomao # @author Patricia Carvalho # @author Carlos Eduardo Before do @dic = Dicionario.new end Dado /^que entrei "([^"]*)"$/ do |text| @dic.set_text(text) end Dado /^entrei um dicionario \["([^"]*)", "([^"]*)"\]$/ do |text, dict| @dic.set_dict([text,dict]) end Dado /^entrei um dicionario "([^"]*)"$/ do |dict| @dic.set_dict(dict) end Dado /^entrei dois dicionario \[\["([^"]*)","([^"]*)"\],\["([^"]*)","([^"]*)"\]\]$/ do |arg1, arg2, arg3, arg4| temp = [arg1 = arg2, arg3 = arg4] @dic.set_dict(temp) end Então /^o software me retorna "([^"]*)"$/ do |new_text| replace = @dic.replace() replace.should == new_text end
env.rb
# encoding: utf-8 # features/support/env.rb begin require 'rspec/expectations'; rescue LoadError; require 'spec/expectations'; end require 'cucumber/formatter/unicode' $:.unshift(File.dirname(__FILE__) + '/../../lib') require 'dicionario'
Retrospectiva
O que foi bom e devemos repetir nos próximos
* lanche e café
* conhecer algo novo (cucumber, BDD)
* realmente iniciamos o desenvolvimento pelo teste
* o desafio foi bom
* os curadores
* o output do cucumber é legal
* ter referência na máquina foi legal
* não acessar a internet
* usar o terminal =D
* mudar de editor
* foi divertido
* a busca pela solução do desafio foi legal
* foi bem babysteps
Nos próximos poderia ser melhor
* melhor conhecimento de Ruby
* melhor conhecimento de Cucumber
* melhor conhecimento de RSpec (steps)
* travar menos no inicio do desenvolvimento
* melhorar a dinâmica da dupla (ping pong)
* Refatorar antes de implementar uma coisa nova
Fotos do encontro