40
Behavior Driven Development mit CakePHP, Symfony, Drupal und Django Workshop zur FUxCon 2013 Olav Schettler - Cocomore AG [email protected] Montag, 17. Juni 13

Workshop: Behavior Driven Development mit vier Frameworks

Embed Size (px)

DESCRIPTION

Zur FUxCon 2013 in Frankfurt stellte ich in einem Workshop Behavior Driven Development mit Behat/Mink und Gherkin vor und zeigte Implementierungen in vier Web Frameworks (CakePHP, Django, Drupal, Symfony), die die Verhaltensbeschreibung implementieren. Verhaltensbeschreibung und Implementierungen sind unter https://cocomore.github.io/fuxcon2013 detailliert beschrieben und stehen von dort frei zum Download zur Verfügung.

Citation preview

Page 1: Workshop: Behavior Driven Development mit vier Frameworks

Behavior Driven Development

mit CakePHP, Symfony, Drupal und DjangoWorkshop zur FUxCon 2013

Olav Schettler - Cocomore [email protected]

Montag, 17. Juni 13

Page 2: Workshop: Behavior Driven Development mit vier Frameworks

Behavior Driven Development

Während der Anforderungsanalyse werden Aufgaben, Ziele und Ergebnisse der Software textuell festgehalten, so dass diese später automatisiert auf ihre korrekte Implementierung getestet werden können.

wikipedia.org/Behavior_Driven_Development

BDD wurde 2003 von Dan North eingeführt.

dannorth.net/introducing-bdd

Montag, 17. Juni 13

Page 3: Workshop: Behavior Driven Development mit vier Frameworks

AnforderungVision: Projektportfolio einer AgenturVision: Projektportfolio einer Agentur Name: ProjectsName: Projects

Personas

Besucher der Site, die sich über das Portfolio der Agentur informieren wollen

Mehrere Agenturmitarbeiter, die Projektbeschrei-bungen pflegen

Big PictureBig Picture Product Details

Project User p p p

p p p

user▾

user▾

➽TitleLorem ipsum dolor sit amet, consetetur von..bis

aa, bb

• Features: Projektliste, Projektdetailseite, Nutzerkonten, Bild-Upload, automatische Bildskalierung, Tagging

• User Stories formal in Gherkin, einerDomain Specific Language (DSL) zur Beschreibung von Software-Verhalten

• Implementierung alternativ in vier Web-Frameworks

Tagging Tag

Bild

Montag, 17. Juni 13

Page 4: Workshop: Behavior Driven Development mit vier Frameworks

Das GesamtverhaltenMerkmal Fallbeispiele

StartseiteSpaltenweise AuflistungSeitenweises Blättern

ProjektdetailsVerlinkung von der ListenseiteFelder: Titel, skaliertes Bild, Start, Ende, Themen

Projekt anlegenNur angemeldete Nutzer dürfen Projekte anlegenProjekte werden nach Abschicken des Formulars gespeichert

Projekt bearbeiten

Redakteure und Admins dürfen Projekte bearbeitenÄnderungen werden beim Abschicken des Formulars gespeichert

Nutzerkonten Registrierung, Anmelden, Abmelden

Montag, 17. Juni 13

Page 5: Workshop: Behavior Driven Development mit vier Frameworks

Formale User Stories

• Einbeziehung des Auftraggebers in die Anforderungsdefinition

• Fallbeispiele für Verhaltensbeschreibung

• Automatisierung der Fallbeispiele durch Mock-Objekte

• Successive Implementierung

Montag, 17. Juni 13

Page 6: Workshop: Behavior Driven Development mit vier Frameworks

Beispiel: Projektdetails

Feature: projectdetail

• In order to see project details

• As an anonymous or logged-in user

• I want to click in a title on an index page and get a page with title, big picture, dates, and description text formatted in Markdown

Montag, 17. Juni 13

Page 7: Workshop: Behavior Driven Development mit vier Frameworks

1. Fallbeispiel dazu

Scenario: From the index page a click on a title brings me to a project detail page

• Given I am on the homepage

• When I click on the first project title

• Then I am on a project detail page

Montag, 17. Juni 13

Page 8: Workshop: Behavior Driven Development mit vier Frameworks

2. Fallbeispiel dazuScenario: A project detail page shows title, big picture, dates, and description text

• Given I am on a project detail page

• Then I see content (title, picture, dates, about)

• And the picture has a width of 380px

• And the "about" content is formatted with Markdown

Montag, 17. Juni 13

Page 9: Workshop: Behavior Driven Development mit vier Frameworks

Brücke zwischen Fallbeispielen und Code

• a) Mock Objekte - nicht weiter verfolgt

• b) Funktionale Tests

Montag, 17. Juni 13

Page 10: Workshop: Behavior Driven Development mit vier Frameworks

1. Beispiel - Werkzeuge Behat und Mink:

• Zuordnung von Szenarien zu Tests über reguläre Ausdrücke

