博客 / 詳情

返回

產品好不好,誰説了算?Sonar提出分析的性能指標,幫助您輕鬆判斷產品性能及表現

近日,Sonar產品經理宣佈了Sonar全新的、明確的分析性能指標,以更好地與其他有相同指標或結果的工具進行比較。
作為SonarQube授權合作伙伴,創實持續關注代碼安全領域,為中國用户帶來全球範圍內的優秀工具和解決方案,幫助企業實現開發運營安全一體化。
在本文中,Sonar產品經理Alexandre Gigleux詳細解讀了Sonar最新提出的性能指標、目前的指標完成進度,以及接下來的首要任務。

在此,我很自豪地宣佈Sonar性能分析指標。一直以來,當用户討論到Sonar分析性能時,會分為兩種情況:

  • 挑戰:用户不斷嘗試突破極限,報告他們認為應改進的問題案例。
  • 滿意:由於用户已對要運行數小時且總是產生大量誤報結果的SAST工具習以為常,他們對Sonar感到滿意。

但無論是面對以上何種情況,我們都不知道該如何應對。因為最初我們在開始構建分析引擎時,腦海中沒有明確的性能指標。方向尚不明確,是否達到指標這一命題就不成立。因此,在您告知我們性能還不夠好的時候,我們並不清楚您的這些建議是否可取。
這就是為什麼我們最終決定需要建立明確的性能分析指標:這樣我們就不會將自己的產品與其它可能沒有相同指標或結果的工具進行簡單的比較,也不會主觀地、從個人角度去評價分析“看起來”怎麼樣。
現在,我們可以明確地告知您可以從我們的產品中獲得些什麼,以及在標準化的條件下,分析項目所需要的時間。
那麼,就讓我們看看這些指標是什麼,以及這些指標的實現情況。

第一次分析需要多長時間?

第一次分析應該理解為對一個分支的所有文件進行分析。當您在SonarQube或SonarCloud中加入新項目時,以及創建新分支時,這種情況都會發生。在這種情況下,您可以期待在不到幾分鐘的時間內就能看到項目的總體狀態,具體幾分鐘則取決於項目規模:


根據在SonarCloud上的測量結果,我們的產品在處理M、L和XL類項目時都達標了——這些項目中的95%是在指標時間範圍內完成分析的。因為開始分析階段的時間消耗,XS和S類項目尚未達到要求。

代碼變更分析需要多長時間?

代碼變更分析發生通常在以下兩種情況下發生:

  • 創建一個pull request後,希望在合併前驗證PR質量。
  • 直接將文件提交到分支(主分支或其它分支),而未使用pull/merge request機制。

在這種情形下,我們自然地期望分析時間與變更集合的規模(添加或更新代碼的數量)成正比,而不是像第一次分析那樣需要等待相同的時間。
在這裏,您可以期待在幾分鐘內看到您的項目、分支或PR更新後的質量關口(Quality Gate,也譯作質量門),具體需要花幾分鐘則取決於代碼更改的規模:

到目前為止,我們為實現這些指標做了哪些工作?

我們的新定義:一個項目可以包含多種編程語言。我們以項目中代碼密度最大的語言來給項目命名,這讓將一個特定的項目描述為Java、TypeScript或PHP項目變得很方便。

第一次分析執行時間

就Java目而言,我們對其總體分析性能進行了改進。與SonarQube 9.3相比,SonarQube 9.4的Java分析速度平均提速30%。一位測試了該版本的客户表示,他能夠在不到18分鐘的時間內分析一個1M LOC項目。這完全達到了我們的指標(<40分鐘),表明我們的產品已達到了良好的分析效果。

對於Kotlin項目,我們將分析性能提高了10倍,達到了性能指標。
就C/C++項目而言,從SonarQube 9.5開始,我們默認的分析是多線程的。在這之前,它是一個可選選項,最新版本中我們將其改成了默認選項。通過此變動,分析中會分配到更多的CPU,從而更容易達到預期的指標。

代碼變更分析執行時間

對於Sonar所覆蓋的許多語言,我們不需要從所有文件中收集信息來提高結果質量,這種情況下,只需要分析pull request涉及到的文件。從2022年5月3日起,這一功能可以從SonarQube 9.3和SonarCloud上獲得。如果pull request中包含CSS、HTML、XML、Ruby、Scala、Go、Apex、CloudFormation、Terraform、Swift、PL/SQL、T-SQL、ABAP、VB6、Flex和RPG等代碼的變更,則pull request的分析效率通常會得到一些改善。

對於主體是Java代碼的pull request,由於我們不再需要對整個項目級的數據進行分析,而只針對更改文件執行分析,所以速度還會再提升8-25%。
總的來説提升了,但是我們還未達到我們代碼變更分析時長的指標。

接下來,我們要做什麼?

作為我們的首要任務,我們希望優化Java項目的pull request分析時間。我們將藉助存儲項目級數據的新緩存機制實現這一點,這將確保我們的分析結果擁有較高的準確性。為什麼首先優化Java?因為Java是Sonar支持的第一種語言,也是被我們用户使用最多的一種語言。此外,Sonar的開發人員使用了大量Java,因此我們能夠在發佈前輕鬆發現問題。

接下來,我們將藉助同一緩存系統優化分支的代碼更改分析。

當運行穩定後,我們會將其擴展到JS/TS、PHP、Python和COBOL等語言。

想要體驗 SonarQube或試用SonarCloud,請聯繫SonarQube中國官方授權合作伙伴——創實 ,我們提供SonarQube產品的諮詢、銷售、 實施、培訓及技術支持服務。

作者簡介:

ALEXANDRE GIGLEUX

產品經理

文章來源:https://blog.sonarsource.com/...

user avatar haifanwu 頭像
1 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.