Personal tools

Haskell program coverage

From HaskellWiki

(Difference between revisions)
Jump to: navigation, search
 
m
Line 16: Line 16:
   
 
<nowiki>-----<module Main>-----</nowiki>
 
<nowiki>-----<module Main>-----</nowiki>
67% expressions used (72/106)
+
67% expressions used (72/106)
14% boolean coverage (1/7)
+
14% boolean coverage (1/7)
 
16% guards (1/6), 2 always True, 2 always False, 1 unevaluated
 
16% guards (1/6), 2 always True, 2 always False, 1 unevaluated
 
0% 'if' conditions (0/1), 1 always True
 
0% 'if' conditions (0/1), 1 always True
 
100% qualifiers (0/0)
 
100% qualifiers (0/0)
42% alternatives used (3/7)
+
42% alternatives used (3/7)
88% local declarations used (8/9)
+
88% local declarations used (8/9)
80% top-level declarations used (4/5)
+
80% top-level declarations used (4/5)
unused declarations:
+
unused declarations:
 
position
 
position
 
showRecip.p
 
showRecip.p
Line 32: Line 32:
 
[[Image:hpcexample.gif]]
 
[[Image:hpcexample.gif]]
   
The HTML output highlights parts of the program never evaluated; it also highlights boolean conditions for which recorded evaluations are always True or always False.
+
The HTML output highlights parts of the program never evaluated; it also highlights boolean conditions for which recorded evaluations are always True
  +
or always False.
   
 
We hope you find this tool-kit useful. If you have any comments or feedback, please feel free to email us.
 
We hope you find this tool-kit useful. If you have any comments or feedback, please feel free to email us.

Revision as of 21:27, 11 October 2006

Contents

1 What is hpc?

Hpc is a tool-kit to record and display Haskell program coverage. Hpc includes tools that instrument Haskell programs to record program coverage, run instrumented programs, and display the coverage information obtained.

Hpc works by applying a source-to-source transformation; this transformation also generates as a by-product a program-index file (.pix) and module-index files (.mix). The transformed program is compiled with a library; in addition to its usual run-time behaviour the program generates a coverage record in a program-ticks file (.tix). If the program is run more than once, coverage data is accumulated to reflect all runs.

Hpc provides coverage information of two kinds: source coverage and boolean-control coverage. Source coverage is the extent to which every part of the program was used, measured at three different levels: declarations (both top-level and local), alternatives (among several equations or case branches) and expressions (at every level). Boolean coverage is the extent to which each of the values True and False is obtained in every syntactic boolean context (ie. guard, condition, qualifier).

Hpc displays both kinds of information in two different ways: textual reports with summary statistics (hpc-report) and sources with colour mark-up (hpc-source).

2 Downloading

This version of hpc is available under a BSD-style license for free use by all sectors of the Haskell community. Some parts of hpc are based on components from the nhc98 compiler or from the hat tracing system, and we gladly acknowledge the contribution of the original authors.

3 Example textual output from hpc-report

-----<module Main>-----

 67% expressions used (72/106)
 14% boolean coverage (1/7)
     16% guards (1/6), 2 always True, 2 always False, 1 unevaluated
      0% 'if' conditions (0/1), 1 always True
    100% qualifiers (0/0)
 42% alternatives used (3/7)
 88% local declarations used (8/9)
 80% top-level declarations used (4/5)
unused declarations:
    position
    showRecip.p

4 Example of HTML output from hpc-source

Hpcexample.gif

The HTML output highlights parts of the program never evaluated; it also highlights boolean conditions for which recorded evaluations are always True or always False.

We hope you find this tool-kit useful. If you have any comments or feedback, please feel free to email us.

Andy Gill (andy@galois.com)

Colin Runciman (colin@cs.york.ac.uk)