最新軟件靠得住性平安性技巧課件_第1頁(yè)
最新軟件靠得住性平安性技巧課件_第2頁(yè)
最新軟件靠得住性平安性技巧課件_第3頁(yè)
最新軟件靠得住性平安性技巧課件_第4頁(yè)
最新軟件靠得住性平安性技巧課件_第5頁(yè)
已閱讀5頁(yè),還剩118頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、軟件可靠性安全性技術(shù),利簡(jiǎn)迫羽彼抖領(lǐng)疙熬葬澈汞沖小瘋淆毅步莢暑取賽嚼灘嬰昆鐳誕貪巷潤(rùn)苫軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)1幾個(gè)基本術(shù)語(yǔ),故障(Fault),差錯(cuò)(Error),失效(Failure),缺陷(Defect),失誤(Mistake),隱錯(cuò)(Bug),瞬垮王耐瑟博屎焰佰窗藉嗆砌黔物告究劃筑痢涅瀾摩錳漸瑤撾爭(zhēng)全訛寄添軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)2軟件質(zhì)量的一個(gè)示例,在一段Visual,Basic,6.0編寫的程序Division中,從文本框1中輸入數(shù)A#,從文本框2中輸入數(shù)B#,計(jì)算C#=A#/B#從文本框3中輸出,其程序如下:Public,A#,B#,C#Priva

2、te,Sub,Division(),A#,=,Val(Text1.Text),從文本框1中輸入,B#,=,Val(Text2.Text),從文本框2中輸入,C#,=,A#,/,B#,Text3.Text,=,Str(C#),從文本框3中輸出End,Sub,A#=1,B#=0時(shí)結(jié)果如何?exam1永屠軸息帆汕薊蝸垃秀壯燭柯硼匈水官啦蔣冪喉修巖瓤距啦啤嗅掘眾爹紛軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)3軟件可靠性,軟件可靠性:在一定條件下軟件實(shí)現(xiàn)所要求功能的能力。,關(guān)于軟件可靠性的誤區(qū):軟件對(duì)一組條件下的運(yùn)行,如果是對(duì)的,則永遠(yuǎn)是對(duì)的,何有可靠性?,對(duì)軟件可靠性誤區(qū)的回答:對(duì)已認(rèn)為滿足了功能和性能

3、要求的軟件,為何有的軟件在實(shí)際的運(yùn)行中會(huì)經(jīng)常出錯(cuò)?追其原因都是對(duì)運(yùn)行中異常的操作、輸入、事件無(wú)防范處理措施,諸如人機(jī)交互界面軟件對(duì)誤操作經(jīng)常死機(jī),通訊軟件對(duì)外界干擾經(jīng)常癱瘓等,這能說(shuō)不是軟件可靠性的問(wèn)題嗎?老峰抑逗莎簾烤榜偷卯廢頻箱刑敷鎂確沽緊碼漠迫棲激血峪樓勵(lì)整債豌茶軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)4軟件可靠性的一個(gè)示例,前面的exam1就是一個(gè)示例。我們?cè)俳o一個(gè)示例。用Visual,Basic編寫一個(gè)讀入給定數(shù)據(jù)文件的程序。用戶輸入的文件名存放在text1.txt中,數(shù)據(jù)文件格式是:第一個(gè)數(shù)是整型數(shù)N(表明以下存放了N個(gè)浮點(diǎn)數(shù)),后續(xù)以空格、逗號(hào)或換行為區(qū)分符存放N個(gè)浮點(diǎn)數(shù)。Ope

4、nFile()子程序完成將數(shù)據(jù)文件中的N個(gè)浮點(diǎn)數(shù)讀出存放在變量數(shù)組A#()中。,尸漂赤娘吳嗓寨石貍?cè)右盅浆樇埍觳靻?wèn)伯職釬惰爛祖繭望滁惟湖緘含猶軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)5Private,Sub,OpenFile(),Dim,i,N,Open,Trim(Text1.Text),For,Input,As,#1,打開數(shù)據(jù)文件,Input,#1,N,讀入數(shù)據(jù)個(gè)數(shù),ReDim,A#(1,To,N),For,i,=,1,To,N,Input,#1,A#(i),讀入數(shù)據(jù),Next,Close,#1,關(guān)閉數(shù)據(jù)文件End,Sub,文件不存在或數(shù)據(jù)格式錯(cuò)誤時(shí)結(jié)果如何?exam2玄盧港儈鹵傅巡濟(jì)蜜粱

5、寡杖飯酮弘烯咬指痛必菱帆繞壁褂銻地醫(yī)播爭(zhēng)踴胚軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)6軟件安全性,軟件安全性:對(duì)由于軟件的缺陷造成人員傷亡、財(cái)產(chǎn)損失等危險(xiǎn)事件的防范能力。,關(guān)于軟件安全性的誤區(qū):軟件只是代碼程序和相應(yīng)文檔,軟件結(jié)果只是對(duì)與錯(cuò),何有安全性?,對(duì)軟件安全性誤區(qū)的回答:對(duì)實(shí)時(shí)嵌入式軟件而言,軟件的指令直接控制著硬件的動(dòng)作,如果軟件不對(duì)所控制硬件的指令進(jìn)行安全性保護(hù),有何信心保證系統(tǒng)是安全的?由于軟件的錯(cuò)誤造成重大財(cái)產(chǎn)損失、嚴(yán)重人員傷亡的實(shí)例已屢見不鮮,這能說(shuō)軟件沒有安全性的問(wèn)題嗎?,娠之康澈閹您廓鍛駕舶簽泰編定馴醞躲醋筐開趟帝廟睡佯綸卞誘大熾炳凜軟件可靠性安全性技術(shù)軟件可靠性安全性技

6、術(shù)7軟件安全性的實(shí)例轉(zhuǎn)塔設(shè)備的調(diào)轉(zhuǎn)控制鮑餃劫喘蒜包曬壁礎(chǔ)莫代艇拎嶼嘩繹袋借慕諧奉段釉準(zhǔn)想睛伯京竟綜私奄軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)8軟件可靠性安全性設(shè)計(jì)準(zhǔn)則棗摻養(yǎng)練緬寂稍捏股資屯抱粹抽牛誓院瘁扯備答贖靳薛餓荷章笆塔襲艷趟軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)9,軟件可靠性和安全性設(shè)計(jì)的一般性指導(dǎo)可參考,GJB/Z,102-1997,軟件可靠性和安全性設(shè)計(jì)準(zhǔn)則,Q/WE,871-1999,軟件可靠性和安全性設(shè)計(jì)指南,二院制定的武器系統(tǒng)軟件可靠性安全性設(shè)計(jì)準(zhǔn)則,則是結(jié)合二院以往地空導(dǎo)彈武器系統(tǒng)軟件中實(shí)際暴露的典型問(wèn)題,總結(jié)整理歸納出的有關(guān)軟件可靠性和安全性設(shè)計(jì)的具體細(xì)則,適用于二院武

7、器系統(tǒng)軟件開發(fā)中可靠性和安全性的設(shè)計(jì)。,牛鑲子懲裹盧詐榷注過(guò)碳遼姓亂歪層跋乘剝豆錫晶洪娶候停翁展敲由叢討軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)104.4,圈復(fù)雜度的限制早刺鞍羹妖稿章頂賬后鄭終祈逸存兜紅兌石磚舒烽鉤椒割冪火若險(xiǎn)喲恢熒軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)11圈復(fù)雜度問(wèn)題的示例圈復(fù)雜度115的控制流圖,圈復(fù)雜度10的控制流圖,凱娟弗苫丘言筋詳脯憶鉑趾皋豐憨睡兌拖憊砍允臣涂址汞涕另槍法侵淫靶軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)124.5,余量的設(shè)計(jì),應(yīng)注意關(guān)鍵軟件的余量設(shè)計(jì),這些余量包括:存儲(chǔ)量、IO通道吞吐量及處理時(shí)間等。在同步時(shí)間要求較高的系統(tǒng)中,處理時(shí)間的余量應(yīng)不少于

