(中國人民解放軍91404部隊,河北 秦皇島 066001)
隨著信息化程度的不斷提高,軟件在各行業、領域、系統中所占的比重逐漸增大,所發揮的作用日益重要,越來越多系統的功能界面主要通過軟件形態呈現,軟件質量水平的高低在某種程度上可直接影響或間接反映出系統整體質量狀態[1]。軟件度量學的概念最早由Hurtwick和Rubey于1968年提出[2],歷經50多年發展,軟件質量評價理論及相關技術的研究取得了長足進步。一方面多種效能分析或評估方法被大量借鑒和應用,例如:軟件質量評價研究人員通常使用層次分析法(analytic hierarchy process,AHP)確定子特性在特性及子特性線性函數關系式中的權重[3],同時也有一部分研究人員采用模糊綜合評價法(fuzzy synthetic evaluation)確定特性與子特性之間的關系;另一方面形成了由ISO/IEC 25010:2011、ISO/IEC 25051:2014等各類標準規范所構成的多個通用軟件質量評價體系,不僅描述了軟件產品的質量模型,還對軟件產品質量評價的方法和過程進行了規定[4-5]。
軟件測試是在有限的規定條件下,執行程序操作或觸發程序運行,以盡可能暴露程序錯誤,評估軟件能否滿足需求的過程[6],故一定程度上可基于軟件測試的執行對被測軟件或系統實施質量評價。目前軟件測試早已跳出最初僅對程序進行“調試”的局限,且成功借鑒了工程化的理念和方法,其在內涵上逐步引入“質量”的概念[7],出現了類似于“軟件測試是實現對軟件質量的度量,是將對某一程序或系統的相關屬性進行評價作為目標的任一活動”的定義[8],開展“基于軟件測試的軟件質量評價(又稱為面向測試的軟件質量評價)”的意義和必要性得到普遍認可并不斷強化。
然而與各類軟件質量度量及評價的理論和模型不斷推陳出新、受關注度不斷提高形成鮮明對比的是,當前在工程實踐中軟件測試仍然以暴露、定位、分析并客觀呈現各類具體問題為主,測試的首要任務和主要目的仍舊是驗證軟件是否滿足規定的需求。正如IEEE在其軟件工程術語的行業標準中對軟件測試所下的定義“軟件測試是使用人工或自動的手段來運行或測定某個軟件系統的過程,其目的在于檢驗它是否滿足規定的需求或弄清預期結果與實際結果之間的差別”[9],軟件測試“測而不評”、“以測代評”的現象普遍存在,究其原因,主要包括:
1)通用軟件質量評價標準體系不能直接應用于基于測試的軟件質量評價。面向測試的軟件質量評價主要面向軟件測試過程,具有其自身特殊性,然而以ISO/IEC 25000系列標準為代表的通用軟件質量評價體系均基于軟件全壽命周期等全局視角對軟件質量評價活動所進行的系統性規范。通用軟件質量評價標準一方面不能滿足面向測試的軟件質量評價活動的特定要求,另一方面又顯得過于龐大和復雜,無法直接使用。例如:GB/T 25000.10-2016就將軟件的產品質量屬性從“正向”視角劃分為功能性、可靠性、易用性、性能效率、維護性、可移植行等8個特性,并將其進一步細化為多個子特性[10],而測試先天所具有的證偽性決定了其只能從“反向”視角檢測出軟件實現在各特性中是否存在問題,以及存在什么樣的問題。
2)現有系統效能分析或評估方法也不能直接應用于基于測試的軟件質量評價。例如:傳統AHP雖然采用九級標度法(9標度法)實現了多個元素針對上層元素的定量排序且易于操作[11],但僅基于1~9級的單向標度無法滿足面向測試的軟件質量評價須同時涵蓋正、反兩個評價維度的特定要求;經典模糊綜合評價方法雖然基于模糊數學理論實現了對定性問題域的定量分析及評價,但其通常首先需要利用人工評判打分或專家系統等方式定性地確定各評價因素在評判等級論域(評判等級集合)上的隸屬度,且還需要采用專家直接賦值等方式確定權重以實現后續的模糊綜合評價[12],因此受參與者主觀因素的干擾較為顯著,然而軟件測試評價空間極為有限,不足以消除上述人為主觀因素干擾(AHP方法在權重確定過程中也存在類似問題[13]),易導致評價過程受主觀因素干擾從而降低評價的客觀性和準確性。
為解決面向測試的軟件質量評價不能有效開展的實際問題,在引入失效度、系統失效評估等概念的基礎上,結合軟件測試工程實踐特點,對層次分析、模糊綜合評價進行適當改進和拓展,提出一種可行性較強的面向測試的軟件質量評價模型——SFSE模型(system failed state evaluating model,系統失效評估模型),該模型以軟件測試執行所發現的問題規模等實測信息為輸入,通過分析被測系統或軟件的失效程度,從“反向”視角間接實現對被測系統及軟件質量狀態的量化評價。
定義1(失效度 the Failure Level):失效度是評價因素或評估對象失效程度的量化表述,失效度的量化形式表述參見3.3.2所述。
定義2(系統失效評估system failed state evaluating):系統失效評估是基于系統運行過程中出現的各類缺陷或錯誤的嚴重等級、規模的分布特性,對系統運行失效性進行定量的分析和評價,并實現對系統質量狀態的間接評估。
定義3(測試評價因素層次結構 layered structure for evaluating):基于對被測系統的理解與分析,參考層次分析法,從軟件測試角度對被測系統功能、性能、接口等各項指標或特性,以及安全性、恢復性、邊界、強度等軟件測試需求進行逐層分解,抽取評價因素,建立與之對應的樹狀結構模型,即為被測系統的測試評價因素層次結構。可采用層次結構圖圖形化表述測試評價因素層次結構,其中節點表示評估對象或評價因素,由連接線表明從屬關系。
測試評價因素層次結構分為兩大部分:第一部分為頂層,僅包含單一的根節點,表示系統本身;第二部分為評價因素層,可包含多個子層,每個子層可包含多個節點(評價因素),為簡化問題處理,本文將測試評價因素層次結構限制為二維樹結構,即任意下層節點(子節點)僅歸屬于單一特定上層節點(母節點),如圖1所示。

