develooper Front page | | Postings from May 2012

TPF Devel::Cover grant report Week 1

Thread Next
Paul Johnson
May 28, 2012 16:48
TPF Devel::Cover grant report Week 1
Message ID:
What is this?

You may recall that recently I submitted a grant proposal to The Perl
Foundation to work on Devel::Cover.  I'd like to thank everyone who thought
that this might be a good idea, and I'm pleased to say that the proposal was
accepted and I have started work.  Modelled on the successful grants of Dave
and Nick, one of the conditions of the grant is that I should produce weekly
and monthly reports of my progress, and these reports will be sent to  If you are not interested in these reports, please set up a
filter, or just ignore them.

This is my first weekly report.  In fact, this report covers a little more
than my first week because I started mid-week and it didn't seem worthwhile
reporting on a few hours of work.  Other commitments meant that I couldn't
start as early as I would have liked, but I was able to put in almost a full
week of work, which I don't expect to be the case as often as I would like.

I suppose there are two deliverables this week - Devel::Cover 0.87 and

My plan is to work primarily on existing, relatively simple bugs and problems
before getting down to the complicated bugs and the more interesting work of
adding functionality, and most of my work so far has indeed fallen into that
category.  There have been a couple of deviations from that - one planned and
one not.  Much of the rest of my work was related to Moose and Mouse.  I've
had a report about Moo which I need to look at, but I've heard nothing about
Mo so I'm not sure if there are any problems there.

Very shortly after I started work perl-5.16.0 was released.  So the second bug
that I looked at was RT 75314 which concerned a regression on condition cover
in 5.16.  Unfortunately this problem went to the core of one of the most
tricky parts of Devel::Cover and it took me quite some time to get to the
bottom of it.  The good news though, is that without this grant I would never
have been able to solve this problem and so condition and branch coverage in
5.16 would have been broken.

The bulk of the fix is found in f26ba32 and it relates to an optimisation from
David Mitchell:

Nick's bisecting code in the perl core was very helpful in fingering this
commit but, really, I should have remembered it.  When Dave announced this
optimisation, I suspected that it would affect Devel::Cover, but I had not
fully followed up on that.  The problem for Devel::Cover is that I was
depending on that op ordering to properly calculate condition coverage.

Devel::Cover has two ways of collecting condition coverage, depending on
whether or not the condition is short circuited.  If it is short circuited,
then when we get to the condition all we have to do is look at the top of the
stack to see whether the LHS is true or false.  If not, we have to remember
that we are interested in the value of the RHS when it has been evaluated.

Devel::Cover does this by hijacking the op_next pointer to look at the value
of the RHS and collect its coverage before moving on to the expected op.  The
optimisation meant that we never evaluated the RHS and so Devel::Cover didn't
know its value.  So Devel::Cover fell back to its default behaviour in such
cases which is to assume that the RHS is false, as it is in cases when we
never return a value from the RHS.  This is somewhat simplified, but gives you
the idea of what is going on.  (Incidently, this is also the primary reason
that Devel::Cover doesn't run under threads.)

The solution to this involves grovelling around the optree a little more to
find the conditional ops and, whilst it solves most of the problems, there is
still a little work to be done in this area.  (Where "a little" means that the
problem is simple, but the solution may not be.)

There's also a question here of whether Devel::Cover should be doing this sort
of thing, or whether I should be adding some hooks into the core, for example.
Hopefully, I will be able to look into such matters later.

The other main area I looked at was getting cpancover up and running again.
This is not completely altruistic, since I tend to think of CPAN as my
extended test suite.  I think cpancover could be quite useful, and the current
version gets many hits.

To this end, I was able to procure a machine from the nice folk at and
I bought the domain name, with the result that now points to an updated list of coverage for some CPAN
modules, run against perl 5.16.0.  If there are any modules you would like to
see added here, please let me know, or just make your changes to
utils/install_modules in and send me a
pull request.

So, the work I have completed in the time covered by this report is:

Closed RT tickets:
  75944 Warning about Moose clearers when processing Test::TempDir
  75314 conditional testing broken in blead?
  73452 Bleadperl v5.15.5-331-g4d8ac5c breaks PJCJ/Devel-Cover-0.79.tar.gz
  69892 Tests busted on perl 5.15
  57174 Devel::Cover 0.66 does not work with Moose+type constraints
  68389 Moose's make_immutable call causes Devel::Cover to emit many warnings
  77163 t/e2e/amoose_basic.t fails while installing Devel::Cover 0.86
  37350 Missing whatis entry of Devel::Cover::Tutorial manual
  71680 Devel::Cover spews error-messages when Moose is used
  72819 0% branch coverage for methods defined in non-reported files
  68353 perl 5.14.0 breaks D:C in t/e2e/ainc_sub.t
  63090 conditionals where one element is data from a Moose attrib are not evaluated
  63568 Devel::Cover can't handle Test::More's is()

Closed Github tickets:

  12 Devel::Cover 0.80 and up fails t/e2e/amoose_basic.t
   9 Remove use Data::Dumper from Devel::Cover

Merged pull requests:

  14 -launch option opens report in appropriate viewer

Fixed cpantesters reports:
  And many more covering the same problems in various guises.

You can see the commits at

Hours worked:

  17.05   0:35
  18.05   4:25
  19.05   5:50
  21.05   3:20
  22.05  11:00
  23.05   7:30
  24.05   8:05
  25.05   3:25

  Total  44:10

Paul Johnson -

Thread Next Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at | Group listing | About