Download - Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Transcript
Page 1: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Towards Toolingwhat is missing

from our toolbox?Loren Segal

@lsegal

Friday, November 8, 13

Page 2: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Are Rubyists good at testing because they

have good tools?Friday, November 8, 13

Page 3: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Do Rubyists have good tools

because they are good at testing?

Friday, November 8, 13

Page 4: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Do Rubyists have good tools

because they are good at testing?

Friday, November 8, 13

Page 5: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Friday, November 8, 13

Page 6: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Tools are important

Friday, November 8, 13

Page 7: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

We have good tools

Friday, November 8, 13

Page 8: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

...sometimes.

Friday, November 8, 13

Page 9: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

This talk is about the

not-so-good tools

Friday, November 8, 13

Page 10: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

GoalsFriday, November 8, 13

Page 11: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

1. Introduce

different toolsFriday, November 8, 13

Page 12: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

2. Find out which

tools we are missing

Friday, November 8, 13

Page 13: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

3. Write these

tools plz thx!Be a garbage collector

Friday, November 8, 13

Page 14: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Note:

GoogleTOOL NAME + LANGUAGE

You should find the tools referenced in this talk

Friday, November 8, 13

Page 15: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Kinds of Tools

Friday, November 8, 13

Page 16: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Deployment / OpsDocumentation

TestingVisualization

DebuggingLinting

Static Analysis

High Level

Low Level

Friday, November 8, 13

Page 17: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Visualization

Friday, November 8, 13

Page 18: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Some ofthe most

important toolsare visualization tools

Friday, November 8, 13

Page 19: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Know what your code

is doingFriday, November 8, 13

Page 20: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Thread in a sealed box.Is it dead or alive?

Friday, November 8, 13

Page 21: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Visual Studio

Friday, November 8, 13

Page 22: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Visual Studio

Friday, November 8, 13

Page 23: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

XCode

Friday, November 8, 13

Page 24: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

VisualVM

Friday, November 8, 13

Page 25: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Discoverability

Friday, November 8, 13

Page 26: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Call references

Implementors ECLIPSE

Friday, November 8, 13

Page 27: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Not just IDEs

Friday, November 8, 13

Page 28: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

I’ll prove it...

Friday, November 8, 13

Page 29: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Firebug

Friday, November 8, 13

Page 30: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Do you remember web development before Firebug?

Friday, November 8, 13

Page 31: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Before: no visibility.

Friday, November 8, 13

Page 32: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Ember Inspector

Friday, November 8, 13

Page 33: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

SmalltalkFriday, November 8, 13

Page 34: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Friday, November 8, 13

Page 35: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

InherentlyVisual

Friday, November 8, 13

Page 36: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Where isRuby viz?

Friday, November 8, 13

Page 37: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

RubyMine

Friday, November 8, 13

Page 38: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Profilers?Friday, November 8, 13

Page 39: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

memprofJoe Damato

github/ice799/memprofFriday, November 8, 13

Page 40: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

perftools.rb

Friday, November 8, 13

Page 41: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

NetBeans / JRuby

Friday, November 8, 13

Page 42: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Use theJVM

Friday, November 8, 13

Page 43: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Lintng��

Friday, November 8, 13

Page 44: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Lintdivide by zero: checkinitialized vars: check

...style: check (last!)

Friday, November 8, 13

Page 45: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Ruby?

Friday, November 8, 13

Page 46: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Reek/Flog/FlayDoes: detect code smellsDoes not: find common errors

Friday, November 8, 13

Page 47: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Assumption:Pretty code iscorrect code

Friday, November 8, 13

Page 48: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Friday, November 8, 13

Page 49: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Ugly.Not “correct”.

Friday, November 8, 13

Page 50: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

github.com/lsegal/my_fake_project

Friday, November 8, 13

Page 51: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

PS. I ♡Code

ClimateFriday, November 8, 13

Page 52: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Understandyour tools

Friday, November 8, 13

Page 53: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Code Climate does not replace testing

Friday, November 8, 13

Page 54: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

ruby-lintYorick Peterse

but it’s newFriday, November 8, 13

Page 55: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Nothing comes

standardFriday, November 8, 13

Page 56: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Other languages?

Friday, November 8, 13

Page 57: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

JSHint (JavaScript)pylint (Python)