圖1 測試評價因素層次結構示意圖
定義4(評估對象 evaluating target):評估對象為對其實施失效評估的具體對象(可以是實體,也可以是屬性、特性等抽象概念),評估對象的概念具有相對性,在測試評價因素層次結構中,除葉子節點(某一路徑的最底層節點,該節點無任何子節點)外的各層中的各節點均可視為其下層子節點的評估對象,系統失效評估最終的評估對象為根節點即被測軟件或系統,如圖1所示。
定義5(綜合評價集 synthetic evaluating set):實施模糊綜合評價時任一評價者針對若干(單個或多個)因素實施模糊評價所能選用的評價結果全集構成的評判等級論域,稱為評價集,設V為評價集:
V={v1,v2,…,vj,…,vm}
(1)
評價集V中包含的評價結果(評價分量)的規模(數量)稱為該評價集的度,表示為deV(V)。例如:針對式(1)所表示的評價集V有deV(V)=m,稱V為m度評價集,表示V的度為m,即V共包含m個(級)評價結果。
軟件測試通常根據所發現問題的危害程度、整改開銷等因素,將問題劃分為多個嚴重性等級,可直接使用有關成熟的工程實踐構建相應評價集,例如GJB2786/A從開發方視角根據軟件問題對研發過程的影響程度、造成的危害性等方面將軟件問題劃分為4個嚴重性等級[14],基于此種軟件問題嚴重性等級劃分可構建通用軟件問題評價集如下:
V2786/A={1級(致命),2級(嚴重),3級(一般),4級(輕微)}
(2)
如式(2)的通用軟件問題評價集適用于對軟件問題的分析和評價,但由于缺少對未發現問題情形的評判,故無法實現對被測系統或軟件失效程度以及質量狀態的評估,鑒于此,本文在系統失效評估中引入“綜合評價集”的概念:
綜合評價集(synthetic evaluating set)在通用軟件問題嚴重性等級評價集的基礎上,引入對“無問題(0問題)”狀態的標定,構成系統失效評估所需評價分量的完整集,即為綜合評價集,其一方面仍可用于標定軟件問題嚴重等級,另一方面亦適用于對系統失效程度、質量狀態實施評判。
設:Vs為基于通用軟件問題嚴重性等級評價集V所構建的綜合評價集,v∞為標定“無問題(0問題)”狀態的評價分量(稱為0項增量),則將Vs表示為:
Vs=V∪{v∞}={v1,v2,…,vj,…,vm,|v∞}
(3)
式(3)中“|”用于將V中各元素與v∞分量進行分割,以顯性區分0項增量。為便于形式化描述,本文引入分量函數,將綜合評價集Vs進一步簡化表述為:
Vs=V∪{v∞}=(v(j)、v∞) 1≤j≤deV(V)
(4)
式(4)中v(j)為集合V的分量函數形式,既可表示V中的分量全集所構成的向量,亦可表示V中任意分量,(v(j)、v∞)為Vs的分量函數形式,用于表示Vs所含的全部分量(元素)。
綜合評價集Vs的度定義為:
deV(Vs)=deV(V)+deV({v∞})=deV(V)+1=m+1
(5)
稱式(3)所述綜合評價集Vs的度為m+1度。
綜合評價集Vs可同時作為對測試評價因素層次結構中各評估對象進行定量評價、對全系統的失效程度進行評判的等級標尺,將測試過程中發現的具體軟件問題或缺陷的嚴重性標定與系統整體失效程度及質量狀態的評判統一至同一個評判維度。
定義6(評價因素集set-of-evaluating-elements):評價因素(evaluating element)為影響或制約評估對象的某一具體要素或特性。影響和制約某一評估對象的所有評價因素的全集構成評價因素集。
設U表示包含n個評價因素的評價因素集,則:
U={u1,u2,…,ui,…,un}
(6)
評價因素集U中所包含的評價因素的數量稱為該評價因素集的度,表示為deU(U),稱U為deU(U)度評價因素集,以式(6)為例,其表示U為n度。
評價因素在測試評價因素層次結構中同樣具有相對性,測試評價因素層次結構中除頂層根節點外的任一節點均可視為其緊鄰上一層母節點的評價因素(該母節點為該因素的評估對象),如圖1所示。
定義7(評估原子集atomy evaluating scope):評估原子集定義了實施失效評估的最小分析范圍(分析對象),包括評估對象及該其對應的評價因素集。
令ES為評估原子集,則ES可表示為序偶形式:
ES=[et,U]
(7)
其中:et為評估對象,集合U為et對應的評價因素集。在測試評價因素層次結構中,任意評估原子集表示某一非葉子節點et(評價對象)以及其下一層所有子節點集合U(評價因素集)所構成的有序偶。

