A testing tool allowing convenient testing of programs and also classes in
general. The tool automatically divides each program into many groups
such that if one line (or statement) is executed it may reasonably be
assumed that all the lines in the group are also executed. A tester is
provided the ability to provide desired arguments (including class
instances) and cause all groups to be executed such that all lines of
code in the programs of a class are executed at least once. The groups
are conveniently further logically combined into hierarchical blocks,
with each block at a higher level corresponding to a logical structure
such as if structure, for structure, while structure, etc. The blocks at
the lowest level may contain a single group. Due to such hierarchy, a
tester may visually easily identify the unexecuted blocks/groups. The
tester may further define and execute small pieces of code (macros) in
the middle of testing.