JavaScript QA Tools

73
JAVASCRIPT-QA-TOOLS Tuesday, October 16, 12

description

Talk auf der Webtechcon 2012 in Mainz über Qualitätssicherung in JavaScript

Transcript of JavaScript QA Tools

Page 1: JavaScript QA Tools

JAVASCRIPT-QA-TOOLS

Tuesday, October 16, 12

Page 2: JavaScript QA Tools

Tuesday, October 16, 12

Page 3: JavaScript QA Tools

WER BIN ICH?

• Sebastian Springer

• 29

•Dipl. Inf. (FH)

• Teamleiter @ Mayflower

Tuesday, October 16, 12

Page 4: JavaScript QA Tools

WAS ERZÄHLE ICH HEUTE?

•Was bringt mir eine hohe Qualität überhaupt?

•Welche Tools kann ich nutzen?

•Wie kann ich die QA automatisieren?

Tuesday, October 16, 12

Page 5: JavaScript QA Tools

LET’S GO

Tuesday, October 16, 12

Page 6: JavaScript QA Tools

WARUM QUALITÄTSSICHERUNG?

Tuesday, October 16, 12

Page 7: JavaScript QA Tools

JAVASCRIPT === QUICK & DIRTY

Tuesday, October 16, 12

Page 8: JavaScript QA Tools

JAVASCRIPT === QUICK & DIRTY

• Leichtgewichtig

• Schnelle Ergebnisse

•Direkt in HTML eingebettet

• (Fast) überall verfügbar

Tuesday, October 16, 12

Page 9: JavaScript QA Tools

JAVASCRIPT === QUICK & DIRTY

langfristig

Tuesday, October 16, 12

Page 10: JavaScript QA Tools

UND WAS IST JETZT QUALITÄT?

Tuesday, October 16, 12

Page 11: JavaScript QA Tools

WAS IST QUALITÄT?

• Reliability

• Efficiency

• Security

•Maintainability

• Size

Tuesday, October 16, 12

Page 12: JavaScript QA Tools

8Qualitätssicherung als

kontinuierlicher Prozess

Tuesday, October 16, 12

Page 13: JavaScript QA Tools

Continuous Inspection

Tuesday, October 16, 12

Page 14: JavaScript QA Tools

Continuous Integration

Tuesday, October 16, 12

Page 15: JavaScript QA Tools

QA IM KLEINEN - DIE IDE

Tuesday, October 16, 12

Page 16: JavaScript QA Tools

IDE - EINSTELLUNGEN

Tuesday, October 16, 12

Page 17: JavaScript QA Tools

QA IM GROßEN - JENKINS

Tuesday, October 16, 12

Page 18: JavaScript QA Tools

JENKINS - KONFIGURATION

• Build Targets mit Apache Ant

• Build.xml

• Build Steps

• Visualisierung über Plugins

Tuesday, October 16, 12

Page 19: JavaScript QA Tools

JENKINS KONFIGURATION

Tuesday, October 16, 12

Page 20: JavaScript QA Tools

JENKINS - KONFIGURATION

• Projektkonfiguration/var/lib/jenkins/jobs/<Projekt>/config.xml

•Ant-Konfiguration/var/lib/jenkins/jobs/<Projekt>/workspace/build.xml

Tuesday, October 16, 12

Page 21: JavaScript QA Tools

UND WOZU DAS GANZE?

Tuesday, October 16, 12

Page 22: JavaScript QA Tools

Schnelle Rückmeldung

Tuesday, October 16, 12

Page 23: JavaScript QA Tools

BEISPIEL: DATE CALC

Tuesday, October 16, 12

Page 24: JavaScript QA Tools

BEISPIEL: DATE CALC

Tuesday, October 16, 12

Page 25: JavaScript QA Tools

BEISPIEL: DATE CALCDatum eingeben

Tuesday, October 16, 12

Page 26: JavaScript QA Tools

BEISPIEL: DATE CALCOfffset eingeben

Tuesday, October 16, 12

Page 27: JavaScript QA Tools

BEISPIEL: DATE CALC

Datum berechnen lassen

Tuesday, October 16, 12

Page 28: JavaScript QA Tools

BEISPIEL: DATE CALC

Feiertage beachten!

Tuesday, October 16, 12

Page 29: JavaScript QA Tools

CODE-ANFORDERUNGEN

• JSLinted

• Kein Copy/Paste Code

• Unittests