(8)

若ui所發現的問題規模(數量)為si,令:
(9)

(10)

(11)
1)“0項增量”對應分量rti∞的取值范圍為(0,1);
2)rti(j)與rti∞的取值呈現非零互斥性,即:



針對單因素ui的實測評價的實質是構建論域為綜合評價集Vs的模糊子集,以此實現基于實測問題規模的單因素模糊評價。由于單因素實測評價是對具體評價因素實施的獨立評價,故無需考慮評價因素的權重因素的影響。

(12)
(13)
設經測試,et所發現的軟件問題規模為Set,則:
(14)

(15)
3.2.1 單因素模糊評價


(16)
3.2.2 模糊評價矩陣
評價因素集U中全部評價因素的單因素模糊評價結果為n個模糊子集:
(17)
(18)

(19)
當Set≠0時,綜合各評價因素實測問題規模以及各類問題嚴重性(危害程度)等因素,通過量化各評價因素的失效程度,構建出基于實測的權重分布即為動態權重集。
3.3.1 拓展綜合評價集向量
定義5闡述的綜合評價集僅標定了測試過程中所發現的各問題的嚴重性等級,為實現對被測系統的失效度以及質量狀態的定量評價,須將綜合評價集中任意評價分量由單一語義表述向量化評估、評價等級等多個維度拓展,構建成相應的拓展綜合評價集向量。

(20)

(21)

表1 拓展綜合評價集分量描述

(22)
3.3.2 評價因素及評價因素集失效度
對?ui∈U,定義評價因素ui的失效度FLui為:
(23)
評價因素集U的失效度FLU為:
(24)
3.3.3 構造動態權重集

(25)
式(25)中ai為評價因素ui對應的動態權重(1≤i≤n),且ai定義為:
(26)
顯然,在Set≠0的情況下,動態權重ai滿足非負性和歸一化要求:
(27)
根據模糊綜合評價過程中所選取的合成算子。通常將評價模糊子集的求取分為“模式Ⅰ:M(∧,∨)”、“模式Ⅱ:M(·, ∨)”、“模式Ⅲ:M(∧, ⊕)”、“模式Ⅳ:M(·, ⊕)”、“模式Ⅴ:M(·, +)” 五種模式[16]。∧、∨、⊕運算在評價因素較多等情況下可能導致有用信息丟失,故模式Ⅰ~Ⅳ適用于關注評價對象極限值或突出其主要因素等場合。相比較而言模式Ⅴ:M(·, +)能夠保留單因素評價的全部信息,適用于綜合考慮各方面因素影響的場合,在實際工程應用中效果較好,但該模式要求參加評估的權重應具有歸一化的屬性[17]。綜合上述分析,本文選取模式Ⅴ作為合成算子,且在動態權重集的設計上進行了歸一化處理。




