Software measurement has become an art, a basic skill that every software engineer or a manager must possess.
It is needed to assess the status of the software projects, quantify software products, software development processes, and software development resources.
It plays a vital role in the evolution of a software organization through manifesting itself in various forms of measurements and metrics for measuring activities in different phases of the Software Development Life Cycle (SDLC). The field is constantly evolving to provide new, better techniques to support existing (like, waterfall) and more recent software development methodologies (such as Agile and Lean), allowing project managers to visualize and manage the software development process to optimize the software productivity across the organization.
Software Metric
Software metric is a measurement of a software entity and it is defined as a Measure of the extent of degree to which a product possesses and exhibits a certain quality, property, or attribute
“Measure of the extent of degree to which a product possesses and exhibits a certain quality, property, or attribute” ~ Barry Boehm
Software metrics give a quantitative view of software and its development. They can be used to estimate project costs, to manage resources, to evaluate the effectiveness of programming methods and the reliability of a system. Technically, they can be used to measure changes in system, program complexity, programming effort, correctness, coverage, testability, accuracy, resource estimation, allocation of personnel, computer usage, reliability, fault tolerance, and so on. The data obtained from these measurements can be used by engineers and managers to improve and refine software methods and tools.
An example of a software metric is Fault Slip Through (FST). This metric has been developed at Ericsson as one of the measurements of project performance. It is used to measure a supplier’s ability to capture faults before making software delivery to a client. It is calculated as: [1 - FT Faults/All Faults] * 100%
Why Measure Software
Measurement is an essential part of science and engineering discipline. According to SWEBOK, software measurement is considered as a key activity in software engineering. In real world software industry, It is of high precedence to understand and efficiently manage software projects, improve software process, software productivity (in terms of quality) and profitability of an organization. For this reason, we measure software products, processes, and resources required in order to plan, control, estimate, predict, judge and finally to improve software development process, as needed by any software organization.
"Projects without clear goals will not achieve their goals clearly" ~ Tom Gilb
Today, most of the world depends on the usage of software applications. Example software products include application software, system software, business applications, real-time systems, embedded system software, and so on. To obtain both quantitative and qualitative benefits, measurements are done with clear objectives (measurable specific targets) in mind and with necessary parameters chosen. Without understanding what is required results in waste of time, effort, and degrade in measurement objectives.
The reasons behind using software are, they provide safety, very convenient to use, and they are the only way to interact with machines. People use software based on their cost, quality, safety and comfort provided. Every software organization strives hard in order to provide high quality reliable software to its customers at affordable prices. In order to improve quality, reduce development costs, minimize risks and other efforts, certain measures are considered and certain standards are followed.
"You cannot control what you cannot measure" ~ Tom DeMarco
To control software development process, each phase of the software development process must involve measurement. For example, software development has to be finished in a specified period. To answer this, we need to measure development costs involved, process model being used, team effort required to complete project, etc.
Challenges in Measuring Software Software measurement faces a number of new challenges whose solution requires latest innovative techniques. Every year, a number of techniques and measures have been proposed and published. These new techniques make use of existing theories and empirical analyses. Measurements in software engineering are very difficult because they are highly dependent on the complexity, process immaturity, and unreliable results.
Complexity A complex product might indicate problems in measuring the exact metrics. It might also show that the product is too complex to be easily evaluated.
Process Immaturity Chaotic development processes that rely on the heroic efforts of individuals can be said to lack maturity and will be less likely to repeatedly produce the same measurements.
Unreliable Results The metrics results are not as reliable as they only gives the guideline they should not be used as natural truth.
Ways to Measure Software Functional Size
There are a couple of standardized measurement models to measure the functional size of software in industry. Functional size of a software is related to the functionality aspect, which is the information processing capability that a software performs for its users. In order to measure software development process efficiency and effectiveness, software organizations engaged in software engineering deduced that determining software functional size is essential. Numerous methods have been proposed in the past, which were prone to several limitations such as scaling across an organization. To overcome them, Functional Size Measurement (FSM) was proposed as a technique for measuring software in terms of functionality it delivers. FPA Function Point Analysis is a software sizing measure put forth by Allan Albrecht of IBM in 1979. As a measuring technique, it quantifies functions contained within a software in terms that are meaningful to the software users. It assists in evaluation, planning, management, and control of software production.
COSMIC Common Software Measurement International Consortium method provides a standardized method of measuring a functional size of software (business application software and real-time software). It was accepted as an international standard by ISO/IEC in December 2002. It mainly focuses on measuring the functionality aspect of software. This involves applying a set of models, principles, rules, and processes to the Functional User Requirements (functions that the user has requested to be delivered) of a given piece of software, which results in a quantitative value representing functional size of that software.