董曉剛,楊孟飛
(1.北京控制工程研究所,北京100190;2.中國空間技術(shù)研究院,北京100094)
航天嵌入式軟件缺陷的分類方法
董曉剛1,楊孟飛2
(1.北京控制工程研究所,北京100190;2.中國空間技術(shù)研究院,北京100094)
軟件缺陷分類是軟件缺陷管理的基礎.介紹了軟件缺陷的概念,對幾種軟件缺陷分類方法進行了分析和比較.結(jié)合航天嵌入式軟件研制流程和缺陷類型分析,提出了一種航天器嵌入式軟件缺陷的分類方法,對于缺陷類型和實現(xiàn)與編碼錯誤子類型給出了詳細的分類方法.
軟件缺陷;航天嵌入式軟件;缺陷分類
軟件缺陷(software defect)的一般定義指軟件中存在的未滿足與用戶期望或者規(guī)定用途有關的要求[1].軟件缺陷是軟件本身存在的一種固有狀態(tài),不同的軟件開發(fā)階段可能引入各種類型的軟件缺陷,在軟件運行中遇到有缺陷的軟件代碼被執(zhí)行,軟件運行就會表現(xiàn)出和預期不一致的執(zhí)行效果,導致系統(tǒng)或系統(tǒng)功能無法滿足任務要求.軟件缺陷是軟件故障和失效的源頭,不同的軟件缺陷會產(chǎn)生不同的后果,對于航天嵌入式軟件,如果不能在測試階段充分發(fā)現(xiàn)和暴露軟件中的缺陷,一旦軟件交付在軌運行,可能導致嚴重的后果.
研究軟件缺陷的分類方法,特別是航天嵌入式軟件的缺陷分類方法,是為了形成一套對軟件缺陷的引入、發(fā)現(xiàn)、定位、危害和根源進行分析的有效方法,之后在軟件缺陷管理中有針對性的對問題最多、危害最大的幾類缺陷進行增強的測試,或者研究開發(fā)專項分析工具,力爭盡早和盡量完整的發(fā)現(xiàn)缺陷并修復缺陷.
軟件缺陷的分類方法有很多,各種分類方法的目的不同,觀察問題的角度和復雜程度也不一樣,幾個有代表性的軟件分類方法如下.
1.1 Putnam分類法
Putnam和Myers將軟件缺陷分為6類:需求缺陷、設計缺陷、算法缺陷、界面缺陷、性能缺陷和文檔缺陷[2].同時,還對軟件的缺陷嚴重等級做出了劃分,根據(jù)缺陷造成的后果和所需采取的行動,分為重大的、嚴重的、中等的和表面的4個等級.該分類法主要覆蓋軟件研制的需求分析、軟件設計和軟件實現(xiàn)3個階段,類型比較簡單,對目前軟件缺陷的分析和排除作用有限.
1.2 Thayer分類法
Thayer[3]分類法按照錯誤性質(zhì)分類,它利用測試人員在軟件測試過程填寫的問題報告和用戶使用軟件過程反饋的問題報告作為錯誤分類的信息.它包括16個大類,分別是:計算錯誤、邏輯錯誤、I/O錯誤、數(shù)據(jù)加工錯誤、操作系統(tǒng)和支持軟件錯誤、配置錯誤、接口錯誤、用戶需求改變、預制數(shù)據(jù)庫錯誤、全局變量錯誤、重復的錯誤、文檔錯誤、需求實現(xiàn)錯誤、不明性質(zhì)錯誤、人員操作錯誤、問題.
Thayer分類法主要用于軟件測試過程中的問題報告,主要是指示開發(fā)人員的缺陷定位和消除工作,沒有考慮到軟件整個研制過程中可能引入缺陷的其他因素,對缺陷的引入階段和缺陷根源的分析也不充分.
1.3 缺陷正交分類ODC
缺陷正交分類ODC(orthogonal defects classification)是IBM公司提出的缺陷分類方法,包括7類:賦值、檢驗、算法、時序、接口、功能、關聯(lián)[4].
分類過程分兩步進行.第一步,缺陷發(fā)現(xiàn)時,導致缺陷發(fā)現(xiàn)的環(huán)境和缺陷對用戶可能的影響,此時可以確定缺陷的3個屬性:發(fā)現(xiàn)缺陷的活動、缺陷引發(fā)事件和缺陷影響.第二步,缺陷修復關閉時,可以確定缺陷的其余5個屬性:缺陷載體、缺陷類型、缺陷限定詞、缺陷年齡和缺陷來源.這8個屬性對于缺陷的消除和預防起到關鍵作用.
該分類方法分類細致,適用于缺陷的定位、排除、缺陷原因分析和缺陷預防活動.缺陷特征提供的豐富信息為缺陷的消除、預防和軟件過程的改進創(chuàng)造了條件.ODC的缺點在于分類復雜,難以把握分類標準.
1.4 IEEE異常分類方法
IEEE異常分類方法[5]認為分類過程由識別、調(diào)查、行動計劃和實施處理4個步驟組成,其中調(diào)查步驟將異常類型分為:邏輯問題、計算問題、接口/定時錯誤、數(shù)據(jù)處理問題、數(shù)據(jù)問題、文檔問題、文檔質(zhì)量問題和增強問題共8類.
IEEE分類方法對軟件異常進行了全面分類,給出了整個缺陷分類的完整屬性框架.但是,IEEE分類過程復雜,通常需根據(jù)項目實際情況進行裁減,不利于快速地對缺陷進行分類和度量.
傳統(tǒng)的軟件缺陷分類方法,有的分類方法簡單,缺陷信息量不足,無法有效幫助進行缺陷的修復;有的沒有考慮缺陷發(fā)生的過程原因,不適用于軟件過程改進活動;有的分類又過于復雜,導致難以把握分類標準.因此,需要結(jié)合上述軟件缺陷分類方法的優(yōu)缺點,同時結(jié)合航天嵌入式軟件研制流程,特別是軟件缺陷的發(fā)現(xiàn)、定位、排除和預防過程,提出航天嵌入式軟件缺陷分類方法,指導軟件缺陷的分類,為軟件缺陷定位和修復,為軟件缺陷的預防提供準確的完整的信息.
進行航天嵌入式軟件缺陷分類的目的是對軟件缺陷進行度量,分析軟件缺陷產(chǎn)生的過程和產(chǎn)生原因,改進軟件研制過程,預防軟件缺陷,提高組織的軟件能力成熟度.航天嵌入式軟件缺陷分類方法,從方法上應滿足以下要求:
1)準確地對發(fā)現(xiàn)的缺陷進行分類;
2)分類之間應無重疊,分類體系應覆蓋所有的缺陷類型;
3)分類應該與軟件生命周期有機結(jié)合;
4)分類應滿足航天嵌入式軟件研制流程和缺陷的發(fā)現(xiàn)、定位、排除和預防過程的要求.
可以定義下面這個6元組模型來描述航天嵌入式軟件缺陷屬性,即 <引入階段、發(fā)現(xiàn)階段、缺陷類型、編程語言、缺陷根源、缺陷嚴重等級>,表1說明了每個缺陷屬性的具體含義.
表1 缺陷屬性及含義Tab.1 Defect’s attributes and definitions
根據(jù)航天軟件研制階段的定義,軟件生命周期一般包括10個階段,則定義下面這個10元組來描述軟件缺陷的引入階段和發(fā)現(xiàn)階段,即“引入階段”=“發(fā)現(xiàn)階段”=<系統(tǒng)需求分析與設計、軟件需求分析、概要設計、詳細設計、軟件實現(xiàn)、組裝測試、確認測試、系統(tǒng)聯(lián)試、驗收交付、運行維護>.一般上來說,軟件缺陷的引入階段應不包括開始軟件測試之后的研制階段,但為方便統(tǒng)一表述,這里把引入階段和發(fā)現(xiàn)階段定義一致.
“缺陷類型”是定義缺陷類型的屬性,可以通過描述對缺陷所作的實際修復工作的類型來確定缺陷類型的屬性值.傳統(tǒng)的軟件缺陷分類主要是從軟件本身存在問題的角度來區(qū)分軟件的缺陷,但是在實際軟件測試中,往往需要記錄和分析許多本身可能并非軟件缺陷的問題,這些問題可能是測試人員在理解上的誤會,可能是由于測試人員誤操作導致,還可能是測試設備、測試軟件等缺陷導致的軟件執(zhí)行異?,F(xiàn)象.為全面反映航天嵌入式軟件測試過程的真實信息,從軟件研制過程改進的角度,應把由于測試過程導致的軟件異常現(xiàn)象納入軟件缺陷的分類中,見表2所示.
表2 缺陷類型及主要表現(xiàn)Tab.2 Defects types and forms
需求分析缺陷主要是軟件需求分析階段引入的,可以通過完善需求分析工作以消除缺陷.設計階段缺陷主要指軟件設計文檔方面的缺陷,可以通過完善設計文檔的方式消除缺陷.功能、性能、數(shù)據(jù)、結(jié)構(gòu)、接口和集成錯誤主要反映因為軟件需求分析或設計的不到位導致的真實軟件缺陷,可以通過完善需求分析,或者完善軟件設計,通過重新修改軟件代碼消除缺陷.測試設備、測試軟件和測試執(zhí)行缺陷主要反映了軟件測試階段,因為測試硬件、軟件或者測試活動的錯誤導致的軟件執(zhí)行不符合預期希望結(jié)果的現(xiàn)象,通過重新設計測試的軟硬件測試平臺,重新設計測試方法和測試用例,可以消除這幾類缺陷.
實現(xiàn)與編碼錯誤是因為軟件實現(xiàn)人員對軟件編程語言、軟件使用環(huán)境、軟件執(zhí)行過程、軟件執(zhí)行異常、軟件編程規(guī)范等方面的認識和理解不正確或者不準確導致的軟件代碼缺陷.程序由源代碼符號序列組成,源代碼經(jīng)過編譯器的詞法分析、語法分析、語義分析和中間代碼生成、代碼優(yōu)化,最后生成目標代碼.在對軟件缺陷類別中的“實現(xiàn)與編程錯誤”繼續(xù)分類,可以按照軟件編譯過程的不同階段進行分類,這種方法不會導致分類的模糊,也明確了可以在編譯的哪個階段發(fā)現(xiàn)該類缺陷,如果結(jié)合靜態(tài)分析的方法,可以明確在編譯過程的哪個階段通過修改編譯器可以部分的發(fā)現(xiàn)這類缺陷,增加軟件缺陷排除的準確性.
詞法分析的任務是對構(gòu)成源程序的字符串進行掃描和分解,識別出一個個的單詞,詞法缺陷即考察符號序列在組成程序時可能出現(xiàn)的問題.語法分析的任務是在詞法分析的基礎上,根據(jù)語言的語法規(guī)則,把單詞符號串分解成各類語法單元.如果編碼錯誤都不是上述兩類缺陷,程序仍然可能與實現(xiàn)者想表達的含義不一致,則產(chǎn)生語義缺陷[6].可維護性缺陷是專門考察程序注釋問題和變量、語句多余的缺陷類型.在此基礎上,試給出“實現(xiàn)與編碼錯誤”缺陷分類,為缺陷預防提供依據(jù).
編程語言是航天嵌入式軟件源程序的實現(xiàn)語言,可以用以下的3元組來定義,即 <C語言、匯編語言、Ada語言>.
缺陷根源是軟件缺陷產(chǎn)生的根原因,通過考察近3年航天嵌入式控制軟件的缺陷產(chǎn)生原因,按照缺陷修復的方式進行分類,可用以下10元組定義缺陷根源,即<用戶需求理解不完整、用戶需求理解錯誤、功能設計不完整、功能設計錯誤、性能設計不完整、編碼疏漏、對編程語言認識不準確、對使用環(huán)境認識不準確、對規(guī)范理解不準確、操作錯誤>.
表3 實現(xiàn)與編程錯誤類型細化分類Tab.3 Implementation and coding error
缺陷嚴重等級是根據(jù)如果軟件缺陷一直存在,對航天任務造成的不利影響的嚴重程度來分類,如表4所示.
表4 缺陷嚴重等級Tab.4 Severity level of defects
通過給出航天嵌入式軟件缺陷分類方法,進而分析產(chǎn)生各類缺陷的軟件過程原因,獲取不同軟件缺陷出現(xiàn)的頻度數(shù)據(jù),并以此為依據(jù)制定對應的軟件過程管理與技術(shù)改進兩方面的改進措施,才能進一步提高軟件質(zhì)量,提高軟件組織的生產(chǎn)能力.在未來的型號軟件研制中,可以結(jié)合本文給出的軟件缺陷分類方法進行缺陷的統(tǒng)計分類和故障定位,并可有針對性的在不同的軟件測試階段采取不同的測試方法和測試工具,重點發(fā)現(xiàn)和暴露某一類別的軟件缺陷,提高測試的有效性.
[1] W ilfredo T P.Software fault tolerance a tutorial[R]. Langley Research Center,NASA,2000
[2] Putnam L H,Myers W.Measures for excellence:reliable software on time,within budget[M].New Jersey: Prentice Hall,1992
[3] 黃錫滋.軟件可靠性、安全性與質(zhì)量保證[M].北京:電子工業(yè)出版社,2002 Huang Z X.Software reliability and safety with quality assurance[M].Beijing:Publishing house of electronic industry,2002
[4] Ram C,Inderpal S B,Jarir K C,et al.Orthogonal defect classification-a concept for in-process measurements[J].IEEE transactions on software engineering,1992,18(11):943-956
[5] IEEE Std 1044-1993.IEEE standard classification for anomalies[S].The Institute of Electrical and Electronics Engineers,1993
[6] 胡璇,劉斌,陸民燕.軟件代碼缺陷分類及其應用[J].計算機工程,2009,35(2):30-33 Hu X,Liu B,Lu M Y.Classification of software code errors and its application[J].Computer Engineering,2009,35(2):30-33
A C lassification M ethod for Spacecraft Em bedded Software Defects
DONG Xiaogang1,YANG Mengfei2
(1.Beijing Institute of Control Engineering,Beijing 100190,China; 2.China Academy of Space Technology,Beijing 100094,China)
Classification of software defects is the basis of software defect management.The concept of software defects,is presented in this paper,and some kinds of software defect classification methods and their merit and flaw are analyzed in detail.According to analysis of spacecraft embedded software development process and its defective types,a classification method is proposed for spacecraft embedded software defects,particular for defects types and its subclass of“implementation and coding errors”.
software defect;spacecraft embedded software;defect classification
V4
A
1674-1579(2012)05-0049-04
董曉剛(1974—),男,高級工程師,研究方向為航天器嵌入式軟件開發(fā),軟件可靠性與安全性;楊孟飛(1962—),男,研究員,研究方向為空間控制計算機系統(tǒng)和航天器控制系統(tǒng).
2012-02-03
DO I:10.3969/j.issn.1674-1579.2012.05.009