【摘要】 本文在分析電信運營商在應用代碼質(zhì)量管理方面存在的問題的基礎上,結合靜態(tài)分析技術、管理體系、代碼質(zhì)量等核心技術及理念,提出了基于靜態(tài)分析的應用代碼質(zhì)量管理體系,并重點描述了該理論在省公司進行試點驗證的成果。最后對該理論的應用前景進行了簡要展望。
【關鍵詞】 代碼質(zhì)量 電信業(yè)務支撐系統(tǒng) 靜態(tài)分析 管理體系 評估模型 質(zhì)量規(guī)范
隨著軟件項目規(guī)模越來越大,代碼質(zhì)量審計已變得非常重要,原始的作坊式的人工代碼審計逐漸成為項目的瓶頸,如何有效地進行代碼質(zhì)量管理成為運營商面臨的重要課題。
一、電信運營商對應用代碼質(zhì)量管理體系的需求
應用代碼質(zhì)量管理體系建設的需求驅(qū)動源于企業(yè)運營標準化、精細化管控的內(nèi)在驅(qū)動和市場競爭的外在驅(qū)動。企業(yè)內(nèi)部運營的需求驅(qū)動主要源于風險控制要求、系統(tǒng)標準化建設及企業(yè)精細化運營管理所要求的系統(tǒng)支撐要求。市場競爭的外在驅(qū)動源于市場競爭形勢的變化以及客戶對業(yè)務系統(tǒng)高質(zhì)量服務能力的要求。
內(nèi)在方面,當前階段企業(yè)在交付軟件系統(tǒng)或驗收軟件系統(tǒng)時,除了驗證軟件所實現(xiàn)的功能,另一個重要的方面就是考察軟件代碼本身的質(zhì)量。
外在方面,隨著電信行業(yè)運營商競爭的日益激烈,客戶對服務的要求也不斷提高,能否提供高品質(zhì)的客戶服務是我們重要的競爭籌碼。確保系統(tǒng)保持穩(wěn)定、健壯、高效支撐是業(yè)務系統(tǒng)支撐人員的首要任務,這就對業(yè)務系統(tǒng)的代碼質(zhì)量提出了更高的要求。
針對電信運營商業(yè)務支撐系統(tǒng)的現(xiàn)狀,本文提出的一種基于靜態(tài)分析的應用代碼質(zhì)量管理體系,從系統(tǒng)源代碼的角度出發(fā),通過制定應用代碼質(zhì)量規(guī)范、建立評估模型、同時提出一套應用代碼質(zhì)量管理流程利用代碼規(guī)范和評估模型對應用代碼質(zhì)量元素進行度量,評價和管理軟件交付時的代碼質(zhì)量,從源頭上把控業(yè)務系統(tǒng)質(zhì)量。
二、應用代碼質(zhì)量管理體系的研究內(nèi)容
2.1 靜態(tài)分析技術
靜態(tài)分析技術是指在不執(zhí)行源代碼的情況下,對代碼中組件關系和方法調(diào)用、代碼復雜度以及代碼編寫方法進行評估的過程。程序的流程提供了對代碼結構的理解,靜態(tài)分析的目的是確保程序代碼依從公司和業(yè)界的標準。
靜態(tài)分析的類型可以分為以下四類:代碼審查、結構分析、軟件度量、數(shù)據(jù)流分析。代碼審查的內(nèi)容包括:編碼風格的常規(guī)檢查、基于每一個類發(fā)現(xiàn)萌芽狀態(tài)的bugs。結構分析主要能夠發(fā)現(xiàn)交互類的依賴關系、發(fā)現(xiàn)循環(huán)依賴、hubs等。軟件度量是指度量軟件復雜度、大量標準度量指標,如代碼行統(tǒng)計, McCabbe, Halstead度量集等。數(shù)據(jù)流分析主要檢查代碼符號執(zhí)行、很好的發(fā)現(xiàn)資源和內(nèi)存的泄漏。
靜態(tài)分析的過程通常包含兩個階段:運行工具階段和人工審查代碼階段。如圖1所示,按照事先定制好的規(guī)則,對系統(tǒng)源代碼進行掃描分析,得到原始掃描結果,這一過程通常是借助靜態(tài)代碼掃描工具完成;接下來的階段是人工參與審查代碼,分析、確認、篩選結果,并通過匯總整理得到最終的結果。
軟件開發(fā)過程中的一個重要原則就是缺陷發(fā)現(xiàn)的時間越早越好,如果能控制軟件缺陷,就可以得到高質(zhì)量的軟件。靜態(tài)分析工具根據(jù)軟件的結構、內(nèi)容或文檔來評價軟件系統(tǒng),而不需要執(zhí)行程序。因此,可以較早地發(fā)現(xiàn)程序代碼中的缺陷,使得后面的軟件開發(fā)階段可以著重分析復雜功能以及算法上的錯誤。
2.2 管理體系概述
管理是指通過計劃、組織、領導、控制及創(chuàng)新等手段,結合人力、物力、財力、信息等資源,以期高效的達到組織目標的過程。管理是由計劃、組織、指揮、協(xié)調(diào)及控制等職能為要素組成的活動過程。廣義的管理是指應用科學的手段安排組織社會活動,使其有序進行。狹義的管理是指為保證一個單位全部業(yè)務活動而實施的一系列計劃、組織、協(xié)調(diào)、控制和決策的活動。本文指的是狹義的管理。
2.3 代碼質(zhì)量
軟件質(zhì)量是指軟件系統(tǒng)或系統(tǒng)中的軟件部分的質(zhì)量,即滿足用戶需求。它包含兩個方面,功能(Functional)質(zhì)量和結構(Structural)質(zhì)量。軟件功能質(zhì)量反映了軟件符合功能要求規(guī)格的能力;軟件結構質(zhì)量反映了軟件滿足支撐功能性的非功能夠性需求的能力,如魯棒性、可維護性。結構質(zhì)量是通過對軟件的內(nèi)部結構、源代碼進行評估,即檢查代碼有沒有遵守現(xiàn)有成熟的規(guī)范;而軟件功能質(zhì)量更多的是依賴軟件功能測試計量。
代碼質(zhì)量是程序代碼質(zhì)量特性的總體,它是一個抽象的概念,無法直接度量。代碼質(zhì)量審計是對應用程序源代碼進行系統(tǒng)性檢查的工作。它的目的是為了找到應用程序在開發(fā)階段存在的一些缺點或者程序邏輯錯誤,分析并找到可能引發(fā)的風險漏洞,并提供代碼修訂措施和建議,避免程序漏洞被非法利用給企業(yè)帶來不必要的風險。代碼質(zhì)量維度(dimensions of quality):代碼質(zhì)量的子特性,是衡量代碼質(zhì)量的不同方面,是對代碼質(zhì)量的結構化細分,如圖2所示。
三、應用代碼質(zhì)量管理體系
基于上述研究,本文提出基于靜態(tài)分析的應用代碼質(zhì)量管理體系的方法論。該體系包含三個方面的內(nèi)容:應用代碼質(zhì)量規(guī)范、應用代碼質(zhì)量評估模型和應用代碼質(zhì)量管理流程。
3.1 應用代碼質(zhì)量規(guī)范
應用代碼質(zhì)量,顧名思義,也就是從代碼的角度評價軟件系統(tǒng)的質(zhì)量。它將代碼質(zhì)量屬性劃分為六個特性(維度),包括正確性、規(guī)范性、易讀性、安全性、可維護性和可移植性(圖3),并進一步細分為若干子特性,這些子特性可用相關的技術手段來測量。
應用代碼質(zhì)量指標體系總體上可以分為以上6個維度:正確性、規(guī)范性、易讀性、安全性、可維護性、可移植性。(1)正確性:是指軟件程序能夠符合編碼正確無誤的能力。包括:初始化、異常處理等相關的編碼規(guī)范的約定。(2)規(guī)范性:是指軟件程序符合國際、國內(nèi)、行業(yè)標準的能力。包括頁面元素的可訪問性、最優(yōu)化(符合特定語言的最佳實踐)等。(3)易讀性:是指軟件程序能夠被閱讀、理解、學習的能力。易讀性標志了代碼能夠被其他人員理解、維護的程度,包含代碼里面的注釋、函數(shù)、變量、類的命名、以及代碼風格的約定。(4)安全性:是指軟件程序規(guī)避安全漏洞,能夠避免安全風險的能力。從代碼層面規(guī)避安全漏洞的風險,如sql注入、跨站腳本攻擊、內(nèi)存溢出等等。(4)可維護性:是指軟件程序可被修改的能力。主要包含代碼復雜度的度量等。(5)可移植性:是指軟件程序從一種環(huán)境遷移到另一種環(huán)境的能力。包括變量類型轉(zhuǎn)換、數(shù)組長度、標識符的相關約定。
3.2 應用代碼質(zhì)量評估模型
在介紹應用代碼質(zhì)量評估模型之前,我們先來介紹一下度量元的概念。
3.2.1 代碼質(zhì)量度量元
代碼質(zhì)量度量維度是將代碼質(zhì)量劃分為不同的幾個方面,但仍然不是可以直接度量的指標。在每個維度下面我們又細分出可以直接度量的質(zhì)量元素,我們稱之為度量元。度量元是最小的代碼度量單位。比如,程序的圈復雜度、注釋的頻率等,這些都是可以采用具體的度量手段去衡量的指標。每一個度量維度的質(zhì)量是通過多個該維度下的度量元的質(zhì)量去評價的。下面介紹幾個關鍵的度量元指標。
圈復雜度(VG)是用來衡量一個模塊判定結構的復雜程度,數(shù)量上表現(xiàn)為獨立路徑的條數(shù)。
其計算方法為:VG=e-n+2,
其中e是程序模塊流程圖的邊數(shù),n是節(jié)點數(shù)。
如圖4所示,若某一程序的流程圖如圖所示,則,VG=6-6+2=2。
注釋的頻率(com_freq)是指程序中注釋代碼行占總代碼行的比例。計算公式如下:
com_freq =(lc_comm)/(lc_stat)
其中:lc_comm是指注釋行數(shù);lc_stat 是指總的代碼行數(shù);該值應該不小于0.2,即注釋應該占到代碼總行數(shù)的20%以上。
質(zhì)量缺陷密度(Dd):是指程序中發(fā)現(xiàn)的質(zhì)量缺陷數(shù)占代碼規(guī)模的比例,基本的缺陷測量是以每千行代碼的缺陷數(shù)(Defects/KLOC)來測量的。其計算公式如下:
缺陷密度=缺陷數(shù)量/代碼行或功能點的數(shù)量,
可按照以下步驟來計算一個程序的缺陷密度:(1)累計開發(fā)過程中每個階段發(fā)現(xiàn)的缺陷總數(shù)(D);(2)統(tǒng)計程序中新開發(fā)的和修改的代碼行數(shù)(N);(3)計算每千行的缺陷數(shù)Dd=1000*D/N。例如,一個29.6萬行的源程序總共有145個缺陷,則缺陷密度是: Dd=1000*145/296000=0.49 defects/KLOC。
3.2.2 代碼質(zhì)量評估模型,如圖5所示。
代碼質(zhì)量模型分成六個維度去度量,分別為正確性、規(guī)范性、易讀性、安全性、可維護性、可移植性。每個維度下面又由一組具體的度量指標來衡量,我們稱之為度量指標集。代碼質(zhì)量等于各維度質(zhì)量總和;各維度質(zhì)量等于該維度下的所有度量指標的質(zhì)量值之和。
由此,我們給出該代碼質(zhì)量模型QOC_M(Quality Of Code Model)的形式化定義形式:
QOC_M=
其中,Dset指代碼質(zhì)量維度的集合;Eset指度量元素的集合;D-EMap指度量元素和代碼質(zhì)量維度的映射關系;Fset指的是度量元素的計算公式集合。
代碼質(zhì)量最終的結果是各維度質(zhì)量乘以其權重后再累加,用公式表示如下:
QOC=∑Wdi*(∑ei*Wei)
其中,QOC(Quality Of Code)代碼質(zhì)量;Wdi指維度Di在代碼質(zhì)量中的權重;ei指該維度下的度量指標值;Wei指度量指標ei所占其所屬維度下的權重,則ei*Wei得到的是維度Di的質(zhì)量分數(shù)。
每個維度下的度量指標是可以根據(jù)用戶的具體需求去個性化定制的,具體可以參照3.1節(jié)給出關于的每個維度所涵蓋的范圍,如可維護性包含McCabe度量指標集、Halstead度量集等。不同用戶、不同廠商他們對代碼質(zhì)量的關注點有所差別,可按照自己的需求將該通用模型進行裁剪。
3.3 應用代碼質(zhì)量管理流程
應用代碼質(zhì)量評估是一個過程性的工作,需要按照一定的流程去執(zhí)行操作。目前的制定的評估流程包括版本管理、執(zhí)行評估、持續(xù)改進、風險應對四個環(huán)節(jié),遵循PDCA的良性循環(huán)。具體的評估流程如圖6所示:
(1)版本管理。應用代碼質(zhì)量評估的對象是業(yè)務系統(tǒng)的源代碼,隨著業(yè)務的不斷創(chuàng)新、需求的不斷變更,做好版本的控制是應用代碼質(zhì)量評估首要的任務,以及新的版本在上一版本的基礎上修復了哪些問題,又引入了哪些新的問題,這些問題都離不開版本管理。(2)執(zhí)行評估。執(zhí)行評估階段需要做的事情有如下幾點:①根據(jù)前期確定的應用代碼質(zhì)量規(guī)范和評估模型,選取適合的應用代碼質(zhì)量掃描工具。目前主流的白盒代碼掃描工具有Checkmarx、McCabe、Klockwork、Fortify、Parasoft等等,工具各有所長,要根據(jù)需求選取合適的一款或幾款。②制定掃描規(guī)則集。對照應用代碼質(zhì)量規(guī)范和評估模型在所選工具上配置掃描規(guī)則集。同時要注意不同語言的個性化區(qū)別。③掃描待評估代碼。建立掃描項目、掃描任務,開始對源代碼進行初步掃描。這一階段根據(jù)代碼規(guī)模以及工具的性能時間略有不同。代碼規(guī)模小、工具效率高所耗費的時間就短,反之,時間越長。④分析工具掃描結果。這一步驟的工作是我們執(zhí)行評估的一個重要方面,任何一款工具都不可避免的會有誤報、漏報的情況,不能完全依賴工具,人工的參與是不可避免的。針對工具報出的代碼質(zhì)量問題我們要逐一確認、分析其風險的嚴重程度,刪除誤報或者我們認為無關緊要的質(zhì)量問題。這一步驟的工作可以和開發(fā)人員共同完成。(3)風險應對。前一環(huán)節(jié)通過專家分析,確認發(fā)現(xiàn)代碼中存在的質(zhì)量問題,接下來我們要做的是按照應用代碼質(zhì)量評估模型,給出本次代碼掃描評估的結果,同時針對確認的問題給出修復建議,并要求開放商方面給出系統(tǒng)改進的應對方案。(4)持續(xù)改進。持續(xù)改進環(huán)節(jié)系統(tǒng)按照評估給出的優(yōu)化方案進行修改,對改進后的效果進行再評估。這一環(huán)節(jié)最重要的是監(jiān)督系統(tǒng)改進方案的執(zhí)行,所有問題落實到人,做到專門的問題有專人負責。同時在改進工作結束后能夠進一步跟進,評估修復后的結果。這樣總體上形成一個符合PDCA的閉環(huán)流程。
四、在某省移動業(yè)務支撐管理過程中的應用
本文提出的應用代碼質(zhì)量管理體系在某省移動進行了試點應用,取得了良好的效果。下面就本次試點情況做一個簡單介紹。
4.1 評估模型
該模型選取了規(guī)范性、可維護性、安全性三個維度,每個維度下所選取的規(guī)則和指標的計算方法如表1所列,并分別確定了各維度下應該遵守的規(guī)范,同時初步擬定了各維度的評價標準。通過選定適合的掃描工具,將理論模型轉(zhuǎn)化為實際可操作的具體工作。
4.2 管理流程及實踐
按照3.3節(jié)描述的管理流程,在試點實施過程中細化了幾個關鍵點:版本管理(SVN)、評估的時間點(大版本、小版本)、評估的內(nèi)容(全量、增量)。
(1)版本管理采取既有的版本管理工具SVN,沿用當前的版本管理模式。(2)掃描時間的確立。每次小版本上線前以及大版本發(fā)布前。(3)評估內(nèi)容的確定。小版本上線前按照增量掃描的原則,每次掃描一部分代碼,逐步遞增。大版本上線前采取全量掃描的原則,對系統(tǒng)源代碼進行統(tǒng)一的評估。
4.3 評估結果分析
本次試點實施針對8月份某次小版本上線代碼進行了評估。首次掃描發(fā)現(xiàn)不規(guī)范的問題數(shù)比較多,有代碼編寫錯誤、命名不規(guī)范以及大量的調(diào)試代碼等。根據(jù)首次代碼掃描評估的結果,給出相應問題修復建議,并要求開放商按照優(yōu)化方案進行修改,對改進后的效果進行再評估。經(jīng)過兩輪的改進修復,要求整改的問題已經(jīng)基本得到修復,掃描過程中發(fā)現(xiàn)的問題數(shù)目趨于穩(wěn)定,如圖7所示。
五、小結
本文在分析中國移動業(yè)務支撐工作在應用代碼質(zhì)量管理方面的現(xiàn)狀、研究的代碼質(zhì)量靜態(tài)分析技術、代碼質(zhì)量的理論并結合管理體系的基礎上,提出了應用代碼質(zhì)量管理體系的方法論,該方法論在省公司的試點實施中得到了驗證,取得了比較明顯的成果,進一步證明了其在業(yè)務支撐工作中的可行性。
應用代碼質(zhì)量管理體系有助于深化業(yè)務支撐工作的精細化管控,對電信運營商的支撐管理工作有借鑒意義。同時,該理論體系也適用于搭建應用代碼質(zhì)量評估私有云平臺,有助于電信系統(tǒng)標準化、規(guī)范化建設的推進。
參 考 文 獻
[1] 中華人民共和國國家標準 軟件工程 產(chǎn)品質(zhì)量 第1部分:質(zhì)量模型GB/T 16260.1-2006/ISO/IEC 9126-1:2001
[2] Brian Chess. Jacob West著. 董啟雄.韓平.程永敬等譯. 安全編程代碼靜態(tài)分析.機械工業(yè)出版社.
[3] WIKIPEDIA Software Quality http://en.wikipedia.org/wiki/Software_quality.