![Page 1: Testgetriebene Web-Entwicklung mit Ruby on Rails Baustert... · 2010. 3. 24. · Entwicklung von datenbankbasierten Web-Anwendungen in Ruby. 4 Ruby on Rails 2005 Ruby • Dynamisch](https://reader036.vdocuments.site/reader036/viewer/2022063013/5fcb5b7795e97801983d7e20/html5/thumbnails/1.jpg)
www.b-simple.de 1
Ruby on Rails
2005
Testgetriebene Web-Entwicklung
mit
Ruby on Rails
Thomas Baustert
www.b-simple.de
![Page 2: Testgetriebene Web-Entwicklung mit Ruby on Rails Baustert... · 2010. 3. 24. · Entwicklung von datenbankbasierten Web-Anwendungen in Ruby. 4 Ruby on Rails 2005 Ruby • Dynamisch](https://reader036.vdocuments.site/reader036/viewer/2022063013/5fcb5b7795e97801983d7e20/html5/thumbnails/2.jpg)
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
![Page 3: Testgetriebene Web-Entwicklung mit Ruby on Rails Baustert... · 2010. 3. 24. · Entwicklung von datenbankbasierten Web-Anwendungen in Ruby. 4 Ruby on Rails 2005 Ruby • Dynamisch](https://reader036.vdocuments.site/reader036/viewer/2022063013/5fcb5b7795e97801983d7e20/html5/thumbnails/3.jpg)
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.
![Page 4: Testgetriebene Web-Entwicklung mit Ruby on Rails Baustert... · 2010. 3. 24. · Entwicklung von datenbankbasierten Web-Anwendungen in Ruby. 4 Ruby on Rails 2005 Ruby • Dynamisch](https://reader036.vdocuments.site/reader036/viewer/2022063013/5fcb5b7795e97801983d7e20/html5/thumbnails/4.jpg)
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.
![Page 5: Testgetriebene Web-Entwicklung mit Ruby on Rails Baustert... · 2010. 3. 24. · Entwicklung von datenbankbasierten Web-Anwendungen in Ruby. 4 Ruby on Rails 2005 Ruby • Dynamisch](https://reader036.vdocuments.site/reader036/viewer/2022063013/5fcb5b7795e97801983d7e20/html5/thumbnails/5.jpg)
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
![Page 6: Testgetriebene Web-Entwicklung mit Ruby on Rails Baustert... · 2010. 3. 24. · Entwicklung von datenbankbasierten Web-Anwendungen in Ruby. 4 Ruby on Rails 2005 Ruby • Dynamisch](https://reader036.vdocuments.site/reader036/viewer/2022063013/5fcb5b7795e97801983d7e20/html5/thumbnails/6.jpg)
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
![Page 7: Testgetriebene Web-Entwicklung mit Ruby on Rails Baustert... · 2010. 3. 24. · Entwicklung von datenbankbasierten Web-Anwendungen in Ruby. 4 Ruby on Rails 2005 Ruby • Dynamisch](https://reader036.vdocuments.site/reader036/viewer/2022063013/5fcb5b7795e97801983d7e20/html5/thumbnails/7.jpg)
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
![Page 8: Testgetriebene Web-Entwicklung mit Ruby on Rails Baustert... · 2010. 3. 24. · Entwicklung von datenbankbasierten Web-Anwendungen in Ruby. 4 Ruby on Rails 2005 Ruby • Dynamisch](https://reader036.vdocuments.site/reader036/viewer/2022063013/5fcb5b7795e97801983d7e20/html5/thumbnails/8.jpg)
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)
![Page 9: Testgetriebene Web-Entwicklung mit Ruby on Rails Baustert... · 2010. 3. 24. · Entwicklung von datenbankbasierten Web-Anwendungen in Ruby. 4 Ruby on Rails 2005 Ruby • Dynamisch](https://reader036.vdocuments.site/reader036/viewer/2022063013/5fcb5b7795e97801983d7e20/html5/thumbnails/9.jpg)
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“
![Page 10: Testgetriebene Web-Entwicklung mit Ruby on Rails Baustert... · 2010. 3. 24. · Entwicklung von datenbankbasierten Web-Anwendungen in Ruby. 4 Ruby on Rails 2005 Ruby • Dynamisch](https://reader036.vdocuments.site/reader036/viewer/2022063013/5fcb5b7795e97801983d7e20/html5/thumbnails/10.jpg)
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
![Page 11: Testgetriebene Web-Entwicklung mit Ruby on Rails Baustert... · 2010. 3. 24. · Entwicklung von datenbankbasierten Web-Anwendungen in Ruby. 4 Ruby on Rails 2005 Ruby • Dynamisch](https://reader036.vdocuments.site/reader036/viewer/2022063013/5fcb5b7795e97801983d7e20/html5/thumbnails/11.jpg)
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
![Page 12: Testgetriebene Web-Entwicklung mit Ruby on Rails Baustert... · 2010. 3. 24. · Entwicklung von datenbankbasierten Web-Anwendungen in Ruby. 4 Ruby on Rails 2005 Ruby • Dynamisch](https://reader036.vdocuments.site/reader036/viewer/2022063013/5fcb5b7795e97801983d7e20/html5/thumbnails/12.jpg)
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: ...
![Page 13: Testgetriebene Web-Entwicklung mit Ruby on Rails Baustert... · 2010. 3. 24. · Entwicklung von datenbankbasierten Web-Anwendungen in Ruby. 4 Ruby on Rails 2005 Ruby • Dynamisch](https://reader036.vdocuments.site/reader036/viewer/2022063013/5fcb5b7795e97801983d7e20/html5/thumbnails/13.jpg)
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
![Page 14: Testgetriebene Web-Entwicklung mit Ruby on Rails Baustert... · 2010. 3. 24. · Entwicklung von datenbankbasierten Web-Anwendungen in Ruby. 4 Ruby on Rails 2005 Ruby • Dynamisch](https://reader036.vdocuments.site/reader036/viewer/2022063013/5fcb5b7795e97801983d7e20/html5/thumbnails/14.jpg)
www.b-simple.de 14
Ruby on Rails
2005
Modelle testen• Neues Modell + Assoziation
![Page 15: Testgetriebene Web-Entwicklung mit Ruby on Rails Baustert... · 2010. 3. 24. · Entwicklung von datenbankbasierten Web-Anwendungen in Ruby. 4 Ruby on Rails 2005 Ruby • Dynamisch](https://reader036.vdocuments.site/reader036/viewer/2022063013/5fcb5b7795e97801983d7e20/html5/thumbnails/15.jpg)
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
![Page 16: Testgetriebene Web-Entwicklung mit Ruby on Rails Baustert... · 2010. 3. 24. · Entwicklung von datenbankbasierten Web-Anwendungen in Ruby. 4 Ruby on Rails 2005 Ruby • Dynamisch](https://reader036.vdocuments.site/reader036/viewer/2022063013/5fcb5b7795e97801983d7e20/html5/thumbnails/16.jpg)
www.b-simple.de 16
Ruby on Rails
2005
Views testen• HTML Code prüfen (Tags, Attribute, Daten, ...)
![Page 17: Testgetriebene Web-Entwicklung mit Ruby on Rails Baustert... · 2010. 3. 24. · Entwicklung von datenbankbasierten Web-Anwendungen in Ruby. 4 Ruby on Rails 2005 Ruby • Dynamisch](https://reader036.vdocuments.site/reader036/viewer/2022063013/5fcb5b7795e97801983d7e20/html5/thumbnails/17.jpg)
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?
![Page 18: Testgetriebene Web-Entwicklung mit Ruby on Rails Baustert... · 2010. 3. 24. · Entwicklung von datenbankbasierten Web-Anwendungen in Ruby. 4 Ruby on Rails 2005 Ruby • Dynamisch](https://reader036.vdocuments.site/reader036/viewer/2022063013/5fcb5b7795e97801983d7e20/html5/thumbnails/18.jpg)
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?
![Page 19: Testgetriebene Web-Entwicklung mit Ruby on Rails Baustert... · 2010. 3. 24. · Entwicklung von datenbankbasierten Web-Anwendungen in Ruby. 4 Ruby on Rails 2005 Ruby • Dynamisch](https://reader036.vdocuments.site/reader036/viewer/2022063013/5fcb5b7795e97801983d7e20/html5/thumbnails/19.jpg)
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
• ...
![Page 20: Testgetriebene Web-Entwicklung mit Ruby on Rails Baustert... · 2010. 3. 24. · Entwicklung von datenbankbasierten Web-Anwendungen in Ruby. 4 Ruby on Rails 2005 Ruby • Dynamisch](https://reader036.vdocuments.site/reader036/viewer/2022063013/5fcb5b7795e97801983d7e20/html5/thumbnails/20.jpg)
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
![Page 21: Testgetriebene Web-Entwicklung mit Ruby on Rails Baustert... · 2010. 3. 24. · Entwicklung von datenbankbasierten Web-Anwendungen in Ruby. 4 Ruby on Rails 2005 Ruby • Dynamisch](https://reader036.vdocuments.site/reader036/viewer/2022063013/5fcb5b7795e97801983d7e20/html5/thumbnails/21.jpg)
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
![Page 22: Testgetriebene Web-Entwicklung mit Ruby on Rails Baustert... · 2010. 3. 24. · Entwicklung von datenbankbasierten Web-Anwendungen in Ruby. 4 Ruby on Rails 2005 Ruby • Dynamisch](https://reader036.vdocuments.site/reader036/viewer/2022063013/5fcb5b7795e97801983d7e20/html5/thumbnails/22.jpg)
www.b-simple.de 22
Ruby on Rails
2005
Rails.
Is it love?