News for hackers. Stuff that matters.
Re:Microsoft Code Digger by testbro on Wednesday May 08, 2013 @02:39PM (#5676010)
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

Re:Microsoft Code Digger by Aurel1us on Wednesday May 08, 2013 @04:46PM (#5676814)
Anyone know something similar for C/C++ or Python ?
Re:Microsoft Code Digger by judah on Wednesday May 08, 2013 @11:02PM (#5678545)
It's based on the Z3 solver, here's Z3Py: http://rise4fun.com/z3py
Re:Microsoft Code Digger by monksy on Wednesday May 08, 2013 @05:10PM (#5676973)
Or for Java.
Re:Microsoft Code Digger by grdvnl on Wednesday May 08, 2013 @09:52PM (#5678318)
Pex is based on the Daikon dynamic invariant. This document explains some results and examples in certain languages.

http://groups.csail.mit.edu/pag/daikon/download/doc/daikon.p...

Re:Microsoft Code Digger by rainforest on Thursday May 09, 2013 @06:21AM (#5679641)
Is it? I was under the impression it just uses symbolic execution rather than invariant detection.
Re:Microsoft Code Digger by grdvnl on Sunday May 19, 2013 @07:28PM (#5734879)
Your are right. I mixed up dynamic symbolic execution with invariant detection. I know there is something called DySy which does do invariant detection using dynamic symbolic execution.
Re:Microsoft Code Digger by danbruc on Friday May 10, 2013 @08:41PM (#5689312)
Pex is based on the Daikon dynamic invariant.

That's not true.

Re:Microsoft Code Digger by danbruc on Wednesday May 08, 2013 @05:15PM (#5677007)
Re:Microsoft Code Digger by earlz on Wednesday May 08, 2013 @03:41PM (#5676388)
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
Re:Microsoft Code Digger by danbruc on Wednesday May 08, 2013 @04:09PM (#5676553)
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.
Re:Microsoft Code Digger by georgefox on Wednesday May 08, 2013 @04:35PM (#5676747)
You can test it online at pex4fun.com. Here are two tests, one using a function that takes built-in types as parameters and instantiates a Thing to operate on, and a second that takes a Thing input and operates on it directly. It seems to generate interesting cases for both, but it's much more easily readable with the more basic input types, as the parameters are easily displayed in the table.

http://pex4fun.com/default.aspx?language=CSharp&code=OgP...

http://pex4fun.com/default.aspx?language=CSharp&code=_QL...

Re:Microsoft Code Digger by danbruc on Wednesday May 08, 2013 @05:00PM (#5676915)
Nice. If you use the second variant you have to click an a test case to see which arguments have been passed to the constructor of Thing. Just from the tabular view most test cases look identical.
Re:Microsoft Code Digger by romaniv on Wednesday May 08, 2013 @04:20PM (#5676648)
It would be very, very useful if only it worked with regular expressions. Or if you could run it against F# functions.
Re:Microsoft Code Digger by danbruc on Wednesday May 08, 2013 @04:47PM (#5676820)
I just tested it using Pex for fun and - to my surprise - Pex was able to deal with regular expression and this AFAIK without any build-in knowledge of regular expressions.

  using System;
  using System.Text.RegularExpressions;

  public class Program
  {
    public static String Puzzle(String input)
    {
      if (new Regex("123(foo|bar){3}456[0-9]{5}789").IsMatch(input))
      {
        throw new ArgumentException();
      }
      else
      {
        return input;
      }
    }
  }
Pex reported three test cases.

  null                         ArgumentNullException
  ""                           okay
  "123foobarbar45600000789bb"  ArgumentException
Try this example yourself.

http://www.pexforfun.com/default.aspx?language=CSharp&co...

UPDATE: I was wrong - Rex was integrated into Pex in 2010 and this made Pex much smarter when it has to deal with regular expressions.

Re:Microsoft Code Digger by porges on Wednesday May 08, 2013 @04:35PM (#5676752)
Rex is the equivalent of Pex (which is what this is based upon) for regular expressions: http://research.microsoft.com/en-us/projects/rex/
Re:Microsoft Code Digger by SanjayUttam on Wednesday May 08, 2013 @09:12PM (#5678206)
And more useful still if this worked on more than just portable class libraries [like the "original" Pex]
Re:Microsoft Code Digger by nickbarnwell on Wednesday May 08, 2013 @03:11PM (#5676207)
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#?

Re:Microsoft Code Digger by danbruc on Wednesday May 08, 2013 @03:48PM (#5676430)
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/

Re:Microsoft Code Digger by 0x0 on Thursday May 09, 2013 @01:16AM (#5678951)
The pexforfun thing seemed pretty clever:

  // What values of v and i can cause an exception? Ask Pex to find out!
  public static void Puzzle(int[] v, int i)
  {
    if (v[i + 2] + 5 == v.Length + i)
      throw new Exception("hidden bug!"); 
  }
and then it automatically finds the breaking input:

  {-6} 	 -2 	 Exception 	 hidden bug!
Re:Microsoft Code Digger by porges on Wednesday May 08, 2013 @04:34PM (#5676745)
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.
Re:Microsoft Code Digger by suyash on Thursday May 09, 2013 @01:51AM (#5679018)
Anything similar for JavaScript?
Re:Microsoft Code Digger by Yuioup on Wednesday May 08, 2013 @07:34PM (#5677800)
I've noticed here and on reddit that Microsoft stories don't get much attention. Rightly so?