Workshop: Behavior Driven Development mit vier Frameworks

Preview:

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

Behavior Driven Development

mit CakePHP, Symfony, Drupal und DjangoWorkshop zur FUxCon 2013

Olav Schettler - Cocomore AGolav.schettler@cocomore.com

Montag, 17. Juni 13

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

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

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

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

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

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

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

Brücke zwischen Fallbeispielen und Code

• a) Mock Objekte - nicht weiter verfolgt

• b) Funktionale Tests

Montag, 17. Juni 13

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

2. Beispiel: Parametrisierung

• Geklammerte Ausdrücke werden Parameter

• Wiederverwend-barkeit von Tests

Montag, 17. Juni 13

3. Beispiel: Bildprüfung

• Parametrisierung

• Suchen in Seite mit CSS

• Herunterladen und lokale Validierung des Bildes

Montag, 17. Juni 13

Erhöhte Testbarkeit

• Hilfsfunktionen (checkLogin)

Montag, 17. Juni 13

Konfiguration & Fixtures

Montag, 17. Juni 13

Provide Test Values

zeit-basierend

eindeutige Werte

Datumsfelder

Bild-Uploads

Montag, 17. Juni 13

Der Rest ist

Montag, 17. Juni 13

Der Rest ist

... Fleiß

Montag, 17. Juni 13

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

Aber welches?

Montag, 17. Juni 13

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

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

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

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

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

Ich habe eine Stunde

Montag, 17. Juni 13

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

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

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

Projects in CakePHP

Entwicklungs-werkzeuge

Nutzerkonten

Bildskalierung

Tagging

Markdown

einfache Rollen

Spaltenlayout

Montag, 17. Juni 13

Projects in DrupalDrupal Toolbar

Kein Toolbar ;)

Testdaten

Taxonomy

Markdown

Theming

Montag, 17. Juni 13

Drupal - Der Code

Montag, 17. Juni 13

Projects in DjangoDebug Toolbar

Admin

Testdaten

Tagging

Markdown

Montag, 17. Juni 13

Django - Der Code

Montag, 17. Juni 13

Projects in Symfony

Debug Toolbar

Markdown

Tagging

rollenbasierte Zugriffsrechte

Montag, 17. Juni 13

Symfony - Der Code

Montag, 17. Juni 13

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

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

Feedback, Fragen?

Montag, 17. Juni 13

danke!

Montag, 17. Juni 13

Recommended