CppDepend功能詳細(xì)介紹

本節(jié)將會(huì)對(duì)上一節(jié)中提到的CppDepend的功能做一個(gè)詳細(xì)介紹匈辱。

1. CQLinq:代碼查詢

CppDepend允許通過基于LINQ查詢的CQLinq查詢代碼振湾。例如,下面的CQLinq查詢功能為匹配與所有具有30行以上代碼的Public Methods:

方法匹配

創(chuàng)建新的CppDepend項(xiàng)目時(shí)亡脸,將提供120個(gè)默認(rèn)查詢和規(guī)則押搪。編寫CQLinq查詢和約束很簡(jiǎn)單,因?yàn)樗荂#LINQ語(yǔ)法浅碾,且CppDepend提供了一個(gè)CQLinq編輯器大州,它支持:

  • 代碼完成/智能感知,
  • 實(shí)時(shí)編譯錯(cuò)誤說明垂谢,
  • 集成工具提示文檔厦画。
CQLinq編寫

此外,一旦查詢被編譯,它將立即執(zhí)行根暑,其結(jié)果能很好地得到顯示和瀏覽:

顯示查詢結(jié)果

可以使用CQLinq編寫強(qiáng)大且詳細(xì)的查詢和規(guī)則力试,如下所示:

CQLinq查詢編寫

可以編寫(或甚至生成)較短的CQLinq查詢,以獲得有關(guān)代碼庫(kù)的問題的立即答案:
如:代碼分層正確嗎排嫌?

demo

自上次發(fā)行版本以來(lái)畸裳,哪些方法已被重構(gòu)?

demo

10種最復(fù)雜的方法是什么淳地?

demo

哪些方法分配一個(gè)特定字段怖糊?

demo

哪些復(fù)雜的方法沒有做足夠的注釋?

demo

當(dāng)CQLinq查詢返回某個(gè)結(jié)果時(shí)颇象,也可以自動(dòng)警告伍伤。這樣的CQLinq代碼查詢的實(shí)際上是一個(gè)代碼規(guī)則,如:

我不希望我的用戶界面層直接依賴于DataBase層:

demo

MyProject1和MyProject2中的方法不應(yīng)該有30行以上的代碼:

demo

靜態(tài)字段不應(yīng)命名為m_XXX(自定義命名約定):

demo

不應(yīng)該刪除Public methods以避免API破壞:

demo

2. Smart Technical Debt Estimation:智能技術(shù)債務(wù)估算

技術(shù)債務(wù)由嵌入每個(gè)規(guī)則源代碼內(nèi)的C#LINQ公式估計(jì)夯到。這使得這些估計(jì)都易于根據(jù)需求定制。

warnif count > 0 
from m in Methods
where m.CyclomaticComplexity > 10
select new { 
   m,
   m.CyclomaticComplexity,
   Debt = (3*(m.CyclomaticComplexity -10)).ToMinutes().ToDebt(),
   AnnualInterest = (m.PercentageCoverage == 100 ? 10 : 120).ToMinutes().ToAnnualInterest()
}

用戶不必編寫這些債務(wù)查詢查詢饮亏,因?yàn)樗鼈兪峭ㄟ^單擊儀表板中的值和菜單生成的:

Dashboard的使用

市場(chǎng)上最快的工具: 由于開發(fā)人員的時(shí)間是非常寶貴的耍贾,所以我們使CppDepend非常快速:即使是對(duì)非常大的代碼庫(kù)應(yīng)用數(shù)百個(gè)規(guī)則路幸,也只需幾秒鐘就可以在Visual Studio中每次編譯后重新估計(jì)技術(shù)債務(wù)荐开。
100%可定制: 不僅可以自定義債務(wù)估算的各個(gè)方面,還可以定制債務(wù)呈現(xiàn)简肴。債務(wù)價(jià)值可以通過貨幣金額而不是人身時(shí)間來(lái)估計(jì)晃听,所有閾值都可以通過CppDepend項(xiàng)目屬性面板進(jìn)行點(diǎn)擊調(diào)整。

自定義債務(wù)估算面板

