,

CHAPTER 7

COST ASSESSMENT

The accurate prediction of cost, including effort and schedule, required to accomplish various systems engineering activities in an organization is very important. Similarly, it is necessary to know the effectiveness that is likely to result from given expenditures of effort. When the costs of activities to be undertaken are underestimated, programs may encounter large cost overruns, which may lead to embarrassment for the organization. Associated with these cost overruns are such issues as delivery delays and user dissatisfaction. When costs are overestimated, there may be considerable reluctance on the part of the organization or its potential customers to undertake activities that could provide many beneficial results. Thus, cost is an important ingredient in risk management. In this chapter, we will examine costing in systems, software, and information technology development.

It is very important to note that a cost estimate is desired to predict or forecast the actual cost of developing a product or providing a service. There are many variables that will influence cost. The product or service scope, size, structure, and complexity will obviously affect the costs to develop it. The newness of the product or service to the development team will be another factor. The stability of the requirements for the product or service will be an issue as high requirements volatility over time may lead to continual changes in requirements and specifications that must be satisfied throughout the entire systems acquisition life cycle.

The integration and maintenance efforts that will be needed near the end of the acquisition life cycle surely influence costs. Something about each of these and other factors must necessarily be known to obtain a cost estimate. The more detailed and specific the definition of the product is, the more accurate we should expect the costs to be relative to the estimated costs for development and deployment of the product. One guideline we might espouse is to delay cost estimation until as late as possible in the product or service definition phase, and perhaps even postpone it until some development efforts have become known. If we wait until after deployment to obtain cost estimates, we should have an error-free estimate of the costs incurred to produce a product or system or service. This approach is hardly feasible or useful, as estimates need to be known early in the definition phase to determine whether it is realistic to undertake production.

Operating costs, once a solution is deployed, are important too. Operating costs can amount to 75% to 80% of the total costs of ownership. They can also be highly variable depending on the frequency of system use, the economy, inflation and wages, etc. Chapters 8 and 9 deal with operating costs to an extent, including uncertainties. Rouse (2010) addresses this issue in great depth as the economics of human systems integration are often dominated by these costs. Chapter 10 provides an overview of this material.

We also see that there is merit in decomposing an acquisition or production effort into a number of distinct components. A natural model for this is the life-cycle phases for production. We might, for example, consider the seven-phase software development life cycle of Boehm (1976a, b) or any of the systems engineering life-cycle models and develop a work breakdown structure (WBS) of the activities to be accomplished at each of these phases. The work elements for each of these phases can be obtained from a description of the effort at each phase, where we will concentrate on software effort:

Phase 1. Systems Requirements Definition. The specification of systems requirements is the first phase of effort. In implementing this phase, it is assumed that the system user and the systems analyst are sufficiently informed about what the new (or modified) system is intended to achieve so as to develop the system-level requirements to an acceptable extent such that they can be identified in sufficiently complete detail such that preliminary design can be initiated. All of this should be done before detailed design and coding may be initiated.

Phase 2. Software Requirements and Software Specifications. The development of the software requirements phase focuses on the outcomes of the system- or user-level requirements identification carried out in Phase 1 of this waterfall model of the software development life cycle. It is concerned with the nature and style of the software to be developed, the data and information that will be required, the associated structural framework, the required functionality, performance, and various interfaces. Requirements for both the system and the software are reviewed for consistency and then reviewed by the user to be certain that the software requirements faithfully interpret and produce the system requirements. A software requirements definition document is produced in this phase. It becomes a technology and a management guideline throughout all subsequent development phases, including validation and testing. These software requirements are then converted into a detailed software specifications, or requirements specifications, document.

Phase 3. Preliminary Design. The software specifications defined in Phase 2 are converted into a preliminary software product design in this phase, which is primarily aimed at further interpretation of the software specifications in terms of software system–level architecture. The product of this phase is an identification and microlevel definition of the data structure, software architecture, and procedural activities that must be carried out in the next phase. Data items and structures are described in abstract, or conceptual, terms as a guide to the detailed design phase. For this reason, this phase is often called preliminary conceptual design. Instructions that describe the input, output, and processing that are to be executed within a particular module are developed. Preliminary software design involves representing the functions of each software system in a way that these may readily be converted to a detailed design in the next phase.

Phase 4. Detailed Design. The preliminary design phase results in an insight into how the system is intended to work at a structural level and satisfy the technological system specifications. Detailed design phase activities involve definition of the program modules and interfaces that are necessary in preparation for the writing of code. Specific reference is made to data formats. Detailed descriptions of algorithms are provided. All of the inputs to and outputs from detailed design modules must be traceable back to the system and software requirements that were generated in Phases 1 and 2. In this phase, the system or software design is fine-tuned.

Phase 5. Code and Debug. In this phase, the detailed design is translated into machine-readable form. If the design has been accomplished in a sufficiently detailed manner, it may be possible to use automated code generators to perform all, or a major portion, of this task. After the software design requirements have been written as a set of program units in the appropriate high-level programming language, the resulting high-level code is compiled and executed. Generally, “bugs” are discovered, and debugging and recoding are done to verify the integrity of the overall coding operations of this phase.

Phase 6. Integration, Testing, and Preoperation. In this phase, the individual units or programs are integrated and tested as a complete system to ensure that the requirements specifications discussed in Phases 1 and 2 are met. Testing procedures center on the logical functions of the software. They assure that all statements have been tested and that all inputs and outputs operate properly. After system testing, the software is operated under controlled conditions to verify and validate the entire package in terms of satisfying the identified system requirements and software specifications.

Phase 7. Operations and Maintenance. This phase of the waterfall life cycle is often the longest from the perspective of the entire useful life of the software product. The phases involving detailed design, coding, and testing are usually the most effort intensive. In this phase, the system is installed at the user location and is tested, and then used, under actual operating conditions to the maximum extent possible. Maintenance commences immediately on detection of any errors that were not found during an earlier phase. The detection, diagnosis, and correction of errors are generally not the intended purpose of maintenance, however. Maintenance is primarily the proactive process of improving the system to accommodate new or different requirements as defined by the user after the initial product has been operationally deployed.

The phases enumerated above normally take place in the sequential manner described. However, considerable iteration and interaction occur between the several phases. Each software development organization tailors the process to meet the particular characteristics of the personnel of the organization and, potentially, the needs of users of the software product.

Figure 7.1 illustrates a hypothetical WBS for this development life cycle. We could base our estimates of cost on the detailed activities represented by this WBS, and a realistic WBS would be much more detailed than this, or we could develop a macrolevel model of development cost that is influenced by a number of primary and secondary drivers. One often-used approach is called activity-based costing (ABC). An unstated assumption in the development of Fig. 7.1 is that we are going to undertake a grand design type approach for system production. This figure and the associated discussion need some modification for any approach other than the grand design type approach.

Figure 7.1. Work Breakdown Structure for the Grand Design Waterfall Software Development Life Cycle.

image

We will examine model-based costing (MBC) and ABC approaches in this chapter. We will first discuss some generic issues relating to system and software productivity. This will include the nature of the variables that are important for these measures. Then, we will consider some early approaches. After this, we will examine some MBC approaches. Next, we will look at ABC approaches. Finally we will discuss some issues related to model and system evaluation. Much of our discussion concerns the engineering of information technology, systems, and services. In the end, we turn to a brief discussion of effectiveness.

7.1 MODEL-BASED PARAMETERS FOR PRODUCTIVITY

There are a number of ways in which we could define software productivity. We might be tempted to say that software productivity is equivalent to the number of lines of source code that are delivered to the customer per person-month (PM) of effort. We immediately sense that a real problem with this definition is that complexity of the software does not enter into it. Also, there is an implied assumption that all that is important about software is programming. So we might be tempted to associate this definition more with programmer productivity than with software productivity.

Even with this more restricted interpretation, we still may not have a very complete definition of programmer productivity. Our definition involves “lines of source code.” But what is a line of source code? A line of source code might represent a high-order language (HOL) line of source code. Even here, we must be concerned with whether we should include only retainable lines of code in the resulting compiled code or should also include such items as remarks statements that may be extraordinarily helpful in providing cues to the software structure. Also, we should perhaps include only those lines of source code that are delivered to the customer, and not all lines that were written and then perhaps discarded.

There are many concerns with an approach that suggests that the number of lines of code is an important and primary driver of software costs and schedule. Let us briefly examine some of these. An object line of code is a single machine language instruction either written as a machine language instruction or generated through some translation process from a different language. We immediately see a problem. Lines of code can be meaningful only at the end of a project after operational executable code is delivered and accepted by the client. Surely, delivered lines of code are not a meaningless measure of productivity. However, it is assumed that one line of code is equal to and has precisely the same value as any other line of code. Clearly, there is no reason whatsoever to accept this assertion.

Yet the number of source lines of code (SLOC) is often used as the primary driver of software cost estimation models. Often, this is modified to the term “delivered SLOC” (DSLOC) through the simple artifice of multiplying the estimate of SLOC by some fraction, which would generally depend on programmer experience and other variables. Boehm (1976a and b) delineates some of the difficulties with this metric, which are as follows:

1. Complex instructions, and complex combinations of instructions, will receive the same weight as a similarly long sequence of very simple statements.

2. This is not a uniform metric in the sense that similar length lines of machine-oriented language statements, higher order language statements, and very-high-order language statements will be given the same weight.

3. It may be unmotivated, truly productive work if programming teams learn that their productivity is measured in terms of the number of lines of code they write per unit time and then seek to artificially increase this productivity through writing many simple and near-useless lines of code.

4. It may encourage poor-quality code by encouraging rapid production of many sloppily structured lines of code.

We could continue this listing by noting that maintenance costs may well increase through the implied encouragement to produce many lines of code if these are produced without regard to maintainability. Transitioning to a new environment is especially difficult when many lines of carelessly structured code are involved.

