Successfully reported this slideshow.
Agile
Softwareentwicklung
 mit Ruby on Rails
   Tanja Otto und Hussein Morsy

             04.11.2009
     Gesellschaft fü...
SalesLentz::DevTeam
Über uns
• internes Entwicklerteam von Sales-Lentz
• IBEs für Reisen, Bustickets, Eventtickets
• seit 2006 entwickeln wir ...
Wer ist ein Rails Newbie ?
Konferenzen 2009
Konferenzen 2009
• RailsConf 2009, Las Vegas 4.-7.Mai
• Ruby on OS X, Amsterdam 15. Mai
• Apple WWDC, San Francisco 8.-12....
Unsere Projekte
www.sales-lentz.lu
flibco.com
flibco.com (Backend)
travel.lu
show.lu
wellness.sales-lentz.lu
Webapplikationen
• Client-Server Architektur
• Keine Installation proprietärer Software
• Nur Webbrowser und eine
  Intern...
Entwicklungsprinzipien

• Software, die gebraucht wird (Software that
  matters)
• Software, die pünktlich geliefert wird
...
...und das Wichtigste


  Software, die den Kunden und den
   Programmierer glücklich macht
Wie erreichen wir
  diese Ziele ?
Agile
Softwareentwicklung
     (Theorie)
Agile
 Softwareentwicklung
• Entwurfsphase auf ein Mindestmaß
  reduzieren
• so früh wie möglich zu ausführbarer
  Softwar...
Agile Methoden

• Paarprogrammierung
• Testgetriebene Entwicklung
• Refactoring
• Häufiges Deployment
• Scrum
Entwicklungszyklus
1. Anforderungen und Entwurf (Requirements
   Management, Analyse, Design)
2. Implementierung
3. Test
4...
Iterationen


• Jede Iteration ist ein Mini-Projekt
• 2 Wochen Iteration
Agile
Softwareentwicklung
     mit Rails
Verwendete “Tools”

• Sprache: Ruby
• Web-Framework: Ruby on Rails
• Test-Framework: RSpec und Cucumber
• Versionierung: G...
Die Sprache Ruby
Vorteile von Ruby
• rein objektorientiert, keine skalaren
  Datentypen
• Interpretersprache (=> sehr dynamisch)
• Humanspr...
DSL mit Ruby
• DSL = Domain Specific Language
• Für jede Domäne (Arbeitsgebiet) ein
  eigenes Vokabular
   class Meeting < ...
Yukihiro Matsumoto

•   44 jähriger, japanischer
    Wissenschaftler und
    Programmierer

•   Erfinder von Ruby 1995

•  ...
JRuby
• Ruby-Interpreter/Compiler in Java
• Alternative zur Sprache Java , Groovy,...
• JRuby-Code kann in bestehende Java...
Der Framework Rails
David Heinemeier
          Hansson
•   30 jähriger, dänischer
    Programmierer

•   Rails aus Basecamp
    “extrahiert”

...
Prinzipien von Rails

• Don’t repeat yourself
• Convention over configuration
• Datenbankpersistenz “eingebaut” (ORM)
• Mod...
Model-View-Controller

• Model (Datenmodell) - ActiveRecord
• View (Präsentation) - ActionView
• Controller (Programmsteue...
Java-Frameworks vs.
        Rails
Java-Frameworks vs.
          Rails
• Konfigurationsdatei eines Java-Programms
  so gross wie gesamtes Rails-Programm
• All...
Testen
Was ist TDD
Was ist TDD

• Hauptmerkmal: Test First
Was ist TDD

• Hauptmerkmal: Test First
• Zuerst der Test dann der Code
Was ist TDD

• Hauptmerkmal: Test First
• Zuerst der Test dann der Code
• Von innen nach aussen
Was ist TDD

• Hauptmerkmal: Test First
• Zuerst der Test dann der Code
• Von innen nach aussen
• TDD ist kein Test-Tool, ...
Units

   Views             Views            Views            Views




        Controller       Controller       Controll...
Refactoring

• Code optimieren/verbessern ohne die
  “Funktionalität” zu verändern
• Red => Green => Refactor

• “Make it ...
Was ist BDD
Was ist BDD

• BDD ist kein Ersatz für TDD
Was ist BDD

• BDD ist kein Ersatz für TDD
• TDD ist ein Bestandteil von BDD
Was ist BDD

• BDD ist kein Ersatz für TDD
• TDD ist ein Bestandteil von BDD
• BDD bedeutet outside-in Entwicklung
Was ist BDD

• BDD ist kein Ersatz für TDD
• TDD ist ein Bestandteil von BDD
• BDD bedeutet outside-in Entwicklung
• Wie e...
Was ist BDD

• BDD ist kein Ersatz für TDD
• TDD ist ein Bestandteil von BDD
• BDD bedeutet outside-in Entwicklung
• Wie e...
Outside-In

   Views             Views            Views            Views




        Controller       Controller       Con...
Cucumber


 Applikation
Aslak Hellesøy
        David Chelimsky
•   Aslak Hellesøy:

    Cucumber

•   David Chelimsky:

    Unit-Testframework RSp...
Feature: Booking
  As a Customer
  I want to book a travel
  So that I can spend my holidays with Sales-Lentz

Scenario:.....
Scenario: booking a Travel
  Given a travel “Rhein in Flammen” for 137.40
  When I go to the detail page of Rhein in Flamm...
Feature: Administrationsbereich
 Als ein angemeldeter Administrator
 Möchte ich die Admin-Seiten besuchen
 So dass ich die...
Ziel

Automatisiertes ausführen der Features
          auf der Applikation
      wie in einem Webbrowser
Given-Step mit Definition
Given-Step mit Definition

Step
Given a travel “Rhein in Flammen” for 137.40
Given-Step mit Definition

Step
Given a travel “Rhein in Flammen” for 137.40



Step-Definition
Given /^a travel "([^"]*)" f...
Given-Step mit Definition