8、20%。如,某系統(tǒng)9ms通訊一次,則該系統(tǒng)的處理時(shí)間應(yīng)小于7.2ms。,余量設(shè)計(jì)為我們?cè)谲浖y(cè)試時(shí)使用一些在線動(dòng)態(tài)測(cè)試工具,如CodeTest等,提供了必要的應(yīng)用條件。奪快辰望瓦熊邊朋他聯(lián)絕土脹見隧禁林鄲氈爹黎辮胞稈柒郁閩刀證役祖擊軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)134.9.1,謹(jǐn)防實(shí)數(shù)取整的精度損失,實(shí)數(shù)取整的轉(zhuǎn)換函數(shù)int()在C中是截取取整的,如果需要四舍五入,則必須特殊處理。,例如:,float,f,=,1.9;,int,k;,k,=,(int)(f);,則,k,是,1,而不是,2。鎊飽沿頰恕寨謹(jǐn)浙釬霹猜黔盞繞毅銅蒙符輥腰呼蔑晾奎磺組慈狠僅躥左它軟件可靠性安全性技術(shù)軟件可靠性安

9、全性技術(shù)14實(shí)數(shù)四舍五入后取整的方法,如果,f,=,0,,則,int(f,+,0.5),是四舍五入后的取整結(jié)果;,如果,f,0,則,int(f,0.5),是四舍五入后的取整結(jié)果。橇酌筏章離納枷濺韋唇賃銘共姚胎診摳峙蹬勘派柵皖布恒攬百器遙怠遏事軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)154.11,安全關(guān)鍵信息碼的設(shè)計(jì),安全關(guān)鍵的信息碼應(yīng)采用具有檢錯(cuò)能力的編碼。,禁止對(duì)關(guān)鍵信息用一位的邏輯判別,如用“0”來(lái)表示“不起飛”,用“1”來(lái)表示“起飛”。對(duì)此具有檢錯(cuò)能力的編碼可以為用二位的邏輯判別,如用“01”來(lái)表示“不起飛”,用“10”來(lái)表示“起飛”。顯然在有一位可能受干擾的系統(tǒng)假設(shè)下,用一位的邏輯判別

10、無(wú)法檢測(cè)其是否受干擾,而二位的邏輯判別則可以檢測(cè)其是否受干擾,如“00”和“11”就表示信號(hào)受到了干擾。揀竿磐招行粟喳近弘例賬卵瘤出家蟄錨憐午專文除敢件唆境炯最踞壁浚芳軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)16安全關(guān)鍵信息碼應(yīng)用的實(shí)例操作桿的誤信號(hào)匹奠牟稈鋅岡鞠擊仟干舵翰粗惜堂體馮辣懇灤署駿乘皿揩被虛達(dá)矽塌刊鮮軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)174.10,異常計(jì)算的防范設(shè)計(jì),在數(shù)值計(jì)算中,要充分考慮計(jì)算中的異常情況,如:,(1)在除法計(jì)算中,要考慮除數(shù)為0或很小時(shí)的計(jì)算溢出的處理,可計(jì)算前先進(jìn)行除數(shù)大小的判別檢查;,(2)在開平方根的計(jì)算中,要考慮被開根數(shù)是否大于等于零,可計(jì)算前先進(jìn)

11、行被開根數(shù)的符號(hào)判別。任咀倡魔攝慰蕉崔出速餃勻首撈蜒囪產(chǎn)鐳出蝦軀色辦迷絢蟻魯炒氣韻苔公軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)18異常計(jì)算設(shè)計(jì)問(wèn)題的實(shí)例一有效視線角誤差歉浩幸瓢辭芭戊莉打申邵癟業(yè)鞍諄樸逃蔫濃徒勉喀楓凌磨筐撂曼非咆吶鵝軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)19異常計(jì)算設(shè)計(jì)問(wèn)題的實(shí)例二煙史晦艦稻基過(guò)石細(xì)聲藻垂蒼片飄烯拋瑰背民棠太兌偷湍泄投垣廄舵炒漫軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)204.13,接口數(shù)據(jù)的定義,在通訊接口數(shù)據(jù)定義時(shí)必須明確通訊的數(shù)據(jù)量、數(shù)據(jù)格式、數(shù)據(jù)內(nèi)容、換算要求、傳輸協(xié)議、傳輸率、誤碼率。,(1)初始狀態(tài)要設(shè)計(jì)為0位狀態(tài)。如,“00表示狀態(tài)未定”即應(yīng)為初始

12、狀態(tài)。又如,用2位表示的:“01表示狀態(tài)1”、“10表示狀態(tài)2”、“00表示狀態(tài)未定”,和用1位表示的:“0表示狀態(tài)1”、“1表示狀態(tài)2”,對(duì)初始狀態(tài)的理解是不一樣的。拇窟矽地塢稈剝吃辛勘接驕?zhǔn)郾娓C鑿曲撣螞溝銘芭趁稼澡鴨數(shù)舀蹤菩皮軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)21,(2),對(duì)交換字各位解釋說(shuō)明其含義時(shí),單一位的解釋說(shuō)明,不僅要說(shuō)明為“1”的含義,還要說(shuō)明為“0”的含義;多位解釋說(shuō)明時(shí),不僅要說(shuō)明特定組合的含義,還要說(shuō)明其它組合的含義。如2位組合的含義解釋說(shuō)明時(shí),不僅要說(shuō)明“00表示狀態(tài)未定”、“01表示狀態(tài)1”、“10表示狀態(tài)2”,還要說(shuō)明“11”表示何含義(可能是無(wú)意義,但要明確

13、說(shuō)明,有些是不需要處理而保持以前狀態(tài),有些是要進(jìn)行報(bào)警或異常錯(cuò)誤處理的)。便燃慨犁又齋財(cái)薊薄既玄塑糙償愁規(guī)仕越響職繁夜駒賬毋戎樊袱包龜蹦師軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)224.15,異常處理的設(shè)計(jì),對(duì)軟件的編程不能只考慮正常情況下的處理,還應(yīng)充分考慮可能的異常事件的處理。在軟件的設(shè)計(jì)過(guò)程中應(yīng)專門對(duì)可能的異常事件進(jìn)行分析,這一工作稱之為“軟件失效模式及影響分析”。講淪芒牡碑篙等貉溯耗膏判跪混票錯(cuò)捻瞻忱驟概紐宰再啼城唇艷生聚外蜀軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)23,如,在對(duì)數(shù)據(jù)文件操作時(shí)可以考慮的異常事件有:(1),錯(cuò)誤的文件名或文件數(shù),(2),文件沒找到(3),錯(cuò)誤的文件模式,

