sonarqube定義代碼質(zhì)量

sonarqube可以集成findbug,pwd,lint等靜態(tài)代碼檢查工具,提供統(tǒng)一的檢查平臺.

sonar代碼檢測的標(biāo)準(zhǔn):

1径密、Reliability可靠性:低于A

可靠性比率的計(jì)算方法:

A = 0 Bug 最高等級A泼差,表示代碼無bug

B = at least 1 Minor Bug 代碼只要有一個(gè)次要bug衅金,等級就為B

C = at least 1 Major Bug 只要包含一個(gè)重要bug琐旁,等級將為C

D = at least 1 Critical Bug 只要有一個(gè)嚴(yán)重bug击奶,等級評估為D

E = at least 1 Blocker Bug 只要有一個(gè)最高等級的阻斷級別的bug漾唉,可靠性評估為E炬称,最低級別伞广。

2拣帽、Security安全性:低于A

安全度指標(biāo)計(jì)算方法:

A = 0 Vulnerability 沒有漏洞時(shí),項(xiàng)目評估為最高級別A

B = at least 1 Minor Vulnerability 只要包含一個(gè)次要漏洞赔癌,項(xiàng)目評估為級別B

C = at least 1 Major Vulnerability 只要包含一個(gè)重要漏洞诞外,項(xiàng)目評估為級別C

D = at least 1 Critical Vulnerability 只要包含一個(gè)嚴(yán)重漏洞,評估為D

E = at least 1 Blocker Vulnerability 只要包含一個(gè)阻斷漏洞灾票,項(xiàng)目評估為最低級別E

3峡谊、Maintainability可維護(hù)性:低于A

可維護(hù)性等級范圍從A(非常好)到E(非常差)。 評級由技術(shù)債務(wù)比率的值決定刊苍,技術(shù)債務(wù)比率是將項(xiàng)目的技術(shù)債務(wù)與從零開始重寫代碼所需的成本進(jìn)行比較既们。 A到D的默認(rèn)值為0.05,0.1,0.2,0.5。任何超過0.5評級就為E正什。

4啥纸、Coverage覆蓋率:新增覆蓋率低于60%

Coverage

行覆蓋和條件覆蓋的混合。單元測試覆蓋多少源代碼婴氮。Coverage = (CT + CF + LC)/(2*B + EL)

其中 :

CT = conditions that have been evaluated to ‘true’ at least once至少有一次被判斷為true的條件數(shù)

CF = conditions that have been evaluated to ‘false’ at least once 至少一次被判斷為false的條件數(shù)

LC = covered lines = lines_to_cover uncovered_lines 已覆蓋的行數(shù)

B = total number of conditions 條件總數(shù)

EL = total number of executable lines (lines_to_cover) 所有可執(zhí)行的代碼總行數(shù)

5斯棒、Duplicated Lines:新增代碼重復(fù)行高于3%

其中 :重復(fù)率=重復(fù)行數(shù)/總行數(shù)*100

6盾致、Complexity復(fù)雜度:高于10

以下關(guān)鍵詞增加復(fù)雜性:if, for, while, case, catch, throw, return (不是方法的最后一個(gè)語句), &&, ||, ?

else, default,? finally不增加復(fù)雜度

代碼復(fù)雜度過高將難以理解、難以維護(hù)荣暮。

計(jì)算公式1:V(G)=E-N+2P庭惜。其中,E表示控制流圖中邊的數(shù)量穗酥,N表示控制流圖中節(jié)點(diǎn)的數(shù)量护赊,P圖的連接組件數(shù)目(圖的組件數(shù)是相連節(jié)點(diǎn)的最大集合)。因?yàn)榭刂屏鲌D都是連通的砾跃,所以P為1.

圈復(fù)雜度 代碼狀況 ?? 可測性 維護(hù)成本

1-10 ? ? 清晰骏啰、結(jié)構(gòu)化? 高 ? ? ? 低

11-20 ? 復(fù)雜 ? ? ? ? ? ? ?? 中 ? ? ?? 中