Step
Given a travel “Rhein in Flammen” for 137.40



Step-Definition
Given /^a travel "([^"]*)" f...
Versionierung mit Git/
       GitHub
Versionsverwaltung
• System zur Erfassung von Änderungen an
  Dokumenten
• Zugriff auf die gesamte Historie
• Versionsverw...
Git
• Entwickelt von Linus Torvalds (2005)
• Für die Verwaltung des Linux-Kernels
• Besser als svn, cvn etc.
 • kein zentr...
GitHub

• Kostenloser/Kostenpflichtiger Git-Server
• Fast alle Ruby/Rails Projekte auf GitHub
• Facebook für Entwickler
GitHub
Deployment
Continious Integration


• Automatischer Test bei jedem Deploy
• Automatische Benachrichtungen per E-Mail
  wenn Test fehl...
Heroku

• Hosting für Rails
• Sehr einfaches deployment
• Kostenlos für kleine Applikationen
“...”
Webdienste rund um
          Rails
•   GitHub       •   EngineYard

•   lighthouse   •   Shopify

•   hoptoad      •   ......
Praktika

• Interessiert, im Rahmen eines Praktikums
  mit uns zu arbeiten?

  devteam.sales-lentz.lu
  tanja.otto@sales-l...
Literatur
• Agile Web Development with Rails (Dave
  Thomas, David Heinemeier Hansson)