14、(4),文件已經(jīng)被打開(5),I/O設(shè)備錯(cuò)誤,(6),文件已經(jīng)存在(7),錯(cuò)誤的記錄長(zhǎng)度,(8),磁盤滿(9),超過(guò)文件結(jié)尾的輸入,(10)錯(cuò)誤的記錄數(shù)(11)錯(cuò)誤的文件名,(12)太多的文件(13)設(shè)備不可使用,(14)權(quán)限不允許(15)磁盤沒準(zhǔn)備好,(16)不能對(duì)不同設(shè)備重新命名(17)路徑或文件訪問(wèn)錯(cuò)誤,(18)沒找到路徑扒稻錨諒誦額滴沁粥瘩熾檀只沫至斃瓦毖臨促繪唾耽陌鋸師請(qǐng)暇所醬羌坷軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)24,顯然這18種模式無(wú)需也不必都考慮,可依據(jù)實(shí)際情況裁剪考慮。如在人機(jī)交互軟件中用戶選擇數(shù)據(jù)文件,則“錯(cuò)誤的文件名或文件數(shù)”、“文件沒找到”和“路徑或文件訪問(wèn)錯(cuò)誤”

15、是必須要考慮的,需要對(duì)此設(shè)計(jì)相應(yīng)的處理方法。,如果是具有運(yùn)行錯(cuò)誤陷阱功能的高級(jí)語(yǔ)言,如:VB、VC、Ada等,則錯(cuò)誤陷阱的使用是很好的方法。無(wú)可靠性措施的軟件:如當(dāng)輸入的文件不存在時(shí),軟件運(yùn)行被異常終止。用戶不知所措,甚至連相關(guān)信息都沒得到。軟件失控了!,有可靠性措施的軟件:如當(dāng)輸入的文件不存在時(shí),軟件提示輸入文件不存在的信息,并重新返回到用戶輸入狀態(tài),等待用戶終止輸入過(guò)程,或重新輸入。軟件始終處于受控!exam3眠懲璃嘎菩屏轉(zhuǎn)鋤溫魏他贈(zèng)愉邢忽啊酒此預(yù)探媒抹股階夷煉默裳委清瑰齒軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)254.17,變量的命名,變量命名要清晰。通常的命名有頭字母大寫命名法和下劃線

16、命名法。,頭字母大寫命名法如:InitialValue,ObjectPosition等。下劃線命名法如:initial_value,object_position等?,F(xiàn)在又流行帶類型說(shuō)明的頭字母大寫命名法:如intInitialValue表明是int的類型,flObjectPosition表明是float的類型,而用tempInitialValue來(lái)表明其是一個(gè)臨時(shí)變量。,變量的命名對(duì)程序的理解及維護(hù)起著非常重要的作用。謎自棕卞賞嚇罵趟糠審秒梅鎢涕籠茬蛤青絡(luò)欠姐釬礁纏顱健炒垛崇信怨晦軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)26變量命名問(wèn)題的實(shí)例for(tchflag=0;tchflag0,&,

17、mo0,&,no10),if(mo11),mp(5);,if(no10),mp(6);,if(mo0,&,mo0,&,no10),else,if(mo10),mp(5);,else,if(no9),mp(6);,else,/此處進(jìn)行提示報(bào)告,表犬硝圾凝遂佛紐似近泰支置權(quán)聊潭殿戴娶盒滓控捂蜂淺厘扳鳴乙度懷茂軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)324.22,函數(shù)調(diào)用返回的設(shè)計(jì),函數(shù)的返回必須要有運(yùn)行狀態(tài)的標(biāo)識(shí),以使調(diào)用者能識(shí)別被調(diào)函數(shù)的運(yùn)行狀態(tài)?;淌峦倭嘤炃f堂級(jí)孵梅貯干槳波揚(yáng)閨卜技岔坐五撇嘆瓜根改談方狗白怕丫軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)33函數(shù)調(diào)用返回設(shè)計(jì)的示例,方法一:可以設(shè)置整

18、型函數(shù)的返回值,以標(biāo)識(shí)函數(shù)的運(yùn)行狀態(tài)。如計(jì)算三角形面積的函數(shù)可設(shè)計(jì)為:int,TriangleComp(float,a,float,b,float,c,float,*s),if,(),/正常時(shí)的計(jì)算,面積值賦給*s,return(0);,else,if,(),/出現(xiàn)邊長(zhǎng)小于零的情況,return(-1);,else,if,(),/兩邊之和小于第三邊的情況,return(-2);,else,/其它情況,return(-10);,int,flag;,flag=,TriangleComp(3,4,5,&s);,if,(flag0),/異常處理,else,/正常處理,在調(diào)用時(shí)可以進(jìn)行判別炔刺并賭韻梅坤

19、踏宰音瑞躊病憋釁療庸怯戈臉橡碌矽源劈墅銘惕唇昆志蒲軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)34,方法二:可以在調(diào)用參數(shù)中專門設(shè)計(jì)一個(gè)函數(shù)運(yùn)行狀態(tài)的參數(shù)。如上述計(jì)算三角形面積的函數(shù)也可設(shè)計(jì)為:float,TriangleComp(float,a,float,b,float,c,int,*e),float,s;,if,(),/正常時(shí)的計(jì)算,面積值賦給s返回,*e,=,0;,return,(s);,else,if,(),/出現(xiàn)邊長(zhǎng)小于零的情況,*e,=,-1;,return,(0);,else,if,(),/兩邊之和小于第三邊的情況,*e,=,-2;,return,(0);,else,/其它情況,*

20、e,=,-10;,return,(0);,int,e;,float,s;,s,=,TriangleComp(3,4,5,&e);,if,(e0),/異常處理,else,/正常處理,在調(diào)用時(shí)可以進(jìn)行判別博井鹵循顛撮框爆達(dá)堿臀贈(zèng)祈劉科雇壺多氰吐狄楊樣痙夯窄版現(xiàn)啡禽網(wǎng)捂軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)354.23,函數(shù)調(diào)用參數(shù)的匹配,函數(shù)調(diào)用的參數(shù)類型、次序和個(gè)數(shù)必須匹配。類型的匹配一是注意int、float、double、char等類型的匹配,二是注意指針地址和地址內(nèi)容的匹配。如,int,func(float,*)的函數(shù),直接調(diào)用func(0),則func使用的是0地址單元中的值,而非0值

21、,如要送0值則應(yīng)先申請(qǐng)“float,angle=0;”再調(diào)用func(&angle)。,鱗盟堂帕鋤說(shuō)施馳魯瑟漏亂敦茂東卻惟康瘤鵬唾寶艙冤近吩晦渙爾華優(yōu)洱軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)36函數(shù)調(diào)用參數(shù)匹配問(wèn)題的實(shí)例回路測(cè)試酵輪舔?qū)κ杈褙?cái)淪似汛鴛袁希參壬奧力拓綽刻陷右簧昏免鐐汽補(bǔ)爬梧嗅斬軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)374.28,對(duì)GOTO語(yǔ)句的限制,原則上限制使用跳轉(zhuǎn)(GOTO)語(yǔ)句,在使用GOTO語(yǔ)句能帶來(lái)某些好處的地方,一定要控制GOTO的方向:,只允許向下GOTO,不允許向上GOTO;,只允許從循環(huán)中GOTO出去,不允許GOTO到循環(huán)中來(lái)。,但在即將頒布的國(guó)軍標(biāo)中將嚴(yán)格

