
摘? 要:隨著軟件系統規模的增加,軟件代碼質量越來越難以控制,需要借助有效的軟件工程方法和工具來應對新的挑戰。本文指出軟件代碼質量的主要問題是代碼風格統一問題、C語言編碼安全問題、GCC編譯告警監控問題,然后根據CMMI的軟件質量過程和ISO的軟件質量模型對各類規則進行梳理,并編寫相應的腳本程序靜態檢測代碼質量,最后對檢測數據進行統計分析并以Web形式輸出報表。
關鍵詞:代碼質量;質量模型;代碼風格;編碼安全
中圖分類號:TP311.1? ? ? ?文獻標識碼:A 文章編號:2096-4706(2019)23-0083-03
Software Code Quality Inspection Practice
LUO Laicai
(Ruijie Networks Co.,Ltd.,Fuzhou? 350002,China)
Abstract:With the increase of software system scale,the quality of software code are more and more difficult to control,effective software engineering methods and tools are needed to meet new challenges. This paper points out that the main problems of code quality are code style unification,C language coding security,GCC compilation alarm monitoring. Then,according to the software quality process of CMMI and the software quality model of ISO,all kinds of rules are sorted out and corresponding script programs are written to statically check the code quality. Finally,the test data is analyzed and the report is output in the form of Web.
Keywords:software quality;quality model;code style;coding security
1? 代碼質量存在的主要問題
在軟件開發過程中,軟件源代碼質量是相對難以評測的要素。盡管行業的標準組織出臺了很多相關規范,有些甚至提供了用來度量軟件質量的工具,但實施成本過高,比較難落地。典型的瀑布開發模型,從需求分析到架構設計,再到詳細設計,然后構造編碼,最后測試集成維護,軟件質量問題貫穿整個開發過程。代碼質量是軟件質量的一種內部表現,主要包括功能的適合性、可維護性等。具體到軟件開發過程,代碼質量問題主要分為代碼風格統一問題、編程語言的安全問題、編譯工具告警開關以及告警消除的監控問題。
開發團隊中不同的人有不同的代碼風格偏好,雖然沒有絕對的對錯,但是有一條原則需要遵守:少數服從多數。執行企業發布的編碼標準規范保持代碼風格統一是改善代碼可維護性的一個重要方面。C語言以其靈活的類型轉換和貼近底層機器實現、目標代碼效率高的特性成為嵌入式軟件領域最流行的編程語言。隨著系統復雜度的不斷提高,編碼中的一些小瑕疵往往會引發嚴重的安全問題。SEI基于長期的C語言標準相關技術報告的研究總結了一套被普遍接受的CERT安全編碼標準規則。為了使CERT安全編碼規則落地,在軟件開發的過程中,在編譯工程環境里集成安全編碼的靜態分析工具是有必要的。GCC的告警種類很多,針對軟件開發項目采用不同的編譯器或者不同的編譯器版本建立統一的告警等級狀態并生成直觀的報告信息是有必要的。
2? 行業相關技術規范
2.1? CMMI的軟件質量過程
能力成熟度模型集成(CMMI)中包含了代碼質量改善相關的過程流程。
CMMI的過程與產品質量保證(PPQA)過程域指出,過程與產品質量保證嵌入在項目整個生命期,向項目員工與各層次的管理人員提供對過程與相關工作產品適當的可視化及反饋,由此支持高質量產品交付。這里強調的內容是,已經計劃的過程得到實施,通過實施過程的有序開展確保交付產品的質量。另外,產品規定的需求是否得到滿足由單獨的驗證過程域(VER)進行保障。PPQA的啟示是,需要在軟件開發的過程中分階段實時反饋質量狀況。
CMMI的量化項目管理(QPM)屬于成熟度4級過程域,其中包括選擇將用于量化管理的度量項,使用統計與其
他量化技術來監督所選子過程的性能。統計與其他量化管理技術用于預測過程的性能可以用于多個層面,從對單個子過程的關注到對跨越生命周期階段、項目以及支持職能的分析。QPM的啟示是,需要在軟件開發的過程中采集量化數據評估預測質量狀況。
2.2? ISO的軟件質量模型
ISO關于產品質量的定義是:軟件產品滿足規定的和隱含的需求的能力有關的特征或者特征集合。由此可以看出,特征是軟件質量狀況的反映,軟件屬性可以做評價準則,定量化的度量軟件屬性可以知道軟件質量的優劣。ISO/IEC 250nn系列技術標準描述了軟件系統質量需求和評估方法,包含的系統軟件質量模型的8個一級質量特征類型:功能適合性、運行效率、兼容性、易用性、可靠性、安全性、可維護性、可移植性。
為了能夠在產品(軟件系統)發布前對產品質量做出比較準確的判斷,需要建立質量模型并根據質量模型進行度量評估。軟件質量包括內部質量(過程質量)和外部質量(使用質量)兩個方面,軟件內部質量中重要的組成部分是源代碼質量,包括代碼風格統一、編碼安全規則和編譯告警消除等。
3? 代碼質量檢測實踐
3.1? 嵌入式開發的編碼過程
編碼過程是軟件開發過程的一個重要方面,在嵌入式軟件開發領域,絕大部分代碼還是需要程序員手工編碼、編譯、單元測試、提交代碼庫、集成編譯、集成測試。通常的編碼過程包括:
(1)編碼人員計算機本地環境:根據設計編碼、在工程環境里編譯、單元測試調試;
(2)企業的代碼集成服務器環境:代碼版本管理、集成編譯、集成測試調試。
基于軟件領域中越早修復問題成本越低的原理,軟件代碼質量檢測的實施應該盡量在計算機本地環境開發階段進行,但是某些全局性問題必須在服務器環境開發階段才可以實施,比如整個系統范圍的代碼重復率評測。
3.2? 代碼質量檢測
靜態代碼檢查主要的作用是提高軟件的功能適合性和可維護性。其中功能適合性的提高通過實施C語言的CERT安全編碼標準規則檢查來達成;其中可維護性的提高通過實施企業編碼標準的檢查來達成。另外,GCC編譯器編譯告警開關的檢查(消除告警)和代碼重復率評測,也對功能適合性和可維護性有很大幫助。代碼質量檢測的一種有效的方式是把代碼質量規則檢查過程內嵌到編碼過程中,讓軟件編碼人員在日常的開發活動中就消除質量隱患。代碼質量檢測的系統模型如圖1所示。
圖1系統模型中描繪了靜態代碼檢查的主要過程,在編碼人員的本地環境編譯工程環境里嵌入腳本程序檢查編碼風格、編碼安全、編譯告警開關;在企業的編譯服務器進行集成編譯時重復檢查編碼風格、編碼安全、編譯告警開關,另外還要評測代碼重復率。
其中編碼風格企業標準檢查,主要的目的是落實企業的編碼標準,統一編碼風格,提高代碼的可維護性。一份編碼標準通常包含幾十條至幾百條具體的規則,比如函數類的規則:
FUNC-1:一個函數的代碼規模應控制在120行(不含空白與注釋在內)以內,不符合本條需特別給出說明;
其中CERT規則檢查,主要是以CERT規則為基礎減少因為C語言的指針等功能引入的編碼問題。CERT的C語言編碼安全規范列舉了幾百條具體規則,比如預處理類的規則:
PRE30-C:不要通過連接創建通用字符名稱。雖然C語言支持通用字符名稱,但是如果匹配通用字符名稱的序列由符號連接(比如##)生成將產生未定義行為。
GCC編譯告警開關檢查,主要監控不同的GCC版本環境下的告警開關和告警消除情況。以GCC 8.1為例,可配置開關的有220多條規則,可以歸到Wall和Wextra等類型。高質量的軟件代碼需要消除所有的編譯告警。代碼重復率評測是在整個項目分支范圍內根據局部代碼邏輯相似度排查代碼片段的重復情況。通過代碼重復率的評測和控制,可以減少需要維護的代碼量,使軟件模塊具有高內聚低耦合特性。
代碼分支的質量數據經過統計分析后以Web方式呈現,可以分類展示結果數據,包括編碼標準、GCC告警、CERT安全。每一類的結果數據又分為綜合統計數據和各個組件包明細數據。有了這些統計數據,軟件項目管理人員就可以很方便地看出當前的代碼質量狀況,進一步采取措施改善代碼質量。
4? 結? 論
本文通過軟件代碼質量檢測的分析與實踐,為代碼軟件質量的提高找到一種有效并且容易實施的方法過程。軟件系統規模和復雜性的增加不可避免,同時,軟件開發效率的提高和開發方法過程的增強也是大勢所趨。本文論述的根據CMMI的軟件質量過程和ISO的軟件質量模型進行代碼質量檢測實踐,可以通過較少的資源投入獲取較好的軟件代碼質量,是一種科學有效的軟件工程方法。
參考文獻:
[1] 孫洋,袁玉宇.ISO/IEC 25010質量模型標準現狀 [J].信息技術與標準化,2008(11):33-36.
[2] SEACORD R C .CERT? C Coding Standard,Second Edition,The:98 Rules for Developing Safe,Reliable,and Secure Systems,2nd Edition [M].Addison-Wesley Professional,2014.
[3] SEACORD R C .C和C++安全編碼(英文版)(第2版) [M].北京:機械工業出版社,2013.
作者簡介:羅來財(1981.11-),男,漢族,江西玉山人,本科,中級職稱,主要研究方向:軟件開發和軟件工程相關技術。