www.b-simple.de 1 Ruby on Rails 2005 Testgetriebene Web-Entwicklung mit Ruby on Rails Thomas Baustert www.b-simple.de
www.b-simple.de 1
Ruby on Rails
2005
Testgetriebene Web-Entwicklung
mit
Ruby on Rails
Thomas Baustert
www.b-simple.de
www.b-simple.de 2
Ruby on Rails
2005
Agenda• Rails Einführung
• Test-Unterstützung in Rails
• Testgetriebene Web-Entwicklung mit Rails
• Live Demo
Eindruck von Rails und dessenUnterstützung für umfangreichgetestete Web-Anwendungen
www.b-simple.de 3
Ruby on Rails
2005
Ruby on Rails („Ruby auf Schienen“)
• MVC-Architektur• Konvention statt
Konfiguration• DRY-Prinzip• Weniger Code• Extrahiert
• UnmittelbaresFeedback
• Hohe Testbarkeit• Ruby• Open Source• David Heinemeier
Hansson
Ruby on Rails ist ein Framework für dieEntwicklung von datenbankbasiertenWeb-Anwendungen in Ruby.
www.b-simple.de 4
Ruby on Rails
2005
Ruby• Dynamisch typisierte Sprache• Rein objektorientiert• Einflüsse von Perl, Smalltalk,
LISP, u.a.• Ca. 1995 veröffentlicht• Yukihiro Matsumoto („Matz“)
• Garbage Collection,Ausnahmen, ReguläreAusdrücke, Introspektion,Erweiterung von Klassen,Code-Blöcke, usw.
www.b-simple.de 5
Ruby on Rails
2005
Rails MVC
Controller
ModelModel
View
HTTP-Request erzeugt, liest, ändert, löscht
erzeugt
Redirect
DB
Response
www.b-simple.de 6
Ruby on Rails
2005
Controller
• Steuern Kontrollfluss (Action)• Bearbeiten HTTP-Requests• Aufruf per Reflection => keine Konfiguration• Erzeugen Views• View-Daten über Instanzvariablen
www.b-simple.de 7
Ruby on Rails
2005
Modelle
• Domainobjekte• Active Record Pattern• Tabellenname = plural(Modellname)• Beziehen Attribute aus Datenbanktabelle (DRY)• Rails erzeugt dynamisch Getter und Setter• Modell-Relationen (1:1, 1:N, N:M)• Vererbung (Single Table Inheritance)
People
firstname
lastname
www.b-simple.de 8
Ruby on Rails
2005
Views
• Präsentation von Modellen in HTML• Daten über Instanzvariablen• Eingebetteter Ruby-Code (keine neue Sprache)
www.b-simple.de 9
Ruby on Rails
2005
Testgetriebene Softwareentwicklung• Entwurfs- und Programmiermethode• Tests treiben die Softwareentwicklung (Design)• TDD-Kreislauf:
Software wird änderbar und lebt lange
1. TestSchreibe einen fehlschlagenden Test
2. CodeSchreibe gerade soviel Code, dass der neue Test undalle vorhandenen Tests fehlerfrei ausgeführt werden
3. RefactoringEntferne Code Duplizierung und andere „Code Smells“
www.b-simple.de 10
Ruby on Rails
2005
Unit Tests• Basis für testgetriebene Softwareentwicklung
• Programmierte, automatisch ausführbare Tests
• Selbstständige Überprüfung der Ergebnisse
• Voraussetzung für Änderungen (z.B. Refactoring)
• Dynamische Sprachen
Zusätzliche Fehlerquelle (?)
Tests „notwendiger“ (?)
• Ruby Test::Unit
www.b-simple.de 11
Ruby on Rails
2005
Test-Unterstützung in Rails• Web-spezifische Erweiterung von Test::Unit
– assert_redirected_to– assert_template– assert_tag– assigns, session, cookie– u.a.
• Test-Unterstützung:– Modelle, Controller, Views– Mocks– Action Mailer– Action Web Services
www.b-simple.de 12
Ruby on Rails
2005
Demo „Wunschzettel“
Person WunschN1
• Papa: Socken und Krawatte• Mama: Lockenwickler und Schal• Bruder: Computer und Freundin• Schwester: ...
www.b-simple.de 13
Ruby on Rails
2005
Testen und Fixtures• Separate Testdatenbank
• Tabellen werden vor jedem Test automatisch gefüllt
• Aussagekräftige Namen wichtig
DB
Unit Tests
www.b-simple.de 14
Ruby on Rails
2005
Modelle testen• Neues Modell + Assoziation
www.b-simple.de 15
Ruby on Rails
2005
Controller testen• Action prüfen
• Zuweisung von Daten an Instanzvariablen prüfen
• Web-Server muss nicht laufen
www.b-simple.de 16
Ruby on Rails
2005
Views testen• HTML Code prüfen (Tags, Attribute, Daten, ...)
www.b-simple.de 17
Ruby on Rails
2005
• AJAX-Unterstützung (Asynchronous JavaScript And XML)
– Hoch interaktive Applikationen ähnlich Rich Client
– Drag & Drop, Visuelle Effekte
• Action Mailer
– E-Mail versenden und empfangen
• Action Web Services
– Anbindung anderer Systeme
Und sonst?
www.b-simple.de 18
Ruby on Rails
2005
Einsatz pro/contra• Für einen Großteil von
Web-Anwendungen
• EinfachesDatenmodell
• Keine verteilteTransaktion
• Apache/LightTPD undFastCgi
• Performanz?
• Anbindung externerSysteme (Host, SAP)
• Rich Client Anbindung
• Fehlende Tools, APIs(z.B. PDF-Server)
• Keine Integrationmöglich oder nurNeuimplementierung?
• Performanz?
www.b-simple.de 19
Ruby on Rails
2005
Unsere Erfahrungen• Rails seit Januar 2005
• csWebCert:
– Konsequent testgetrieben
– ca. 400 Testsca. 3000 Assertions
– Test-Code > Anwendungs-Code
• Änderungen sicherer und schnellerdurchführbar
• Extrem geringe Fehlerrate inAkzeptanztests
• Produktion: Apache/FastCgi
Anwendungen:
• Basecamp
• bellybutton
• Odeo
• ...
www.b-simple.de 20
Ruby on Rails
2005
Fazit• Schneller, kostengünstiger, früherer ROI
• Hohe Testbarkeit, Optimale Test-Unterstützung
• Sichere Nutzung dynamischer Sprachen durchkonsequentes Testen
• Auf Änderungen vorbereitet
• Wartbarkeit und Langlebigkeit
• Großteil aller Web-Anwendungen können mit Railsentwickelt werden
www.b-simple.de 21
Ruby on Rails
2005
Quellen• www.rubyonrails.org
• www.rubyonrails-ug.de
• www.rubyonrails.de
• www.ruby-lang.org/en
Hanser 01/2006
www.rapidwebdevelopment.de
www.b-simple.de 22
Ruby on Rails
2005
Rails.
Is it love?