1. 程式人生 > 其它 >5 款阿里常用程式碼檢測工具,免費用!

5 款阿里常用程式碼檢測工具,免費用!

簡介:5 款阿里常用程式碼檢測工具免費體驗,僅需 2 步,Cherry鍵盤、公仔抱回家,100%拿獎!

作者 | 喻陽

面臨問題

在日常研發過程中,我們通常面臨的程式碼資產問題主要分為兩大類:程式碼質量問題和程式碼安全漏洞。

1、程式碼質量問題

程式碼質量其實是一個老生常談的話題,但問題是大家都知道它很重要,卻又不知道如何去提升和維護這一團隊的共同財產。一方面開發人員可能為了功能及時上線,疏忽了對質量的把控,另一方面開發人員編碼習慣和程式理解風格各異。

長期下來程式碼質量下降通常會自成因果,因為業務壓力大而趨於下降,又因此開發效率下降,進一步加大業務壓力,導致惡性迴圈。

2、程式碼安全問題

安全類問題往往隱藏在缺乏安全意識的編碼邏輯和未經檢測或維護的開源依賴元件中,難以在日常開發和程式碼評審中被及時察覺。

程式碼安全問題也可以分兩個方面進行分析:

  • 編碼安全問題,即:安全規範類問題,通過避免不符合規範的程式碼進入企業程式碼庫,減少隱私資料洩露、注入類風險、安全策略漏洞的出現。
  • 依賴安全問題,即:開源依賴三方元件引入的安全漏洞。根據 Synopsys 2020 開源安全報告顯示,99%以上的組織使用了開源技術。使用開源元件本身帶來的技術交流和站在巨人肩膀上協作、降低開發成本、加快迭代週期、提高軟體質量等優勢已經不必贅述,但是,開源軟體帶來一系列便利的同時,也暗藏大量安全風險,據審計,75%的程式碼庫存在安全漏洞,其中 49%包含高危問題,另外 82%的程式碼庫仍在使用超過 4 年的 outdated 元件。

程式碼安全類問題,一方面也需要進行准入性檢查,根據業務場景和規範配置安全編碼規範檢測和卡點。另一方面需要定期維護,對於新爆發出的安全漏洞進行及時察覺並修復。

5 款阿里常用程式碼監測工具推薦

1、程式碼質量檢測

  • Java 程式碼規約檢測

阿里巴巴在實踐過程中,各個組織由於歷史隔閡和業務風格差異,工程結構差別很大,程式碼風格迥異,規範不一,溝通成本大,合作效率低,維護成本高。集團發展到現在的規模,需要專業化的技術集團軍迭代式、集約式發展,而不是動輒重複造輪,而真正專業化的團隊一定會有統一的開發規約,這代表效率、共鳴、情懷、可持續。

基於上述背景,阿里制定了《阿里巴巴 Java 開發手冊》,作為阿里內部 Java 工程師所遵循的開發規範,涵蓋程式設計規約、單元測試規約、異常日誌規約、MySQL 規約、工程規約、安全規約等。這是近萬名阿里 Java 技術精英的經驗總結,並經歷了多次大規模一線實戰檢驗及完善。

制訂交通法規表面上是要限制行車權,實際上是保障公眾的人身安全。試想如果沒有限速,沒有紅綠燈,沒有靠右行駛條款,誰還敢上路。同理,對軟體來說,開發規約絕不是消滅程式碼內容的創造性、優雅性,而是限制過度個性化,推行相對標準化,以一種普遍認可的方式一起做事。

因此,程式碼規約的目標是:1、碼出高效:標準統一,提升溝通效率和研發效能。2、碼出質量:防患未然,提升質量意識和系統可維護性,降低故障率。3、碼出情懷:工匠精神,追求極致的卓越精神,打磨精品程式碼。

程式碼規約通過 IDE 檢測外掛、流水線整合測試、程式碼評審整合等工具手段,深度融入了阿里巴巴的各種開發活動中。與此同時,在雲效程式碼託管平臺 Codeup 中,也內建集成了 Java 程式碼規約檢測能力,為開發人員在程式碼提交和程式碼評審階段提供更為方便的快速檢查。

  • 程式碼智慧補丁推薦

缺陷檢測和補丁推薦幾十年來一直是軟體工程領域的難題,又是研究者和一線開發者最為關心的問題之一,這裡講的缺陷不是網路漏洞、系統缺陷,而是隱藏在程式碼中的缺陷。幫助開發者識別這些缺陷,並進行修復,能夠大幅提升軟體質量。

