更好地利用Pmd,Findbugs和CheckStyle的结果。
我們可以列舉許多Java靜態(tài)分析工具,每種工具都專注于特定領(lǐng)域并具有其優(yōu)勢(shì),我們可以列舉一下:
- Pmd是基于靜態(tài)規(guī)則集的Java源代碼分析器,它識(shí)別潛在的問(wèn)題,例如:
- 可能的錯(cuò)誤-空的try / catch / finally / switch塊。
- 查找Java代碼中的錯(cuò)誤的FindBugs 。 它使用靜態(tài)分析來(lái)識(shí)別Java程序中數(shù)百種不同的潛在錯(cuò)誤類型。
- Checkstyle定義了一組可用的模塊,每個(gè)模塊均提供具有可配置的嚴(yán)格性級(jí)別(強(qiáng)制性,可選…)的規(guī)則檢查。 每個(gè)規(guī)則都會(huì)引發(fā)通知,警告和錯(cuò)誤。
存在許多利用這些工具的結(jié)果的方法:
- XML格式 :可以從這些工具中的每一個(gè)生成XML文件,并且可以將其用于創(chuàng)建HTML報(bào)告或由其他工具使用以利用分析結(jié)果。
- HTML格式 :HTML報(bào)告是生成報(bào)告并在團(tuán)隊(duì)之間共享的首選方法,您可以使用xsl樣式表創(chuàng)建自定義報(bào)告。
- IDE插件 :幾乎所有已知的IDE都為這些工具提供了插件,從而使您有可能從源代碼中發(fā)現(xiàn)所有違規(guī)行為。
代碼質(zhì)量工具的問(wèn)題之一是,它們往往使開發(fā)人員遇到的問(wèn)題并不是真正的問(wèn)題-即誤報(bào)。 當(dāng)出現(xiàn)誤報(bào)時(shí),開發(fā)人員將學(xué)會(huì)忽略工具的輸出或完全放棄它。
為了更好地利用他們的結(jié)果,最好是只專注于我們想要的東西,并為開發(fā)人員提供有用的視圖。 在本文中,我們將發(fā)現(xiàn)另一種有趣的方法,可以更好地利用所有已知的Java靜態(tài)分析工具的結(jié)果,并像數(shù)據(jù)庫(kù)一樣查詢它們。
JArchitect和CQLinq
JArchitect是另一個(gè)靜態(tài)分析工具,是對(duì)其他工具的補(bǔ)充,它使用基于Linq(CQLinq)的代碼查詢語(yǔ)言來(lái)像數(shù)據(jù)庫(kù)一樣查詢代碼庫(kù)。
在JArchitect 3之前,您只能查詢從JArchitect提取的分析數(shù)據(jù),但是V4提供了從許多其他靜態(tài)分析工具導(dǎo)入分析結(jié)果并使用CQLinq查詢的可能性。
讓我們以PDT核心(Eclipse的Php插件)的源代碼為例。 并發(fā)現(xiàn)我們?nèi)绾卫肑Architect的這些工具的分析結(jié)果。
從這里開始是請(qǐng)求分析結(jié)果之前要遵循的步驟:
- 步驟1:使用PMD,CPD,FindBugs和CheckStyle分析項(xiàng)目。 并生成包含結(jié)果的XML文件。
- 步驟2:使用JArchitect分析項(xiàng)目。
- 步驟3:從菜單“插件->導(dǎo)入插件結(jié)果文件”將所有xml文件導(dǎo)入JArchitect。
默認(rèn)情況下,JArchitect提供許多有用的查詢來(lái)請(qǐng)求這些工具,并且所有這些查詢都可以輕松自定義。
讓我們發(fā)現(xiàn)一些CQLinq查詢:
獲取所有問(wèn)題:
獲取所有問(wèn)題的請(qǐng)求非常簡(jiǎn)單,但是正如您所看到的那樣,這不是很有趣,要利用232 725個(gè)問(wèn)題來(lái)獲取結(jié)果確實(shí)是一個(gè)挑戰(zhàn)。
為了更好地利用這些工具的結(jié)果,我們可以使用CQLinq對(duì)其進(jìn)行過(guò)濾,并僅關(guān)注我們想要的內(nèi)容。
按工具要求
我們可以修改第一個(gè)請(qǐng)求并添加有關(guān)工具的標(biāo)準(zhǔn)。
規(guī)則集要求
我們還可以按發(fā)布規(guī)則集進(jìn)行過(guò)濾:
優(yōu)先要求
我們還可以按優(yōu)先級(jí)過(guò)濾:
最經(jīng)常出現(xiàn)的問(wèn)題
有趣的是,這些工具報(bào)告的問(wèn)題最多。
班級(jí)最多的課程
知道包含許多違規(guī)的類非常有趣
正如我們所看到的,CheckStyle報(bào)告了數(shù)千個(gè)問(wèn)題,其中許多問(wèn)題可以忽略。
上一個(gè)查詢很有趣,但是并沒(méi)有給我們提供質(zhì)量欠佳的類,另一個(gè)有用的指標(biāo)是NBLinesOfCode,這是很正常的,因?yàn)橛泻芏啻a行的類包含很多問(wèn)題,因此我們可以修改先前的請(qǐng)求,以計(jì)算“問(wèn)題數(shù)”和NBLinesofCode之間的比率。
這個(gè)結(jié)果非常奇怪的是,這8個(gè)頭等艙的比率超過(guò)200,在這種情況下,按代碼行,我們有200多個(gè)問(wèn)題。
為了解釋此行為,讓我們看一下CompilerAstParser的一些行:
NbLinesOfCode是語(yǔ)句的數(shù)量,而不是物理行,并且該Class聲明了許多數(shù)組,每個(gè)數(shù)組都由數(shù)千條物理行聲明,但是每個(gè)數(shù)組聲明都被視為一個(gè)語(yǔ)句。
如前所示,對(duì)于最經(jīng)常出現(xiàn)的問(wèn)題,以下規(guī)則“ +”應(yīng)放在新行上。 每個(gè)數(shù)組被違反數(shù)千次。 也許最好從CheckStyle配置文件中刪除這些規(guī)則。
最受歡迎的方法有問(wèn)題
當(dāng)靜態(tài)分析工具報(bào)告問(wèn)題時(shí),找到要解決的優(yōu)先問(wèn)題很有用? 特別是在涉及錯(cuò)誤時(shí)。
確實(shí),特定方法中可能存在錯(cuò)誤,但是有趣的是,有多少方法受到該錯(cuò)誤的影響,而流行的方法是最常用的方法,因此最好快速解決它們。
使用CQLinq,我們可以結(jié)合所有這些工具的結(jié)果和JArchitect的結(jié)果來(lái)創(chuàng)建更詳細(xì)的查詢,并將這些檢查添加到構(gòu)建過(guò)程中。
問(wèn)題趨勢(shì)
在項(xiàng)目中遇到問(wèn)題也不例外,可以說(shuō)這很正常,但是我們必須檢查項(xiàng)目的質(zhì)量趨勢(shì)。 確實(shí),如果問(wèn)題的數(shù)量在變更和演變之后增加,這是一個(gè)不好的指標(biāo)。
JArchitect提供了趨勢(shì)監(jiān)視功能來(lái)創(chuàng)建趨勢(shì)圖。 趨勢(shì)圖由在分析時(shí)隨時(shí)間記錄的趨勢(shì)指標(biāo)值組成。 默認(rèn)情況下,超過(guò)50個(gè)趨勢(shì)指標(biāo)可用,并且可以輕松創(chuàng)建自己的趨勢(shì)指標(biāo)。
讓我們?yōu)镻md問(wèn)題創(chuàng)建趨勢(shì)指標(biāo):
然后,您可以輕松地創(chuàng)建趨勢(shì)圖以監(jiān)視先前的趨勢(shì)指標(biāo)并將其添加到JArchitect儀表板。
通過(guò)此趨勢(shì)圖,我們可以監(jiān)視Pmd問(wèn)題的演變,并嘗試了解指標(biāo)隨著版本而增長(zhǎng)的原因。
自定義JArchitect報(bào)告
JArchitect使得可以在HTML報(bào)表中附加列出一些CQLinq查詢的額外報(bào)表部分。
在“ CQLinq查詢資源管理器”面板中,所報(bào)告的特定CQLinq組以橙色矩形為邊界。
您還可以將Pmd趨勢(shì)圖添加到報(bào)告中:
在HTML報(bào)告中,可以從菜單訪問(wèn)這些添加的部分:
這是在報(bào)告中為Pmd CQLinq查詢添加的頁(yè)面:
結(jié)論
JArchitect 4現(xiàn)在對(duì)其他靜態(tài)分析工具開放,您也可以按此處的說(shuō)明輕松插入自定義工具。 這樣,您可以使用所有JArchitect功能來(lái)更好地利用已知的Java靜態(tài)分析工具的結(jié)果。
翻譯自: https://www.javacodegeeks.com/2013/11/exploit-better-the-results-of-pmd-findbugs-and-checkstyle.html
總結(jié)
以上是生活随笔為你收集整理的更好地利用Pmd,Findbugs和CheckStyle的结果。的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: linux命令压缩成zip(linux命
- 下一篇: Linux的网络配置文件(linux的网