高巖,楊春暉,熊婧
(工業(yè)和信息化部電子第五研究所,廣東 廣州 510610)
隨著信息技術(shù)的高速發(fā)展,以及計(jì)算機(jī)系統(tǒng)的廣泛應(yīng)用,軟件系統(tǒng)在商業(yè)、政治、軍事等方面占據(jù)了重要的作用。由于社會各方面對軟件的需求急劇上升,軟件系統(tǒng)的規(guī)模不斷增大,復(fù)雜程度不斷提高,從而導(dǎo)致了軟件系統(tǒng)的可靠性問題日益突出。軟件系統(tǒng)的普及使得軟件系統(tǒng)承載了大量的有用信息,如果發(fā)生系統(tǒng)失效或者崩潰,這些信息就會丟失,造成不可估量的損失[1]。因此,軟件系統(tǒng)對軟件的可靠性和開發(fā)效率的要求越來越高,提高軟件的質(zhì)量成為了設(shè)計(jì)和開發(fā)高可靠性軟件系統(tǒng)的關(guān)鍵。在軟件開發(fā)的過程中,軟件的質(zhì)量問題越早被發(fā)現(xiàn),所帶來的損失就越小,如果能在軟件開發(fā)的早期就能對軟件的質(zhì)量進(jìn)行預(yù)測和控制,預(yù)測出軟件可能出現(xiàn)的質(zhì)量問題,檢驗(yàn)出軟件的質(zhì)量是否滿足軟件質(zhì)量特性的要求,就能夠提高和控制軟件的質(zhì)量,提高軟件開發(fā)效率,降低開發(fā)者和用戶的損失。因此,軟件質(zhì)量預(yù)測技術(shù)就在上述需求下應(yīng)運(yùn)而生,成為了軟件質(zhì)量評價(jià)體系中的關(guān)鍵技術(shù)。
軟件質(zhì)量預(yù)測建模技術(shù)的原理就是通過統(tǒng)計(jì)學(xué)方法對與軟件質(zhì)量有關(guān)的數(shù)據(jù)進(jìn)行處理,從而獲得軟件質(zhì)量的估計(jì)值,這樣就能在軟件開發(fā)的早期根據(jù)軟件的有關(guān)數(shù)據(jù),對軟件的質(zhì)量進(jìn)行預(yù)測和控制,從而預(yù)測出軟件可能出現(xiàn)的質(zhì)量問題,進(jìn)而提高和控制軟件的質(zhì)量。近十幾年來,國內(nèi)外對軟件質(zhì)量的早期預(yù)測進(jìn)行了比較深入的分析和研究,提出了基于統(tǒng)計(jì)學(xué)、神經(jīng)網(wǎng)絡(luò)等技術(shù)的多種軟件質(zhì)量預(yù)測模型。并且,軟件質(zhì)量預(yù)測技術(shù)也在航天、通訊等大型軟件工程中得到了成功的應(yīng)用,在軟件開發(fā)早期就發(fā)現(xiàn)了人工測試所發(fā)現(xiàn)不了的錯誤。
a)軟件質(zhì)量
軟件質(zhì)量被ISO/IEC 9126定義為:能夠反映軟件項(xiàng)目滿足客戶規(guī)定需求和潛在需求的軟件特征和特性的總和[2]。軟件質(zhì)量由軟件本身的屬性和特性組合而成,主要分為內(nèi)部屬性和外部屬性。內(nèi)部屬性是由產(chǎn)品自身帶有的、可度量的一些屬性,合適的軟件內(nèi)部屬性是獲取必要的外部行為的不可或缺的因素。外部屬性是軟件產(chǎn)品的一種外在質(zhì)量表現(xiàn)形式,通過與軟件應(yīng)用環(huán)境的作用來獲取。
b)軟件度量
軟件度量是一種對影響軟件質(zhì)量的屬性進(jìn)行定量測量和度量的方法[3]。軟件度量貫穿于軟件工程的全過程甚至軟件交付之后,軟件度量的根本目的是為了管理的需要,利用度量來改變軟件過程。軟件度量主要包括需求度量、過程度量、項(xiàng)目度量、產(chǎn)品度量和運(yùn)行度量等。
c)軟件質(zhì)量預(yù)測
軟件質(zhì)量預(yù)測就是根據(jù)一些與軟件質(zhì)量有關(guān)的度量數(shù)據(jù) (包括軟件錯誤測試報(bào)告和軟件質(zhì)量度量數(shù)據(jù)等),通過機(jī)器學(xué)習(xí)和統(tǒng)計(jì)學(xué)等方法進(jìn)行建模,提出軟件質(zhì)量預(yù)測值的方法。由于軟件失效過程是一個隨機(jī)過程,所以軟件質(zhì)量預(yù)測模型都是基于各種不同的基本假設(shè)而建立的模型。
軟件質(zhì)量預(yù)測模型的構(gòu)建分為4個部分,包括:度量數(shù)據(jù)采集、度量數(shù)據(jù)預(yù)處理、預(yù)測模型構(gòu)建和訓(xùn)練、預(yù)測模型評估測試。軟件質(zhì)量預(yù)測模型的主要框架如圖1所示。
圖1 軟件質(zhì)量預(yù)測模型
軟件質(zhì)量預(yù)測模型具體的構(gòu)建過程如下所述。
首先,在軟件質(zhì)量預(yù)測框架的前端,實(shí)現(xiàn)對質(zhì)量數(shù)據(jù)的采集,即將一個軟件對象的源代碼劃分為若干個軟件模塊,選擇一組有用的軟件度量,對每個軟件模塊進(jìn)行相應(yīng)的度量,每個軟件模塊的度量數(shù)據(jù)構(gòu)成的向量就是一個樣本,這樣就可以得到進(jìn)行統(tǒng)計(jì)分析的原始數(shù)據(jù)集。
然后,對所采集的原始質(zhì)量數(shù)據(jù)進(jìn)行預(yù)處理,包括歸一化、消零和主成分分析 (PCA)等。歸一化的目的是使不同的質(zhì)量數(shù)據(jù)樣本之間具有可比性,PCA則可以有效地去除質(zhì)量數(shù)據(jù)樣本中存在的冗余和噪聲,有效地提高模型性能和訓(xùn)練效率。
接下來,在框架的核心部分,將已經(jīng)構(gòu)建好的軟件質(zhì)量數(shù)據(jù)集,轉(zhuǎn)化為輸入的訓(xùn)練樣本并利用機(jī)器學(xué)習(xí)和統(tǒng)計(jì)學(xué)等方法進(jìn)行訓(xùn)練,構(gòu)建預(yù)測模型。具體過程會因所選用的不同分類器的建模算法而有所不同,在下面將會有詳細(xì)的介紹。
最后,在框架的后端,實(shí)現(xiàn)模型對軟件模塊質(zhì)量的預(yù)測。對一個新的軟件模塊進(jìn)行度量,將構(gòu)成的度量向量輸入到已訓(xùn)練好的模型當(dāng)中進(jìn)行預(yù)測,判斷該軟件模塊是否存在有缺陷的傾向。通常采用一系列軟件模塊度量作為測試數(shù)據(jù),統(tǒng)計(jì)預(yù)測準(zhǔn)確率來對軟件質(zhì)量預(yù)測模型的性能進(jìn)行評估。
軟件質(zhì)量預(yù)測模型效果的好壞取決于模型的選擇,選擇合適的訓(xùn)練算法進(jìn)行模型的訓(xùn)練是軟件質(zhì)量預(yù)測框架中的核心部分。目前應(yīng)用于軟件質(zhì)量預(yù)測的模型非常多,主要有:1)基于統(tǒng)計(jì)學(xué)的傳統(tǒng)軟件質(zhì)量預(yù)測模型;2)基于機(jī)器學(xué)習(xí)的軟件質(zhì)量預(yù)測模型。
基于統(tǒng)計(jì)學(xué)的傳統(tǒng)軟件質(zhì)量預(yù)測模型主要采用軟件的規(guī)模和復(fù)雜度、軟件測試報(bào)告等作為模型輸入,采用線性或非線性回歸方法[4-5],以及聚類分析[6]等方法作為建模算法。這些傳統(tǒng)的軟件質(zhì)量預(yù)測模型沒有全面地考慮影響軟件質(zhì)量的眾多不確定性因素,大多都只是針對一兩個影響軟件質(zhì)量的因素進(jìn)行研究和建模,這樣不能較好地描述軟件的內(nèi)部特性和軟件所表現(xiàn)出來的缺陷之間的不確定性的關(guān)系,得出的軟件質(zhì)量預(yù)測模型不能較好地表示軟件質(zhì)量的真實(shí)情況。而且采用的多是統(tǒng)計(jì)學(xué)方法,不具有自學(xué)習(xí)能力。所以傳統(tǒng)的軟件質(zhì)量預(yù)測模型比較粗糙,具有一定的局限性。
基于機(jī)器學(xué)習(xí)的軟件質(zhì)量預(yù)測模型主要包括貝葉斯算法、人工神經(jīng)網(wǎng)絡(luò) (ANN)和支持向量機(jī)(SVM)等。其中,神經(jīng)網(wǎng)絡(luò)由于其訓(xùn)練不需要完全知道系統(tǒng)的具體細(xì)節(jié),并且具有良好的非線性映射逼近性能和自學(xué)習(xí)能力,在軟件質(zhì)量預(yù)測中得到了廣泛的應(yīng)用。1992年,N.Karunanithi等人首次將人工神經(jīng)網(wǎng)絡(luò)技術(shù)成功地應(yīng)用于軟件質(zhì)量預(yù)測模型中[7]。之后,人工神經(jīng)網(wǎng)絡(luò)在軟件質(zhì)量預(yù)測中得到了進(jìn)一步的應(yīng)用,常用的幾種人工神經(jīng)網(wǎng)絡(luò)算法包括:反向傳播神經(jīng)網(wǎng)絡(luò) (BP)、學(xué)習(xí)矢量化神經(jīng)網(wǎng)絡(luò) (LVQ)及模糊自適應(yīng)學(xué)習(xí)控制網(wǎng)絡(luò)(FALCON)等。其中,基于BP神經(jīng)網(wǎng)絡(luò)的軟件質(zhì)量預(yù)測模型的研究[8-9]最為成熟,目前已有較為成熟的理論與實(shí)踐成果。但是,BP神經(jīng)網(wǎng)絡(luò)不完全適用于各種軟件預(yù)測,傳統(tǒng)的BP神經(jīng)網(wǎng)絡(luò)具有陷入局部極小的缺點(diǎn)。研究人員對神經(jīng)網(wǎng)絡(luò)進(jìn)行了深入的研究和改進(jìn),而現(xiàn)有的、在BP神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)上改進(jìn)的算法[10-11]也存在一些不同的問題。因此,如何建立有效的軟件質(zhì)量預(yù)測模型成為了當(dāng)前該領(lǐng)域的工作的重中之重。
隨著軟件質(zhì)量預(yù)測技術(shù)的發(fā)展,一些性能良好的軟件質(zhì)量預(yù)測系統(tǒng)被成功地應(yīng)用于實(shí)際。其中最成功的是EMERALD[12],它由Nortel、Bell Canada和佛羅里達(dá)亞特蘭大大學(xué)聯(lián)合開發(fā),該系統(tǒng)采用具有多層前向感知器的BP神經(jīng)網(wǎng)絡(luò)進(jìn)行軟件質(zhì)量預(yù)測,并成功地應(yīng)用于大型通信工業(yè)軟件模塊的預(yù)測模型中,可以預(yù)測出有出錯傾向的軟件模塊,其準(zhǔn)確率能夠達(dá)到70%以上。
除了應(yīng)用于軟件工程的開發(fā)階段,軟件質(zhì)量預(yù)測模型在軟件維護(hù)階段也大有作為,并且,由于軟件版本變得更加穩(wěn)定,質(zhì)量模型的總體表現(xiàn)相應(yīng)地也變得更好了。如在Thwin等學(xué)者對某商業(yè)軟件產(chǎn)品QUES[13]進(jìn)行的軟件質(zhì)量預(yù)測研究中,88%的軟件模塊均得到了正確的預(yù)測。
軟件質(zhì)量預(yù)測和分析甚至可以發(fā)現(xiàn)人工測試所發(fā)現(xiàn)不了的錯誤。如在美國航空航天局格蘭研究中心 (NASA Glenn Research Center) 某大型航空軟件開發(fā)測試的后期階段,學(xué)者Distefano使用軟件質(zhì)量預(yù)測系統(tǒng)分析軟件產(chǎn)品時(shí),根據(jù)系統(tǒng)的報(bào)警信息,核實(shí)和確認(rèn)了一些之前從未被檢測出的軟件錯誤 [14]。
國內(nèi)也開展了軟件質(zhì)量預(yù)測應(yīng)用的研究。王琪等人設(shè)計(jì)了一個模糊邏輯和神經(jīng)網(wǎng)絡(luò)相結(jié)合的軟件質(zhì)量預(yù)測模型,在對朗訊光網(wǎng)絡(luò)有限公司開發(fā)的SDH通信軟件[15]前幾個版本進(jìn)行分析的基礎(chǔ)上,成功地預(yù)測出了新版本軟件中存在的缺陷。
為了深入研究軟件度量與軟件質(zhì)量預(yù)測模型的相關(guān)關(guān)系,以及其在實(shí)際大型軟件工程項(xiàng)目當(dāng)中存在的意義,美國航空航天局開啟了度量數(shù)據(jù)項(xiàng)目(MDP:Metrics Data Program)。MDP保存記錄了十幾個大型航空軟件項(xiàng)目中的度量數(shù)據(jù)和錯誤歷史,形成了開放的軟件質(zhì)量數(shù)據(jù)庫,為軟件質(zhì)量預(yù)測研究提供了一個開放性的實(shí)驗(yàn)平臺。
軟件質(zhì)量預(yù)測的研究發(fā)展至今已超過20年,從軟件質(zhì)量預(yù)測理論被提出開始,將軟件質(zhì)量模型應(yīng)用到實(shí)際軟件工程中的研究一直都沒有停止過。良好的軟件質(zhì)量預(yù)測能協(xié)助軟件開發(fā)人員提前預(yù)測出軟件的出錯傾向,合理地分配資源,提高軟件開發(fā)和實(shí)際應(yīng)用的可靠性,有重要的實(shí)際意義和工程價(jià)值。
軟件質(zhì)量預(yù)測是確認(rèn)軟件是否達(dá)到預(yù)期功能與性能目標(biāo),能否穩(wěn)定、可靠地投入運(yùn)行的重要方法,也是軟件交付的關(guān)鍵內(nèi)容。因此,軟件質(zhì)量預(yù)測將成為軟件開發(fā)與測試過程當(dāng)中的一項(xiàng)重要的工作。良好的軟件質(zhì)量預(yù)測和控制機(jī)制,不僅可以協(xié)助軟件開發(fā)人員開發(fā)出高質(zhì)量、高可靠性的軟件產(chǎn)品,使開發(fā)人員在軟件開發(fā)周期內(nèi)能對癥下藥,集中力量修正可能出錯的模塊,節(jié)省資源,縮短開發(fā)周期,減少軟件開發(fā)成本,而且可以提高軟件開發(fā)機(jī)構(gòu)或部門在市場中的競爭力和信譽(yù)。
早期的軟件質(zhì)量預(yù)測可以在軟件開發(fā)的過程中提前預(yù)知軟件的可靠性,對軟件開發(fā)的周期的把握、資源的分配、開發(fā)計(jì)劃的實(shí)施具有重大的意義。良好的軟件質(zhì)量預(yù)測機(jī)制能使軟件開發(fā)人員縮短開發(fā)周期,搶占市場先機(jī),節(jié)省資源,開發(fā)出高質(zhì)量的軟件產(chǎn)品。由此可以知道,軟件質(zhì)量預(yù)測的研究是十分有必要的。目前我國大規(guī)模的軟件工程開發(fā)項(xiàng)目正處于快速發(fā)展階段,而軟件質(zhì)量預(yù)測的研究才剛起步,與國外領(lǐng)先水平有很大的差距。創(chuàng)新研究成果少和市場的迫切需求表明,軟件質(zhì)量預(yù)測具有良好的發(fā)展前景。
隨著軟件產(chǎn)業(yè)的快速增長和軟件規(guī)模的日趨復(fù)雜,軟件質(zhì)量度量技術(shù)和軟件測試技術(shù)也在迅速地發(fā)展,為軟件質(zhì)量預(yù)測提供了更多可以挖掘和分析的、與軟件質(zhì)量相關(guān)的數(shù)據(jù)。因此,基于復(fù)雜多維度質(zhì)量數(shù)據(jù)的軟件質(zhì)量預(yù)測技術(shù)是未來研究的一個新方向。另一方面,機(jī)器學(xué)習(xí)和人工智能是目前研究的熱門領(lǐng)域之一,深度學(xué)習(xí)等許多先進(jìn)的理論和技術(shù)被提了出來,這為軟件質(zhì)量預(yù)測建模技術(shù)的研究提供了新的思路。
軟件質(zhì)量預(yù)測模型在理論研究中能有效地根據(jù)軟件度量預(yù)測軟件質(zhì)量,但是在實(shí)際應(yīng)用中,隨著軟件復(fù)雜程度的不斷提高、軟件規(guī)模的不斷增大,以及市場對加快軟件開發(fā)周期的需求更為迫切,軟件質(zhì)量預(yù)測的應(yīng)用往往比理論更加復(fù)雜、更加難以控制,這使得軟件質(zhì)量預(yù)測仍然有很多有待改進(jìn)的地方。目前現(xiàn)有的軟件質(zhì)量預(yù)測模型的實(shí)際預(yù)測結(jié)果仍不盡人意,模型對象的局限性和不健壯性限制其發(fā)展。隨著軟件工程項(xiàng)目的快速發(fā)展,單個模型往往能對某一些軟件工程達(dá)到較高的預(yù)測精度,但不一定適用于所有的軟件項(xiàng)目。軟件質(zhì)量預(yù)測模型應(yīng)用范圍的局限性是影響軟件質(zhì)量預(yù)測技術(shù)的重要因素。軟件工程項(xiàng)目過程的復(fù)雜因素會影響模型最終的預(yù)測結(jié)果,導(dǎo)致軟件開發(fā)人員得到錯誤的結(jié)論,影響軟件開發(fā)過程。
目前軟件質(zhì)量預(yù)測所遇到的挑戰(zhàn)主要有以下幾個方面。
a)軟件質(zhì)量的影響因素多,軟件質(zhì)量預(yù)測在軟件度量選擇上只能考慮主要的影響因素,或者是根據(jù)軟件失效的歷史經(jīng)驗(yàn)選擇軟件度量,無法全面地考慮所有的因素。
b)軟件實(shí)體的多變,軟件實(shí)體是軟件開發(fā)人員根據(jù)實(shí)際需求進(jìn)行思維活動的產(chǎn)物,隨著軟件的不斷開發(fā)、修正、功能的添加等,軟件實(shí)體的變化具有不穩(wěn)定性,小小的變動都可能會導(dǎo)致預(yù)測誤差的巨大變化。
c)軟件系統(tǒng)的復(fù)雜度高,軟件系統(tǒng)中的元素、函數(shù)、結(jié)構(gòu)性復(fù)雜度等并不能完全由軟件度量表示完整,軟件系統(tǒng)的高復(fù)雜度為模型的學(xué)習(xí)帶來了很大的負(fù)擔(dān)。
軟件質(zhì)量預(yù)測是對軟件質(zhì)量進(jìn)行早期控制的方法,能夠?qū)浖到y(tǒng)中潛在的錯誤進(jìn)行預(yù)測和預(yù)警,具有廣泛的工程實(shí)踐意義和應(yīng)用前景。本文對軟件質(zhì)量預(yù)測進(jìn)行了系統(tǒng)的概述,闡述了軟件質(zhì)量預(yù)測的概念、原理和研究現(xiàn)狀;分析了軟件質(zhì)量預(yù)測的模型框架、數(shù)據(jù)采集與降維、預(yù)測模型構(gòu)建和訓(xùn)練等核心算法;列舉了軟件質(zhì)量預(yù)測的典型應(yīng)用案例;最后對軟件質(zhì)量預(yù)測的發(fā)展前景和面臨的挑戰(zhàn)進(jìn)行了總結(jié)。
[1]王青,伍書劍,李明樹.軟件缺陷預(yù)測技術(shù) [J].軟件學(xué)報(bào), 2008, 19 (7): 1565-1580.
[2]鄭人杰,殷人昆,陶永雷.實(shí)用軟件工程 [M].北京:清華大學(xué)出版社,1991.
[3]李虎,史曉華,楊海燕,等.軟件質(zhì)量評價(jià)技術(shù) [J].計(jì)算機(jī)研究與發(fā)展,2002,39(1):61-67.
[4]KHOSHGOFTAAR T M,SELIYA N.Tree-based software quality estimation models for fault prediction[C]//IEEE Symposium on Software Metrics.2002:203-214.
[5]KHOSHGOFTAAR T M, ALLEN E B, JONES W D, et al.Accuracy of software quality models over multiple releases[J].Annals of Software Engineering, 2000, 9 (1-2):103-116.
[6]KHOSHGOFTAAR T M,LIU Y,SELIYA N.A multiobjective module-order model for software quality enhancement[J].IEEE Transactions on Evolutionary Computation,2004, 8 (6): 593-608.
[7]FENTON N E, PFLEEGER S L.Software metrics: a rigorous and practical approach[M].Boston:PWS Publishing Co.,1998.
[8]GUPTA N,SINGH M P.Estimation of software reliability with execution time model using the pattern mapping technique of artificial neural network[J].Computers&Operations Research, 2005, 32 (1): 187-199.
[9]KHOSHGOFTAAR T M, PANDYA A S, MORE H B.A-neural-network approach for prediction of software development faults[J].IEEE Computer, 1992, 17 (8): 83-88.
[10]何勇,項(xiàng)利國.基于模糊聚類的 BP神經(jīng)網(wǎng)絡(luò)模型研究及應(yīng)用 [J].系統(tǒng)工程理論與實(shí)踐,2004,24(2):79-82.
[11]THWIN M M T,QUAH T S.Application of neural networks for software quality prediction using object-oriented metrics[J].Journal of Systems and Software, 2005, 76(2): 147-156.
[12]HUDEPOHL J P, AUD S J, KHOSHGOFTAAR T M, et al.Software metrics and models on the desktop[C]//IEEE Proceedings of the Fourth International Symposium on Assessment of Software Tools.1996:111-112.
[13]THWIN M M T,QUAH T S.Application of neural networks for software quality prediction using object-oriented metrics[J].Journal of Systems and Software, 2005, 76:147-156.
[14]MENZIES T, DEKHTYAR A, DISTEFANO J, et al.Problems with precision: a response to “comments on‘data mining static code attributes to learn defect predictors’” [J].IEEE Transactions on Software Engineering,2007, 33 (9): 1-4.
[15]王琪,于波.朱杰基于人工神經(jīng)網(wǎng)絡(luò)的軟件失效預(yù)測模型研究 [J].計(jì)算機(jī)仿真,2004,22(3):159-161.