SlideShare ist ein Scribd-Unternehmen logo
1 von 58
Downloaden Sie, um offline zu lesen
Qualitätssicherung in
Webprojekten

Sebastian Springer I 06.06.2012




                                  © Mayflower GmbH 2012
HELLO
    MY NAME
    IS


@basti_springer
Womit verdiene ich mein Geld?
●   Mayflower GmbH


●   PHP


●   Javascript


●   Teamleiter
Projekte?
Was erzähle ich heute?

●   Qualitätssicherung in Webprojekten


●   Schwerpunkt: Javascript
...und was nicht?

●   Qualitätssicherung in PHP


●   PHPCS, PHPUnit, phpcpd, pdepend,...


●   http://jenkins-php.org/
Warum Qualitätssicherung?
Javascript === Quick & Dirty
Javascript === Quick & Dirty
Was ist Qualitätssicherung




                      ?
●   Standards


●   Verlässlichkeit


●   Erweiterbarkeit


●   Stabilität
CI




∞
Continuous Inspection
Continuous Integration
Plattformen
CI im Großen - Jenkins
CI im Kleinen – die IDE
Und wozu das Ganze?
Schnelle Rückmeldung!
Das Beispiel
Ziel
Ziel
       Datum eingeben
Ziel



       Offset eingeben
Ziel




   Datum berechnen
Ziel



Feiertage beachten!
Anforderungen an den Code
●   JSLinted


●   Kein Copy/Paste Code


●   Unittests


●   Akzeptanztests
Wie?
Mit Toolunterstützung und
     Automatisierung!
Anforderungen an den Code
●   JSLinted


●   Kein Copy/Paste Code


●   Unittests


●   Akzeptanztests
It will hurt your feelings!
Was macht JSLint?
●   Codingstyle – Whitespaces
●   == & != vs. === & !==
●   Variablendeklarationen zu Beginn einer
    Funktion