• Einheitliche Schnittstelle zu verschiedenen Browser-Emulationen

Montag, 17. Juni 13

Page 11: Workshop: Behavior Driven Development mit vier Frameworks

2. Beispiel: Parametrisierung

• Geklammerte Ausdrücke werden Parameter

• Wiederverwend-barkeit von Tests

Montag, 17. Juni 13

Page 12: Workshop: Behavior Driven Development mit vier Frameworks

3. Beispiel: Bildprüfung

• Parametrisierung

• Suchen in Seite mit CSS

• Herunterladen und lokale Validierung des Bildes

Montag, 17. Juni 13

Page 13: Workshop: Behavior Driven Development mit vier Frameworks

Erhöhte Testbarkeit

• Hilfsfunktionen (checkLogin)

Montag, 17. Juni 13

Page 14: Workshop: Behavior Driven Development mit vier Frameworks

Konfiguration & Fixtures

Montag, 17. Juni 13

Page 15: Workshop: Behavior Driven Development mit vier Frameworks

Provide Test Values

zeit-basierend

eindeutige Werte

Datumsfelder

Bild-Uploads

Montag, 17. Juni 13

Page 16: Workshop: Behavior Driven Development mit vier Frameworks

Der Rest ist

Montag, 17. Juni 13

Page 17: Workshop: Behavior Driven Development mit vier Frameworks

Der Rest ist

... Fleiß

Montag, 17. Juni 13

Page 18: Workshop: Behavior Driven Development mit vier Frameworks

Vier Frameworks

• Komponenten-Framework zur schnelleren Entwicklung von Content-Management-Systemen

• Bausteine für:

• Zugriffsschutz• Datenbankschnittstelle• Template-Engine• Suchfunktionalitäten

http://de.wikipedia.org/wiki/Content-Management-Framework

Montag, 17. Juni 13

Page 19: Workshop: Behavior Driven Development mit vier Frameworks

Aber welches?

Montag, 17. Juni 13

Page 20: Workshop: Behavior Driven Development mit vier Frameworks

... ist fantastisch, weil es

uns Web-Anwendungen einfacher, schneller und mit weniger Code entwickeln lässt.

Ständig benötigte Bausteine sind bereits eingebaut: Übersetzung, Datenbankzugang, Caching, Formularvalidierung, Authentisierung

http://cakephp.org/

platinnetz.descratch.mit.eduhotscripts.com

Montag, 17. Juni 13

Page 21: Workshop: Behavior Driven Development mit vier Frameworks

... ist fantastisch, weil es

bereits von Millionen Websites genutzt und von einer aktiven und vielfältigen Gemeinde unterstützt wird und als Basis von privaten Weblogs ebenso wie für Unternehmens-anwendungen taugt.

https://drupal.org/

whiteHouse.govlouvre.frx.commaxim.combrits.co.ukexaminer.comkenzo.com

Montag, 17. Juni 13

Page 22: Workshop: Behavior Driven Development mit vier Frameworks

... ist fantastisch, weil es

damit einfacher ist, bessere Web Apps schneller und mit weniger Code zu bauen.

https://www.djangoproject.com/

disqus.cominstagram.commozilla.orgpinterest.comrdio.com

Montag, 17. Juni 13

Page 23: Workshop: Behavior Driven Development mit vier Frameworks

... ist fantastisch, weil es

... Erstellung und Pflege von PHP Web-Anwendungen beschleunigt. Er ersetzt sich wiederholende Programmieraufgaben durch Leistungsfähigkeit, Kontrolle und Vergnügen.

... eine Zertifizierung für Entwickler gibt.

... demnächst in Drupal 8 enthalten ist.

http://symfony.com/

esl.eudailymotion.comanswers.yahoo.comdel.icio.us

Montag, 17. Juni 13

Page 24: Workshop: Behavior Driven Development mit vier Frameworks

Aber es gibt doch noch

• Open Source: Wordpress, Typo3, Joomla, ...

• Proprietär: SixCMS, Coremedia, Sitecore, ...

• PHP: Zend Framework, Yii, Kohana, ...

• Javascript: Node.js, Opa, ...

• andere: Ruby on Rails, Skala, ...

Montag, 17. Juni 13

Page 25: Workshop: Behavior Driven Development mit vier Frameworks

Ich habe eine Stunde

Montag, 17. Juni 13

Page 26: Workshop: Behavior Driven Development mit vier Frameworks

Warum dann diese Vier?

CakePHPIch habe zwischen 2008 und 2011 platinnetz.de mit einem kleinen Team in CakePHP programmiert und betrieben.

DrupalIch setze Drupal seit 9 Jahren in Projektenfür Kunden ein, habe ein Buch darüber geschrieben und zuletzt in 2012 für Acquiaim technischen Support großer Drupal-Sites gearbeitet. Cocomore macht auch Drupal-Projekte

DjangoViele Konzepte in Symfony stammen aus Django. Python ist meine Lieblings-Programmiersprache. Django ist ein extrem produktives Framework, besitzt hervoragende Dokumentation, wird auf vielen wirklich großen Sites eingesetzt und besitzt einen umfassenden Marktplatz für Erweiterungen.

