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.
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Workshop: Behavior Driven Development mit vier Frameworks
1. Behavior Driven
Development
mit CakePHP, Symfony, Drupal und Django
Workshop zur FUxCon 2013
Olav Schettler - Cocomore AG
olav.schettler@cocomore.com
Montag, 17. Juni 13
2. 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
3. Anforderung
Vision: 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▾
➽
Title
Lorem
ipsum dolor
sit amet,
conseteturvon..bis
aa, bb
• Features: Projektliste, Projektdetailseite, Nutzerkonten,
Bild-Upload, automatische Bildskalierung,Tagging
• User Stories formal in Gherkin, einer
Domain Specific Language (DSL) zur Beschreibung von
Software-Verhalten
• Implementierung alternativ in vier Web-Frameworks
Tagging Tag
Bild
Montag, 17. Juni 13
4. Das Gesamtverhalten
Merkmal Fallbeispiele
Startseite
Spaltenweise Auflistung
Seitenweises Blättern
Projektdetails
Verlinkung von der Listenseite
Felder:Titel, skaliertes Bild, Start, Ende,Themen
Projekt anlegen
Nur angemeldete Nutzer dürfen Projekte anlegen
Projekte 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
5. Formale User Stories
• Einbeziehung des Auftraggebers in die
Anforderungsdefinition
• Fallbeispiele fürVerhaltensbeschreibung
• Automatisierung der Fallbeispiele
durch Mock-Objekte
• Successive Implementierung
Montag, 17. Juni 13
6. 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
7. 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
8. 2. Fallbeispiel dazu
Scenario: 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
10. 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
20. ... 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.de
scratch.mit.edu
hotscripts.com
Montag, 17. Juni 13
21. ... 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.gov
louvre.fr
x.com
maxim.com
brits.co.uk
examiner.com
kenzo.com
Montag, 17. Juni 13
22. ... ist fantastisch, weil es
damit einfacher ist, bessere Web Apps
schneller und mit weniger Code zu bauen.
https://www.djangoproject.com/
disqus.com
instagram.com
mozilla.org
pinterest.com
rdio.com
Montag, 17. Juni 13
23. ... ist fantastisch, weil es
... Erstellung und Pflege von PHP Web-
Anwendungen beschleunigt. Er ersetzt sich
wiederholende Programmieraufgaben durch
Leistungsfähigkeit, Kontrolle undVergnügen.
... eine Zertifizierung für Entwickler gibt.
... demnächst in Drupal 8 enthalten ist.
http://symfony.com/
esl.eu
dailymotion.com
answers.yahoo.com
del.icio.us
Montag, 17. Juni 13
24. 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
26. Warum dann
dieseVier?
CakePHP
Ich habe zwischen 2008 und 2011 platinnetz.de
mit einem kleinen Team in CakePHP
programmiert und betrieben.
Drupal
Ich setze Drupal seit 9 Jahren in Projekten
für Kunden ein, habe ein Buch darüber
geschrieben und zuletzt in 2012 für Acquia
im technischen Support großer Drupal-
Sites gearbeitet. Cocomore macht auch Drupal-Projekte
Django
Viele 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.
Symfony
Wenn 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.
Annotationen
Docstrings
erzwungene Struktur
funktionierende Namespaces
Montag, 17. Juni 13
37. Zusammenfassung
Dateien /
Code-Zeilen
Dateien /
Code-Zeilen
Dateien /
Code-Zeilen
gesamt custom contrib
CakePHP
153 /
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.
Drupal
541 /
166.951
8 /
216
179 /
41.697
Drupal ist riesig, bei relativ wenigen, großen
Dateien. Die erforderlichen Erweiterungen
(besondersViews) sind ebenfalls groß.
Der erforderliche, eigenen Code ist am kleinsten!
Django
1992 /
289.956
17 /
808
887 /
167.242
Django ist subjektiv das eleganteste (eingebaute
Features) und produktivste (Dokumentation,
verfügbare Erweiterungen) MVC-Framework in
diesemVergleich.
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. ImVergleich zu den anderen
Frameworks wirkt vieles umständlich.
viele kleine Dateien
Tagging, Skalierung,
Markdown
Montag, 17. Juni 13
38. 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