![]() ![]() |
|
Revolutive IT |
Software Complexity T
his article shows you many ways of estimating
software complexity. In order to do that, many metrics have been created for this purpose.
Software complexity is one branch of software metrics that is focused on direct
measurement of software attributes, as opposed to indirect software measures such as
project milestone status and reported system failures. There are hundreds of software
complexity measures, ranging from the simple, such as source line of code, to the
esoteric, such as the number of variable definition/usage associations. An important criterion for metrics selection is uniformity of application, also known
as "open reengineering". The reason "open systems" are so popular for commercial
software applications is that the user is guaranteed a certain level of interoperability
- the applications work together in a common framework, and applications can be ported
across hardware platforms with minimal impact. The open reengineering concept is similar
in that the abstract models used to represent software systems should be as independent
as possible of implementation characteristics such as source code formatting and
programming language. The objective is to be able to set complexity standards and
interpret the resultant numbers uniformly across projects and languages.
A particular complexity value should mean the same thing whether it was calculated
from source code written in Ada, FORTRAN, or some other language. The most basic
complexity measure, the number of lines of code, does not meet the open reengineering
criterion, since it is extremely sensitive to programming language, coding style, and
textual formatting of the source code. The cyclomatic complexity measure, which
measures the amount of decision logic in a source code function, does meet the open
reengineering criterion. It is completely independent of text formatting and is nearly
independent of programming language since the same fundamental decision structure are
available and uniformly used in all procedural programming languages. McCabe Metrics Cyclomatic Complexity Metric (v(G)) It is also the most widely used memeber of a class of static software metrics. Cyclomatic complexity may be considered broad measure of soundness and confidence for a program. Introduced in 1976 by Thomas McCabe, it measures the number of linearly-independant paths through a program module. This measure provides a single ordinal number that can be compared to the complexity of other programs. Cyclomatic complexity is often referred to simply as program complexity, or as McCabe's complexity. It is often used in concert with other software metrics. As one of the more widely-accepted software metrics, it is intended to be independant of language and language format. Cyclomatic complexity can be applied in several areas, including: Actual Complexity Metric (ac) Module Design Complexity Metric (iv(G)) Essential Complexity Metric (ev(G)) Pathological Complexity Metric (pv(G)) Design Complexity Metric (S0) Integration Complexity Metric (S1) Object Integration Complexity Metric (OS1) Global Data Complexity Metric (gdv(G)) McCabe Date-Related Software Metrics Date Complexity Metric (DV) Tested Date Complexity Metric (TDV ) Date Reference Metric (DR ) Tested Date Reference Metric (TDR ) Maintenance Severity Metric (maint_severity) Date Reference Severity Metric (DR_severity) Date Complexity Severity Metric (DV_severity ) Global Date Severity Metric (gdv_severity) McCabe Object-Oriented Software Metrics ENCAPSULATION Percent Public Data (PCTPUB) Access to Public Data (PUBDATA) POLYMORPHISM Percent of Unoverloaded Calls (PCTCALL) Number of Roots (ROOTCNT) Fan-in (FANIN) QUALITY Maximum v(G) (MAXV) Maximum ev(G) (MAXEV) Hierarchy Quality(QUAL) Other Object-Oriented Software Metrics Depth (DEPTH) Lack of Cohesion of Methods (LOCM) Number of Children (NOC) Response For a Class (RFC) Weighted Methods Per Class (WMC) Halstead Software Metrics Gives the primary measure of Algorithm complexity, measured by counting operators and operands Program Length Program Volume Program Level and Program Difficulty Intelligent Content Programming Effort Error Estimate Programming Time Line Count Software Metrics Lines of Code Lines of Comment Lines of Mixed Code and Comments Lines Left Blank Henry and Kafura metrics Coupling between modules (parameters, global variables, calls). Bowles metrics Module and system complexity; coupling via parameters and global variables. Troy and Zweben metrics Modularity or coupling; complexity of structure (maximum depth of structure chart); calls-to and called-by. Ligier metrics Modularity of the structure chart. The top 10 mistakes in IT Measurements Betting the measurement program on a single metric Trying to find a single metric that solves all the problems and has no evil The quest for an industry standard set of measures Not linking measures to behaviors Assuming that one set of measures will be good for "All Time" Measuring the wrong IT output Measuring in business terms, but the wrong business terms Failure to quantify in business terms; failure to plan for benefits Neglecting the full range of IT related outcomes Lack of commitment; treating measurement as a non-value added add-on Our solutions are the most efficient, flexible, quality-based and cheaper of the market, due to our fully innovative and customer-driven approach. Discover them and compare them to the solutions provided you by our competitors. |
Copyright © 2002 Atlantis Technologies. All rights reserved. |