999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Sonar的代碼質量檢測技術研究

2019-07-16 03:17:27蔡建軍任女爾魏金津
電腦知識與技術 2019年14期

蔡建軍 任女爾 魏金津

摘要:隨著數據中心軟件業務的快速發展,給質量控制帶來極大的挑戰。采用Sonar檢測代碼質量并開發擴展插件,按項目和人員兩個維度統計代碼質量情況,并集成Metrics,Druid以檢測代碼執行時的邏輯調用情況。通過建立好的評價體系,可以很好地提升內部軟件代碼質量管理的水平,加強對軟件代碼質量的在軟件開發各個階段的掌控。

關鍵詞:Sonar;Metrics;Druid

中圖分類號:TP311 ? ? ? ?文獻標識碼:A

文章編號:1009-3044(2019)14-0195-05

1 概述

數據資源中心軟件業務的快速發展,帶來了軟件框架異構多樣、軟件資產復用率低的問題,更有代碼質量參差不齊等帶來的一系列軟件可讀性和維護性問題,傳統的依靠人力的代碼質量檢測工作已經難以為繼。所以需要構建一套自動化,完整高效的代碼質量評價體系,將開發人員的工作質量進行量化和評級,用以提高軟件項目開發過程中的代碼質量和軟件部署之后的可維護性。

從軟件工程方法學進行統籌思考,著眼于軟件工程中對于軟件代碼質量評價的幾個重要指標:代碼漏洞、BUG、壞味道、SQL語句平均執行時間、函數平均調用時間等,結合Sonar的代碼質量統計功能,對Sonar插件進行擴展開發,按項目、人員兩個維度統計代碼質量增量情況,集成Metrics與Druid以檢測代碼運行時的調用邏輯,作為評價代碼質量的重要指標之一。

依托于成熟的Sonar軟件質量監測系統,構建一套科學的可量化的評價體系,從而達到減少人工工作,提升內部軟件代碼質量管理的水平,加強對軟件代碼質量的在軟件開發各個階段的掌控,對于科學管理軟件資產,進一步提升軟件復用率具有非常重要的意義。

2 基于Sonar衡量代碼質量

1)Sonar介紹

軟件行業內常將Sonar作為技術債務【1】管控的主流工具。Sonar是一個開源的代碼質量分析平臺,能夠管理代碼的質量,通過掃描代碼,可以檢測到代碼的漏洞和潛在的編碼層次的邏輯問題【2】。

Sonar的插件機制可以集成不同的工具,如代碼分析、持續集成,我們還可以開發插件對檢測結果進行再加工處理。

2)Jenkins集成Sonar

持續集成(CI)是個簡單重復勞動,由人來操作費時費力,使用自動化集成技術能夠節約大量的人力。將持續集成Jenkins與代碼自動掃描集成【3】,能夠自動對代碼進行持續的代碼規范掃描,并輸出掃描結果。即使代碼進行更改,持續集成技術也能夠自動觸發Sonar進行掃描,這對開發人員進行代碼漏洞及規范掃描的幫助作用是非常明顯的。

3)衡量代碼質量的意義

代碼質量,是衡量系統質量的重要指標。基于Sonar的掃描功能,構建一套軟件代碼質量評價體系,定期對系統內的項目進行統計分析,有利于及早發現問題,更好地掌控軟件開發過程,做到問題早發現早解決,避免問題滯后導致的技術債務越滾越多的惡性循環,有利于提高代碼質量監管能力,節約代碼質量管理人力,提升整體的代碼質量水準。

3 軟件開發質量統計機制

1)基于Sonar的代碼質量檢測體系

借助于Sonar所支持的代碼質量檢測機制,能夠檢測出項目中存在的一些問題,包括但不限于:可能存在的漏洞、安全問題、代碼壞味道等。

這些統計數據可以非常直觀地表現出一個工程的代碼質量好壞,可以作為統計代碼質量的量化指標。通過這些代碼中發現的代碼質量問題,我們不僅可以避免工程交付后,運行過程中出現致命性的問題,而且可以提高軟件開發人員的工作規范,避免在日后的開發工作中再次出現類似的問題。

Sonar在6+的版本上增加了對“作者”的支持。作者的概念是:在版本控制系統中(如SVN,Git),某個文件的最后一次提交者即是當前文件的作者。

在Sonar中,檢測出來的代碼問題分為以下幾種:1、提示級;2、次要級;3、主要級;4、嚴重級;5、阻斷級。其嚴重程度依次遞增,提示級對代碼的整體運行幾乎沒有任何影響,而阻斷級可能會產生各種嚴重的影響,甚至影響系統運行的穩定性和安全性。因此,越是高級的問題將會帶來更大的威脅,也就意味著代碼的質量越差,系統越不完善。