SymfonyWenn man PHP machen muss, ist Symfony das neue Cool Kid. Es gibt wird in Deutschland aktiv durch die Agentur SensioLabs des Projektautors Fabien Potencier vermarktet, Es gibt eine Entwicklerzertifizierung und es wird in Drupal 8 enthalten sein.

AnnotationenDocstringserzwungene Strukturfunktionierende Namespaces

Montag, 17. Juni 13

Page 27: Workshop: Behavior Driven Development mit vier Frameworks

Core, Contrib, CustomCakePHP Django Drupal Symfony

Core

Users

Tagging

Thumbnails

CRUD

Markdown

Testdaten

2.3 1.5 7.22 2.3

eingebaut eingebaut eingebaut FOSUserBundle

CakeDC / tags taggit eingebaut FPNTagBundle

eigen photologue eingebaut eigen

bake eingebaut eingebautdoctrine:generate:crud

Hydra / markdown

eingebaut markdownKnpMarkdownBundle

eigen autofixture devel generate (noch nicht)

Montag, 17. Juni 13

Page 28: Workshop: Behavior Driven Development mit vier Frameworks

Vier Implementierungen

Frei verfügbar:https://cocomore.github.io/fuxcon2013• https://github.com/cocomore/fuxcon2013_cakephp• https://github.com/cocomore/fuxcon2013_django• https://github.com/cocomore/fuxcon2013_drupal• https://github.com/cocomore/fuxcon2013_symfony

Montag, 17. Juni 13

Page 29: Workshop: Behavior Driven Development mit vier Frameworks

Projects in CakePHP

Entwicklungs-werkzeuge

Nutzerkonten

Bildskalierung

Tagging

Markdown

einfache Rollen

Spaltenlayout

Montag, 17. Juni 13

Page 31: Workshop: Behavior Driven Development mit vier Frameworks

Projects in DrupalDrupal Toolbar

Kein Toolbar ;)

Testdaten

Taxonomy

Markdown

Theming

Montag, 17. Juni 13

Page 32: Workshop: Behavior Driven Development mit vier Frameworks

Drupal - Der Code

Montag, 17. Juni 13

Page 33: Workshop: Behavior Driven Development mit vier Frameworks

Projects in DjangoDebug Toolbar

Admin

Testdaten

Tagging

Markdown

Montag, 17. Juni 13

Page 34: Workshop: Behavior Driven Development mit vier Frameworks

Django - Der Code

Montag, 17. Juni 13

Page 35: Workshop: Behavior Driven Development mit vier Frameworks

Projects in Symfony

Debug Toolbar

Markdown

Tagging

rollenbasierte Zugriffsrechte

Montag, 17. Juni 13

Page 36: Workshop: Behavior Driven Development mit vier Frameworks

Symfony - Der Code

Montag, 17. Juni 13

Page 37: Workshop: Behavior Driven Development mit vier Frameworks

ZusammenfassungDateien /

Code-ZeilenDateien /

Code-ZeilenDateien /

Code-Zeilen

gesamt custom contrib

CakePHP153 /23.289

26 /1.771

40 /6.297

Die Seite in CakePHP war am einfachsten zu erstellen (ich habe einige Erfahrung darin), erforderte aber am meisten Custom Code.

Drupal541 /166.951

8 /216

179 /41.697

Drupal ist riesig, bei relativ wenigen, großen Dateien. Die erforderlichen Erweiterungen (besonders Views) sind ebenfalls groß. Der erforderliche, eigenen Code ist am kleinsten!

Django1992 /289.956

17 /808

887 /167.242

Django ist subjektiv das eleganteste (eingebaute Features) und produktivste (Dokumentation, verfügbare Erweiterungen) MVC-Framework in diesem Vergleich.

Symfony

6075 /69.888 (?)

34 /1093

2406 /312.729

Symfony selbst ist X so groß wie CakePHP, hat aber überproportional mal mehr Dateien. Der erforderliche Custom Code ist mit CakePHP vergleichbar. Im Vergleich zu den anderen Frameworks wirkt vieles umständlich.

viele kleine Dateien

Tagging, Skalierung, Markdown

Montag, 17. Juni 13

Page 38: Workshop: Behavior Driven Development mit vier Frameworks

Die Zukunft

• Die vier Implementierungen und die Tests stehen unter github.com/.../fuxcon2013 zum Download

• Ich nehme gerne weitere Frameworks und zusätzliche Features auf

• Neben den funktionalen Tests wünsche ich mir vergleichende Performance-Tests mit Massendaten. Wer mag...

Montag, 17. Juni 13

Page 39: Workshop: Behavior Driven Development mit vier Frameworks

Feedback, Fragen?

Montag, 17. Juni 13

Page 40: Workshop: Behavior Driven Development mit vier Frameworks

danke!

Montag, 17. Juni 13