Fast Abstracts Archives . .

FastAbstracts


WHAT IS a
FastAbstract

The History

Archives of
FastAbstracts

ISSRE 2003
ISSRE 2002
ISSRE 2001
ISSRE 2000
ISSRE 1999
ISSRE 1998
FTCS 1999
FTCS 1998



 

 

 
 
Toward a New Theory of Software:
Acknowledging Software Variance and Heterogeneity
 
I. Levendel - Motorola
1303 East Algonquin Road, Annex 2
Schaumburg, IL 60196-1065, USA
E-mail: ail003 @ email.mot.com

 

Contrary to many other industrial processes, software production is characterized by an unusually high variance. This directly results from the significant role of the human factor in all its phases. As a result, measurements and modeling, which are predicated on the homogeneous nature of software, do not provide dependable means of process control and analysis. This points at the need to develop a new model of software that better represents software behavior. The approach is based on the empirical evidence that software defects tend to congregate to "design holes" which are deficiencies analogous to poles in linear systems (software instabilities). The new model is derived from the "fingerprints" left by software changes on the software map (see example next).

 

c1

c2

c3

c4

c5

c6

c7

c8

c9

c10

c11

c12

c13

c14

f1
                         

....

f2
                         

....

f3
                         

....

f4
                         

....

f5
                         

....

f6
                         

....

f7
                         

....

f8
                         

....

f9
                         

....

.
                         

....

.
                         

....

The rows represent software functionalities fi and the columns represent the timeline of software changes cj. The self-correlation chains (repeated changes of the same functionality) c1-c3-c4, c4-c6, c6-c8-c11, and c2-c6 affect functionalities f3, f5, f7 and f8, respectively. These 4 self-correlation chains are cross-correlated by software changes c4 and c6 (affecting multiple modules) to create a composite correlation graph. We construct matrix C that integrates all of the self- and cross-correlation chains and provides a relative measure of self-correlation of functionalities and cross-correlations between them. An example of matrix C is given on page 2. The values on and outside the diagonal indicate the degree of functionality self-correlation and cross-correlation, respectively.

The C Matrix and Software Instabilities: Functionalities with a high level of self-correlation definitely represent areas of the software, which are subjected to a high level of repeated software changes (software instability areas). Furthermore, a cluster of several functionalities, each one being strongly cross-correlated with other functionalities inside the cluster and weakly cross-correlated with functionalities outside the cluster, will form a strongly self-correlated cluster, which represents a larger area of software instability.

Evaluation of Software Architecture "Goodness": Matrix C provides a graphical description of relationships between software functionalities from the failure viewpoint. In other words, functionality i "does not exists" if it never fails (Cii = 0), and functionalities, i and j, "are not connected" if their link never fails (Cij + Cji = 0). Conversely, if Cij + Cji is very large, then functionalities, i and j, are strongly connected because both need to be repaired when one of them fails. As a result, matrix C can be used to assess the goodness of the software architecture. In principle, two strongly connected functionalities, i and j, are really one functionality, and this strong connection contributes a demerit to the software architecture. Conversely, two weakly connected functionalities, i and j, contribute to a figure of merit of the software architecture.

Test Budgeting: The C matrix can be used to budget testing for new software proportionately to the size of the self-correlation (for functional testing) and of the cross-correlation (for interaction testing).

An example of (partial) C matrix

 

f1

f2

f3

f4

f5

f6

f7

f8

f9

f10

f11

f12

f13

f14

f1

5

4

0

25

0

0

1

0

21

0

2

2

0

....

f2

0

3

1

6

0

0

1

0

3

2

1

0

0

....

f3

0

3

7

6

0

0

1

0

4

2

2

0

0

....

f4

0

0

0

6

0

0

0

0

2

0

0

0

0

....

f5

0

8

5

56

4

1

7

1

21

8

6

1

0

....

f6

0

9

1

8

0

2

2

1

8

11

7

1

0

....

f7

0

1

0

6

0

0

5

1

3

1

1

0

0

....

f8

0

0

0

0

0

0

0

0

0

0

0

0

0

....

f9

0

2

0

13

0

0

1

0

8

1

3

0

0

....

f10

0

2

0

5

0

0

0

0

2

4

1

0

0

....

f11

0

0

0

2

0

0

0

0

1

0

2

0

0

....

f12

0

7

2

19

1

0

3

1

9

6

5

4

0

....

f13

0

7

0

9

0

0

1

0

7

5

2

1

0

....

f14

0

3

0

8

1

0

3

0

5

2

1

0

0

....

f15

0

2

0

9

0

0

1

0

4

0

2

0

0

....

f16

0

4

1

20

1

0

1

0

8

2

1

0

0

....

f17

0

3

1

9

0

0

1

0

5

2

3

0

0

....

f18

0

0

0

2

0

0

0

0

1

1

0

0

0

....

f19

0

3

1

11

0

0

2

0

5

2

3

0

0

....

f20

0

1

0

4

0

0

0

0

2

0

1

0

0

....

f21

0

1

0

2

0

0

0

0

1

0

0

0

0

....

f22

0

1

0

4

0

0

0

0

2

1

1

0

0

....

f23

0

0

0

0

0

0

0

0

0

0

0

0

0

....

f24

0

1

0

3

0

0

0

0

1

0

1

0

0

....

f25

0

0

0

2

0

0

0

0

1

0

1

0

0

....

f26

0

12

1

20

1

0

3

1

16

11

4

3

0

....

f27

0

1

0

2

0

0

0

0

2

2

0

0

0

....

f28

0

1

0

5

0

0

0

0

2

1

2

0

0

....

f29

0

1

0

5

0

0

1

0

2

1

1

0

0

....

f30

....

....

....

....

....

....

....

....

....

....

....

....

....

....

f31

....

....

....

....

....

....

....

....

....

....

....

....

....

....