基於業界和學術界較為流行的缺陷檢測手段,並分析和規避其侷限性,阿里巴巴 Codeup 的演算法工程師們提出了一種新的演算法,實現更加精準和高效的分析程式碼缺陷並推薦優化方案,該演算法已被國際軟體工程大會(ICSE)收錄。

1、根據 commit message 中的關鍵詞找出修復型的 commit,只取涉及檔案小於 5 個的 commit(涉及檔案過多的 commit 可能會稀釋修復行為)。這個步驟十分依賴開發者良好的 commit習慣,希望開發者能用好 commit,寫好 message。

2、從這些修復型 commit 中以檔案級別提取刪除內容和新增內容,即 Defect and Patch pairs(DP Pair),這一步難免會有很大的噪聲。

3、利用改進的 DBSCAN 方法對 buggy 和 patch 對同時聚類,將相似的缺陷和補丁程式碼聚在一起。(也可以做片段級的聚類)通過將相似的缺陷和修復做聚類,減少了上一步留下的大量噪聲,同時歷史程式碼提交中大家共同犯過的錯具有很強的借鑑意義。

4、利用自研的模板提取方法總結缺陷程式碼和補丁程式碼,並根據不同的變數來適配上下文。

程式碼補丁推薦服務目前應用於合併請求的程式碼自動掃描場景,在程式碼評審過程中檢測可優化程式碼片段並給出優化建議,將歷史評審中的人工經驗沉澱下來持續提升企業程式碼質量。

2、程式碼安全檢測

  • 敏感資訊檢測

近年來,業內發生多起敏感資訊(API Key、Database credential、OAuth token 等)通過某些站點被無意識地洩露出去的事件,給企業帶來了安全風險,甚至直接的經濟損失。

在我們的實踐過程中,我們也面臨了類似的問題,硬編碼問題出現非常高頻,而又缺乏有效的識別機制。因此開發者和企業管理者亟需一款穩定健全的敏感資訊檢測方法和系統。通過調研我們瞭解到,目前已有的敏感資訊檢測工具大多單純使用規則匹配或資訊熵技術,導致其召回率或準確率難以滿足預期。因此我們在規則匹配和資訊熵技術的基礎上,結合上下文語義,提出了一款採用多層檢測模型的敏感資訊檢測工具——SecretRadar。

SecretRadar 的技術實現思路主要分為三層,第一層採用規則匹配這種傳統敏感資訊識別技術,規則匹配具有良好的準確度和擴充套件性,但是非常依賴比較固化的長度、字首、變數名,難以應對不同開發者的不同編碼風格,容易造成漏報。針對難以固定規則捕捉的場景,在第二層我們採用了資訊熵演算法。資訊熵演算法用於衡量程式碼行混亂程度,對隨機生成型金鑰和隨機身份資訊識別效果良好。但資訊熵演算法也有其侷限性,召回率提升的同時誤報也增多了。因此在第三層我們採用了模板聚類和上下文語義分析等方法進行過濾優化,針對資訊熵結果聚合提取常見關鍵字,結合上下文語義和當前語法結構提升模型準確率。

敏感資訊檢測工具不止服務我們內部開發同學,在雲效平臺上也支援了超過 2 萬代碼庫、3 千家企業,幫助開發者解決了超過 9 萬硬編碼問題。

  • 原始碼漏洞檢測

阿里巴巴採用 Sourcebrella Pinpoint 源傘檢測引擎,進行原始碼漏洞檢測,主要涉及到注入類風險和安全策略類風險檢測。

源傘檢測引擎是香港科技大學 Prism 研究組在過去十年的時間內的技術研究成果。該引擎吸收了國際上近十年的軟體驗證技術研究成果,並且加以改進和創新,獨立設計和實現了一套技術領先的軟體驗證系統。其主要驗證方式是將程式語言翻譯成一階邏輯和線性代數等數學表達,通過形式化驗證技術推理缺陷成因。迄今為止,一共發表了四篇核心技術相關的論文,一篇 PLDI 和三篇 ICSE,研究型的同學可以點選文末連結閱讀。

    • 源傘檢測引擎能夠在活躍度比較高的大型開源專案中發現隱藏超過 10 年的缺陷,以 MySQL 檢測 [5] 為例,這些缺陷都是市面上其他檢查工具無法掃描出來的,並且能夠在 1.5 小時完成 200 萬行大型開源專案的檢測。在保持掃描的高效率同時,還能夠將誤報率控制在 15%左右。對於複雜且體量龐大的分析專案來說,源傘檢測引擎所表現的掃描效率和誤報率在業內也處於領先水平。

「原始碼漏洞檢測」集成了源傘檢測引擎的安全分析能力,能夠在分析精度、速度、深度等方面均衡得到較好的分析結果,具備的核心優勢:

1、支援分析位元組碼,二三方包的程式碼邏輯都不會遺漏;