Even if we could agree that SLOC or DSLOC is a worthwhile driver of costs, there would still remain a major problem in effectively estimating either quantity prior to the start of a software acquisition effort.

Productivity could also be defined in terms of an importance weighted sum of delivered functional units. This would allow us to consider the obvious reality that different lines of code and different software functional units will have different values. This is the basis for “function points” measurement method. It leads to an approach where software costs are measured in terms of such quantities as input transactions, outputs, inquiries, files, and output reports. These are software product quantities that can be estimated when the requirements definition document is developed. Such an approach will enable us to estimate the cost and schedule required to develop software, and perhaps even the size of the computer code that is a part of the software, in terms of:

1. the purpose to be accomplished, in terms of such operational software characteristics as the operating system used and application for which the software was developed, and development and test requirements for support software;

2. the function to be accomplished in terms of amount or size, complexity, clarity, and interrelation with other programs and computers;

3. use factors such as the number of users of code, sophistication of users, number of times code will execute, number of machines on which code will run, and hardware power;

4. development factors such as the operating system to be accommodated, development time available, development tools available, experiential familiarity of software development team, and the number of software modules.

Other taxonomies of factors for software development are possible. For example, we might identify seven cost and schedule drivers illustrated in Fig. 7.2. We could seek to develop a model for costing based on these drivers. In general, the important factors will include the people, process, environment, product, and computer system to be used. The major requirement is that the factors be significant, general, measurable, observable, and independent. This poses major difficulties, both for software costing and for software acquisition, as we shall soon see. We now turn our attention to some early models for software costing. Then we look at some more contemporary efforts that are, to some extent, based on these early efforts.

Figure 7.2. Some Cost Influences for Software Effort and Schedule Productivity.

image

7.2 EARLY MODELS FOR ESTIMATION OF COSTS, INCLUDING EFFORT AND SCHEDULE

Ideally, a software or system cost estimation model should describe the relationships among the characteristics of the overall acquisition effort so that we can determine the effort and schedule for acquisition from these relevant characteristics. The needed characteristics would usually exist at the level of the software or system specifications. It would be ideal if the estimation could be accomplished directly from user requirements, but this is generally not possible without many additional definitional efforts and assumptions.

Use of the software-level requirements specifications would also be satisfactory. If we had an automatic way of transitioning from system-level requirements to software requirements, and perhaps were able to solve the inverse problem as well, then knowledge of one would be equivalent to that of the other.

The features useful as input to cost and schedule estimation models should include descriptions of not only the software to be developed but also the characteristics of the developing organization, such as personnel experience and capability levels, microlevel and macrolevel software development tools, and program management approaches.

This effectively assumes a deterministic software acquisition process, whereas a number of uncertain and imprecise matters are associated with any large effort to acquire a new system. A deterministic approach to a stochastic acquisition process will generally not produce correct answers. The results generally obtained will be precise; in reality, the results should be stochastic and imprecise. Hopefully, however, the deterministic estimates will provide a reasonable approximation of the realized cost.

Software cost models usually involve at least two types of estimates. These are effort and schedule. These may be expressed according to the phases of the software life cycle. Many existing software cost models estimate the number of weeks or months needed to produce a given software system. A time limit on system development is often identified by the client as one of the system-level requirements. This is generally assumed as a constraint in the transition of system-level requirements to software-level requirements and associated-effort requirements. For this reason, most cost models focus on effort requirements over a prescribed schedule horizon. As we will discuss, generally some virtually irreducible minimum time is required to obtain a new system, and increasing the acquisition costs for the system may well not be associated with a reduction in the associated acquisition schedule.

We will use effort estimates as input variables that result in the calculation of costs of development in terms of the human resources required to build the target system. Typically, this estimate is expressed in terms of the number of people needed integrated over the time to be spent, so that the measure of effort is labor-months, PMs, or person-years. The actual cost in dollars can be generated from an effort estimate by multiplying the effort by the average cost of labor per unit time. More sophisticated models may be based on the fact that the cost per person-hour of effort depends on the type of labor involved. A development effort that involves much use of systems engineering talent for technical direction and rapid prototyping would thus be costed at a higher amount than an effort that involves little of this effort and a great deal of routine coding.

Many simple software cost models describe the size of the software development program only in terms of the size of the software product. This size is often measured in terms of lines of code delivered to the customer. Complexity figures, in terms of the number of programming operators and operands, and functionality measures are used in some models as we have noted. For example, Walston and Felix (1977) allow comment lines up to half of the delivered lines of code. Boehm (1976a) does not allow the inclusion of comment lines at all. Bailey and Basili (1981) include the total number of lines of new code, including remarks, but only one-fifth of the total number of lines of reused code, including comments. There is no problem with any of these approaches, although it does make routine use of the same information on all models, as well as comparison of the various approaches, more difficult. The meaning of the expression “lines of code” must simply be interpreted for each model before using the model.

An experiential model uses expert-based wholistic judgment as the primary input to the cost estimation or forecasting process. The accuracy of the prediction is a function of the experience and perception of the estimator. In its simplest form, an estimate based on expert judgment involves one or more experts who make educated guesses about the effort required for an entire software development program, or for a project thereof. The estimate may be derived from either a top-down or a bottom-up analysis of the proposed system. Often, experts are asked to make three predictions in a simple approach to forecasting: A, optimistic; B, pessimistic; and C, most likely. If A represents the optimistic cost estimate, B the pessimistic one, and C the most likely cost estimate, then the final estimate of cost or effort is presumed to be given by

(7.1)image

This is simply a weighted average in which it is assumed that the weight of the most likely estimate has a worth of four times that of either the most optimistic or most pessimistic estimate. Alternately, the resulting estimate can be said to follow what is called a beta probability distribution. The Delphi technique (Porter et al., 1991) can be used to generate A, B, and C as themselves averages of many individual responses. Of course, there is no scientific basis to support use of this cost relation. Many people would, in a judgmental situation such as this, simply provide optimistic and pessimistic estimates that are equally spaced about the most likely estimate. In this case, the most likely estimate is the average, which is half way between the optimistic and pessimistic estimates.

A number of other more formal models add more structure to the expert judgment approach. Wolverton (1974) developed a software cost matrix approach in which matrix elements represent the cost per line of code as calibrated from historical data. The multipliers in a vector product equation represent a phase–activity distribution as derived from the judgments of experts. The choice of element depends on expert judgment as to the type of software, novelty, and difficulty. This model contains as many as 8 phases and 25 activities per life-cycle phase. Use of the model is generally predicated on breaking the software acquisition effort into phases and estimating their costs individually. A software effort may represent a new or old development effort depending on the familiarity of the software developer.

Wolverton’s software cost–effort model is based on subjective estimates of software complexity. These estimates are made by considering the different types of software to be developed and the development difficulty expected. A software cost matrix can also be used as an alternate to a graphic approach. For example, we have the data shown in Table 7.1 for the six types of software considered in this early work. Clearly, the cost for developing time critical software is large at $75 per line of code. Obviously, this includes all costs, not just the direct programming costs to write a line of code.

TABLE 7.1. Wolverton Dollar Cost Estimates for Old and New Code Development

image

In this table, the costs are based on the type of software, represented by the row name, and the difficulty of developing such software, represented by the several columns. The difficulty is determined by two factors: whether the problem is old (O) or new (N), and whether it is easy (E), moderate (M), or hard (H). The matrix elements are the cost per line of code as calibrated from historical data. To use the matrix, the software system under development may be partitioned into modules i, where i = 1, 2, . . ., n. An estimate is made of the size Si of each module, as measured in the number of lines of developed uncommented code, for each of the n modules. This estimate does not consider software process variables, except to the extent that they influence Table 7.1. Fundamentally, the software cost estimate is a function only of product characteristics unless one is to have a different graph or table for each change in process, and management, characteristic. It is not even clear, for example, how questions of acquisition management approach, software development organization experience, availability of CASE tools, and other process-related factors affect the resulting cost estimates.

The cooperative programming model (COPMO) (Thebaut and Shen, 1984) incorporates both software size and software development staff size by expressing effort in terms of team interactions. Effort is defined as

(7.2)image

where E is overall effort, E1(S) is the effort required by one or more people working independently on a size S module development who require no interaction with other modules, E2(W) is the effort required to coordinate the development process with other software development team members, and W is the average number of staff assigned to software program development.

Additional needed relations are

(7.3)image

(7.4)image

The parameters a, b, c, and d are determined using past development efforts. These equations are not especially different from the effort estimation equations used in the other models. The value of d can be inferred to represent the amount of coordination, management, and communication needed on a project. Similarly, c is a measure of the weakness of the communication paths among the individuals working on the software effort.

A resource estimation model has been proposed by Fox (1985), who identifies a total of 27 contributors to software development costs. The eight major contributors to the cost of software development are identified in three major categories as follows:

1. Function

a. scale (1–8), the amount of function to be developed;

b. clarity (1–10), the degree to which functions developed are understood;

c. logical complexity (1–10), the number of conditional branches per 100 instructions;

d. the need for user interaction with the system (1–5) and the intensity of this interaction.

2. Use Time Environments

e. consequences of failure (1–15), the effort required to meet reliability and recovery requirements;

f. real-time requirements (1–5) in terms of how fast the various needed functions must be accomplished.

3. Development Time Factors

g. stability of the software support tools (1–10);

h. stability of the use phase computer hardware (1–20).

Each of these factors is assumed to contribute to costs per line of delivered code. The code costs can vary up to $83.00 per line, as this is the sum of the largest numbers for each of these factors. Fox encourages use of a circle-like diagram on which is sketched the relative difficulty for each factor.

The Bailey and Basili (1981) model was developed using data from a database of 18 large projects from the NASA Goddard Space Center. They make no claims that the model, based on empirical evidence from specific projects, applies to projects other than those of the same general type. Most of the software in the NASA database used by Bailey and Basili was written in Fortran, and most of the applications they considered were scientific. Thus, the database is very homogeneous. The total number of lines of code is defined to be the total amount of new code written plus 20% of the old code that is reused. Comment lines of code are included in each.