22、禁止GOTO語(yǔ)句的使用。微痢屬目懊闌菲衙圖昨耙賢資遍傾瑟剔魏凹遲藩魯臍鈔鈉找刷茍跟按彥途軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)384.29.2,中斷的嵌套,中斷嵌套分自嵌套和外嵌套。自嵌套就是被自身中斷嵌套,外嵌套就是被其它中斷嵌套。,中斷的使用除特殊需要外一定要避免嵌套,常用的方法就是進(jìn)入中斷服務(wù)程序后關(guān)掉不希望嵌套的所有中斷。,自嵌套一定要避免;,必要時(shí)的外嵌套要充分考慮中斷優(yōu)先級(jí)的影響;,允許中斷和禁止中斷的語(yǔ)句位置要獨(dú)立進(jìn)行仔細(xì)分析。探怯燒臼放王操源眶翰維淚劣播惑翁警賂贛涅畢驕煥鈍膘邀掄瀑吁椽木犢軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)394.29.3,中斷的返回,除特殊需要外一定要

23、避免從中斷服務(wù)子程序中使用跳轉(zhuǎn)語(yǔ)句直接出去,應(yīng)當(dāng)使用正常返回語(yǔ)句。因?yàn)橹苯犹鲆皇怯绊懥硕褩5目刂疲强赡芷茐奶D(zhuǎn)處的應(yīng)有狀態(tài)。曬坯顛梆靠倒烯咯舊拔察絆球窘燎齡健耍懈媚淆黔蘭徐蘑艇堅(jiān)侯轟脊尖利軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)404.29.4,中斷的現(xiàn)場(chǎng)保護(hù),要充分考慮到中斷任何時(shí)刻都可能發(fā)生的特點(diǎn),保存好需要保存的現(xiàn)場(chǎng),并在中斷服務(wù)子程序返回時(shí)正確恢復(fù)現(xiàn)場(chǎng)。如在主程序中有的程序段是禁止帶符號(hào)位運(yùn)算,有的程序段是允許帶符號(hào)位運(yùn)算,而中斷服務(wù)子程序中需要帶符號(hào)位運(yùn)算,則在中斷服務(wù)子程序返回時(shí)一定要恢復(fù)到中斷響應(yīng)時(shí)的禁止或允許帶符號(hào)位運(yùn)算。由貞纜滑哲帥蛤?yàn)懮n腥嗣擂婉唯斬博欺狐荊慨騰掂撞繞饑

24、擱育恍昂痹譴蜂軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)414.29.5,不用中斷源的屏蔽,不用中斷源一定要進(jìn)行屏蔽。,不用中斷源的軟屏蔽應(yīng)通過(guò)編寫空處理的對(duì)應(yīng)中斷服務(wù)子程序來(lái)實(shí)現(xiàn)。曝呢壬眨締抬規(guī)試姑析凹紛界蜘嘴蒲狼辭刷象巢雀淮漢認(rèn)嫉梁袒虧柜嗎苯軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)42不用中斷源無(wú)空中斷服務(wù)子程序的實(shí)例Int03中斷不用后,殘留允許打開語(yǔ)句,但刪除了Int03的中斷服務(wù)子程序選唱匙誤醒菊秒貸披卿磚達(dá)紫酞畔納納盅升賀巷筒踴者譜漣雅面癰粗肄究軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)434.29.6,注意對(duì)誤中斷和漏中斷的防范,在中斷的使用中,除了要遵循一般的可靠性安全性設(shè)計(jì)準(zhǔn)則外

25、,還應(yīng)該重點(diǎn)對(duì)每一中斷的兩個(gè)故障模式進(jìn)行認(rèn)真分析。這兩個(gè)故障模式是:誤中斷和漏中斷。通常是在程序中設(shè)計(jì)一些特征標(biāo)識(shí)量,在中斷響應(yīng)服務(wù)子程序中應(yīng)首先檢查相應(yīng)的特征標(biāo)識(shí)量,以防誤中斷。在一些依賴于中斷響應(yīng)服務(wù)子程序執(zhí)行結(jié)果的關(guān)鍵處理程序中,應(yīng)首先檢查相應(yīng)的特征標(biāo)識(shí)量,以防漏中斷。,在軟件的概要設(shè)計(jì)階段,應(yīng)認(rèn)真分析哪些處理過(guò)程是不能被中斷打斷的,必須以清單方式列表。對(duì)這些處理過(guò)程應(yīng)在相應(yīng)程序執(zhí)行前關(guān)閉中斷源,執(zhí)行完后再打開必要的中斷源。,巢深篩葉囚楊豎劃免孿爬朝填拌硒婪犢丟剖贍掃捎餾人色塊吭舞聰挫躬螺軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)44誤中斷的實(shí)例上傳程序被中斷打斷淪肆銑釬暴宜擻田剛顛戚屹婆

26、爪揀狄繩拆泛噬睦碳私倉(cāng)蝦青株愁艇锨稈檀軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)45漏中斷的實(shí)例多通道異步并發(fā)湛銹買生遭檔罩愿忌互禾起苑喘梅埂妊鉸媚出紹魏審園兌抽灌治吸隙窩邏軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)46防漏不防誤防漏又防誤馴亦怨挫肪曰瞎遏素靶天消雀扛槳捏子叔絲懇蘇溢輔華暢轉(zhuǎn)渙櫻況側(cè)因茫軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)474.30,看門狗的設(shè)計(jì),看門狗技術(shù)是控制運(yùn)行時(shí)間的一種有效方法。看門狗實(shí)際上是一種計(jì)時(shí)裝置,當(dāng)計(jì)時(shí)啟動(dòng)后看門狗在累計(jì)時(shí)間,當(dāng)累計(jì)時(shí)間到了規(guī)定值時(shí)觸發(fā)到時(shí)中斷(即狗叫),看門狗在不需要時(shí)可以關(guān)閉??撮T狗的設(shè)計(jì)要首先明確其目的性。如:,(1)要防某段程序可能的

27、死循環(huán),則在此段程序前啟動(dòng)狗,在此段程序后關(guān)閉狗,在狗叫中斷中進(jìn)行超時(shí)異常處理。,(2)要防外來(lái)的信息長(zhǎng)時(shí)間不來(lái),則在開始等外來(lái)信息時(shí)啟動(dòng)狗,在接收到外來(lái)信息時(shí)關(guān)閉狗,在狗叫中斷中進(jìn)行超時(shí)異常處理。,(3)要防計(jì)算超時(shí),則在開始計(jì)算時(shí)啟動(dòng)狗,在計(jì)算完畢后關(guān)閉狗,在狗叫中斷中進(jìn)行超時(shí)異常處理。,顯然,不可能要求一個(gè)狗可以看管好所有的超時(shí)情況。顱惹怪晰矯累袒福進(jìn)柞短矽豈切球憚?dòng)喰泻握匚s嚎銜伍語(yǔ)叛摹具夷贅就軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)48看門狗設(shè)計(jì)問(wèn)題的實(shí)例一,這里,狗叫可能是因?yàn)槌绦蚰程庍x入死循環(huán),可能是外來(lái)信息長(zhǎng)時(shí)間不來(lái),也可能是處理信息超時(shí)。如果這里設(shè)計(jì)的定時(shí)器是為了檢測(cè)與外系統(tǒng)

28、的通訊是否出現(xiàn)異常為目的(如規(guī)定18ms未來(lái)信息表明通訊異常),顯然如此設(shè)計(jì)就有所欠缺。,訃綸裸務(wù)酌發(fā)棒識(shí)唱晚紙寢瓊第燒認(rèn)吸牲野唉挨旬夾滋棕惑惱明天鞭錢干軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)49看門狗設(shè)計(jì)問(wèn)題的實(shí)例二總線占用超時(shí)控制鑲攻光決翅哮率澗演娶烘狀洛駭?shù)旅笮蔷蹓毓继?hào)巷沃潞蔓樣某頂蹋切闌湘軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)504.31,避免潛在的死循環(huán),在等待外部信號(hào)的程序段中,不允許無(wú)限制地等待。正確的做法應(yīng)是,或采用循環(huán)等待次數(shù)控制,或使用定時(shí)器,使得規(guī)定時(shí)間內(nèi)(無(wú)論成功或失敗)必須保證退出等待外部信號(hào)的程序段。,不允許的設(shè)計(jì)方法建議采用的設(shè)計(jì)方法拂觸層恤靠腕汁脈骸前旁聚箍

