agile softwareentwicklung mit rails

Post on 15-May-2015

1.297 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

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

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 "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"

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

• ...

Praktika

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

devteam.sales-lentz.lutanja.otto@sales-lentz.lu

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/

top related