摘 要: 傳統(tǒng)的軟件可靠性測試更多偏重于軟件的功能方面。針對于這個不足之處,提出了結(jié)合操作剖面和性能測試的一種相對完善、全面的軟件可靠性測試方法。歸納總結(jié)軟件內(nèi)部可靠性設(shè)計、外部高可用技術(shù)以及容災(zāi)恢復(fù)規(guī)范等諸多影響軟件系統(tǒng)可靠性的因素,設(shè)計可靠性操作剖面要全面考慮這些因素。此方法是對傳統(tǒng)方法的有用補充。最后通過一個案例簡要介紹了該方法。
關(guān)鍵詞: 可靠性測試;可靠性設(shè)計;高可用技術(shù);容災(zāi)恢復(fù);性能測試
0 引言
對于軟件可靠性不同的標(biāo)準(zhǔn)有著不同的定義,從國內(nèi)標(biāo)準(zhǔn)和國外標(biāo)準(zhǔn)兩個方面看:
IEEE對軟件可靠性做出了如下的定義[1]:
?。?)規(guī)定的條件下,在規(guī)定的時間內(nèi),軟件不引起系統(tǒng)失效的概率;
?。?)在規(guī)定的時間周期內(nèi),在所述條件下軟件執(zhí)行所要求功能的能力。
我國GB/T 16260.1-2006 《軟件工程產(chǎn)品質(zhì)量第1部分:質(zhì)量模型》對可靠性的定義[2]:在指定的使用條件下,軟件產(chǎn)品維持規(guī)定的性能級別的能力。該標(biāo)準(zhǔn)并解釋軟件不會損耗和老化。軟件可靠性取決于軟件產(chǎn)品的使用方式和所選擇的程序選項,與時間無關(guān),可靠性的定義已經(jīng)被擴展為“維持所規(guī)定的性能級別的能力”,而不是“完成所需功能”。
上述兩種說法的側(cè)重點略有不同,IEEE強調(diào)的是概論和能力,偏重功能,而國標(biāo)強調(diào)的是能力,偏向于性能。雖然側(cè)重點不一樣,但是可以看出計算機軟件系統(tǒng)是指由系統(tǒng)軟件、支撐軟件、應(yīng)用軟件以及相關(guān)硬件組成的計算機軟件系統(tǒng)。作為一個綜合的整體系統(tǒng),其可靠性依賴因素不僅僅是其軟件本身,還涉及多方面的因素,包括人員、技術(shù)、管理等??煽啃缘脑u價不局限于功能性,應(yīng)該擴展到性能方面。
本文立足于分析影響軟件系統(tǒng)特定使用環(huán)境下的可靠性的脆弱點,提出從軟件本身和外部使用環(huán)境所涉及的高可用技術(shù)和管理制度等多方面設(shè)計軟件可靠性測試操作剖面,并結(jié)合性能測試進行可靠性的驗證測試。
1 軟件可靠性測試操作用例設(shè)計的考慮因素
1.1 軟件內(nèi)部可靠性影響因素
通常軟件內(nèi)部可靠性問題是軟件本身所固有的,與外部因素?zé)o關(guān),只與軟件本身的使用選項有關(guān)。例如一個有溢出錯誤的軟件,不論軟件的備份機制如何完備,當(dāng)溢出錯誤的輸入滿足時,軟件輸出必將溢出。在嚴(yán)格遵循軟件工程原理的基礎(chǔ)上,為了保證和提高軟件的可靠性,通常在軟件設(shè)計過程中采用避錯設(shè)計 、 查錯設(shè)計 、 改錯設(shè)計和容錯設(shè)計等軟件可靠性設(shè)計方法,所以從內(nèi)部可靠性影響因素來說,軟件可靠性測試用例應(yīng)考慮如下設(shè)計以提高有效性和正確性。
(1)避錯設(shè)計
軟件可靠性設(shè)計的首要方法體現(xiàn)在預(yù)防為主的思想。軟件產(chǎn)品在設(shè)計過程中的避錯設(shè)計目的是使軟件不發(fā)生錯誤或少發(fā)生錯誤。原則是控制和減少程序的復(fù)雜性。下列方法可以在避錯程序設(shè)計中參考,如參數(shù)化、公共數(shù)據(jù)和變量、非授權(quán)存取限制、無意指令跳轉(zhuǎn)處理、程序檢測點設(shè)置、尋址模式選用、數(shù)據(jù)區(qū)隔離、安全關(guān)鍵信息要求、信息存儲要求、算法選擇要求。
下列的結(jié)構(gòu)和技術(shù)容易引起系統(tǒng)的缺陷,設(shè)計測試用例時優(yōu)先考慮如下操作和結(jié)構(gòu)類型:浮點數(shù)、指針、動態(tài)內(nèi)存分配、并行、遞歸、中斷、繼承、別名、默認(rèn)輸入的處理。
(2)查錯設(shè)計
軟件查錯設(shè)計是通過賦予程序自校驗功能,使程序在運行中能自動發(fā)現(xiàn)錯誤的設(shè)計方法。包含被動式錯誤檢測和主動錯誤檢測。前者即在程序的若干部位設(shè)置檢測點,等待錯誤出現(xiàn)時觸發(fā)告警;后者能自動對程序狀態(tài)進行檢查。
對于查錯設(shè)計的驗證,測試用例優(yōu)先考慮如下操作進行設(shè)計:按照已知的數(shù)據(jù)極限值檢查數(shù)據(jù)邊界的輸入輸出;按照變量間恒定關(guān)系檢驗變量的輸入和結(jié)果輸出;檢查所有多值數(shù)據(jù)的有效性;對冗余的輸入數(shù)據(jù)進行一致性檢驗;循環(huán)等待次數(shù)控制。
(3)改錯設(shè)計
改錯設(shè)計通過賦予程序自我改正錯誤的能力,減少錯誤危害程度。故障隔離技術(shù)是改錯設(shè)計的常用方法。改錯設(shè)計的關(guān)鍵前提是準(zhǔn)確地定位軟件錯誤原因和錯誤的代碼,減少軟件錯誤造成的損害,將損害限制在可以接受的范圍內(nèi)。
對于改錯設(shè)計的驗證,可靠性測試用例可以參考如下方法:用戶的應(yīng)用程序或數(shù)據(jù)訪問受控,其他用戶不能輕易修改;應(yīng)用程序引用或修改操作系統(tǒng)的編碼或操作系統(tǒng)內(nèi)部的數(shù)據(jù)應(yīng)受控;操作系統(tǒng)的錯誤不應(yīng)引起應(yīng)用程序和數(shù)據(jù)的變更;應(yīng)用程序不能終止操作系統(tǒng)工作; 應(yīng)用程序不能觸發(fā)操作系統(tǒng)修改其他程序或數(shù)據(jù)。
?。?)容錯設(shè)計
軟件容錯是程序在錯誤已被觸發(fā)的情況下,系統(tǒng)仍然具有正常運行能力。常用的容錯設(shè)計有時間冗余、結(jié)構(gòu)冗余和信息冗余。
時間冗余是以消耗時間開銷為代價獲取軟件系統(tǒng)高可靠性的一種手段,如指令重復(fù)執(zhí)行和程序重復(fù)執(zhí)行。對于重復(fù)執(zhí)行不成功時,通常發(fā)出中斷,轉(zhuǎn)入錯誤處理程序,或?qū)Τ绦蛑貜?fù)技術(shù)計算、重新組合系統(tǒng)、放棄程序處理。
結(jié)構(gòu)冗余是針對軟件系統(tǒng)不同版本的并行運行的冗余設(shè)計。對相同的初始條件、相同的輸入操作,多版本結(jié)構(gòu)的結(jié)果應(yīng)一致,或者對不同的結(jié)果實行表決后決定是否繼續(xù)執(zhí)行(多數(shù)決定、一致決定)。
信息冗余是為檢測或糾正信息在運算或傳輸中的錯誤外加的一部分信息。如奇偶校驗碼或者類似MD5的完整性校驗來確保數(shù)據(jù)完整和正確;信息之間應(yīng)保持足夠的安全Hamming 距離;安全關(guān)鍵信息的決策判斷不得依賴于全“1”或全“0”的輸入。
1.2 軟件外部可靠性影響因素
計算機軟件系統(tǒng)是指由操作系統(tǒng)軟件、數(shù)據(jù)庫軟件、應(yīng)用軟件等基礎(chǔ)支撐軟件以及相關(guān)硬件組成的計算機軟件系統(tǒng)。軟件作為一個系統(tǒng)使用時,系統(tǒng)不僅僅是軟件本身,還包含軟件系統(tǒng)運行的外圍載體,如操作系統(tǒng)、網(wǎng)絡(luò)、服務(wù)器等。作為一個綜合的整體系統(tǒng),其可靠性依賴因素不僅僅是其軟件本身,還涉及多方面的因素,包括人員、技術(shù)、管理等。針對軟件可靠性的外部影響因素,本文從兩個方面進行闡述,一是高可用技術(shù)保障,一是軟件系統(tǒng)管理制度保障。軟件外部可靠性測試用例設(shè)計可以結(jié)合上述兩方面的具體情況進行設(shè)計。
?。?)高可用技術(shù)
常用高可用技術(shù)主要有如下幾種分類,不同的高可用技術(shù)對系統(tǒng)可靠性的貢獻是不一樣的。
① 高可用技術(shù)。高可用是系統(tǒng)高可靠的基礎(chǔ),主要有如下幾種實現(xiàn)方式:冗余技術(shù)、集群技術(shù)、遠程集群技術(shù)、多路技術(shù)和虛擬機技術(shù)。
② 數(shù)據(jù)備份技術(shù)。數(shù)據(jù)備份是系統(tǒng)高可靠的必要條件。數(shù)據(jù)備份從策略上來說有3種:全備份、增量備份和差異備份?;旧隙际腔谌缦录夹g(shù)實現(xiàn):Host-Based備份、LAN-Based備份、LAN-Free備份和Server-Less備份。
數(shù)據(jù)復(fù)制技術(shù)是確保數(shù)據(jù)備份的前提。主要的備份技術(shù)有如下幾種:基于復(fù)制軟件復(fù)制、基于存儲陣列復(fù)制、基于服務(wù)器復(fù)制、基于SAN復(fù)制和Server-Less備份。
持續(xù)數(shù)據(jù)保護技術(shù)通過捕獲或跟蹤數(shù)據(jù)的變化,并將變化異地存儲在生產(chǎn)數(shù)據(jù)之外,保證數(shù)據(jù)可以恢復(fù)到任意時間點。主要有如下幾種類型:基于應(yīng)用的持續(xù)數(shù)據(jù)保護、基于文件的持續(xù)數(shù)據(jù)保護和基于數(shù)據(jù)塊的持續(xù)數(shù)據(jù)保護。
?。?)系統(tǒng)服務(wù)保證類因素
對于應(yīng)用級的保護,為保護系統(tǒng)連續(xù)正常的運行,避免系統(tǒng)受到未授權(quán)的修改、破壞而導(dǎo)致系統(tǒng)不可用,參考國標(biāo)GB/T 22239-2008中的相關(guān)部分內(nèi)容,可靠性測試中系統(tǒng)服務(wù)保證類的測試用例可以參考表1所列幾個方面。
?。?)系統(tǒng)災(zāi)難恢復(fù)管理體系
對于更高一級的系統(tǒng)級保護,可以參考GB/T 20988—2007《信息安全技術(shù)信息系統(tǒng)災(zāi)難恢復(fù)規(guī)范》。做為系統(tǒng)級的可靠性保證,容災(zāi)系統(tǒng)的建設(shè)必不可少。對于不同的容災(zāi)級別要求,該規(guī)范作出了明確的指導(dǎo)。而評估一個容災(zāi)系統(tǒng)的建設(shè)通??梢詮谋?所示7個方面進行評價??煽啃詼y試用例設(shè)計可以借鑒參考表2。
2 傳統(tǒng)軟件可靠性測試方法
軟件可靠性測試方法主要有兩種: 基于運行剖面的可靠性測試和基于使用模型的統(tǒng)計測試。前者是AT&T貝爾實驗室的Musa J D在1993年提出的[3],后者是由Mills H D[4]和whittaker J A[5]提出。這兩種方法構(gòu)造的測試模型從不同的角度來模擬軟件真實的運行環(huán)境。
這兩種方法所用的術(shù)語雖有微小的差別,但它們的基本思想都是基于統(tǒng)計學(xué)的基本原理,即根據(jù)軟件實際使用情況的統(tǒng)計規(guī)律的描述對軟件進行隨機測試。統(tǒng)計測試進行的前提條件就是生成如實反映系統(tǒng)使用情況的使用模型。以往使用模型的建立主要是通過預(yù)測和估計得出,不能如實地反映系統(tǒng)的真實情況。
傳統(tǒng)的軟件可靠性測試方法借鑒了硬件的可靠性測試方法,更多是偏重功能實現(xiàn)的角度去測試。而軟件不同于硬件,軟件的可靠性測試除了依賴上述傳統(tǒng)的可靠性測試方法外,應(yīng)該結(jié)合軟件的性能測試進行可靠性測試,這樣的可靠性測試結(jié)果更為全面,更具參考性。
3 結(jié)合性能測試驗證軟件可靠性
本文提出了一種可靠性的測試建議作為傳統(tǒng)可靠性測試的補充,即建議在系統(tǒng)性能負載較重的情況下結(jié)合傳統(tǒng)的可靠性測試方法進行可靠性測試。
3.1 測試方法介紹
同樣以傳統(tǒng)的基于操作剖面可靠性測試為例介紹測試方法:
?。?)構(gòu)造測試操作剖面。操作剖面的構(gòu)造要素來自于第1節(jié)本文作者從軟件內(nèi)部和軟件外部兩個方面總結(jié)的可靠性影響因素。綜合上述的梳理分析,計算機軟件系統(tǒng)作為一個整體,其可靠性測試剖面應(yīng)參考內(nèi)部和外部兩方面的影響因素,涉及到技術(shù)、人員和管理多個方面。
?。?)模擬軟件系統(tǒng)真實使用場景下的性能負載,此性能負載作為執(zhí)行操作剖面的背景數(shù)據(jù)。
?。?)執(zhí)行測試剖面操作,結(jié)合性能測試評價軟件系統(tǒng)的可靠性。
3.2 案例介紹
如圖1所示,在本案例中依次對軟件系統(tǒng)執(zhí)行了包括“數(shù)據(jù)RAC故障”、“接入進程失效”、“路由進程失效”、“接入節(jié)點失效”、“路由節(jié)點故障”、“交易服務(wù)器故障”、“額度服務(wù)器故障”和“主限號服務(wù)器故障”8個可靠性測試操作剖面。結(jié)合性能測試的10 000用戶在線測試,可以清晰看出相關(guān)測試剖面對軟件可靠性的影響大小。
4 結(jié)論
本文從軟件的內(nèi)部可靠性設(shè)計,結(jié)合軟件系統(tǒng)外圍運行載體的高可用技術(shù)和容災(zāi)恢復(fù)管理要素多方面,從技術(shù)、人員和管理方面提出可靠性測試用例的考慮因素。分析了傳統(tǒng)軟件可靠性測試方法來源硬件可靠性測試模式的局限性。結(jié)合實際情況,對傳統(tǒng)測試方法進行補充建議,提出了結(jié)合性能測試和多維度測試剖面進行可靠性測試,并舉例簡要闡述了方法和優(yōu)點。
參考文獻
[1] 黃錫滋.軟件可靠性、安全性與質(zhì)量保證[M].北京:電子工業(yè)出版社,2002.
[2] GB-T 16260.1-2006. 軟件工程 產(chǎn)品質(zhì)量 第1部分:質(zhì)量模型[S].
[3] Musa J D.Operational profiles in software—reliability engineering [J].IEEE Software,1993,10(2):14-32.
[4] Mills H D,Dyer M, Linger R C. Cleanroom software engineering [J].IEEE Software,1987,4(2):19-24.
[5] Whittaker J A, Poore J H.Statistical testing for clcanroom software engineering [J]. IEEE, 1992(11):31-39.