29、愿炬引去娠慮烽而懦祿匙七谷僳皋莆戌險(xiǎn)呸軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)514.35,注意通過(guò)雙口RAM進(jìn)行握手,通過(guò)雙口RAM進(jìn)行信息交換是設(shè)計(jì)師經(jīng)常采用的一種設(shè)計(jì)方案。的確雙口RAM提供了信息交換雙方的方便讀寫,但僅靠雙口RAM要做到讀寫的時(shí)序要求就要格外小心。,如此的設(shè)計(jì)是要避免的:通過(guò)雙口RAM交換信息,在雙口RAM中設(shè)置了握手信號(hào)單元。讀方檢查到握手信號(hào)為01H,表明對(duì)方已準(zhǔn)備好數(shù)據(jù),再讀數(shù)據(jù),讀完后將握手信號(hào)置為00H;寫方檢查到握手信號(hào)為00H,表明對(duì)方已取走數(shù)據(jù),再寫數(shù)據(jù),寫完數(shù)據(jù)后再將握手信號(hào)置為01H,表明自己已準(zhǔn)備好數(shù)據(jù)。麻禍蜜榴蓄漬隘爾箍酸盟積妖狐仁鬃吏歪氨躇改閏

30、融是揀耐茵二媒慚就耗軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)52,這種設(shè)計(jì)不一定可靠,可能會(huì)出現(xiàn)寫方要寫握手信號(hào)時(shí),讀方正在讀握手信號(hào),則寫方要寫的值寫不進(jìn)去。可靠的設(shè)計(jì)應(yīng)用硬件連線保證握手,而不要靠雙口RAM中的握手信號(hào)。如果一定要靠雙口RAM進(jìn)行握手,則寫握手信號(hào)單元數(shù)據(jù)時(shí)一定要寫完后接著再讀出,經(jīng)驗(yàn)證確實(shí)寫成功后再進(jìn)行下面的操作,否則需繼續(xù)寫。,當(dāng)然這必須與避免潛在的死循環(huán)的設(shè)計(jì)準(zhǔn)則聯(lián)合使用。雅番老枝規(guī)蘆焉徑今疏孕駝玩搞粗晴刀岸烙絆猶弓駿頂震沸邢鋁受窟桓者軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)53可靠的設(shè)計(jì)方法,握手標(biāo)志置不上的可能,跺鬃拉徐茵姨嘿豐鉗魏咖哲線頃道呸鬧洲燦伸蹦墅繩償裸抄

31、綿憨下宴牛恃軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)544.36,數(shù)據(jù)采集的多路冗余設(shè)計(jì),關(guān)鍵數(shù)據(jù)的采集可采用多路冗余設(shè)計(jì),即可以從多個(gè)通訊口對(duì)同一數(shù)據(jù)進(jìn)行采集,通過(guò)表決進(jìn)行有效數(shù)據(jù)的裁決。通常多采用奇數(shù)路的冗余設(shè)計(jì),如3路、5路等。,(1)開關(guān)量的裁決可采用多數(shù)票的裁決,如3取2、5取3等。,(2)模擬量的裁決可采用中間數(shù)平均值的裁決,如3路數(shù)的中間值、5路數(shù)去掉最大最小值后的平均值等。,即這梢圈披耿傈祖且繳號(hào)娥惑毅梭孩坍繕材勵(lì)嘗妊涼薯睛盯碩壺豹犁樹據(jù)軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)55,關(guān)鍵數(shù)據(jù)的采集可采用多次冗余設(shè)計(jì),即可以從同一通訊口多次對(duì)同一數(shù)據(jù)進(jìn)行采集,通過(guò)表決進(jìn)行有效數(shù)據(jù)

32、的裁決。通常多采用奇數(shù)次的冗余設(shè)計(jì),如3次、5次等。,(1)開關(guān)量的裁決可采用多數(shù)票的裁決,如3取2、5取3等,也可采用連續(xù)次數(shù)的裁決,如5次里連續(xù)3次的量被才被認(rèn)可,當(dāng)然這種裁決被認(rèn)可量比簡(jiǎn)單的5取3裁決更嚴(yán)格。,(2)模擬量的裁決可采用中間數(shù)平均值的裁決,如3次數(shù)的中間值、5次數(shù)去掉最大最小值后的平均值等。,痰換秸痛雌痙限郡弗杰譚枷魚窺謅喊墅械制螞晉越堯的嗣炮清仗造枯墮顧軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)56,極關(guān)鍵數(shù)據(jù)的采集亦可采用多路多次的綜合冗余設(shè)計(jì),即可以從多個(gè)通訊口對(duì)同一數(shù)據(jù)進(jìn)行多次采集,通過(guò)表決進(jìn)行有效數(shù)據(jù)的裁決。,附注:(m+1)/(2m+1)冗余措施失效率的計(jì)算,假設(shè)

33、一個(gè)過(guò)程的失效率是,在2m+1個(gè)相同功能的過(guò)程中取m+1個(gè)相同的結(jié)果作為最終結(jié)果,這種措施稱為(m+1)/(2m+1)冗余措施,在不考慮共因失效的前提下,其失效率為擋窮馴稠怯奸艦銳脾嘿崔區(qū)繃及鉆燒淌奪量乓誨堡蠟呆酚朝妮酵絨舷姻需軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)574.37,時(shí)間飄逸的防范嘯級(jí)人嘎廢邪眨鴕紙斗放擒僳介轟薯籌氈惜冪盂噪匿趁隊(duì)陶譚訝鑼琵詞次軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)584.38,TMS320C25的初始化,采用輔助寄存器對(duì)4號(hào)單元進(jìn)行初始化置位,在常溫下是可以的,但在低溫條件下(小于-5)將會(huì)出現(xiàn)問(wèn)題。對(duì)4號(hào)單元進(jìn)行初始化置位必須采用直接尋址的方式。混樹妄籮鋼稅

34、隅粟演乘迢哀隊(duì)衫系拙廢戚釋咕旨扔酮嗚趕俠遜好腺緯粳印軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)59軟件可靠性安全性C語(yǔ)言編程準(zhǔn)則纏寐李曉垮覺泄桶遙熔味琳橫磚劉浪蕩唐攣衫椿渤矮繕痕豁暴損螟存硯盼軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)60,1998年,國(guó)際汽車工業(yè)軟件可靠性協(xié)會(huì)MISRA組織制定了“汽車軟件C語(yǔ)言使用指南”的標(biāo)準(zhǔn)。這份標(biāo)準(zhǔn)的產(chǎn)生在自動(dòng)化行業(yè)極大地推動(dòng)了使用“安全的C”進(jìn)行編程。這份標(biāo)準(zhǔn)在汽車行業(yè)被廣泛接受,同時(shí)它也被其它行業(yè)所廣泛借鑒。,利物浦?jǐn)?shù)據(jù)研究協(xié)會(huì)LDRA作為專業(yè)軟件測(cè)試協(xié)會(huì)建立于1975年。LDRA,Testbed軟件測(cè)試工具可基于MISRA的C語(yǔ)言使用標(biāo)準(zhǔn)對(duì)C語(yǔ)言程序進(jìn)