2、擅長跨函式長呼叫鏈路的邏輯分析;

3、可以處理引用、指標等帶來的間接資料修改;

4、精度高,相比於同類工具,如 Clang、Infer,在精度和有效問題識別上表現更佳;

5、效能好,目前單應用平均 5 分鐘左右分析完畢;

源傘檢測引擎可以精確的追蹤程式碼中的資料流向,擁有高深度高精度的函式呼叫鏈分析能力,可以找到跨越多層函式的深度問題。在發現缺陷的同時還能給出問題觸發的過程,完整展示相關的控制流以及資料流,這樣可以輔助開發者快速理解和修復問題,在軟體開發早期更低成本地提高軟體質量,大幅減少生產成本,提高研發效能。
  • 依賴包漏洞檢測

我們期望對於開源元件的安全可信程度,為開發者建立一種有效的檢測和管理機制,因此我們實現了依賴包漏洞檢測服務和依賴包安全問題報表。在實踐過程中,開發者普遍反映依賴包漏洞修復成本大多高於修復自身編碼漏洞,從而不願意或難於處理此類問題。究其原因,一方面是大部分漏洞並非直接引入,而是依賴的第三方元件又間接依賴了其它元件,另一方面是不確定具體哪個版本是乾淨可用且相容的。

為了降低開發者的修復難度,我們對依賴項的引用關係進行了進一步識別分析,清晰的標註出直接依賴和間接依賴,並定位到具體的依賴包引入檔案,方便開發者快速找到關鍵問題位置。同時,通過對漏洞資料的聚合,智慧推薦修復漏洞的版本升級建議,因為一個依賴可能對應多個漏洞問題,開發者可以針對建議評估是否接受採用。通過分析不同版本間的 API 變更和程式碼呼叫鏈路,衡量版本升級成本,為開發人員自動建立修復評審,最大程度的幫助開發人員更高效地維護程式碼安全。

無論是程式碼質量檢測還是程式碼安全檢測,以上 5 款阿里程式碼自動檢測工具,開發者們都可以在雲效 Codeup 內免費體驗。

檢測服務應用

1、程式碼提交

檢測服務的最直接的應用便是在程式碼提交場景中,企業可以根據業務場景和規範,制定和配置不同專案的檢查方案。當開發者將程式碼變更推送至服務端,自動觸發當前程式碼庫配置的檢測服務,可以為開發者檢查當前 commit 版本中的全量問題,幫助開發者及早發現新增問題,並確認存量問題的解決情況。通過接入上述檢測服務,可以從程式碼規範、程式碼質量、程式碼安全等多個維度進行測試左移,在開發人員剛完成編碼時就進行快速檢測和反饋。

2、程式碼評審

在企業專案協同中,開發者多以合併請求的方式將特性分支程式碼合入主幹分支,合併請求過程需要專案開發負責人或模組負責人進行程式碼評審和人工檢查。一方面人工審查程式碼需要投入較大精力,另一方面人工審查難以覆蓋程式碼各個維度的潛在問題。因此,通過合理配置檢測服務,可以極大地減少人工評審的工作量,加速程式碼評審的工作過程。同時,通過豐富、篩選、沉澱檢測規則集和人工經驗,檢測服務可以更加貼合企業的業務場景進行卡點,避免不符合規範或存在風險的程式碼進入企業程式碼庫。

3、程式碼度量

檢測服務除了在程式碼提交和程式碼評審階段幫助開發者及早發現問題並解決問題,還可以幫助管理者進行企業程式碼質量度量和風險視覺化。通過建設企業級報表服務和專案任務管理,可以更為直觀地度量專案演進過程中的安全問題和質量問題。

活動推薦

5 款阿里常用程式碼檢測工具免費體驗,僅需 2 步,Cherry鍵盤、公仔抱回家,100%拿獎!

都 2021 年了,你還認為程式碼檢測=語法/風格掃描?

大廠每年數百萬採購的掃描軟體,都在採購什麼?如何不花錢白嫖?

落地 DevOps 的第 2 步是什麼?

什麼是接入成本最低的質量和安全提升工具?

雲效 DevOps 實驗室特推出【1 分鐘程式碼自動捉蟲】活動

1-3 分鐘,給你的程式碼做個全身體檢吧。


體驗完成,還可抽 Cherry 機械鍵盤、阿里雲定製 GIt 命令滑鼠墊、積木星球等,1000 分禮品,100%中獎

點選下方連結,立刻參與活動!注:本活動僅限雲效新使用者參加

https://developer.aliyun.com/adc/series/activity/bugdetect

原文連結
本文為阿里雲原創內容,未經允許不得轉載。