在有了作者這個概念之后,使對每一位參與開發的開發者進行各自的代碼質量統計以及工作量統計成了可能。Sonar會記錄當前項目下每一位作者的所有問題數量。對每一位參與開發的開發者,通過判斷他所編寫的代碼中所包含的代碼質量問題(Bug、漏洞、壞味道等),構建一個合理的評價體系,對每位開發者的代碼質量進行評分。可以作為評估該開發者開發質量的一個重要指標。

2)Sonar登錄驗證

在Sonar提供的完備的代碼質量統計結果的前提下,以代碼質量統計體系標準為原則,構建代碼統計質量對比體系。考慮到代碼迭代周期,決定以月度為最小比較單位,上設季度對比。

Sonar對外提供了一些必要的接口,比如獲取一個項目的issue數量,代碼行數統計等基本信息,但是Sonar并不提供歷史掃描信息,只是管理每個issue的狀態變化信息。所以想要直接通過Sonar的接口獲取到我們希望得到的對比統計數據是不可能的。

在調研了Sonar的接口之后,決定采用定時任務的方式,將當天最新的Sonar掃描結果進行保存,并記錄保存的日期,以此作為按照周期進行統計的基礎。

首先,通過Sonar提供的登錄接口“api/authentication/login”進行Sonar后臺的登錄,此處為了保證能夠獲取到所有Sonar中的項目,應該以管理員權限登錄,或者使用至少對所有項目具有可見權限的帳號進行后續操作。這一步的登錄操作是為了獲取授權Token,是后面所有獲取統計數據的基礎。

3)按照項目進行對比-代碼問題

在Sonar中,每個被檢測的項目有其唯一的、可由用戶指定的ProjectKey來進行標識。這個項目掃描后的各項結果,均可以通過這個ProjectKey以及對應的接口進行獲取。

這里根據上述的代碼質量統計體系,重點關注上圖中紅線框出來的部分。這部分Sonar的接口因為集成了太多功能,所以僅僅列出本系統所使用的部分接口文檔:

通過調用Sonar接口“api/issues”,可以獲得各個等級的issue數量,接口返回的示例如下:

之后,將獲得的這些數據,保存到數據庫中,作為當天的掃描結果,用于后面按照固定周期的比對工作。

4)按照項目進行對比-代碼問題

Sonar系統中保存了代碼行數的相關度量,包括代碼總行數,有效代碼行數,注釋行數和注釋率等,如下圖所示:

Sonar也提供了獲取代碼行數度量的接口,但是根據需求,需要收集后臺(JAVA語言)的代碼行數和全部的度量。全部的度量上圖即可獲得,但是JAVA語言的代碼并不能直接通過接口獲得。獲取全部代碼行數度量的接口是“api/measures”,通過這個接口可以獲取到代碼行數掃描的歷史記錄,我們取最近一條的檢測記錄并保存到數據庫中。用于后面生成各項統計數據。下面是示例返回:

從上面接口的返回值可以看出,Sonar確實不會分別統計后臺(JAVA)代碼行數和全部的代碼行數。我們在調研了Sonar的接口之后,發現了可以分文件來統計代碼,下面是系統中使用到的接口描述:

使用這個接口返回的數據是一個大的文件掃描結果列表,列表中每一個節點中存儲的數據都是一些可被自定義的度量,在這個功能模塊中,我們通過它來獲取這個文件中的代碼(如果是代碼文件的話)是由什么語言編寫的,以及這個文件的代碼行數相關度量,主要是總代碼行數,有效代碼行數,注釋行數這三個值,根據文件中代碼的編程語言判斷是否是JAVA語言,如果是,則分別統計上面三個值的和,最后通過這三個值來計算代碼注釋率。

API接口返回的數據示例如下(一個節點):

5)按照作者進行對比-代碼問題

這個部分和上述的代碼行數統計部分十分類似。它們都具有共同的現狀:Sonar本身不對作者產生的issue進行統計。而且根據需求,系統需要統計某個作者在所有他參與的項目中所編寫的代碼質量。Sonar的作者的概念是建立在項目這個基礎上的,涉及跨項目的作者,Sonar本身并不支持,所以這里需要有一個前提:

Sonar所檢測的項目所處的SCM管理系統為統一平臺,即每個作者在這個SCM平臺下有且僅有唯一的ID(用戶名)與之對應。

