A little more interesting information. I ran a coverage test for the full code base. Then I did this:

[kevin]% time perl -MDevel::Cover -e 1
...
perl -MDevel::Cover -e 1  14.19s user 0.88s system 79% cpu 18.997 total

Again, perhaps there is something about Devel::Cover or about Perl that prevent it, but it seems like this ought to take pretty close to no time at all.

A little information about the database:

[kevin]% ls cover_db/structure | wc -l
    599
[kevin]% ls cover_db/runs | wc -l
     46



-kevin


On Jun 14, 2005, at 11:27 AM, Kevin Scaldeferri wrote:

It seems to me like the time Devel::Cover takes to do its book-keeping when a process terminates is linear in the total number of files in the cover_db, rather than linear in the number of files involved in that particular process.

This means that as your code base grows, the time to run unit tests with coverage will increase quadratically with the number of files (assuming the number of unit tests is also linear in the number of modules).

A little supporting evidence, without and with coverage:

~10 modules
Files=15, Tests=71, 24 wallclock secs ( 1.45 cusr + 0.76 csys = 2.21 CPU) Files=15, Tests=71, 73 wallclock secs (54.03 cusr + 3.36 csys = 57.39 CPU)


~500 modules
Files=171, Tests=9278, 216 wallclock secs (55.40 cusr + 16.78 csys = 72.18 CPU) Files=171, Tests=9278, 3344 wallclock secs (2243.59 cusr + 164.73 csys = 2408.32 CPU)

The cost in CPU seems fairly constant (about a factor of 30), but there is a huge increase in the amount of non-CPU time, presumably mostly I/O


This seems unfortunate for at least two reasons:

1) it ends up taking a really long time to run the tests. At some point, maybe long enough that nightly tests become prohibitive (even more so for continuous integration).


2) Test of tricky IPC-type stuff are hard to make reliable because processes that normally terminate in less than a second can take >10 seconds to terminate, throwing off heuristics like "wait N seconds before concluding we're in a deadlock".


Is this conclusion about the scalability totally off or is this accurate? Is there something inherent that requires this, or could it be avoided?

Thanks,

Kevin

Reply via email to