Lapidando ruby

1.300 visualizações

Publicada em

Publicada em: Notícias e política
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
1.300
No SlideShare
0
A partir de incorporações
0
Número de incorporações
107
Ações
Compartilhamentos
0
Downloads
25
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Lapidando ruby

  1. 1. Lapidando Ruby A Work in Progress Maurício Eduardo Szabo [email_address] @mauricio_szabo http://mauricioszabo.wordpress.com
  2. 2. Nesta Apresentação... <ul><li>subject { You.new } </li><ul><li>Ruby.new.should be_false
  3. 3. knowledges.should include(RSpec)
  4. 4. should be_open_to_new_ideas </li></ul></ul>
  5. 5. Por quê? Aquela jovem é uma das menos ignorantemente aparvalhadas formas de vida orgânica que eu já tive a profunda falta de prazer de não ser capaz de evitar encontrar
  6. 6. Não Teremos...
  7. 7. Boas práticas <ul><li>Prefira instância
  8. 8. Entenda Ruby
  9. 9. Seja claro </li><ul><li>Logo - TO </li></ul><li>Seja preciso
  10. 10. TESTES! </li></ul>
  11. 11. Ruby não é... <ul><li>Perl </li><ul><li>a.size == 0 or abort </li></ul><li>PHP </li><ul><li>for element in array </li></ul><li>Java </li><ul><li>array.size.times { |i| element = array[i] } </li></ul><li>Basic, Cobol, Pascal, C... </li><ul><li>a = create_person(:name => 'Foo')
  12. 12. save_person(a) </li></ul></ul>
  13. 13. Rescue Me! (Estes códigos são equivalentes!)
  14. 14. Não Abuse da Linguagem <ul><li>Ruby ajuda muito, mas use com moderação </li><ul><li>yield sobre yield sobre yield sobre... </li><ul><li>Difícil de entender, e LENTO </li></ul><li>Não use coisas que podem depender da implementação de Ruby </li><ul><li>Se for necessário fazer isso, ISOLE-AS e TESTE-AS INTENSIVAMENTE!
  15. 15. Evite depender de comportamentos não-documentados </li><ul><li>return array.delete_if { |e| ... } </li></ul></ul></ul></ul>
  16. 16. Evite Efeitos Colaterais Se você puder chamar um método duas vezes e ele retornar o MESMO valor, melhor!
  17. 17. DEFina Direito! Código deve ser escrito como um “jornal”
  18. 18. Não Seja Menos Claro
  19. 19. Flags?
  20. 20. Idente Tudo... ...MAS...
  21. 21. ...Evite Identar
  22. 22. Floats? <ul><li>Imprecisos
  23. 23. SPECs vão falhar </li><ul><li>use should be_close
  24. 24. Melhor ainda, use BigDecimal </li></ul></ul>
  25. 25. Não Modifique os Parâmetros
  26. 26. OCP e MonkeyPatch <ul><li>Classes devem ser ABERTAS para adição e FECHADAS para modificação </li><ul><li>Modificar métodos é legal, mas é a maior fonte de problemas </li></ul></ul>
  27. 27. TDD e BDD <ul><li>Diferenças?
  28. 28. Como testar, e o quê testar?
  29. 29. Como manter a clareza?
  30. 30. Como evitar testes frágeis?
  31. 31. Como facilitar os testes? </li></ul>
  32. 32. BDD <ul><li>Não são testes, são comportamentos </li><ul><li>O teste é um “efeito colateral” </li></ul><li>Sapir-Whorf, ou Linguistic Relativity </li><ul><li>Mesmo conceito usado pelo RSpec
  33. 33. Mesmo conceito por trás do Ruby </li></ul><li>O que é, afinal, um “unit test”? </li><ul><li>Ou um “unit”? </li></ul></ul>
  34. 34. RSpec <ul><li>person.old?.should == true </li><ul><li>person.old?.should be_true
  35. 35. person.should be_old </li></ul><li>person.childs.size.should == 10 </li><ul><li>person.should have(10).childs </li></ul><li>array.size.should == 5 </li><ul><li>array.should have(5).itens </li></ul></ul>
  36. 36. RSpec on Rails WTF???
  37. 37. Seja explícito...
  38. 38. Mas seja implícito! Lembre-se SEMPRE do que você está descrevendo!
  39. 39. Mocks <ul><li>Muito usados nos Controllers do Rails </li><ul><li>Quando eu te perguntar, da próxima vez, exatamente “quem é você”, me responda “um teste”, ok?
  40. 40. Você está testando, ou está escrevendo o código final? </li></ul></ul>
  41. 41. Mocks <ul><li>Um aluno precisa escolher disciplinas </li><ul><li>eu SEI que um aluno estará logado...
  42. 42. eu SEI que o aluno estará cadastrado...
  43. 43. eu SEI que haverá uma ou mais disciplinas...
  44. 44. mas NÃO SEI qual o código. </li></ul></ul>
  45. 45. Custom Matchers
  46. 46. Custom Matchers
  47. 47. Facilite seus testes! <ul><li>O que os dois a seguir tem em comum? </li><ul><li>stub_model
  48. 48. Factories </li></ul><li>Crie suas facilidades! </li><ul><li>stub_rest, talvez?
  49. 49. http://github.com/defunkt/fakefs </li></ul><li>Ler - Scripted GUI Testing with Ruby </li></ul>
  50. 50. Mais uma coisa <ul><li>Reek (gem install reek) </li><ul><li>Procura por “smells” em seu código
  51. 51. Bom quando se está iniciando </li></ul><li>Flog (gem install flog) </li><ul><li>Procura por “código torturado”
  52. 52. Bom de ser usado em qualquer situação </li></ul><li>Metrics_fu </li><ul><li>Plugin para Rails, incorpora Flog, Reek, RCov, etc... </li></ul></ul>
  53. 53. Considerações <ul><li>Ler: </li><ul><li>Clean Code, Robert Martin
  54. 54. Design Patterns, GoF </li></ul><li>Quando estiver programado: </li><ul><li>Melhorar sempre o código
  55. 55. Cuidado com o termo “melhorar” </li></ul><li>Evite: </li><ul><li>Comentários explicando o que o código faz </li></ul></ul>
  56. 56. Dúvidas? <ul><li>The Power and Philosofy of Ruby: http://bit.ly/aMFAmj (Matz)
  57. 57. A new look at Test-Driven Development: http://bit.ly/7nYyhD (Dave Astels)
  58. 58. Clean Code: http://bit.ly/bUzV7k (Robert Martin)
  59. 59. Design Patterns in Ruby: http://bit.ly/9bKRQV (Russell Olsen)
  60. 60. Scripted GUI Testing with Ruby: http://bit.ly/a0etMC (Ian Dees) </li></ul>

×