Your SlideShare is downloading. ×
0
Lapidando ruby
Lapidando ruby
Lapidando ruby
Lapidando ruby
Lapidando ruby
Lapidando ruby
Lapidando ruby
Lapidando ruby
Lapidando ruby
Lapidando ruby
Lapidando ruby
Lapidando ruby
Lapidando ruby
Lapidando ruby
Lapidando ruby
Lapidando ruby
Lapidando ruby
Lapidando ruby
Lapidando ruby
Lapidando ruby
Lapidando ruby
Lapidando ruby
Lapidando ruby
Lapidando ruby
Lapidando ruby
Lapidando ruby
Lapidando ruby
Lapidando ruby
Lapidando ruby
Lapidando ruby
Lapidando ruby
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Lapidando ruby

973

Published on

Published in: News & Politics
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
973
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
25
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

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

×