agile softwareentwicklung mit rails

72
Agile Softwareentwicklung mit Ruby on Rails Tanja Otto und Hussein Morsy 04.11.2009 Gesellschaft für Informatik Regionalgruppe Trier/Luxemburg

Upload: hussein-morsy

Post on 15-May-2015

1.297 views

Category:

Technology


0 download

DESCRIPTION

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

TRANSCRIPT

Page 1: Agile Softwareentwicklung mit Rails

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

SalesLentz::DevTeam

Page 3: Agile Softwareentwicklung mit Rails

Ü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

Wer ist ein Rails Newbie ?

Page 5: Agile Softwareentwicklung mit Rails

Konferenzen 2009

Page 6: Agile Softwareentwicklung mit Rails

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

Unsere Projekte

Page 9: Agile Softwareentwicklung mit Rails

flibco.com

Page 10: Agile Softwareentwicklung mit Rails

flibco.com (Backend)

Page 11: Agile Softwareentwicklung mit Rails

travel.lu

Page 12: Agile Softwareentwicklung mit Rails

show.lu

Page 13: Agile Softwareentwicklung mit Rails

wellness.sales-lentz.lu

Page 14: Agile Softwareentwicklung mit Rails

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

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

...und das Wichtigste

Software, die den Kunden und den

Programmierer glücklich macht

Page 17: Agile Softwareentwicklung mit Rails

Wie erreichen wir diese Ziele ?

Page 18: Agile Softwareentwicklung mit Rails

Agile Softwareentwicklung

(Theorie)

Page 19: Agile Softwareentwicklung mit Rails

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

Agile Methoden

• Paarprogrammierung

• Testgetriebene Entwicklung

• Refactoring

• Häufiges Deployment

• Scrum

Page 21: Agile Softwareentwicklung mit Rails

Entwicklungszyklus

1. Anforderungen und Entwurf (Requirements Management, Analyse, Design)

2. Implementierung

3. Test

4. Veröffentlichung (Deployment,Konfigurationsmanagement)

Page 22: Agile Softwareentwicklung mit Rails

Iterationen

• Jede Iteration ist ein Mini-Projekt

• 2 Wochen Iteration

Page 23: Agile Softwareentwicklung mit Rails

Agile Softwareentwicklung

mit Rails

Page 24: Agile Softwareentwicklung mit Rails

Verwendete “Tools”

• Sprache: Ruby

• Web-Framework: Ruby on Rails

• Test-Framework: RSpec und Cucumber

• Versionierung: Git

• Deployment: Capistrono

Page 25: Agile Softwareentwicklung mit Rails

Die Sprache Ruby

Page 26: Agile Softwareentwicklung mit Rails

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

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

Yukihiro Matsumoto

• 44 jähriger, japanischer Wissenschaftler und Programmierer

• Erfinder von Ruby 1995

• Spitzname Matz

Page 29: Agile Softwareentwicklung mit Rails

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

Der Framework Rails

Page 31: Agile Softwareentwicklung mit Rails

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

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

Model-View-Controller

• Model (Datenmodell) - ActiveRecord

• View (Präsentation) - ActionView

• Controller (Programmsteuerung) - ActionController

Page 34: Agile Softwareentwicklung mit Rails

Java-Frameworks vs. Rails

Page 35: Agile Softwareentwicklung mit 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

Page 36: Agile Softwareentwicklung mit Rails

Testen

Page 37: Agile Softwareentwicklung mit Rails

Was ist TDD

Page 38: Agile Softwareentwicklung mit Rails

Was ist TDD

• Hauptmerkmal: Test First

Page 39: Agile Softwareentwicklung mit Rails

Was ist TDD

• Hauptmerkmal: Test First

• Zuerst der Test dann der Code

Page 40: Agile Softwareentwicklung mit Rails

Was ist TDD

• Hauptmerkmal: Test First

• Zuerst der Test dann der Code

• Von innen nach aussen

Page 41: Agile Softwareentwicklung mit Rails

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

Units

Model Model Model Model

Controller Controller Controller

Views Views Views Views

Model

Page 43: Agile Softwareentwicklung mit Rails

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

Was ist BDD

Page 45: Agile Softwareentwicklung mit Rails

Was ist BDD

• BDD ist kein Ersatz für TDD

Page 46: Agile Softwareentwicklung mit Rails

Was ist BDD

• BDD ist kein Ersatz für TDD

• TDD ist ein Bestandteil von BDD

Page 47: Agile Softwareentwicklung mit Rails

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

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

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

Outside-In

Model Model Model Model

Controller Controller Controller

Views Views Views Views

Model

Page 51: Agile Softwareentwicklung mit Rails

Cucumber

Applikation

Page 52: Agile Softwareentwicklung mit Rails

Aslak HellesøyDavid Chelimsky

• Aslak Hellesøy:

Cucumber

• David Chelimsky:

Unit-Testframework RSpec

Page 53: Agile Softwareentwicklung mit Rails

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

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

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

Ziel

Automatisiertes ausführen der Features

auf der Applikation

wie in einem Webbrowser

Page 57: Agile Softwareentwicklung mit Rails

Given-Step mit Definition

Page 58: Agile Softwareentwicklung mit Rails

Given a travel “Rhein in Flammen” for 137.40

Step

Given-Step mit Definition

Page 59: Agile Softwareentwicklung mit Rails

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

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

Versionierung mit Git/GitHub

Page 62: Agile Softwareentwicklung mit Rails

Versionsverwaltung

• System zur Erfassung von Änderungen an Dokumenten

• Zugriff auf die gesamte Historie

• Versionsverwaltungssysteme

• CVS

• SVN

• Mercurial

• Git

Page 63: Agile Softwareentwicklung mit Rails

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

GitHub

• Kostenloser/Kostenpflichtiger Git-Server

• Fast alle Ruby/Rails Projekte auf GitHub

• Facebook für Entwickler

Page 65: Agile Softwareentwicklung mit Rails

GitHub

Page 66: Agile Softwareentwicklung mit Rails

Deployment

Page 67: Agile Softwareentwicklung mit Rails

Continious Integration

• Automatischer Test bei jedem Deploy

• Automatische Benachrichtungen per E-Mail wenn Test fehlschlägt

Page 68: Agile Softwareentwicklung mit Rails

Heroku

• Hosting für Rails

• Sehr einfaches deployment

• Kostenlos für kleine Applikationen

Page 69: Agile Softwareentwicklung mit Rails

“...”

Page 70: Agile Softwareentwicklung mit Rails

Webdienste rund um Rails

• GitHub

• lighthouse

• hoptoad

• New Relic

• Scout

• Heroku

• EngineYard

• Shopify

• ...

Page 71: Agile Softwareentwicklung mit Rails

Praktika

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

[email protected]

Page 72: Agile Softwareentwicklung mit Rails

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/