The Walston–Felix (1977) model uses a size estimate adjusted by factors determined from the subjective answers to questions about 29 relevant software acquisition topics, as follows:

1. customer interface complexity;

2. user participation in the definition of requirements;

3. customer-originated program design changes;

4. customer experience with the application area of the project;

5. overall personnel experience and qualifications;

6. percentage of development programmers who participated in design of functional specifications;

7. previous experience with operational computers;

8. previous experience with programming languages;

9. previous experience with application of similar or greater size and complexity;

10. ratio of average staff size to project duration (people per month);

11. hardware under concurrent development;

12. access to development computer open under special request;

13. access to development computer closed;

14. classified security environment for computer and at least 25% of programs and data;

15. use of structured programming;

16. use of design and code inspections;

17. use of top-down development;

18. use of chief programmer team;

19. overall complexity of code developed;

20. complexity of application processing;

21. complexity of program flow;

22. overall constraints on program design;

23. design constraints on program’s main storage;

24. design constraints on program’s timing;

25. code for real-time or interactive operation or executing under severe time constraint;

26. percentage of code for delivery;

27. code classified as nonmathematical application and I/O formatting programs;

28. number of classes of items in the database per 1000 lines of code delivered;

29. number of pages of delivered documentation per 1000 lines of delivered code.

These process-related factors are quite specific. In the aggregate, they represent an attempt to measure the understanding of the development environment, personnel qualifications, proposed hardware, and customer interface. Walston and Felix used these factors to supplement their basic equation with a productivity index. Using a large database of empirical values gathered from 60 projects in IBM’s Federal Systems Division, they produced the foregoing list of 29 factors that can affect software productivity. The projects were reviewed to determine parameters for the model that varied from 4000 to 467,000 lines of code, were written in 28 different high-level languages on 66 computers, and represented from 12 to 11,758 PMs of effort. For each mean productivity value xi calculated from the database, a composite productivity factor P was computed as a multi-attribute utility theory (MAUT)-type calculation.

The Walston–Felix model of software production effort that results is fundamentally based on the equation E = 5.25S0.91, where S is the number of SLOC, in thousands. A similar equation is obtained for schedule, in terms of time to project completion, as T = 2.47E0.35 = 4.1S0.35, which is also obtained from a standard least-squares curve fit approach. The effort, or cost, S is estimated in PMs of effort and the schedule in months. We note that this implicitly specifies the project workforce. Many of the models that we consider assume that there is a reasonable minimum development time and that it is very unwise to compress this. Other equations of interest in this model are L = 0.54E0.06 = 0.96S0.055 and Z = 7.8E1.11 = 49S1.01, where L and Z represent the staffing requirements in people and the pages of documentation that will be needed, respectively.

The commonalities, and the differences, among these approaches are interesting. Table 7.2 summarizes the central and basic features of many of the estimators we have discussed in this section, and provides the basic COnstructive COst MOdel (COCOMO) results that we will discuss in the next section.

TABLE 7.2. Basic Estimate Relations for Various Software Cost Models

E = 5.5 + 0.73S1.16 Bailey–Basili
E = 2.4S1.05 Boehm—basic organic COCOMO
E = 3.2S1.05 Boehm—intermediate organic COCOMO
E = 3.0S1.12 Boehm—basic semidetached COCOMO
E = 3.0S1.12 Boehm—intermediate semidetached COCOMO
E = 3.6S1.20 Boehm—basic embedded COCOMO
E = 2.8S1.20 Boehm—intermediate embedded COCOMO
E = 5.29S1.047 Doty
E = 5.25S0.91 Walston–Felix

These show different economies of scale and multipliers. This is not unexpected since the data used to provide the estimators are different. The Boehm model equations are the most sophisticated of these, by far the most used, and allow for different environment assumptions. Each of these equations is necessarily associated with errors. According to DeMarco (1981), uncontrollable factors in the development process will almost always result in 10% to 20% error in the accuracy of this type of estimate. Sadly, estimates using models of this sort are rarely this good, unless very careful attention is paid to the parameters that go into the estimates. We will now examine a number of MBC, or effort and schedule, models to illustrate the similarities and differences among them. We will begin with the COCOMO models of Boehm. After discussing this and other approaches, we will examine some concerns relative to modeling errors.

7.3 THE CONSTRUCTIVE COST MODEL

Barry Boehm has been intimately involved in almost all of software engineering, and especially involved in developing and refining his COCOMO and associated databases. His book on this subject (Boehm, 1981) is generally regarded as a software engineering classic. There have been a number of extensions to this work for software, including COCOMO II, and more recently for systems engineering, COSYSMO and COSISIMO by Boehm and his doctoral students. There are a plethora of related papers as well. The COCOMO model, or in fact “models” as there are three fundamental models involved, was derived from a database of 63 projects that were active during the period 1964 to 1979. The database included programs written in Fortran, COBOL, PL/1, Jovial, and assembly language. They range in length from 2000 to 1,000,000 of code, exclusive of comments. The COCOMO database is more heterogeneous than most that have been used for software cost projection, incorporating business, science and engineering-based, and supervisory control software. In addition to estimating effort, COCOMO includes formulae for predicting development time and schedule and a breakdown of effort by phase and activity. This is a very extensive and thoroughly investigated model to which much serious thought has been applied. It is often used in practice. Also, there have been a number of extensions to the initial COCOMO model developments, and we will discuss some of these.

There are three COCOMO levels, depending on the detail included in, or desired in, the resulting cost estimate: basic, intermediate, and detailed. Each form of the COCOMO model uses a development cost estimate of the form

(7.5)image

where M(x) represents an adjustment multiplier. The units of E are PMs, or labor-months of effort. If we multiply the labor-months by the average cost of labor, we obtain the direct costs of the acquisition effort. Of interest also is the development schedule. The schedule time for development is given by

(7.6)image

where E is the cost estimate just obtained. The parameters δ, ϒ, a, and b are determined by the model and development mode, as we will soon discuss. In most representations of COCOMO, the units for S are thousands of lines of delivered instructions (KDSI), the units for E are PM or labor hours (LM) of effort, and the units for T, the time for development (TDEV), are months. A PM of effort is assumed to be comprised of 19 person days of 8 hours each, or 152 person-hours. This figure allows for time off for sick leave, holidays, and vacations.

For the basic COCOMO model, the cost driver is always 1.0. For the intermediate and detailed models, it is a composite function of 15 cost drivers x1 through x15. By setting these cost drivers to 1 in the intermediate model, we obtain an adjustment multiplier M(x) = 1. Thus, the form of the intermediate COCOMO model reduces to that of the basic model when the cost drivers are at their nominal value of 1.0.

The values of a and δ are not obtained from least-squares regression, as is the case with many other cost estimation models. Boehm incorporates his own experience, the subjective opinion of other software managers, the results from use of other cost estimation models, and trial and error, to identify the structural relations that lead to the cost model as well as the parameters within the structure of this cost model. His initial parameters were fine-tuned using the TRW database. Thus, COCOMO is a composite model, basically combining experiential observations and wisdom together with statistical rule–based adjustments.

The parameters a and δ depend on what Boehm calls the development mode of a project. He labels a project as belonging to an organic, embedded, or semidetached mode, depending on the project’s independence from other systems. In the initial effort, these first three modes were described. Later effort extended this to Ada programming language development efforts (Helm, 1992). These three modes may be described as follows:

1. The organic mode refers to the mode typically associated with relatively small programs that generally require relatively little innovation. They usually have rather relaxed software delivery time requirements, and the effort is to be undertaken in a stable in-house development environment. The external environment is generally also stable. An organic software development program can often almost run by itself, and will rarely require extraordinary systems management and technical direction efforts.

2. An embedded mode program is relatively large and has substantial operating constraints. Usually a high degree of complexity is involved in the hardware to be used as well as in the customer interface needs. These result in system and user requirements that need to be incorporated into the software development program. Often, the requirements for the to-be-delivered embedded software are exacting, and there is generally a need for innovative design in typically one-of-a-kind programs that have not been accomplished before and that will likely not be repeated.

3. A semidetached mode program has requirements and development characteristics that lie somewhere between organic and embedded.

The a and δ parameters for the basic and intermediate COCOMO model are presented in Table 7.3.

TABLE 7.3. COCOMO Parameters for Basic and Intermediate Models

image

In the basic COCOMO model, the cost driver or adjustment multiplier M(x) = 1 for all xi. If we are considering semidetached mode development, the a and δ parameters are the same for both the intermediate and the basic COCOMO model. For organic and embedded development, the a parameters are different. This suggests that semidetached development is the nominal development mode for which the intermediate model COCOMO cost drivers are obtained. That the a parameter is different in the basic model than in the intermediate model, for other than semidetached developments, suggests that the meaning and interpretation of scaling of the cost drivers is different across these different development modes. In other words, the interpretation of the term “nominal” must be different for organic development efforts than it is for embedded development efforts. Using the basic model a parameters and the scaling indicated results in cost and effort values that are too low for organic mode development and too high for embedded mode development. This indicates that these cost-driver parameters are not independent of one another.

7.3.1 The Basic COCOMO Model

A single cost estimate, in terms of development effort, is obtained in the basic COCOMO model. This single effort measure is assumed to be distributed across the various phases of the software acquisition life cycle. In Boehm’s COCOMO effort, a four-phase life cycle consisting of conceptual design, detailed design, programming and unit test, and integration and test is assumed to be used.

