Automatic Test Case Generation

One of my recent articles in Microsoft’s MSDN Magazine describes how to write powerful test automation for SQL stored procedures using LINQ technology ( see http://msdn.microsoft.com/en-us/magazine/cc500645.aspx ). In that article I write, “Determining expected state is the most time-consuming task when testing stored procedures. You must manually determine the expected state of your test bed […]

Continue reading


Estimating the Probability your Project will Finish on Time

I think most software developers, testers, and managers should have a basic understanding of estimating the probability that a project will finish on time (or finish behind schedule). The technique is fairly simple. First you break your project down into manageable sized chunks. At a coarse level of granularity these chunks can be milestones (typically […]

Continue reading


Software Project Risk Identification

Identifying risks is an absolutely essential activity for all software projects. A risk is an event which is unpredictable and which has negative consequences. You must identify project risks, so that you can analyze the likelihood and impact of the risks (see a nice overview at http://www.rand.org/pubs/working_papers/2004/RAND_WR112.pdf), and then plan to prevent the risks (in […]

Continue reading


Commercial Test Automation Frameworks

There are four main approaches to software test automation: commercial test frameworks, Open Source test frameworks, lightweight custom test harnesses, and heavyweight custom test harnesses. There are a huge number of commercial test automation frameworks available. Some of the larger and better known companies which sell these often very expensive programs include Mercury, Segue, Compuware, […]

Continue reading


Testing AJAX Web Applications, Part II

Because AJAX Web applications work asynchronously, testing them is tricky. The image at the bottom of this blog entry illustrates a technique which has proven to be successful in practice. A test scenario run starts by calling a program-defined function asyncCall() which lives in the test harness. Execution of function asynchCall() causes the Application under […]

Continue reading