Upload
sebastian-springer
View
546
Download
0
Embed Size (px)
Citation preview
Werkzeuge zur Qualitätssicherung in JavaScript
Tuesday 5 November 13
WER BIN ICH?
• Sebastian Springer
• https://github.com/sspringer82
• @basti_springer
Tuesday 5 November 13
JAVASCRIPT?
Tuesday 5 November 13
QUALITÄT?
Tuesday 5 November 13
Unter Softwarequalität versteht man die Gesamtheit der Merkmale und Merkmalswerte eines
Softwareprodukts, die sich auf dessen Eignung beziehen, festgelegte oder vorausgesetzte Erfordernisse zu
erfüllen.(Balzert)
Tuesday 5 November 13
DOKUMENTATION?
Tuesday 5 November 13
README.MD
Tuesday 5 November 13
API DOC
npm install -g git://github.com/jsdoc3/jsdoc.git
Tuesday 5 November 13
STATISCHE VS. DYNAMISCHE CODEANALYSE
Tuesday 5 November 13
STATISCHE CODEANALYSE
Tuesday 5 November 13
TOKENIZER?
Tuesday 5 November 13
var answer = 6 * 7;
Tuesday 5 November 13
SYNTAX{ "type": "Program", "body": [ { "type": "VariableDeclaration", "declarations": [ { "type": "VariableDeclarator", "id": { "type": "Identifier", "name": "answer" }, "init": { "type": "BinaryExpression", "operator": "*", "left": { "type": "Literal", "value": 6, "raw": "6" }, "right": { "type": "Literal", "value": 7, "raw": "7" } } } ], "kind": "var" } ]}
Tuesday 5 November 13
TOKENS[ { "type": "Keyword", "value": "var" }, { "type": "Identifier", "value": "answer" }, { "type": "Punctuator", "value": "=" }, { "type": "Numeric", "value": "6" }, { "type": "Punctuator", "value": "*" }, { "type": "Numeric", "value": "7" }, { "type": "Punctuator", "value": ";" }]
Tuesday 5 November 13
VALIDATOR VS. LINTER
Tuesday 5 November 13
Tuesday 5 November 13
by Douglas Crockford
Tuesday 5 November 13
by Douglas Crockford
Warning: JSLint will hurt your feelings
Tuesday 5 November 13
sudo npm install -g jslint
Tuesday 5 November 13
var Calculator = function () {};
Calculator.prototype.add = function(a, b) {
if('number' !== typeof a ||'number' !== typeof b) throw new Error('Can add only numbers');
return a+b;
}
Tuesday 5 November 13
#1 Missing 'use strict' statement. var Calculator = function () {}; // Line 1, Pos 31 #2 Empty block. var Calculator = function () {}; // Line 1, Pos 30 #3 Expected exactly one space between 'function' and '('. Calculator.prototype.add = function(a, b) { // Line 3, Pos 36 #4 Missing 'use strict' statement. if('number' !== typeof a ||'number' !== typeof b) // Line 5, Pos 5 #5 Expected exactly one space between 'if' and '('. if('number' !== typeof a ||'number' !== typeof b) // Line 5, Pos 7 #6 Missing space between '||' and 'number'. if('number' !== typeof a ||'number' !== typeof b) // Line 5, Pos 32 #7 Expected exactly one space between ')' and 'throw'. throw new Error('Can add only numbers'); // Line 6, Pos 9 #8 Expected '{' and instead saw 'throw'. throw new Error('Can add only numbers'); // Line 6, Pos 9 #9 Stopping. (54% scanned). // Line 6, Pos 9
Tuesday 5 November 13
sudo npm install -g esvalidate
Tuesday 5 November 13
return 42; // Return statement not inside a function
function f() { 'use strict';
// No more octal var x = 042;
// Duplicate property var y = { x: 1, x: 2 };
// With statement can't be used with (z) {}}
Tuesday 5 November 13
validate.js:1: Illegal return statementvalidate.js:7: Octal literals are not allowed in strict mode.validate.js:10: Duplicate data property in object literal not allowed in strict modevalidate.js:10: Strict mode code may not include a with statement
Tuesday 5 November 13
KOMPLEXITÄT
Tuesday 5 November 13
PLATO
Tuesday 5 November 13
Tuesday 5 November 13
LOC
Maintainability
Estimated Errors in Implementation
Lint Errors
Tuesday 5 November 13
Tuesday 5 November 13
https://sourceforge.net/projects/pmd/files/pmd/5.0.5/pmd-bin-5.0.5.zip/download
Tuesday 5 November 13
run.sh pmd -d ./pmd -rulesets ecmascript-basic
Tuesday 5 November 13
pmd/example.js:3:!Avoid assignments in operandspmd/example.js:3:!Avoid using global variablespmd/example.js:3:!Use ===/!== to compare with true/false or Numbers
Tuesday 5 November 13
AssignmentInOperand
UnreachableCode
InaccurateNumericLiteral
ConsistentReturn
ScopeForInVariable
EqualComparison
GlobalVariable AvoidTrailingComma
UseBaseWithParseInt
Tuesday 5 November 13
CPD
Tuesday 5 November 13
run.sh cpd --minimum-tokens 12 --files /path/to/src --language ecmascript --
format xml > cpd.xml
Tuesday 5 November 13
TESTS
Tuesday 5 November 13
FRAMEWORKS
Tuesday 5 November 13
FRAMEWORKSSinon.js
Tuesday 5 November 13
FRAMEWORKS
jsunit
Sinon.js
Tuesday 5 November 13
FRAMEWORKS
jsunit
doh
Sinon.js
Tuesday 5 November 13
FRAMEWORKS
jsunit
dohJS Test Driver
Sinon.js
Tuesday 5 November 13
FRAMEWORKS
jsunit
qunit
dohJS Test Driver
Sinon.js
Tuesday 5 November 13
FRAMEWORKS
jsunit
qunit
dohJasmine JS Test Driver
Sinon.js
Tuesday 5 November 13
FRAMEWORKS
jsunit
qunit
dohJasmine JS Test Driver
Sinon.js Siesta
Tuesday 5 November 13
FRAMEWORKS
jsunit
qunit
dohJasmine JS Test Driver
Sinon.js Siesta
Karma
Tuesday 5 November 13
SERVERSIDE VS. CLIENTSIDE
Tuesday 5 November 13
Tuesday 5 November 13
Tuesday 5 November 13
COVERAGE
Tuesday 5 November 13
Tuesday 5 November 13
ENTWICKLUNGSUMGEBUNG(IDE)
Tuesday 5 November 13
Tuesday 5 November 13
SERVERSIDE
https://code.google.com/p/js-test-driver/Tuesday 5 November 13
AUTOMATISIERUNG
Tuesday 5 November 13
Tuesday 5 November 13
JENKINS
Tasks per Ant ausführen
Visualisierung über Plugins
Tuesday 5 November 13
FRAGEN?
Tuesday 5 November 13
Sebastian [email protected]
Mayflower GmbHMannhardtstr. 680538 MünchenDeutschland
@basti_springer
https://github.com/sspringer82
Kontakt
Tuesday 5 November 13