• Akzeptanztests

Tuesday, October 16, 12

Page 30: JavaScript QA Tools

WIE?

Tuesday, October 16, 12

Page 31: JavaScript QA Tools

Toolunterstützung &Automatisierung

Tuesday, October 16, 12

Page 32: JavaScript QA Tools

CODE-ANFORDERUNGEN

• JSLinted

• Kein Copy/Paste Code

• Unittests

• Akzeptanztests

Tuesday, October 16, 12

Page 33: JavaScript QA Tools

JSLINT

Tuesday, October 16, 12

Page 34: JavaScript QA Tools

JSLINT?ANYONE?

Tuesday, October 16, 12

Page 35: JavaScript QA Tools

IT WILL HURT YOUR FEELINGS

Tuesday, October 16, 12

Page 36: JavaScript QA Tools

WAS TUT JSLINT?• Codingstyle - Whitespaces

• == und != vs. === und !==

• Variablendeklaration zu Beginn einer Funktion

• “use strict”

• Keine Globale Variablen

•Definition vor Verwendung

• eval is EVIL

Tuesday, October 16, 12

Page 37: JavaScript QA Tools

JSLINT IN DER IDE

Tuesday, October 16, 12

Page 38: JavaScript QA Tools

JSLINT IN JENKINS

<target name="jslint"> <apply executable="java" output="${basedir}/build/ jslint/jslint.xml"> <arg value="-jar" /> <arg value="/opt/jslint4java/jslint4java.jar" /> <arg value="--report" /> <arg value="xml" /> <fileset dir="${basedir}/source"> <patternset> <include name="**/*.js" /> </patternset> </fileset> </apply></target>

Tuesday, October 16, 12

Page 39: JavaScript QA Tools

JSLINT IN JENKINS

• Plugin: Violations Plugin

• Post-build action: Report Violations

Tuesday, October 16, 12

Page 40: JavaScript QA Tools

CODE-ANFORDERUNGEN

• JSLinted

• Kein Copy/Paste Code

• Unittests

• Akzeptanztests

Tuesday, October 16, 12

Page 41: JavaScript QA Tools

COPY AND PASTE DETECTION

Tuesday, October 16, 12

Page 42: JavaScript QA Tools

WAS MACHT CPD?

•Duplikate im Quellcode finden

• Tokens statt Strings

Tuesday, October 16, 12

Page 43: JavaScript QA Tools

WARUM CPD?

• Verbesserungen an mehreren Stellen

• Bugfixes an mehreren Stellen

Tuesday, October 16, 12

Page 44: JavaScript QA Tools

WARUM CPD?

• Verbesserungen an mehreren Stellen

• Bugfixes an mehreren Stellen

= erhöhter Wartungsaufwand

Tuesday, October 16, 12

Page 45: JavaScript QA Tools

CPD IN DER IDE

Tuesday, October 16, 12

Page 46: JavaScript QA Tools

CPD IN DER IDE

Tuesday, October 16, 12

Page 47: JavaScript QA Tools

CPD IN JENKINS<target name="jscpd"> <exec executable="/opt/PMD/pmd-bin-5.0.0/bin/run.sh"> <arg value="cpd" /> <arg value="--minimum-tokens" /> <arg value="5" /> <arg value="--files" /> <arg value="source" /> <arg value="--language" /> <arg value="ecmascript" /> <arg value="--format" /> <arg value="xmls" /> <arg value="build/jscpd/jscpd.xml" /> </exec></target>

Tuesday, October 16, 12

Page 48: JavaScript QA Tools

CPD IN JENKINS

• Plugin: Duplicate Code Scanner Plug-in

• Post-build action: Publish duplicate code analysis results

Tuesday, October 16, 12

Page 49: JavaScript QA Tools

CPD IN JENKINS

• Plugin: Violations Plugin

• Post-build action: Report Violations

Tuesday, October 16, 12

Page 50: JavaScript QA Tools

CODE-ANFORDERUNGEN

• JSLinted

• Kein Copy/Paste Code

• Unittests

• Akzeptanztests

Tuesday, October 16, 12

Page 51: JavaScript QA Tools

UNITTESTS

Tuesday, October 16, 12

Page 52: JavaScript QA Tools

WARUM UNITTESTS?

• Stabilität

• Sicherheit für Developer

•Dokumentation

• Pro Bug ein Test

Tuesday, October 16, 12

Page 53: JavaScript QA Tools

