Difference between revisions of "Haskell program coverage"
BrettGiles (talk | contribs) m (Category) |
|||
Line 1: | Line 1: | ||
[[Category:Development tools]] [[Category:Applications]] |
[[Category:Development tools]] [[Category:Applications]] |
||
− | + | = What is hpc? = |
|
− | Hpc is a tool-kit to record and display Haskell program coverage. 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 |
||
− | 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. |
||
+ | 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 |
||
− | 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). |
||
+ | 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 |
+ | 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). |
||
− | + | = Downloading = |
|
− | This version of hpc is available under a BSD-style license for free |
+ | This version of hpc is available under a BSD-style license for free |
+ | use by all sectors of the Haskell community. The hpc-trans tool was based |
||
+ | on components from the nhc98 compiler or from the hat tracing system, |
||
+ | and we gladly acknowledge the contribution of the original authors. |
||
+ | |||
+ | The latest version is version 0.3, (and a DARCS repo coming soon, |
||
+ | as well as tarballs of the various tools). |
||
+ | |||
+ | = Examples = |
||
== Example textual output from hpc-report == |
== Example textual output from hpc-report == |
||
Line 33: | Line 59: | ||
[[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 |
+ | The HTML output highlights parts of the program <font style="background: yellow">never evaluated</font>; it also highlights boolean conditions for which recorded evaluations are <font style="background: green">always True</font> |
− | or always False. |
+ | or <font style="background: red">always False</font>. |
+ | = Hpc Toolkit = |
||
⚫ | |||
+ | The Hpc Toolkit has three parts |
||
⚫ | |||
+ | * A set of tools for instrumenting Haskell, and interpreting the results on a coverage run. |
||
+ | * A set of scripts to make using these tools easier. |
||
+ | * An open common file format, uses by all the tools. |
||
+ | == Hpc Tools == |
||
+ | |||
+ | There are currently three tools provided by hpc, as well as a new option for GHC 6.6.1. |
||
+ | |||
+ | Tools |
||
+ | |||
+ | * hpc-trans - translates Haskell into instrumented Haskell |
||
+ | * hpc-report - Read the output of a coverage run, report a summary |
||
+ | * hpc-markup - Read the output of a coverage run, markup the source |
||
+ | |||
+ | Compiler Options |
||
+ | |||
+ | * -fhpc - a new GHC option, that automatically instruments Haskell |
||
+ | programs on the fly, using a similar algorithm to hpc-trans. |
||
+ | |||
+ | == Hpc Scripts == |
||
+ | |||
+ | * hpc - driver script to make using hpc-trans easy. |
||
+ | |||
+ | * hpc build |
||
+ | * hpc run |
||
+ | * hpc report |
||
+ | * hpc markup |
||
+ | |||
+ | |||
+ | == Hpc File Formats == |
||
+ | |||
+ | There are two file formats used by Hpc externally, and one internally |
||
+ | by hpc-trans. |
||
+ | |||
+ | * tix - Coverage information generated by the execution of an instrumented program. |
||
+ | * mix - Information about each tick-box inside a module, including style of tick box, and location in the source. |
||
+ | * pix - used only by hpc-trans, stores a list |
||
+ | |||
+ | ---- |
||
+ | |||
⚫ | |||
+ | feedback, please feel free to email us. |
||
+ | |||
⚫ | |||
Colin Runciman (colin@cs.york.ac.uk) |
Colin Runciman (colin@cs.york.ac.uk) |
Revision as of 17:28, 13 October 2006
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).
Downloading
This version of hpc is available under a BSD-style license for free use by all sectors of the Haskell community. The hpc-trans tool was based on components from the nhc98 compiler or from the hat tracing system, and we gladly acknowledge the contribution of the original authors.
The latest version is version 0.3, (and a DARCS repo coming soon, as well as tarballs of the various tools).
Examples
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
Example of HTML output from hpc-source
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.
Hpc Toolkit
The Hpc Toolkit has three parts
- A set of tools for instrumenting Haskell, and interpreting the results on a coverage run.
- A set of scripts to make using these tools easier.
- An open common file format, uses by all the tools.
Hpc Tools
There are currently three tools provided by hpc, as well as a new option for GHC 6.6.1.
Tools
- hpc-trans - translates Haskell into instrumented Haskell
- hpc-report - Read the output of a coverage run, report a summary
- hpc-markup - Read the output of a coverage run, markup the source
Compiler Options
- -fhpc - a new GHC option, that automatically instruments Haskell
programs on the fly, using a similar algorithm to hpc-trans.
Hpc Scripts
- hpc - driver script to make using hpc-trans easy.
* hpc build * hpc run * hpc report * hpc markup
Hpc File Formats
There are two file formats used by Hpc externally, and one internally by hpc-trans.
- tix - Coverage information generated by the execution of an instrumented program.
- mix - Information about each tick-box inside a module, including style of tick box, and location in the source.
- pix - used only by hpc-trans, stores a list
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)