# COSMIC functional size measurement

COSMIC functional size measurement is a method to measure a standard functional size of a piece of software. COSMIC is an acronym of COmmon Software Measurement International Consortium, a voluntary organization that has developed the method and is still expanding its use to more software domains.

## The method

The "Measurement Manual" defines the principles, rules and a process for measuring a standard functional size of a piece of software. Functional size is a measure of the amount of functionality provided by the software, completely independent of any technical or quality considerations. The generic principles of functional size are described in the ISO/IEC 14143 standard. This method is also an International Standard by itself. The COSMIC standard is the first of the old generation implementation of the ISO/IEC 14143 standard. There are also four first generation implementations:
* ISO/IEC 20926 - IFPUG function points
* ISO/IEC 20968 - Mk II function points
* ISO/IEC 24570 - Nesma function points
* ISO/IEC 29881 - FiSMA function points
These first generation functional size measurement methods consisted of rules that are based on empirical results. Part of the terminology that deals with users and requirements has overlap with similar terms in software engineering. They work well for the software domains the rules were designed for, but for other domains, the rules need to be altered or extended. Key elements of a second generation functional size measurement method are:
* Adoption of all measurement concepts from the ISO metrology
* A defined measurement unit
* Fully compliant with ISO/IEC 14143
* Preferably domain independent
The method is based on principles rather than rules that are domain independent. The principles of the method are based on fundamental software engineering principles, which have been subsequently tested in practice.
The method may be used to size software that is dominated by functionality to maintain data, rather than software that predominantly manipulates data. As a consequence of measuring the size, the method can be used to establish benchmarks of (and subsequent estimates) regarding the effort, cost, quality and duration of software work.
The method can be used in a wide variety of domains, like business applications, real-time software, mobile apps, infrastructure software and operating systems. The method breaks down the Functional User Requirements of the software into combinations of the four data movements types:
* Entry (E)
* Exit (X)
* Read (R)
* Write (W)
The function point count provides measurement of software size, which is the sum of the data movements for a given functional requirement. It may be used to estimate (and benchmark) software project effort, cost, duration, quality and maintenance work.
The foundation of the method is the ISO/IEC 19761 standard, which contains the definitions and basic principles that are described in more detail in the COSMIC measurement manual.

## The applicability of the COSMIC functional size measurement method

Since the COSMIC method is based on generic software principles, these principles can be applied in various software domains. For a number of domains guidelines have been written to assist measurers to apply the COSMIC method in their domain:
* Real-time Software Real-time software "controls an environment by receiving data, processing them, and returning the results sufficiently quickly to affect the environment at that time". The guideline describes how to use the generic principles in this environment.
* Service Oriented Architecture (SOA) This is a software architecture where services are provided to the other components by application components, through a communication protocol over a network. A service is a discrete unit of functionality that can be accessed remotely and acted upon and updated independently, such as retrieving a credit card statement online. The guideline describes how to measure the functional size of distinct components.
* Data WareHouse and Big Data is a field that treats ways to analyze, systematically extract information from, or otherwise deal with data sets that are too large or complex to be dealt with by traditional data-processing application software. The guideline describes how to transform the principles in that field to a functional size.
* Business Application Software This is software designed to perform a group of coordinated functions, tasks, or activities for the benefit of the user. Examples of an application include a word processor, a spreadsheet, an accounting application, a web browser, an email client, a media player, a file viewer, a flight simulator or a photo editor. Business Application Software contrasts with system software, which is mainly involved with running the computer. The guideline describes how to deal with application specific features, like data storage and retrieval.
To explain the use of the method a number of case studies have been developed. The method is of particular validity in the estimation of cost of software undertakings.

## The organization behind the method

The COSMIC organization commenced its work in 1998. Legally COSMIC is an incorporated not for profit organization under Canadian law. The organization grew informally to a global community of professionals. COSMIC is an open and democratic organization. The organization relies and will continue to rely on unpaid efforts by volunteers, who work on various aspects of the method, based on their professional interest.
The first generation functional size measurement methods consisted of rules that are based on empirical results. Some define their own terminology, which may have overlap with other terms in software engineering. They work well for the software domains the rules were designed for, but for other domains, the rules need to be altered or extended. Key elements of a second generation functional size measurement method are:
* Adoption of all measurement concepts from the ISO metrology
* A defined measurement unit
* Fully compliant with ISO/IEC 14143
* Preferably domain independent
The method is based on principles and rules that are domain independent. The principles of the method are based on fundamental software engineering principles, which have been subsequently tested in practice.