For the basic COCOMO model, no effort is assumed to be allocated to such deployment efforts as maintenance. The distribution of effort does vary across phases as a function of the size of the product, in terms of the number of lines of code that are developed—although the variation is not large. Figure 7.3 illustrates how this effort, in labor-months, is distributed across these four phases, for the three different development modes. As we would expect, the simpler organic mode of development results in a greater percentage of effort devoted to actual coding of a software product, and less effort associated with the conceptual architecture and detailed design phases. Of course, the simpler products also result in less effort being needed for integration and test since there is less need for a large number of development modules. Often the percentage effort for programming and unit test may be less with embedded software than it is for organic and semidetached software. However, the actual amount of development effort will generally be greater. Even if the number of lines of code is the same, the fact that the a multiplier is larger for the embedded software will almost assure this. Figure 7.4 shows the companion results for the percentage distribution of schedule time across these four development phases. As we would expect, little effort needs to be devoted to conceptual design for organic software development. We can proceed almost directly to the detailed design and coding phases of development in this situation.

Figure 7.3. Effort Distribution Across the Four Life-Cycle Phases.

image

Figure 7.4. Approximate Percentage Schedule Time Distribution Across Phases for Basic COCOMO.

image

The very simple cost and schedule equations for the basic COCOMO model are

(7.7)image

(7.8)image

where the parameters are as specified in Table 7.3. Figures 7.5 and 7.6 illustrate the development costs and schedule for the three modes of operation. Figure 7.5 illustrates how much more labor intensive development of embedded software is, as compared with organic software. For 1000 KSDI, which represents a very large software acquisition effort indeed, it takes approximately 4.23 times as much labor (14.33 labor-months per KSDI) to produce a delivered line of code in embedded software, as contrasted with the labor (3.39 labor-months per KSDI) required for organic software. As shown in Fig. 7.3, the total development time that should be allocated to development is not appreciably different across the three development modes. For a 1000-KDSI effort, the development time is approximately 54 months, or 4.5 years, regardless of the mode of development.1 We can now use the effort and schedule distribution across phase results illustrated in Figs. 7.3 and 7.4 to determine phase-wise distributions of effort and schedule for the basic COCOMO model. This results in a relatively complete set of effort and schedule plans for software development, as based on the assumptions inherent in the basic COCOMO model.

Figure 7.5. Labor-Months Required Per Thousand Lines of Delivered Instructions for Basic COCOMO.

image

Figure 7.6. Schedule Months as a Function of Thousands of Lines of Delivered Instructions.

image

We might wonder why there is an amount calculated for effort, in labor-months, and an amount calculated in schedule time, months, through use of the basic COCOMO model. It might seem that it should be possible to obtain virtually any schedule time desired simply through adjusting the number of people working on an effort. Sadly, this turns out to be the case only within relatively narrow limits. A very classic work illustrates this specifically for software development. We digress briefly to discuss this important result here.

Fred Brooks, in a truly seminal work (Brooks, 1975), was perhaps the first to suggest a power-law relationship between lines of code, S, and software programming effort, E. The generic relationship for this is given by

(7.9)image

where the d and β parameters depend on the application being developed, programmer capability, and programming language used. In the work of Brooks, the parameter β was assumed to be 1.5, although few today would associate this large a diseconomy of scale with this relationship. This is the structure of the basic COCOMO model where β ranges from 1.05 to 1.20.

Brooks attempted to increase the power of this model by such efforts as adding terms to represent communication difficulties among the N programmers assumed to be working together on the programming project. This might result in a relation such as

(7.10)image

where c is a communication cost. The division of labor is such that programmer i produces code of size Si. If each programmer has equal ability, then we have

(7.11)image

Since a total of S lines of code are produced, we have

(7.12)image

where the summation extends over all N programmers. It is interesting to obtain the optimum allocation of effort among the programmers. To do this we use elementary variational calculus principles. We adjoin the constraint equation of Equation 7.12 to the cost function of Equation 7.10 by means of a Lagrange multiplier. We assume that each programmer has the same cost of communications. We also assume that each programmer produces the same amount of code such that S = NSi. Then, we minimize the effort relation

(7.13)image

where we have automatically satisfied the equality constraint of Equation 7.12. In this particular case, it is very interesting to sketch the relationship

(7.14)image

for several values of the economy of scale factor β and the communications effort ratio E/d.

The general results for negative economies of scale look like that shown in Fig. 7.7. The very interesting observation that the amount of effort required does not continually decrease with an increase in the number of programmers involved in the effort is evident. Only for very small values of the communication effort ratio would this be the case. We would like to have the ideal result noted in the figure. But we will get this only if these are perfect communications such that E = 0. In general, there will be an optimum number of programmers for maximum code production. Increasing the number of programmers results in a decrease in the amount of code that they can produce in a given amount of time.

Figure 7.7. Effects of Communication Costs on the Productivity of N Programmers.

image

All of this is potentially rather distressing. Not only do we have diseconomies of scale, but also the addition of programmers to aid an already late software development project may well result in further delays! While there is nothing generic to software in this, software is perhaps more likely to suffer from diseconomies of scale than other production technology efforts.

What this sort of simple analysis suggests is that we simply must bring about automated software production technologies, that is to say, those technologies that take advantages of the macroenhancement efforts of rapid prototyping, reusable software, and automatic code generation approaches to code production if we are to cope with truly large systems efforts. It seems highly doubtful that there are many major advances left to be obtained simply through only increases in programmer productivity. Of course, this is, in no way, an argument against programmer productivity, which is very necessary—but not at all sufficient. We note that we need both a cost equation and a schedule equation to deal with these issues.

7.3.2 Intermediate COCOMO

The basic COCOMO model is very simple and assumes a large number of nominal development parameters. The intermediate COCOMO model allows for judgment relative to 15 important cost drivers. These cost drivers are sometimes called environmental factors.

For the intermediate COCOMO model, the adjustment multiplier is calculated as the product of individual cost drivers, as given by

(7.15)image

The 15 cost drivers or environmental factors are grouped into 4 categories as illustrated in Fig. 7.8. Each of the 15 categories illustrated in this figure is associated with an appropriate multiplier factor m(xi). In the basic COCOMO model, each cost factor m(xi) is assumed to be equal to 1, and so each of the adjustment multipliers is equal to 1. In the intermediate and detailed COCOMO models, the cost factors m(xi) vary as a function of the quantitative values of the various cost drivers. For each category, a scale of five or six values is used to represent the possible choices for each category. For many of the cost drivers, values were obtained for the COCOMO database using the classical Delphi technique to elicit expert opinion. Reliability cost, for example, can be rated from very low to very high, in accordance with the equivalence between verbal or semantic descriptors and a corresponding numerical driver shown in Table 7.4.

Figure 7.8. Intermediate-Level COCOMO Cost Drivers or Multipliers.

image

TABLE 7.4. Reliability Categories and Multipliers (RELY)

Rating Effect of lack of factor Multiplier
Very low Slight inconvenience if there is a problem 0.75
Low Losses easily recovered due to problem 0.88
Nominal Moderate difficulty in recovery 1.00
High Major financial loss if problems develop 1.15
Very high Risk to human life 1.40

There is, in effect, a table like Table 7.4 for each of the 15 cost drivers in the database. It is assumed that one of the specific values called for in these tables will be used in that the model is validated only for these values. This should not preclude careful use of parameter values within the given ranges.

Appropriate descriptions for each of the 15 cost drivers in the intermediate COCOMO model are as follows:

CPLX—Software Product Complexity. CPLX rates the complexity of the software to be developed on a scale varying from very low (0.70) to very high (1.65). It is directly related to the type of processing required and the distance of the software from the hardware, or the compatibility between the software and the hardware. It turns out that no metrics have proved universally acceptable in this area, so the rating is often done by analogy. A recommended input value for CPLX of HI would mean that the software development needs involve hardware input/output interfaces, advanced data routines, and the use of such tools such as third-generation compilers. A CPLX rating of HI translates into a value of 1.15 as an environmental factor or multiplier.

DATA—Database Size. DATA rates the extra effort required to create software that involves manipulation and maintenance of a sizable database. This factor is evaluated by considering the ratio of the database size (in bytes) to the number of deliverable source instructions (DSI). DATA varies from low (0.94) to very high (1.16).

RELY—Required Software Reliability RELY rates the criticality of the software to be acquired in performing its intended function in an accurate and timely manner. It may vary from very low (0.75) to very high (1.40).

STOR—Storage Constraints. STOR measures the additional work for software development that results from constraints on memory availability in the target computer. Memory is defined as that random access storage or read-only memory (ROM) that is directly accessible to the central processing unit (CPU) or I/O processor. STOR may vary from nominal (1.00) to very extra high (1.56).

TIME—Execution Time Constraints. TIME relates to measures of the approximate percentage of the available CPU execution time that will be used by the software. It may vary from nominal (1.00) to extra high (1.6). A nominal recommended input value for TIME, NM, is associated with a multiplier of 1.00 and reflects that there are no constraints on the CPU execution time.

TURN—Computer Turnaround. TURN rates the average time spent waiting for the host or developmental computer to complete an action, such as compile a section of code or print a listing. It may vary from low (0.87) to very high (1.15).

VIRT—Virtual Machine Volatility. VIRT rates the degree of change that the host and target machines are projected to undergo during the development phases of the software acquisition effort. Machine here refers to the hardware and software that the project calls upon to complete its task. VIRT may vary from low (0.87) to very high (1.30). A low (LO) value of VIRT would result when no changes are expected across the development phases.

ACAP—Analyst Team Capability. ACAP measures the capability of the analyst team doing the following: defining and validating the system requirements and specifications, preparing preliminary design specifications, inspecting the software and testing plans, consulting efforts during detail design and code and unit test phases, and participation in the integration and test phase. ACAP may vary from very low (1.46) to very high (0.71). Thus, this metric decreases as performance improves. A recommended input value for a very high (VH) ACAP might be based on a rating of high for previous program performance, a rating of extra high for analyst team educational background, and a rating of good for analyst team communication.

