預(yù)測工具的基礎(chǔ)知識—成長曲線
作者: 來源: 文字大小:[大][中][小]
什么是成長曲線?成長曲線就是描繪觀測樣本從初始階段不斷發(fā)展壯大所經(jīng)歷的全部過程的曲線。在軟件領(lǐng)域的成長曲線的過程中,要觀測的樣本值會經(jīng)歷萌芽、發(fā)展、穩(wěn)定等階段。成長曲線在很多方面都有應(yīng)用,比如在報紙上、經(jīng)濟類刊物上常常能看到的經(jīng)濟成長曲線、品牌成長曲線;再比如細心的媽媽都會把寶寶出生后的成長情況記錄下來,繪成兒童成長曲線等等。
在軟件領(lǐng)域中同樣有成長曲線,軟件領(lǐng)域中的成長曲線反映了軟件系統(tǒng)中的要觀測的某個屬性隨著各種因素(如時間、成本等)變化發(fā)展的情況。成長曲線可以擬合事物發(fā)展的趨勢,曲線擬合(Curve fitting)就是用連續(xù)曲線近似地刻畫或比擬平面上離散的點表示的坐標之間的函數(shù)關(guān)系的一種數(shù)據(jù)處理方法。在數(shù)值分析中,曲線擬合就是用解析表達式逼近離散數(shù)據(jù),即離散數(shù)據(jù)的公式化,就是選擇適當(dāng)?shù)那€類型來擬合觀測數(shù)據(jù),并用擬合的曲線方程分析兩變量間的關(guān)系。
接著回到軟件領(lǐng)域中的成長曲線上。對于一個系統(tǒng)來說,進入開發(fā)階段后,開發(fā)人員每天都要完成一定量的代碼行,而代碼行的總數(shù)在項目計劃階段就應(yīng)當(dāng)是估算好的,那么,開發(fā)人員應(yīng)當(dāng)按照怎樣的速度完成這些代碼;已經(jīng)完成了一部分代碼后,能否判斷出這樣的速度是否合理、能否按期完成任務(wù);前期完成過多代碼可能會造成后期工作量太小,而前期完成太少代碼又可能會帶來后期的工作繁重。也許這時,你就會迫切需要一個工具來對開發(fā)人員的工作進行監(jiān)控。進入測試階段也是一樣。所以這里提到的軟件領(lǐng)域中的成長曲線的預(yù)測,就是針對軟件的開發(fā)階段和測試階段的。再以測試為例,成長曲線能夠反映缺陷從最初的測試出的缺陷較少,到中期不斷發(fā)展增多,再到最終測出的缺陷數(shù)穩(wěn)定不變的全部過程。成長曲線應(yīng)當(dāng)是連續(xù)的,它能夠表示一段時間內(nèi)事物持續(xù)發(fā)展的情況,能夠表示事物在一個持續(xù)的時間段內(nèi)發(fā)展的全過程。
成長曲線有很多種形式。常見的線性曲線也可以看作是成長曲線的一種,只是在現(xiàn)實中,線性曲線的使用不如非線性曲線廣泛。下面將幾種常見的成長曲線歸納介紹,希望對大家的理解有所幫助。
1. Rayleigh模型
Rayleigh模型是Weibull分布的一種特殊形式,是一種常用的模型。Weibull分布最重要的一個特征是它的概率密度函數(shù)的尾部逐漸逼近0,但永遠達不到0,在許多工程領(lǐng)域都使用了很多年。Rayleigh模型既可以對軟件開發(fā)全生命周期進行預(yù)測,也可以僅對測試階段的缺陷分布進行預(yù)測,得到所期望的時間間隔t與所發(fā)現(xiàn)缺陷的關(guān)系。對于成熟的組織,當(dāng)項目周期、軟件規(guī)模和缺陷密度已經(jīng)確定時,就可以得到確定的缺陷分布曲線,并可以據(jù)此控制項目過程的缺陷率。如果項目進行中實際的缺陷值與預(yù)估的缺陷值有較大差別時,說明中間出現(xiàn)問題,需要加以控制。
1) Rayleigh模型的函數(shù)形式
Rayleigh模型的累積分布函數(shù)(CDF):F(t)=K*(1-exp^(-(t/c)^2));
Rayleigh模型的概率密度函數(shù)(PDF):f(t)=2*K*t/(c^2)*( exp^(-(t/c)^2))。
上面兩個函數(shù)中,t是時間自變量,c是一個常量(c=2^(1/2)tm,tm是f(t)到達峰值對應(yīng)的時間),K是曲線與坐標形成的面積(總?cè)毕輸?shù)),也是我們要估計的參數(shù)。多年的預(yù)測經(jīng)驗得到缺陷在tm時間的比率(F(tm)/K)約等于0.4,即在f(t)到達最大值時,已出現(xiàn)的缺陷大約占總?cè)毕莸?0%。按照這個推導(dǎo),在某一時間就可以估算出總的缺陷數(shù)以及具體的Rayleigh分布參數(shù),從而將缺陷的計算過程簡化。
2) Rayleigh函數(shù)對應(yīng)的圖
圖1 Rayleigh模型的CDF圖
圖2 Rayleigh模型的PDF圖
由圖1——CDF圖可以看出,累積密度最終趨近一個最大值(K);由圖2——PDF圖可以看出,缺陷隨時間逐漸降低最終趨向于0。
3) 使用Rayleigh曲線來建模軟件開發(fā)質(zhì)量涉及兩個假設(shè):
在開發(fā)過程中觀察到的缺陷率與應(yīng)用中的缺陷率成正比關(guān)系。對應(yīng)于圖1來說,也就是如果開發(fā)過程中觀測到的缺陷率越高,CDF中圖的幅度越高,K值越大;
給定同樣的錯誤植入率,假如更多的缺陷被發(fā)現(xiàn)并更早將其移出,那么在后期階段遺留的缺陷就更少,應(yīng)用領(lǐng)域的質(zhì)量就更好。對應(yīng)于圖2來說,曲線與X、Y軸圍成區(qū)域的面積是一定的(總的缺陷數(shù)是確定的),如果在前期移除較多缺陷,即曲線的峰值點前移,那么后期曲線的面積就會小,代表后期遺留的缺陷數(shù)減少。
4) 使用場景:收集數(shù)據(jù)應(yīng)當(dāng)越早越好;且需要持續(xù)的追蹤缺陷數(shù)。
5) 優(yōu)勢:隨時間信息的缺陷密度可預(yù)測,因此在測試階段使得找到并驗證缺陷的估計成為可能。
6) Rayleigh模型沒有考慮到變化調(diào)整的機制,所以可能會影響到缺陷的預(yù)測。
2. 指數(shù)模型
指數(shù)模型是針對測試階段,尤其是驗收類測試階段的缺陷分布的模型,其基本原理是在這個階段出現(xiàn)的缺陷(或者失效模式,我們這里討論的是缺陷)是整個產(chǎn)品
可靠性的良好指證。它是Weibull系列的另一個特例。指數(shù)模型是許多其他可靠性增長模型的基礎(chǔ)。指數(shù)模型可分為故障/失效計數(shù)模型(fault/failure count model)和失效間隔時間模型(time between failures model)?;镜闹笖?shù)模型的累積缺陷分布函數(shù)(CDF)為y=K*a*b^t,修正指數(shù)模型在基本指數(shù)模型曲線函數(shù)上加一個常數(shù)因子。
1) 指數(shù)模型的函數(shù)形式
指數(shù)模型的累積缺陷分布函數(shù)(CDF):F(t)=K*(1-exp(-λ*t));
指數(shù)模型的缺陷概率密度函數(shù)(PDF):f(t)=K*(λ*exp(-λ*t))。
其中,t是時間,K是總?cè)毕輸?shù),λ與K是需要估計的兩個參數(shù)。
2) 指數(shù)模型的關(guān)鍵假設(shè):測試工作量在測試階段中是均勻的。
3) 使用:指數(shù)模型預(yù)測缺陷時是基于正式的測試階段的數(shù)據(jù)的,因此它主要適用于這些階段,最好在開發(fā)過程后期——例如最后的測試階段。但在交付用戶使用后,用戶發(fā)現(xiàn)的缺陷模型,與交付用戶之前的模型往往有很大差別,這是由于交付客戶后影響客戶的測試的不確定因素更多。
4) 優(yōu)勢:最簡單最有用的模型之一,易于使用和實現(xiàn)。
5) 缺陷:假設(shè)測試的工作量在整個測試階段是均勻的。
3. NHPP模型(非齊次泊松過程模型)
NHPP模型是對在給定間隔內(nèi)觀察到的故障數(shù)建模,它是指數(shù)模型的一個直接應(yīng)用。
1) NHPP模型的函數(shù)形式:其中,參數(shù)的含義與指數(shù)模型相同
NHPP模型的累積缺陷分布函數(shù)(CDF):F(t)=K*(1-exp(-λ*t));
NHPP模型的缺陷概率密度函數(shù)(PDF):f(t)=K*λ*c^(-λ*t)。
2) NHPP模型對應(yīng)的函數(shù)圖:見指數(shù)模型
3) 由于NHPP模型是指數(shù)模型的應(yīng)用,所以NHPP 模型的特征與指數(shù)模型的特征相同。
4) 缺陷:大多數(shù)NHPP模型都基于這樣的假設(shè):每個缺陷的嚴重性和被監(jiān)測到的可能性相同,在排除一個缺陷時不引入另一個新的缺陷,但實際情況并非如此。缺陷之間是存在著關(guān)聯(lián)關(guān)系的。
4. S型可靠性增長模型
S型增長模型是軟件領(lǐng)域應(yīng)用較為廣泛的模型之一,下一篇,將會詳細進行介紹。