agile softwareentwicklung mit rails
DESCRIPTION
Dieser Vortrag wurde am 4.11.2009 an der FH Trier - Gesellschaft für Informatik Regionalgrupper - von Tanja Otto und Hussein Morsy gehaltenTRANSCRIPT
AgileSoftwareentwicklung
mit Ruby on RailsTanja Otto und Hussein Morsy
04.11.2009 Gesellschaft für Informatik
Regionalgruppe Trier/Luxemburg
SalesLentz::DevTeam
Ü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
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. Juni
• Rails-Konferenz*, Offenbach 1-2. September
• RubyEnRails, Amsterdam 30.-31. Oktober
• Rails Usergroup*, Uni Düsseldorf monatlich
Unsere Projekte
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 Internetverbindung notwendig
• Einfach zu testen, da Output Text (HTML) ist
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
...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 Software gelangen
• regelmäßig, in kurzen Abständen deployen
• regelmäßig, in kurzen Abständen mit dem Kunden besprechen
• Gegensatz z.B. zum Wasserfallmodell
Agile Methoden
• Paarprogrammierung
• Testgetriebene Entwicklung
• Refactoring
• Häufiges Deployment
• Scrum
Entwicklungszyklus
1. Anforderungen und Entwurf (Requirements Management, Analyse, Design)
2. Implementierung
3. Test
4. Veröffentlichung (Deployment,Konfigurationsmanagement)
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: Git
• Deployment: Capistrono
Die Sprache Ruby
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
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
Yukihiro Matsumoto
• 44 jähriger, japanischer Wissenschaftler und Programmierer
• Erfinder von Ruby 1995
• Spitzname Matz
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)
Der Framework Rails
David Heinemeier Hansson
• 30 jähriger, dänischer Programmierer
• Rails aus Basecamp “extrahiert”
• 2004 Rails veröffentlicht
• Partner von 37signals
Prinzipien von Rails
• Don’t repeat yourself
• Convention over configuration
• Datenbankpersistenz “eingebaut” (ORM)
• Model-View-Controller
• Modulare Komponenten/Subframeworks
Model-View-Controller
• Model (Datenmodell) - ActiveRecord
• View (Präsentation) - ActionView
• Controller (Programmsteuerung) - ActionController
Java-Frameworks vs. Rails
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
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, sondern eine Technik für Entwickler
Units
Model Model Model Model
Controller Controller Controller
Views Views Views Views
Model
Refactoring
• Code optimieren/verbessern ohne die “Funktionalität” zu verändern
• Red => Green => Refactor
• “Make it green than make it clean”
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 ein User mit der App arbeiten möchte beeinflusst die Implementierung
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
Outside-In
Model Model Model Model
Controller Controller Controller
Views Views Views Views
Model
Cucumber
Applikation
Aslak HellesøyDavid Chelimsky
• Aslak Hellesøy:
Cucumber
• David Chelimsky:
Unit-Testframework RSpec
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 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"
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
Ziel
Automatisiertes ausführen der Features
auf der Applikation
wie in einem Webbrowser
Given-Step mit Definition
Given a travel “Rhein in Flammen” for 137.40
Step
Given-Step mit Definition
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
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
Versionierung mit Git/GitHub
Versionsverwaltung
• System zur Erfassung von Änderungen an Dokumenten
• Zugriff auf die gesamte Historie
• Versionsverwaltungssysteme
• CVS
• SVN
• Mercurial
• Git
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
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 fehlschlägt
Heroku
• Hosting für Rails
• Sehr einfaches deployment
• Kostenlos für kleine Applikationen
“...”
Webdienste rund um Rails
• GitHub
• lighthouse
• hoptoad
• New Relic
• Scout
• Heroku
• EngineYard
• Shopify
• ...
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/