AEXP—Project Application Experience. AEXP rates the project development team with respect to their level of experience in working on other development projects of similar scope and difficulty. It may vary, in the COCOMO model, from very low (VL = 1.29) to very high (VH = 0.82). A recommended input value for high (HI) AEXP might be based on the fact that the development team has much experience on projects of similar complexity that varies from 5 to 12 years for team members.

LEXP—Language Experience. LEXP measures the design analyst and programmer teams’ experience with the programming language that will be used to design the software. It may vary from very low (VL = 1.14) to high (HI = 0.95). Thus, the value of this metric also decreases as performance improves.

PCAP—Programming Team Capacity PCAP measures the capability of the programmers performing the detailed software module design during the critical design phase of development, and the writing and testing of the physical code during the coding and integration testing phases. It may vary from very low (VL = 1.42) to very high (VH = 0.70). A recommended input value for nominal (NM = 1.0) PCAP might be based on a rating of nominal for previous program performance, of average for programming team educational background, and of average for programming team communication.

VEXP—Virtual Machine Experience. VEXP measures design analyst and programmer experience with the hardware and software of the host and target computers. Software refers to both the operating system and the application software. VEXP may vary from very low (VL = 1.21) to high (HI = 0.90). A recommended input value for HI VEXP might be based on the fact that the acquisition contractor is not using an HOL in a machine-independent fashion, and is experienced with the host and target machines.

MODP—Modern Programming Practice. MODP quantifies a contractor’s use of and commitment to modern programming practices. It includes top-down requirements analysis and design, structured design notation, design and code walkthroughs, and structured code. It may vary from very low (VL = 1.24) to very high (VH = 0.82). A recommended value for VH MODP might be based on the fact that modern programming practices are prescribed by company policy and an education and training program is in effect.

SCED—Existence of Required Development Schedule. SCED reflects the extent to which there exists a required acquisition schedule that is realistic. It measures schedule compression and extension. Attempting to develop software when the time required for development is too short will result in a high rating for this multiplier. While it might seem that a very relaxed time schedule would result in a low rating, the value is actually increased above the nominal value of 1.0 because of inefficiencies that may be introduced when the amount of slack in development is very high. The value of SCED varies from very low (VL = 1.23), which relates to too short a development time, to nominal (NO = 1.0), to very high (VL = 1.10), which relates to too slack a development schedule.

TOOL—Use of Software Development Tools. TOOL relates to the contractor’s use of automated software tools and the extent to which these tools are integrated throughout the software development process. It may vary from very low (VL = 1.24) to very high (VH = 0.83). A value of VH might be associated with a contractor’s use of automated software tools in a moderately integrated development environment consisting of UNIX or a Minimum Ada Programming Support Environment (MAPSE), configuration management (CM), extended design tools, automated verification systems, cross-compilers, display formatters, and data entry control tools.

Table 7.5 illustrates the values for the intermediate COCOMO model effort multipliers as initially presented by Boehm. The overall or aggregate effects of these cost-driver multipliers may be large if they are set close to the extreme positions. If each driver is set at the lowest possible value given in this table, the product of the cost drivers is 0.0886. The largest possible product of the cost drivers is 72.379. It is, of course, unreasonable to expect this sort of range in practice. The lowest possible value would be associated with a truly excellent development team attacking an extraordinarily simple acquisition effort. The largest value would be associated with a virtually incompetent team attacking an extraordinarily difficult effort.

TABLE 7.5. Cost Drivers for COCOMO Function Multipliers

image

At these extremes, there would be little reason to suspect that the COCOMO model would have great validity. It is more reasonable that there would be correlation between product, project and computer complexity, and development team capability. If this is the case, then the multiplier products vary from 2.601 for a very-low-capability team working on a simple problem to 2.706 for a high-capacity team working on a most difficult acquisition effort.

Intermediate-level COCOMO uses the same approach as basic COCOMO to allocate costs, and schedules, across a four-phase development life cycle.

Let us describe the use of the intermediate COCOMO model in some detail. The steps given here can be shortened such that they are applicable to the basic COCOMO model. The intermediate COCOMO model estimates the effort and cost of a proposed software development in the following manner:

1. A nominal development effort is estimated as a function of software product size S in thousands of delivered source lines of instructions. To make this calculation, we use the basic COCOMO effort determination equation E = aSδ, where a and δ are as given in Table 7.3.

2. A set of effort multipliers, or environmental factors or cost drivers, is determined from the rating of the software product on the set of 15 cost-driver attributes that we describe in Table 7.6. Each of the 15 cost drivers has a rating scale and a set of effort multipliers that indicates the amount by which the nominal estimate needs to be multiplied to accommodate the additional or reduced demands associated with these cost drivers.

TABLE 7.6. Effort Multipliers for Requirements Volatility (RVOL)

Rating Effect Multiplier
Low Essentially no requirements volatility 0.91
Nominal Infrequent, noncritical redirection efforts needed 1.00
High Occasional, moderate redirection efforts are needed 1.19
Very high Frequent, moderate redirection efforts are needed 1.38
Extra high Frequent, major redirection efforts are needed 1.62

3. The actual estimated development effort is determined by multiplying the nominal development effort estimate, using the a and ϒ parameters for intermediate COCOMO, by all of the software product effort multipliers. For a specific software development project, we compute the product of all of the effort multipliers for the 15 cost-driver attributes. The resulting estimated effort for the entire project is the product of all of these terms times the nominal effort determined in step 1.

4. Additional factors are then used to obtain more disaggregate elements of interest from the development effort estimate, such as dollar costs, development schedule, phase and activity distribution, and annual maintenance costs. In addition to calculating the development effort E, in terms of PMs of effort, it is often desired to obtain the development schedule in months in terms of either the number of lines of code or the total PMs of effort. This turns out to be given by image, where b and ϒ are also given numerical values, for the three software modes, as indicated in Table 7.3.

Figure 7.9 illustrates the general set of steps to be followed in obtaining a cost and schedule estimate using COCOMO. It suggests, as does this discussion, the initial use of basic COCOMO and then a switch to intermediate COCOMO to accommodate environmental factors that differ from the nominal.

Figure 7.9. Suggested Steps for Determination of Effort and Schedule Using Intermediate COCOMO.

image

The amount of variability of the 15 drivers about the nominal value of 1 varies considerably, as we see in Fig. 7.10. In this situation, the order of the drivers is arranged such that those associated with greater variability are to the right of the curve. These tend to be the drivers associated with human capabilities and problem complexity, not the ones associated with the availability of automated tools.

Figure 7.10. Variability of Cost-Driver Multipliers Across Ratings.

image

There are a number of possible cost drivers that are not included in the intermediate COCOMO model. Among these are such factors as requirements volatility, management quality, customer (interface) quality, amount of documentation, hardware configuration, and privacy and security facets. Boehm discusses these factors, and several others. He suggests that parsimony is among the major reasons why other factors are not included and that inclusion of many of these factors would unnecessarily complicate the analysis while not providing for greatly enhanced fidelity of cost and schedule predictions. This does not mean that these factors are necessarily neglected. They are assumed to be at some nominal values and that changes in them will not materially affect results.

It is not difficult, in principle, to incorporate other parameters. For example, we might wish to modify intermediate COCOMO to a two-level version such that it becomes possible to consider requirements volatility, or requirements creep, which is interpreted to mean the tendency for requirements to change after they have been initially identified and where software development has proceeded beyond the requirements phase.

The first intermediate COCOMO 1 model or level is restricted to the cost drivers listed in Fig. 7.8. Our new intermediate COCOMO 2 model or level would include an additional driver for requirements volatility, with values ranging from a low of 0.91 to a high of 1.62. This assumes that these multipliers are experientially determined to be correct for given amounts of “volatility.” Table 7.6 presents the effort multipliers for requirements volatility. This is then assumed to be a 16th cost driver in the COCOMO model equations obtained earlier. We can describe this 16th cost driver as follows:

RVOL—Requirements Volatility. RVOL measures the amount of redesign and redevelopment that is the result of changes in customer-specified requirements. The nominal value for this parameter is 1.0, which indicates no volatility or creep in requirements. This assumes that there will be only small and generally noncritical redirections.

An interesting question arises concerning whether or not the other drivers in the intermediate COCOMO model need to be changed to accommodate this new driver. If we can assume that the drivers are independent, the answer is no. While there is no strong reason to assume independence, we can assume near independence for small enough changes in the driver parameters.

There are a number of similar extensions of the COCOMO model. One very useful one has led to what is known as a Revised Intermediate COCOMO (REVIC) model. REVIC predicts the development of life-cycle costs for software acquisition across the three basic phases of definition, development, and deployment. It encompasses costs and schedule from requirements analysis to completion of the software acceptance testing and later maintenance. As with COCOMO, the number of DSLOC is the basic cost driver.

There are two major extensions to the development life cycle assumed in intermediate COCOMO that enables REVIC to include many aspects of definition and deployment. Six issues are of importance, which are discussed next:

1. The life cycle for COCOMO does not include the software requirements engineering phase. The amount of effort expended in this phase can vary dramatically. REVIC predicts the effort and schedule in the software requirements engineering phase by taking a percentage of the development phases. It utilizes a default value, 12% for effort and 30% for schedule, for the percentage to be used for nominal software acquisition programs, and allows the user to change this percentage, if desired. Of course, the very initial portions of the definition phase, perhaps accomplished during proposal preparation or specified as part of the request for proposals (RFP), must contain some user requirements. REVIC estimates the cost of transitioning from a set of user requirements and system specifications to software specifications.

2. The COCOMO life cycle really ends at the end of the software development phase, when the integration and test phase has been successfully completed. This phase is characterized by successful integration of computer software components (CSCs) into computer software configuration items (CSCIs) and associated testing of the CSCIs against the test criteria developed during the software acquisition program. This does not include the system-level integration of CSCIs and associated system-level testing to ensure that the system-level requirements have been met. This is generally accomplished as part of operational test and evaluation (OT&E) phase, as this is sometimes called. REVIC predicts effort and schedule for this phase similar to the requirements specification phase, by taking a percentage of the development phase estimates. It provides a default percentage, 22% for effort and 26% for schedule, for this phase as nominal amounts and allows a user to change this percentage if desired.

