根据我们的经验,需求变更越多,造成的软件修改越多,bug也就会越多,事实是否如此呢?需要我们根据历史的数据进行检验。某企业采集了历史上多个项目的的需求变更次数、交付代码的规模、软件测试发现的缺陷个数,参见下表,基于这些历史数据我们分析一下,看看我们的经验结论是否成立。
表一:需求变更的历史数据
ID | 需求变更数 | 代码规模LOC | 总缺陷数 | 测试缺陷密度bugs/KLOC | 需求变更密度(个/MLOC) |
1 | 0 |
| 221 | #DIV/0! | #DIV/0! |
2 | 0 | 18383 | 425 | 23.1191862 | 0 |
3 | 0 | 3141 | 33 | 10.50620821 | 0 |
4 | 0 | 40 | 2 | 50 | 0 |
5 | 0 | 1000 | 66 | 66 | 0 |
6 | 0 | 200 | 27 | 135 | 0 |
7 | 0 | 50 | 10 | 200 | 0 |
8 | 0 | 55041 | 34 | 0.617721335 | 0 |
9 | 0 | 25072 | 482 | 19.22463306 | 0 |
10 | 0 | 99703 | 0 | 0 | 0 |
11 | 0 | 14037 | 113 | 8.050153167 | 0 |
12 | 1 | 441243 | 20 | 0.045326498 | 2.266324905 |
13 | 1 | 100 | 11 | 110 | 10000 |
14 | 1 | 144907 | 276 | 1.904669892 | 6.900977869 |
15 | 1 | 1500 | 28 | 18.66666667 | 666.6666667 |
16 | 2 | 4664 | 84 | 18.0102916 | 428.8164666 |
17 | 2 | 122968 | 98 | 0.796955305 | 16.26439399 |
18 | 2 | 355699 | 42 | 0.118077363 | 5.622731579 |
19 | 2 | 77344 | 604 | 7.809267687 | 25.85850228 |
20 | 2 | 87163 | 330 | 3.786010119 | 22.94551587 |
21 | 3 | 13899 | 290 | 20.86481042 | 215.8428664 |
22 | 3 | 44000 | 95 | 2.159090909 | 68.18181818 |
23 | 4 | 68700 | 156 | 2.270742358 | 58.22416303 |
24 | 4 | 118126 | 422 | 3.572456529 | 33.8621472 |
25 | 5 | 30299 | 664 | 21.91491468 | 165.0219479 |
26 | 5 | 62323 | 445 | 7.140221106 | 80.22720344 |
27 | 5 | 72808 | 567 | 7.787605758 | 68.67377211 |
28 | 6 |
| 131 | #DIV/0! | #DIV/0! |
29 | 7 | 33300 | 908 | 27.26726727 | 210.2102102 |
30 | 9 | 77691 | 242 | 3.114903914 | 115.843534 |
31 | 10 | 35000 | 1053 | 30.08571429 | 285.7142857 |
32 | 10 | 177138 | 698 | 3.940430625 | 56.45316081 |
33 | 11 | 188964 | 755 | 3.995470037 | 58.21214623 |
34 | 13 | 40626 | 739 | 18.19032147 | 319.9921233 |
35 | 15 | 127150 | 871 | 6.850176956 | 117.9709005 |
36 | 39 | 341860 | 2015 | 5.894225706 | 114.0817879 |
37 | 45 | 210000 | 1642 | 7.819047619 | 214.2857143 |
38 | 130 | 244000 | 1599 | 6.553278689 | 532.7868852 |
首先我们来看看总缺陷数与需求变更数的关系:
图1 需求变更数与测试发现的总缺陷图之间的散点图(未删除离群点)
在图1中,我们发现存在显著离群点,该点游离于总体的趋势之外,删除之,重新画图:
图2需求变更数与缺陷总数的散点图
此时,可以清楚的发现随着需求变更数的增加,总缺陷数是在增加的,二者是正相关的!最右侧存在两个点离群,对总缺陷数做正态分布分析,发现不服从正态分布,于是对总缺陷数做开方变换,变换后的数据服从正态分布,并删除离群点后得拟合线图如下:
图3 需求变更数与测试缺陷数的平方根的拟合线图
通过以上的分析我们可以发现需求变更数与测试缺陷数之间存在强相关。
我们也可以试着分析单位代码行的需求变更次数与单位代码行的缺陷个数之间的关系,即表格中最后两列的相关性。排除离群点后,可以发现每百万行代码的需求变更次数与每千行代码测试发现的缺陷数是弱相关的:
综上所述,在这家公司里,通过38个项目的历史数据,可以初步得到这样结论:需求变更越多,系统中的缺陷越多。