21-30? 非常復(fù)雜 ? ? ? ? 低 ? ? ?? 高

>30 ? ? 不可讀 ? ? ?? 不可測 ? ? 非常高

常遇到的問題:

壞味道,漏洞抽高,bug判耕,代碼規(guī)范。

Bugs:

1.A "NullPointerException" could be thrown; "issue" is nullable here.

空指針異常.

2.Cast one of the operands of this addition operation to a "float".

不同類型的值做運(yùn)算,需要統(tǒng)一成一種類型.

3.Use an "instanceof" comparison instead.

例如:RuntimeException.class.getName().equals(className);改成instanceof.

4.Use "BigDecimal.valueOf" instead.

new BigDecimal(teraBytes)改成valueOf.

Vulnerability:

1.Make tag a static final constant or non-public and provide accessors if needed.

public String tag;把tag變量變成靜態(tài)常量或非公共常量翘骂,并在需要時(shí)提供訪問器祈秕。

2.Use a logger to log this exception.

e.printStackTrace();改成logger.

3.Do something with the "boolean" value returned by "createNewFile".

public static File compressImage(){}返回值類型不對,改成boolean.

Code Smell:

1.Remove this unused "TAG" private field.

移除無用的自定義變量.

2.Rename this package name to match the regular expression '^[a-z]+(\.[a-z][a-z0-9]*)*$'.

包名書寫要符合正則規(guī)范.

3.Add a nested comment explaining why this method is empty, throw an UnsupportedOperationException or complete the implementation.

無用的空方法,沒有添加注釋,說明用處.

4.Introduce a new variable instead of reusing the parameter "percent".

變量名重復(fù)使用.

5.Catch Exception instead of Throwable.

捕獲異常而非直接拋出.

6.Add a private constructor to hide the implicit public one.

缺少私有構(gòu)造函數(shù).

7.This block of commented-out lines of code should be removed.

注釋掉的代碼塊應(yīng)該刪除.

8.Change this "try" to a try-with-resources.

傳統(tǒng)的try-catch-finally,當(dāng)需要關(guān)閉的資源很多時(shí),代碼finally會很多,導(dǎo)致代碼冗余.換成try-with的模式會使得代碼簡潔.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市雏胃,隨后出現(xiàn)的幾起案子请毛,更是在濱河造成了極大的恐慌,老刑警劉巖瞭亮,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件方仿,死亡現(xiàn)場離奇詭異,居然都是意外死亡统翩,警方通過查閱死者的電腦和手機(jī)仙蚜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來厂汗,“玉大人委粉,你說我怎么就攤上這事∪㈣耄” “怎么了贾节?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長衷畦。 經(jīng)常有香客問我栗涂,道長,這世上最難降的妖魔是什么祈争? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任斤程,我火速辦了婚禮,結(jié)果婚禮上菩混,老公的妹妹穿的比我還像新娘忿墅。我一直安慰自己扁藕,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布疚脐。 她就那樣靜靜地躺著纹磺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪亮曹。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天秘症,我揣著相機(jī)與錄音照卦,去河邊找鬼。 笑死乡摹,一個(gè)胖子當(dāng)著我的面吹牛役耕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播聪廉,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼瞬痘,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了板熊?” 一聲冷哼從身側(cè)響起框全,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎干签,沒想到半個(gè)月后津辩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡容劳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年喘沿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片竭贩。...
    茶點(diǎn)故事閱讀 40,040評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蚜印,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出留量,到底是詐尸還是另有隱情窄赋,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布楼熄,位于F島的核電站寝凌,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏孝赫。R本人自食惡果不足惜较木,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望青柄。 院中可真熱鬧伐债,春花似錦预侯、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至虹蒋,卻和暖如春糜芳,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背魄衅。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工峭竣, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人晃虫。 一個(gè)月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓皆撩,卻偏偏與公主長得像,于是被迫代替她去往敵國和親哲银。 傳聞我的和親對象是個(gè)殘疾皇子扛吞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容