Maintainability SFJS Sept 4 2014

73
Jarrod Overson - @jsoverson Achieving Maintainability

description

Talk given at SFJS in September 2014 on tools that can be used to increase the maintainability of javascript applications.

Transcript of Maintainability SFJS Sept 4 2014

Page 1: Maintainability SFJS Sept 4 2014

Jarrod Overson - @jsoverson

AchievingMaintainability

Page 2: Maintainability SFJS Sept 4 2014

a . k . a .

Page 3: Maintainability SFJS Sept 4 2014

Idiot proofing your code

Page 4: Maintainability SFJS Sept 4 2014
Page 5: Maintainability SFJS Sept 4 2014
Page 6: Maintainability SFJS Sept 4 2014

( psst, we’re all idiots )

Page 7: Maintainability SFJS Sept 4 2014

We do stuff like…

❯ pi 3.141592653589793

❯ pi(2) 6.283185307179586

Page 8: Maintainability SFJS Sept 4 2014

Or…

❯ 4..days 345600000

❯ 60..seconds 60000

Page 9: Maintainability SFJS Sept 4 2014

And even…

<script src="#"></script>

Page 10: Maintainability SFJS Sept 4 2014

What was clever six months agoclever

Page 11: Maintainability SFJS Sept 4 2014

Is idiotic todayidiotic

Page 12: Maintainability SFJS Sept 4 2014

We’re not awful people

Page 13: Maintainability SFJS Sept 4 2014

We’re just smart

Page 14: Maintainability SFJS Sept 4 2014

We’re just lazysmart

Page 15: Maintainability SFJS Sept 4 2014

We’re justlazysmart

bored

Page 16: Maintainability SFJS Sept 4 2014

We’re just

lazysmart

boredevil

Page 17: Maintainability SFJS Sept 4 2014

We’re just doing our job

Page 18: Maintainability SFJS Sept 4 2014

And our job is hard

Page 19: Maintainability SFJS Sept 4 2014

How do we get better at it?

Page 20: Maintainability SFJS Sept 4 2014

EXAMINE1

2

3

Page 21: Maintainability SFJS Sept 4 2014
Page 22: Maintainability SFJS Sept 4 2014

How much analysis do you run on your code?

Page 23: Maintainability SFJS Sept 4 2014

It’s not enough.

Page 24: Maintainability SFJS Sept 4 2014

KNOW YOUR LINTERS

JSHINT

ESLINT

JSCS

Community-driven JSLint fork. High configurability.

JSHint alternative. High configurability.

Code style checker. Separate and complementary.

WHAT ABOUT JSLINT AND CLOSURE LINTER?

Page 25: Maintainability SFJS Sept 4 2014

KNOW YOUR LINTER’S OPTIONS

Page 26: Maintainability SFJS Sept 4 2014

"maxparams" : 4 "maxdepth" : 4 "maxstatements" : 20 "maxlen" : 100 "maxcomplexity" : 7

SET LIMITS

Page 27: Maintainability SFJS Sept 4 2014

WHAT IS CYCLOMATIC COMPLEXITY?

Page 28: Maintainability SFJS Sept 4 2014

CYCLOMATIC COMPLEXITY IS THE NUMBER OF PATHS

THROUGH YOUR CODE

TECHNICALLY

Page 29: Maintainability SFJS Sept 4 2014

CYCLOMATIC COMPLEXITY IS HOW HARD

YOUR CODE IS TO TEST

PRACTICALLY

Page 30: Maintainability SFJS Sept 4 2014

!function main(a) { !}

COMPLEXITY : 1

Page 31: Maintainability SFJS Sept 4 2014

function main(a) { if (a > 5) { } }

COMPLEXITY : 2

Page 32: Maintainability SFJS Sept 4 2014

function main(a) { if (a > 5) { ! } else { ! } }

COMPLEXITY : ?

Page 33: Maintainability SFJS Sept 4 2014

function main(a) { if (a > 10) { ! } else if(a > 5) { ! } }

COMPLEXITY : 3

Page 34: Maintainability SFJS Sept 4 2014

function main(a) { if (a > 5) { if (a > 10) { ! } } }

COMPLEXITY : 3

Page 35: Maintainability SFJS Sept 4 2014

function main(a) { if (a) { } else if (a) { } ! if (other) { } ! for (var i = 0; i < a; i++) { if (i % 2) { } else if (i % 3) { } } }

COMPLEXITY : 7

Page 36: Maintainability SFJS Sept 4 2014

GENERATE VISUAL REPORTS

