在預測軟件的可靠性時,可以根據該軟件多輪測試發現的缺陷個數來預測應該發現的總缺陷數。在軟件測試過程中,最開始的時候,會呈現缺陷增長較快的趨勢狀態,隨着測試的進行,測試難度加大,需要執行較多的測試用例才能發現一個缺陷,雖然繼續投入測試,仍然會持續發現缺陷,但是明顯缺陷的增長速度會減緩,同時軟件中隱藏的缺陷是有限的,因而限制了發現缺陷數的無限增長。在實踐中預測總缺陷數的常用方法是Gompertz模型,該模型預測的準確率很高,尤其是當測試輪次超過總輪次的1/3之後。
其實Gompertz模型最初並非是針對軟件領域的,而是用來預測人類的死亡概率,所以人們也稱之爲:“Gompertz人類死亡定律”,它是由英國保險精算師Benjamin Gompertz在1825年首次發現:你認爲你在明年死的概率是多少?試着用一個數字回答——百分之一?萬分之一?不管是多少,這個數字將在8年後增長一倍!這意味着人們能活到某個特定年齡的概率是在不斷加速下降的。 該模型可以用來刻畫這樣的現象:初期增長緩慢,以後逐漸加快,當達到一定程度後,增長率又逐漸下降,最後接近一條漸近線(K值)。現實中有許多現象符合Gompertz曲線,如軟件缺陷的發現、一定時期的人口增長等,因而該曲線被廣泛應用於現象的趨勢變動研究。
Gompertz模型是一個雙指數公式:
其中:
t是自變量,代表時間,如測試輪次等;
K代表Y的極限值,即當t趨向於無窮大時Y的取值,如軟件中隱藏的缺陷總數;
a<1,Ka爲t=0時Y的初始值;
0<b<1,b爲形狀參數,b越大,代表可靠性增長越慢,到達極限值的速度越慢,如軟件測試的週期越長。
當已知了歷史數據之後,就可以根據歷史數據採用三和法、三點法、高斯牛頓法等多種方法求出K,a,b值,從而擬合出該現象的發展趨勢。儘管該方法理論上有一些前提條件,但是實踐中我們忽略其前提條件,仍然有很高的準確度。
我們以2003年4月20日到6月12日65天的北京市非典數據爲例進行測算一下:
序號
|
日 期 |
已確診病例累計 |
新增確診 |
1 |
4月20日 |
339 |
339 |
2 |
4月21日 |
482 |
143 |
3 |
4月22日 |
588 |
106 |
4 |
4月23日 |
693 |
105 |
5 |
4月24日 |
774 |
81 |
6 |
4月25日 |
877 |
103 |
7 |
4月26日 |
988 |
111 |
8 |
4月27日 |
1114 |
126 |
9 |
4月28日 |
1199 |
85 |
10 |
4月29日 |
1347 |
148 |
11 |
4月30日 |
1440 |
93 |
12 |
5月1日 |
1553 |
113 |
13 |
5月2日 |
1636 |
83 |
14 |
5月3日 |
1741 |
105 |
15 |
5月4日 |
1803 |
62 |
16 |
5月5日 |
1897 |
94 |
17 |
5月6日 |
1960 |
63 |
18 |
5月7日 |
2049 |
89 |
19 |
5月8日 |
2136 |
87 |
20 |
5月9日 |
2177 |
41 |
21 |
5月10日 |
2227 |
50 |
22 |
5月11日 |
2265 |
38 |
23 |
5月12日 |
2304 |
39 |
24 |
5月13日 |
2347 |
43 |
25 |
5月14日 |
2370 |
23 |
26 |
5月15日 |
2388 |
18 |
27 |
5月16日 |
2405 |
17 |
28 |
5月17日 |
2420 |
15 |
29 |
5月18日 |
2434 |
14 |
30 |
5月19日 |
2437 |
3 |
31 |
5月20日 |
2444 |
7 |
32 |
5月21日 |
2444 |
0 |
33 |
5月22日 |
2456 |
12 |
34 |
5月23日 |
2465 |
9 |
35 |
5月24日 |
2490 |
25 |
36 |
5月25日 |
2499 |
9 |
37 |
5月26日 |
2504 |
5 |
38 |
5月27日 |
2512 |
8 |
39 |
5月28日 |
2514 |
2 |
40 |
5月29日 |
2517 |
3 |
41 |
5月30日 |
2520 |
3 |
42 |
5月31日 |
2521 |
1 |
43 |
6月16日 |
2521 |
0 |
44 |
6月17日 |
2521 |
0 |
45 |
6月18日 |
2521 |
0 |
46 |
6月19日 |
2521 |
0 |
47 |
6月20日 |
2521 |
0 |
48 |
6月21日 |
2521 |
0 |
49 |
6月22日 |
2521 |
0 |
50 |
6月23日 |
2521 |
0 |
51 |
6月1日 |
2522 |
1 |
52 |
6月2日 |
2522 |
0 |
53 |
6月3日 |
2522 |
0 |
54 |
6月4日 |
2522 |
0 |
55 |
6月5日 |
2522 |
0 |
56 |
6月6日 |
2522 |
0 |
57 |
6月8日 |
2522 |
0 |
58 |
6月9日 |
2522 |
0 |
59 |
6月10日 |
2522 |
0 |
60 |
6月13日 |
2522 |
0 |
61 |
6月14日 |
2522 |
0 |
62 |
6月15日 |
2522 |
0 |
63 |
6月7日 |
2523 |
1 |
64 |
6月11日 |
2523 |
0 |
65 |
6月12日 |
2523 |
0 |
在1stopt軟件中對上述65天的數據進行擬合得到如下的結果:
相關係數(R): 0.9993
相關係數之平方(R^2): 0.9987
參數 最佳估算
---------- -------------
K 2539.2751
a 0.0991
b 0.8769
即模型預測的最終確診人數上限爲2539,在疫情發展過程中,我們可以每天進行預測K值的變化,以下爲基於上述2003年非典數據每5天一次的預測結果與實際值的對比:
第幾天進行預測 |
K值(上限) |
與實際值2523的偏差 |
與實際值的偏差率 |
5 |
982 |
-1541 |
-61.08% |
10 |
2530 |
7 |
0.28% |
15 |
2715 |
192 |
7.61% |
20 |
2779 |
256 |
10.15% |
25 |
2712 |
189 |
7.49% |
30 |
2632 |
109 |
4.32% |
35 |
2581 |
58 |
2.30% |
40 |
2569 |
46 |
1.82% |
45 |
2560 |
37 |
1.47% |
50 |
2552 |
29 |
1.15% |
55 |
2546 |
23 |
0.91% |
60 |
2542 |
19 |
0.75% |
65 |
2539 |
16 |
0.63% |
綜合上表我們可以發現該模型在初期,即疫情發展的前5天,趨勢不明顯時,預測結果偏差較大,但是中後期擬合的效果還是很好的!
如果採用該方法預測一下當下的新型冠狀病毒肺炎的趨勢會是怎麼樣的呢?敬請關注後續文章!