Tuesday, July 8, 2008

PEX - Automated Exploratory Program Testing

One of the prodcuts that is being reserched at Microsoft is PEX (program exploration).The team released a 0.5 version product last month and you can download it here.So what is PEX anyway, what does it try to solve?, Remeber how you wrote a method with "amazing" logic and you also wrote nice test cases to test this function, if the function is not very complex and have only a few paths it can take, you would end up with maybe a test case or two and some set of input data.But if your function is very complex and has a complex , you have to go through each and every path the program would take and generate you test data (and not to metion the test cases).
What PEX does is, it "scans" your program (the method you want to test) and comes with a set of test data for each and every path. Lets take an example.

[TestMethod] // mark this as a test case
[PexMethod] //PEX attribute
public void TestMethod1(int i, int y)
GetNumber(i, y);

//The method you want to test
private int GetNumber(int i, int y)
int j = i / y;
if (j > 0)

return 0;
return 1;

The example is explantory (I have used MS Test), but with a few exceptions that the test case is now parameterized, to take in the parameters needed by the function that is being tested. And also you can see that a [PexMethod] attribute is added on top of the test case for PEX to recognize the test case.

You can see, that PEX created data for all possible paths of the function. Running PEX on your methods would also ensure that you delt with the most unexpected inputs as well, for an example an exception that might turn out for a value that the user passed into method that you never thought about in your test cases, making your program stable (in this example a DivideByZeroException, and if we had more paths our function could have taken, PEX would generate more test cases).

PEX work with .NET 2.0 and higher, there is also a VS 2008 add-in that you can use. Currently PEX is supports MS TEST, but they are planning to write extensions for other test tools as well.

A cool thing about PEX, is that it creates code for each and every test case it creates, so that also means that you can debug the generated test cases.

No comments:

Post a Comment