Agile Softwareentwicklung mit Rails
-
Upload
hussein-morsy -
Category
Technology
-
view
1.298 -
download
0
description
Transcript of Agile Softwareentwicklung mit Rails
![Page 1: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/1.jpg)
AgileSoftwareentwicklung
mit Ruby on RailsTanja Otto und Hussein Morsy
04.11.2009 Gesellschaft für Informatik
Regionalgruppe Trier/Luxemburg
![Page 2: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/2.jpg)
SalesLentz::DevTeam
![Page 3: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/3.jpg)
Ü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
![Page 4: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/4.jpg)
Wer ist ein Rails Newbie ?
![Page 5: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/5.jpg)
Konferenzen 2009
![Page 6: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/6.jpg)
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
![Page 7: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/7.jpg)
Unsere Projekte
![Page 9: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/9.jpg)
flibco.com
![Page 10: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/10.jpg)
flibco.com (Backend)
![Page 11: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/11.jpg)
travel.lu
![Page 12: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/12.jpg)
show.lu
![Page 13: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/13.jpg)
wellness.sales-lentz.lu
![Page 14: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/14.jpg)
Webapplikationen
• Client-Server Architektur
• Keine Installation proprietärer Software
• Nur Webbrowser und eine Internetverbindung notwendig
• Einfach zu testen, da Output Text (HTML) ist
![Page 15: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/15.jpg)
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
![Page 16: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/16.jpg)
...und das Wichtigste
Software, die den Kunden und den
Programmierer glücklich macht
![Page 17: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/17.jpg)
Wie erreichen wir diese Ziele ?
![Page 18: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/18.jpg)
Agile Softwareentwicklung
(Theorie)
![Page 19: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/19.jpg)
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
![Page 20: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/20.jpg)
Agile Methoden
• Paarprogrammierung
• Testgetriebene Entwicklung
• Refactoring
• Häufiges Deployment
• Scrum
![Page 21: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/21.jpg)
Entwicklungszyklus
1. Anforderungen und Entwurf (Requirements Management, Analyse, Design)
2. Implementierung
3. Test
4. Veröffentlichung (Deployment,Konfigurationsmanagement)
![Page 22: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/22.jpg)
Iterationen
• Jede Iteration ist ein Mini-Projekt
• 2 Wochen Iteration
![Page 23: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/23.jpg)
Agile Softwareentwicklung
mit Rails
![Page 24: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/24.jpg)
Verwendete “Tools”
• Sprache: Ruby
• Web-Framework: Ruby on Rails
• Test-Framework: RSpec und Cucumber
• Versionierung: Git
• Deployment: Capistrono
![Page 25: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/25.jpg)
Die Sprache Ruby
![Page 26: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/26.jpg)
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
![Page 27: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/27.jpg)
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
![Page 28: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/28.jpg)
Yukihiro Matsumoto
• 44 jähriger, japanischer Wissenschaftler und Programmierer
• Erfinder von Ruby 1995
• Spitzname Matz
![Page 29: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/29.jpg)
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)
![Page 30: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/30.jpg)
Der Framework Rails
![Page 31: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/31.jpg)
David Heinemeier Hansson
• 30 jähriger, dänischer Programmierer
• Rails aus Basecamp “extrahiert”
• 2004 Rails veröffentlicht
• Partner von 37signals
![Page 32: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/32.jpg)
Prinzipien von Rails
• Don’t repeat yourself
• Convention over configuration
• Datenbankpersistenz “eingebaut” (ORM)
• Model-View-Controller
• Modulare Komponenten/Subframeworks
![Page 33: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/33.jpg)
Model-View-Controller
• Model (Datenmodell) - ActiveRecord
• View (Präsentation) - ActionView
• Controller (Programmsteuerung) - ActionController
![Page 34: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/34.jpg)
Java-Frameworks vs. Rails
![Page 35: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/35.jpg)
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
![Page 36: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/36.jpg)
Testen
![Page 37: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/37.jpg)
Was ist TDD
![Page 38: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/38.jpg)
Was ist TDD
• Hauptmerkmal: Test First
![Page 39: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/39.jpg)
Was ist TDD
• Hauptmerkmal: Test First
• Zuerst der Test dann der Code
![Page 40: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/40.jpg)
Was ist TDD
• Hauptmerkmal: Test First
• Zuerst der Test dann der Code
• Von innen nach aussen
![Page 41: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/41.jpg)
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
![Page 42: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/42.jpg)
Units
Model Model Model Model
Controller Controller Controller
Views Views Views Views
Model
![Page 43: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/43.jpg)
Refactoring
• Code optimieren/verbessern ohne die “Funktionalität” zu verändern
• Red => Green => Refactor
• “Make it green than make it clean”
![Page 44: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/44.jpg)
Was ist BDD
![Page 45: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/45.jpg)
Was ist BDD
• BDD ist kein Ersatz für TDD
![Page 46: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/46.jpg)
Was ist BDD
• BDD ist kein Ersatz für TDD
• TDD ist ein Bestandteil von BDD
![Page 47: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/47.jpg)
Was ist BDD
• BDD ist kein Ersatz für TDD
• TDD ist ein Bestandteil von BDD
• BDD bedeutet outside-in Entwicklung
![Page 48: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/48.jpg)
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
![Page 49: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/49.jpg)
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
![Page 50: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/50.jpg)
Outside-In
Model Model Model Model
Controller Controller Controller
Views Views Views Views
Model
![Page 51: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/51.jpg)
Cucumber
Applikation
![Page 52: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/52.jpg)
Aslak HellesøyDavid Chelimsky
• Aslak Hellesøy:
Cucumber
• David Chelimsky:
Unit-Testframework RSpec
![Page 53: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/53.jpg)
Feature: Booking As a Customer I want to book a travel So that I can spend my holidays with Sales-Lentz
Scenario:....
![Page 54: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/54.jpg)
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 "[email protected]" 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 "[email protected]" And I should see "137,40 EUR" But I should not see "Ausgebucht"
![Page 55: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/55.jpg)
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
![Page 56: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/56.jpg)
Ziel
Automatisiertes ausführen der Features
auf der Applikation
wie in einem Webbrowser
![Page 57: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/57.jpg)
Given-Step mit Definition
![Page 58: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/58.jpg)
Given a travel “Rhein in Flammen” for 137.40
Step
Given-Step mit Definition
![Page 59: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/59.jpg)
Given a travel “Rhein in Flammen” for 137.40
Step
Given-Step mit Definition
Given /̂ a travel "([̂ \"]*)" for ([0-9.]*)$/ do |title, price| Travel.create(:title => title, :price => price.to_f)end
Step-Definition
![Page 60: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/60.jpg)
Given a travel “Rhein in Flammen” for 137.40
Step
Given-Step mit Definition
Given /̂ a travel "([̂ \"]*)" for ([0-9.]*)$/ do |title, price| Travel.create(:title => title, :price => price.to_f)end
Step-Definition
![Page 61: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/61.jpg)
Versionierung mit Git/GitHub
![Page 62: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/62.jpg)
Versionsverwaltung
• System zur Erfassung von Änderungen an Dokumenten
• Zugriff auf die gesamte Historie
• Versionsverwaltungssysteme
• CVS
• SVN
• Mercurial
• Git
![Page 63: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/63.jpg)
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
![Page 64: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/64.jpg)
GitHub
• Kostenloser/Kostenpflichtiger Git-Server
• Fast alle Ruby/Rails Projekte auf GitHub
• Facebook für Entwickler
![Page 65: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/65.jpg)
GitHub
![Page 66: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/66.jpg)
Deployment
![Page 67: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/67.jpg)
Continious Integration
• Automatischer Test bei jedem Deploy
• Automatische Benachrichtungen per E-Mail wenn Test fehlschlägt
![Page 68: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/68.jpg)
Heroku
• Hosting für Rails
• Sehr einfaches deployment
• Kostenlos für kleine Applikationen
![Page 69: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/69.jpg)
“...”
![Page 70: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/70.jpg)
Webdienste rund um Rails
• GitHub
• lighthouse
• hoptoad
• New Relic
• Scout
• Heroku
• EngineYard
• Shopify
• ...
![Page 72: Agile Softwareentwicklung mit Rails](https://reader031.fdocuments.net/reader031/viewer/2022013101/5555bfdad8b42a52568b53da/html5/thumbnails/72.jpg)
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/