陳平,黃茂生
(工業(yè)和信息化部電子第五研究所,廣東 廣州 510610)
隨著我國軟件產(chǎn)業(yè)的大發(fā)展,軟件測試機構(gòu)迅速增多。但新興機構(gòu)的測試經(jīng)驗不足,導致測試機構(gòu)的測試水平低下,難以整體提高。如何高效收集并傳承工程經(jīng)驗,如何將項目經(jīng)驗和成果延續(xù)不斷地傳遞給后來者的問題就變得越來越重要。
在實際工程的應(yīng)用中,往往會利用制定標準缺陷檢查單的方法來解決這個問題,要求測試人員嚴格按照缺陷檢查單上的內(nèi)容測試對象軟件。但現(xiàn)有預(yù)制定的缺陷檢查單往往也是根據(jù)固定模版及小范圍內(nèi)測試人員的累積經(jīng)驗補充完成的,即跟單位內(nèi)(小組內(nèi))測試人員已做過的項目和發(fā)現(xiàn)缺陷的類型有關(guān),單一針對性、依賴性較強;而且固定模版還可能長期不變,或通用性較強,不能夠適用于發(fā)現(xiàn)多變、復(fù)雜的具體工程中的各種缺陷,存在一定的局限性,不便于大范圍推廣。同時在一些人員變動較頻繁的測試單位中,一個經(jīng)驗豐富的測試人員的離開,首先就意味著后續(xù)測試過程中可能發(fā)現(xiàn)的缺陷的種類、數(shù)量和深度的大幅下降,儼然形成了某種測試領(lǐng)域的危機。
首先測試組對外的主要溝通渠道就是問題報告單,其中一個標準的問題報告單應(yīng)包括缺陷的名稱、類型、現(xiàn)象描述、實際輸出概述和缺陷等級等屬性。對應(yīng)的缺陷檢查單應(yīng)當也包含缺陷的名稱、類型、現(xiàn)象描述、可能輸出分析和建議缺陷等級等屬性。
我們應(yīng)當針對缺陷單所應(yīng)該包含的屬性來著手收集、整理缺陷源數(shù)據(jù),組織經(jīng)驗豐富人員召開專項會議,分析項目工程中可能存在的缺陷及其屬性數(shù)據(jù)。在建立缺陷源數(shù)據(jù)庫的初始階段,甚至可以直接收集、整理原有項目中的問題報告單,分析提取出上述各屬性數(shù)據(jù),同時對每一個入庫的缺陷進行標注,對缺陷發(fā)生的背景條件及可能出現(xiàn)的概率進行說明,然后存入缺陷源數(shù)據(jù)庫,并在缺陷源數(shù)據(jù)庫中進行結(jié)構(gòu)排列和分類。在進行軟件測試時,再根據(jù)項目條件利用缺陷源數(shù)據(jù)庫中的對應(yīng)數(shù)據(jù),動態(tài)生成缺陷檢查單。
針對缺陷屬性數(shù)據(jù)生成的缺陷源數(shù)據(jù)庫,就是將所有的缺陷類型及其名稱、定義、建議缺陷等級、預(yù)估計出現(xiàn)概率和可能輸出分析聚在一起的大集合。它是生成缺陷檢查單的必要輔助工具,是通過對測試人員實踐工作的總結(jié),將各種可能或已發(fā)現(xiàn)的缺陷信息經(jīng)必要的分析、處理后,并進行統(tǒng)計、匯總所組成的數(shù)據(jù)庫系統(tǒng)。它使得測試經(jīng)驗以數(shù)據(jù)形式進行傳遞,同時為新項目建立合理、規(guī)范的缺陷檢查單提供了有效的統(tǒng)計學數(shù)據(jù)。
首先缺陷源數(shù)據(jù)庫的基礎(chǔ)是由一個簡單的Ac cess數(shù)據(jù)庫及若干個表結(jié)構(gòu)構(gòu)成。其中主要的表結(jié)構(gòu)如表1-4所示:
表1 “缺陷表第一層”數(shù)據(jù)庫字段屬性表
可輸入內(nèi)容:文檔缺陷、代碼缺陷、軟件程序缺陷等抽象層面具有概括性、種類性的缺陷類型,其中 “本層類別”為主鍵。
表2 “缺陷表第二層”數(shù)據(jù)庫字段屬性表
可輸入內(nèi)容:文檔內(nèi)容不一致、軟件異常退出等具體層面中具有總結(jié)性、概括性的缺陷類型,其中外鍵 “上層類別”為上一層缺陷表中的 “本層類別”,設(shè)定 “本層類別+上層類別”為主鍵。
表3 “缺陷陷表第三層”數(shù)據(jù)庫字段屬性表
可輸入內(nèi)容:用戶手冊與需求不一致、數(shù)組下標越界等具體層面中具有詳細性、針對性的缺陷類型,其中外鍵 “上層類別”為上一層缺陷表中的“本層類別”,設(shè)定“本層類別+上層類別”為主鍵。
表4 “缺陷表第四層”數(shù)據(jù)庫字段屬性表
可輸入內(nèi)容:用戶手冊與需求中關(guān)于軟件運行環(huán)境要求不一致等在具體層面中具有詳細性、針對性的缺陷類型之上的變種或推進的缺陷類型,一般根據(jù)具體項目中要求詳細描述缺陷類型時添加,其中外鍵 “上層類別”為上一層缺陷表中的 “本層類別”,設(shè)定 “本層類別+上層類別”為主鍵。
其總體組織結(jié)構(gòu)如圖1所示。
圖1 缺陷庫結(jié)構(gòu)圖
可根據(jù)實際項目的需要適當?shù)卦黾尤毕荼韺訑?shù)。由于表中結(jié)構(gòu)只是向上一級追朔,即建立了一個樹形結(jié)構(gòu),每一層新增節(jié)點只需和上一級節(jié)點建立強聯(lián)系。因此很容易在原有的數(shù)據(jù)庫基礎(chǔ)上擴充新一層分支,同時無需要求每一層缺陷類型之間的級別程度完全一致,每一個新增葉子只需對上一級節(jié)點增加一個更小的子節(jié)點。
根據(jù)上述設(shè)計方法,以及數(shù)據(jù)庫表結(jié)構(gòu)關(guān)系,即可利用Access數(shù)據(jù)庫,進行表的生成與關(guān)聯(lián),其中表實現(xiàn)如圖2所示,表關(guān)系如圖3所示。將分析、標注后的缺陷源數(shù)據(jù)灌入缺陷源數(shù)據(jù)庫后即可完成動態(tài)生成缺陷檢查單的所有準備工作。
圖2 Access數(shù)據(jù)庫中缺陷源數(shù)據(jù)庫表結(jié)構(gòu)
圖3 Access數(shù)據(jù)庫中缺陷源數(shù)據(jù)庫表關(guān)系
當缺陷源數(shù)據(jù)庫被完整地建立以后,即可利用其動態(tài)生成缺陷檢查單了。首先,缺陷源數(shù)據(jù)庫中的缺陷信息包括了缺陷類型及其名稱、定義、建議缺陷等級、預(yù)估計出現(xiàn)概率和可能輸出分析等屬性,而缺陷檢查單則需要缺陷的名稱、種類、定義、可能輸出分析、建議缺陷等級等屬性數(shù)據(jù)。因而可以綜合分析當前被測軟件的實際種類和預(yù)估計情況,對比缺陷源數(shù)據(jù)庫中記錄的缺陷源屬性數(shù)據(jù),選取合適的缺陷類型,進而形成缺陷檢查單,其中在選取缺陷類型時應(yīng)首先考慮提取對應(yīng)最佳的葉子結(jié)點缺陷源數(shù)據(jù),然后再向上一級進行追溯,增加同一父節(jié)點下的所有其它葉子節(jié)點,進而形成有層次結(jié)構(gòu)、覆蓋全面的檢查單源數(shù)據(jù)。最后結(jié)合軟件需求及對應(yīng)語言編碼規(guī)范的實際要求,整理獲取最終的缺陷檢查單如表5所示。
表5 缺陷檢查單模式
如下可以簡單地分析得到缺陷檢查單對應(yīng)缺陷源數(shù)據(jù)庫中的缺陷信息源數(shù)據(jù)量變化情況,如圖4、5所示。
圖4 預(yù)測數(shù)據(jù)庫內(nèi)缺陷信息源總數(shù)據(jù)量分析曲線
圖5 預(yù)測數(shù)據(jù)庫內(nèi)新增缺陷信息源數(shù)據(jù)量分析曲線
此分析曲線適合以無任何基礎(chǔ)的N0個開始入庫,或從已有的初步統(tǒng)計缺陷類型Nt入手,建立數(shù)據(jù)庫。分析曲線符合正態(tài)分布原理,計劃在tm時刻能新發(fā)現(xiàn)及確定的缺陷類型數(shù)量達到峰值Nm,發(fā)現(xiàn)總數(shù)超過Nmx,此后由于庫內(nèi)存儲的數(shù)據(jù)趨于成熟、豐富,新入庫數(shù)據(jù)的增長率將會明顯地下降,總數(shù)量將趨于穩(wěn)定,但仍會有新增以適應(yīng)新的缺陷類型。
在上述過程中,Nt值是通過大量總結(jié)原有或現(xiàn)用的缺陷檢查單、缺陷報告類型列表及現(xiàn)有工程人員的經(jīng)驗而獲得的。
建成后的數(shù)據(jù)庫缺陷信息源更新即可以在測試項目組內(nèi)或測試單位內(nèi)進行定期匯總、整理當前的庫內(nèi)缺陷數(shù)據(jù),再以標準庫形式進行發(fā)布;其中測試項目組內(nèi)的數(shù)據(jù)可按月或季度進行更新,測試單位內(nèi)的數(shù)據(jù)可按1~3年為周期進行更新;也可以在測試單位和測試項目組中分工進行,測試單位只針對第一、二、三層缺陷類型進行定義,測試項目組可在其基礎(chǔ)上針對具體情況進行擴充,兩者數(shù)據(jù)以單季度或半年為周期進行同步更新。
在日常收集缺陷的過程中,測試人員發(fā)現(xiàn) “新缺陷”時,應(yīng)首先根據(jù)異?,F(xiàn)象(缺陷)對缺陷源數(shù)據(jù)庫的所有葉子節(jié)點進行查找,當發(fā)現(xiàn)完全相符或近似的缺陷節(jié)點時,應(yīng)將現(xiàn)有缺陷的實際輸出和現(xiàn)象描述與已記錄的缺陷節(jié)點的現(xiàn)象描述和預(yù)估輸出分析進行對比,確定該異?,F(xiàn)象(缺陷)的名稱、種類、定義、出現(xiàn)原因概述和缺陷等級等屬性并劃歸對應(yīng)類型,覆蓋或添加相應(yīng)缺陷數(shù)據(jù)的現(xiàn)象描述和預(yù)估輸出分析等信息。
當新缺陷在缺陷源數(shù)據(jù)庫的所有葉子節(jié)點中無法被精確定位時,應(yīng)遵循優(yōu)先在可被概括的父節(jié)點下建立新子葉子節(jié)點的原則來生成子缺陷類型。當新缺陷在現(xiàn)有的缺陷源數(shù)據(jù)庫中無法查找到任何相符或近似的父節(jié)點或葉子節(jié)點時,才考慮新增根節(jié)點的葉子節(jié)點。
同時,應(yīng)該對整個查找分析過程進行必要的監(jiān)督和評審,即對確定異?,F(xiàn)象(缺陷)屬性的過程進行監(jiān)督,對新增缺陷類型及其定義、建議缺陷等級、預(yù)估計出現(xiàn)概率和預(yù)估計輸出分析等屬性進行評審。并對已確定的異常現(xiàn)象(缺陷)的出現(xiàn)情況和此缺陷占本項目整個發(fā)現(xiàn)缺陷比例情況進行必要的分析和統(tǒng)計,作為實際數(shù)據(jù)參數(shù)存于數(shù)據(jù)庫中,以缺陷項唯一序列號進行區(qū)分——缺陷類別(本層缺陷類別)。其中缺陷庫的收集過程及缺陷檢查單的生成過程如圖6所示。
圖6 缺陷庫的收集過程及缺陷檢查單的生成過程設(shè)定圖
表6介紹了一個簡單的缺陷庫生成的數(shù)據(jù)存儲實例,其中所有的缺陷類型均達到了第三層,那么收集第三層數(shù)據(jù),即可生成各缺陷檢查單,如表7所示。
在軟件測試各主要過程(包括文檔審查、代碼審查、動態(tài)測試、工作產(chǎn)品組內(nèi)互審、工作產(chǎn)品專家審查及項目組人力資源管理等)中,即可利用相應(yīng)生成的缺陷檢查單,高效地進行相關(guān)測試或考核工作,并根據(jù)檢查單結(jié)果生成問題報告。
表6 缺陷庫數(shù)據(jù)存儲實例
大量收集目標缺陷信息及缺陷發(fā)生的背景條件,并以此為基礎(chǔ)構(gòu)建缺陷信息數(shù)據(jù)庫,分析挖掘已有缺陷數(shù)據(jù)中的有用信息,進而指導軟件測試工作,對于提高缺陷發(fā)現(xiàn)率和改善軟件的質(zhì)量有著重要意義,必須進行全面、詳實的記錄。而文中介紹的動態(tài)生成方法,只要計算機上安裝有Access數(shù)據(jù)庫,即可根據(jù)缺陷檢查單的基本原理并聯(lián)系工作實際來建立缺陷源數(shù)據(jù)庫,并在測試項目組或測試單位內(nèi)簡單、方便地生成所需的缺陷檢查單。同時,建立完整的缺陷檢查單及其對應(yīng)的缺陷源數(shù)據(jù)庫有利于為各個測試項目組建立相應(yīng)的標準化機制,統(tǒng)一缺陷名稱、適用范圍及缺陷等級情況。并有益于測試單位內(nèi)實踐經(jīng)驗的有效傳遞,測試新手在學習測試方法時,可通過了解前輩建立的缺陷源數(shù)據(jù)庫,更好、更快地適應(yīng)新的工作崗位。項目管理人員也可以通過對缺陷信息源進行數(shù)據(jù)統(tǒng)計分析,建立更加合適的、有具體項目條件的缺陷檢查單,并對被發(fā)現(xiàn)的概率及出現(xiàn)前提進行分析、預(yù)測,合理地調(diào)配人員,盡可能早地發(fā)現(xiàn)缺陷,更好地完成軟件測試工作。
表7 缺陷檢查單實例
[1]MYERS G J.計算機軟件測試技巧[M].周芝英,譯.北京:清華大學出版社,1985.
[2]PERRY W E.軟件測試的有效方法(原書第二版[M].蘭雨晴,譯.北京:機械工業(yè)出版社,2004.
[3]PATTON R.軟件測試[M].周予濱,譯.北京:機械工業(yè)出版社,2002.
[4]黃茂生.分析測試過程故障數(shù)據(jù),提高測試缺陷發(fā)現(xiàn)率[J].電子產(chǎn)品可靠性與環(huán)境試驗,2003,21(4):33-35.
[5]王強.基于缺陷分類的軟件缺陷分析方法[J].軟件可靠性與測評技術(shù),2005,(12):165-168.
[6]張曉鵬.用于軟件行業(yè)的數(shù)據(jù)挖掘[J].計算機工程2003,29(12): 179-181.
[7]楊捷,李歡.軟件可靠性工程中的數(shù)據(jù)挖掘及其應(yīng)用[J].世界標準化與質(zhì)量管理,2004,(11):52-55.
[8]梁成才,章代雨,林海靜.軟件缺陷的綜合研究[J].計算機工程,2006,32(19):88-90.