取模式Ⅴ作為合成算子,則有:
(28)
其中:x=1,2,…,m,∞。
單評估原子集失效評估本質上屬于一級模糊綜合評價。實際情況下,針對某一被測系統不僅需要考慮諸多具有模糊性的評價因素,各評價因素之間往往呈現出不同的層次結構(參見定義3所述)。因此對被測系統整體實施系統失效綜合評估時,需采用多級模糊綜合評價方法。
在圖1所示的層次化系統結構中,設根節點為ESroot=[etroot,U1],其對應的評價因素集U1為:
U1={u1,u2,…,ui,…,un}
對U1任意分量ui(i=1,2,…,n)可進一步細分:
Ui={ui1,ui2,…,uij,…,uim}
對ui任意分量uij(i=1,2,…,n;j=1,2,…,m)繼續進行細分:
Uij={uij1,uij2,…,uijk,…,uijp}
如此迭代劃分,直至各葉子節點。


圖2 SFSE模型(系統失效評估模型)總體流程
在某型系統軟件測評過程中,以軟件測試實測數據作為輸入,采用SFSE模型實現對被測系統軟件質量狀態的量化評價。
首先,基于GJB2786構建綜合評價集Vs:
Vs=V∪{v∞}={v1,v2,v3,v4,|v∞}=
{致命,嚴重,一般,輕微,|無問題}


之后,綜合分析被測系統功能、技術性能指標以及被測軟件各需求項,梳理出被測系統對應的測試評價因素層次結構,如圖3所示。

圖3 某型系統軟件測試評價因素層次結構示意圖
軟件測試執行完畢后,匯總、分析測試問題,得到所有葉子節點相關實測數據(如表2所示),圖3所述評價因素層次結構中其它非葉子節點的實測數據可由相關葉子節點實測數據匯總得到。

表2 某型系統軟件測試問題分布分析
單因素實測評價所有葉子節點,結果如圖4所示。

圖4 單因素實測評價結果
自底向上逐層實施失效評估。最底層C層所有節點均為葉子節點,B層中B6、B8、B9、B10、B11、B12、B13、B15均為葉子節點,直接置單因素實測評價為相應節點評價結果即可(如圖4、圖5所示)。

對B2節點,根據2.2(2)節介紹的方法求取模糊評價矩陣為:
根據3.3(3)節介紹的方法,求取B2節點動態權重集:
節點B2的單評估原子集失效評估結果為:
同理,B5節點單評估原子集失效評估結果為:


按照上述方式單評估原子集失效評估B層其它所有非葉子節點。最終得B層失效評估結果如圖5所示。

圖5 第2層(B層)失效評估結果
同理可得A層失效評估結果如圖6所示。

圖6 第3層(A層)失效評估結果
完成根節點UTS下所有層節點的失效評估后,對被測系統實施失效評估。求取根節點模糊評價矩陣為:
根節點UTS的動態權重集為:

被測系統UTS的系統失效評估為:


4.032 3
最后根據量化評價獲取被測系統UTS的評價等級及評價結語:由于ValUTS=4.032 3∈(2,5],故對UTS的評價級別為Ⅲ級,對應的質量狀態評價結語為“一般”。

SFSE模型通過引入動態權重集、拓展綜合評價因素集等方式,以軟件測試所發現的問題規模、問題嚴重等級作為輸入,以拓展綜合評價因素集評估量值等分量作為調節手段,充分利用軟件測試過程中軟件問題確認、軟件問題嚴重等級確定等既有成果,消除了傳統AHP-Fuzzy模型中人為主觀因素的影響。驗證實驗采用MATLAB仿真實現了SFSE模型,并在無人工干預的情況下以自動化的方式對被測系統及軟件的質量狀態實施了量化評估。經實驗驗證,SFSE模型適用于軟件編程的自動化實現,可行性好,可直接應用于軟件測試活動工程化實踐,具有較強的實用價值。