Page 37: Maintainability SFJS Sept 4 2014
Page 38: Maintainability SFJS Sept 4 2014
Page 39: Maintainability SFJS Sept 4 2014

code coverageistanbul

jscoverblanket

Page 40: Maintainability SFJS Sept 4 2014
Page 41: Maintainability SFJS Sept 4 2014

platocomplexity

maintainabilitylint errors

Page 42: Maintainability SFJS Sept 4 2014

MAINTAINABILITY?fn(averageEffort, averageComplexity, averageLines);

fn(difficulty, volume)fn(length, vocabulary)

fn(uniqueOperators, totalOperands, uniqueOperands)

fn(uniqueOperators, uniqueOperands)

fn(totalOperators, totalOperands)

Page 43: Maintainability SFJS Sept 4 2014

doc coveragethis

existdoesn’t

Page 44: Maintainability SFJS Sept 4 2014

AUTOMATE2

3

1

Page 45: Maintainability SFJS Sept 4 2014
Page 46: Maintainability SFJS Sept 4 2014

IF IT’S NOT EASYIt won’t get done.

Page 47: Maintainability SFJS Sept 4 2014

IF IT’S NOT AUTOMATICIt won’t get done every time.

Page 48: Maintainability SFJS Sept 4 2014

IF IT’S NOT VISIBLEIt may as well not be done at all.

Page 49: Maintainability SFJS Sept 4 2014

Build firstBefore you write code, set up your build

Page 50: Maintainability SFJS Sept 4 2014

But I don’t wanna!

Page 51: Maintainability SFJS Sept 4 2014

Look into yeomanManages file copies, conflicts, prompts, defaults

Page 52: Maintainability SFJS Sept 4 2014

But I don’t want to learn Yeoman!

Page 53: Maintainability SFJS Sept 4 2014

$ npm install yo generator-generator !$ mkdir generator-myWorkflow !$ cd generator-myWorkflow !$ yo generator

Page 54: Maintainability SFJS Sept 4 2014
Page 55: Maintainability SFJS Sept 4 2014

But I don’t need all that!

Page 56: Maintainability SFJS Sept 4 2014
Page 57: Maintainability SFJS Sept 4 2014

Delete, add, and modify It’s surprisingly easy.

Page 58: Maintainability SFJS Sept 4 2014

Grunt vs Gulpit doesn’t matter, just choose one.

Page 59: Maintainability SFJS Sept 4 2014

What about…• MAKE • RAKE • JAKE • ANT • BROCCOLI • blahhhh…

Page 60: Maintainability SFJS Sept 4 2014

It doesn’t matter.Just choose one.

( but be ready to support it )

Page 61: Maintainability SFJS Sept 4 2014

Want code coverage?grunt-contrib-jasminegrunt-mocha-istanbulgrunt-jscoverageand 30 more

Page 62: Maintainability SFJS Sept 4 2014

Want linting?grunt-contrib-jshintgrunt-eslintgrunt-jscs-checkerand 50 more

Page 63: Maintainability SFJS Sept 4 2014

Want docs?grunt-contrib-yuidocgrunt-jsdocgrunt-doccoand 90+ more

Page 64: Maintainability SFJS Sept 4 2014

There’s no excusefor manual process

Page 65: Maintainability SFJS Sept 4 2014

PROTECT3

1

2

Page 66: Maintainability SFJS Sept 4 2014
Page 67: Maintainability SFJS Sept 4 2014

‣ Code style ‣ Metrics ‣ Build tools ‣ Data formats ‣ Naming conventions ‣ Curly Braces ‣ Directory structure ‣ Everything

ENFORCE‣ Automate Everything

‣ VCS hooks ‣ CI ‣ Code reviews ‣ Reports ‣ Everything

‣ Warnings === errors ‣ Make it hard to be

wrong

DOCUMENT‣ Treat docs as code ‣ Make it

‣ easy to find ‣ easy to read ‣ easy to update ‣ easy to discuss

‣ Use github!

AGREE

GET EVERYONE TOGETHER

Page 68: Maintainability SFJS Sept 4 2014

Your automation choice needs to accommodate enforcement

Page 69: Maintainability SFJS Sept 4 2014
Page 70: Maintainability SFJS Sept 4 2014
Page 71: Maintainability SFJS Sept 4 2014

Recap

your analysis

your enforcement

your everything

Automate

Automate

Automate

Page 72: Maintainability SFJS Sept 4 2014

Interested in why a security hardware startup attracted so many JavaScript developers? Come talk to us!

esprima

venus

plato

grunt-contrib

Page 73: Maintainability SFJS Sept 4 2014

Jarrod Overson - @jsoverson

AchievingMaintainability