3. REVIC provides an estimate for the maintenance of software over a 15-year period by implementing the following equation:

(7.16)image

where M is the maintenance effort in labor-months, A is an annual percentage code change factor (expressed as a fraction) or annual change traffic, and η represents a set of maintenance environmental factors. REVIC provides a default percentage for the annual change traffic and allows this to be changed, if desired. It assumes the presence of a transition period after the initial deployment of the software, during which time residual errors are found. After this, there exists a near-steady-state condition that allows a positive, and declining over time, fraction to be used for the annual change traffic during the first three years of deployment. Beginning with the fourth year, REVIC assumes that the maintenance activity consists of both error corrections and new software enhancements.

4. The essential difference between REVIC and intermediate COCOMO is the set of environmental factors used as cost drivers in the equations for C and T. An enhanced set of drivers is used, as we will soon describe. REVIC was calibrated using more recent data than available for COCOMO, and this results in different quantities for some of the environmental factors. On average, the parameter values used by the basic effort and schedule equations are slightly higher in REVIC than they are in COCOMO.

5. One of the additional cost drivers relates to the use of reusable code. When reusable code is present, an adjustment factor needs to be calculated and used to determine the size of a number of modules that are developed. A separate estimate for cost and schedule is determined through use of REVIC, or COCOMO, for each of these modules. The overall effort or cost is the sum of these. We describe this adjustment factor in more detail in our treatment of the detailed COCOMO model as it is the same factor that is used there.

6. Other differences occur in obtaining distribution of effort and schedule for the various phases of the development life cycle and in an automatic calculation feature for the standard deviation associated with risk assessment efforts. COCOMO provides a table for distributing effort and schedule over the development phases, based on the size of the code being developed and the mode of development, as illustrated in Figs. 7.3 and 7.4. REVIC provides a single weighted “average” distribution for the overall effort and schedule, and has the ability to allow a user to change the distribution of effort allocated to the specifications and OT&E phases. Thus, the value of the SCED parameter is set equal to nominal or 1.0. The software user can set the actual development schedule through forcing it below that which results from the nominal calculation. This will always increase both labor-months of effort and associated costs.

There are 19 environmental factors in REVIC. Those four not included in the intermediate COCOMO model are as follows:

  • RVOL—requirements volatility;
  • RUSE—required reusability;
  • SECU—DoD security classification; and
  • RISK—risk associated with platform.

We have already described requirements volatility. Appropriate descriptors of the other three are as follows:

RUSE—Required Reusability. RUSE measures the extra effort that is needed to generalize software modules when they must be developed specifically for reuse in other software packages. The nominal value for reuse, NM, is 1.0, which means that there is no contractually required reuse of the software.

SECU—Classified Security Application. SECU measures the extra effort required to develop software in a classified area or for a classified security application. We note that this factor does not relate to the certification of security processing levels by the National Security Agency.

RISK—Management Reserve for Risk. RISK is the REVIC parameter that provides for adding a percentage factor to account for varying levels of program risk. If it is determined that the software development has a very low program risk, we use very low for the risk factor, and this translates into a numerical value of 1.00 for the cost-driver or environmental factor.

Thus, REVIC is essentially intermediate-level COCOMO with the addition of four additional environmental factors, an updated database, and considerable ability for “what if” type analysis, assessment, and sensitivity studies.

A standard set of two-letter descriptors associated with each of the seven cost multipliers, one more (extra–extra high) than generally described in intermediate COCOMO, is used to describe the extent to which each environmental factor differs from the nominal amount:

  • VL—very low;
  • LO—low;
  • NM—nominal;
  • HI—high;
  • VH—very high;
  • XH—extra high;
  • XX—extra–extra high.

Some anchoring of the scoring for the factors is used to calibrate the use of the REVIC algorithms. This anchoring is particularly needed as many of the environmental factor terms need specific definition across the people responsible for providing estimates, if these estimates are to be compatible and consistent. The environmental factors and calibration presented in Table 7.7 were used in version 9 of the REVIC software. Many of the parameters are precisely the same as those used in the intermediate COCOMO model.

TABLE 7.7. REVIC Environmental Factor Calibration and Scoring

Product attributes
Software product complexity—CPLX
VL Simple 0.70
LO Data processing 0.85
NM Math routines 1.00
HI Advanced data structures 1.15
VH Real-time and advanced math 1.30
XH Complex scientific math 1.65
Database size—DATA
LO DB bytes/program SLOC, D/P < 10 0.94
NM 10 ≤ D/P < 100 1.00
HI 100 ≤ D/P < 1000 1.08
VH D/P ≥ 1000 1.16
Required software reliability—RELY
VL Slight 0.75
LO Easy 0.88
NM Moderate 1.00
HI MIL-STD/high finance 1.15
VH Loss of life 1.40
Computer attributes
Main storage constraints—STOR
VL None 1.00
LO None 1.00
NM None 1.00
HI 70% utilization 1.06
VH 85% utilization 1.21
XH Utilization > 95% 1.56
Execution time constraints—TIME
VL None 1.00
LO None 1.00
NM 60% utilization 1.00
HI 70% utilization 1.11
VH 85% utilization 1.30
XH Utilization > 95% 1.66
Computer turnaround (response) time—TURN
VL <6 min 0.79
LO <30 min 0.87
NM <4 h 1.00
HI >4 h 1.07
VH >12 h 1.15
Virtual machine volatility—VIRT
VL No changes 0.87
LO 1 change in 6 months 0.87
NM 1 change in 3 months 1.00
HI 1 change every month 1.15
VH Several changes every month 1.30
XH Constant changes 1.49
Personnel attributes
Analyst capability—ACAP
VL 15th percentile 1.46
LO 35th percentile 1.19
NM 55th percentile 1.00
HI 75th percentile 0.86
VH 90th percentile 0.71
Project application experience—AEXP
VL Less than 4 months 1.29
LO 1 year 1.13
NM 3 years 1.00
HI 6 years 0.91
VH Greater than 12 years 0.82
Language experience—LEXP
VL None 1.14
LO Less than 1 year 1.07
NM From 1 to 2 years 1.00
HI 2 years 0.95
VH Greater than 2 years 0.95
Programming team capability—PCAP
VL 15th percentile 1.42
LO 35th percentile 1.17
NM 55th percentile 1.00
HI 75th percentile 0.86
VH 90th percentile 0.70
Virtual machine experience—VEXP
VL None 1.21
LO Less than 6 months 1.10
NM Less than 1 year 1.00
HI From 1 to 2 years 0.90
VH Greater than 2 years 0.90
Project attributes
Modern programming practices—MODP
VL None 1.24
LO Beginners 1.10
NM Some 1.00
HI In general use 0.91
VH Routine 0.82
Existence of required development schedule—SCED
NM 1.00
Use of software development tools—TOOL
VL Very few primitive 1.24
LO Basic microcomputer tools 1.10
NM Basic minicomputer tools 1.00
HI Basic mainframe tools 0.91
VH Extensive, but little tool integration 0.83
XH Moderate, in an integrated environment 0.73
XX Full use, in an integrated environment 0.62
Additional drivers in REVIC
Requirements volatility—RQTV
VL None 0.91
LO Essentially none 0.91
NM Small, noncritical redirection 1.00
HI Occasional, moderate redirection 1.19
VH Frequent moderate, occasional major 1.38
XH Frequent major redirection 1.62
Required reusability—RUSE
NM No reuse 1.00
HI Reuse of single mission products 1.10
VH Reuse across single mission products 1.30
XH Reuse for any and all applications 1.50
Classified security application—SECU
NM Unclassified 1.00
HI Classified (secret, or top secret) 1.10
Management reserve for risk—RISK
VL Ground systems 1.00
LO MIL-SPEC ground systems 1.20
NM Unmanned airborne 1.40
HI Manned airborne 1.60
VH Unmanned space 1.80
XH Manned space 2.00
XX Manned space 2.50

What results from this is a somewhat enhanced version of intermediate COCOMO and a software package especially suited for systems management prediction of the effort and schedule needed for software development. The possibility of performing various sensitivity analysis studies for changing parameters is especially attractive. We can also reuse the model to develop the several estimates needed for incremental and evolutionary development of software.

Of course, it is easily possible to implement intermediate COCOMO on any of the currently available microcomputer spreadsheet programs. One of the objectives in any of these implementations is to predict costs and schedules for the various life-cycle phases, such as to obtain the sort of results identified in Figs. 7.11 and 7.12.

Figure 7.11. Generic Distribution of Labor-Months Over Time.

image

Figure 7.12. Gantt Chart of Schedule and Phase-Based Estimates of Costs and Effort.

image

There have been a considerable number of efforts to evaluate the accuracy of COCOMO models. In one of the more detailed studies (Helm, 1992), based on a study of seven new software development efforts, it was found that COCOMO was able to predict costs and schedule for all seven projects with less than 20% relative error. To make predictions of this quality requires detailed familiarity with past organizational practices and careful calibration of the COCOMO model to reflect these characteristics.

7.3.3 The Detailed COCOMO Model

The detailed COCOMO model adds refinements not included in the basic and intermediate COCOMO models. Detailed COCOMO introduces two more components to the model. Phase-sensitive effort multipliers are included, as a set of tables, to reflect the fact that some phases of the software development life cycle are more affected than others by the cost-driver factors. This phase-wise distribution of effort augmentation is the primary change over intermediate COCOMO. It provides a basis for detailed project planning to complete the software development program across all of the life-cycle phases.