在這個前提下,可以通過用戶名將同一個作者不同項目下的代碼問題連接到一起,是統計個人代碼質量的基礎。

通過對Sonar接口的調研,Sonar統計某個作者的問題是在項目中才有統計的,但是通過上述的前提條件,保證了作者名的唯一性,那么就可以通過掃描所有Sonar項目中的作者以及他們的各個等級的問題的數量,然后通過他們的作者名進行組織,統計出一個同一個作者名下,所有他參與的項目的代碼質量問題統計評價。

獲取所有Sonar掃描的項目的ProjectKey的接口是“api/components”,通過這個接口,不需要傳入任何參數即可得到所有Sonar掃描過的ProjectKey,接口返回數據示例如下:

根據獲取到的所有ProjectKey,分別去該項目下按照issue列表來統計issue所在文件的作者,issue的等級,作為該作者在該項目下的統計數量,并對作者列表中有該作者的項目所統計出的issue數量進行合并,作為該作者所有項目的issue數量統計。返回結果示例:

圖中三個箭頭分別指向了issue的等級,所屬的項目和作者名,根據這些信息,不斷迭代所有項目的所有issue,可以統計出作者的issue數量和等級。將這些數據保存在數據庫中,用作后面的周期性統計使用。

6)代碼質量按周期統計

在經過上面的流程,數據庫中每天應該存有以下數據:每個Sonar中掃描的項目的各個等級的issue的數量、評分和評級;每個作者所有的各個等級的issue數量、評分和評級。根據需求,需要對月度信息和季度信息進行統計,包括同比和環比。

選擇的依據是:選擇月度信息時,按照時間區間從當月1號0點0分開始,到下月1號0點0分為止的時間段內,按照掃描時間(日期)進行降序排列,以排序后,第一條記錄為基準進行同比,環比比較。季度信息同上。

7)代碼質量統計模塊的使用與導出

首先需要成功部署Sonar插件以及Vue前端。從Sonar主頁進入需要查看代碼質量的項目主頁,在“More”(更多)下拉菜單中,選擇“項目監控信息展示”:

倒計時過后,會跳轉到各項信息展示的頁面:

默認顯示第一個標簽頁,標題為“代碼質量統計”,該標簽頁顯示的是代碼質量問題合計,主要是各個級別的問題數量統計。

該標簽頁下方顯示的是代碼行數檢測結果,顯示了項目總行數,注釋代碼行數,有效代碼行數,注釋率等指標。

進入第二個標簽頁,會顯示代碼質量歷史對比信息:

在這個頁面中,首先展示出來的是該項目的按照月度和季度的對比信息,分別展示了本月最后一條記錄、和上月對比的環比記錄以及和去年本月對比的同比記錄。按照季度對比也是同樣,展示了環比和同比的記錄。

在頁面下部,展示的是該項目下,每個作者的issue數量統計以及對比結果:

分別展示了該項目下,每個作者的當前月(季度)issue數量和評級評分信息,以及同比和環比數據。

在統計結果導出的部分,由于考慮到權限的設置,將入口設置在了Administration的頁面中,只有通過admin帳號登錄才能看到入口:

單擊統計結果導出,在倒計時結束之后即可自動開始下載數據導出表格。數據導出表格示例如下:

Excel表格文件中有多個表單(Sheet),從左到右分別展示的是:所有項目按照月度進行統計對比的結果,所有項目按照季度進行統計對比的結果,每個項目每個作者的issue數量按照月度進行統計對比的結果,每個項目每個作者issue數量按照季度進行統計對比的結果,每位作者所有項目按照月度進行統計對比的結果以及每位作者所有項目按照季度進行統計對比的結果。

4基于Metrics與Druid分析代碼執行效率

Metrics【4】和Druid【5】作為項目運行時的監控工具,將之集成進Sonar插件,與Sonar統計出來的各項代碼質量問題一起,作為評價代碼質量的重要指標之一。

4.1 基于Metrics分析代碼執行效率

1)什么是Metrics

Metrics可以監控和統計系統或服務運行時的物理性能(CPU,內存,IO等資源占用率)以及業務性能(每秒請求數,平均請求響應時間等)。Java有很多流行的庫,可以在系統中集成并監控。

2)Metrics分析

進行Metrics分析的前提是需要有檢測結果的csv文件供分析,所以為了將Metrics分析功能和Sonar進行結合,需要通過腳本轉移Metrics監測結果文件到指定的文件夾下。

3)Metrics顯示結果