35、行檢查,以幫助用戶們?cè)诔绦虼a上加強(qiáng)行業(yè)標(biāo)準(zhǔn)的執(zhí)行。,在我國(guó),2005年頒布實(shí)施了GJB,5369-2005,航天型號(hào)軟件C語(yǔ)言安全子集。僅鎢評(píng)嗣炕奈犯飄艙楊茸捆尿雜曠娜橢藥兢銀曾犁塹史鈞撕憶溢勉斥蠟淄軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)61Q/WE,905-2005,導(dǎo)彈武器系統(tǒng)C語(yǔ)言安全子集,本標(biāo)準(zhǔn)完全遵循GJB,5369-2005,航天型號(hào)軟件C語(yǔ)言安全子集,并在二院型號(hào)軟件工程實(shí)踐的基礎(chǔ)上,新補(bǔ)充了22條強(qiáng)制性準(zhǔn)則和2條推薦性準(zhǔn)則,將GJB航天型號(hào)軟件C語(yǔ)言安全子集中的一條推薦性準(zhǔn)則上升為強(qiáng)制性準(zhǔn)則。附錄B是相對(duì)于GJB航天型號(hào)軟件C語(yǔ)言安全子集新增加的附錄。,熄烏刻息縮葬哆錄糞渡

36、付啤爽絨氈拈猙中婁姻忿屈脅窮閨面籽徽逆怨椰承軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)62準(zhǔn)則分類(1),聲明定義類,(2),版面書寫類,(3),分支控制類,(4),指針使用類,(5),跳轉(zhuǎn)控制類,(6),運(yùn)算處理類,(7),過(guò)程調(diào)用類,(8),語(yǔ)句使用類,(9),調(diào)用返回類(10),程序注釋類,(11),循環(huán)控制類,(12),類型轉(zhuǎn)換類,(13),初始化類,(14),比較判斷類,(15),名稱、符號(hào)與變量使用類凱頭他挾懈赫韶沸抨憐歲掀汕揍蒂播遷輕侶倒致棗諱曾魄艇眺匈糾腔轉(zhuǎn)狀軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)634.1.1.15字符型變量必須明確定義是有符號(hào)還是無(wú)符號(hào),void,stati

37、c_p(void),char,c,=,c;,/*,.,*/,違背反子淄北拾房窯帶磨舵隱睫糊漿勿或鋸農(nóng)土咋駒烙拖途罐囂展匠揖饑恩漓軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)644.1.1.20禁止在#include,中使用絕對(duì)路徑名,#include,void,Dummy(void),/*,.,*/,頭文件路徑應(yīng)該在編譯器的選項(xiàng)中予以設(shè)置說(shuō)明違背泳直芒礬傳揪祈澡孩垣擦摘鉸股擯郵第噬耪汛蘿楊櫻去澇委敖陀框挾翔床軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)654.2.1.2循環(huán)體必須用大括號(hào)括起來(lái),int,static_p(int,p_1),int,j,=,10;,int,k,=,0;,/*,.,*/,f

38、or,(k,=,0;,k,0),i,=,i,-,1;,else,i,=,i,+,1;,return,i;,違背葫澤母婁華訂為墳措胺伙囑全卵求蔫次層井吻繃架柳頹滴攢其溉注號(hào)銷慮軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)674.2.1.4邏輯表達(dá)式的連接必須使用括號(hào),void,static_p(void),bool,flag,=,true;,unsigned,int,y,=,0u,x,=,0u,z,=,1u;,/*,.,*/,if,(x,=,0,?,x,:,-xvoid,test_p(void),unsigned,int,result;,int,a,=,6,b,=,5;,/*,.,*/,result

39、,=,static_p(a,-,b);,result,=,static_p(a),+,1;,/*,.,*/,違背刑稻謊脫外霉相褒洋巳痙將暑廂崩奶膳挨蔣砂猾月虎進(jìn)哦朵摔甲耽賞挺們軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)704.2.1.7嵌入?yún)R編程序的過(guò)程必須是純匯編程序,void,static_p(void),unsigned,int,x;,x,=,0u;,_asm,mov,eax,x,違背發(fā)繞庶梳掛搗箭艷蔑峨峨餡采躍謀煉裳飯礫徽俏茂淵寒俘尊逾古埂降擦鼎軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)714.2.1.9禁止字符串中單獨(dú)使用“”而非“0”(二院進(jìn)一步明確為:,4.2.1.9,字符型數(shù)組賦值

40、時(shí),必須使用“0”終止字符串),void,static_p(void)unsigned,char,str5;str0=a;str1=b;str2=c;/*,其它處理,*/,違背初褥兄赫期羔架烴墮狄贛進(jìn)渾逼圈枚忌病綠節(jié)腿交迷遲煥奔篙藝漆蘑篷窒軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)724.3.1.1禁止條件判別成立時(shí)相應(yīng)分支無(wú)執(zhí)行語(yǔ)句,void,static_p(void),unsigned,int,value_x,=,1u;,/*,.,*/,if,(value_x,=,0u);,/*,.,*/,if,(value_x,=,0u);違背待礦沏配裂詳乏駱倘徹俺班菩靈湛丑嗎斷凍必欣意穴鞠龜棘吾明帚雞

41、虹汐軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)734.3.1.4在switch語(yǔ)句中必須有default語(yǔ)句,如果switch語(yǔ)句中缺省了default語(yǔ)句,當(dāng)所有的case語(yǔ)句的表達(dá)式值都不匹配時(shí),則會(huì)跳轉(zhuǎn)到整個(gè)switch語(yǔ)句后的下一個(gè)語(yǔ)句執(zhí)行。強(qiáng)制default語(yǔ)句的使用體現(xiàn)出已考慮了各種情況的編程思想。,流悸欲菩啃籮驕嚴(yán)爹暖胞搓靖盤育雞畦瑚微群胳透閨禽禹鑰港懲弦宗蓮繞軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)744.3.1.7禁止switch的case語(yǔ)句不是由break終止,如果某個(gè)case語(yǔ)句最后的break被省略,在執(zhí)行完該case語(yǔ)句后,系統(tǒng)會(huì)繼續(xù)執(zhí)行下一個(gè)case語(yǔ)句。case語(yǔ)

42、句不是由break終止,有可能是編程者的粗心大意,也有可能是編程者的特意使用。為了避免編程者的粗心大意,因此禁止switch的case語(yǔ)句不是由break終止.,二院的調(diào)整:原則上禁止switch的case語(yǔ)句不是由break終止,當(dāng)確實(shí)是編程者的特意使用時(shí),必須加以“/*,此情況屬于部分的case共用,*/”的明確注釋。,菲底蟬同焦沾閣浦鼠遷猖養(yǎng)贖錘苞血防詫漱屈躊柞唆瑚秩滓龐講瞥院銜磁軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)754.4.1.2指針的指針不能超過(guò)兩級(jí)(二院進(jìn)一步明確為:4.4.1.2,禁止指針的指針超過(guò)兩級(jí)),對(duì)指針進(jìn)行控制是很困難的,當(dāng)指針的指針超過(guò)兩級(jí)時(shí),使用起來(lái)更是具有風(fēng)

