雖然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的信息
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ù)通用編程語言姻蚓,提供原生的支持。其劣勢集中在誤報率較高匣沼,且缺乏對大型代碼庫的支持狰挡。
作為一個靜態(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ù)手頭項目的特征扔涧,酌情進行選擇與試用。