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

110
Towards Tooling what is missing from our toolbox? Loren Segal @lsegal Friday, November 8, 13

description

You can usually judge the maturity of a programming language ecosystem by the breadth of its tooling. For example, Java has a plethora of IDEs that each, in turn, have many well maintained refactoring and code quality plugins (like FindBugs and PMD). C/C++ is equally well established in this space. Even JavaScript is becoming well represented, with a number of static code analyzers and language supersets (like Dart and TypeScript) aimed at improving tooling in the language. But where is Ruby in all of this? This talk will shed some light on the existing tools available in the Ruby world as well as some new tools just starting to be built out in the areas of static analysis, formal verification, and code quality checking. We will look at what kind of tools the Ruby community is good at building, what kind of tools we are bad at, and most of all, some of the tooling we should be working on to really improve our ecosystem and drive more developers to this wonderful language.

Transcript of Towards Tooling; A Look at What is Missing From the Ruby Toolbox

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