| Letter | What it counts |
|---|---|
| Assignments | Variable assignments (=, +=, −=, ++, −−, etc.). |
| Branches | Calls to other procedures (i.e., method/function invocations). |
| Conditions | Conditional tests (if, case, when, ternary, exception catches, comparison |
| operators). |
<A, B, C> is reported alongside the magnitude |ABC| = sqrt(A² + B² + C²).
What mehen emits
| Key | Type | Description |
|---|---|---|
abc | float | Magnitude sqrt(A² + B² + C²). |
abc.assignments | int | Total assignments in the space. |
abc.assignments_min | int | Minimum across child spaces. |
abc.assignments_max | int | Maximum across child spaces. |
abc.assignments_average | float | Average across child spaces. |
abc.branches | int | Total branches. |
abc.branches_min / _max / _average | — | Aggregates. |
abc.conditions | int | Total conditions. |
abc.conditions_min / _max / _average | — | Aggregates. |
How to read it
There is no universal threshold, but Fitzpatrick’s original paper proposed:| Magnitude | Interpretation |
|---|---|
| 0–10 | Tiny method; check whether it should be inlined. |
| 10–20 | Normal method size. |
| 20–40 | Large; consider refactoring. |
| 40+ | Very large; refactor candidate. |
rubocop-rubycop/rubycritic, which uses
<A, B, C> and a magnitude threshold of 17 by default for methods.
Per-language increments
Each language analyzer maps its statement and expression node kinds onto the three buckets. The canonical mapping:- Assignments:
=,+=,−=,*=,/=,%=,<<=,>>=,&=,|=,^=, prefix/postfix++/−−, parameter default values where applicable. - Branches: function calls, method calls, constructors,
super(...)calls, and dynamic dispatch. - Conditions:
if,else if,case/when, ternary,&&/||, equality and ordering operators, exception handlers (catch,rescue,except).
References
- Fitzpatrick, J. (1997). Applying the ABC Metric to C, C++, and Java. C++ Report, June 1997. Author archive (PDF).
- RuboCop:
Metrics/AbcSizecop documentation — production-grade Ruby implementation with documented thresholds.
See also
- Cyclomatic complexity — counts branches/conditions differently.
- LOC family — orthogonal size measure.