一種面向gui軟件的可靠性加速測試方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明屬于軟件可靠性測試技術(shù)領(lǐng)域,涉及軟件可靠性測試中的加速測試方法, 具體涉及一種面向GUI軟件的可靠性加速測試方法。
【背景技術(shù)】
[0002] 隨著計算機技術(shù)的迅猛發(fā)展,計算機軟件已經(jīng)滲透到越來越多的領(lǐng)域,特別是航 空航天、金融和醫(yī)療等關(guān)系國計民生的關(guān)鍵領(lǐng)域。在這些領(lǐng)域中,軟件系統(tǒng)規(guī)模龐大、邏輯 復(fù)雜,對可靠性的要求往往非常高。因此,軟件可靠性工程越來越受到人們的重視。
[0003] 軟件可靠性測試是提高軟件質(zhì)量與可靠性的重要措施之一,逐漸成為國內(nèi)外軟件 可靠性工程的主要研究方向;軟件可靠性測試的主要特征是按照用戶實際使用軟件的方式 來測試軟件,它可以滿足用戶對軟件的可靠性要求、評價軟件可靠性水平及驗證軟件產(chǎn)品 是否達到可靠性要求。
[0004] 軟件可靠性測試通常根據(jù)軟件可靠性測試剖面生成測試用例,軟件可靠性測試剖 面是指軟件各種使用行為及其概率分布的一種模型,在軟件可靠性測試剖面的基礎(chǔ)上應(yīng)用 數(shù)理統(tǒng)計相關(guān)知識進行大量隨機抽樣獲得測試用例。當測試用例集合足夠大時,能夠保證 對軟件使用情況的有效覆蓋。
[0005] 但是,伴隨著測試用例集的擴充,執(zhí)行軟件可靠性測試的代價會越來越高,當被測 軟件系統(tǒng)規(guī)模龐大、邏輯過于復(fù)雜時,付出的代價甚至無法承受。所以,軟件可靠性測試在 實際工程中的應(yīng)用就會受到極大限制;因此,軟件的可靠性加速測試就顯得尤為必要。
[0006] 軟件可靠性加速測試的目的在于減少軟件可靠性測試的成本,并且給出具有一定 置信度的可靠性評估。自上個世紀八十年代末九十年代初以來,軟件可靠性測試在將近 二十年的發(fā)展中已經(jīng)取得了一定的成果,但是對軟件可靠性加速測試卻沒有形成統(tǒng)一的明 確的認識。
[0007] 現(xiàn)有技術(shù)中,硬件可靠性試驗的加速強度測試,通過施加強度激勵發(fā)現(xiàn)產(chǎn)品缺陷 以保證系統(tǒng)擁有高可靠性和健壯性,軟件可靠性工程借用硬件可靠性工程的基本概念,將 硬件可靠性加速試驗的相關(guān)概念和方法應(yīng)用到軟件可靠性加速測試的研究。
[0008] 比如,Chan給出了軟件的加速強度測試的定義和對相關(guān)概念的理解,將軟件加速 強度測試視為通過施加加速應(yīng)力、進行失效分析和采取糾正措施發(fā)現(xiàn)軟件產(chǎn)品缺陷,以獲 取系統(tǒng)可靠性和健壯性,它結(jié)合硬件說明了軟件加速強度測試中的基本可靠性規(guī)律。但是 目前對于軟件可靠性加速測試通常以強度測試為手段提高測試效率,發(fā)現(xiàn)更多的缺陷作為 測試的目標。
[0009] 軟件可靠性加速測試包括以下幾點:
[0010] ⑴、對于測試的輸入(激勵),測試輸入能夠合理準確地生成,同時考慮整合與轉(zhuǎn) 換帶來的測試效率的提高;
[0011] (2)、對測試過程而言,可靠性測試效率應(yīng)得到提高,即在相同測試量內(nèi),軟件可靠 性增長的速度要提高;相同測試量如測試時間相同或測試用例數(shù)目相同等;或達到相同的 可靠性要求所需要的測試量要小,測試量比如時間短,測試用例數(shù)目少。
[0012] (3)、對于測試結(jié)果的定量分析,給出合理的評估,軟件可靠性評估結(jié)果的可信程 度達到一定的水平;
[0013] (4)、對軟件質(zhì)量而言,應(yīng)強調(diào)測試本身的查錯能力,盡可能地多發(fā)現(xiàn)軟件缺陷,特 別是重要的軟件缺陷。
[0014] 無論是測試輸入的生成和整合轉(zhuǎn)換,還是合理有效地加快測試過程,或是某種條 件下能夠給出具有一定可信度的可靠性評估結(jié)果,都認為是對可靠性測試的一種加速,納 入到軟件可靠性測試加速的概念中來。
[0015] 圖形用戶界面(Graphical User Interface,簡稱⑶I,又稱圖形用戶接口)指采 用圖形方式顯示的計算機操作用戶界面,是用戶與計算機交流的主要方式,對GUI軟件測 試方法的研究也越來越受到學術(shù)界和工業(yè)界的重視。進行GUI軟件測試時主要面臨以下幾 個方面的困難:
[0016] (1)、⑶I軟件輸入組合空間存在爆炸問題,而且每個輸入序列都會導(dǎo)致⑶I軟件 出現(xiàn)不同的狀態(tài)。
[0017] (2)、測試數(shù)據(jù)對軟件使用情況的覆蓋情況會影響對GUI軟件測試結(jié)果的評價。
[0018] (3)、在⑶I軟件測試過程中,測試用例必須逐步執(zhí)行并對軟件當前狀態(tài)進行驗 證,當發(fā)現(xiàn)軟件錯誤后需要立即停止測試。
[0019] (4)、GUI軟件需要進行回歸測試,隨著軟件版本的更新,會影響軟件輸入與輸出之 間的映射關(guān)系。
[0020] 現(xiàn)有的軟件可靠性加速測試方法有:提高嚴酷度的軟件可靠性加速測試方法、基 于加速因子的軟件可靠性加速測試方法、基于灰盒分析的軟件可靠性加速測試方法、基于 重要度抽樣的軟件可靠性加速測試方法、基于過程的軟件可靠性加速測試方法等。
[0021] 但是考慮到GUI軟件測試中的難點,以上的軟件可靠性加速測試方法并不完全適 用:提高環(huán)境嚴酷度的軟件可靠性加速測試方法,其難點在于如何將在惡劣環(huán)境下得到的 測試結(jié)果轉(zhuǎn)化到標準使用環(huán)境下得到可靠性評估結(jié)果,目前還沒有很好的解決方法;基于 加速因子的軟件可靠性加速測試方法,對加速因子沒有約定俗成的定義,其計算更多來自 于經(jīng)驗;基于灰盒測試的軟件可靠性加速測試方法,雖然可以解決通過總體分布類型的假 設(shè)檢驗保證測試數(shù)據(jù)滿足運行剖面的統(tǒng)計特征,但是仍然無法保證利用覆蓋信息輔助得到 的測試數(shù)據(jù)能夠從整體上滿足用例生成的隨機性,存在"使實際使用中后發(fā)生的輸入提前 發(fā)生的可能性大大提高"的問題,此順序問題會造成"可靠性估計值與實際值的偏差可否忽 略"成為一個不確定的問題;基于重要度抽樣的軟件可靠性加速測試方法,利用重要度抽樣 技術(shù),提高某些關(guān)鍵度高的操作的發(fā)生概率,這種方法更加適用于安全關(guān)鍵類型軟件上面; 基于過程的軟件可靠性加速測試方法,利用人工智能領(lǐng)域的一些聚類方法,實現(xiàn)對測試用 例集合的分類,由于GUI軟件的測試輸入復(fù)雜多樣,范圍波動大,外加這些聚類方法不僅實 現(xiàn)起來難度大,并不利于在工程上應(yīng)用和推廣,其效果也未必理想。
[0022] 由于軟件可靠性測試不考慮被測軟件的結(jié)構(gòu)特征以及其他測試信息,完全按照 "構(gòu)造剖面一抽樣生成測試用例一執(zhí)行測試一收集結(jié)果一進行評估"的過程,所以測試用例 集在常見功能點上過于重復(fù),導(dǎo)致測試用例之間具有"局部相同,整體相似"的特點,可以考 慮分類以減少測試用例數(shù)目,減少測試時間提高測試效率。
[0023] Musa曾經(jīng)指出:對運行進行有效的分類通過一定的策略在運行類中對運行進行 選擇,就可以在理論上改進軟件可靠性測試的效率。如果運行類中的一個運行成功執(zhí)行,則 非常有可能這個運行類的所有運行都能夠成功執(zhí)行。類似地,如果運行類中的一個運行出 現(xiàn)失效,則非常有可能這個運行類的所有運行都會出現(xiàn)同樣的失效。這意味著運行類中的 每個運行都可以近似看作是該運行類中的所有運行的代表。通過運行各運行類中的小部分 運行,在理論上可以達到提高可靠性測試效率的目的。
[0024] 軟件測試理論中的等價類劃分,通過對相似輸入進行整合,減少測試用例的數(shù)目, 從而提高測試效率。那么在軟件可靠性測試中是否也存在某種等價類,通過運行"等價類" 中的某個個體就可以測試整個"等價類",軟件可靠性測試仍可利用這種思路來提高測試的 效率。
[0025] 軟件可靠性測試用例直接或間接的反映了軟件的實際使用方式,構(gòu)建測試剖面 時,對于發(fā)生概率較高的操作或行為,通常會設(shè)置較高的發(fā)生概率或轉(zhuǎn)移概率,因此隨機生 成足夠多測試用例以滿足軟件使用模型,被賦予較高概率的操作往往會出現(xiàn)在大量測試用 例中,而且許多測試用例往往是相似甚至相同的。
[0026] 在實際中,GUI軟件功能的針對性較強,完成某一功能的執(zhí)行路徑是基本確定的。 在采用操作剖面的形式對軟件的使用情況進行建模之后,可以直接獲取每個功能模塊所包 含的使用情況。
[0027] 進行GUI軟件可靠性測試時,每一步輸入所需的測試數(shù)據(jù)分為以下幾種:正常輸 入,異常輸入或者邊界輸入。結(jié)合等價類劃分規(guī)則以及輸入數(shù)據(jù)類型,將每一步輸入情況的 等價類情況進行更加細致的劃分。
[0028] 以上的這種基于操作剖面的聚類方法,雖然考慮了測試用例執(zhí)行的數(shù)據(jù)信息,但 是難以直觀的觀察測試用例執(zhí)行效果之間的關(guān)系。通過執(zhí)行測試用例,僅能判定該結(jié)果與 預(yù)期輸出是否一致,從而判定出有無缺陷。根據(jù)軟件發(fā)生失效的機理:程序的輸入使軟件的 缺陷得到了執(zhí)行,被執(zhí)行的缺陷使該程序缺陷所在位置之后的數(shù)據(jù)狀態(tài)發(fā)生變化,錯誤的 程序數(shù)據(jù)狀態(tài)被傳播到程序輸出并使輸出結(jié)果錯誤。所以,軟件發(fā)生失效的過程大致如下: "輸入數(shù)據(jù)一一缺陷被執(zhí)行一一產(chǎn)生錯誤輸出一一發(fā)生失效"。若能將軟件輸入、軟件缺 陷及其發(fā)生的失效之間建立一種映射關(guān)系,就能根據(jù)軟件發(fā)生失效的情況找出缺陷所在位 置并且修改軟件缺陷,也可以根據(jù)軟件輸入對軟件是否會發(fā)生失效進行判斷。
【發(fā)明內(nèi)容】
[0029] 本發(fā)明的目的是針對GUI軟件,考慮GUI軟件的測試難點,基于運行分類的思想提 出了一種面向GUI軟件的可靠性加速測試方法,提高GUI軟件的可靠性測試效率,利用GUI 軟件可靠性測試獲得的測試數(shù)據(jù)進行軟件可靠性評估。
[0030] 一種面向⑶I軟件的可靠性加速測試方法,步驟如下:
[0031] 步驟一:針對⑶I軟件可靠性測試所生成的基礎(chǔ)測試用例集合中的每個測試用 例,提取測試用例的標識詞與特征,分別形成該測試用例的標識詞鏈和特征集合。
[0032] 標識詞為測試用例所包含的一個操作步驟,用W]表示;
[0033] 特征代表測試用例的一個操作步驟所對應(yīng)的輸入內(nèi)容,用C]表示;
[0034] 每個測試用例由多個不同的標識詞和特征組成;
[0035