Top Banner
Jarrod Overson - @jsoverson Achieving Maintainability
73

Maintainability SFJS Sept 4 2014

Jan 15, 2015

Download

Technology

Jarrod Overson

Talk given at SFJS in September 2014 on tools that can be used to increase the maintainability of javascript applications.
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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