workshop: behavior driven development mit vier frameworks
Post on 25-Jan-2015
441 Views
Preview:
DESCRIPTION
TRANSCRIPT
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
CakePHP - Der Codehttp://fossil.cm.schettler.net/fuxcon2013/
finfo?name=cakephp/app/Controller/ProjectsController.php
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
top related