• Die Programmiersprache Ruby (Davi...
Nächste SlideShare
Wird geladen in …5
×

Agile Softwareentwicklung mit Rails

1.927 Aufrufe

Veröffentlicht am

Dieser Vortrag wurde am 4.11.2009 an der FH Trier - Gesellschaft für Informatik Regionalgrupper - von Tanja Otto und Hussein Morsy gehalten

Veröffentlicht in: Technologie
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Agile Softwareentwicklung mit Rails

  1. 1. Agile Softwareentwicklung mit Ruby on Rails Tanja Otto und Hussein Morsy 04.11.2009 Gesellschaft für Informatik Regionalgruppe Trier/Luxemburg
  2. 2. SalesLentz::DevTeam
  3. 3. Über uns • internes Entwicklerteam von Sales-Lentz • IBEs für Reisen, Bustickets, Eventtickets • seit 2006 entwickeln wir mit Ruby on Rails • Buch Ruby on Rails 2 Galileo Press http://www.railsbuch.de http://twitter.com/ajnato http://twitter.com/HusseinMorsy
  4. 4. Wer ist ein Rails Newbie ?
  5. 5. Konferenzen 2009
  6. 6. Konferenzen 2009 • RailsConf 2009, Las Vegas 4.-7.Mai • Ruby on OS X, Amsterdam 15. Mai • Apple WWDC, San Francisco 8.-12. Juni • Rails-Konferenz*, Offenbach 1-2. September • RubyEnRails, Amsterdam 30.-31. Oktober • Rails Usergroup*, Uni Düsseldorf monatlich
  7. 7. Unsere Projekte
  8. 8. www.sales-lentz.lu
  9. 9. flibco.com
  10. 10. flibco.com (Backend)
  11. 11. travel.lu
  12. 12. show.lu
  13. 13. wellness.sales-lentz.lu
  14. 14. Webapplikationen • Client-Server Architektur • Keine Installation proprietärer Software • Nur Webbrowser und eine Internetverbindung notwendig • Einfach zu testen, da Output Text (HTML) ist
  15. 15. Entwicklungsprinzipien • Software, die gebraucht wird (Software that matters) • Software, die pünktlich geliefert wird • Software, die innerhalb des Budgets ausgeliefert wird • Software, die dem Benutzer die Arbeit erleichtert
  16. 16. ...und das Wichtigste Software, die den Kunden und den Programmierer glücklich macht
  17. 17. Wie erreichen wir diese Ziele ?
  18. 18. Agile Softwareentwicklung (Theorie)
  19. 19. Agile Softwareentwicklung • Entwurfsphase auf ein Mindestmaß reduzieren • so früh wie möglich zu ausführbarer Software gelangen • regelmäßig, in kurzen Abständen deployen • regelmäßig, in kurzen Abständen mit dem Kunden besprechen • Gegensatz z.B. zum Wasserfallmodell
  20. 20. Agile Methoden • Paarprogrammierung • Testgetriebene Entwicklung • Refactoring • Häufiges Deployment • Scrum
  21. 21. Entwicklungszyklus 1. Anforderungen und Entwurf (Requirements Management, Analyse, Design) 2. Implementierung 3. Test 4. Veröffentlichung (Deployment,Konfigurationsmanagement)
  22. 22. Iterationen • Jede Iteration ist ein Mini-Projekt • 2 Wochen Iteration
  23. 23. Agile Softwareentwicklung mit Rails
  24. 24. Verwendete “Tools” • Sprache: Ruby • Web-Framework: Ruby on Rails • Test-Framework: RSpec und Cucumber • Versionierung: Git • Deployment: Capistrono
  25. 25. Die Sprache Ruby
  26. 26. Vorteile von Ruby • rein objektorientiert, keine skalaren Datentypen • Interpretersprache (=> sehr dynamisch) • Humansprache • wurde entwickelt, um Programmierer glücklich zu machen puts car.wheels # 3 puts 3.odd? # true
  27. 27. DSL mit Ruby • DSL = Domain Specific Language • Für jede Domäne (Arbeitsgebiet) ein eigenes Vokabular class Meeting < ActiveRecord::Base has_many :attendees validates_presence_of :title validates_numericality_of :room_nr end
  28. 28. Yukihiro Matsumoto • 44 jähriger, japanischer Wissenschaftler und Programmierer • Erfinder von Ruby 1995 • Spitzname Matz
  29. 29. JRuby • Ruby-Interpreter/Compiler in Java • Alternative zur Sprache Java , Groovy,... • JRuby-Code kann in bestehende Java- Projekte eingesetzt werden • Einfaches Deployment auf der Java- Plattform • Wird im Enterprise-Bereich aktiv eingesetzt (u.a. bei ThoughtWorks)
  30. 30. Der Framework Rails
  31. 31. David Heinemeier Hansson • 30 jähriger, dänischer Programmierer • Rails aus Basecamp “extrahiert” • 2004 Rails veröffentlicht • Partner von 37signals
  32. 32. Prinzipien von Rails • Don’t repeat yourself • Convention over configuration • Datenbankpersistenz “eingebaut” (ORM) • Model-View-Controller • Modulare Komponenten/Subframeworks
  33. 33. Model-View-Controller • Model (Datenmodell) - ActiveRecord • View (Präsentation) - ActionView • Controller (Programmsteuerung) - ActionController
  34. 34. Java-Frameworks vs. Rails
  35. 35. Java-Frameworks vs. Rails • Konfigurationsdatei eines Java-Programms so gross wie gesamtes Rails-Programm • Alle Subframeworks enthalten • Mit Rails können 80% der Aufgaben gelöst werden • Nicht für Desktop-Applikationen geeignet
  36. 36. Testen
  37. 37. Was ist TDD
  38. 38. Was ist TDD • Hauptmerkmal: Test First
  39. 39. Was ist TDD • Hauptmerkmal: Test First • Zuerst der Test dann der Code
  40. 40. Was ist TDD • Hauptmerkmal: Test First • Zuerst der Test dann der Code • Von innen nach aussen
  41. 41. Was ist TDD • Hauptmerkmal: Test First • Zuerst der Test dann der Code • Von innen nach aussen • TDD ist kein Test-Tool, sondern eine Technik für Entwickler
  42. 42. Units Views Views Views Views Controller Controller Controller Model Model Model Model Model
  43. 43. Refactoring • Code optimieren/verbessern ohne die “Funktionalität” zu verändern • Red => Green => Refactor • “Make it green than make it clean”
  44. 44. Was ist BDD
  45. 45. Was ist BDD • BDD ist kein Ersatz für TDD
  46. 46. Was ist BDD • BDD ist kein Ersatz für TDD • TDD ist ein Bestandteil von BDD
  47. 47. Was ist BDD • BDD ist kein Ersatz für TDD • TDD ist ein Bestandteil von BDD • BDD bedeutet outside-in Entwicklung
  48. 48. Was ist BDD • BDD ist kein Ersatz für TDD • TDD ist ein Bestandteil von BDD • BDD bedeutet outside-in Entwicklung • Wie ein User mit der App arbeiten möchte beeinflusst die Implementierung
  49. 49. Was ist BDD • BDD ist kein Ersatz für TDD • TDD ist ein Bestandteil von BDD • BDD bedeutet outside-in Entwicklung • Wie ein User mit der App arbeiten möchte beeinflusst die Implementierung • Kundenwünsche stehen an erster Stelle
  50. 50. Outside-In Views Views Views Views Controller Controller Controller Model Model Model Model Model
  51. 51. Cucumber Applikation
  52. 52. Aslak Hellesøy David Chelimsky • Aslak Hellesøy: Cucumber • David Chelimsky: Unit-Testframework RSpec
  53. 53. Feature: Booking As a Customer I want to book a travel So that I can spend my holidays with Sales-Lentz Scenario:....
  54. 54. Scenario: booking a Travel Given a travel “Rhein in Flammen” for 137.40 When I go to the detail page of Rhein in Flammen And I follow "buchen" And I select "Herr" from "Anrede" And I fill in "Nachname" with "Mustermann" And I fill in "E-Mail" with "hans@mustermann.de" And I check "Versicherung" And I press "buchen" Then I should see "Ihre Buchung" And I should see "Herr" And I should see "Mustermann" And I should see "hans@mustermann.de" And I should see "137,40 EUR" But I should not see "Ausgebucht"
  55. 55. Feature: Administrationsbereich Als ein angemeldeter Administrator Möchte ich die Admin-Seiten besuchen So dass ich die Seiten leicht aktualisieren kann. Szenario: Zugang für Admin-Seite beschränken Gegeben sei ein Admin-User Wenn ich nicht eingelogged bin Und ich die Admin-Seite besuche Dann sollte mir der Zugang verweigert werden Szenario: Zugang für für autorisierten User Gegeben sei ein Admin-User Und ich bin eingelogged als Admin-User Wenn ich die Admin-Seite besuche Dann sollte ich "Admin-Bereich" sehen
  56. 56. Ziel Automatisiertes ausführen der Features auf der Applikation wie in einem Webbrowser
  57. 57. Given-Step mit Definition
  58. 58. Given-Step mit Definition Step Given a travel “Rhein in Flammen” for 137.40
  59. 59. Given-Step mit Definition Step Given a travel “Rhein in Flammen” for 137.40 Step-Definition Given /^a travel "([^"]*)" for ([0-9.]*)$/ do |title, price| Travel.create(:title => title, :price => price.to_f) end
  60. 60. Given-Step mit Definition Step Given a travel “Rhein in Flammen” for 137.40 Step-Definition Given /^a travel "([^"]*)" for ([0-9.]*)$/ do |title, price| Travel.create(:title => title, :price => price.to_f) end
  61. 61. Versionierung mit Git/ GitHub
  62. 62. Versionsverwaltung • System zur Erfassung von Änderungen an Dokumenten • Zugriff auf die gesamte Historie • Versionsverwaltungssysteme • CVS • SVN • Mercurial • Git
  63. 63. Git • Entwickelt von Linus Torvalds (2005) • Für die Verwaltung des Linux-Kernels • Besser als svn, cvn etc. • kein zentraler Server mehr notwendig • nicht lineare Entwicklung einfach (branching) • Sicherheit (z.H. Hash-Wert für commits) Geschwindigkeit
  64. 64. GitHub • Kostenloser/Kostenpflichtiger Git-Server • Fast alle Ruby/Rails Projekte auf GitHub • Facebook für Entwickler
  65. 65. GitHub
  66. 66. Deployment
  67. 67. Continious Integration • Automatischer Test bei jedem Deploy • Automatische Benachrichtungen per E-Mail wenn Test fehlschlägt
  68. 68. Heroku • Hosting für Rails • Sehr einfaches deployment • Kostenlos für kleine Applikationen
  69. 69. “...”
  70. 70. Webdienste rund um Rails • GitHub • EngineYard • lighthouse • Shopify • hoptoad • ... • New Relic • Scout • Heroku
  71. 71. Praktika • Interessiert, im Rahmen eines Praktikums mit uns zu arbeiten? devteam.sales-lentz.lu tanja.otto@sales-lentz.lu
  72. 72. Literatur • Agile Web Development with Rails (Dave Thomas, David Heinemeier Hansson) • Die Programmiersprache Ruby (David Flanagan,Yukihiro Mastumoto) • The RSpec Book(David Chelimsky, Dave Astels, Zach Dennis, Aslak Hellesøy, Bryan Helmkamp, Dan North) • Ruby on Rails 2, Hussein Morsy,Tanja Otto. http://openbook.galileocomputing.de/ ruby_on_rails/

×