版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
軟件可靠性安全性技術(shù)
1精品文檔幾個(gè)基本術(shù)語(yǔ)故障(Fault)差錯(cuò)(Error)失效(Failure)缺陷(Defect)失誤(Mistake)隱錯(cuò)(Bug)2精品文檔軟件質(zhì)量的一個(gè)示例在一段VisualBasic6.0編寫的程序Division中,從文本框1中輸入數(shù)A#,從文本框2中輸入數(shù)B#,計(jì)算C#=A#/B#從文本框3中輸出,其程序如下:PublicA#,B#,C#PrivateSubDivision()A#=Val(Text1.Text)'從文本框1中輸入
B#=Val(Text2.Text)'從文本框2中輸入
C#=A#/B#Text3.Text=Str(C#)‘從文本框3中輸出EndSubA#=1,B#=0時(shí)結(jié)果如何?exam13精品文檔軟件可靠性軟件可靠性:在一定條件下軟件實(shí)現(xiàn)所要求功能的能力。關(guān)于軟件可靠性的誤區(qū):軟件對(duì)一組條件下的運(yùn)行,如果是對(duì)的,則永遠(yuǎn)是對(duì)的,何有可靠性?對(duì)軟件可靠性誤區(qū)的回答:對(duì)已認(rèn)為滿足了功能和性能要求的軟件,為何有的軟件在實(shí)際的運(yùn)行中會(huì)經(jīng)常出錯(cuò)?追其原因都是對(duì)運(yùn)行中異常的操作、輸入、事件無防范處理措施,諸如人機(jī)交互界面軟件對(duì)誤操作經(jīng)常死機(jī),通訊軟件對(duì)外界干擾經(jīng)常癱瘓等,這能說不是軟件可靠性的問題嗎?4精品文檔軟件可靠性的一個(gè)示例前面的exam1就是一個(gè)示例。我們?cè)俳o一個(gè)示例。用VisualBasic編寫一個(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ù)。OpenFile()子程序完成將數(shù)據(jù)文件中的N個(gè)浮點(diǎn)數(shù)讀出存放在變量數(shù)組A#()中。5精品文檔PrivateSubOpenFile()Dimi,NOpenTrim(Text1.Text)ForInputAs#1'打開數(shù)據(jù)文件
Input#1,N'讀入數(shù)據(jù)個(gè)數(shù)
ReDimA#(1ToN)Fori=1ToNInput#1,A#(i)'讀入數(shù)據(jù)
NextClose#1'關(guān)閉數(shù)據(jù)文件EndSub文件不存在或數(shù)據(jù)格式錯(cuò)誤時(shí)結(jié)果如何?exam26精品文檔軟件安全性軟件安全性:對(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í)例已屢見不鮮,這能說軟件沒有安全性的問題嗎?7精品文檔軟件安全性的實(shí)例轉(zhuǎn)塔設(shè)備的調(diào)轉(zhuǎn)控制……8精品文檔軟件可靠性安全性設(shè)計(jì)準(zhǔn)則9精品文檔軟件可靠性和安全性設(shè)計(jì)的一般性指導(dǎo)可參考GJB/Z102-1997軟件可靠性和安全性設(shè)計(jì)準(zhǔn)則Q/WE871-1999軟件可靠性和安全性設(shè)計(jì)指南
二院制定的《武器系統(tǒng)軟件可靠性安全性設(shè)計(jì)準(zhǔn)則》,則是結(jié)合二院以往地空導(dǎo)彈武器系統(tǒng)軟件中實(shí)際暴露的典型問題,總結(jié)整理歸納出的有關(guān)軟件可靠性和安全性設(shè)計(jì)的具體細(xì)則,適用于二院武器系統(tǒng)軟件開發(fā)中可靠性和安全性的設(shè)計(jì)。10精品文檔4.4圈復(fù)雜度的限制11精品文檔圈復(fù)雜度問題的示例圈復(fù)雜度115的控制流圖
圈復(fù)雜度10的控制流圖
12精品文檔4.5余量的設(shè)計(jì)應(yīng)注意關(guān)鍵軟件的余量設(shè)計(jì),這些余量包括:存儲(chǔ)量、IO通道吞吐量及處理時(shí)間等。在同步時(shí)間要求較高的系統(tǒng)中,處理時(shí)間的余量應(yīng)不少于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)用條件。13精品文檔4.9.1謹(jǐn)防實(shí)數(shù)取整的精度損失實(shí)數(shù)取整的轉(zhuǎn)換函數(shù)int()在C中是截取取整的,如果需要四舍五入,則必須特殊處理。例如:
floatf=1.9;intk;k=(int)(f);
則k是1,而不是2。14精品文檔實(shí)數(shù)四舍五入后取整的方法如果f>=0,則int(f+0.5)是四舍五入后的取整結(jié)果;如果f<0,則int(f–0.5)是四舍五入后的取整結(jié)果。15精品文檔4.11安全關(guān)鍵信息碼的設(shè)計(jì)安全關(guān)鍵的信息碼應(yīng)采用具有檢錯(cuò)能力的編碼。禁止對(duì)關(guān)鍵信息用一位的邏輯判別,如用“0”來表示“不起飛”,用“1”來表示“起飛”。對(duì)此具有檢錯(cuò)能力的編碼可以為用二位的邏輯判別,如用“01”來表示“不起飛”,用“10”來表示“起飛”。顯然在有一位可能受干擾的系統(tǒng)假設(shè)下,用一位的邏輯判別無法檢測(cè)其是否受干擾,而二位的邏輯判別則可以檢測(cè)其是否受干擾,如“00”和“11”就表示信號(hào)受到了干擾。16精品文檔安全關(guān)鍵信息碼應(yīng)用的實(shí)例操作桿的誤信號(hào)……17精品文檔4.10異常計(jì)算的防范設(shè)計(jì)在數(shù)值計(jì)算中,要充分考慮計(jì)算中的異常情況,如:(1)在除法計(jì)算中,要考慮除數(shù)為0或很小時(shí)的計(jì)算溢出的處理,可計(jì)算前先進(jìn)行除數(shù)大小的判別檢查;(2)在開平方根的計(jì)算中,要考慮被開根數(shù)是否大于等于零,可計(jì)算前先進(jìn)行被開根數(shù)的符號(hào)判別。18精品文檔異常計(jì)算設(shè)計(jì)問題的實(shí)例一有效視線角誤差……19精品文檔異常計(jì)算設(shè)計(jì)問題的實(shí)例二……20精品文檔4.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)為初始狀態(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)的理解是不一樣的。21精品文檔(2)對(duì)交換字各位解釋說明其含義時(shí),單一位的解釋說明,不僅要說明為“1”的含義,還要說明為“0”的含義;多位解釋說明時(shí),不僅要說明特定組合的含義,還要說明其它組合的含義。如2位組合的含義解釋說明時(shí),不僅要說明“00表示狀態(tài)未定”、“01表示狀態(tài)1”、“10表示狀態(tài)2”,還要說明“11”表示何含義(可能是無意義,但要明確說明,有些是不需要處理而保持以前狀態(tài),有些是要進(jìn)行報(bào)警或異常錯(cuò)誤處理的)。22精品文檔4.15異常處理的設(shè)計(jì)對(duì)軟件的編程不能只考慮正常情況下的處理,還應(yīng)充分考慮可能的異常事件的處理。在軟件的設(shè)計(jì)過程中應(yīng)專門對(duì)可能的異常事件進(jìn)行分析,這一工作稱之為“軟件失效模式及影響分析”。23精品文檔
如,在對(duì)數(shù)據(jù)文件操作時(shí)可以考慮的異常事件有:(1)錯(cuò)誤的文件名或文件數(shù)(2)文件沒找到(3)錯(cuò)誤的文件模式(4)文件已經(jīng)被打開(5)I/O設(shè)備錯(cuò)誤(6)文件已經(jīng)存在(7)錯(cuò)誤的記錄長(zhǎng)度(8)磁盤滿(9)超過文件結(jié)尾的輸入(10)錯(cuò)誤的記錄數(shù)(11)錯(cuò)誤的文件名(12)太多的文件(13)設(shè)備不可使用(14)權(quán)限不允許(15)磁盤沒準(zhǔn)備好(16)不能對(duì)不同設(shè)備重新命名(17)路徑或文件訪問錯(cuò)誤(18)沒找到路徑24精品文檔顯然這18種模式無需也不必都考慮,可依據(jù)實(shí)際情況裁剪考慮。如在人機(jī)交互軟件中用戶選擇數(shù)據(jù)文件,則“錯(cuò)誤的文件名或文件數(shù)”、“文件沒找到”和“路徑或文件訪問錯(cuò)誤”是必須要考慮的,需要對(duì)此設(shè)計(jì)相應(yīng)的處理方法。如果是具有運(yùn)行錯(cuò)誤陷阱功能的高級(jí)語(yǔ)言,如:VB、VC、Ada等,則錯(cuò)誤陷阱的使用是很好的方法。無可靠性措施的軟件:如當(dāng)輸入的文件不存在時(shí),軟件運(yùn)行被異常終止。用戶不知所措,甚至連相關(guān)信息都沒得到。軟件失控了!有可靠性措施的軟件:如當(dāng)輸入的文件不存在時(shí),軟件提示《輸入文件不存在》的信息,并重新返回到用戶輸入狀態(tài),等待用戶終止輸入過程,或重新輸入。軟件始終處于受控!exam325精品文檔4.17變量的命名變量命名要清晰。通常的命名有頭字母大寫命名法和下劃線命名法。頭字母大寫命名法如:InitialValue,ObjectPosition等。下劃線命名法如:initial_value,object_position等?,F(xiàn)在又流行帶類型說明的頭字母大寫命名法:如intInitialValue表明是int的類型,flObjectPosition表明是float的類型,而用tempInitialValue來表明其是一個(gè)臨時(shí)變量。變量的命名對(duì)程序的理解及維護(hù)起著非常重要的作用。26精品文檔變量命名問題的實(shí)例for(tchflag=0;tchflag<14;tchflag++)
……27精品文檔4.19變量的初始化所使用的變量要有明確的初始化,避免使用缺省的初始值。同時(shí),對(duì)循環(huán)處理過程的變量初始化要特別注意。28精品文檔變量初始化問題的實(shí)例一固化與非固化的差異……29精品文檔變量初始化問題的實(shí)例二雙發(fā)時(shí)的過程標(biāo)志……30精品文檔4.21多組條件判別的完全性C語(yǔ)言中的IF語(yǔ)句推薦的書寫格式為
if(id==0){//0的處理;}elseif(id==1){//1的處理;……}else{//其它情況的處理;}注意這里else要求明確寫出,要充分利用else進(jìn)行異常情況的處理。事實(shí)上,if處理?xiàng)l件的遺漏是經(jīng)常發(fā)生的,需要特別小心。
31精品文檔多組條件判別不完全性的實(shí)例if(mo>0&&mo<11&&no>0&&no<10){…}if(mo<1||mo>11)mp(5);if(no<1||no>10)mp(6);
if(mo>0&&mo<11&&no>0&&no<10){…}elseif(mo<1||mo>10){mp(5);}elseif(no<1||no>9){mp(6);}else{//此處進(jìn)行提示報(bào)告}32精品文檔4.22函數(shù)調(diào)用返回的設(shè)計(jì)函數(shù)的返回必須要有運(yùn)行狀態(tài)的標(biāo)識(shí),以使調(diào)用者能識(shí)別被調(diào)函數(shù)的運(yùn)行狀態(tài)。33精品文檔函數(shù)調(diào)用返回設(shè)計(jì)的示例方法一:可以設(shè)置整型函數(shù)的返回值,以標(biāo)識(shí)函數(shù)的運(yùn)行狀態(tài)。如計(jì)算三角形面積的函數(shù)可設(shè)計(jì)為:intTriangleComp(floata,floatb,floatc,float*s){if(……){//正常時(shí)的計(jì)算,面積值賦給*s……return(0);}elseif(……){//出現(xiàn)邊長(zhǎng)小于零的情況
return(-1);}elseif(……){//兩邊之和小于第三邊的情況
return(-2);……}else{//其它情況
return(-10);}}
intflag;flag=TriangleComp(3,4,5,&s);if(flag<0){……//異常處理}else{……//正常處理}在調(diào)用時(shí)可以進(jìn)行判別34精品文檔方法二:可以在調(diào)用參數(shù)中專門設(shè)計(jì)一個(gè)函數(shù)運(yùn)行狀態(tài)的參數(shù)。如上述計(jì)算三角形面積的函數(shù)也可設(shè)計(jì)為:floatTriangleComp(floata,floatb,floatc,int*e){floats;if(……){//正常時(shí)的計(jì)算,面積值賦給s返回*e=0;return(s);}elseif(……){//出現(xiàn)邊長(zhǎng)小于零的情況*e=-1;return(0);}elseif(……){//兩邊之和小于第三邊的情況*e=-2;return(0);}else{//其它情況*e=-10;return(0);}}
inte;floats;s=TriangleComp(3,4,5,&e);if(e<0){……//異常處理}else{……//正常處理}在調(diào)用時(shí)可以進(jìn)行判別35精品文檔4.23函數(shù)調(diào)用參數(shù)的匹配函數(shù)調(diào)用的參數(shù)類型、次序和個(gè)數(shù)必須匹配。類型的匹配一是注意int、float、double、char等類型的匹配,二是注意指針地址和地址內(nèi)容的匹配。如,intfunc(float*)的函數(shù),直接調(diào)用func(0),則func使用的是0地址單元中的值,而非0值,如要送0值則應(yīng)先申請(qǐng)“floatangle=0;”再調(diào)用func(&angle)。36精品文檔函數(shù)調(diào)用參數(shù)匹配問題的實(shí)例回路測(cè)試……37精品文檔4.28對(duì)GOTO語(yǔ)句的限制原則上限制使用跳轉(zhuǎn)(GOTO)語(yǔ)句,在使用GOTO語(yǔ)句能帶來某些好處的地方,一定要控制GOTO的方向:只允許向下GOTO,不允許向上GOTO;
只允許從循環(huán)中GOTO出去,不允許GOTO到循環(huán)中來。但在即將頒布的國(guó)軍標(biāo)中將嚴(yán)格禁止GOTO語(yǔ)句的使用。38精品文檔4.29.2中斷的嵌套中斷嵌套分自嵌套和外嵌套。自嵌套就是被自身中斷嵌套,外嵌套就是被其它中斷嵌套。中斷的使用除特殊需要外一定要避免嵌套,常用的方法就是進(jìn)入中斷服務(wù)程序后關(guān)掉不希望嵌套的所有中斷。自嵌套一定要避免;必要時(shí)的外嵌套要充分考慮中斷優(yōu)先級(jí)的影響;允許中斷和禁止中斷的語(yǔ)句位置要獨(dú)立進(jìn)行仔細(xì)分析。39精品文檔4.29.3中斷的返回除特殊需要外一定要避免從中斷服務(wù)子程序中使用跳轉(zhuǎn)語(yǔ)句直接出去,應(yīng)當(dāng)使用正常返回語(yǔ)句。因?yàn)橹苯犹鲆皇怯绊懥硕褩5目刂?,二是可能破壞跳轉(zhuǎn)處的應(yīng)有狀態(tài)。40精品文檔4.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)算。41精品文檔4.29.5不用中斷源的屏蔽不用中斷源一定要進(jìn)行屏蔽。不用中斷源的軟屏蔽應(yīng)通過編寫空處理的對(duì)應(yīng)中斷服務(wù)子程序來實(shí)現(xiàn)。42精品文檔不用中斷源無空中斷服務(wù)子程序的實(shí)例Int03中斷不用后,殘留允許打開語(yǔ)句,但刪除了Int03的中斷服務(wù)子程序……43精品文檔4.29.6注意對(duì)誤中斷和漏中斷的防范在中斷的使用中,除了要遵循一般的可靠性安全性設(shè)計(jì)準(zhǔn)則外,還應(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)真分析哪些處理過程是不能被中斷打斷的,必須以清單方式列表。對(duì)這些處理過程應(yīng)在相應(yīng)程序執(zhí)行前關(guān)閉中斷源,執(zhí)行完后再打開必要的中斷源。44精品文檔誤中斷的實(shí)例上傳程序被中斷打斷……45精品文檔漏中斷的實(shí)例多通道異步并發(fā)……46精品文檔防漏不防誤防漏又防誤47精品文檔4.30看門狗的設(shè)計(jì)看門狗技術(shù)是控制運(yùn)行時(shí)間的一種有效方法??撮T狗實(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)要防某段程序可能的死循環(huán),則在此段程序前啟動(dòng)狗,在此段程序后關(guān)閉狗,在狗叫中斷中進(jìn)行超時(shí)異常處理。(2)要防外來的信息長(zhǎng)時(shí)間不來,則在開始等外來信息時(shí)啟動(dòng)狗,在接收到外來信息時(shí)關(guān)閉狗,在狗叫中斷中進(jìn)行超時(shí)異常處理。(3)要防計(jì)算超時(shí),則在開始計(jì)算時(shí)啟動(dòng)狗,在計(jì)算完畢后關(guān)閉狗,在狗叫中斷中進(jìn)行超時(shí)異常處理。顯然,不可能要求一個(gè)狗可以看管好所有的超時(shí)情況。48精品文檔看門狗設(shè)計(jì)問題的實(shí)例一這里,狗叫可能是因?yàn)槌绦蚰程庍x入死循環(huán),可能是外來信息長(zhǎng)時(shí)間不來,也可能是處理信息超時(shí)。如果這里設(shè)計(jì)的定時(shí)器是為了檢測(cè)與外系統(tǒng)的通訊是否出現(xiàn)異常為目的(如規(guī)定18ms未來信息表明通訊異常),顯然如此設(shè)計(jì)就有所欠缺。49精品文檔看門狗設(shè)計(jì)問題的實(shí)例二總線占用超時(shí)控制……50精品文檔4.31避免潛在的死循環(huán)在等待外部信號(hào)的程序段中,不允許無限制地等待。正確的做法應(yīng)是,或采用循環(huán)等待次數(shù)控制,或使用定時(shí)器,使得規(guī)定時(shí)間內(nèi)(無論成功或失?。┍仨毐WC退出等待外部信號(hào)的程序段。
不允許的設(shè)計(jì)方法建議采用的設(shè)計(jì)方法51精品文檔4.35注意通過雙口RAM進(jìn)行握手通過雙口RAM進(jìn)行信息交換是設(shè)計(jì)師經(jīng)常采用的一種設(shè)計(jì)方案。的確雙口RAM提供了信息交換雙方的方便讀寫,但僅靠雙口RAM要做到讀寫的時(shí)序要求就要格外小心。如此的設(shè)計(jì)是要避免的:通過雙口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ù)。52精品文檔這種設(shè)計(jì)不一定可靠,可能會(huì)出現(xiàn)寫方要寫握手信號(hào)時(shí),讀方正在讀握手信號(hào),則寫方要寫的值寫不進(jìn)去??煽康脑O(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)合使用。53精品文檔可靠的設(shè)計(jì)方法握手標(biāo)志置不上的可能
54精品文檔4.36數(shù)據(jù)采集的多路冗余設(shè)計(jì)關(guān)鍵數(shù)據(jù)的采集可采用多路冗余設(shè)計(jì),即可以從多個(gè)通訊口對(duì)同一數(shù)據(jù)進(jìn)行采集,通過表決進(jìn)行有效數(shù)據(jù)的裁決。通常多采用奇數(shù)路的冗余設(shè)計(jì),如3路、5路等。(1)開關(guān)量的裁決可采用多數(shù)票的裁決,如3取2、5取3等。(2)模擬量的裁決可采用中間數(shù)平均值的裁決,如3路數(shù)的中間值、5路數(shù)去掉最大最小值后的平均值等。55精品文檔關(guān)鍵數(shù)據(jù)的采集可采用多次冗余設(shè)計(jì),即可以從同一通訊口多次對(duì)同一數(shù)據(jù)進(jìn)行采集,通過表決進(jìn)行有效數(shù)據(jù)的裁決。通常多采用奇數(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ù)去掉最大最小值后的平均值等。
56精品文檔極關(guān)鍵數(shù)據(jù)的采集亦可采用多路多次的綜合冗余設(shè)計(jì),即可以從多個(gè)通訊口對(duì)同一數(shù)據(jù)進(jìn)行多次采集,通過表決進(jìn)行有效數(shù)據(jù)的裁決。附注:(m+1)/(2m+1)冗余措施失效率的計(jì)算假設(shè)一個(gè)過程的失效率是,在2m+1個(gè)相同功能的過程中取m+1個(gè)相同的結(jié)果作為最終結(jié)果,這種措施稱為(m+1)/(2m+1)冗余措施,在不考慮共因失效的前提下,其失效率為57精品文檔4.37時(shí)間飄逸的防范58精品文檔4.38TMS320C25的初始化采用輔助寄存器對(duì)4號(hào)單元進(jìn)行初始化置位,在常溫下是可以的,但在低溫條件下(小于-5℃)將會(huì)出現(xiàn)問題。對(duì)4號(hào)單元進(jìn)行初始化置位必須采用直接尋址的方式。59精品文檔軟件可靠性安全性C語(yǔ)言編程準(zhǔn)則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年。LDRATestbed軟件測(cè)試工具可基于MISRA的C語(yǔ)言使用標(biāo)準(zhǔn)對(duì)C語(yǔ)言程序進(jìn)行檢查,以幫助用戶們?cè)诔绦虼a上加強(qiáng)行業(yè)標(biāo)準(zhǔn)的執(zhí)行。在我國(guó),2005年頒布實(shí)施了《GJB5369-2005,航天型號(hào)軟件C語(yǔ)言安全子集》。61精品文檔Q/WE905-2005《導(dǎo)彈武器系統(tǒng)C語(yǔ)言安全子集》本標(biāo)準(zhǔn)完全遵循《GJB5369-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ǔ)言安全子集新增加的附錄。62精品文檔準(zhǔn)則分類(1)聲明定義類(2)版面書寫類(3)分支控制類(4)指針使用類(5)跳轉(zhuǎn)控制類(6)運(yùn)算處理類(7)過程調(diào)用類(8)語(yǔ)句使用類
(9)調(diào)用返回類(10)程序注釋類(11)循環(huán)控制類(12)類型轉(zhuǎn)換類(13)初始化類(14)比較判斷類(15)名稱、符號(hào)與變量使用類63精品文檔4.1.1.15字符型變量必須明確定義是有符號(hào)還是無符號(hào)voidstatic_p(void){charc='c';/*...*/}違背64精品文檔4.1.1.20禁止在#include<……>中使用絕對(duì)路徑名
#include<C:\VC\include\stdio.h>voidDummy(void){/*...*/}頭文件路徑應(yīng)該在編譯器的選項(xiàng)中予以設(shè)置說明違背65精品文檔4.2.1.2循環(huán)體必須用大括號(hào)括起來
intstatic_p(intp_1){intj=10;intk=0;/*...*/for(k=0;k<10;k=k+1)j=j+1;returnj;}違背66精品文檔4.2.1.3then/else中的語(yǔ)句必須用大括號(hào)括起來(二院簡(jiǎn)化為:else中的語(yǔ)句必須用大括號(hào)括起來)
intstatic_p(intp_1,intp_2){inti=1;intj=2;/*...*/if(p_1>0){i=i-1;}elsei=i+1;
returni;}違背67精品文檔4.2.1.4邏輯表達(dá)式的連接必須使用括號(hào)
voidstatic_p(void){boolflag=true;unsignedinty=0u,x=0u,z=1u;/*...*/if(x<0||z+y!=0&&!flag){flag=false;}}違背68精品文檔4.2.1.5禁止在頭文件前有可執(zhí)行代碼
voidstatic_p(void){#include"myfile.h"/*...*/}違背69精品文檔4.2.1.6宏參數(shù)必須用括號(hào)括起來
#definestatic_p(x)x>=0?x:-xvoidtest_p(void){unsignedintresult;inta=6,b=5;/*...*/result=static_p(a-b);result=static_p(a)+1;/*...*/}違背70精品文檔4.2.1.7嵌入?yún)R編程序的過程必須是純匯編程序
voidstatic_p(void){unsignedintx;x=0u;_asm{moveax,x}}違背71精品文檔4.2.1.9禁止字符串中單獨(dú)使用“\”而非“\0”(二院進(jìn)一步明確為:4.2.1.9字符型數(shù)組賦值時(shí),必須使用“\0”終止字符串)
voidstatic_p(void){unsignedcharstr[5];str[0]='a';str[1]='b';str[2]='c';/*其它處理*/}違背72精品文檔4.3.1.1禁止條件判別成立時(shí)相應(yīng)分支無執(zhí)行語(yǔ)句
voidstatic_p(void){unsignedintvalue_x=1u;/*...*/if(value_x==0u);/*...*/if(value_x==0u){;}}違背73精品文檔4.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)出已考慮了各種情況的編程思想。74精品文檔4.3.1.7禁止switch的case語(yǔ)句不是由break終止
如果某個(gè)case語(yǔ)句最后的break被省略,在執(zhí)行完該case語(yǔ)句后,系統(tǒng)會(huì)繼續(xù)執(zhí)行下一個(gè)case語(yǔ)句。case語(yǔ)句不是由break終止,有可能是編程者的粗心大意,也有可能是編程者的特意使用。為了避免編程者的粗心大意,因此禁止switch的case語(yǔ)句不是由break終止.二院的調(diào)整:原則上禁止switch的case語(yǔ)句不是由break終止,當(dāng)確實(shí)是編程者的特意使用時(shí),必須加以“/*此情況屬于部分的case共用*/”的明確注釋。75精品文檔4.4.1.2指針的指針不能超過兩級(jí)(二院進(jìn)一步明確為:4.4.1.2禁止指針的指針超過兩級(jí))對(duì)指針進(jìn)行控制是很困難的,當(dāng)指針的指針超過兩級(jí)時(shí),使用起來更是具有風(fēng)險(xiǎn),因此禁止指針的指針超過兩級(jí)。二院的細(xì)化:當(dāng)在某種特殊情況下確實(shí)需要超過兩級(jí)的指針時(shí),必須加以“/*詳見《詳細(xì)設(shè)計(jì)報(bào)告》的指針特殊設(shè)計(jì)*/”的明確注釋,在《詳細(xì)設(shè)計(jì)報(bào)告》的指針特殊設(shè)計(jì)中詳細(xì)說明理由,并在單元測(cè)試報(bào)告中提供針對(duì)性的測(cè)試結(jié)果。76精品文檔4.6.1.15禁止在邏輯表達(dá)式中使用賦值操作符(二院進(jìn)一步明確為:4.2.1.15禁止在條件判別語(yǔ)句中使用賦值操作符)voidstatic_p(void){unsignedintz=0u,x=0u;boolflag=true;/*...*/if(flag=false){z=x-1u;}/*...*/}違背77精品文檔4.6.1.2數(shù)組的使用必須保證不會(huì)出現(xiàn)越界voidstatic_p(void){unsignedinta[4];/*...*/a[4]=1;/*...*/}違背78精品文檔4.6.1.7位的定義必須是有符號(hào)整數(shù)或無符號(hào)整數(shù)
structstatic_p{unsignedcharx:1;};voiddummy(void){/*...*/}違背79精品文檔4.6.1.8禁止給變量賦的值與變量的類型不一致
voidstatic_p(void){unsignedintd;d=2.0;/*應(yīng)該使用2u*//*...*/}違背80精品文檔4.6.2.2謹(jǐn)防長(zhǎng)度操作符sizeof的副作用
長(zhǎng)度操作符sizeof不計(jì)算操作數(shù)的值,所以更明確的要求是:禁止在sizeof中使用賦值。voidstatic_p(void){unsignedintx=1u;unsignedinty=2u;inta=3;/*...*/a=sizeof(x=y);}違背81精品文檔4.6.2.4避免由于設(shè)計(jì)的原因?qū)е履承┐a不能執(zhí)行
#definedefval0voidstatic_p(void){if(0){/*...*/}if(defval){/*...*/}}違背82精品文檔對(duì)程序文件的限制4.2.2.1建議一個(gè)文件中的程序總行不超過2000行4.2.2.2建議一個(gè)過程或函數(shù)中的程序總行不超過200行4.7.1.3static類型的過程在所在文件中必須被調(diào)用83精品文檔4.8.1.1禁止使用容易混淆的語(yǔ)句(二院進(jìn)一步明確為:4.8.1.1禁止單獨(dú)使用小寫字母“l(fā)”或大寫字母“O”作為變量名
)voidstatic_p(void){intl=1,O=0;/*...*/l=O;O=l;}違背84精品文檔4.8.1.4禁止使用不起作用的語(yǔ)句(二院補(bǔ)充)
voidstatic_p(void){unsignedintx=0u;x;}違背85精品文檔函數(shù)返回的限制4.9.1.1函數(shù)必須有返回語(yǔ)句4.9.1.2禁止void類型的過程中的return語(yǔ)句帶有返回值4.9.1.3有返回值的函數(shù)中return必須帶有返回值4.9.1.4函數(shù)返回類型必須一致86精品文檔4.10.1.1禁止使用嵌套的注釋
voidstatic_p(void){/*ThisistheOuterComment/*ThisistheInnerComment*/}違背87精品文檔4.11.1.2循環(huán)變量必須是局部聲明的
unsignedintglobal_f=0u;intloop_standards(intp_1){intj=10;/*...*/for(global_f=0;global_f<10;global_f++){j--;}returnj;}違背88精品文檔4.13.1.4變量使用前必須被賦過值
在使用變量前應(yīng)確保變量曾被賦過值。例如:
unsignedintx;unsignedinty;y=x;
其中對(duì)變量x的使用,在使用前未曾被賦過值。如果變量是在某些條件前提下進(jìn)行的賦值,在條件結(jié)束后使用該變量,則同樣是違背該條準(zhǔn)則。89精品文檔4.14.1.1禁止對(duì)實(shí)數(shù)類型的量做是否相等的比較
voidstatic_p(void){floatf1,f2;f1=1.01f;f2=2.01f;/*...*/if(f1==f2){/*...*/}if(f1==0.0f){f1=f1+0.01f;}}違背90精品文檔4.15.1.2禁止局部變量與全局變量同名
C語(yǔ)言編譯器是允許局部變量與全局變量同名,但局部變量的作用域只限制在聲明的模塊內(nèi)部。為避免本意是需要對(duì)全局變量更新,但由于存在同名的局部變量,導(dǎo)致全局變量未得到實(shí)際有效的更新,因此禁止局部變量與全局變量同名。unsignedintFire_Command;voidstatic_p(void){unsignedintFire_Command=2u;……}違背91精品文檔“4.14.1.1禁止對(duì)實(shí)數(shù)類型的量做是否相等的比較”實(shí)驗(yàn)說明如下代碼:
intP=1000; floatd=0.435f; intH=435;if(H==(P*d)){/*違背了準(zhǔn)則*/
i=1; }else{i=2; }到底走哪個(gè)分支?走此分支?exam4H=435P*d=1000*0.435=435是否相等?92精品文檔“4.2.1.6宏參數(shù)必須用括號(hào)括起來”實(shí)驗(yàn)說明如下代碼1:#definep(x)x>=0?x:-x…… intresult; inta=6; result=p(a)+1;result到底等于幾?
如下代碼2:#definep(x)(x>=0?x:-x)…… intresult; inta=6; result=p(a)+1;result到底等于幾?result=6還是7?exam593精品文檔“4.6.2.2謹(jǐn)防長(zhǎng)度操作符sizeof的副作用”實(shí)驗(yàn)說明如下代碼:
intx=1;inty=2;inta=3;a=sizeof(x=y);……x到底等于幾?現(xiàn)在x=1還是2?exam694精品文檔編程準(zhǔn)則違背的典型實(shí)例95精品文檔“4.8.1.4禁止使用不起作用的語(yǔ)句”(二院補(bǔ)充)的典型實(shí)例該準(zhǔn)則在某軟件中以“x-0;”的形式違背了,而經(jīng)過確認(rèn)是由于編程人員誤將“x=0;”的“=”號(hào)寫成了“-”號(hào)所致,其結(jié)果是導(dǎo)致變量x的賦值失敗。96精品文檔“4.6.1.15禁止在條件判別語(yǔ)句中使用賦值操作符”的典型實(shí)例一該準(zhǔn)則在某軟件中以“if(the_i=5)”的形式違背了,而經(jīng)過確認(rèn)是由于編程人員誤將“if(the_i==5)”的“==”寫成了“=”所致,其結(jié)果是該判別條件無論變量the_i為何值都將執(zhí)行該分支的處理。97精品文檔“4.6.1.15禁止在條件判別語(yǔ)句中使用賦值操作符”的典型實(shí)例二在某軟件中有如下語(yǔ)句:
if((uiSendLen==0x55AA)&&(uiRecvLen==0x66BB)&&(uiBaud=0x77CC))其中將條件(uiBaud==0x77CC)判別誤寫為(uiBaud=0x77CC)的賦值,后果是即使uiBaud不為0x77CC,其他條件滿足仍能走入真分支。98精品文檔“4.14.1.4邏輯判別表達(dá)式如果存在運(yùn)算項(xiàng),必須要使用括號(hào)”(二院補(bǔ)充)的典型實(shí)例該準(zhǔn)則在某軟件中以“if(tbc&0x80==0x80)”的形式違背了,導(dǎo)致當(dāng)tbc=0x80時(shí)條件判別走不成立的分支。正確的寫法應(yīng)該是“if((tbc&0x80)==0x80)”。exam799精品文檔“4.12.1.2禁止對(duì)指針變量賦值類型不匹配”(二院補(bǔ)充)的典型實(shí)例在某軟件中,變量定義如下:unsignedlong*p;unsignedcharq[50];程序中有如下的使用:p=&q[1];100精品文檔“4.2.1.4邏輯表達(dá)式的連接必須使用括號(hào)”的典型實(shí)例在某軟件中if((S1[0].Coun<7&&S1[0].Coun>=1)||(S1[1].Coun<7&&S1[1].Coun>=1)&&(B3Leav==7)){……}從程序結(jié)構(gòu)上猜想,應(yīng)該是:在(B3Leav==7)條件下,或(S1[0].Coun<7&&S1[0].Coun>=1)或(S1[0].Coun<7&&S1[0].Coun>=1)如果是此,就應(yīng)該if(((S1[0].Coun<7&&S1[0].Coun>=1)||(S1[1].Coun<7&&S1[1].Coun>=1))&&(B3Leav==7)){……}101精品文檔“4.6.1.9賦值類型必須匹配”的典型實(shí)例在某軟件中ADData[]是定義為signedchar類型,程序中:
ADData[i]=(signedchar)*AD402;/*讀12位帶符號(hào)的AD采樣值*/
ADData[i]=ADData[i]&0xfff;在標(biāo)準(zhǔn)C中,signedchar類型變量是8位的,有效范圍[-128,127],對(duì)8位變量賦12位數(shù)值在標(biāo)準(zhǔn)C中是取后8位。ADData[]應(yīng)定義為int類型。102精品文檔“4.6.1.2數(shù)組的使用必須保證不會(huì)出現(xiàn)越界”的典型實(shí)例在某軟件中是如下定義的:unsignedcharYkd[6];但程序中是如下使用的:
for(n=0;n<7;n++){Ykd[n]=0x0;按定義,Ykd只有6個(gè)元素,即Ykd[0]、Ykd[1]、……、Ykd[5],而是使用中卻用到了Ykd[6]。103精品文檔“4.14.1.5禁止對(duì)無符號(hào)數(shù)進(jìn)行大于等于零或小于零的比較”(二院補(bǔ)充)的典型實(shí)例在某軟件中有如下語(yǔ)句:unsignedlongs_addr;s_addr=(unsignedlong)hostGetByName(compName);while(s_addr==ERROR)ERROR在vxWorks.h被定義為-1,用unsignedlong類型數(shù)與ERROE進(jìn)行比較總是不成立的。104精品文檔“4.13.1.4變量使用前必須被賦過值”的典型實(shí)例在某軟件中,voidPara_check(){intk;while(k<4){……k++;}顯然對(duì)變量k未賦初值就進(jìn)行while(k<4)的使用。k未賦初值并不意味著就等于0,有可能是一隨機(jī)數(shù)。在某臺(tái)式機(jī)的VC6.0中,k的初值為0xcccccccc,此時(shí)while(k<4)上來就不滿足。105精品文檔“4.13.1.4變量使用前必須被賦過值”(二院的細(xì)化:4.13.1.4(1)變量使用前必須被賦過值(禁止只是條件賦值))的典型實(shí)例在某軟件中有如下語(yǔ)句:
inttest_start(void){intflag,sum;sum=…;if(sum==400){......flag=NO_RESPOND;}returnfl
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版電子商務(wù)平臺(tái)運(yùn)營(yíng)管理合同集錦4篇
- 2025年度行政合同行政主體特權(quán)在政府與市場(chǎng)關(guān)系中的平衡合同4篇
- 二零二五版生態(tài)旅游區(qū)開發(fā)委托管理服務(wù)協(xié)議3篇
- 2025年特色餐飲店門面房租賃協(xié)議2篇
- 11 看莖認(rèn)植物 (說課稿)2023-2024學(xué)年一年級(jí)下冊(cè)科學(xué)青島版
- 2025年樹木種植與生態(tài)旅游開發(fā)合作合同范本3篇
- Unit 1 Animal friends.Hit a big Wrap up(說課稿)-2024-2025學(xué)年外研版(三起)(2024)英語(yǔ)三年級(jí)下冊(cè)001
- 二零二五版漫畫原創(chuàng)作品征集與評(píng)選合同4篇
- 2025年環(huán)保物流運(yùn)輸委托協(xié)議及廢棄物回收處理合同3篇
- 二零二五年度畜禽代牧合作框架協(xié)議4篇
- 餐飲行業(yè)智慧餐廳管理系統(tǒng)方案
- 2025年度生物醫(yī)藥技術(shù)研發(fā)與許可協(xié)議3篇
- 電廠檢修安全培訓(xùn)課件
- 殯葬改革課件
- 2024企業(yè)答謝晚宴會(huì)務(wù)合同3篇
- 雙方個(gè)人協(xié)議書模板
- 車站安全管理研究報(bào)告
- 瑪米亞RB67中文說明書
- 中華人民共和國(guó)文物保護(hù)法
- 五年級(jí)數(shù)學(xué)(小數(shù)四則混合運(yùn)算)計(jì)算題專項(xiàng)練習(xí)及答案
- NB_T 10533-2021 采煤沉陷區(qū)治理技術(shù)規(guī)范_(高清最新)
評(píng)論
0/150
提交評(píng)論