in reply to Automated Path Coverage Test Case Generation

One way to approach this would be to ascertain what coverage you currently have and then keep writing tests until you have satisfactory coverage. Devel::Cover can help with this. For example, here are the first few lines of a table that lists the sort of coverage you would get:

File stmt branch cond sub pod time total
/dp/usr/cxp/code/util_src/rtk_test/web_test 81.2 36.7 43.5 80.0 n/a 54.8 60.4
/home/cxp/code/th_web_tests/perl_lib/Aliased.pm 44.4 50.0 n/a 12.5 n/a 0.4 34.0
/home/cxp/code/th_web_tests/perl_lib/RTK/Class/MethodMaker.pm 73.7 72.7 n/a 55.6 n/a 1.5 71.6

I've left in the hyperlinks, but I changed them so that they don't actually go anywhere. Were you to actually generate such a report, those hyperlinks would go down into line-by-line detail pages that show you exactly what is and is not getting covered. You'll even find truth tables that show you which conditions of a logical expression are getting used!

By reading through Devel::Cover::Tutorial, you can learn what those headings mean. Generating such a report is easy. Here's how I did it:

perl -MDevel::Cover /usr/local/bin/web_test -d -h # wait a while for the tests to finish cover cover_db -report html

I number at the far right is a loose estimate of the percentage of code coverage. It's also fair to note that there are a few bugs in this code (it's alpha code, after all). That report came up fine the first time that I ran it. The second time, I found that the index file had been named .html, making it invisible with a standard ls. I had to rename it to index.html and copy it to the cover_db/ directory to get it to work properly.

Despite a few bugs, it's very easy to work with and can give you a nice idea of how complete your coverage is. Since the html is generated through Template Toolkit, you might even be able to auto-generate a few tests with this ...

Cheers,
Ovid

New address of my CGI Course.

Replies are listed 'Best First'.
Re: Re: Automated Path Coverage Test Case Generation
by ChrisS (Monk) on Oct 06, 2003 at 14:00 UTC
    Just for clarification, this solution really only fits Perl, right? Or, would there be some clever way to use this idea to generate tests for other languages, too?

    Either way, at least this could give me a headstart on Perl. Thanks!

      Yes, this is a "Perl only" solution. It's intimately tied to the internals of Perl. I don't know what's available for the other languages. If you find out, posting the answer here would be great (though probably as a reply to this thread since that would be such an OT root node that some monks might not like that :)

      Cheers,
      Ovid

      New address of my CGI Course.