In addition, a three-level product hierarchy is employed, so that generally different cost-driver ratings are supplied for the assumed four phases of effort for 4 cost drivers that primarily affect software modules (CPLX, LEXP, PCAP, and VEXP) and for the 11 drivers that primarily affect subsystems (ACAP, AEXP, DATA, MODP, RELY, SCED, STOR, TIME, TOOL, TURN, and VIRT). These drivers are presumably used at the level at which each attribute is most susceptible to variation. As in basic and intermediate COCOMO, the value of all nominal cost drivers is unity.

Multipliers have been developed for detailed COCOMO that can be applied to the total project effort and total project schedule completion time to allocate effort and schedule components to each phase in the life cycle of a software development program. Four distinct life-cycle phases are assumed to exist. The effort and schedule for each phase are assumed to be given in terms of the overall effort and schedule by the same general equations as for intermediate COCOMO, but with the use of phase-sensitive effort multipliers. Figures 7.13 and 7.14 illustrate the way in which two of these multipliers vary across the four assumed life-cycle phases. In general, there is usually not much difference in the multipliers for the detailed design phase and those for the code and unit test phase between detailed and intermediate COCOMO.

Figure 7.13. Distribution of Multiplier Weights Across Phases for Language Experience (LEXP) Factor in Detailed COCOMO.

image

Figure 7.14. Distribution of Multiplier Weights Across Phases for Reliability (RELY) Factor in Detailed COCOMO.

image

For some of the cost drivers, such as the two illustrated in Figs. 7.13 and 7.14, there is not much difference in the conceptual design phase (denoted as the requirements and product design phase by Boehm) between intermediate and detailed COCOMO. There is a major difference, however, in the integration and test phase. We would expect this with respect to such factors as programmer capability, modern programming practice, use of software tools, and needed system reliability. For others, such as analyst team capability and project application experience, we would expect a considerable difference in the conceptual design phase as this is the phase in which these experiences are most critical. Figures 7.15 and 7.16 illustrate the variations in these multipliers over the four development phases. In each case, the multiplier associated with the intermediate COCOMO is a composite of these multipliers across the four phases shown. Much more detail concerning implementation of the detailed COCOMO model is available in Boehm (1981).

Figure 7.15. Distribution of Multiplier Weights Across Phases for Capability of Analysts (ACAP) Factor in Detailed COCOMO.

image

Figure 7.16. Distribution of Multiplier Weights Across Phases for Application Experience (AEXP) in Detailed COCOMO.

image

7.3.4 Other COCOMO-Based Models

The COCOMO model also has provisions for adjusting estimates of software costing when the software is developed, in part, from existing code. This involves a reuse COCOMO model. The adjustment is made at the module level, and each module is evaluated to determine how much code will be used without modification and how much will be modified.

Another variation of COCOMO is called Ada COCOMO (Boehm and Royce, 1987). This model is very similar to the original COCOMO model with only a few differences to allow for explicit incorporation of rapid prototyping, the spiral life cycle, risk management, and requirements volatility.

In general, the COCOMO model appears most appropriate for the grand design waterfall life cycle in which software is built right and completely in a single pass through the life cycle. It is easily modified to allow for other nongrand design life-cycle models and modes of development. In this approach, we calculate an effort for each of the successive, iterative, or evolutionary builds. This has been suggested by Balda and Gustafson (1990) and by a number of other researchers.

The previous model developments were macrolevel models based on the assumption of a given structure for the model and then determining parameters within this structure to match observed data. An alternate approach is possible in which we postulate a theoretically based model for resource expenditures in developing software.

It is not unreasonable to postulate that development time will influence the overall project effort and cost. Norden (1963) was perhaps the first to suggest a time sequencing of typical project effort. In investigating projects at IBM, he observed that the staffing of these research and development projects resembled a Rayleigh distribution. This sort of distribution is what might be empirically observed in practice, or obtained as a result of the sort of modeling effort that might have led to Fig. 7.11.

Putnam and Myers (1992) used the observations of Norden (1963) for project effort expenditures to develop a model of software costing. Putnam initially studied 50 projects from the Army Computer Systems Command and 150 other projects, thus developing one of the largest databases to support cost estimation. This resource allocation model, which has been developed under the name Software Lifecycle Management (SLIM), includes several effort factors: the volume of work, a difficulty gradient that measures complexity, a project technology factor that measures staff experience, and delivery time constraints. An investigation of the accuracy of SLIM (Conte et al., 1986) indicates that the model exaggerates the effect of schedule compression on development. Another potential problem evolves from rather heavy reliance on the project lines of code and development time characteristics. Kemerer (1987) has also performed an evaluation of the SLIM model, as well as COCOMO and several other software packages. Jensen (1984) has proposed a useful variation to Putnam’s SLIM model.

There are a number of alternative approaches to costing. ABC, which is not really a COCOMO variant and thus could be discussed in a new section if we presented a detailed treatment of this, is another approach to costing (Johnson and Kaplan, 1991; Kaplan, 1990; Kaplan and Cooper, 1990; Cooper and Kaplan, 1988; O’Guin, 1991). The ABC approach is based on activities required to produce a product that consume resources and that have value (or lack thereof) for customers. One of the major objectives of an ABC system is that of associating costs with the activities that lead to products. This is usually accomplished by first assigning all resources to either products or customers. The resources of an organization include direct labor, materials, supplies, depreciation, and fringe benefits. The organizational support units are separated into major functional units. Each of these functional units should have a significant cost associated with it, and each should be driven by different activities. The support unit, or department, costs are separated into a number of functional cost pools. These department costs should be fully burdened (one goal with ABC is to dramatically decrease undifferentiated burden), and all costs should be associated with the set of departments. The costs for each department are assigned to the various functional units such that each function has its own cost pool. The functional unit cost pools are next assigned, using first-stage cost drivers, to each of the activity centers. Measures of activity, such as customer orders, are very important first-stage cost drivers in that they are also measures of productivity. The organizational support costs are assigned to products or customers through these activity centers. An activity center is a functional economic grouping that contains similar or homogeneous sets of processes. The product-driven activity centers are those to which costs associated with the product lines or processes are assigned. The customer-driven activity centers are those driven by customers, such as sales and order department costs, and those that represent the costs of supporting customers and markets. The substance of an ABC system is associated with the set of second-stage cost drivers. The total cost of every activity center is separated into a number of cost-driver pools. The costs associated with each cost-driver pool are assigned to products using a second-stage cost driver. These second-stage cost drivers lead to resource consumption.

COCOMO is now available as COCOMO II and represents an extension of the initial COCOMO model described here. It is described in detail in Boehm et al. (2000). The URL http://sunset.usc.edu/csse/research/COCOMOII/cocomo_main.html is relatively extensive with much information of value, especially in terms of cost estimations efforts by Barry Boehm and/or his colleagues at the University of Southern California.

There have been several efforts to extend cost modeling COCOMO-like efforts to systems engineering. The papers by Lane and Valerdi (2007) and Lane and Boehm (2008) are noteworthy. The Handbook of Systems Engineering and Management (Sage and Rouse, 2009) describes a number of these as well, especially its Chapter 6 on cost management by Blanchard and Chapter 29 on project planning by Buys. Many contemporary systems engineering subjects that are described in detail may not formally involve costing in their initial description but must necessarily be incorporated to bring about realization of implementable systems concepts of cost analysis and assessment. One of the many such instances might involve the role of cost analysis and assessment in incorporating service-oriented architectural concepts for model-based systems engineering efforts (Andary and Sage, 2010).

7.4 SUMMARY

In this chapter, we have examined a number of issues surrounding the costing of software. While most of our efforts concerned costing, we did provide some comments concerning valuation, effectiveness, and other important issues. Modeling and estimation of software effort and schedule is a relatively new endeavor. Modeling and estimation of systems engineering, including systems engineering effort and schedule, is an even newer endeavor. Most such models are validated from databases of cost factors that reflect a particular user and developer organization characteristics. Such models are useful when developer organizations are stable and continue to produce systems, or services, similar to those developed in the past for users who have similarly stable environments and needs. However, models have little utility if the mixture of personnel experience or expertise changes or if the development organization attempts to develop a new type of system or a user organization specifies a new system type.

It would be desirable to build models that are independent of either user or developer organization, so that the models can be transported to other development teams and user situations. This is clearly foolish, however, as it assumes context-free solutions to problems, and this is very unrealistic. The major conclusion from this is that it is absolutely necessary to consider developer and user organization characteristics in the cost estimation models that we build.

A second problem is the use of cost-influencing factors and the relationship expressed among them. It is not clear that the appropriate factors have been identified; nor is it clear that they have been related correctly mathematically. Many of the cost models use adjustment multipliers in which the cost factors are summed or multiplied together.

A third issue involves changes in technology, tools, and methods. The contribution made to cost by these three aspects of project development is not as well understood as it should be for high-quality valuation purposes. Consequently, the appropriate change required in the cost equation is not known when technology, tools, and methods differ from those in place when the supporting database for a model was generated. Many of the databases used for contemporary cost and effort models use decades-old information, which is surely not reflective of current practices. Very few of the cost-estimating models are able to incorporate the potential benefits (or disbenefits) brought out by the use (misuse) of CASE tools. Nor do they consider the macroenhancement approaches of reusability, prototyping, and knowledge-based systems for development.

The development process itself presents a fourth set of needs. Some models examine the product or service rather than the software development process to obtain information about cost- and effort-influencing factors. An examination of only product- or service-related variables will generally never provide sufficient information to allow us to estimate effort and cost. More work needs to be done to determine what aspects of the development process contribute most to cost. The major improvements in productivity will come about through better development processes, and not at all through only implementing methods that ensure higher worker programmer productivity.

Most of the available methods select a single important deliverable SLOC for software, and use this variable as the core variable for estimation purposes. Various multipliers of this variable are proposed that presume to represent realities of conditions extant as contrasted with the nominal conditions under which the effort relationship to SLOC was determined. While this is not necessarily an appropriate way to go, it might be more meaningful to develop a program development plan in terms of client needs and then cost each of the phase-distributed efforts of the plan.