JASMINE

describe("DateCalc", function () { it("should return...", function () { var dateCalc = new DateCalc(), result = dateCalc.resolveDate(); expect(result).toBeFalsy(); });});

Tuesday, October 16, 12

Page 54: JavaScript QA Tools

JSTESTDRIVER

• Testing Framework

• Browser Capturing

• Coverage

• Plugins für andere Frameworks (qUnit, Jasmine, etc.)

Tuesday, October 16, 12

Page 55: JavaScript QA Tools

JASMINE IN JENKINS

java -jar JsTestDriver.jar --port 9876

Tuesday, October 16, 12

Page 56: JavaScript QA Tools

JASMINE IN JENKINS<target name="jasmine"><exec executable="java">

<arg value="-jar" /> <arg value="/opt/jstestdriver/JsTestDriver-1.3.5.jar" /> <arg value="--config" /> <arg value="${basedir}/source/DateCalcJenkins.jstd" /> <arg value="--tests" /> <arg value="all" /> <arg value="--testOutput" /> <arg value="${basedir}/build/jstestdriver" /></exec>

</target>

Tuesday, October 16, 12

Page 57: JavaScript QA Tools

JASMINE IN JENKINS

• Plugin: xUnit Plugin

• Post-build action: Publish xUnit test result report

Tuesday, October 16, 12

Page 58: JavaScript QA Tools

COVERAGE

• Voraussetzung #1: JsTestDriver Coverage Plugin

• Voraussetzung #2: Lcov to Cobertura Converter

Tuesday, October 16, 12

Page 59: JavaScript QA Tools

COVERAGE

<target name="coverage"> <exec executable="/opt/jstestdriver/lcov_cobertura.py"> <arg value="${basedir}/build/jstestdriver/

jsTestDriver.conf-coverage.dat" /> <arg value="-o" /> <arg value="${basedir}/build/jstestdriver/coverage.xml" /> </exec></target>

Tuesday, October 16, 12

Page 60: JavaScript QA Tools

COVERAGE

• Plugin: Cobertura Plugin

• Post-build action: Publish Cobertura Coverage Report

Tuesday, October 16, 12

Page 61: JavaScript QA Tools

CONFIG.JSTDserver: 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"

Tuesday, October 16, 12

Page 62: JavaScript QA Tools

JASMINE IN DER IDE

Tuesday, October 16, 12

Page 63: JavaScript QA Tools

JASMINE IN DER IDE

Tuesday, October 16, 12

Page 64: JavaScript QA Tools

JASMINE IN DER IDE

Tuesday, October 16, 12

Page 65: JavaScript QA Tools

CODE-ANFORDERUNGEN

• JSLinted

• Kein Copy/Paste Code

• Unittests

• Akzeptanztests

Tuesday, October 16, 12

Page 66: JavaScript QA Tools

AKZEPTANZTESTS

Tuesday, October 16, 12

Page 67: JavaScript QA Tools

WARUM AKZEPTANZTESTS?

• Tests gegen Akzeptanzkriterien

• Anforderungen vs. Umsetzung

•Nicht von Entwicklern

Tuesday, October 16, 12

Page 68: JavaScript QA Tools

SELENIUM IDE

Tuesday, October 16, 12

Page 69: JavaScript QA Tools

SELENIUM IN JENKINS<target name=”selenium”> <exec executable=”java” output=”${basedir}/build/selenium/results.html> <arg value=”-jar” /> <arg value=”/opt/selenium/selenium-server.jar” /> <arg value=”-htmlSuite” /> <arg value=”*firefox” /> <arg value=”http://datecalc.basti.dev” /> <arg value=”/srv/www/vhosts/datecalc/tests/suite.html” /> </exec></target>

Tuesday, October 16, 12

Page 70: JavaScript QA Tools

SELENIUM IN JENKINS

• Plugin: Selenium HTML report Plugin

• Post-build action: Publish Selenium HTML Report

Tuesday, October 16, 12

Page 71: JavaScript QA Tools

CHUCK NORRIS PLUGIN

Tuesday, October 16, 12

Page 72: JavaScript QA Tools

FRAGEN?

Tuesday, October 16, 12

Page 73: JavaScript QA Tools

KONTAKT

Sebastian [email protected]

Mayflower GmbHMannhardtstr. 680538 MünchenDeutschland

@basti_springer

https://github.com/sspringer82

Tuesday, October 16, 12