Its useful for a Software Practitioner to understand the factors affecting Software Cost in order to arrive at close to perfect cost estimates. Most of these are classical factors and is true all the time as long as human write computer programmer in 0s and 1s. The various factors affecting Software cost estimation are as follows –
Product complexity and its effect on software cost is studied by dividing the software product into 3 general categories – Application, Utility and System level software products/features/components. Generally, system level software is considered to be complex enough to build. If we think in pure academic terms, according to Boehm, the programmer months (PM) is evaluated as –
Application PM = 2.4 * (KLOC)1.05
Utility PM = 3.0 * (KLOC)1.12
System level App. PM = 3.6 * (KLOC)1.2
where KLOC = 1000 lines of code
If we take KLOC as 60 K, then,
aPM : uPM : sPM = 1 : 1.7 : 2.8; i.e., a System Level Software Product requires 3 times PM, than that of an application level Software Product.
Now, the total development time is evaluated as –
aTDEV = 2.5*(PM)0.38
uTDEV = 2.5*(PM)0.35
sTDEV = 2.5*(PM)0.32
Interestingly, it is seen that the development time is the same for all the 3 types of software products ~ 18 months, regardless of their complexity level.
Thus for a 60 KDSI software product, the number of programmers is evaluated as –
Application level -> 176.6 PM / 17.85 months = 9.9 developers
Utility level -> 294 PM / 18.3 months = 16 developers
System level -> 489.6 PM / 18.1 months = 27 developers
The above values are historically experimental and are based on empirical values and hence will not give desired results in all cases.
2. Product Size
Various experiments shows that the total effort increases at exponential rate slightly greater than 1 when KDSI is increased and thus increases the total cost.
Individual ability has great influence on the extra effort to be put on software development. On very large projects, the difference in individual programmer ability involving 5 and <5 programmers, the individual differences in ability is significant.
4. Available Time
Total project effort is sensitive to the calendar time available for project completion. Generally if the development time is compressed or expanded from the optimal time, software projects require more total effort. Software projects are generally rewarded is development time is doubled and is constrained if total development time is compressed. Also, if development time is increased beyond a certain limit, the total effort is increased rather than decreased.
5. Required level of reliability
Software reliability characteristics such as accuracy, robustness, completeness, consistency, user-friendliness, error-free operation etc when built into the software product will required extra effort and cost. The desired level of reliability should be established during the planning phase by considering the cost of software failures such as inconvenience of user or risk to human life (eg: an sensory device that controls Human Heart function) .
6. Level of Technology
The level of technology in a Software development project is reflected by the programming language/platform/frameworks/tools used to analyse, design, develop, test, deploy and monitor Software Product. Ensuring foundational aspects of the technology such as Object Oriented Programming, run-time type checking, strict typing, data abstraction, clean compilation techniques, exception handling, interrupt handling and concurrency mechanisms, support of deployment into multiple OS platforms and cloud, etc will improve developer productivity, software reliability which has potential to significantly cut some major cost and effort in the long run.