Introduction to Software Engineering/Quality/Metrics

From Wikibooks, open books for an open world
Jump to navigation Jump to search

A software metric is a measure of some property of a piece of software or its specifications. Since quantitative measurements are essential in all sciences, there is a continuous effort by computer science practitioners and theoreticians to bring similar approaches to software development. The goal is obtaining objective, reproducible and quantifiable measurements, which may have numerous valuable applications in schedule and budget planning, cost estimation, quality assurance testing, software debugging, software performance optimization, and optimal personnel task assignments.

Common software measurements[edit | edit source]

Common software measurements include:

  • Balanced scorecard
  • Bugs per line of code
  • COCOMO
  • Code coverage
  • Cohesion
  • Comment density[1]
  • Connascent software components
  • Coupling
  • Cyclomatic complexity
  • Function point analysis
  • Halstead Complexity
  • Instruction path length
  • Number of classes and interfaces
  • Number of lines of code
  • Number of lines of customer requirements
  • Program execution time
  • Program load time
  • Binary file|Program size (binary)
  • Robert Cecil Martin’s software package metrics
  • Weighted Micro Function Points

Limitations[edit | edit source]

As software development is a complex process, with high variance on both methodologies and objectives, it is difficult to define or measure software qualities and quantities and to determine a valid and concurrent measurement metric, especially when making such a prediction prior to the detail design. Another source of difficulty and debate is in determining which metrics matter, and what they mean.[2][3] The practical utility of software measurements has thus been limited to narrow domains where they include:

  • Schedule
  • Size/Complexity
  • Cost
  • Quality

Common goal of measurement may target one or more of the above aspects, or the balance between them as indicator of team’s motivation or project performance.

Acceptance and Public Opinion[edit | edit source]

Some software development practitioners point out that simplistic measurements can cause more harm than good.[4] Others have noted that metrics have become an integral part of the software development process.[2] Impact of measurement on programmers psychology have raised concerns for harmful effects to performance due to stress, performance anxiety, and attempts to cheat the metrics, while others find it to have positive impact on developers value towards their own work, and prevent them being undervalued.[5] Some argue that the definition of many measurement methodologies are imprecise, and consequently it is often unclear how tools for computing them arrive at a particular result,[6] while others argue that imperfect quantification is better than none (“You can’t control what you can't measure.”)[7]. Evidence shows that software metrics are being widely used by government agencies, the US military, NASA[8], IT consultants, academic institutions[9], and commercial and academic development estimation software.

References[edit | edit source]

  1. "Descriptive Information (DI) Metric Thresholds". Land Software Engineering Centre. Retrieved 19 October 2010.
  2. a b Binstock, Andrew. "Integration Watch: Using metrics effectively". SD Times. BZ Media. Retrieved 19 October 2010.
  3. Kolawa, Adam. "When, Why, and How: Code Analysis". The Code Project. Retrieved 19 October 2010.
  4. Kaner, Dr. Cem, Software Engineer Metrics: What do they measure and how do we know?
  5. ProjectCodeMeter (2010) "ProjectCodeMeter Users Manual" page 65 [1]
  6. Lincke, Rüdiger; Lundberg, Jonas; Löwe, Welf (2008), "Comparing software metrics tools" (PDF), International Symposium on Software Testing and Analysis 2008, pp. 131–142
  7. DeMarco, Tom. Controlling Software Projects: Management, Measurement and Estimation. ISBN 0-13-171711-1.
  8. NASA Metrics Planning and Reporting Working Group (MPARWG) [2]
  9. USC Center for Systems and Software Engineering [3]

External links[edit | edit source]