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.768 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
0 Kommentare
0 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

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

Keine Downloads
Aufrufe
Aufrufe insgesamt
1.768
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
8
Aktionen
Geteilt
0
Downloads
10
Kommentare
0
Gefällt mir
0
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

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/

×