Agile Softwareentwicklung mit Rails

1,903 views

Published on

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

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,903
On SlideShare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
10
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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/

×