top | item 5675723

Microsoft Code Digger

137 points| scottcha | 13 years ago |channel9.msdn.com | reply

23 comments

order
[+] testbro|13 years ago|reply
A similar tool exists for Java, although it doesn't rely on symbolic execution (but IIRC it is able to use it for integer constraints) but evolutionary test data generation [1]. There's a plugin for Eclipse too.

[1] : http://www.evosuite.org

[+] earlz|13 years ago|reply
I tried it. Doesn't usually work all that well though, and basically only works on built in .Net types. If you pass in your own object containing only .Net types, it's not smart enough to fill those in with potential test data. Interesting idea, but I found it completely worthless
[+] danbruc|13 years ago|reply
I can not test it at the moment but you may have to do the object creation inside a wrapper method.

  public static void TestWrapper(String foo, Int32 bar, Boolean buzz, Decimal foobar)
  {
     var thing = new Thing(foo, bar);

     thing.Buzz = buzz;

     Test(thing, blah);
  }

  public static Test(Thing thing, Decimal foobar)
  {
     thing.DoStuff();

     if (thing.State == 42)
     {
        thing.DoOtherStuff(foobar);
     }
  }
In my experience Pex yields really great results when you use it to analyze methods that are close to mathematically functions with not to many side effects and especially state mutation. Tracking changing state over time and finding sequences of operations to prepare an object to a certain state and then checking the behavior of the object in this state is much harder than analyzing a (almost) pure function.
[+] romaniv|13 years ago|reply
It would be very, very useful if only it worked with regular expressions. Or if you could run it against F# functions.
[+] nickbarnwell|13 years ago|reply
I'll prefix my question by saying I'm unfamiliar with QC beyond knowing of its existence and roughly what it does in terms of generating test values:

Am I misunderstanding, or is this akin to QuickCheck for C#?

[+] danbruc|13 years ago|reply
The QuickCheck manual states that they are randomly generating test cases [1]. This tool is build on top of Pex [2] which analyzes the byte code and uses the Z3 theorem prover [3] to systematically find inputs covering all code paths. This is really a impressive and powerful tool. You can have some fun with it at the Pex for fun site [4]. There is some secret code and you have to reimplement that code based on the test results generated by Pex comparing your implementation to the secret implementation.

[1] http://www.cse.chalmers.se/~rjmh/QuickCheck/manual.html [2] http://research.microsoft.com/en-us/projects/pex/ [3] http://research.microsoft.com/en-us/projects/z3m/ [4] http://www.pexforfun.com/

[+] porges|13 years ago|reply
It's better than QuickCheck. It performs whitebox testing - that is, it has knowledge of the code and actively uses this to generate inputs that explore all possible branches.
[+] suyash|13 years ago|reply
Anything similar for JavaScript?
[+] Yuioup|13 years ago|reply
I've noticed here and on reddit that Microsoft stories don't get much attention. Rightly so?