FindBugs (Java)FxCop (C#)

Friday, November 8, 13

Page 58: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Widely used.

Friday, November 8, 13

Page 59: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Why notRuby?

Friday, November 8, 13

Page 60: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Friday, November 8, 13

Page 61: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

StaticAnalysis

lint++Friday, November 8, 13

Page 62: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

is ahuge field

Friday, November 8, 13

Page 63: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Friday, November 8, 13

Page 64: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Types of “static analysis”- Defect Finding

- Memory Checking / Fuzz Testing

- Extended Static Checking

- Model Checking / Data Flow Analysis

- Symbolic ExecutionFriday, November 8, 13

Page 65: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Defect Finding

Friday, November 8, 13

Page 66: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

is basically lint,

Friday, November 8, 13

Page 67: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

but with less emphasis on syntax.

Friday, November 8, 13

Page 68: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

The Usual Suspects

Friday, November 8, 13

Page 69: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

BrakemanJustin Collins

brakemanscanner.org(Ruby on Rails)

Friday, November 8, 13

Page 70: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Finds common flawsin Rails code

XSS, SQL injection, mass assignment

Friday, November 8, 13

Page 71: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Friday, November 8, 13

Page 72: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Static detection of security vulnerabilitiesin scripting languages

https://www.usenix.org/legacy/event/sec06/tech/full_papers/xie/xie_html/

Friday, November 8, 13

Page 73: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Fuzz Testing

Friday, November 8, 13

Page 74: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

garbage in...

Friday, November 8, 13

Page 75: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Lots of tools.

C, Java, JS, Python, etc.

Friday, November 8, 13

Page 76: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Lots of papers.

Friday, November 8, 13

Page 78: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

What about us?

Friday, November 8, 13

Page 79: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

HeckleRyan Davis, Kevin Clark

Friday, November 8, 13

Page 80: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Friday, November 8, 13

Page 81: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

MutantMarkus Schirp

github/mbj/mutantFriday, November 8, 13

Page 82: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

We could use a real fuzz testing tool.

Friday, November 8, 13

Page 83: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

FuzzBert?Martin Bosslet

github/krypt/FuzzBertFriday, November 8, 13

Page 84: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

lots of papers out therewith algorithms to implement

Friday, November 8, 13

Page 85: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

LET’S GET

Friday, November 8, 13

Page 86: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Symbolic Execution

Friday, November 8, 13

Page 87: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Run your codewith no immediate values

Friday, November 8, 13

Page 88: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Similar to Extended Static Checking

but...

Friday, November 8, 13

Page 89: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Contracts not required

and

Can tell you which inputs generated valid or invalid state

Friday, November 8, 13

Page 90: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Think:

Automatic Test Case Generation

Friday, November 8, 13

Page 91: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

// @example pow(2, 8) == 256 int pow(int x, int n) { int v[32] = {x}, result = 0; for (int i = 1; i < n; i++) { v[i] = x * v[i-1]; } return v[n-1]; }

Friday, November 8, 13

Page 92: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

SymExe report:

x=1,n=5,result=1x=2,n=8,result=256x=1,n=0,error: array out of bounds ← x=1,n=33,error: array out of bounds ←

Friday, November 8, 13

Page 93: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

// @example pow(2, 8) == 256 // @requires n > 0 // @requires n < 32 int pow(int x, int n) { int v[32] = {x}, result = 0; for (int i = 1; i < n; i++) { v[i] = x * v[i-1]; } return v[n-1]; }

Friday, November 8, 13

Page 94: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Tools?

Friday, November 8, 13

Page 95: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

KLEE (LLVM)Kudzu (JavaScript)

Kiasan (Java, SPARK)

Friday, November 8, 13

Page 96: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Nothing for Ruby*

(*) “Automatic Program Verification and Test Case Generation of Ruby Programs”

Friday, November 8, 13

Page 97: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Ruby doesn’t really have a scientific community.

Friday, November 8, 13

Page 98: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Chicken and egg.

Friday, November 8, 13

Page 99: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Python vs Ruby?Big boy language?

Friday, November 8, 13

Page 100: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

RECAP

Friday, November 8, 13

Page 101: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

We are greatat testing,

deployment,web frameworks

Friday, November 8, 13

Page 102: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Not so good atvisualization,

linting,static analysis

Friday, November 8, 13

Page 103: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

We attractweb developersbecause we have good

web tools

Friday, November 8, 13

Page 104: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Could webuild toolsfor other

communities?science, engineering, math

Friday, November 8, 13

Page 105: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Take responsibility.

Friday, November 8, 13

Page 106: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Great tool ideas arewaiting to be implemented

Friday, November 8, 13

Page 107: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Tons of research papersin fields I mentioned

scholar.google.com

Friday, November 8, 13

Page 108: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

I had a whole section on my favourite research papers.

Friday, November 8, 13

Page 109: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Come find me if you want titles.

Friday, November 8, 13

Page 110: Towards Tooling; A Look at What is Missing From the Ruby Toolbox

Thank you.

Slides will be linked on Twitter@lsegal

Friday, November 8, 13