Metrics使用“projectKey”來作為項目的唯一標識,“projectKey”對應的是sonarqube中唯一標識每個項目的主鍵。通過代碼質量檢測頁面的Metrics統計子頁面可以看到檢測的結果,數據表左側顯示的時執行業務邏輯的方法名稱,以及方法所在的路徑。右側mean time是方法的平均執行時間, 最后是對這個方法執行效率的評分。

4.2 基于Druid分析代碼執行效率

阿里巴巴開源的Druid數據庫連接池,可以很好地監控數據庫連接池連接和SQL的執行情況,對于打開監控統計功能的項目,我們也可以通過Sonar插件集成Druid的Sql執行效率分析功能。

Druid的配置項保存在數據庫表當中,每個“projectKey”對應的“druidURL”是運行中的druid項目的監控后臺地址,需要通過其接口獲取各種數據并統計。我們只需在頁面配置每個項目的druidURL字段里指定具體的url信息即可。進入Druid的統計頁面如圖所示,數據表左側指明執行的SQL語句,并有SQL執行次數,執行總時間,平均時間以及對每條SQL做的評分。

5 總結

Sonar是技術債務管控的主流工具,可以檢測代碼質量問題,開發Sonar插件可以擴展檢測功能,按項目和人員維度統計代碼質量包括增量情況,集成Metrics與Druid可以檢測代碼運行時邏輯。建立科學的可量化的評價體系,可以提升內部軟件代碼質量管理的水平,加強對軟件代碼質量的在軟件開發各個階段的掌控。

參考文獻

[1] 劉亞珺,李兵,李增揚,等.軟件集成開發環境的技術債務管理研究[J].計算機科學,2017,44(11):15-21.

[2] 肖漢.一種基于UML的Java類復雜性度量方法[J].計算機應用研究,2007(7).

[3] 趙晨煜.基于大數據技術的O2O電商用戶數據挖掘探討[J].中國戰略新興產業,2018(12).

【通聯編輯:朱寶貴】

主站蜘蛛池模板: 国产精品亚洲精品爽爽| 日本免费一区视频| 91视频精品| 国产高清自拍视频| 亚洲无线观看| 中文字幕久久亚洲一区| 亚洲天堂.com| 天天婬欲婬香婬色婬视频播放| 久久五月天国产自| 99在线观看国产| 久久综合婷婷| 人人爽人人爽人人片| 日韩久草视频| 一本久道久久综合多人| 中文字幕欧美成人免费| 国产69囗曝护士吞精在线视频| av色爱 天堂网| 怡春院欧美一区二区三区免费| 国产一级裸网站| 国产制服丝袜91在线| 97国产精品视频人人做人人爱| 亚瑟天堂久久一区二区影院| 又爽又黄又无遮挡网站| 特级精品毛片免费观看| 黑人巨大精品欧美一区二区区| 影音先锋丝袜制服| 美女内射视频WWW网站午夜 | 专干老肥熟女视频网站| 久操中文在线| 香蕉视频在线观看www| 国产91精品调教在线播放| 日韩精品毛片| 国产浮力第一页永久地址| 成年午夜精品久久精品| 久久久久九九精品影院| 国产91av在线| 成人午夜天| 亚洲国产欧美中日韩成人综合视频| 亚洲精品男人天堂| 国产正在播放| 欧美日韩一区二区三区四区在线观看| 亚洲 欧美 偷自乱 图片| 这里只有精品在线| 九九九九热精品视频| 亚洲人成网7777777国产| 国产剧情伊人| 亚洲精品在线观看91| 综合色在线| 亚洲精品综合一二三区在线| 久草视频精品| 国产极品美女在线播放| 国产精品无码一区二区桃花视频| 波多野结衣一区二区三区88| 欧美日韩导航| 国产91视频免费| 国产h视频免费观看| 性欧美在线| 玖玖免费视频在线观看 | 日韩精品中文字幕一区三区| 久久精品国产亚洲麻豆| 国产午夜不卡| 国产精品第一区| 国模私拍一区二区| av一区二区无码在线| 日本三级精品| a网站在线观看| 亚洲男人天堂网址| 最新国语自产精品视频在| 国产欧美专区在线观看| 国产精品视频a| 国产在线一区视频| 亚洲视频二| 国产小视频在线高清播放| 波多野结衣一区二区三区AV| 成人福利视频网| 亚洲AV无码久久精品色欲| 精品久久人人爽人人玩人人妻| 高清无码一本到东京热| 伊人查蕉在线观看国产精品| 伊人激情久久综合中文字幕| 91精品国产综合久久不国产大片| 国产亚洲精久久久久久无码AV|