●   “use strict”
●   Globale Variablen
●   Verwendung vor der Definition
●   eval is Evil
JSLint in Jenkins
●   jslint4java

    java -jar jslint4java.jar --report
    xml /path/to/src/*.js > jslint.xml

●   Violations Plugin
JSLint in PhpStorm
Anforderungen an den Code
●   JSLinted


●   Kein Copy/Paste Code


●   Unittests


●   Akzeptanztests
Was macht CPD?
●   Duplikate im Quellcode finden


●   Tokens statt Strings
Warum?
●   Verbesserungen an mehreren Stellen


●   Bugfixes an mehreren Stellen




    = erhöhter Wartungsaufwand
CPD in Jenkins
●   PMD CPD

    /opt/PMD/bin/run.sh cpd --minimum-
    tokens 12 --files /path/to/src
    --language ecmascript --format xml
    > cpd.xml

●   Duplicate Code Scanner Plug-in
Anforderungen an den Code
●   JSLinted


●   Kein Copy/Paste Code


●   Unittests


●   Akzeptanztests
Warum Unittests?
●   Stabilität


●   Sicherheit


●   Dokumentation


●   Pro Bug ein Test
Jasmine
describe("DateCalc", function () {
      it("should return false ...provided", function () {
            var dateCalc = new DateCalc(),
                result = dateCalc.resolveDate();
            expect(result).toBeFalsy();
      });
});
TDD
JsTestDriver
●   Testing Framework


●   Browser Capturing


●   Coverage


●   Plugins für Qunit und Jasmine
Jasmine in Jenkins
●   JsTestDriver

    java -jar JsTestDriver.jar --port
    9876 --browser /usr/bin/firefox

    java -jar JsTestDriver.jar --config
    /path/to/config.jstd --tests all
    --testOutput . --reset

●   xUnit Plugin
config.jstd
server: http://localhost:9876

load:
  - lib/jasmine-1.2.0.rc3/jasmine.js
  - lib/jasmine-jstd-adapter/src/JasmineAdapter.js
  - spec/DateCalc.js
  - spec/Holiday.js
  - src/DateCalc.js
  - src/Holiday.js

plugin:
 - name: "coverage"
   jar: "/opt/JsTestDriver/plugins/coverage.jar"
   module: "com.google.jstestdriver.coverage.CoverageModule"
Coverage in Jenkins
●   JsTestDriver Coverage Plugin

●   Converter

    /opt/lcov-to-cobertura-xml.py
    jsTestDriver.conf-coverage.dat -o
    coverage/coverage.xml

●   Cobertura Plugin
Jasmine in PHPStorm
Jasmine in PHPStorm
Jasmine in PHPStorm
Anforderungen an den Code
●   JSLinted


●   Kein Copy/Paste Code


●   Unittests


●   Akzeptanztests
Warum Akzeptanztests?
●   Tests gegen Akzeptanzkriterien


●   Anforderungen vs. Umsetzung


●   Nicht von Entwicklern
Selenium IDE
Selenium in Jenkins
●   Selenium Server

    export DISPLAY=:5.0
    java -jar /opt/selenium-server.jar
    -htmlSuite *firefox
    "http://dateCalc.basti.dev"
    "/srv/www/vhosts/tests/suite.html"
    "selenium/results.html"
●   Selenium HTML report Plugin
Chuck Norris Plugin
Fragen?
http://joind.in/talk/view/6658
Vielen Dank für Ihre
      Aufmerksamkeit!


                      Sebastian Springer
                sebastian.springer@mayflower.de


                       Mayflower GmbH
                        Mannhardtstr. 6
                        80538 München
                          Deutschland


                    Twitter: @basti_springer

June 11, 2012               Mayflower GmbH        58
                 https://github.com/sspringer82

Weitere ähnliche Inhalte

Ähnlich wie Qualitätssicherung in Webprojekten

BED-Con - Tools für den täglichen Kampf als Entwickler
BED-Con - Tools für den täglichen Kampf als EntwicklerBED-Con - Tools für den täglichen Kampf als Entwickler
BED-Con - Tools für den täglichen Kampf als EntwicklerPatrick Baumgartner
 
EntwicklerCamp 2014 - DOTS reloaded
EntwicklerCamp 2014 - DOTS reloadedEntwicklerCamp 2014 - DOTS reloaded
EntwicklerCamp 2014 - DOTS reloadedRené Winkelmeyer
 
Container Tag – Nie mehr warten auf die IT! - Tag Management Lösung
Container Tag – Nie mehr warten auf die IT! - Tag Management LösungContainer Tag – Nie mehr warten auf die IT! - Tag Management Lösung
Container Tag – Nie mehr warten auf die IT! - Tag Management LösungConnected-Blog
 
Best Practices für TDD in JavaScript
Best Practices für TDD in JavaScriptBest Practices für TDD in JavaScript
Best Practices für TDD in JavaScriptSebastian Springer
 
Gameduell Glassfish Migration
Gameduell Glassfish MigrationGameduell Glassfish Migration
Gameduell Glassfish Migrationdehms
 
Web Performance Optimierung (WPO)
Web Performance Optimierung (WPO)Web Performance Optimierung (WPO)
Web Performance Optimierung (WPO)Martin Kliehm
 
JFS 2011 - Top 10 der Tools & Methoden - Baumgartner, Oehmichen
JFS 2011 - Top 10 der Tools & Methoden - Baumgartner, OehmichenJFS 2011 - Top 10 der Tools & Methoden - Baumgartner, Oehmichen
JFS 2011 - Top 10 der Tools & Methoden - Baumgartner, OehmichenOdilo Oehmichen
 
JFS 2011 - Top 10 Tools & Methoden - Baumgartner, Oehmichen
JFS 2011 - Top 10 Tools & Methoden - Baumgartner, OehmichenJFS 2011 - Top 10 Tools & Methoden - Baumgartner, Oehmichen
JFS 2011 - Top 10 Tools & Methoden - Baumgartner, OehmichenPatrick Baumgartner
 
Zend Framework 2 - Best Practices
Zend Framework 2 - Best PracticesZend Framework 2 - Best Practices
Zend Framework 2 - Best PracticesRalf Eggert
 
Magento 2 Zertifizierung - Wissenswertes und ein paar Tipps
Magento 2 Zertifizierung - Wissenswertes und ein paar TippsMagento 2 Zertifizierung - Wissenswertes und ein paar Tipps
Magento 2 Zertifizierung - Wissenswertes und ein paar TippsChristian Münch
 
Icsug conf 14_tipps-und-skripts-fuer-ibm-connections-administratoren
Icsug conf 14_tipps-und-skripts-fuer-ibm-connections-administratorenIcsug conf 14_tipps-und-skripts-fuer-ibm-connections-administratoren
Icsug conf 14_tipps-und-skripts-fuer-ibm-connections-administratorenICS User Group
 
JSF meets JS (2. ed.) - JSF-Komponenten mit JavaScript
JSF meets JS (2. ed.) - JSF-Komponenten mit JavaScriptJSF meets JS (2. ed.) - JSF-Komponenten mit JavaScript
JSF meets JS (2. ed.) - JSF-Komponenten mit JavaScriptOPEN KNOWLEDGE GmbH
 
REST Problems
REST ProblemsREST Problems
REST Problemspredic8
 
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan ScheidtAutomatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan ScheidtOPITZ CONSULTING Deutschland
 
HTML5 Offline - Fallstricke für mobile Webseiten und WebApps
HTML5 Offline - Fallstricke für mobile Webseiten und WebAppsHTML5 Offline - Fallstricke für mobile Webseiten und WebApps
HTML5 Offline - Fallstricke für mobile Webseiten und WebAppsUlrich Schmidt
 
Oracle oem 12c_plugin_development-doag-konferenz_11_2014_print_gunther_pipperr
Oracle oem 12c_plugin_development-doag-konferenz_11_2014_print_gunther_pipperrOracle oem 12c_plugin_development-doag-konferenz_11_2014_print_gunther_pipperr
Oracle oem 12c_plugin_development-doag-konferenz_11_2014_print_gunther_pipperrGunther Pippèrr
 
Next Level Unit Testing
Next Level Unit TestingNext Level Unit Testing
Next Level Unit TestingDaniel Lehner
 
DC Storm - Tag Management / Container Tag - Nie mehr warten auf die IT
DC Storm - Tag Management / Container Tag - Nie mehr warten auf die ITDC Storm - Tag Management / Container Tag - Nie mehr warten auf die IT
DC Storm - Tag Management / Container Tag - Nie mehr warten auf die ITDC Storm Deutschland GmbH
 
W-JAX 2013 Spring Batch - Performance und Skalierbarkeit
W-JAX 2013 Spring Batch - Performance und SkalierbarkeitW-JAX 2013 Spring Batch - Performance und Skalierbarkeit
W-JAX 2013 Spring Batch - Performance und Skalierbarkeittobiasflohre
 

Ähnlich wie Qualitätssicherung in Webprojekten (20)

BED-Con - Tools für den täglichen Kampf als Entwickler
BED-Con - Tools für den täglichen Kampf als EntwicklerBED-Con - Tools für den täglichen Kampf als Entwickler
BED-Con - Tools für den täglichen Kampf als Entwickler
 
EntwicklerCamp 2014 - DOTS reloaded
EntwicklerCamp 2014 - DOTS reloadedEntwicklerCamp 2014 - DOTS reloaded
EntwicklerCamp 2014 - DOTS reloaded
 
Container Tag – Nie mehr warten auf die IT! - Tag Management Lösung
Container Tag – Nie mehr warten auf die IT! - Tag Management LösungContainer Tag – Nie mehr warten auf die IT! - Tag Management Lösung
Container Tag – Nie mehr warten auf die IT! - Tag Management Lösung
 
Best Practices für TDD in JavaScript
Best Practices für TDD in JavaScriptBest Practices für TDD in JavaScript
Best Practices für TDD in JavaScript
 
Gameduell Glassfish Migration
Gameduell Glassfish MigrationGameduell Glassfish Migration
Gameduell Glassfish Migration
 
Web Performance Optimierung (WPO)
Web Performance Optimierung (WPO)Web Performance Optimierung (WPO)
Web Performance Optimierung (WPO)
 
GWT
GWTGWT
GWT
 
JFS 2011 - Top 10 der Tools & Methoden - Baumgartner, Oehmichen
JFS 2011 - Top 10 der Tools & Methoden - Baumgartner, OehmichenJFS 2011 - Top 10 der Tools & Methoden - Baumgartner, Oehmichen
JFS 2011 - Top 10 der Tools & Methoden - Baumgartner, Oehmichen
 
JFS 2011 - Top 10 Tools & Methoden - Baumgartner, Oehmichen
JFS 2011 - Top 10 Tools & Methoden - Baumgartner, OehmichenJFS 2011 - Top 10 Tools & Methoden - Baumgartner, Oehmichen
JFS 2011 - Top 10 Tools & Methoden - Baumgartner, Oehmichen
 
Zend Framework 2 - Best Practices
Zend Framework 2 - Best PracticesZend Framework 2 - Best Practices
Zend Framework 2 - Best Practices
 
Magento 2 Zertifizierung - Wissenswertes und ein paar Tipps
Magento 2 Zertifizierung - Wissenswertes und ein paar TippsMagento 2 Zertifizierung - Wissenswertes und ein paar Tipps
Magento 2 Zertifizierung - Wissenswertes und ein paar Tipps
 
Icsug conf 14_tipps-und-skripts-fuer-ibm-connections-administratoren
Icsug conf 14_tipps-und-skripts-fuer-ibm-connections-administratorenIcsug conf 14_tipps-und-skripts-fuer-ibm-connections-administratoren
Icsug conf 14_tipps-und-skripts-fuer-ibm-connections-administratoren
 
JSF meets JS (2. ed.) - JSF-Komponenten mit JavaScript
JSF meets JS (2. ed.) - JSF-Komponenten mit JavaScriptJSF meets JS (2. ed.) - JSF-Komponenten mit JavaScript
JSF meets JS (2. ed.) - JSF-Komponenten mit JavaScript
 
REST Problems
REST ProblemsREST Problems
REST Problems
 
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan ScheidtAutomatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
 
HTML5 Offline - Fallstricke für mobile Webseiten und WebApps
HTML5 Offline - Fallstricke für mobile Webseiten und WebAppsHTML5 Offline - Fallstricke für mobile Webseiten und WebApps
HTML5 Offline - Fallstricke für mobile Webseiten und WebApps
 
Oracle oem 12c_plugin_development-doag-konferenz_11_2014_print_gunther_pipperr
Oracle oem 12c_plugin_development-doag-konferenz_11_2014_print_gunther_pipperrOracle oem 12c_plugin_development-doag-konferenz_11_2014_print_gunther_pipperr
Oracle oem 12c_plugin_development-doag-konferenz_11_2014_print_gunther_pipperr
 
Next Level Unit Testing
Next Level Unit TestingNext Level Unit Testing
Next Level Unit Testing
 
DC Storm - Tag Management / Container Tag - Nie mehr warten auf die IT
DC Storm - Tag Management / Container Tag - Nie mehr warten auf die ITDC Storm - Tag Management / Container Tag - Nie mehr warten auf die IT
DC Storm - Tag Management / Container Tag - Nie mehr warten auf die IT
 
W-JAX 2013 Spring Batch - Performance und Skalierbarkeit
W-JAX 2013 Spring Batch - Performance und SkalierbarkeitW-JAX 2013 Spring Batch - Performance und Skalierbarkeit
W-JAX 2013 Spring Batch - Performance und Skalierbarkeit
 

Mehr von Sebastian Springer

Mehr von Sebastian Springer (20)

Schnelleinstieg in Angular
Schnelleinstieg in AngularSchnelleinstieg in Angular
Schnelleinstieg in Angular
 
Creating Enterprise Web Applications with Node.js
Creating Enterprise Web Applications with Node.jsCreating Enterprise Web Applications with Node.js
Creating Enterprise Web Applications with Node.js
 
Divide and Conquer – Microservices with Node.js
Divide and Conquer – Microservices with Node.jsDivide and Conquer – Microservices with Node.js
Divide and Conquer – Microservices with Node.js
 
From Zero to Hero – Web Performance
From Zero to Hero – Web PerformanceFrom Zero to Hero – Web Performance
From Zero to Hero – Web Performance
 
Von 0 auf 100 - Performance im Web
Von 0 auf 100 - Performance im WebVon 0 auf 100 - Performance im Web
Von 0 auf 100 - Performance im Web
 
A/B Testing mit Node.js
A/B Testing mit Node.jsA/B Testing mit Node.js
A/B Testing mit Node.js
 
Angular2
Angular2Angular2
Angular2
 
Einführung in React
Einführung in ReactEinführung in React
Einführung in React
 
JavaScript Performance
JavaScript PerformanceJavaScript Performance
JavaScript Performance
 
ECMAScript 6 im Produktivbetrieb
ECMAScript 6 im ProduktivbetriebECMAScript 6 im Produktivbetrieb
ECMAScript 6 im Produktivbetrieb
 
Streams in Node.js
Streams in Node.jsStreams in Node.js
Streams in Node.js
 
JavaScript Performance
JavaScript PerformanceJavaScript Performance
JavaScript Performance
 
Große Applikationen mit AngularJS
Große Applikationen mit AngularJSGroße Applikationen mit AngularJS
Große Applikationen mit AngularJS
 
Testing tools
Testing toolsTesting tools
Testing tools
 
Node.js Security
Node.js SecurityNode.js Security
Node.js Security
 
Typescript
TypescriptTypescript
Typescript
 
Reactive Programming
Reactive ProgrammingReactive Programming
Reactive Programming
 
Warum ECMAScript 6 die Welt ein Stückchen besser macht
Warum ECMAScript 6 die Welt ein Stückchen besser machtWarum ECMAScript 6 die Welt ein Stückchen besser macht
Warum ECMAScript 6 die Welt ein Stückchen besser macht
 
Lean Startup mit JavaScript
Lean Startup mit JavaScriptLean Startup mit JavaScript
Lean Startup mit JavaScript
 
Webapplikationen mit Node.js
Webapplikationen mit Node.jsWebapplikationen mit Node.js
Webapplikationen mit Node.js
 

Qualitätssicherung in Webprojekten