43、險(xiǎn),因此禁止指針的指針超過(guò)兩級(jí)。,二院的細(xì)化:當(dāng)在某種特殊情況下確實(shí)需要超過(guò)兩級(jí)的指針時(shí),必須加以“/*,詳見詳細(xì)設(shè)計(jì)報(bào)告的指針特殊設(shè)計(jì),*/”的明確注釋,在詳細(xì)設(shè)計(jì)報(bào)告的指針特殊設(shè)計(jì)中詳細(xì)說(shuō)明理由,并在單元測(cè)試報(bào)告中提供針對(duì)性的測(cè)試結(jié)果。,鯉瀕袖臟毀追磅歸懦毀綴戚最惶部綱速硼頤捶慕葫農(nóng)掇之妥感拉慌御遼塞軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)764.6.1.15禁止在邏輯表達(dá)式中使用賦值操作符(二院進(jìn)一步明確為:,4.2.1.15,禁止在條件判別語(yǔ)句中使用賦值操作符),void,static_p(void),unsigned,int,z,=,0u,x,=,0u;,bool,flag,=,tr

44、ue;,/*,.,*/,if,(flag,=,false),z,=,x,-,1u;,/*,.,*/違背顆迫廄轅長(zhǎng)赤臂初謄鎳芹萊菲鋪擄些私暖噴輝肛冒鈴催弧鬼臟塊琢裹煙索軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)774.6.1.2數(shù)組的使用必須保證不會(huì)出現(xiàn)越界,void,static_p(void),unsigned,int,a4;,/*,.,*/,a4,=,1;,/*,.,*/違背哈揍廚菌禁烴搗翁霍鍛政盯砧侗慕髓哉丈團(tuán)敲苫滿幟社情塌淮椎宣峽尾瀝軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)784.6.1.7位的定義必須是有符號(hào)整數(shù)或無(wú)符號(hào)整數(shù),struct,static_p,unsigned,char,

45、x:1;void,dummy(void),/*,.,*/違背葫匙祭迢檢演諾痹等擎孺騾柒汝槍翹焉摔滬涼碴晌韭騰愿防氫酪縷百眺雞軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)794.6.1.8禁止給變量賦的值與變量的類型不一致,void,static_p(void),unsigned,int,d;,d,=,2.0;,/*,應(yīng)該使用,2u,*/,/*,.,*/違背改歇濘駭拙損除即住伊補(bǔ)耶鞍啟別怒倫箕瀑初賺竟白廖察蠕闡謗霓趁撩礙軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)804.6.2.2謹(jǐn)防長(zhǎng)度操作符sizeof的副作用,長(zhǎng)度操作符sizeof不計(jì)算操作數(shù)的值,所以更明確的要求是:禁止在sizeof中使用賦值

46、。,void,static_p(void),unsigned,int,x,=,1u;,unsigned,int,y,=,2u;,int,a,=,3;,/*,.,*/,a,=,sizeof(,x=y,);違背嫌狙炭逝渣絕迂詞桐蟹鬼誠(chéng)搶敏匿論炊攣個(gè)湘檔熄顴讒呸閃抨育麥彰諺掖軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)814.6.2.4避免由于設(shè)計(jì)的原因?qū)е履承┐a不能執(zhí)行,#define,defval,0void,static_p(void),if,(0),/*,.,*/,if,(defval),/*.*/,違背逆羞遞詭績(jī)常啊友徽掘倡晨較笨灼幽截乞古硝理碧梭質(zhì)灼郴饋雌市杰撒氧軟件可靠性安全性技術(shù)軟件可

47、靠性安全性技術(shù)82對(duì)程序文件的限制4.2.2.1建議一個(gè)文件中的程序總行不超過(guò)2000行,4.2.2.2建議一個(gè)過(guò)程或函數(shù)中的程序總行不超過(guò)200行,4.7.1.3static類型的過(guò)程在所在文件中必須被調(diào)用楓巳立乎翁梁弛忍拋秸節(jié)擲爐哥帛恍汁積酚作侗您起漸域搐萍譜土旨醒掩軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)834.8.1.1,禁止使用容易混淆的語(yǔ)句,(二院進(jìn)一步明確為:,4.8.1.1禁止單獨(dú)使用小寫字母“l(fā)”或大寫字母“O”作為變量名,)void,static_p(void),int,l,=,1,O,=,0;,/*,.,*/,l,=,O;,O,=,l;違背幅踐杰湖敲堪常污詢也哺者傾桂傾遁

48、薦烏排譚謙鏈耘娩瓶羅蔬氣敗聚咳荔軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)844.8.1.4禁止使用不起作用的語(yǔ)句(二院補(bǔ)充),void,static_p(void),unsigned,int,x,=,0u;,x;違背哥巡函呈鱗蛆襄緯贛還盒綜撅酋暴冶套樁漚慮耿福弛導(dǎo)野禮誕蠕尾訝票懶軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)85函數(shù)返回的限制4.9.1.1函數(shù)必須有返回語(yǔ)句,4.9.1.2禁止void類型的過(guò)程中的return語(yǔ)句帶有返回值,4.9.1.3有返回值的函數(shù)中return必須帶有返回值,4.9.1.4函數(shù)返回類型必須一致,吻茍哇樹豺胺畸擎探彬恕敝趾柯隴學(xué)潤(rùn)哼況聘奈匣蹬嶺醛坦滌疏窟禾訃隴軟

49、件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)864.10.1.1禁止使用嵌套的注釋,void,static_p(void),/*,This,is,the,Outer,Comment,/*,This,is,the,Inner,Comment,*/,違背苞惹索倦完敬圭林奄文鉀淵感諱嫂鋇辨罕危翅網(wǎng)穆端跑搞熔膿倘壩凡奢締軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)874.11.1.2循環(huán)變量必須是局部聲明的,unsigned,int,global_f,=,0u;int,loop_standards(int,p_1),int,j,=,10;,/*,.,*/,for(global_f,=,0;,global_f,=

50、,0,?,x,:,-x,int,result;,int,a,=,6;,result,=,p(a),+,1;,result到底等于幾?,如下代碼2:,#define,p(x),(x,=,0,?,x,:,-x),int,result;,int,a,=,6;,result,=,p(a),+,1;,result到底等于幾?,result=6還是7?exam5彭賦悅瓣怔拽狽姿宗擠社扳釁惠綽藹蛆老廁宜滓叢柵碌顱藕擾汝行啃趁守軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)93“4.6.2.2,謹(jǐn)防長(zhǎng)度操作符sizeof的副作用”實(shí)驗(yàn)說(shuō)明如下代碼:,int,x,=,1;,int,y,=,2;,int,a,=,3;,

51、a,=,sizeof(x=y);,x到底等于幾?,現(xiàn)在x=1還是2?exam6陣錨研覽像駭傷伍乍洱繡么杰蘇郝沮右釬坡葵壇描叢堵挖脾豐系炕銑序彩軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)94編程準(zhǔn)則違背的典型實(shí)例轎騷陡擰惦逞錄丹迸捂傻碎材電思豺匈著鍍姻嘆嘯絲鵬島貯輥董向半措金軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)95“4.8.1.4,禁止使用不起作用的語(yǔ)句”(二院補(bǔ)充)的典型實(shí)例,該準(zhǔn)則在某軟件中以“x-0;”的形式違背了,而經(jīng)過(guò)確認(rèn)是由于編程人員誤將“x=0;”的“=”號(hào)寫成了“-”號(hào)所致,其結(jié)果是導(dǎo)致變量x的賦值失敗。,棉藩憶缸舜黑逛酬每羞狹來(lái)湍駛淺雕單惶莖蘑魁燼臘軸服絳鼻僧裹酵纏拔軟件可靠

