Mutation Testing

History

  • Cowboy Coding
  • Dev Server/SVN
  • ...
  • Mercurial
  • Git
  • Unit tests
  • CI
  • Code Coverage

Unit Tests

  • Pros
    • Cement ideas
    • Find bugs
    • Reduce regressions
  • Cons
    • More code
    • Test only what they test
    • Forces code to be written differently

Continuous Integration (CI)

  • Pros
    • Partially removes manual running of tests
  • Cons
    • Only tests what jobs it runs

Code Coverage

  • Pros
    • Better picture of what the unit tests are actually testing!
  • Cons
    • D: Only lines compiled w/ unit test
    • Can miss some parts of lines
      • Complex if statements
      • Statement chains

Mutation Testing

Test the Tests

  • Competent Programmer
  • Coupling Effect

Common Mutant Operators

if (a && b)
if (a || b)
  • Statement deletion
  • Statement duplication or insertion
  • Replace boolean subexpressions with true and false
  • Replace arithmetic operations with a different one
  • Replace boolean relations with others
  • Replace variables with others from the same scope

Example

private bool notUseful(const uint num1, const uint num2)
{
    if (num1 > 5 || num2 < 10)
        return true;
    else
        return false;
}

unittest
{
    assert(notUseful(6, 2));
    assert(!notUseful(4, 11));
}
//The following should be included!
assert(notUseful(2, 2));

Relevant Links

Mutation Testing

By Jonathan Crapuchettes

Mutation Testing

  • 646