適合開發(fā)者的七種Python代碼審查工具

雖然Python語言可謂目前最為靈活的開發(fā)語言之一纺且,但是開發(fā)人員往往會濫用其靈活性,甚至會違反相關(guān)的標準稍浆。因此载碌,Python代碼也經(jīng)常會出現(xiàn)如下常見質(zhì)量問題:

導入了一些未曾用到的模塊

函數(shù)在各種調(diào)用中缺少參數(shù)

缺少適當?shù)母袷娇s進

在圓括號猜嘱、方括號或大括號的前后缺少恰當?shù)目崭?/p>

顯然,上述問題不但會影響代碼的可讀性嫁艇,而且會使得代碼的審查工作變得更為復(fù)雜朗伶。為此,我們需要通過諸如PyLint或Flake8之類的靜態(tài)分析工具來解決此問題步咪,并減少各種可能出現(xiàn)的誤報現(xiàn)象论皆。

與此同時,隨著軟件開發(fā)團隊規(guī)模的擴大猾漫,許多開發(fā)人員經(jīng)常需要使用靜態(tài)代碼分析工具(Static Code Analysis Tool)点晴,在開發(fā)的早期階段,協(xié)助團隊盡早地識別出各種代碼級別的錯誤静袖,以及反模式(anti-patterns)上的漏洞觉鼻。

總體而言俊扭,靜態(tài)代碼分析工具會在每次提交或提取請求時队橙,分析目標程序代碼,并在軟件產(chǎn)品的實際部署與發(fā)布之前萨惑,發(fā)現(xiàn)程序代碼在質(zhì)量捐康、安全性、以及樣式等各類問題庸蔼。在本文中解总,我將向您介紹適合開發(fā)者的七種最佳Python代碼審查工具,以方便您根據(jù)實際開發(fā)項目做出選擇姐仅。

1.?DeepSource

DeepSource針對各種通用編程語言(例如Python花枫、Javascript、Golang等)掏膏,提供了靜態(tài)代碼分析劳翰。在實際使用中,DeepSource會生成一個能夠被嵌入在存儲庫中的配置文件馒疹,以便對代碼進行持續(xù)分析佳簸。由于提供了自定義的功能,因此我們可以使用DeepSource來輕松地開展颖变,針對Python代碼的靜態(tài)分析生均。

DeepSource的主要功能包括:

可以通過單個文件配置,來進行持續(xù)分析

支持諸如Black和AutoPep8之類的風格代碼排版工具

能夠?qū)γ總€拉取請求進行質(zhì)量檢查

提供對于常見問題的自動修復(fù)

可嵌入到Travis CI之類的CI/CD管道中腥刹,以提高測試覆蓋率

與其他各種靜態(tài)代碼分析工具相比马胧,DeepSource提供了較低的誤報率和解決用時。由于提供了與對應(yīng)框架的訪問權(quán)限衔峰,因此維護人員可以輕松地使用DeepSource進行應(yīng)用審查佩脊。

此外录别,為了方便對私有存儲庫執(zhí)行各項操作,DeepSource能夠?qū)τ诿總€拉取請求或提交邻吞,使用專用的令牌來獲取代碼组题,并且在隔離的環(huán)境中進行分析。而在分析完成后抱冷,它會主動清除代碼庫崔列,以減少安全風險的暴露。

2.?Codacy

Codacy可以為各種通用編程語言(如Python)提供代碼審查旺遮,提交有關(guān)代碼覆蓋率赵讯、重復(fù)率和復(fù)雜性等方面的報告。同時耿眉,它可以幫助開發(fā)人員在保持代碼完整性的基礎(chǔ)上边翼,開展“純凈”的代碼審查。

Codacy的主要功能包括:

提供代碼審查的自動化

可以持續(xù)分析代碼的質(zhì)量

通過提供各種自動化的資源建議鸣剪,來提醒開發(fā)人員

可以通過屏蔽“噪聲”组底,讓用戶專注于新出現(xiàn)的問題

能夠單獨地分析各個拉取請求與提交

主要缺點是:

無法讓開發(fā)人員對發(fā)現(xiàn)的問題進行優(yōu)先級排序

缺少可導出代碼模式的功能

設(shè)置與配置頁面較為復(fù)雜

誤報率較高

3.?SonarQube

SonarQube以執(zhí)行自動檢查的方式,提供了對于代碼質(zhì)量的持續(xù)分析筐骇。作為一種靜態(tài)代碼分析工具债鸡,它可以發(fā)現(xiàn)Python中的代碼錯誤、反模式铛纬、以及安全漏洞厌均。當然,SonarQube也很容易與CI/CD管道相匹配告唆,進行有效的代碼質(zhì)量管理棺弊。

SonarQube自帶了兩個子工具,其中Sonar Scanner負責執(zhí)行分析擒悬,SonarQube Server則負責對結(jié)果進行管理和保存模她。

SonarQube的主要功能包括:

可識別諸如安全漏洞,以及執(zhí)行路徑錯誤等棘手的問題

通過提供對Webhooks(微服務(wù)API使用的一種范式)和API的訪問茄螃,來自動執(zhí)行代碼的審查過程

可根據(jù)不同的要求和實踐缝驳,來加強質(zhì)量關(guān)(quality gate)

通過提供各種流行IDE的插件,從而減輕了對整體軟件包的需求

主要缺點是:

缺乏設(shè)置自動分析和警報能力

缺乏對某些問題的選擇性忽略或不予修復(fù)功能

由于需要通過安裝軟件包和插件归苍,來設(shè)置客戶端分析和服務(wù)器端存儲用狱,因此為Python項目設(shè)置SonarQube較為復(fù)雜,您可以查看其官方文檔拼弃,以了解更多有關(guān)如何為Python項目配置SonarQube的信息

4.?Veracode

Veracode是另一款流行的Python代碼審查工具夏伊。它不僅提供了針對常見漏洞和安全暴露的掃描,而且能夠通過靜態(tài)分析吻氧,來識別并報告反模式等問題溺忧。此外咏连,Veracode還可以提供包括交互式分析和動態(tài)分析在內(nèi)的其他企業(yè)級產(chǎn)品。

Veracode的主要功能包括:

通過提供開發(fā)者工具鲁森、API和工作流的集成祟滴,以簡化代碼質(zhì)量的檢查

可與DevOps管道無縫集成

其基于SCA代理的掃描,可用于發(fā)現(xiàn)各種問題與漏洞

其代碼庫和許可證可與PyPi(Python Package Index)保持同步

在每次掃描后歌溉,都能轉(zhuǎn)發(fā)有關(guān)風險的評級

主要缺點是:

缺乏一勞永逸的持續(xù)集成設(shè)置

缺乏直觀的用戶體驗

總的說來垄懂,安裝和設(shè)置基于Veracode代理的掃描代理相對比較容易。您可以使用Python的標準軟件包管理器—pip痛垛,來安裝該工具草慧,并執(zhí)行代碼分析。不過匙头,Veracode既缺乏優(yōu)化掃描的功能漫谷,又缺乏針對特定語言的建議。

5.?Checkmarx

Checkmarx是一款應(yīng)用安全性測試和靜態(tài)代碼分析的工具蹂析。它提供了靜態(tài)應(yīng)用測試舔示、運行時(runtime)、交互式測試识窿、依賴項掃描等功能斩郎,可輕松地通過掃描源代碼,來消除各種漏洞喻频。

Checkmarx的主要功能包括:

用戶可使用Checkmarx SAST,來進行靜態(tài)分析肘迎,并查找各種安全漏洞

提供與CI/CD管道的集成

具有直觀易用的用戶界面

提供各種流行的IDE插件

主要缺點是:

誤報率較高

在持續(xù)集成的過程中甥温,需要花費大量時間進行掃描

客觀來說,Checkmarx的優(yōu)勢在于妓布,無需配置即可為大多數(shù)通用編程語言姻蚓,提供原生的支持。其劣勢集中在誤報率較高匣沼,且缺乏對大型代碼庫的支持狰挡。

6.?Coverity