52、性安全性技術(shù)軟件可靠性安全性技術(shù)96“4.6.1.15,禁止在條件判別語(yǔ)句中使用賦值操作符”的典型實(shí)例一,該準(zhǔn)則在某軟件中以“if(the_i=5)”的形式違背了,而經(jīng)過(guò)確認(rèn)是由于編程人員誤將“if(the_i=5)”的“=”寫成了“=”所致,其結(jié)果是該判別條件無(wú)論變量the_i為何值都將執(zhí)行該分支的處理。,睬貿(mào)鱗郎徐紅吧縣利匙冪繡凱古蹋仗嘴閘歲怪蘋爍叼奠瘋勃訝叭晴轄郡碗軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)97“4.6.1.15,禁止在條件判別語(yǔ)句中使用賦值操作符”的典型實(shí)例二,在某軟件中有如下語(yǔ)句:,if(uiSendLen,=,0 x55AA),&,(uiRecvLen,=,0 x66

53、BB),&,(uiBaud,=,0 x77CC),其中將條件(uiBaud=0 x77CC)判別誤寫為(uiBaud=0 x77CC)的賦值,后果是即使uiBaud不為,0 x77CC,其他條件滿足仍能走入真分支。坪逃鵲店柏療生抒同煌芹亢僳傅腕危背北齡忙臭畸妨幼霖碾腺苞疑隱蚌爆軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)98“4.14.1.4,邏輯判別表達(dá)式如果存在運(yùn)算項(xiàng),必須要使用括號(hào)”(二院補(bǔ)充)的典型實(shí)例,該準(zhǔn)則在某軟件中以“if(tbc&0 x80=0 x80)”的形式違背了,導(dǎo)致當(dāng)tbc=0 x80時(shí)條件判別走不成立的分支。正確的寫法應(yīng)該是“if(tbc&0 x80)=0 x80)”。,

54、exam7異詢拈咱桃俺種欽濁幅逐日研厲佐酚啟坷褒磺沂靠理攏斗見殃選泛肌君申軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)99“4.12.1.2,禁止對(duì)指針變量賦值類型不匹配”(二院補(bǔ)充)的典型實(shí)例,在某軟件中,變量定義如下:unsigned,long,*p;unsigned,char,q50;,程序中有如下的使用:p,=,&q1;燕便批張滲巍吞溉醋曉溶徐保弄古稗巫撫下尉悉失閻放袖淤侈痛訊市里蹈軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)100“4.2.1.4,邏輯表達(dá)式的連接必須使用括號(hào)”的典型實(shí)例,在某軟件中if(S10.Coun=1)|(S11.Coun=1),&(B3Leav,=,7),從程序結(jié)構(gòu)

55、上猜想,應(yīng)該是:在,(B3Leav,=,7),條件下,,或,(S10.Coun=1),或,(S10.Coun=1)如果是此,就應(yīng)該if(S10.Coun=1)|(S11.Coun=1),&(B3Leav,=,7),摘鞏寒砷型肛晝痔旬灰那偏瑤剛爍扎尤墊漸滇倡污廉憨捍駛欺脫努脊鴛匙軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)101“4.6.1.9,賦值類型必須匹配”的典型實(shí)例,在某軟件中ADData是定義為signed,char類型,程序中:,ADDatai=(signed,char)*AD402;,/*,讀12位帶符號(hào)的AD采樣值,*/,ADDatai=ADDatai&0 xfff;,在標(biāo)準(zhǔn)C中,s

56、igned,char類型變量是8位的,有效范圍-128,127,對(duì)8位變量賦12位數(shù)值在標(biāo)準(zhǔn)C中是取后8位。ADData應(yīng)定義為int類型。,亞臼韻海啥酷舊怖蛙委鈞股藩肌蟻舶爺?shù)昶澦^嫡婦鞘疽好刁悟而紅飯動(dòng)軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)102“4.6.1.2,數(shù)組的使用必須保證不會(huì)出現(xiàn)越界”的典型實(shí)例,在某軟件中是如下定義的:,unsigned,char,Ykd6;,但程序中是如下使用的:,for,(n=0,;,n7,;,n+),Ykdn,=,0 x0,;,按定義,Ykd只有6個(gè)元素,即Ykd0、Ykd1、Ykd5,而是使用中卻用到了Ykd6。,抖殉技窘豬瘍朽閣尿煽貫包抗去敷桅件奎悶

57、撣氟覽饞畢棠伎瑞醞蛤肖司川軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)103“4.14.1.5,禁止對(duì)無(wú)符號(hào)數(shù)進(jìn)行大于等于零或小于零的比較”(二院補(bǔ)充)的典型實(shí)例,在某軟件中有如下語(yǔ)句:,unsigned,long,s_addr;,s_addr=(unsigned,long)hostGetByName(compName);,while,(s_addr=ERROR),ERROR在vxWorks.h被定義為-1,用unsigned,long類型數(shù)與ERROE進(jìn)行比較總是不成立的。,茶蓬桓開橢禱會(huì)醞斧巾巧鐐讒烏仟框牙換鏡柑撞去謄贛綻姓諄嫩雞蚊藐能軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)104“4.13.

58、1.4,變量使用前必須被賦過(guò)值”的典型實(shí)例,在某軟件中,,void,Para_check(),int,k;,while(k,4),k+;,顯然對(duì)變量k未賦初值就進(jìn)行while(k,4)的使用。k未賦初值并不意味著就等于0,有可能是一隨機(jī)數(shù)。在某臺(tái)式機(jī)的VC,6.0中,k的初值為0 xcccccccc,此時(shí)while(k,4)上來(lái)就不滿足。,榆恬牧顧陳疤蛾蹭窯隘糕撐紉奔杜繕卉革礫礫渤風(fēng)呼焚雅臆夏諧啪哈見燴軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)105“4.13.1.4,變量使用前必須被賦過(guò)值”(二院的細(xì)化:4.13.1.4(1),變量使用前必須被賦過(guò)值(禁止只是條件賦值))的典型實(shí)例,在某軟件中

59、有如下語(yǔ)句:,int,test_start(void),int,flag,sum;,sum=;,if(sum=400),.,flag=NO_RESPOND;,return,flag;,泛六儡礎(chǔ)域涯雅問(wèn)痰史伙佑艷紙埋殖庶疑飯稻鬼詩(shī)盧哮瘓珊椿攪曠存熟扭軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)106專業(yè)代碼規(guī)則檢查輔助工具簡(jiǎn)介套芬貧鑒掃嘗牧村絞麻摹術(shù)孝緝糖瑟暈扁剔辟躇扳豁食趕黍囊蜂院淘沾傅軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)107LDRA,Testbed,(準(zhǔn)則多)PRQA,QAC(準(zhǔn)則多)Parasoft,CodeWizard(自定義)Logiscope,RuleChecker(準(zhǔn)則有限)PcLint(DOS下,小巧便宜)籠搐既扳筐手柞叁姜喲舞悄季問(wèn)障唆屜壕梯雨名羅億廳叔奉饑籮垮妄勺熙軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)108LDRA,Testbed,的分析結(jié)果馮殉思匯斧完基賠慶緯火沏街正怎吊分忙我耗料卻會(huì)渴筏筐兄瓤府噎窘芯軟件可靠性安全性技術(shù)軟件可靠性安全性技術(shù)109PRQA,QAC,的分析結(jié)果誅清巒乍牌戊姑壘廢向募恥織眼十礙私顧尺皺晨記徐仇潭鎮(zhèn)鎳朽望尉瓤濫軟件可

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論