|
Time
is money, i.e. elapsed time in weeks or months, and development effort
in person-months. When multiplied by the weighted average cost of a software
engineer to give overall cost. The cost of a person is 2-3 times their
salary, when benefits and overhead are factored in.
Cost estimation is "notoriously difficult"
Principles:
- Divide and conquer - sum the estimates of subsystems and activities.
- Include all activities - e.g. prototyping, design, code inspection,
testing, debugging, document preparation, deployment.
- Base cost on past experience combined with details of the current
project
- no two projects are the same
- use personal judgment of experts
- use an algorithmic model: factors are number of use cases, number of
distinct functional requirements, number of classes, number of widgets
(controls) in the GUI, number of lines of code. COCOMO use
E = abN^c where a and b are constants depending on the organization of
the project and the process and people involved, N is the factor being
measured, and c < 1 when there can be economies of scale, and c > 1 when
the project
is expanding. Another model uses "feature points" which is a weighted
sum of the feature measures.
- Be sure to account for differences (i.e. no false analogies between
projects). Factors:
- different developers
- different processes and maturity levels
- different customers and users
- different schedule demands
- different technology
- different technical complexity
- different domains
- different levels of stability
- Anticipate the worst case and plan for contingencies. i.e. be both
optimistic and pessimistic
- Combine independent estimates. e.g. the Delphi technique. Different
teams would develop different estimates, then compare notes and repeat
until a consensus is obtained.
- Revise and refine the estimate as work progresses. Tie this to risk
management. The better the cost estimate the more accurate the risk
assessment.
|