<?xml version="1.0" encoding="ISO-8859-1"?>
<document>
<head>
    <name>Requirements</name>
    <doc-version>$Date: 2003/05/04 06:40:10 $</doc-version>
    <author>Matt Albrecht</author>
</head>
<body>

Create one or more Java tools which:
<OL>
    <LI>Generate <i>code coverage</i> information for an execution of one or
    more Java classes. Code Coverage refers to a collection of data
    based on source files, class files, and step tracing of the execution:
    <OL>
        <LI>which unique source lines and/or bytecode instructions that were
        visited within the execution process for each class under
        consideration.</LI>
        <LI>source lines and/or bytecode instructions that exist within
        the classes under consideration.</LI>
    </OL>
    A class is classified as "under consideration" if the user specifies that
    the class is to be included in the code coverage statistics results.
    <!--
    <P>
    <I>(Note: source lines may not be available for collection in all
    circumstances.  Thus, bytecode instruction data must be gathered
    under all circumstances.  This allows for a "apples to apples"
    comparison, regardless of the source line availability.)</I>
    </P>
    -->
    </LI>
    
    <LI>The two types of data above must be stored
    external to the tools.  This allows for greater performance, and
    easier bug checking.  It also leads to a more UN*X like tool chain.</LI>
    
    <LI>Generate statistics based on the the collected code coverage data:
    <OL>
        <LI>ratio between the number of unique lines that were visited in the
        execution process to the number of lines in the classes under
        consideration, grouped by methods.</LI>
        <LI>ratio between the number of bytecode instructions that were
        visited in the execution process to the number of bytecode
        instructions in the classes under consideration, grouped by
        methods.</LI>
        <LI>Additional statistics derived from the above data.  This
        includes per package, per class, and per method breakdown of the
        statistics.  Also included is ratios of covered lines to total
        lines.</LI>
    </OL>
    </LI>
    
    <LI>The tools must be aware of the ClassLoader considerations:
    different classes with the same name may be loaded by separate
    ClassLoaders.  Thus, the tools must have a method to discover differences
    between classes other than class name alone.</LI>
    
    <LI>The tools must generate a final human-readable document, preferably
    HTML.</LI>
    
    <LI>There is no restriction in the requirements as to the earliest model
    of a JVM.  This is left as an implementation detail.</LI>
</OL>

</body>
</document>