優(yōu)點(diǎn):
嚴(yán)格的代碼質(zhì)量控制在開發(fā)過程中無(wú)摩擦的整合砰识。
隨著時(shí)間的推移能扒,開發(fā)人員將接受有關(guān)規(guī)則的教育,并且正確的決策將盡早被采納辫狼。
由于自動(dòng)和持續(xù)地檢查質(zhì)量初斑,重點(diǎn)關(guān)注最近的變化,無(wú)論是在Visual Studio還是DevOps中膨处,團(tuán)隊(duì)都會(huì)建立更好的代碼见秤。
高管可以控制質(zhì)量回報(bào)。


3. Quality Gates:質(zhì)量門

質(zhì)量門是對(duì)代碼質(zhì)量的檢查真椿,必須在發(fā)布之前執(zhí)行鹃答,質(zhì)量門可以被視為軟件質(zhì)量的通過/失敗標(biāo)準(zhǔn)。
CppDepend提出了十多個(gè)默認(rèn)質(zhì)量門突硝,它們與技術(shù)債務(wù)金額测摔、代碼覆蓋率、特別嚴(yán)重的問題有關(guān)解恰。

質(zhì)量門

當(dāng)某些標(biāo)準(zhǔn)未被驗(yàn)證時(shí)避咆, 可以將質(zhì)量門(Gates)用做構(gòu)建失敗舟肉。


4. In-Depth Issues Management:深層次問題管理

作為靜態(tài)分析器,CppDepend可能會(huì)發(fā)現(xiàn)影響真實(shí)世界代碼庫(kù)的數(shù)百甚至數(shù)千個(gè)問題查库。

在Visual Studio中突出顯示最近的代碼更改路媚,應(yīng)該在提交任何代碼到源代碼控件之前修復(fù)。即使在到達(dá)源服務(wù)器之前樊销,它們也可以被修復(fù)整慎。因此,代碼質(zhì)量仍然受到控制围苫,沒有重大的前期投資。

具體來(lái)說剂府,對(duì)于所有全局?jǐn)?shù)字(問題數(shù)量拧揽,違反規(guī)則數(shù)量淤袜,債務(wù)估計(jì)...),儀表板還顯示了這些數(shù)字自基線以來(lái)的差異烦周。數(shù)字本身可以被單擊來(lái)生成針對(duì)問題集的C#LINQ查詢读慎。這些查詢的結(jié)果將以智能和可瀏覽的方式呈現(xiàn)相關(guān)問題蚜退。

這種靈活的方法帶來(lái)幾個(gè)好處:

  • 您可以從基線以來(lái)的新問題進(jìn)行過濾幅恋。
  • 查詢匹配的問題可以通過代碼元素或規(guī)則分組腐巢。
  • 對(duì)于每個(gè)問題冯丙,估算成本估算,因此對(duì)業(yè)務(wù)的影響被稱為債務(wù)和年度利益或嚴(yán)重程度利虫。
  • 有關(guān)問題集的查詢可以進(jìn)行細(xì)化和保存蹄溉,以確定首先要解決的問題法瑟。
  • 通過單擊酥夭,可以從Visual Studio和VS Team Services CppDepend擴(kuò)展中的問題跳轉(zhuǎn)到源代碼。
功能展示
功能展示
功能展示

5. Code Quality Metrics:代碼質(zhì)量指標(biāo)

有很多方法來(lái)測(cè)量代碼庫(kù)瓜客。最常見的方式是計(jì)算代碼行數(shù)。該指標(biāo)粗略估計(jì)了開發(fā)代碼庫(kù)所付出的努力。它還允許您通過精確定位fat方法和類來(lái)獲得質(zhì)量水平。
CppDepend計(jì)數(shù)代碼行數(shù)。
它還帶有80多個(gè)其他代碼指標(biāo)乡范。其中一些與代碼組織(類或命名空間的數(shù)量芋膘,類中聲明的方法的數(shù)量...)有關(guān),另外一些與代碼質(zhì)量(復(fù)雜性霸饲,注釋的百分比为朋,參數(shù)數(shù)目,內(nèi)聚力)有關(guān)厚脉,還有一些與代碼的結(jié)構(gòu)有關(guān)(哪些類型是最常用的习寸,繼承的深度...)。


6. Explore Existing Architecture:架構(gòu)瀏覽

了解代碼庫(kù)的元素如何相互依賴是至關(guān)重要的信息殴蓬。思考層應(yīng)如何交互,創(chuàng)建界面和事件以避免具體類之間的依賴關(guān)系蟋滴。

