印玲 宋力立
摘要:論文闡述了類型轉換所要遵守的規(guī)則,介紹此類問題的表現(xiàn)形式、種類,規(guī)則檢查時的分析要點,并列舉了一則航天型號軟件中所發(fā)生的案例來說明類型轉換可能產(chǎn)生數(shù)值誤差,以及引發(fā)的代碼質量問題。論文可用于指導航天型號軟件代碼規(guī)則檢查。
關鍵詞:編碼規(guī)范;規(guī)則檢查;類型轉換
1.背景
軟件編碼規(guī)范是程序在編寫過程中必須遵守的規(guī)則標準,實施什么樣的編碼規(guī)程取決于很多因素,航天型號項目所采用的編碼規(guī)程最重要的就是軟件的可靠性和安全性,編碼規(guī)程使得開發(fā)人員在編程時和測試人員在測試時有章可循,減少因編程語言的因素而導致的錯誤,降低存在隱患的語言特征可能導致的風險,提高軟件質量。
2.代碼規(guī)則檢查方法
軟件靜態(tài)測試包括代碼審查、靜態(tài)結構分析、代碼質量度量和代碼規(guī)則檢查等,是指不運行被測程序本身,僅通過分析或檢查源程序的語法、結構、過程、控制流、數(shù)據(jù)流、接口和表達式等來測試程序代碼的正確性。其中代碼規(guī)則檢查根據(jù)各項標準,從代碼的安全性、可移植性、可維護性、可測試性等方面,分析查找出程序的欠缺和不足以及錯誤之處,發(fā)現(xiàn)違背程序編寫標準的問題,找出程序中不安全、不明確和有歧義的模塊,例如語言使用規(guī)則變量命名檢查、類型檢查、函數(shù)的聲明和定義中使用的標識符不匹配,在函數(shù)體內(nèi)使用外部變量聲明,不允許的遞歸、未使用過變量的變量、數(shù)組的初始化不完整等。
代碼規(guī)則一般分為強制項規(guī)則和建議項規(guī)則,可以由人工進行,充分發(fā)揮人的邏輯思維優(yōu)勢,也可以借助軟件工具自動進行。根據(jù)測試方面的經(jīng)驗可以得出,在測試過程中,靜態(tài)測試比動態(tài)測試更有效率,以最小的代價更多更快速地找到問題,通常能夠發(fā)現(xiàn)不少于70%的編碼設計缺陷和程序邏輯問題。代碼檢查非常的耗費時間,很大程度上依賴于測試人員的知識儲備、經(jīng)驗積累以及細心程度,而代碼規(guī)則檢查則依據(jù)相關標準和規(guī)范,一般由測試工具執(zhí)行生成檢查報告,常用工具包括QAC/QA C+、Testbed、logiscope等,這些工具可以很好地和軟件開發(fā)工具以及測試工具集成在一起,程序員在編程過程可以同時完成編程規(guī)則的檢查,測試人員在測試過程中能更全面檢查出違反編程規(guī)則的代碼。航天型號軟件通常采用的標準有GJB2725A、航天型號軟件c語言安全子集、探月工程探測器系統(tǒng)C語言編程規(guī)范等,可以極大的提高測試效率,減少錯誤的出現(xiàn)概率,確保軟件研制質量和可靠性,提高軟件研制工程化水平。
3.類型轉換規(guī)則
代碼規(guī)則檢查中一項重要的規(guī)則就是關于類型轉換方面的要求,類型轉換包括隱式類型轉換、強制轉換、用戶定義的轉換和使用幫助程序類的轉換。隱式轉換是一種安全類型的轉換,不會導致數(shù)據(jù)丟失,如果要存儲的值無需截斷或四舍五人即可適應變量,則可進行隱式轉換,不需要任何特殊的語法。強制轉換是顯示地通知編譯器需要類型轉換,要使用強制轉換運算符,必須使用強制轉換的情況是在轉換中可能丟失信息或者其他原因轉換可能不成功。另外,編程人員可以自定義一些特殊的方法來執(zhí)行用戶定義的轉換,從而使不具有基類一派生類關系的定義類型之間可以顯式和隱式轉換。
程序員在軟件編寫時經(jīng)常會使用類型轉換,類型轉換一方面提高了編程的靈活性,另一方面,也帶來了一定的安全隱患,使用不恰當會導致軟件異常。因此類型轉換一般遵守以下幾條原則:禁止將類型長度較小的指針強制轉換為類型長度較大的指針、禁止對指針變量使用強制類型轉換賦值、有符號和無符號之間不得隱式轉換、寬類型不得向窄類型隱式轉換、整型和浮點類型之間不得隱式轉換、函數(shù)參數(shù)不得隱式轉換、函數(shù)的返回表達式不得隱式轉換、復雜表達式不得隱式轉換等。