卞小磊,周錦永,顧吉青,王 赫,張小盈
(國(guó)核自儀系統(tǒng)工程有限公司,上海 200241)
軟件缺陷是軟件產(chǎn)品中存在不足,會(huì)導(dǎo)致軟件的運(yùn)行與預(yù)期不同。從“軟件用戶”的角度來(lái)看,缺陷泛指一切導(dǎo)致軟件無(wú)法符合預(yù)期目標(biāo)的東西。根據(jù)美國(guó)國(guó)家標(biāo)準(zhǔn)技術(shù)研究所(NIST)發(fā)布的研究報(bào)告稱,軟件缺陷或錯(cuò)誤普遍存在并十分有害,每年給美國(guó)造成的經(jīng)濟(jì)損失估計(jì)達(dá)595億美元,即約占其國(guó)內(nèi)生產(chǎn)總值(GDP)的0.6%[1]。為了保證軟件能夠正常運(yùn)行,對(duì)軟件存在的缺陷進(jìn)行有效的分析是十分必要的。軟件開(kāi)發(fā)公司和個(gè)人必須都積極采取有效的方法,盡可能減少缺陷[2]。
缺陷分析是提高核電廠數(shù)字化系統(tǒng)軟件質(zhì)量重要的一環(huán)。在三代核電控制系統(tǒng)的開(kāi)發(fā)過(guò)程中,控制系統(tǒng)測(cè)試工程師會(huì)在各個(gè)測(cè)試階段發(fā)現(xiàn)各種測(cè)試問(wèn)題,然后由相關(guān)設(shè)計(jì)工程師進(jìn)行修改關(guān)閉測(cè)試問(wèn)題。在關(guān)閉測(cè)試問(wèn)題的過(guò)程中,會(huì)相應(yīng)地在項(xiàng)目管理工具中記錄該問(wèn)題的各個(gè)屬性,如發(fā)現(xiàn)階段、問(wèn)題類型等。如何對(duì)測(cè)試過(guò)程中的軟件缺陷進(jìn)行管理跟蹤和分析,對(duì)減少缺陷數(shù)目,提高軟件質(zhì)量有著重大現(xiàn)實(shí)意義。
核電廠非安全級(jí)控制系統(tǒng)采用分散控制的方法來(lái)實(shí)現(xiàn)核電廠各個(gè)功能的實(shí)現(xiàn)。電站控制系統(tǒng)實(shí)現(xiàn)多個(gè)工藝系統(tǒng)的控制功能,各個(gè)系統(tǒng)存在若干設(shè)備。在如此龐大的設(shè)計(jì)任務(wù)下,詳細(xì)設(shè)計(jì)階段一般會(huì)采用分批次進(jìn)行系統(tǒng)的組態(tài)、測(cè)試工作。因此,為了提高軟件質(zhì)量,通過(guò)前一批次發(fā)現(xiàn)的問(wèn)題得到相應(yīng)的經(jīng)驗(yàn)反饋來(lái)指導(dǎo)后面的工作是非常必要的。針對(duì)項(xiàng)目中對(duì)軟件缺陷管理的需要,本文首先論述了軟件缺陷概述,常見(jiàn)的缺陷分類分析方法,著重介紹正交缺陷分類(ODC)、根本原因分析(RCA)的基本概念,然后應(yīng)用該方法對(duì)項(xiàng)目?jī)?nèi)發(fā)現(xiàn)的問(wèn)題進(jìn)行分類、分析,最后得到了分析結(jié)果及改進(jìn)措施。
軟件缺陷是指對(duì)軟件產(chǎn)品期望屬性的偏離,軟件沒(méi)有滿足規(guī)范以及客戶要求,造成用戶使用不暢。SW-CMM對(duì)其定義是:系統(tǒng)或系統(tǒng)成分中能造成他們無(wú)法實(shí)現(xiàn)其被要求的功能的缺點(diǎn)。如果在執(zhí)行過(guò)程中遇到缺陷,它可能導(dǎo)致系統(tǒng)的失敗。
軟件生命周期的各個(gè)階段必然或多或少的存在著缺陷,不同軟件開(kāi)發(fā)設(shè)計(jì)階段產(chǎn)生的缺陷不同。針對(duì)已產(chǎn)生問(wèn)題的分析研究,可能會(huì)發(fā)現(xiàn)需求階段引入的缺陷可能會(huì)導(dǎo)致設(shè)計(jì)出的軟件偏離客戶需求;設(shè)計(jì)階段引入的缺陷可能會(huì)導(dǎo)致系統(tǒng)無(wú)法實(shí)現(xiàn)預(yù)期功能,還可能增加測(cè)試難度;維護(hù)階段引入的缺陷可能會(huì)導(dǎo)致原有缺陷已被修改,但會(huì)引入更多新的缺陷[3]。
目前針對(duì)缺陷的分類分析方法在核電行業(yè)還沒(méi)有固定的標(biāo)準(zhǔn),問(wèn)題分析的目的也大多是為了解決問(wèn)題,而不是去避免這一問(wèn)題的再次發(fā)生。所以選擇一個(gè)合適的缺陷分類分析方法成為當(dāng)前核電廠軟件缺陷的準(zhǔn)則,成為一項(xiàng)重要任務(wù)。
目前核電還沒(méi)有較為廣泛的缺陷分類及分析方法,軟件行業(yè)較為主流的缺陷分類方法有:GJB-437、正交缺陷分類(ODC)、IEEE軟件異常分類標(biāo)準(zhǔn)、Thayer分類法。這些方法各有優(yōu)缺點(diǎn),對(duì)比見(jiàn)表1。
表1 缺陷分類方法對(duì)比Table 1 Comparison of defect classification methods
國(guó)家軍用標(biāo)準(zhǔn)GJB-437根據(jù)軍用軟件錯(cuò)誤的來(lái)源將軟件錯(cuò)誤分為3類,分別為:程序錯(cuò)誤,運(yùn)行程序與相應(yīng)的文檔不一致,而文檔是正確的;文檔錯(cuò)誤,運(yùn)行程序與相應(yīng)的文檔不一致,而程序是正確的;設(shè)計(jì)錯(cuò)誤,雖然運(yùn)行程序與相應(yīng)的文檔一致,但存在設(shè)計(jì)缺陷,可能產(chǎn)生錯(cuò)誤[4]。該分類方法能分析軟件缺陷產(chǎn)生的位置,該分類方法最顯著的特點(diǎn)就是簡(jiǎn)單。但是正由于分類方法太過(guò)于簡(jiǎn)單,對(duì)軟件缺陷研究可以進(jìn)一步提升軟件質(zhì)量的作用非常有限。
ODC分類方法適合缺陷的定位排查以及原因分析,缺陷特征所帶來(lái)的信息能夠?yàn)槿毕莸念A(yù)防以及軟件質(zhì)量的提升帶來(lái)較大作用。IBM一直在改進(jìn)ODC,使其更加的完善。ODC的缺點(diǎn)是分類的過(guò)程比較復(fù)雜,過(guò)程中的缺陷未做考慮。分類過(guò)程中缺陷分析人員會(huì)根據(jù)主觀判斷,最終影響分類的屬性結(jié)果。
IEEE Std 1044-2009.Standard Classification for Anomalies軟件異常分類標(biāo)準(zhǔn)對(duì)軟件異常進(jìn)行了定義并進(jìn)行了分類[5]。該分類標(biāo)準(zhǔn)提供了異常數(shù)據(jù)作為軟件異常追蹤處理的參考,權(quán)威性較高。在軟件生命周期的各階段,該分類標(biāo)準(zhǔn)均提供了較為詳細(xì)的處理分類描述,分類信息豐富。不足之處在于沒(méi)有考慮軟件工程的過(guò)程缺陷,并且分類復(fù)雜。
Thayer分類是按照軟件缺陷的性質(zhì)分類,將缺陷的性質(zhì)作為錯(cuò)誤分類的信息[6]。通過(guò)這種方法對(duì)缺陷先進(jìn)行初步統(tǒng)計(jì),按照缺陷發(fā)生的區(qū)域分布情況,對(duì)發(fā)生錯(cuò)誤較為集中的組件進(jìn)行統(tǒng)一的改進(jìn)。這種分類方式?jīng)]有結(jié)合分類的過(guò)程,不容易分析出發(fā)生缺陷的原因,對(duì)軟件質(zhì)量的提升改進(jìn)有限。
綜合以上分類方法,本文選取ODC正交缺陷分類法對(duì)本核電項(xiàng)目進(jìn)行缺陷的分類。
ODC(Orthogonal Defect Classification)是IBM Waston Research Center的R.Chillarege等人于1990年提出的缺陷分類方法[7],經(jīng)過(guò)數(shù)年的完善,目前已經(jīng)得到較為廣泛的應(yīng)用,取得了較好的應(yīng)用效果。ODC方法適用于多周期、多版本、高復(fù)雜度的軟件開(kāi)發(fā)過(guò)程。ODC提供了一套捕捉缺陷數(shù)據(jù)關(guān)鍵特性的方案,并就如何對(duì)分類的缺陷數(shù)據(jù)進(jìn)行分析給出了指導(dǎo)[8]。
ODC分類法將缺陷特征分解為8個(gè)屬性:發(fā)現(xiàn)缺陷的活動(dòng)、缺陷影響、缺陷觸發(fā)事件、缺陷載體、缺陷年齡、缺陷來(lái)源、缺陷類型和缺陷限定詞[7]。ODC中最重要的一個(gè)屬性就是缺陷類型,缺陷類型被分為7大類:賦值、檢驗(yàn)、算法、時(shí)序、接口、功能、關(guān)聯(lián)。這些屬性中有很多是有目的地反映了產(chǎn)品周期中生成這些屬性的階段。
將軟件缺陷進(jìn)行ODC分類可以產(chǎn)生較多的定量分析的方法,如統(tǒng)計(jì)分析缺陷的來(lái)源、統(tǒng)計(jì)分析缺陷的分布、統(tǒng)計(jì)分析打開(kāi)/關(guān)閉等,事實(shí)上項(xiàng)目人員也采用了這些分析方法。數(shù)據(jù)的分析也可以量化衡量產(chǎn)品質(zhì)量,作為分析軟件可靠性的一種手段,但還需結(jié)合定性的缺陷分析方法作為補(bǔ)充。定性分析也能夠?qū)σ恍┤菀缀雎缘膫€(gè)別缺陷進(jìn)行分析,彌補(bǔ)一些遺漏的缺陷原因。定性的缺陷分析方法應(yīng)用最廣泛的為根本原因分析(RCA),其方法在工業(yè)和醫(yī)療領(lǐng)域應(yīng)用廣泛。
RCA可定義為:使用結(jié)構(gòu)化的過(guò)程和方法,識(shí)別問(wèn)題產(chǎn)生的根本原因并制定相應(yīng)的解決方案,使問(wèn)題不會(huì)重復(fù)發(fā)生。RCA是一種結(jié)構(gòu)化的缺陷預(yù)防技術(shù),它通過(guò)分析事件前后的因果關(guān)系,目的是能夠找到解決措施來(lái)消除發(fā)現(xiàn)的問(wèn)題原因[9]。RCA研究是為了找出預(yù)防性方法,以消除單一缺陷或者整整一類缺陷。
RCA分為6個(gè)不同的步驟和缺陷,依次為事件確定、數(shù)據(jù)收集、數(shù)據(jù)分析與評(píng)估、糾正操作、通知與應(yīng)用、遵循測(cè)量和報(bào)告。
數(shù)據(jù)分析與評(píng)估基本步驟如下:
1) 確保識(shí)別了缺陷事件并組織相關(guān)數(shù)據(jù)。
2) 評(píng)估其重要性。
3) 確定與該問(wèn)題直接相關(guān)的原因。
4) 確定為什么會(huì)存在這些原因,并繼續(xù)工作,利用“5個(gè)為什么”方法和其他方法回溯找到根本原因。
5) 對(duì)這一階段所識(shí)別的所有原因進(jìn)行分類。
通知與應(yīng)用主要是將糾正操作向上游傳遞,上游反饋其執(zhí)行情況的過(guò)程。遵循、測(cè)量和報(bào)告是對(duì)整個(gè)閉環(huán)的數(shù)據(jù)趨勢(shì)和模式的分析,最后給出書(shū)面結(jié)論和建議。
根本原因的優(yōu)點(diǎn):在開(kāi)始時(shí)可以開(kāi)展小型試驗(yàn)分析,然后進(jìn)行相應(yīng)發(fā)展;對(duì)已按照缺陷類型進(jìn)行分類的缺陷可以批量分析;可能是確定和糾正故障原因的最短路徑。
考慮到核電儀控項(xiàng)目多周期、多版本、高復(fù)雜度的特點(diǎn),軟件開(kāi)發(fā)過(guò)程迭代較多,不適用于對(duì)過(guò)程要求嚴(yán)格的IEEE異常分類標(biāo)準(zhǔn);Thayer分類法無(wú)法滿足通過(guò)缺陷分類來(lái)達(dá)到改善軟件開(kāi)發(fā)過(guò)程,缺陷預(yù)防的目的也不適用;而對(duì)于ODC分類,其分類不依賴于軟件過(guò)程,對(duì)于其分類標(biāo)準(zhǔn)難以把握,可以通過(guò)ODC定義本地化的調(diào)整來(lái)解決。綜合比較投入的時(shí)間成本以及通過(guò)缺陷分析出的原因(產(chǎn)出),本文采用的缺陷分類方法為正交缺陷分類。
根據(jù)ODC分類定義,軟件設(shè)計(jì)階段的缺陷按以下3個(gè)階段、7個(gè)缺陷類別進(jìn)行細(xì)分。分類的數(shù)據(jù)統(tǒng)計(jì)見(jiàn)表2。
表2 缺陷分類數(shù)量統(tǒng)計(jì)Table 2 Defect classification quantity statistics
對(duì)缺陷進(jìn)行分類和數(shù)據(jù)統(tǒng)計(jì)后,可以對(duì)缺陷進(jìn)行定量和定性的原因分析。定量的原因分析主要用了缺陷分布分析,對(duì)各類缺陷在全部缺陷中的占比進(jìn)行分析;定性的分析采用了根本原因分析的方法,對(duì)同一類的問(wèn)題進(jìn)行分析,從而得出糾正操作向上游傳遞。
下面以某項(xiàng)目核電廠測(cè)試階段發(fā)現(xiàn)的問(wèn)題為例進(jìn)行分析。在此項(xiàng)目中,廠內(nèi)測(cè)試共分為4層,Level 0層一般為零件測(cè)試,由供應(yīng)商提供;Level 1層為單元測(cè)試,軟件部分主要是邏輯宏、畫(huà)面宏的測(cè)試;Level 2層軟件部分為控制應(yīng)用軟件測(cè)試,包括邏輯測(cè)試與靜態(tài)畫(huà)面測(cè)試;Level 3層軟件部分為子系統(tǒng)集成測(cè)試。下面以Level 2和Level 3層測(cè)試階段所產(chǎn)生的缺陷為例進(jìn)行分類分析。
4.1.1 邏輯、畫(huà)面測(cè)試階段
圖1為邏輯、畫(huà)面測(cè)試階段的缺陷分布統(tǒng)計(jì)。
由圖1項(xiàng)目人員可以得到幾點(diǎn)初步結(jié)果,如下:
圖1 邏輯、畫(huà)面測(cè)試缺陷分布統(tǒng)計(jì)圖Fig.1 Distribution statistics of logic and picture testing defects
1) 賦值/初始化、算法、接口、功能/類/對(duì)象的缺陷密度很大,故先考慮此類型的詳細(xì)分類,之后對(duì)詳細(xì)分類進(jìn)行根本原因分析。
2) 由于觸發(fā)條件的限制,畫(huà)面測(cè)試發(fā)現(xiàn)的問(wèn)題類別較少。故應(yīng)該增加觸發(fā)條件,豐富測(cè)試用例的內(nèi)容。
3) 缺陷類型為文檔的缺陷不存在,也側(cè)面說(shuō)明了項(xiàng)目?jī)?nèi)的輸入評(píng)審已經(jīng)較為完善。
4.1.2 邏輯畫(huà)面集成測(cè)試階段
圖2為邏輯、畫(huà)面測(cè)試階段問(wèn)題的缺陷分布統(tǒng)計(jì)。
圖2 集成測(cè)試階段缺陷分布統(tǒng)計(jì)圖Fig.2 Statistical diagram of defect distribution in integration test phase
由圖2,項(xiàng)目人員可以得到幾點(diǎn)初步結(jié)果,如下:
1) 集成測(cè)試缺陷集中最多的依然是賦值/初始化,此類占比例最大的問(wèn)題是畫(huà)面與邏輯中的點(diǎn)名不匹配或缺失。
2) 功能/類/對(duì)象的問(wèn)題比例相對(duì)于預(yù)測(cè)試階段有了提高,所以下一步分析的要點(diǎn)應(yīng)該為預(yù)測(cè)試階段之后發(fā)現(xiàn)的此類問(wèn)題的內(nèi)容。
3) 接口問(wèn)題在邏輯中主要來(lái)源于I/O的連接;畫(huà)面中為管道、連接線的問(wèn)題。
4) 算法問(wèn)題主要是CFG(Configuration)參數(shù)和個(gè)別基本功能塊的缺失。
4.1.3 缺陷類別總占比
圖3為整個(gè)測(cè)試階段缺陷分布統(tǒng)計(jì)。
圖3中的數(shù)據(jù)可以指導(dǎo)項(xiàng)目人員對(duì)缺陷密度較大的幾類問(wèn)題優(yōu)先進(jìn)行根本原因分析。比例較小的缺陷類型除考慮詳細(xì)分類外,應(yīng)考慮測(cè)試規(guī)程在測(cè)試用例的類型上是否能夠更加豐富,增加觸發(fā)條件。另外,根據(jù)缺陷的集群性原則,應(yīng)對(duì)發(fā)生錯(cuò)誤較多的缺陷類型進(jìn)行更加完善、嚴(yán)格的測(cè)試,使軟件的可靠性大大提高。
圖3 總體缺陷分布統(tǒng)計(jì)圖Fig.3 Overall defect distribution statistics
4.1.4 缺陷分類各階段對(duì)比分析
通過(guò)各個(gè)測(cè)試階段的缺陷類型占比可以得到哪類的缺陷分步比較密集,可以通過(guò)原因分析反饋到各個(gè)設(shè)計(jì)階段,提高軟件質(zhì)量。測(cè)試階段的橫向?qū)Ρ瓤梢缘玫巾?xiàng)目人員的測(cè)試程度是否達(dá)到預(yù)期的目標(biāo),因此將各個(gè)階段的分類占比和ODC典型占比分布做了比較,用來(lái)反饋到各個(gè)測(cè)試階段,提高測(cè)試的有效性。圖4、圖5是Level 1~Level 3 3個(gè)階段的缺陷占比的橫向比較圖和典型分布圖。
通過(guò)圖4、圖5的對(duì)比和各類問(wèn)題,可以得到以下幾點(diǎn)結(jié)論:
圖4 缺陷橫向?qū)Ρ葓DFig.4 Horizontal ccomparison of defects
圖5 缺陷類型分布趨勢(shì)圖Fig.5 Defect type distribution trend chart
1) 賦值/初始化:在單元測(cè)試(宏測(cè)試)階段開(kāi)始都應(yīng)該呈下降趨勢(shì),但統(tǒng)計(jì)結(jié)果顯示一直呈上升趨勢(shì),導(dǎo)致這一問(wèn)題的原因是在執(zhí)行前一階段時(shí)未能嚴(yán)格按照規(guī)程執(zhí)行,導(dǎo)致后面測(cè)試還是會(huì)出現(xiàn)原來(lái)本應(yīng)發(fā)現(xiàn)的問(wèn)題。
2) 功能/類/對(duì)象:測(cè)試類型與典型類型趨勢(shì)大致一樣,隨著測(cè)試階段的進(jìn)行,問(wèn)題逐漸減少。
3) 檢查:按照典型趨勢(shì),應(yīng)逐步減少,但實(shí)際中逐漸增多,導(dǎo)致的原因可能是宏測(cè)試階段中觸發(fā)條件較少,之后會(huì)根據(jù)具體問(wèn)題深入分析。
4) 接口:趨勢(shì)與典型趨勢(shì)一致,在檢測(cè)各個(gè)模塊間的接口主要是在邏輯測(cè)試階段進(jìn)行,故邏輯階段發(fā)現(xiàn)的最多。
5) 算法:趨勢(shì)與典型趨勢(shì)一致,隨著測(cè)試的進(jìn)行逐步減少。
經(jīng)過(guò)事件確定和數(shù)據(jù)收集,需進(jìn)行數(shù)據(jù)分析與評(píng)估的問(wèn)題主要為賦值/初始化,這一類別在宏測(cè)試階段、邏輯/畫(huà)面測(cè)試階段和邏輯畫(huà)面集成測(cè)試階段的總占比為54.98%,比例最高。以下以這一類別為例進(jìn)行分析說(shuō)明。
第一步:此類問(wèn)題為賦值/初始化。
第二步:相關(guān)數(shù)據(jù)為前文統(tǒng)計(jì)的結(jié)果,包括的內(nèi)容有發(fā)現(xiàn)問(wèn)題的階段、解決方案、引入階段等。
第三步:賦值/初始化此類問(wèn)題發(fā)生后影響邏輯與畫(huà)面集成,無(wú)法達(dá)到控制和顯示要求,直接影響了軟件的功能,重要性高。
第四步:產(chǎn)生該問(wèn)題的直接原因是邏輯/畫(huà)面組態(tài)中參數(shù)填寫(xiě)錯(cuò)誤。
第五步、第六步:通過(guò)“5個(gè)為什么”分析,將得出的參數(shù)填寫(xiě)錯(cuò)誤的原因進(jìn)行了歸類整理如下:
技術(shù)原因包括:①畫(huà)面宏參數(shù)未完全按照組態(tài)規(guī)范實(shí)施;②測(cè)試規(guī)程中未列出點(diǎn)名檢查清單。
技術(shù)管理原因包括:①邏輯組態(tài)中間點(diǎn)未有效管控;②培訓(xùn)未覆蓋點(diǎn)命名規(guī)范。
根據(jù)其原因可以得到第4個(gè)步驟糾正操作的具體內(nèi)容。糾正操作也分為技術(shù)上和技術(shù)管理上兩個(gè)部分:
技術(shù)上:在控制邏輯測(cè)試規(guī)程中詳細(xì)列出點(diǎn)名檢查清單。
技術(shù)管理上:①對(duì)組態(tài)規(guī)范實(shí)施進(jìn)行統(tǒng)一培訓(xùn);②共享管理服務(wù)器內(nèi)建立中間點(diǎn)管理庫(kù),規(guī)范點(diǎn)命名管理;③對(duì)點(diǎn)命名規(guī)則進(jìn)行統(tǒng)一培訓(xùn)。
基于ODC缺陷類型方法在工程實(shí)踐中的應(yīng)用,按照此方法進(jìn)行缺陷的分類、量化問(wèn)題,進(jìn)而通過(guò)缺陷分布分析對(duì)缺陷進(jìn)行量化的分析,得到改進(jìn)的措施。對(duì)于部分分布比例較大而且嚴(yán)重程度較高的缺陷使用了根本原因分析的方法,對(duì)此類缺陷進(jìn)行定性分析,得到改進(jìn)的措施,彌補(bǔ)了通過(guò)缺陷分析來(lái)得到技術(shù)、管理等方面的經(jīng)驗(yàn)反饋這一空白。
后續(xù)可以從兩個(gè)方面深入研究,一是ODC方法,嘗試應(yīng)用ODC中的其他屬性,如分類屬性中的缺陷觸發(fā)(Triggers)、缺陷影響(Impact),可以更加豐富數(shù)據(jù)多樣性,進(jìn)而得到更多反饋信息。其次,對(duì)后續(xù)組態(tài)測(cè)試問(wèn)題進(jìn)行缺陷分析并做橫向?qū)Ρ?,通過(guò)數(shù)據(jù)分析來(lái)給出建議。