隨著代碼庫(kù)的增長(zhǎng)染厅,越來(lái)越多的時(shí)間用于管理和分析依賴關(guān)系。如果重構(gòu)這段代碼脓杉,全局會(huì)有什么影響糟秘?這個(gè)層是否允許直接訪問數(shù)據(jù)庫(kù)简逮?如果該代碼調(diào)用此方法球散,會(huì)不會(huì)不小心凍結(jié)UI線程?

CppDepend提供了幾個(gè)可以進(jìn)行有效的依賴關(guān)系管理的工具散庶。幾秒鐘內(nèi)蕉堰,就可以知道如果重構(gòu)一個(gè)類,代碼中的哪個(gè)部分將受到影響悲龟,可以建議是否意外創(chuàng)建了層次依賴關(guān)系違規(guī)屋讶,可以精確地確定代碼中哪一部分依賴于特定的層組件,可以列出和給定方法聯(lián)系的方法...

示例
示例
示例
示例

7. Trend Monitoring:趨勢(shì)監(jiān)控

CppDepend允許創(chuàng)建趨勢(shì)圖须教。趨勢(shì)圖是在分析時(shí)間隨時(shí)間記錄的趨勢(shì)指標(biāo)值皿渗。默認(rèn)情況下斩芭,超過50種趨勢(shì)指標(biāo)可用,可以輕松創(chuàng)建自己的趨勢(shì)指標(biāo)乐疆。

趨勢(shì)圖

趨勢(shì)圖顯示在CppDepend儀表板上划乖。默認(rèn)情況下有一些趨勢(shì)圖可供顯示:

  • 代碼行,
  • 違反規(guī)則數(shù)量和代碼規(guī)則違規(guī)的數(shù)量挤土,
  • 各種代碼質(zhì)量指標(biāo)的最大和平均值琴庵,
  • 第三方使用。
    趨勢(shì)圖可以定制仰美,并且可以輕松創(chuàng)建自己的趨勢(shì)圖迷殿,以顯示默認(rèn)趨勢(shì)指標(biāo)和/或自定義趨勢(shì)指標(biāo)。


    定制趨勢(shì)圖

使用CppDepend測(cè)量代碼庫(kù)趨勢(shì)帶有許多靈活的子功能:

  • 代碼行咖杂,
  • 趨勢(shì)圖可以創(chuàng)建和定制庆寺,
  • 新趨勢(shì)指標(biāo)可以通過CQLinq查詢編寫。
新趨勢(shì)查詢

可以在主要的CppDepend UI和報(bào)告中顯示和分析趨勢(shì)圖诉字。


8.Diagnostics:診斷

CppDepend操作使用CQlinq易于瀏覽的所有Clang診斷程序止邮。Clang提供了數(shù)百個(gè)診斷。

  • 未使用的代碼奏窑,
  • 不推薦使用导披,
  • 演員問題,
  • 轉(zhuǎn)換問題埃唯,
  • 比較問題撩匕,
  • OpenMP問題。
診斷

9. Diagrams:圖

CppDepend輸出幾種圖表:


Tren Charts
互斥與不穩(wěn)定(Abstracness vs. Instability)
Treemap Metric
Dependencies Matrix:依賴矩陣
Dependencies Graph:依賴圖

10.Compare Builds and Code Diff:比較構(gòu)建和代碼差異

在軟件開發(fā)中墨叛,產(chǎn)品不斷發(fā)展止毕。因此,開發(fā)人員和架構(gòu)師必須注意代碼庫(kù)中的修改∧茫現(xiàn)代源代碼存儲(chǔ)庫(kù)處理增量開發(fā)扁凛。他們可以列舉2個(gè)版本的源代碼文件之間的區(qū)別。

CppDepend可以告訴你2個(gè)版本之間有什么變化闯传,但它不僅僅是簡(jiǎn)單的文本比較谨朝。它可以區(qū)分注釋更改和代碼更改,添加/刪除的內(nèi)容以及剛修改的內(nèi)容甥绿。

使用CppDepend字币,可以看到代碼指標(biāo)如何發(fā)展,是否知道組件之間的耦合是否增加共缕。

一旦破壞兼容性更改出現(xiàn)洗出,CppDepend也可以連續(xù)檢查修改以提醒用戶。

