Skip to content

Which report should I use?

Understand ships dozens of Interactive Reports. This page maps the task you're doing to the report that answers it — once you've picked one, enable and run it. See the reports catalog for the full list.

Document a project

You want to... Use Notes
Tabulate line metrics for the project, an architecture, a file, or a class Line Metrics Toggle any line metric on or off; project level adds a Files/Functions breakdown mode.
Compare average metrics across files or classes Average Metrics One row per file/class, one column per average metric, with an optional chart.
Tabulate metrics per class Class Metrics One row per class, one column per class metric; availability varies by project language.
Tabulate complexity metrics per function Complexity Metrics McCabe Cyclomatic Complexity and its variants by default; more available as options.
Render a chosen graph for every entity in a project or architecture Batch Generate Graphs Saves images plus a browsable index.html; can take a while on large projects.

Answer engineering questions

You want to... Use Notes
See how entangled a friend declaration really is Friend References Grouped by friend, then by referenced entity.
See the value passed for one parameter at every call Parameter Values Right-click the parameter, not the function.
See every call's full argument list at once Parameters Table One row per call, one column per parameter; click a line number to jump to it.
Check how a virtual function's parameter is used across every override Parameter Overrides Walks every override so you don't have to visit each by hand.

Review & audit code

You want to... Use Notes
Find duplicated or near-duplicate functions Cloned Functions Similarity and length thresholds are options; works across languages.
Find duplicated raw lines of code (not just whole functions) Duplicate Lines of Code Set a minimum line count; options to ignore whitespace and comments.
Flag functions that are too complex, long, or deeply nested Low Maintainability Functions Cyclomatic Complexity, CountLine, and MaxNesting thresholds.
Flag classes that are too big, too coupled, or not cohesive Low Maintainability Classes Table CountDeclMethod, CountClassCoupled, PercentLackOfCohesion.
Find global objects shared between concurrent tasks Shared TasksCSV (objects accessed from multiple call trees) or Graph (the graph's nodes and edges as a table) Needs a tasks architecture first — see below.

For what the maintainability metrics mean and when to worry, see Interpret key metrics.

Shared Tasks needs a tasks architecture first

Because the analysis needs multiple root functions, group the task entry points in an architecture first: under any root architecture, a child named with the word tasks holds the root functions. Optional child names using core or priority attach a field to each task, and an interrupt/control subtree names the enable/disable-interrupt functions so the plugins can mark references protected by them. Then right-click the architecture to run either report above — or the companion Shared Tasks graphs (by function or by object), which draw the same data instead of tabulating it.

Browse the whole project at once

Every report above answers one question well, but none of them link to each other. Batch Reports — specifically the Data Dictionary and the cross-reference reports (Program Unit, Object, Type, Macro, Include File) — produce a single HTML document set where every entity, cross reference, and source listing links to every other one, so you can browse the whole project the way you would in the GUI, without launching Understand. Reach for them for:

  • A comprehensive, point-in-time snapshot of the whole project — a release archive, a compliance record, or a full cross-reference picture rather than one report's slice of it.
  • Exploring an unfamiliar project's structure by clicking through, before you know which single report would answer your question.

For a specific metrics question, Line Metrics, Average Metrics, Class Metrics, or Complexity Metrics above are more direct; for unused code, CodeCheck is the maintained path. See What is a report & how do I run one? to configure and generate Batch Reports.