22
www.b-simple.de 1 Ruby on Rails 2005 Testgetriebene Web-Entwicklung mit Ruby on Rails Thomas Baustert www.b-simple.de

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

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

www.b-simple.de 22

Ruby on Rails

2005

Rails.

Is it love?