儀表板比較2個(gè)版本的POCO
選擇代碼在兩個(gè)版本之間更改的方法列表

11. Detect Dependency Cycle:檢測(cè)依賴循環(huán)

保持代碼庫(kù)整潔的最簡(jiǎn)單方法是避免其組件之間的依賴循環(huán)图谷。組件可用于將大量代碼分割成更小和可理解的部分翩活。如果依賴關(guān)系周期涉及N個(gè)分量阱洪,則這些N個(gè)分量代表單個(gè)超分量。實(shí)際上菠镇,N個(gè)較小的組件的好處就會(huì)丟失:任何組件都可能被任何其他組件的改變潛在地破壞澄峰,不能單獨(dú)測(cè)試組件與N-1個(gè)其他組件的隔離,最后辟犀,所有N個(gè)組件必須在一起進(jìn)行版本化和部署俏竞。

無(wú)論認(rèn)為組件是類、命名空間堂竟、項(xiàng)目還是組合魂毁,CppDepend都會(huì)檢測(cè)它們之間的依賴關(guān)系。它還可以幫助您找到正確的方式來(lái)擺脫特定的依賴關(guān)系周期出嘹。一旦依賴關(guān)系周期被刪除油湖,CppDepend可以在一個(gè)周期被意外創(chuàng)建的情況下持續(xù)檢查你的代碼庫(kù)來(lái)警告你缕陕。

檢測(cè)依賴循環(huán)

12. Generate Custom Reports From your Build Process:從構(gòu)建過程生成自定義報(bào)告

CppDepend可以通過CppDepend.Console.exe分析源代碼和C ++ Projects。每次分析代碼庫(kù)時(shí),CppDepend都會(huì)生成一個(gè)可以通知開發(fā)狀態(tài)的報(bào)告娄涩∷诚祝可以自定義報(bào)告中顯示的部分塌鸯,甚至可以提供自己的XSL表格以進(jìn)行完全自定義瞎嬉。

還可以構(gòu)建自己的一套CQLinq約束,這些約束將在每個(gè)分析時(shí)進(jìn)行檢查扰肌。每次違反約束時(shí)抛寝,報(bào)告將提醒用戶。此功能使自動(dòng)設(shè)計(jì)和質(zhì)量回歸測(cè)試成為現(xiàn)實(shí)曙旭。
CppDepend制作的標(biāo)準(zhǔn)報(bào)告:

標(biāo)準(zhǔn)報(bào)告

報(bào)告示例:


END:介紹完畢盗舰。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市桂躏,隨后出現(xiàn)的幾起案子钻趋,更是在濱河造成了極大的恐慌,老刑警劉巖剂习,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蛮位,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡进倍,警方通過查閱死者的電腦和手機(jī)土至,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門购对,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)猾昆,“玉大人,你說我怎么就攤上這事骡苞〈刮希” “怎么了楷扬?”我有些...
    開封第一講書人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)贴见。 經(jīng)常有香客問我烘苹,道長(zhǎng),這世上最難降的妖魔是什么片部? 我笑而不...
    開封第一講書人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任镣衡,我火速辦了婚禮,結(jié)果婚禮上档悠,老公的妹妹穿的比我還像新娘廊鸥。我一直安慰自己,他們只是感情好辖所,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開白布惰说。 她就那樣靜靜地躺著,像睡著了一般缘回。 火紅的嫁衣襯著肌膚如雪吆视。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,792評(píng)論 1 290
  • 那天酥宴,我揣著相機(jī)與錄音啦吧,去河邊找鬼。 笑死拙寡,一個(gè)胖子當(dāng)著我的面吹牛丰滑,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播倒庵,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼褒墨,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了擎宝?” 一聲冷哼從身側(cè)響起郁妈,我...
    開封第一講書人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎绍申,沒想到半個(gè)月后噩咪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡极阅,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年胃碾,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片筋搏。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡仆百,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出奔脐,到底是詐尸還是另有隱情俄周,我是刑警寧澤吁讨,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站峦朗,受9級(jí)特大地震影響建丧,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜波势,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一翎朱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧尺铣,春花似錦闭翩、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至侄非,卻和暖如春蕉汪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背逞怨。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工者疤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人叠赦。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓驹马,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親除秀。 傳聞我的和親對(duì)象是個(gè)殘疾皇子糯累,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348

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