作為一個靜態(tài)分析工具,Coverity旨在查找和修復(fù)各種通用編程語言(如Python释涛、Javascript加叁、Ruby、Java等)中的缺陷唇撬。波音和洛克希德·馬丁等明星公司都會使用Coverity它匕,來進行軟件代碼的測試和掃描。

Coverity的主要功能包括:

通過測試各種可能執(zhí)行到的路徑窖认,來減少誤報率

易于設(shè)置和自定義豫柬,可靈活地滿足開發(fā)需求

提供設(shè)置向?qū)Ц嫦#苑奖阒付≒ython的路徑

能夠輕松地與GitHub、Jenkins和Travis CI等工作流程相集成

主要缺點是:

其許可程度取決于需要分析的代碼行數(shù)

與市場上的同類產(chǎn)品相比烧给,其價格過高

當被測代碼庫龐大且復(fù)雜時燕偶,為了滿足覆蓋范圍,其運行時間較長础嫡。

7.?CodeScene

CodeScene不僅是一款靜態(tài)代碼分析工具杭跪,而且能夠提供行為分析,以方便開發(fā)人員根據(jù)代碼庫的演化驰吓,以識別不同的模式涧尿。用戶既可以通過Git服務(wù)提供商(如Github或Bitbucket)去調(diào)用CodeScene,也可以在本地直接使用檬贰。

CodeScene的主要功能包括:

可以分析版本控制的歷史記錄姑廉,并產(chǎn)生可視化的效果

能夠方便開發(fā)者發(fā)現(xiàn)各種錯誤和問題

可以使用機器學習算法,來查找不同的模式

可以根據(jù)業(yè)務(wù)需求來調(diào)整代碼質(zhì)量

不但能夠確保團隊遠離技術(shù)風險翁涤,還能夠協(xié)助識別生產(chǎn)環(huán)境中的各種瓶頸

主要缺點是:

缺乏直觀的用戶界面

用戶難以跟進錯誤并改進代碼

小結(jié)

綜上所述桥言,代碼審查工具可以協(xié)助開發(fā)人員識別到現(xiàn)有代碼的復(fù)雜性,查找出各種反模式之類的問題葵礼、以及安全缺陷号阿,并能夠讓代碼審查與修復(fù)的過程更加高效。因此鸳粉,您可以根據(jù)手頭項目的特征扔涧,酌情進行選擇與試用。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末届谈,一起剝皮案震驚了整個濱河市枯夜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌艰山,老刑警劉巖湖雹,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異曙搬,居然都是意外死亡摔吏,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門纵装,熙熙樓的掌柜王于貴愁眉苦臉地迎上來征讲,“玉大人,你說我怎么就攤上這事搂擦∥瘸希” “怎么了?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵瀑踢,是天一觀的道長扳还。 經(jīng)常有香客問我才避,道長,這世上最難降的妖魔是什么氨距? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任桑逝,我火速辦了婚禮,結(jié)果婚禮上俏让,老公的妹妹穿的比我還像新娘楞遏。我一直安慰自己,他們只是感情好首昔,可當我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布寡喝。 她就那樣靜靜地躺著,像睡著了一般勒奇。 火紅的嫁衣襯著肌膚如雪预鬓。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天赊颠,我揣著相機與錄音格二,去河邊找鬼。 笑死竣蹦,一個胖子當著我的面吹牛顶猜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播痘括,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼长窄,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了远寸?” 一聲冷哼從身側(cè)響起抄淑,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎驰后,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體矗愧,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡灶芝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了唉韭。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片夜涕。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖属愤,靈堂內(nèi)的尸體忽然破棺而出女器,到底是詐尸還是另有隱情,我是刑警寧澤住诸,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布驾胆,位于F島的核電站涣澡,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏丧诺。R本人自食惡果不足惜入桂,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望驳阎。 院中可真熱鬧抗愁,春花似錦、人聲如沸呵晚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽饵隙。三九已至撮珠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間癞季,已是汗流浹背劫瞳。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留绷柒,地道東北人志于。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像废睦,于是被迫代替她去往敵國和親伺绽。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,933評論 2 355

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