RubySadism: December 2006 Archives

Three releases today:

sudo gem install -y heckle

Also coming soon: a post on how heckle beats the crap out misleading metrics like coverage.

ParseTree version 1.6.3

ParseTree is a C extension (using RubyInline) that extracts the parse tree for an entire class or a specific method and returns it as a s-expression (aka sexp) using ruby's arrays, strings, symbols, and integers.

Changes:

  • 1 bug fix:
    • ParseTree::translate was trying to translate inherited class methods.

ruby2ruby version 1.1.3

ruby2ruby provides a means of generating pure ruby code easily from ParseTree's Sexps. This makes making dynamic language processors much easier in ruby than ever before.

Changes:

  • 1 minor enhancement
    • Unit tests do self-translation and retesting for 3 generations! Solid. BAM!
  • 1 bug fixes
    • iasgn inside masgn was totally borked in ruby2ruby.

heckle version 1.1.1

Heckle is a mutation tester. It modifies your code and runs your tests to make sure they fail. The idea is that if code can be changed and your tests don't notice, either that code isn't being covered or it doesn't do anything.

Changes:

  • 3 bug fixes:
    • Load tests properly when supplying method name.
    • Make sure random symbols have at least one character.
    • Removed all extra warnings from the unit tests. Consolidated and cleaned.

Heckle version 1.1.0 has been released!

http://www.rubyforge.org/projects/seattlerb by Ryan Davis and Kevin Clark

From http://glu.ttono.us/articles/2006/12/19/tormenting-your-tests-with-heckle :

Heckle is a mutation tester. It modifies your code and runs your tests to make sure they fail. The idea is that if code can be changed and your tests don’t notice, either that code isn’t being covered or it doesn’t do anything.

It’s a little weird, I know, but I like to think about it as pen-testing. It’s like hiring a white-hat hacker to try to break into your server and making sure you detect it. You learn the most by trying to break things and watching the outcome.

Anyway, Heckle was inspired by Jester, and Ryan Davis wrote a proof of concept at RubyConf. As he notes, I went a little nuts and much of the current implementation I rewrote that night or on the plane home.

Changes:

1.1.0 / 2006-12-19

  • 12 major enhancements:
    • Able to roll back original method after processing.
    • Can mutate numeric literals.
    • Can mutate strings.
    • Can mutate a node at a time.
    • Can mutate if/unless
    • Decoupled from Test::Unit
    • Cleaner output
    • Can mutate true and false.
    • Can mutate while and until.
    • Can mutate regexes, ranges, symbols
    • Can run against entire classes
    • Command line options!

http://www.rubyforge.org/projects/seattlerb by Ryan Davis and Kevin Clark