It is vitally important to develop cost estimation, including effort and schedule estimation, models that can be used very early in the development process. The purpose of these models is to predict development life-cycle costs and efforts as soon as possible and to provide information about the costs and effectiveness of various approaches to the acquisition process and its management. This will allow us to develop accurate information about development programs that clients might wish to fund and to allocate the appropriate resources to these developments. It will also result in feedback of important development information that will predict how changes in user requirements (software, system, or service), specifications, design, maintenance, and other factors will affect cost, effort, performance, and reliability.

A study of cost estimation (Lederer and Prasad, 1992) provides the following nine guidelines for cost estimation:

1. Assign the initial cost estimation task to the final system developers.

2. Delay finalizing the initial cost estimates until the end of a thorough study of the conceptual system design.

3. Anticipate and control user changes to the system functionality and purpose.

4. Carefully monitor the progress of the project under development.

5. Evaluate progress on the project under development through use of independent auditors.

6. Use cost estimates to evaluate project personnel on their performance.

7. Management should carefully study and appraise cost estimates.

8. Rely on documented facts, standards, and simple arithmetic formulas rather than guessing, intuition, personal memory, and complex formulas.

9. Do not rely on cost estimation software for an accurate estimate.

While these guidelines were established specifically for information system software, there is every reason to believe that they have more general applicability. This study identifies the use of cost estimates as selecting projects for implementation, staffing projects, controlling and monitoring project implementations, scheduling projects, auditing project progress and success, and evaluating project developers and estimators. Associated with this, we suggest, is evaluating the costs of quality, or the benefits of quality, and the costs of poor quality.

PROBLEMS

1. Use the basic COCOMO model under all three operating modes (organic, embedded, semidetached) and determine performance relations for the ratio of delivered source lines per person-month of effort. Examine this relation and its reasonableness for several types of software projects.

2. How would you go about including software engineering using rapid prototyping in the COCOMO models discussed here?

3. The decision to make or buy software is often a very important one. For many software engineering programs, there are opportunities to purchase an already available package that will function, perhaps with some amount of reengineering, as desired. Consider the following situations:

a. You are the manager of a software engineering organization. It costs your organization an average of $35 per line of code to completely engineer software through all phases of the life cycle. Your group estimates that the desired functionality will require 10,000 lines of delivered source code. One of your software engineers notes that it is possible to buy a software package with the desired functional capability for $20,000. Should the software product be purchased or should it be engineered by your organization, and why?

b. Further study indicates that 2000 lines of source code will have to be written and added to a possibly purchased software product to make it functionally useful. How does this alter the buy or make decision?

c. How do your responses to (a) and (b) change if you are the Chief Information Officer (CIO) for a third firm that has the opportunity to purchase already developed software or pay to have it developed especially for your firm?

4. How should the COCOMO models be used for cost estimation in an engineering effort that uses reusable software?

5. How would COCOMO be used for engineering a system using reusable software?

6. How would COCOMO be used to estimate costs using structural, functional, and purposeful prototyping?

7. Please prepare an analogous discussion to that in this chapter for COCOMO II. You should find useful the URL given earlier for the Center for Systems and Software Engineering at USC.

8. Please prepare a discussion analogous to that presented in this chapter for costing of systems engineering products and services. You should find useful the URL given earlier for the Center for Systems and Software Engineering at USC.

9. The cost of ownership of a system invariably involves much more than just the acquisition cost. A good example is the acquisition of a personal car. The price one pays, including the “deal” struck, destination charges, sales tax, etc., begins a time series of cash flows as long as one owns and operates the vehicle. These costs include fuel, maintenance, insurance, property taxes (or equivalent), tolls, parking, and so on.

a. Estimate the yearly total costs of owning and operating a private vehicle, both as an overall total per year and in terms of costs per hour of usage.

b. Projecting the time series of costs over the life of the vehicle, calculate the net present cost of the vehicle using the methods discussed in Chapter 6. Your answers here include your direct out-of-pocket total costs of ownership. There are also indirect costs. Closest to home are the costs of garaging the vehicle, which includes the costs (or mortgage payments) of the garage, insurance against fire or other damage, and maintenance of the garage. Another cost relates to the construction and maintenance of roads and highways on which you drive. A portion of your tax dollars supports the availability of roadways for your use. Not as close to home are the costs of defending energy sources, for example, in the oil-rich nations in the Middle East. A portion of your income tax dollars supports this defense. Even less direct are the costs of dealing with the pollution created by your car. Your contribution to environmental damage and global warming will eventually create costs that taxpayers will have to support.

c. Estimate your total indirect costs of vehicle ownership and operation, including any taxes you pay to enable your abilities to drive your vehicle.

d. Project your total annual and hourly costs, and discuss the insights you have gained in performing this cost analysis.

10. Assume that you have been commissioned to develop a software application, perhaps for an iPhone, that will calculate the net present total cost of ownership, both direct and indirect, of a new vehicle. The software language that you must use is highly simplified. It only allows unformatted inputs and outputs, one variable at a time. The only computations possible are addition, subtraction, multiplication, division, and exponentiation. The user of this software will need to input costs in each of the categories discussed in the previous problem, for each of the 10 years. Alternatively, the user might enter the costs for the first year with an escalation factor for subsequent years. The software will need to sum the costs and then compute the discounted present cost using a discount rate chosen by the user. Using COCOMO, estimate the expected effort needed to program this software application. Hint: This will require a very much reduced version of COCOMO. Make your assumptions very explicit as to how you have simplified the model.

BIBLIOGRAPHY AND REFERENCES

Andary JF, Sage AP. The role of service oriented architectures in systems engineering. Inf Knowl Syst Manag 2010;9(1):47–74.

Bailey JW, Basili VR. A meta-model for software development resource expenditures. Proceedings of the Fifth International Conference on Software Engineering; 1981. p 107–116.

Balda DM, Gustafson DA. Cost estimation models for the reuse and prototype software development life-cycles. ACM SIGSOFT Software Eng Notes 1990;15(3):1–18.

Boehm BW. Improving software productivity. IEEE Comput 1976a;20(9):43–57.

Boehm BW. Software engineering. IEEE Trans Comput 1976b;25(12):1226–1241.

Boehm BW. Software engineering economics. Englewood Cliffs, NJ: Prentice-Hall; 1981.

Boehm BW, Royce W. Ada COCOMO: TRW IOC version. Proceedings of the Third COCOMO Users Group Meeting; November 1987. Carnegie Mellon University, Software Engineering Institute; Pittsburgh PA.

Boehm B, et al. Software cost estimation with COCOMO II. Englewood Cliffs, NJ: Prentice-Hall; 2000.

Brooks FP. The mythical man-month. Reading, MA: Addison-Wesley; 1975.

Conte SD, Dunsmore HE, Shen VY. Software engineering metrics and models. New York: Benjamin Cummings; 1986.

Cooper R, Kaplan RS. Measure costs right: making the right decisions. Harv Business Rev 1988;66(5):96–103.

DeMarco T. Controlling software projects. New York: Yourdon Press; 1981.

Fox JM. Software and its development. Englewood Cliffs, NJ: Prentice Hall; 1985.

Helm, JE. The viability of using COCOMO in the special application software bidding and estimating process. IEEE transactions on engineering management 1992; 39 (1):42–58.

Jensen RW. A comparison of the Jensen and COCOMO schedule and cost estimation models. Proceedings of the International Society of Parametric Analysis; 1984. p 96–106.

Johnson HT, Kaplan RS. Relevance lost: the rise and fall of management accounting. Boston, MA: Harvard Business School Press; 1991.

Kaplan RS. Measures for manufacturing excellence. Boston, MA: Harvard Business School Press; 1990.

Kaplan RS, Cooper R. Cost management systems. Englewood Cliffs, NJ: Prentice Hall; 1990.

Kemerer CF. An empirical validation of software cost estimation models. Commun ACM 1987;30(5):416–429.

Lane JA, Boehm B. System of systems lead system integrators: where do they spend their time and what makes them more or less efficient. Syst Eng 2008;11(1):81–91.

Lane JA, Valerdi R. Synthesizing SoS concepts for use in cost modeling. Syst Eng 2007;10(1):297–308.

Lederer AL, Prasad J. Nine management guidelines for better cost estimating. Commun Assoc Comput Machinery 1992;35(2):51–59.

Norden PV. Useful tools for project management. In: Operations research in research and development. New York: Wiley; 1963.

O’Guin MO. The complete guide to activity based costing. Englewood Cliffs, NJ: Prentice Hall; 1991.

Porter AL, Roper AT, Mason TW, Rossini FA, Banks J. Forecasting and management of technology. New York: Wiley; 1991.

Putnam LH, Myers W. Measures for excellence: reliable software on time, within budget. Englewood Cliffs, NJ: Pergamon Press; 1992.

Rouse WB, editor. The economics of human systems integration: valuation of investments in people’s training and education, safety and health, and work productivity. New York: Wiley; 2010.

Sage AP. Systems engineering. New York: Wiley; 1992.

Sage AP. Systems management for information technology and software engineering. New York, Wiley; 1995.

Sage AP, Palmer JD. Software systems engineering. New York: Wiley; 1990.

Sage AP, Rouse WB, editors. Handbook of systems engineering and management. 2nd ed. New York: Wiley; 2009.

Thebaut SM, Shen VY. An analytic resource model for large-scale software development. Inf Processing Manag 1984;20(1–2):293–315.

Walston C, Felix C. A method of programming measurement and estimation. IBM Syst J 1977;10(1):54–73.

Wolverton RW. The cost of developing large scale software. IEEE Trans Comput 1974;23(6):615–636.

1It should be remarked that it would be unreasonable to expect organic software development of as large a system as would be represented by 1 million lines of delivered source instructions (1000 KDSI). In a similar manner, it is probably also unrealistic that there could be an embedded software development as small as 1000 lines of delivered source instructions (1 KDSI).

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset