8.    Summary

8.1             Models

8.1.1       Sizing equations

The Post-Architecture and Early Design models use the same sizing equations.  Sizing is summarized below and discussed in Section 2.

                          

Symbol

Description

AA

Assessment and Assimilation

AAF

Adaptation Adjustment Factor

AAM

Adaptation Adjustment Modifier

CM

Percent Code Modified

DM

Percent Design Modified

IM

Percent of Integration Integration Required for the Adapted Software

KSLOC

Thousands of Source Lines of Code

REVL

Requirements Evolution and Volatility

SU

Software Understanding

UNFM

Programmer Unfamiliarity with Software

8.1.2       Post-Architecture Model equations

                                           

Symbol

Description

A

Effort coefficient that can be calibrated, currently set to 2.94

AT

Percentage of the code that is re-engineered by automatic translation

ATPROD

Automatic translation productivity

B

Scaling base-exponent that can be calibrated, currently set to 0.91

E

Scaling exponent described in Section 3.1

EM

17 Effort Multipliers discussed in Section 3.2.1

PM

Person-Months effort from developing new and adapted code

PMAuto

Person-Months effort from automatic translation activities discussed in Section 2.6.

SF

5 Scale Factors discussed in Section 3.1

8.1.3       Early Design Model equations

                                             

Symbol

Description

A

Effort coefficient that can be calibrated, currently set to 2.94

E

Scaling exponent described in Section 3.1

EM

7 Effort Multipliers discussed in Section 3.2.2

PM

Person-Months effort from developing new and adapted code

PMAuto

Person-Months effort from automatic translation activities discussed in Section 2.6.

SF

5 Scale Factors discussed in Section 3.1

8.1.4       Time to Develop equation

                                                 

Symbol

Description

B

The scaling base-exponent for the effort equation, currently set to 0.91

C

Coefficient that can be calibrated, currently set to 3.67

D

Scaling base-exponent that can be calibrated, currently set to 0.28

E

The scaling exponent for the effort equation

PMNS

Person-Months estimated without the SCED cost driver (Nominal Schedule)

SCED

Required Schedule Compression

TDEV

Time to Develop in calendar months

8.2             Driver Rating Scales

The driver rating scales for the Scale Drivers are given below and discussed in Section 3.1.

Scale Drivers

 

Very Low

 

Low

 

Nominal

 

High

 

Very High

 

Extra High

 

PREC

thoroughly unprecedented

largely unprecedented

somewhat unprecedented

generally familiar

largely familiar

thoroughly familiar

FLEX

rigorous

occasional relaxation

some relaxation

general conformity

some conformity

general goals

RESL

little (20%)

some (40%)

often (60%)

generally (75%)

mostly (90%)

full (100%)

 

TEAM

very difficult interactions

some difficult interactions

basically cooperative interactions

largely cooperative

highly cooperative

seamless interactions

 

PMAT

SW-CMM Level 1 Lower

SW-CMM Level 1 Upper

SW-CMM Level 2

SW-CMM Level 3

SW-CMM Level 4

SW-CMM Level 5

 

or the estimated Process Maturity Level (EMPL)

The driver rating scales for the Post-Architecture model Cost Drivers are given below in Table 62 and discussed in Section 3.2.1.  The Cost Drivers for the Early Design model are discussed in Section 3.2.2

 

Cost Drivers

 

Very Low

 

Low

 

Nominal

 

High

 

Very High

 

Extra High

RELY

slight inconvenience

low, easily recoverable losses

moderate, easily recoverable losses

high financial loss

risk to human life

 

DATA

 

DB bytes / Pgm SLOC < 10

10 £ D/P < 100

100 £ D/P < 1000

D/P > 1000

 

CPLX

see Table 19

RUSE

 

none

across project

across program

across product line

across multiple product lines

DOCU

Many life-cycle needs uncovered

Some life-cycle needs uncovered.

Right-sized to life-cycle needs

Excessive for life-cycle needs

Very excessive for life-cycle needs

 

TIME

 

 

£ 50% use of available execution time

70%

85%

95%

STOR

 

 

£ 50% use of available storage

70%

85%

95%

PVOL

 

major change every 12 mo.; minor change every 1 mo.

major: 6 mo.; minor: 2 wk.

major: 2 mo.; minor: 1 wk.

major: 2 wk.; minor: 2 days

 

ACAP

15th percentile

35th percentile

55th percentile

75th percentile

90th percentile

 

PCAP

15th percentile

35th percentile

55th percentile

75th percentile

90th percentile

 

PCON

48% / year

24% / year

12% / year

6% / year

3% / year

 

APEX

£ 2 months

6 months

1 year

3 years

6 years

 

PLEX

£ 2 months

6 months

1 year

3 years

6 year

 

LTEX

£ 2 months

6 months

1 year

3 years

6 year

 

TOOL

edit, code, debug

simple, frontend, backend CASE, little integration

basic lifecycle tools, moderately integrated

strong, mature lifecycle tools, moderately integrated

strong, mature, proactive lifecycle tools, well integrated with processes, methods, reuse

 

SITE:

Collo-cation

International

Multi-city and multi-company

Multi-city or multi-company

Same city or metro area

Same building or complex

Fully collocated

SITE:

Com-muni-cation

Some phone, mail

Individual phone, FAX

Narrow-band email

Wide-band electronic communica-tion.

Wide-band elect. comm, occasional video conf.

Interactive multimedia

SCED

75% of nominal

85% of nominal

100% of nominal

130% of nominal

160% of nominal

 

8.3             COCOMO II Version Parameter Values

8.3.1       COCOMO II.2000 Calibration

The following table, Table 62,  shows the COCOMO II.2000 calibrated values for Post-Architecture scale factors and effort multipliers.

 

Table 1.         COCOMO II 2000 Calibrated Post-Architecture Model Values

Baseline Effort Constants:          A = 2.94;           B = 0.91

Baseline Schedule Constants:    C = 3.67;           D = 0.28

 

 

Driver

Symbol

VL

L

N

H

VH

XH

 

 

PREC

SF1

6.20

4.96

3.72

2.48

1.24

0.00

 

 

FLEX

SF2

5.07

4.05

3.04

2.03

1.01

0.00

 

 

RESL

SF3

7.07

5.65

4.24

2.83

1.41

0.00

 

 

TEAM

SF4

5.48

4.38

3.29

2.19

1.10

0.00

 

 

PMAT

SF5

7.80

6.24

4.68

3.12

1.56

0.00

 

 

RELY

EM1

0.82

0.92

1.00

1.10

1.26

 

 

 

DATA

EM2

 

0.90

1.00

1.14

1.28

 

 

 

CPLX

EM3

0.73

0.87

1.00

1.17

1.34

1.74

 

 

RUSE

EM4

 

0.95

1.00

1.07

1.15

1.24

 

 

DOCU

EM5

0.81

0.91

1.00

1.11

1.23

 

 

 

TIME

EM6

 

 

1.00

1.11

1.29

1.63

 

 

STOR

EM7

 

 

1.00

1.05

1.17

1.46

 

 

PVOL

EM8

 

0.87

1.00

1.15

1.30

 

 

 

ACAP

EM9

1.42

1.19

1.00

0.85

0.71

 

 

 

PCAP

EM10

1.34

1.15

1.00

0.88

0.76

 

 

 

PCON

EM11

1.29

1.12

1.00

0.90

0.81

 

 

 

APEX

EM12

1.22

1.10

1.00

0.88

0.81

 

 

 

PLEX

EM13

1.19

1.09

1.00

0.91

0.85

 

 

 

LTEX

EM14

1.20

1.09

1.00

0.91

0.84

 

 

 

TOOL

EM15

1.17

1.09

1.00

0.90

0.78

 

 

 

SITE

EM16

1.22

1.09

1.00

0.93

0.86

0.80

 

 

SCED

EM17

1.43

1.14

1.00

1.00

1.00

 

 

 

Table 63 shows the COCOMO II.2000 calibrated values for Early Design effort multipliers.  The scale factors are the same as for the Post-Architecture model.

 

Table 2.         COCOMO II.2000 Calibrated Early Design Model Values

Baseline Effort Constants:          A = 2.94;           B = 0.91

Baseline Schedule Constants:    C = 3.67;           D = 0.28

 

 

Driver

Symbol

XL

VL

L

N

H

VH

XH

 

 

PERS

EM1

2.12

1.62

1.26

1.00

0.83

0.63

0.50

 

 

RCPX

EM2

0.49

0.60

0.83

1.00

1.33

1.91

2.72

 

 

PDIF

EM3

 

 

0.87

1.00

1.29

1.81

2.61

 

 

PREX

EM4

1.59

1.33

1.12

1.00

0.87

0.74

0.62

 

 

FCIL

EM5

1.43

1.30

1.10

1.0

0.87

0.73

0.62

 

 

RUSE

EM6

 

 

0.95

1.00

1.07

1.15

1.24

 

 

SCED

EM7

 

1.43

1.14

1.00

1.00

1.00

 

 

 

8.3.2       COCOMO II.1997 Calibration

The following table shows the COCOMO II.1997 calibrated values for scale factors and effort multipliers.

 

Baseline Effort Constants:          A = 2.45;           B = 1.01

Baseline Schedule Constants:    C = 2.66;           D = 0.33

 

 

Driver

Symbol

VL

L

N

H

VH

XH

 

PREC

SF1

4.05

3.24

2.43

1.62

0.81

0.00

 

FLEX

SF2

6.07

4.86

3.64

2.43

1.21

0.00

 

RESL

SF3

4.22

3.38

2.53

1.69

0.84

0.00

 

TEAM

SF4

4.94

3.95

2.97

1.98

0.99

0.00

 

PMAT

SF5

4.54

3.64

2.73

1.82

0.91

0.00

 

RELY

EM1

0.75

0.88

1.00

1.15

1.39

 

 

DATA

EM2

 

0.93

1.00

1.09

1.19

 

 

RUSE

EM3

 

0.91

1.00

1.14

1.29

1.49

 

DOCU

EM4

0.89

0.95

1.00

1.06

1.13

 

 

CPLX

EM5

0.75

0.88

1.00

1.15

1.30

1.66

 

TIME

EM6

 

 

1.00

1.11

1.31

1.67

 

STOR

EM7

 

 

1.00

1.06

1.21

1.57

 

PVOL

EM8

 

0.87

1.00

1.15

1.30

 

 

ACAP

EM9

1.50

1.22

1.00

0.83

0.67

 

 

PCAP

EM10

1.37

1.16

1.00

0.87

0.74

 

 

PCON

EM11

1.24

1.10

1.00

0.92

0.84

 

 

APEX

EM12

1.22

1.10

1.00

0.89

0.81

 

 

PLEX

EM13

1.25

1.12

1.00

0.88

0.81

 

 

LTEX

EM14

1.22

1.10

1.00

0.91

0.84

 

 

TOOL

EM15

1.24

1.12

1.00

0.86

0.72

 

 

SITE

EM16

1.25

1.10

1.00

0.92

0.84

0.78

 

SCED

EM17

1.29

1.10

1.00

1.00

1.00

 

 


8.4             Source Code Counting Rules

What is a line of source code? This checklist, adopted from the Software Engineering Institute [Park 1992], attempts to define a logical line of source code. The intent is to define a logical line of code while not becoming too language specific for use in collection data to validate the COCOMO 2.0 model.

 

Table 3.         COCOMO II SLOC Checklist

 

Definition Checklist for Source Statements Counts

Definition name:             Logical Source Statements                     Date:_______________

                                    (basic definition)                         Originator: COCOMO II

 

Measurement unit:

Physical source lines

 

 

 

 

 

 

Logical source statements

Ö

 

 

 

 

Statement type

Definition

Ö

Data Array

 

 

Includes

Excludes

 

When a line or statement contains more than one type,

classify it as the type with the highest precedence.

 

 

 

 

 

1 Executable

 

Order of precedence:

1

Ö

 

 

2 Nonexecutable

 

 

 

 

3 Declarations

2

Ö

 

 

4 Compiler directives

3

Ö

 

 

5 Comments

 

 

 

 

6 On their own lines

4

 

Ö

 

7 On lines with source code

5

 

Ö

 

8 Banners and non-blank spacers

6

 

Ö

 

9 Blank (empty) comments

7

 

Ö

 

10 Blank lines

8

 

Ö

 

How produced

Definition

Ö

Data array

 

 

Includes

Excludes

 

1 Programmed

 

Ö

 

 

2 Generated with source code generators

 

 

Ö

 

3 Converted with automated translators

 

Ö

 

 

4 Copied or reused without change

 

Ö

 

 

5 Modified

 

Ö

 

 

6 Removed

 

 

Ö

 

Origin

Definition

Ö

Data array

 

 

Includes

Excludes

 

1 New work: no prior existence

 

Ö

 

 

2 Prior work: taken or adapted from

 

 

 

 

3 A previous version, build, or release

 

Ö

 

 

4 Commercial, off-the-shelf software (COTS), other than libraries

 

 

Ö

 

5 Government furnished software (GFS), other than reuse libraries

 

 

Ö

 

6 Another product

 

 

Ö

 

7 A vendor-supplied language support library (unmodified)

 

 

Ö

 

8 A vendor-supplied operating system or utility (unmodified)

 

 

Ö

 

9 A local or modified language support library or operating system

 

 

Ö

 

10 Other commercial library

 

 

Ö

 

11 A reuse library (software designed for reuse)

 

Ö

 

 

12 Other software component or library

 

Ö

 

 

Usage

Definition

Ö

Data array

 

 

Includes

Excludes

 

1 In or as part of the primary product

 

Ö

 

 

2 External to or in support of the primary product

 

 

Ö

 

Delivery

Definition

Ö

Data array

 

 

Includes

Excludes

 

1 Delivered:

 

 

 

 

 

2 Delivered as source

 

Ö

 

 

3 Delivered in compiled or executable form, but not as source

 

 

Ö

4 Not delivered:

 

 

 

 

5 Under configuration control

 

 

Ö

 

6 Not under configuration control

 

 

Ö

 

Functionality

Definition

Ö

Data array

 

 

Includes

Excludes

 

1 Operative

 

Ö

 

 

2 Inoperative (dead, bypassed, unused, unreferenced, or unaccessible):

 

 

 

 

3 Functional (intentional dead code, reactivated for special purposes)

 

Ö

 

 

4 Nonfunctional (unintentionally present)

 

 

Ö

 

Replications

Definition

Ö

Data array

 

 

Includes

Excludes

 

1 Master source statements (originals)

 

Ö

 

 

2 Physical replicates of master statements, stored in the master code

 

Ö

 

 

3 Copies inserted, instantiated, or expanded when compiling or linking

 

 

Ö

 

4 Postproduction replicates—as in distributed, redundant, or reparameterized systems

 

 

Ö

 

Development status

Definition

Ö

Data array

 

 

Includes

Excludes

 

Each statement has one and only one status, usually that of its parent unit.

 

 

 

 

1Estimated or planned

 

 

Ö

 

2 Designed

 

 

Ö

 

3 Coded

 

 

Ö

 

4 Unit tests completed

 

 

Ö

 

5 Integrated into components

 

 

Ö

 

6 Test readiness review completed

 

 

Ö

 

7 Software (CSCI) tests completed

 

 

Ö

 

8 System tests completed

 

Ö

 

 

Language

Definition

Ö

Data array

 

 

Includes

Excludes

 

List each source language on a separate line.

 

 

 

 

1 Separate totals for each language

 

Ö

 

 

Clarifications

Definition

Ö

Data array

 

 

Includes

Excludes

 

(general)

 

 

 

 

1 Nulls, continues, and no-ops

 

Ö

 

 

2 Empty statements, e.g. “;;” and lone semicolons on separate lines

 

 

Ö

 

3 Statements that instantiate generics

 

Ö

 

 

4 Begin...end and {...} pairs used as executable statements

 

Ö

 

 

5 Begin...end and {...} pairs that delimit (sub)program bodies

 

 

Ö

 

6 Logical expressions used as test conditions

 

 

Ö

 

7 Expression evaluations used as subprograms arguments

 

 

Ö

 

8 End symbols that terminate executable statements

 

 

Ö

 

9 End symbols that terminate declarations or (sub)program bodies

 

 

Ö

 

10 Then, else, and otherwise symbols

 

 

Ö

 

11 Elseif statements

 

Ö

 

 

12 Keywords like procedure division, interface, and implementation

 

Ö

 

 

13 Labels (branching destinations) on lines by themselves

 

 

Ö

 

Clarifications

Definition

Ö

Data array

 

 

Includes

Excludes

 

(language specific)

 

 

 

 

Ada

 

 

 

 

1 End symbols that terminate declarations or (sub)program bodies

 

 

Ö

 

2 Block statements, e.g. begin...end

 

Ö

 

 

3 With and use clauses

 

Ö

 

 

4 When (the keyword preceding executable statements)

 

 

Ö

 

5 Exception (the keyword, used as a frame header)

 

Ö

 

 

6 Pragmas

 

Ö

 

 

Assembly

 

 

 

 

1 Macro calls

 

Ö

 

 

2 Macro expansions

 

 

Ö

 

C and C++

 

 

 

 

1 Null statement, e.g. “;” by itself to indicate an empty body4

 

 

Ö

 

2 Expression statements (expressions terminated by semicolons)

 

Ö

 

 

3 Expression separated by semicolons, as in a “for” statement

 

Ö

 

 

4 Block statements, e.g. {...} with no terminating semicolon

 

Ö

 

 

5 “;”, “;” or “;” on a line by itself when part of a declaration

 

 

Ö

 

6 “;” or “;” on a line by itself when part of an executable statement

 

 

Ö

 

7 Conditionally compiled statements (#if, #ifdef, #ifndef)

 

Ö

 

 

8 Preprocessor statements other than #if, #ifdef, and #ifndef

 

Ö

 

 

CMS-2

 

 

 

 

1 Keywords like SYS-PROC and SYS-DD

 

Ö

 

 

COBOL

 

 

 

 

1 “PROCEDURE DIVISION”, “END DECLARATIVES”, etc.

 

Ö

 

 

FORTRAN

 

 

 

 

1 END statements

 

Ö

 

 

2 Format statements

 

Ö

 

 

3 Entry statements

 

Ö

 

 

PASCAL

 

 

 

 

1 Executable statements not terminated by semicolons

 

Ö

 

 

2 Keywords like INTERFACE and IMPLEMENTATION

 

Ö

 

 

3 FORWARD declarations

 

Ö

 

 

 

 

Summary of Statement Types

 

 

Executable statements

Executable statements cause runtime actions. They may be simple statements such as assignments, goto’s, procedure calls, macro calls, returns, breaks, exits, stops, continues, nulls, no-ops, empty statements, and FORTRAN’s END. Or they may be structured or compound statements, such as conditional statements, repetitive statements, and “with” statements. Languages like Ada, C, C++, and Pascal have block statements [begin...end and {...}] that are classified as executable when used where other executable statements would be permitted. C and C++ define expressions as executable statements when they terminate with a semicolon, and C++ has a <declaration> statement that is executable.

 

 

Declarations

Declarations are nonexecutable program elements that affect an assembler’s or compiler’s interpretation of other program elements They are used to name, define, and initialize; to specify internal and external interfaces; to assign ranges for bounds checking; and to identify and bound modules and sections of code. Examples include declarations of names, numbers, constants, objects, types, subtypes, programs, subprograms, tasks, exceptions, packages, generics, macros, and deferred constants. Declarations also include renaming declarations, use clauses, and declarations that instantiate generics. Mandatory begin...end and {...} symbols that delimit bodies of programs and subprograms are integral parts of program and subprogram declarations. Language superstructure elements that establish boundaries for different sections of source code are also declarations. Examples include terms such as PROCEDURE DIVISION, DATA DIVISION, DECLARATIVES, END DECLARATIVES, INTERFACE, IMPLEMENTATION, SYS-PROC and SYS-DD. Declarations, in general, are never required by language specifications to initiate runtime actions, although some languages permit compilers to implement them that way.

 

 

Compiler Directives

Compiler directives instruct compilers, preprocessors, or translators (but not runtime systems) to perform special actions. Some, such as Ada’s pragma and COBOL’s COPY, REPLACE, and USE, are integral parts of the source language. In other languages like C and C++, special symbols like # are used along with standardized keywords to direct preprocessor or compiler actions. Still other languages rely on nonstandardized methods supplied by compiler vendors. In these languages, directives are often designated by special symbols such as #, $, and {$}.