王 東
(廣東白云學(xué)院大數(shù)據(jù)與計(jì)算機(jī)學(xué)院, 廣州 510450)
在軟件工程領(lǐng)域中,軟件質(zhì)量實(shí)際上是一個(gè)多維的概念。其中,軟件可測(cè)試性是軟件質(zhì)量保證體系中的重要內(nèi)容,它可直接反映出軟件測(cè)試工作的復(fù)雜性和工作量。在軟件設(shè)計(jì)和開發(fā)過(guò)程中,增強(qiáng)可測(cè)性亦可增加軟件測(cè)試過(guò)程中發(fā)現(xiàn)缺陷的概率。ISO/IEC 9126-1 標(biāo)準(zhǔn)定義的可測(cè)性是指:對(duì)修改后的軟件進(jìn)行測(cè)試的能力。ISO/IEC 25010:2011 系統(tǒng)和軟件工程標(biāo)準(zhǔn)定義的系統(tǒng)和軟件質(zhì)量需求和評(píng)估標(biāo)準(zhǔn)(SQuaRE)中的軟件系統(tǒng)質(zhì)量模型將可測(cè)性作為可維護(hù)性的一部分。
可測(cè)試性從另一方面也可反映出是對(duì)軟件進(jìn)行測(cè)試工作的便利程度,其本身就是一種質(zhì)量屬性。測(cè)試是軟件開發(fā)過(guò)程中評(píng)估軟件質(zhì)量的活動(dòng),需要專業(yè)的方法和工具。測(cè)試工作包括方方面面,主要有:功能、性能、安全性、易用性等測(cè)試。目前,自動(dòng)化測(cè)試雖能提高效率、降低成本,但在相當(dāng)長(zhǎng)的一段時(shí)間內(nèi)尚不能實(shí)現(xiàn)對(duì)人工手動(dòng)測(cè)試的替代。
當(dāng)一個(gè)軟件具有較高可測(cè)性時(shí),在相同的測(cè)試強(qiáng)度下,軟件測(cè)試人員更容易發(fā)現(xiàn)軟件缺陷,也可以說(shuō)發(fā)現(xiàn)更多軟件缺陷;而當(dāng)軟件的可測(cè)性較低時(shí),軟件系統(tǒng)中的缺陷將不易被發(fā)現(xiàn),測(cè)試工作量也將隨之上升。由此可見(jiàn),軟件的可測(cè)性將影響軟件測(cè)試成本,進(jìn)而影響軟件質(zhì)量。
影響可測(cè)性的五個(gè)主要因素有:可理解性、可觀察性、可控性、可追溯性和對(duì)測(cè)試的支持能力。本文所述的對(duì)軟件可測(cè)性和測(cè)試用例有效性的研究問(wèn)題為:靜態(tài)代碼和測(cè)試度量對(duì)測(cè)試用例有效性和可測(cè)性的影響。
可測(cè)試性是軟件質(zhì)量模型的重要內(nèi)容之一,對(duì)可測(cè)試性的度量工作因影響因素較多而具有較高難度。低可測(cè)試性的軟件系統(tǒng)具有較低的可靠度,這與測(cè)試工作的嚴(yán)密性無(wú)關(guān),而且低可測(cè)性的軟件系統(tǒng)往往在軟件開發(fā)后期的維護(hù)和更新成本更高,更難控制。軟件系統(tǒng)的可測(cè)試性關(guān)系到軟件的可靠性、測(cè)試效率、測(cè)試成本和工作量。對(duì)于軟件開發(fā)而言,測(cè)試的成本占整個(gè)軟件開發(fā)成本的50%甚至更高,因此改進(jìn)可測(cè)試性對(duì)提高測(cè)試效率和降低整體開發(fā)成本有著重大影響。理想狀態(tài)下,測(cè)試人員在設(shè)計(jì)和執(zhí)行測(cè)試用例所花費(fèi)的時(shí)間應(yīng)該占到全部開發(fā)時(shí)間的25%~50%之間。當(dāng)前熱門道德軟件開發(fā)方法,如:敏捷方法、極限編程和Scrum迭代式增量軟件開發(fā)方法等,均體現(xiàn)出了測(cè)試工作的重要性。以測(cè)試驅(qū)動(dòng)開發(fā)(TDD)為例,為確保軟件系統(tǒng)存諸單元的可靠性,TDD 在編寫代碼前已由開發(fā)人員或測(cè)試人員完成設(shè)計(jì)和開發(fā)測(cè)試的工作[1]。單元測(cè)試是提高軟件質(zhì)量的主要方式,可開發(fā)過(guò)程的早期階段發(fā)現(xiàn)和低成本修復(fù)bug。在實(shí)際生產(chǎn)環(huán)境中,測(cè)試代碼量與軟件開發(fā)代碼量的比例約為1∶1。
總之,提高軟件可測(cè)試性對(duì)提升軟件系統(tǒng)的質(zhì)量有著積極作用。但是,對(duì)軟件可測(cè)試性的度量和評(píng)估工作具有一定的復(fù)雜性。
IEEE 定義的軟件可測(cè)試性(software testability)是指一個(gè)軟件工件(軟件系統(tǒng)、模組、需求文件或設(shè)計(jì)文件等)在一個(gè)給定的測(cè)試環(huán)境下,可支援測(cè)試的程度。ISO標(biāo)準(zhǔn)將可測(cè)試性描述為“與驗(yàn)證軟件產(chǎn)品所需工作有關(guān)的軟件屬性”。因此,ISO從測(cè)試軟件產(chǎn)品所需工作的角度出發(fā)定義了可測(cè)試性,而IEEE 從測(cè)試標(biāo)準(zhǔn)的角度定義了可測(cè)試性[2]。
McCall 質(zhì)量模型是第一個(gè)定義軟件質(zhì)量的質(zhì)量模型。McCall 模型的主要內(nèi)容包括:便捷性、儀器和模塊的可測(cè)試性,并將其定義為驗(yàn)證需求的能力。Boehm 改進(jìn)了McCall 模型,將可測(cè)試性定義為驗(yàn)證需求是否滿足實(shí)現(xiàn)的軟件的便捷性。ISO9126質(zhì)量模型定義可測(cè)試性為驗(yàn)證軟件產(chǎn)品所需的必要工作。
在軟件工程領(lǐng)域,軟件測(cè)量的主要目標(biāo)是幫助軟件工程師和項(xiàng)目管理者做出針對(duì)軟件開發(fā)過(guò)程的準(zhǔn)確的預(yù)測(cè)和決策,通過(guò)監(jiān)控項(xiàng)目進(jìn)展并適時(shí)介入質(zhì)量控制機(jī)制判斷軟件項(xiàng)目及其各組件的功能和性能是否符合需求。軟件度量是指量化和度量軟件特性的指標(biāo)參數(shù),軟件指標(biāo)是軟件質(zhì)量的重要組成部分,在分析和提高軟件質(zhì)量方面發(fā)揮了重要作用。此外,軟件指標(biāo)可用于驗(yàn)證軟件質(zhì)量的要求是否被滿足[3]。
軟件測(cè)試中的軟件度量包括:產(chǎn)品、過(guò)程和項(xiàng)目度量。而過(guò)程和產(chǎn)品度量與軟件質(zhì)量關(guān)系密切。過(guò)程度量標(biāo)準(zhǔn)反映了開發(fā)過(guò)程質(zhì)量,而最終產(chǎn)品度量標(biāo)準(zhǔn)反映了軟件產(chǎn)品的特征。根據(jù)產(chǎn)品度量系統(tǒng)的不同方面,產(chǎn)品度量可以進(jìn)一步分為靜態(tài)度量和動(dòng)態(tài)度量。靜態(tài)度量在軟件非運(yùn)行狀態(tài)下進(jìn)行度量,是對(duì)軟件的內(nèi)部質(zhì)量的描述,大多數(shù)現(xiàn)有的質(zhì)量度量以靜態(tài)形式出現(xiàn),如代碼行度量和開發(fā)復(fù)雜度度量。動(dòng)態(tài)度量只能在運(yùn)行時(shí)對(duì)軟件的屬性進(jìn)行度量,是對(duì)軟件運(yùn)行狀態(tài)的描述。
本研究采用的可測(cè)試性數(shù)據(jù)集源自1186 個(gè)大大小小的、不同類別的Java 開源項(xiàng)目[3-6]。數(shù)據(jù)包含多個(gè)不同類的度量(繼承、大小、復(fù)雜性、內(nèi)聚性、封裝性和耦合性等)、6 個(gè)測(cè)試工作量度量和3 個(gè)測(cè)試質(zhì)量度量。在文獻(xiàn)[3-6]中提到了收集數(shù)據(jù)信息和分析計(jì)算指標(biāo)的工具,本文采用了其中介紹的方法。表1 為本研究所涉及的軟件度量類別。
表1 軟件度量分類列表
本研究所選實(shí)驗(yàn)數(shù)據(jù)集源自1186 個(gè)Java 開源項(xiàng)目的9861 個(gè)實(shí)例(類)[4]。考慮到本實(shí)驗(yàn)的研究重點(diǎn)是測(cè)試有效性問(wèn)題,本研究將突變分值一項(xiàng)作為研究重點(diǎn)。突變分值通過(guò)組合測(cè)試百分比計(jì)算被消除的突變體。除了通過(guò)突變分值來(lái)評(píng)估測(cè)試執(zhí)行中發(fā)現(xiàn)缺陷的能力外,這些分值還表示了不同測(cè)試活動(dòng)發(fā)現(xiàn)缺陷的能力的差異。突變分值范圍為0~1。
本研究根據(jù)突變分值將數(shù)據(jù)結(jié)合的測(cè)試分為有效和無(wú)效兩類,利用突變分值四分位數(shù)將第1 個(gè)四分位數(shù)內(nèi)的測(cè)試分配到非四分位數(shù)集,而第4 個(gè)四分位數(shù)內(nèi)的測(cè)試被分配到有效集。任何落在這兩個(gè)四分位數(shù)之間的測(cè)試用例都將被丟棄?;陧憫?yīng)離散化噪聲的背離分配給特定類的數(shù)據(jù)點(diǎn)。由于本研究重點(diǎn)在于探索有效測(cè)試特征和無(wú)效測(cè)試特征,因此,為了突出效果的差異,實(shí)驗(yàn)去掉了具有平均有效值的測(cè)試類。
在計(jì)算該數(shù)據(jù)集的四分位數(shù)后,研究發(fā)現(xiàn)突變分?jǐn)?shù)為1 的測(cè)試用例被認(rèn)為是第4 個(gè)四分位數(shù)的一部分,0.4 及以下的測(cè)試用例被認(rèn)為是第1 個(gè)四分位數(shù)的一部分。因?yàn)榫哂衅骄?,?shí)驗(yàn)刪除了其余四分位數(shù)中的所有實(shí)例。數(shù)據(jù)集中的其余實(shí)例為5022。本研究旨在評(píng)估Java面向?qū)ο箢惖臏y(cè)試有效性(可測(cè)試性)。
以突變得分作為因變量,即被消除的突變體除以產(chǎn)生的突變體數(shù)量的百分比,因變量也是開發(fā)人員使用的可測(cè)性關(guān)鍵指標(biāo)之一。自變量除了兩個(gè)主要維度(測(cè)試工作量和代碼度量)外,還考慮了34 個(gè)因素(見(jiàn)表1)。這些度量為測(cè)試人員提供了驗(yàn)證測(cè)試是否具有有效性以及是否與這些元素相關(guān)聯(lián)[5]。本研究目標(biāo)之一是確定僅依賴于靜態(tài)代碼質(zhì)量特征的輕量級(jí)估計(jì)模型,這些特征可以很容易地計(jì)算到當(dāng)前版本的測(cè)試類。由28個(gè)特性組成的代碼度量集,用于評(píng)估繼承、復(fù)雜性、耦合、大小、封裝和內(nèi)聚的效果。對(duì)測(cè)試類工作量的計(jì)算參考了測(cè)試用例的復(fù)雜性和數(shù)量的相關(guān)的測(cè)試工作量的度量[6]。
本研究的主要目標(biāo)之一是對(duì)影響測(cè)試用例有效性(突變分值)的因素進(jìn)行分析,例如檢測(cè)缺陷的能力,以便在開發(fā)測(cè)試用例時(shí)將有效性指標(biāo)更好地付諸實(shí)施。為此,本研究設(shè)計(jì)了三個(gè)研究問(wèn)題。第一個(gè)研究問(wèn)題針對(duì)所選的34 個(gè)自變量和測(cè)試用例有效性之間是否存在關(guān)聯(lián)的初步評(píng)估,其目的是揭示具有高或低突變分值的測(cè)試用例的自變量分布是否變化以及變化到何種程度;第二個(gè)研究問(wèn)題關(guān)于在機(jī)器學(xué)習(xí)技術(shù)的基礎(chǔ)上制定自動(dòng)化策略時(shí),如何根據(jù)突變的分?jǐn)?shù)來(lái)檢查測(cè)試的有效性;最后一個(gè)研究問(wèn)題是找到最主要的可測(cè)性指標(biāo)是什么。本研究將三個(gè)研究問(wèn)題概括如下:
研究問(wèn)題1:靜態(tài)度量和測(cè)試用例有效性之間有關(guān)系嗎?
研究問(wèn)題2:靜態(tài)代碼和測(cè)試度量在多大程度上有助于預(yù)測(cè)測(cè)試用例的有效性?
研究問(wèn)題3:最具影響力的可測(cè)試性指標(biāo)是什么?
針對(duì)研究問(wèn)題1,本研究引入了Spearman的秩相關(guān)系數(shù)用于評(píng)估靜態(tài)度量和測(cè)試用例有效性兩個(gè)指標(biāo)的統(tǒng)計(jì)依賴性,Spearman 方法準(zhǔn)確度高而且不需要正態(tài)數(shù)據(jù)分布[7]。針對(duì)研究問(wèn)題2,有不同的機(jī)器學(xué)習(xí)算法可供選擇,由于分類器使用的預(yù)測(cè)目的可能會(huì)對(duì)模型的性能產(chǎn)生較大影響,因此在選出最優(yōu)的估算模型的分類器之前,本研究將對(duì)多個(gè)分類器分別進(jìn)行測(cè)試。因此,本研究將比較不同機(jī)器學(xué)習(xí)算法的效果來(lái)確定可測(cè)試性預(yù)測(cè)模型。
決策樹利用高度信息性的特性來(lái)劃分含有不同類的測(cè)試實(shí)例。本研究采用了C4.5 決策樹版本,它使用了基礎(chǔ)信息熵的概念為每個(gè)子樹選擇根節(jié)點(diǎn),決策樹是一種易于理解和解釋的分類器[8]。
隨機(jī)森林其實(shí)是一種協(xié)作學(xué)習(xí)方法,其可在引導(dǎo)數(shù)據(jù)上創(chuàng)建決策樹的多元變量。隨機(jī)森林中的每棵樹都是基于真實(shí)數(shù)據(jù)的子集上構(gòu)建的,并在一個(gè)高魯棒性的分類器中展示特征結(jié)果,一個(gè)預(yù)測(cè)類的選出將取決于選票數(shù)量。隨機(jī)森林的開箱即用的便捷性能是一大特色[9]。
多層感知器是一種嵌入在深層架構(gòu)中的前饋神經(jīng)網(wǎng)絡(luò),該架構(gòu)包括在有向無(wú)環(huán)圖中相互連接的不同計(jì)算單元層,他們具有將輸入映射到輸出的特性,并且在回歸測(cè)試項(xiàng)目中采用較多[10]。
為區(qū)分不同的類標(biāo)簽,本研究中的靜態(tài)指標(biāo)排名根據(jù)它們的貢獻(xiàn)來(lái)判定,排名算法采用預(yù)分配的一個(gè)分?jǐn)?shù)來(lái)評(píng)估單個(gè)特征,并根據(jù)該分?jǐn)?shù)對(duì)它們進(jìn)行排名。針對(duì)研究問(wèn)題3,本研究采用了四種不同的算法來(lái)分析對(duì)可測(cè)性影響最大的指標(biāo),即增益比、信息增益、對(duì)稱不確定性和OneR算法[11]。
本研究采用了Spearman 等級(jí)相關(guān)系數(shù)并對(duì)實(shí)驗(yàn)結(jié)果進(jìn)行分析,出于驗(yàn)證測(cè)試有效性的目的,本實(shí)驗(yàn)結(jié)果只包含系數(shù)達(dá)到0.5以上的正相關(guān)或負(fù)相關(guān)的結(jié)果。表2 顯示的相關(guān)值反映出大小和耦合與突變分值呈高度負(fù)相關(guān)。針對(duì)研究問(wèn)題1 的答案可以得出:有效測(cè)試用例與被測(cè)類的復(fù)雜性和大小度量之間存在明顯的負(fù)相關(guān)關(guān)系,也就是說(shuō),減少類的大小并降低類的復(fù)雜性將增加類的可測(cè)試性。
表2 帶有突變分?jǐn)?shù)的靜態(tài)度量的Spearman相關(guān)系數(shù)
針對(duì)研究問(wèn)題2,探究靜態(tài)代碼和測(cè)試度量在多大程度上能夠影響對(duì)測(cè)試用例有效性的預(yù)測(cè)精準(zhǔn)度。表3 反映了所選分類器在五個(gè)評(píng)價(jià)標(biāo)準(zhǔn)下的性能。如上所述,使用測(cè)試指標(biāo)和靜態(tài)代碼的模型不僅依賴于F測(cè)量(87%),并且在AUC 分析期間也表現(xiàn)出了較高性能。三個(gè)選定的分類器中,隨機(jī)森林機(jī)制在所有五個(gè)評(píng)價(jià)標(biāo)準(zhǔn)上得分最高。實(shí)驗(yàn)結(jié)果表明,機(jī)器學(xué)習(xí)方法可有效評(píng)估測(cè)試用例的有效性。本實(shí)驗(yàn)選擇了多個(gè)領(lǐng)域的測(cè)試項(xiàng)目,實(shí)驗(yàn)結(jié)果證明本評(píng)估模型對(duì)于測(cè)試用例有效性的評(píng)估是有效的。
表3 預(yù)測(cè)模型的分類結(jié)果
針對(duì)研究問(wèn)題3,未找到對(duì)可測(cè)試性影響最大的因素,本實(shí)驗(yàn)比較了不同的排名算法。表4顯示了不同排名算法的重要度量,這些度量是針對(duì)度量類可測(cè)試性的易用指標(biāo)。表4 反映出表內(nèi)所有算法都能找到排名靠前的指標(biāo)。這些重要的指標(biāo)包括:NBI、RFC、LOC、LOCCOM、WMC 和NMC。為深入研究這些指標(biāo),本研究通過(guò)對(duì)這些指標(biāo)進(jìn)行分類來(lái)設(shè)計(jì)屬性。字節(jié)碼指令 數(shù)(NBI)、代 碼 行 數(shù)(LOC)、注 釋 行 數(shù)(LOCCOM)和方法調(diào)用數(shù)(NMC)是代碼量大小的度量。而對(duì)一個(gè)類的響應(yīng)(RFC)和每個(gè)類的加權(quán)方法(WMC)被認(rèn)為是復(fù)雜度度量。這表明,在軟件開發(fā)過(guò)程中,為確保系統(tǒng)可測(cè)試性,需要觀察和監(jiān)視這些度量值。
表4 使用不同排名算法的重要度量
本研究通過(guò)實(shí)驗(yàn)證明了源代碼質(zhì)量在解決測(cè)試用例有效性方面的作用,軟件測(cè)試人員參考本研究成果可有效避免無(wú)效測(cè)試的發(fā)生。軟件開發(fā)人員在軟件設(shè)計(jì)和開發(fā)過(guò)程中參看本研究提出的模型可從設(shè)計(jì)和編碼階段的源頭避免無(wú)效測(cè)試情況的出現(xiàn)。
本研究推薦的評(píng)估模型可檢查測(cè)試過(guò)程中的質(zhì)量。對(duì)于開發(fā)人員來(lái)說(shuō),通過(guò)突變測(cè)試方法來(lái)評(píng)估測(cè)試有效性問(wèn)題能夠做到更精準(zhǔn)和更高效,這種方法可幫助測(cè)試人員分析找出影響精準(zhǔn)高效測(cè)試的負(fù)面原因。通過(guò)對(duì)測(cè)試代碼有效性的初步評(píng)估可幫助測(cè)試人員理解影響測(cè)試有效性的主要因素。
本研究分析了測(cè)試指標(biāo)和靜態(tài)代碼方面的28 個(gè)因素與測(cè)試用例有效性和可測(cè)試性之間的關(guān)系。通過(guò)建立預(yù)測(cè)模型,利用已知因素區(qū)分無(wú)效測(cè)試和有效測(cè)試。此外,還闡明了相關(guān)的基本代碼度量對(duì)面向?qū)ο箢惖目蓽y(cè)試性的影響。本研究還將在未來(lái)通過(guò)進(jìn)一步的實(shí)驗(yàn),探索更多其它的度量因素對(duì)測(cè)試用例有效性的影響,例如:對(duì)面向過(guò)程類應(yīng)用的測(cè)試,并將研究成果應(yīng)用于測(cè)試過(guò)程中,如:測(cè)試用例的設(shè)計(jì)與選擇、優(yōu)先級(jí)劃分和自動(dòng)化測(cè)試。