Edition 1·Updated 2026-10-03·16 min read
Sources
About this book
An overview of the book, with source information for further reading.
Software Metrics A Rigorous and Practical Approach Edition 3
Norman Fenton James BiemanA comprehensive guide that applies formal measurement theory and a goal-oriented framework to software engineering, enabling practitioners to rigorously define, validate, and use metrics for understanding, controlling, and improving software products, processes, and resources.
For software engineers, project managers, and students who want to move beyond ad-hoc metrics and establish a scientifically grounded measurement program, 'Software Metrics: A Rigorous and Practical Approach' serves as an essential guide. The book introduces the representational theory of measurement, providing the principles needed to define, validate, and meaningfully use software metrics. It presents a goal-driven framework (Goal-Question-Metric) for selecting metrics that are genuinely useful for decision-making regarding software processes, products, and resources. The text covers practical techniques for data collection, empirical investigation through experiments and case studies, and data analysis using both classical statistics and modern causal modeling with Bayesian networks. With detailed chapters on measuring specific attributes like size, structure, quality, reliability, usability, and security, this book is an indispensable resource for anyone seeking to assess software, track progress, manage risk, and elevate their practice to a true engineering discipline.
Movement I
Orient
What this book claims, and who wrote it.
- — The book's one-line promise
- — The author and where the book stands
A comprehensive guide that applies formal measurement theory and a goal-oriented framework to software engineering, enabling practitioners to rigorously define, validate, and use metrics for understanding, controlling, and improving software products, processes, and resources.
The need-to-know
Rigorous software measurement is founded on the representational theory of measurement, which demands that measures preserve the empirical relations observed in the real world to be considered valid. The Goal-Question-Metric (GQM) framework is essential for ensuring measurement efforts are focused, efficient, and provide useful information that aligns with specific organizational and project objectives. Internal product attributes like size and structure can be measured early in the lifecycle and used as predictors for important external attributes like reliability and maintainability, but these predictive relationships must be empirically validated within a specific context.
About this guide
The guide describes these challenges, steps and possible outcomes.
Who it is for
Software engineers, project managers, and quality assurance professionals who want to make their software development process more predictable, controlled, and effective. They seek to move beyond subjective opinions and gut feelings to make data-driven decisions about their products, processes, and resources, needing to justify investments, predict schedules and costs, and demonstrably improve the quality of the software they deliver.
Challenges
- In practice · They struggle with project overruns, unpredictable product quality, and high maintenance costs. They are constantly pitched new tools and methods with bold claims ('200% productivity increase!') but lack an objective way to evaluate their effectiveness. Their existing metrics programs often collect data that is easy to get but provides little actionable insight.
- For the reader · They feel frustrated, uncertain, and as if they are 'flying blind.' They suspect their methods could be improved but don't know where to focus efforts. They feel unable to quantify the health of their projects or the quality of their products, and are skeptical of simplistic metrics but don't know the proper alternative.
Steps to consider
- 1Master the Fundamentals: Learn the representational theory of measurement to understand what makes a metric valid and meaningful.
- 2Adopt a Goal-Based Framework: Use the Goal-Question-Metric (GQM) paradigm to identify the specific metrics that will answer your most important questions.
- 3Learn to Investigate Empirically: Understand how to design and execute controlled experiments and case studies to validate new tools and techniques.
- 4Collect and Analyze Data Correctly: Implement rigorous data collection practices and apply appropriate statistical techniques—from simple scatter plots to advanced causal models—to extract meaningful insights.
- 5Apply Specific Metrics: Measure key internal attributes (size, structure) and external attributes (quality, reliability, usability) using the practical methods and measures provided.
Risks
They will continue to struggle with project overruns and unpredictable quality. They will waste time and money on ineffective tools and methods based on hype rather than evidence.
Intended result
Readers can confidently select, define, and validate metrics for any software engineering goal. They can run an effective measurement program that provides actionable insights, improving project predictability, product quality, and process efficiency.
Set the record straight
What this book sets straight
The common beliefs this book pushes back on.
Software complexity is a single, measurable attribute, and a high score on a metric like cyclomatic complexity means the code is bad.
Complexity is a multi-dimensional concept, not a single attribute. Different structural metrics capture distinct aspects like control flow, data flow, or coupling, and no single number can represent overall 'complexity'. Metrics must be used to assess specific, well-defined attributes, not as a simplistic good/bad judgment.
Any number that can be extracted from software is a 'metric,' and collecting as many as possible is always beneficial.
Measurement must be goal-driven (using frameworks like Goal-Question-Metric) and grounded in measurement theory. A number is only a valid 'measure' if it satisfies the representation condition for a specific attribute. Collecting data without a clear purpose leads to useless 'hotchpotches' of data that provide no insight.
A strong statistical correlation between an internal metric (e.g., module size) and an external outcome (e.g., defects) proves the metric is a good predictor and a valid measure of quality.
Correlation does not imply causation. A measure must first be validated in the 'narrow sense' against empirical relations for the attribute itself. To be a valid predictor, it must be part of a validated prediction system, which often requires a causal model to provide explanatory power for decision-making, as mere statistical association can be spurious or misleading.
Movement II
Map
The book's main ideas and how they connect.
Software Metrics A Rigorous and Practical Approach Edition 3's own model — and how it sits inside its field.
- — 8 constructs the book works with
- — Where it agrees with the field, exceeds it, or fills a gap
The constructs
How they connect (8)
- Internal Product Size → influences → Development Effort
- Internal Product Size → influences → Fault Proneness
- Internal Product Structure → influences → Development Effort
- Internal Product Structure → influences → Fault Proneness
- Internal Product Structure → influences → Comprehensibility
- Comprehensibility → influences → Software Maintainability
- Fault Proneness → influences → Software Reliability
- Development Process Quality → influences → Software Reliability
Where this book diverges from the corpus
- exceeds The book separates structural measures (cyclomatic number, coupling) from size and treats them as their own measurement family, while the field folds control-flow complexity into one broad code-size construct.
- fills gap The field covers delivery practices and culture, but no construct captures process maturity and visibility (design, inspection, testing activities) as a quality driver.
- exceeds The field names fault-proneness only as an outcome of code complexity, whereas the book treats it as a pre-test product property and models it against size, structure and process.
- lags The book treats effort as the key outcome for planning and cost estimation, but the field goes further into estimation methods, historical data and predictability.
Movement III
Master
Explore the book's ideas, examples and practical tools.
How the author makes the case — section by section, with the book's own tools.
- — 8 sections, in the book's order
- — The book's frameworks, checklists, and worked cases
strong · 1 source
- Software Metrics A Rigorous and Practical Approach Edition 3
This section frames reliability as an external, probabilistic property seen in operation. It shows how to measure it from failures and why internal fault counts are a poor stand-in.
Software Reliability
The probability of failure-free software operation for a specified period of time in a specified environment. It is an external, user-centric quality attribute measured by observing system failures, not by counting internal faults.
Why it matters. Reporting fault counts as reliability gives users a false picture, because reliability depends on how the software is used, not just on what defects exist.
Myth
Removing more faults always makes software proportionally more reliable.
Reality
Reliability depends on how often the remaining faults are triggered under the operational profile, so removing rarely executed faults barely helps while removing one frequently hit fault helps a lot. Failure data from realistic use is the only valid measure.
- Software ReliabilityFramework — How this mechanism is run, step by step, as the literature describes it.
- Software Reliability — decision rulesChecklist — 5 checkpoints
- Software ReliabilityCase study — The source's own worked case is the Jelinski-Moranda model (Example 3.13), which assumes an exponential distribution for the time of the ith failure.
- Fault-Proneness Component Screening SheetTemplate
- Reliability Measurement Specification SheetTemplate
- Reliability is measured from failures under a stated usage profile, not by counting faults.
- One frequently triggered fault can matter more than dozens of dormant ones.
- Every reliability figure should state its environment and period.
The deep drill-down: 8 operational steps, a worked example from the source, 5 decision rules, 5 failure modes, and the “Reliability Measurement Specification Sheet” tool. Included when you buy this guide.
The rest of this section
the full written section · 4 how-to steps · 2 pitfalls to watch for · 5 tools for this section. Included when you buy this guide.
Grounded in: Software Metrics A Rigorous and Practical Approach Edition 3
strong · 1 source
- Software Metrics A Rigorous and Practical Approach Edition 3
This section treats maintainability as an external attribute measured by the effort or time maintenance tasks take. It covers how to observe it and how not to infer it from code alone.
Software Maintainability
The ease with which a software system can be modified to correct faults, improve performance, or adapt to a changed environment. It is an external attribute measured by the effort or time required to perform maintenance tasks.
Why it matters. Getting this wrong means you accept a maintainability index that looks healthy while real changes remain slow and error-prone, and you misjudge long-term cost.
Myth
A maintainability index computed from code metrics tells you how maintainable the system is.
Reality
Such an index is at best a predictor of maintainability, which is realized only when someone performs a change. Actual maintenance effort also depends on staff knowledge, tooling, documentation, and change type.
- Software MaintainabilityFramework — How this mechanism is run, step by step, as the literature describes it.
- Software Maintainability — decision rulesChecklist — 5 checkpoints
- Software MaintainabilityCase study — The source's one concrete fault record concerns an up-arrow key on a machine.
- Maintenance Task Effort and Predictor LogTemplate
- Maintainability is observed through the effort of real changes, not computed from code.
- Separate maintenance types before comparing effort across components.
- Comprehensibility is the main pathway from code properties to maintenance effort, so test it first.
The deep drill-down: 8 operational steps, a worked example from the source, 5 decision rules, 5 failure modes, and the “Maintenance Task Effort and Predictor Log” tool. Included when you buy this guide.
The rest of this section
the full written section · 3 how-to steps · 2 pitfalls to watch for · 4 tools for this section. Included when you buy this guide.
Grounded in: Software Metrics A Rigorous and Practical Approach Edition 3
strong · 1 source
- Software Metrics A Rigorous and Practical Approach Edition 3
This section covers effort as the labor needed to build a system, normally in person-hours or person-months. It explains how it is predicted from size and structure and how to collect it reliably.
Development Effort
The amount of labor, typically measured in person-months or person-hours, required to produce a software system or component. It is a primary outcome for project planning and cost estimation.
Why it matters. Effort figures drive budgets and schedules, so inconsistent recording or an over-simple size model leads directly to overruns that are blamed on the wrong cause.
Myth
Effort scales linearly with size, so doubling the code doubles the labor.
Reality
Empirical effort models often show non-linear relationships, because structure, team size, and coordination costs change with scale. A size-only estimate misses this and should be tested against structural and project factors.
- Development EffortFramework — How this mechanism is run, step by step, as the literature describes it.
- Development Effort — decision rulesChecklist — 5 checkpoints
- Development EffortCase study — The source's AT&T case asks: are software inspections worth their cost?
- Effort Measurement RecordTemplate
- Effort needs a stated boundary and consistent recording before any model is trusted.
- Size is the starting predictor, but structure and scale effects often improve it.
- Locally calibrated models beat imported ones, and they need periodic re-calibration.
The deep drill-down: 8 operational steps, a worked example from the source, 5 decision rules, 5 failure modes, and the “Effort Measurement Record” tool. Included when you buy this guide.
The rest of this section
the full written section · 4 how-to steps · 2 pitfalls to watch for · 4 tools for this section. Included when you buy this guide.
Grounded in: Software Metrics A Rigorous and Practical Approach Edition 3
strong · 1 source
- Software Metrics A Rigorous and Practical Approach Edition 3
This section shows how to treat size as a family of static measures rather than a single number. You will see which unit fits which question and what size can and cannot predict.
Internal Product Size
A measure of the quantity of a software product, such as code, design, or specification. It is measured statically from the product itself and can be expressed in various units like lines of code (LOC), function points (FP), or number of classes.
Why it matters. Pick the wrong size unit, or read size as a stand-in for everything else, and your effort estimates and defect forecasts inherit a systematic bias you cannot see.
Myth
Lines of code is a discredited measure, so serious measurement programs should abandon it in favor of function points.
Reality
LOC, function points, and class counts capture different aspects of size (length, functionality, and design volume), and LOC remains a cheap, repeatable, and often strong predictor when counting rules are fixed. The question is which dimension of size your model needs, not which unit is fashionable.
- Internal Product SizeFramework — How this mechanism is run, step by step, as the literature describes it.
- Internal Product Size — decision rulesChecklist — 5 checkpoints
- ComprehensibilityCase study — Fenton and Bieman examine two of Weyuker's proposed properties for any 'good' complexity metric.
- Size Measurement Definition CardTemplate
- Size is multidimensional; choose length, functionality, or design-level units to match the question you are asking.
- A documented, tool-enforced counting rule matters more than the unit you pick.
- Size is a baseline predictor of effort and faults, so any structure or process claim should be tested after controlling for it.
The deep drill-down: 8 operational steps, a worked example from the source, 5 decision rules, 5 failure modes, and the “Size Measurement Definition Card” tool. Included when you buy this guide.
The rest of this section
the full written section · 4 how-to steps · 2 pitfalls to watch for · 4 tools for this section. Included when you buy this guide.
Grounded in: Software Metrics A Rigorous and Practical Approach Edition 3
strong · 1 source
- Software Metrics A Rigorous and Practical Approach Edition 3
This section covers measures of how components connect and how control flows: cyclomatic number, coupling, cohesion, and modularity. It explains what each reveals about the shape of a design and where it misleads.
Internal Product Structure
A set of measures characterizing the organization and interconnection of a software product's components. This includes attributes like control-flow complexity (e.g., cyclomatic number), module coupling, cohesion, and modularity, which describe the 'shape' and interconnectedness of the design or code.
Why it matters. If you read structure measures as direct quality scores, you will refactor to satisfy a number while the real drivers of effort and defects stay untouched.
Myth
A single complexity number, such as cyclomatic complexity, tells you how good or bad a module's design is.
Reality
Each structural measure captures one narrow view of organization, and most correlate strongly with size, so a lone value often restates how big the module is. Structure earns its place only when it adds predictive power beyond size.
- ComprehensibilityFramework — How this mechanism is run, step by step, as the literature describes it.
- Fault PronenessFramework — How this mechanism is run, step by step, as the literature describes it.
- Internal Product StructureFramework — How this mechanism is run, step by step, as the literature describes it.
- Comprehensibility — decision rulesChecklist — 5 checkpoints
- Internal Product Structure — decision rulesChecklist — 5 checkpoints
- Fault PronenessCase study — Briand, Wüst, Ikonomovski, and Lounis explored which design properties are common in the most error-prone modules of one industrial software system.
- Internal Product StructureCase study — Illustrative scenario, not from the source: the numbers are placeholders, so substitute your own.
- Structure Measurement Plan and Validation SheetTemplate
- Structure measures describe the shape of a design; they do not grade it.
- Many structural metrics are size proxies, so test their added value over size.
- Calibrate thresholds locally and inspect outliers rather than averaging across the system.
The deep drill-down: 8 operational steps, a worked example from the source, 5 decision rules, 5 failure modes, and the “Structure Measurement Plan and Validation Sheet” tool. Included when you buy this guide.
The rest of this section
the full written section · 4 how-to steps · 2 pitfalls to watch for · 8 tools for this section. Included when you buy this guide.
Grounded in: Software Metrics A Rigorous and Practical Approach Edition 3
strong · 1 source
- Software Metrics A Rigorous and Practical Approach Edition 3
This section treats process quality as a capability, covering how mature and visible your design, inspection, and testing practices are. It clarifies what process assessment tells you about outcomes.
Development Process Quality
The maturity, visibility, and effectiveness of the software development processes employed, including activities for design, coding, inspection, and testing. It reflects the organization's capability to produce quality software in a controlled and predictable manner, as assessed by models like CMMI.
Why it matters. Mistaking a process rating for a product guarantee leads you to trust components that are in fact fragile, or to spend on certification instead of the practices that remove defects.
Myth
A high CMMI maturity level means the software the organization produces is reliable.
Reality
Maturity raises predictability and the odds of good outcomes, but it is an organizational attribute, not a property of any particular product. Reliability still has to be verified on the product through failure data.
- Development Process QualityFramework — How this mechanism is run, step by step, as the literature describes it.
- Development Process Quality — decision rulesChecklist — 5 checkpoints
- Development Process QualityCase study — The passages contain no numeric case, so this is an illustrative walk-through of the book's framework, not data from it.
- Process Quality GQM and Visibility SheetTemplate
- Process quality shapes the odds of good outcomes; it does not certify any given product.
- Measure the practices in use per component, not just the organization's overall rating.
- Validate process claims against failure data from delivered software.
The deep drill-down: 8 operational steps, a worked example from the source, 5 decision rules, 5 failure modes, and the “Process Quality GQM and Visibility Sheet” tool. Included when you buy this guide.
The rest of this section
the full written section · 3 how-to steps · 2 pitfalls to watch for · 4 tools for this section. Included when you buy this guide.
Grounded in: Software Metrics A Rigorous and Practical Approach Edition 3
strong · 1 source
- Software Metrics A Rigorous and Practical Approach Edition 3
This section defines fault proneness as a pre-test property of a component and shows how to estimate it from size, structure, and process. You will learn to separate it from the faults you actually find.
Fault Proneness
The inherent likelihood of a software component containing faults (defects) due to its characteristics. It is a property of the product that exists prior to testing and is influenced by factors like size, structural complexity, and the quality of the development process.
Why it matters. Confusing proneness with observed fault counts sends test effort to where defects were already found rather than where they are most likely to remain.
Myth
The number of faults found in testing tells you how fault-prone a component is.
Reality
Found faults depend on how much and how well you tested, so a component with few found faults may simply be under-tested. Proneness is a latent likelihood you estimate from product characteristics and validate against later defect data.
- Fault Proneness — decision rulesChecklist — 5 checkpoints
- Internal Product SizeCase study — The book's Example 4.2 gives the hypothesis 'Using the Scrum method produces better quality software than using the XP method.' It is untestable because 'quality' is not defined measurably.
- Proneness is a latent property estimated before testing, not a count of defects found.
- Defect counts are confounded by test effort, so normalize before you compare.
- Validate predictive models on later releases, not on the data that trained them.
The deep drill-down: 8 operational steps, a worked example from the source, 5 decision rules, 5 failure modes, and the “Fault-Proneness Component Screening Sheet” tool. Included when you buy this guide.
The rest of this section
the full written section · 4 how-to steps · 2 pitfalls to watch for · 2 tools for this section. Included when you buy this guide.
Grounded in: Software Metrics A Rigorous and Practical Approach Edition 3
strong · 1 source
- Software Metrics A Rigorous and Practical Approach Edition 3
This section explains comprehensibility as the ease with which people can understand code, design, or documentation. It shows how to study it empirically and how it links structure to maintenance.
Comprehensibility
The ease with which a software product (code, design, documentation) can be understood by a developer, maintainer, or other stakeholder. It is a key factor influencing the effort required for modification and debugging.
Why it matters. If you assume understandability from a metric rather than test it with people, you will optimize code for a number while maintainers still struggle to read it.
Myth
Low complexity scores guarantee that code is easy to understand.
Reality
Understanding depends on the reader's experience, naming, documentation, and domain knowledge as well as on structure, so metrics predict it only partially. Only observation of how people perform on comprehension tasks confirms it.
- Comprehensibility is a human-centered outcome and must be measured with people, not only with code metrics.
- Reader experience can swamp structural effects, so control for it.
- Structure is a hypothesis about understandability until a comprehension task supports it.
The deep drill-down: 8 operational steps, a worked example from the source, 5 decision rules, 5 failure modes, and the “Comprehensibility Attribute Record” tool. Included when you buy this guide.
The rest of this section
the full written section · 3 how-to steps · 2 pitfalls to watch for · 1 tool for this section. Included when you buy this guide.
Grounded in: Software Metrics A Rigorous and Practical Approach Edition 3
Movement III · The run-it-now depth
The Playbook
Practical tools and examples from this guide.
Frameworks
Comprehensibility
How this mechanism is run, step by step, as the literature describes it.
- 1Classify comprehensibility correctly before measuring anything. In Table 3.1 it is an external attribute, a property of how a product behaves for the people who read it. It is not an internal attribute you can count. Write it as the target attribute and keep it separate from any counts you collect.
- 2Name the entity under study: requirements (use case models and scenarios), design (design models), or code. The table lists different internal attributes for each, so the entity decides what you can examine.
- 3Pick candidate internal attributes from the list for that entity, one at a time. Requirements: size, reuse, modularity, redundancy, functionality, syntactic correctness. Designs: size, reuse, modularity, coupling, cohesiveness, functionality. Code: size, reuse, modularity, coupling, functionality, algorithmic complexity, control-flow structuredness. Record each as its own measure.
- 4Do not add the attributes into one 'software complexity' score. A single measure that stands for comprehensibility, correctness, maintainability, reliability and testability mixes conflicting goals. Report the attributes side by side so you can see which one drives a comprehension problem.
- 5Test the size assumption explicitly. A size-driven measure says that adding code can never lower complexity (Weyuker property 5). A comprehensibility-driven view allows that a program can become easier to understand as you see more of it. Decide which view your measure serves and state it.
- 6Treat the link between each internal attribute and comprehensibility as a hypothesis, not a fact. The source warns that judging external attributes from internal ones can lead to invalid conclusions. Look for direct ways to observe the external attribute itself, such as how readily maintainers understand the artifact, and compare your internal counts against that.
- 7Keep the same measures and re-take them as the system evolves from one version to the next. The source says changes in product attributes must be tracked over time. A one-off snapshot cannot show whether understanding is getting easier or harder.
- 8Prefer attribute-level findings over verdicts. A statement like 'coupling in this design is high and the maintainers report difficulty' can be acted on. A statement like 'complexity is 47' cannot, and it may satisfy formal properties while still not being a sensible measure (Cherniavsky and Smith).
Development Effort
How this mechanism is run, step by step, as the literature describes it.
◆ The full 8-step framework — included with this guide purchase
Development Process Quality
How this mechanism is run, step by step, as the literature describes it.
◆ The full 8-step framework — included with this guide purchase
Fault Proneness
How this mechanism is run, step by step, as the literature describes it.
◆ The full 8-step framework — included with this guide purchase
Internal Product Size
How this mechanism is run, step by step, as the literature describes it.
◆ The full 8-step framework — included with this guide purchase
Internal Product Structure
How this mechanism is run, step by step, as the literature describes it.
◆ The full 8-step framework — included with this guide purchase
Software Maintainability
How this mechanism is run, step by step, as the literature describes it.
◆ The full 8-step framework — included with this guide purchase
Software Reliability
How this mechanism is run, step by step, as the literature describes it.
◆ The full 8-step framework — included with this guide purchase
Checklists
Comprehensibility — decision rules
- If someone proposes one composite 'complexity' or 'quality' number to stand for comprehensibility, then split it into separate internal attributes. Conflicting goals make a single value unsound.
- If your measure must never fall when code is added (property 5), then it is a size measure and not a comprehensibility measure. Do not report it as comprehensibility.
- If you only have internal counts (size, coupling, nesting), then label the result a hypothesis about comprehensibility. Do not report it as comprehensibility, and look for a direct observation of understanding to check it against.
- If a candidate metric passes a list of formal properties, then still ask whether it is a sensible measure. Cherniavsky and Smith built one that satisfied all of Weyuker's properties and was not.
- If the system has changed versions, then re-measure the same attributes on the same entities before drawing conclusions about trend.
Development Effort — decision rules
◆ All 5 checkpoints — included with this guide purchase
Development Process Quality — decision rules
◆ All 5 checkpoints — included with this guide purchase
Fault Proneness — decision rules
◆ All 5 checkpoints — included with this guide purchase
Internal Product Size — decision rules
◆ All 5 checkpoints — included with this guide purchase
Internal Product Structure — decision rules
◆ All 5 checkpoints — included with this guide purchase
Software Maintainability — decision rules
◆ All 5 checkpoints — included with this guide purchase
Software Reliability — decision rules
◆ All 5 checkpoints — included with this guide purchase
Case studies — including what didn't work
Comprehensibility
Fenton and Bieman examine two of Weyuker's proposed properties for any 'good' complexity metric. Property 5 says M(P) ≤ M(P;Q) and M(Q) ≤ M(P;Q), so adding code never decreases complexity. That fits a size-based view. But it conflicts with the widely held belief that a program can sometimes be understood more easily as you see more of it, so a measure based mainly on comprehensibility cannot satisfy property 5. Property 6 says two bodies P and Q with M(P) = M(Q) can give M(P;R) ≠ M(Q;R) when each is joined to the same R. That depends on how the pieces interact, which is a comprehensibility concern and has little to do with size. The authors conclude that a single measure covering both size and low comprehensibility cannot satisfy both properties. Zuse backs this formally: property 5 requires a ratio scale for M and property 6 excludes it. The practical consequence is to measure size and the comprehension-related attributes as separate things instead of merging them into one number.
Development Effort
The source's AT&T case asks: are software inspections worth their cost? Managers needed to weigh what inspections cost against the benefits. The entity is the inspection process. The direct measures are effort expended (labor on inspections) and lines of code reviewed. The derived measure is effort per thousand lines of code reviewed, so E hours over K KLOC gives E/K. That ratio alone only describes cost. The managers also measured the number of faults discovered during the inspections, F. With F they could judge the cost of finding each fault (E/F) against the benefit received, which is the cost–benefit analysis the source describes. The lesson is that effort becomes decision-grade when you normalize it by size reviewed and set it against a result. Keep E, K, and F separately so the ratios can be recomputed and challenged.
◆ What happened, and the outcome — included with this guide purchase
Development Process Quality
The passages contain no numeric case, so this is an illustrative walk-through of the book's framework, not data from it. Goal: make inspection and testing effective and predictable on one product line. Questions: Are inspections happening and recorded? Do faults found late exceed faults found early? Does test coverage correlate with fewer post-release failures? Metrics follow from the questions: inspections held versus planned (process), faults recorded per phase of detection (from incident data, with faults kept separate from failures), a test coverage measure, and post-release defect density (external quality). Step one is a visibility audit, and it shows that inspections leave no record. The first action is therefore a collection form, not a metric target. Only after two or three releases of consistent data do you compare projects with and without inspection, using a baseline or sister-project comparison. At that point you can say whether process changes moved defect density, and you can describe the process's maturity with evidence rather than assertion.
◆ What happened, and the outcome — included with this guide purchase
Fault Proneness
Briand, Wüst, Ikonomovski, and Lounis explored which design properties are common in the most error-prone modules of one industrial software system. They applied 28 coupling measures and 10 cohesion measures to the modules. Fault proneness came from faults reported by users over a 1-year period. Coupling, particularly import coupling, showed the strongest relationship with fault proneness. Applied to your own system, you would compute import coupling per module, count user-reported faults per module over a fixed window, and rank modules on both. You would then direct inspection and testing at the highly coupled, fault-heavy modules first. Because Class 5 predictions tend to hold only on the system where they were fitted, you would confirm the pattern on your own data before generalizing from this study.
◆ What happened, and the outcome — included with this guide purchase
Internal Product Size
The book's Example 4.2 gives the hypothesis 'Using the Scrum method produces better quality software than using the XP method.' It is untestable because 'quality' is not defined measurably. The fix defines quality as defects and restates the hypothesis: Scrum code will have fewer defects per thousand lines of code than XP code. Size is the denominator. Applied to this case: (1) the entity is the delivered code of each project; (2) the unit is LOC; (3) one counting rule is written and applied to both sets, including how reused or external code is treated; (4) defects are counted, and the count is divided by KLOC. The source then adds two caveats. Many defects found in testing may mean thorough testing or sloppy development. Delivered LOC may also not reflect the effort needed to complete the product. So the size figure makes the comparison testable, but you still have to read it as a surrogate-based ratio and not a direct verdict on quality or effort.
◆ What happened, and the outcome — included with this guide purchase
Internal Product Structure
Illustrative scenario, not from the source: the numbers are placeholders, so substitute your own. A maintainer wants to know where changes are most likely to be costly. Following the steps, the objective is 'structure predicts maintainability'. The attributes chosen are control-flow complexity inside units and coupling between modules. The maintainer builds a flowgraph for each unit and records its cyclomatic complexity, and counts the connections between modules from the design. Two modules look alike on lines of code, but one has a high cyclomatic value and heavy coupling to many other modules while the other has neither. A single complexity score would hide this. The profile shows the first module is tangled internally and also widely connected, so a change there is likely to ripple. The maintainer then checks recorded maintenance effort for all modules against the two attributes. If effort follows them, they are validated for this environment and used to rank modules for refactoring and extra testing. If it does not, the measures are dropped for this purpose or the definitions are revised.
◆ What happened, and the outcome — included with this guide purchase
Software Maintainability
The source's one concrete fault record concerns an up-arrow key on a machine. Its mechanism is recorded as creation during code development, detection by diagnosis of an operational failure, and correction by removing the up-arrow key from all machines and taping over the hole. As a maintenance record, this shows what the effort measure must capture. The correction was a physical workaround rather than a code change, so the task type is 'fault correction' but the effort was spent on a different kind of intervention. The passages give no effort figures, so none are invented here. In practice you would log the diagnosis time (detection) and the time spent applying the workaround across all machines (correction) as two separate numbers. You would also note that the fault was created in code development, which ties it back to the module whose structure might have predicted it. Repeating this record across many tasks gives the effort data needed to validate whether structural metrics predict maintenance cost.
◆ What happened, and the outcome — included with this guide purchase
Software Reliability
The source's own worked case is the Jelinski-Moranda model (Example 3.13), which assumes an exponential distribution for the time of the ith failure. Its mean, the MTTFi, depends on N, the number of faults assumed to be initially in the program, and on 1/α, the 'size' of a fault, i.e., the rate at which it causes a failure. Faults are assumed to be removed on observation of a failure, and each removal reduces the rate of occurrence of failures by ϕ = 1/α. N and α are unknown, so you observe a series of failure times and estimate them with Maximum Likelihood Estimation. At that point you have a prediction system, not just a model: the model, the estimation procedure, and a way to interpret the results. The source makes the point with a non-software parallel (Example 2.13): predicting a London-to-Bristol journey cost as ab/c gives different answers depending on whether a, b, c come from a friend or from the automobile association. The same holds for reliability. Change the estimation procedure and the predicted MTTF changes, so the procedure must be reported alongside the number.
◆ What happened, and the outcome — included with this guide purchase
Templates
Comprehensibility Attribute Record
Effort Measurement Record
◆ The fillable template — included with this guide purchase
Process Quality GQM and Visibility Sheet
◆ The fillable template — included with this guide purchase
Fault-Proneness Component Screening Sheet
◆ The fillable template — included with this guide purchase
Size Measurement Definition Card
◆ The fillable template — included with this guide purchase
Structure Measurement Plan and Validation Sheet
◆ The fillable template — included with this guide purchase
Maintenance Task Effort and Predictor Log
◆ The fillable template — included with this guide purchase
Reliability Measurement Specification Sheet
◆ The fillable template — included with this guide purchase
Items marked Paid are included when you buy this guide.
Movement IV
Reflect
Consider the book's evidence, limitations and how it compares with other sources.
How good is it — where the book stands against the field, what it leaves open, and when to trust it.
- — Its positioning, its critique, its blind spots
- — When to apply it — and when not
- — The evidence behind the advice
Book profile · in the corpus
This book’s model, against the corpus
7 of 8 constructs align with the field · 1 the book adds · 3 where it diverges · the field spans 30 constructs across 21 books
Shared with the corpus — corroborated by other sources
This book's own emphasis — where it's the authority
Where it diverges — the book and the field pull apart
The corpus adds — from 20 other sources this book doesn't cover
The full field guide folds in ideas this book doesn’t reach — drawn from 20 further sources and cited in the full model.
This book’s place in the corpus
Why the corpus guide, not just this book
The book stands on classical software-measurement theory, separating internal attributes (size, structure) from external ones (reliability, maintainability, effort), and is the authority on how to validly measure and relate them. The reconciled field-guide still adds delivery performance, architecture, culture and estimation practice that the book's product-centric model does not cover.
This guide stands on the shoulders of this book and 20 other sources — every claim cited, the disagreements named.
Read it closely
The book, examined
Not a summary — a close analytical reading: how the book is built, what it leaves open, and where it falls short.
How it’s built — the argument in order
- 01Preface: the gap between how we measure and how we could — States the problem: measurement is widely used, but practice lags potential for lack of a coordinated framework. Traces the three editions (measurement theory and graph theory in the first, practical and goal-directed measurement in the second, OO, agile, model-driven development and Bayesian networks in the third). Names the audiences: students, researchers, and managers building a measurement program.
- 02Part I – Why and how we measure (fundamentals) — Builds the conceptual toolkit: representational measurement theory (entities, attributes, empirical versus formal relation systems, mappings, scales), the goal-driven GQM framework, empirical investigation by experiments and case studies, data collection, and statistical analysis. The analysis chapters move from classical techniques to causal models and Bayesian networks, which the book presents as the more rational basis for prediction and decision under uncertainty.
- 03Chapter 2 (§2.2.1) – Defining attributes before measuring them — Warns against rushing to build mappings and manipulate numbers without a real-world model of the attribute. The IQ-test dog cartoon is the illustration. Prescribes a comprehensive set of characteristics suited to the entity, linked by a model, with a measure for each and the representation condition as the check.
- 04Worked case: cyclomatic number as 'complexity' — Shows a popular measure being used as a definition of complexity without a model of complexity. Tests the relation for a strict weak order (negative transitivity) on three flowgraphs. Programmers cannot agree whether x is more complex than z, though the numbers (3, 2, 2) force x > z. Concludes the measure counts independent paths but is not a comprehensive complexity measure and does not sit on an ordinal scale.
- 05Pragmatic turn: combining sub-attributes into a ranking (Examples 2.27–2.28) — Accepts that decisions sometimes force a single ordering (coat, contact-management program, safest system, choice of design technique). A weighted combination of component measures is then unavoidable, and the weights depend on context: home user versus network use, price versus reliability.
- 06Part II – Measuring software engineering attributes — Applies the framework to specific internal attributes (size, structure) and external ones (quality, reliability, maintainability, usability, security), with many examples and case studies. Internal measures serve as early predictors of external ones, and those predictions need local validation.
- 07Chapter 11 – Software reliability: models — Introduces reliability growth models, including Littlewood–Verrall and non-homogeneous Poisson process models. Ends with general comments on the models.
- 08Chapter 11 – Predictive accuracy and recalibration — Judges the models on how well they predict. Covers bias (the u-plot), noise, the prequential likelihood function, and choosing the best model. Then shows how to recalibrate growth predictions.
- 09Chapter 11 – Operational environment and wider aspects — Stresses that reliability depends on the operational profile and extends beyond failure-time modelling. Followed by a summary, exercises, further reading, solutions to selected exercises, bibliography and index.
What it leaves unsolved
What does it actually mean for a module or program to be 'complex'?
The text says few researchers have built real-world models of complexity. It shows that cyclomatic number fails as a comprehensive measure because programmers disagree on comparisons. The sub-attribute model that would replace it is not supplied in these passages.
How should sub-attribute measures be combined into a single ranking, and who sets the weights?
Example 2.28 concedes that decisions force a combined preference and that weightings vary by context. It gives no principled way to choose weights or to show the combination respects the representation condition.
Do predictive relationships between internal attributes (size, structure) and external attributes (reliability, maintainability) carry across contexts?
The book says these relationships must be validated within each specific context. That leaves open how much a validated model can be reused, and at what cost to a new organization.
Which reliability growth model should a practitioner trust?
Several competing models are covered (Littlewood–Verrall, NHPP and others). Predictive accuracy needs separate checks for bias and noise, and recalibration is offered as a corrective. That implies no model is reliably best in advance and the choice has to be made empirically each time.
How far does reliability prediction depend on the operational environment, and what lies beyond failure-time models?
The chapter flags the importance of the operational environment and 'wider aspects' of reliability. The outline suggests these are treated more briefly than the statistical models.
Why does the gap between measurement practice and potential persist?
The Preface blames the lack of a coordinated framework. Growing acceptance of empirical methods and CMMI suggests other causes (cost, organizational culture, skills) that the book does not examine.
Where it falls short — a fair critique
The cyclomatic discussion argues that no single number can capture complexity. It then says we must combine sub-attributes into one real-valued ranking, as in the coat and software-purchase examples. The weighted combination is justified by necessity, not by the representation condition the book otherwise demands. The reader is left unsure when a composite measure counts as valid and when it is only a convenience.
The proper alternative is stated but not demonstrated in these passages. The book calls for a model of complexity with characteristics, each measured and linked by a model. It does not show a worked example of such a model, so cyclomatic number is rejected without a fully developed replacement.
The IQ-test dog cartoon is whimsical and rhetorical. The point that attributes must be defined for the entity is sound. The book then waves at the controversy over human IQ ('many people have argued') without evidence, so the analogy persuades more than it demonstrates.
The cyclomatic test depends on programmers' intuitions about flowgraphs where consensus is lacking. The disagreement is shown by assertion, not by empirical data from a survey. The conclusion that the relation is not a strict weak order therefore rests on an informal appeal to non-agreement. A stricter empirical relation system could be built, or the intuitions could be tested.
The claim that classical statistics is of limited use because software data are non-normal can read as too strong. Non-parametric, rank-based and robust methods are classical tools that handle non-normal data. Setting Bayesian networks against 'classical' statistics risks understating those options, and the move to causal modeling needs to be justified on grounds other than non-normality.
The Preface treats CMMI as the commonly used measure of organizational maturity and presents the rise of empirical methods as progress. It does not mention critiques that maturity levels may not predict product quality, or that agile and model-driven methods challenge process-centred measurement. The new material on agile and design patterns is announced but not shown here, so its adequacy cannot be assessed.
The book is very broad, covering theory, GQM, experiments, statistics, causal models and many attribute chapters. The reliability chapter's outline shows long lists of models and diagnostics. Without synthesis, a practitioner may find it hard to pick a small, actionable metric set, which was the stated aim of goal-directed measurement.
Before you apply it
Using it well
Where the method fits, who it’s for, and the honest case for and against — so you apply it where it works.
Is this book for you?
For you if
- You are a software engineer, manager or student who wants to move beyond ad-hoc metrics to a defensible measurement program
- You teach or take a course on software metrics, quality assurance or empirical software engineering
- You need to justify why a metric is valid and what its scale permits
- You are a researcher or practitioner who needs a broad reference on size, structure, quality, reliability, usability and security measures
Skip it if
- You only want a short list of ready-to-use KPIs with no theory
- You have no appetite for formal definitions such as scales, mappings and relations
- You need only a deep treatment of one narrow specialty such as reliability modelling or a specific agile metrics toolkit
Need first
- Basic software engineering knowledge of the lifecycle, testing and design
- Elementary statistics and probability; the reliability and Bayesian chapters need more
- Some comfort with basic set, relation and graph notation (flowgraphs)
- A concrete goal or problem in your organisation to apply GQM to
When it applies — and when it doesn’t
- Setting up a new measurement program and deciding which metrics to collect — GQM ties each metric to a stated goal and question, so you avoid collecting data for its own sake.
- Defining a metric for a fuzzy concept like 'complexity' or 'quality' — First model the attribute and its sub-attributes, then check the representation condition; the cyclomatic number example shows what happens when you skip this.
- Predicting outcomes or supporting decisions under uncertainty with sparse or mixed evidence — Causal models and Bayesian networks are presented as a more rational basis for combining evidence and expert judgement.
- Evaluating a new tool, method or technique — The empirical-investigation chapters cover how to design experiments and case studies so the evaluation is credible.
- Forced to rank or choose among options (tools, designs, products) across several attributes — Combining sub-attributes into one ranking is sometimes unavoidable, but the weights are context-dependent and subjective, so make them explicit.
- Predicting reliability or maintainability from early size and structure measures — Internal-to-external predictions must be validated empirically in your own context and cannot be assumed to transfer.
- Analysing skewed, non-normal software data with classical statistical tests — The book flags significant limits of classical methods on such data, so check assumptions and consider alternatives.
- Forecasting reliability growth from failure data — Model predictive accuracy varies, so use the u-plot and prequential-likelihood checks and recalibrate before trusting a model.
- Using the book as a quick tactical checklist for a small agile team — The theory is heavy and the agile coverage is a newer addition, so pull out only the GQM and validation practices you need.
- Using a single number such as the cyclomatic number as a comprehensive complexity score — The book shows it fails the strict-weak-order requirement for an ordinal scale, so it counts independent paths but does not measure complexity overall.
- Reaching for a metric just because the tool produces it, with no model of what it means — Manipulating numbers without grounding in the empirical relations is the exact failure the book warns against, as in its IQ-for-dogs example.
The honest case
Strongest case for
- Without a clear empirical meaning, a metric invites false conclusions, and the representation condition gives a principled test of what a number can legitimately say
- GQM keeps measurement tied to decisions, which prevents wasted effort and metric overload
- Decomposing 'quality' and 'complexity' into sub-attributes matches real practice: the cyclomatic number is useful for counting paths but misleading as a total complexity score
- Requiring context-specific empirical validation of predictors guards against folklore and one-size-fits-all thresholds
- Bayesian causal models handle uncertainty, small samples and expert knowledge better than significance testing on non-normal data
Strongest objection
- Strict measurement theory can be too demanding for working teams, and many useful indicators would fail its formal conditions
- As the book itself concedes, practitioners often must collapse sub-attributes into a single ranking, which means the rigorous ideal gets compromised anyway
- Much of the formal apparatus (reliability growth models, graph-theoretic metrics) predates modern practices such as agile and continuous delivery, so it may fit them awkwardly
- Heavy emphasis on validation and modelling can slow decisions, and Bayesian networks need priors and expertise many organisations lack
- The framework gives no guarantee that organisations will actually adopt it, since the gap between how we do measure and how we could measure persists despite decades of the book's influence
The model's constructs are drawn from the source element(s); load-bearing constructs are corroborated across the shelf, emerging ones are flagged.
Ideas covered by the source notes
- Internal Product Size
- Internal Product Structure
- Development Process Quality
- Fault Proneness
- Comprehensibility
- Software Reliability
Movement V
Measure
Use available assessments to reflect on what you have learned.
A way to gauge yourself against the book's model, and the instruments it gives you.
- — A self-check built from the book
- — Instruments and what you'd measure next
Learning curriculum
After this book, you can…
The book's learning objectives, classified by Bloom's taxonomy and ordered so each builds on the ones before it.
- explainAfter this book you can explain the representational theory of measurement (entities, attributes, empirical and numerical relation systems, mappings, representation condition) and define measurement as the rule-based assignment of numbers or symbols to attributes of real-world entities.Check: Short-answer or worked exercise: given an entity and attribute (e.g., program size, 'taller than'), identify the empirical and numerical relation systems and state what the representation condition requires.
- classifyAfter this book you can define attributes of software entities (products, processes, resources) in the real world before choosing a measure, and distinguish internal from external attributes.Check: Given a list of software attributes (e.g., size, cyclomatic number, reliability, maintainability), classify each by entity class and internal/external type and critique a premature definition such as equating complexity with the cyclomatic number.
- deriveAfter this book you can apply the Goal-Question-Metric (GQM) framework to derive goals, questions and metrics for a software project or organization.Check: Given an organizational scenario (e.g., improving inspection effectiveness), produce a GQM tree with goals, questions and metrics, and justify each metric's link to the goal.
- determineAfter this book you can determine the scale type (nominal, ordinal, interval, ratio, absolute) of a given software measure and select the statistical operations that are meaningful for that scale.Check: Exercise: for several measures (LOC, defect severity ranking, McCabe number, MTTF), identify the scale and justify which summary statistics (mean, median, mode) are meaningful.
- measureAfter this book you can measure internal product size (length, functionality, complexity of code, design, and specification) with established metrics and critique their strengths and limitations.Check: Compute LOC, Halstead, and function-point-style size measures for sample artifacts and compare their suitability as predictors of effort.
- planAfter this book you can plan and carry out data collection—defining what data is needed, how it is gathered and stored, and how its quality is ensured—to support a measurement program.Check: Create a data-collection plan, including defect and effort forms, for a given GQM goal, and evaluate sample data for completeness and consistency.
- estimateAfter this book you can estimate development effort and manage resources and project risk using size, process and resource measures, and combine them to track progress and support decisions.Check: Given project data, produce an effort estimate using a size-based model, state its uncertainty, and discuss how process quality and resource factors adjust it.
- analyzeAfter this book you can select and apply appropriate statistical analysis techniques to software data (distributions, outliers, correlation, regression, tests), and identify the limitations of classical methods when data are non-normal or small-sample.Check: Given a software data set, choose and perform suitable descriptive and inferential analysis, justify the choice given the scale and distribution, and interpret results with caution about assumptions.
- assessAfter this book you can measure internal structural attributes (control-flow, data-flow, modularity, coupling, cohesion, object-oriented structure) and use them to assess comprehensibility, maintainability and fault proneness.Check: Given module/flowgraph or class diagram examples, compute cyclomatic number, coupling and related measures and discuss how well they indicate comprehensibility or fault proneness.
- designAfter this book you can design an empirical investigation (formal experiment, case study, or survey) to evaluate a software method, tool or technique, stating hypotheses, treatments, controls and threats to validity.Check: Produce a written study plan for evaluating a tool or technique, including hypothesis, experimental design choice, confounding factors, and a rationale for experiment vs. case study.
- constructAfter this book you can distinguish correlation from causation and build and interpret a simple Bayesian network causal model to support prediction and risk-based decision making under uncertainty.Check: Construct a small Bayesian network for a problem such as defect prediction (e.g., process quality, size, defects found), enter evidence, and explain how the updated probabilities inform a decision, noting why regression alone is misleading.
- evaluateAfter this book you can estimate and evaluate software reliability using failure-data models (e.g., reliability growth models), assess predictive accuracy (u-plot, prequential likelihood), and recalibrate predictions with attention to the operational environment.Check: Given inter-failure time data, fit a reliability growth model, compute reliability measures such as MTTF, assess model accuracy for bias and noise, and recommend the best model with caveats about the operational profile.
- validateAfter this book you can validate a proposed software metric by checking it against the representation condition and by assessing it as part of a prediction system.Check: Case-based task: given a proposed metric and empirical observations about the attribute, argue whether it is valid, identifying where it violates empirical relations.
- judgeAfter this book you can evaluate whether internal-attribute measures can serve as predictors of external attributes (e.g., fault proneness, maintainability), and judge that empirical validation within a specific context is required, recognizing that no single measure captures 'quality' or 'complexity'.Check: Critique a claim that a structure metric predicts faults or maintenance effort, identifying needed empirical evidence and decomposing a broad concept like quality into measurable sub-attributes.
How to measure it
Turning each idea into a measure
For each construct: how to operationalize it, the observable signals to look for, and how well it holds up.
Measured by counting defined atomic units within a software artifact. For source code, this is typically Lines of Code (LOC) with specific counting rules, number of statements, or bytes. For specifications, it is often measured using Function Points (FP).
- The output of a static analysis tool that counts lines of code.
- The result of a formal Function Point analysis.
- The number of classes or modules in a design document.
Typically measured on a ratio scale, which allows for meaningful arithmetic operations like calculating averages or ratios (e.g., LOC/person-month).
Must be validated in the 'narrow sense' by demonstrating it satisfies properties like non-negativity, null value, and additivity. Different size measures capture different aspects and are not interchangeable. · Reliability of measurement is high when automated tools are used with consistent counting rules.
Measured by applying graph-theoretic algorithms to models of the software. For example, control-flow complexity is measured by McCabe's cyclomatic number on a control-flow graph. Coupling and cohesion are measured by counting connections between and within modules in a design model.
- High cyclomatic complexity score for a function.
- High fan-in/fan-out count for a module.
- Low cohesion score (e.g., LCOM) for a class.
- Violation of architectural layering principles.
Different structural measures exist on different scales. Counts like cyclomatic number are on a ratio scale. Some cohesion measures are normalized to an interval scale. Must be analyzed according to their specific scale properties.
Should be validated against a set of formal properties for each specific attribute (e.g., coupling properties, cohesion properties). The book cautions against using a single metric as an overall 'complexity' measure. · Measurement is reliable when performed by consistent static analysis tools.
Assessed through process audits against established frameworks like the Capability Maturity Model Integration (CMMI). It can also be measured by tracking metrics related to process activities, such as defect removal efficiency of inspections or test coverage achieved.
- Organization's CMMI rating.
- Existence of documented standards and procedures.
- Data from code inspection reports showing high defect detection rates.
- Records of high test coverage percentages achieved.
CMMI levels are on an ordinal scale. Defect removal efficiency is a ratio scale measure.
Validity depends on the rigor of the assessment framework (e.g., CMMI) and the accuracy of the underlying process data collected. · Reliability of assessment depends on the training and consistency of the assessors or the data collection process.
Operationally defined by creating a predictive model. The model is typically a statistical or causal model (like a Bayesian network) that uses internal product metrics (e.g., LOC, coupling, complexity) from a component as inputs to predict the likelihood of it belonging to a 'faulty' or 'not faulty' class, based on historical data.
- A module consistently flagged as 'high risk' by a static analysis tool.
- Historical data showing that modules with similar metric profiles have had high defect counts.
- Output of a classification tree or Bayesian network predicting a high probability of defects.
Can be expressed as a probability (ratio scale) or a classification (nominal/ordinal scale, e.g., 'low', 'medium', 'high' risk).
Validation of fault-proneness prediction systems is critical and must be done empirically by comparing predictions against actual defect data, as discussed in Chapter 3. · Reliability of the prediction depends heavily on the quality of the historical data used to train the model.
Measured in a controlled setting by observing the time or effort required for a person to answer specific questions about an artifact or to perform a defined modification task. Can also be assessed via subjective ratings from experts on an ordinal scale.
- A developer quickly understanding and successfully modifying a piece of code.
- High scores on a survey asking maintainers to rate the clarity of a design document.
- Low number of questions asked during a code walkthrough.
Time-based measures are on a ratio scale. Subjective ratings are on an ordinal scale.
Validity of objective measures depends on good experimental design. Validity of subjective measures depends on the expertise and consistency of the raters. · Can be low due to high variability among individuals. Reliability is improved by using multiple raters or subjects.
Measured by collecting data on the execution times between successive failures during operational testing or field use. This data is then used to parameterize and evaluate a software reliability growth model, which provides predictive measures like Mean Time To Failure (MTTF).
- Failure reports from users with timestamps.
- System logs recording execution time between crashes.
- Increasing time intervals between observed failures during system test.
Time-based measures like MTTF are on a ratio scale. Probabilities are on a ratio scale.
The validity of reliability predictions depends critically on the predictive accuracy of the chosen model, which must be assessed using techniques like u-plots and prequential likelihood. · Predictions can be noisy. The book recommends using recalibration techniques and comparing multiple models to improve confidence.
Measured externally by tracking the process of maintenance. Key metrics include Mean Time To Repair (MTTR), which is the average time taken to analyze, change, and re-validate the software after a change request. The number of modules modified per change is also an indicator.
- Maintenance logs showing time spent on fixing bugs.
- Change control records indicating the scope and effort of enhancements.
- Low MTTR for reported issues.
- A small number of modules needing changes to implement a new feature.
Effort and time-based measures are on a ratio scale.
Directly measuring the maintenance process provides a valid external view. Using internal structural metrics as predictors of maintainability requires empirical validation of the predictive link. · Data collection for maintenance effort needs to be consistent, distinguishing between analysis, change, and testing time.
Measured by aggregating labor hours or months from team members' timesheets or other project accounting data. It is often broken down by development phase (e.g., design effort, coding effort).
- Completed timesheets for project staff.
- Project plan burn-down charts.
- Final cost accounting report for a project.
Measured on a ratio scale (person-hours, person-months).
Validity depends on accurate and complete time recording by all team members. The scope of activities included (e.g., management, documentation) must be clearly defined. · Can be unreliable if time reporting is inconsistent or inaccurate.
Self-assessment
Where would you like to improve?
This is a structured self-diagnostic built from the model — a mirror for reflection, not a validated psychometric scale. For validated measurement, see the instruments below.
1 = Strongly Disagree · 7 = Strongly Agree
Proposed measures — starter instruments where no validated one was found
Internal Product Size Measurement Practice Index (proposed)
proposed · not validatedRated for your team or hiring process — not a personal self-check.
- Size of each software product artifact (code, design, specification) is measured statically with a documented, consistently applied counting rule.
- Size measures are collected automatically from the product repository at every release or baseline and stored in a retrievable history.
- Size data are reviewed against stated thresholds or baselines, and deviations trigger a recorded follow-up action.
Scale: 1–7 (Strongly Disagree → Strongly Agree), rated by an evaluator or the team. Average the items; treat ≤3 as a gap to close in the process.
Internal Product Structure Measurement Practice Index (proposed)
proposed · not validatedRated for your team or hiring process — not a personal self-check.
- Structural attributes such as coupling, cohesion, control flow complexity, and dependency relationships are measured from the product itself using defined tools or procedures.
- Component interconnection data (e.g., dependency graphs or call hierarchies) are generated and kept current for each release.
- Structural measures are compared with documented acceptance limits, and components exceeding those limits are logged for review or refactoring.
Scale: 1–7 (Strongly Disagree → Strongly Agree), rated by an evaluator or the team. Average the items; treat ≤3 as a gap to close in the process.
Development Process Quality Index (proposed)
proposed · not validatedRated for your team or hiring process — not a personal self-check.
- Design, coding, inspection, and testing activities are defined in written procedures that are followed and available to all team members.
- Process progress and results, including inspection findings and defect data, are visible on shared records or dashboards that are updated at least once per iteration or release.
- Process effectiveness is evaluated periodically using collected data, and the resulting improvements are documented and implemented.
Scale: 1–7 (Strongly Disagree → Strongly Agree), rated by an evaluator or the team. Average the items; treat ≤3 as a gap to close in the process.
Sources
- Software Metrics A Rigorous and Practical Approach Edition 3 — Norman Fenton James Bieman · A comprehensive guide that applies formal measurement theory and a goal-oriented framework to software engineering, enabling practitioners to rigorously define, validate, and use metrics for understanding, controlling, and improving software products, processes, and resources.
The cheat sheet
Everything, on one page
One key takeaway from each section, with links to read more.
- Internal Product SizeSize is multidimensional; choose length, functionality, or design-level units to match the question you are asking.
- Internal Product StructureStructure measures describe the shape of a design; they do not grade it.
- Development Process QualityProcess quality shapes the odds of good outcomes; it does not certify any given product.
- Fault PronenessProneness is a latent property estimated before testing, not a count of defects found.
- ComprehensibilityComprehensibility is a human-centered outcome and must be measured with people, not only with code metrics.
- Software ReliabilityReliability is measured from failures under a stated usage profile, not by counting faults.
- Software MaintainabilityMaintainability is observed through the effort of real changes, not computed from code.
- Development EffortEffort needs a stated boundary and consistent recording before any model is trusted.
Publication details
Consult the sources listed in this guide for further reading. Edition 1 · Updated 2026-10-03.
Explore related books and profiles in the library.