只有累積,沒有奇蹟

2019年2月20日 星期三

[VisualStudio].NET 程式碼品質分析利器 SonarLint

前言 
前陣子部門導入 SonarQube 來分析程式碼品質的工具,會定期掃描當前 GIT 上前後端程式碼分析其代碼質量、Code Smell、找到可能潛在的問題、安全漏洞、單元測試涵蓋率,並可透過視覺化 Dashboard 介面查看目前分析代碼的狀態,且支援分析 25 種以上程式語言,可以說是整合性相當高的程式碼分析工具。今天與同事討論提到 SonarQube 有出擴充工具 SonarLint 與 Visual Studio IDE 做整合,可以在開發時即時做程式碼分析與弱點掃描,不用等到 Commit 後在進行分析,SonarLint 圖片 LOGO 設計十分有趣右下角是紅色波浪提示訊息,今天就來分享 SonarLint 在 Visual Studio 2017 的安裝及基本操作說明。

安裝 SonarLint 
Step 1 : 選擇 Tools > Extension and Updates
Step 2 : 搜尋 sonarlint > 點擊 SonarLint for Visual Studio 2017 > 安裝
Step 3 : 會跳出下載視窗下載檔案,接著關閉 Visual Studio IDE 才會開始執行安裝程式
Step 4 : 會執行 SonarLint for VS 2017 安裝檔案,瘋狂按下一部結束這回合
Step 5 : 安裝完畢之後,重新啟動 Visual Studio > Tools > Extension and Updates 
發現 SonarLint for Viaual Studio 已安裝完成

SonarSource 分析程式碼 
在安裝完畢之後,我們開始簡單寫一段代碼測試看 SonalSource 是否會提示
  1. private void MethodTest2(int param)
  2. {
  3. if (param != null)
  4. {
  5. // todo
  6. }
  7. }
以上述 Sample Code 為例,在安裝完 SonarLint 之後會提示這段 Code 程式碼有問題,將滑鼠移至綠色提示線上會顯示 param != null 這段代碼會永遠成立,因此會判斷會永遠為 true,
另外在下方 Error List 視窗,也會一併提醒分析整個專案後發現可能的問題清單,讓開發者可以清楚地了解異常的原因與發生時機

Sonarsource Rules
透過上述簡單的範例,可以知道 sonalLint 工具是即時的掃描與分析靜態程式碼,在掃描靜態程式碼時是根據甚麼 Rule 來定義正常或異常呢 ? 在 SonarQube 有提供一份規則清單(Sonarsource rules),其中涵蓋了支援程式語言的程式碼品質相關 Rule,主要分為三大項 Code Smells、Bugs、Vulnerability,以 C# 為例截至目前為止支援的 rules (或者可以說建議項目) 有 373 種,其中都有詳細的 
(1) 項目名稱 
(2) 項目詳細說明搭配 Sample code 範例讓你更容易了解原因
更多詳細的內容可以參考 sonarsource rules 

簡單比較 Before&After
或許到這邊還沒有感覺,接下來在 Sonarsource Rules 中隨便找出兩項 Rule 並簡單比較其畫面的差異,可以更有感覺知道安裝後的差異,以下面兩者安裝 sonarLint 套件之後的 sample code 為例,如果發現有更好程式碼寫法時,會有提示告知(個人覺得很明顯 XD),滑鼠移上去也會有提示說明建議的原因,相當實用。

提示 : try catch 沒寫 catch 處理
Generic exceptions should not be ignored

提示 : if 判斷重複時
手誤輸入兩個if 判斷重複

心得
工欲善其事,必先利其器;在過去幫團隊 Code Review 時往往都是透過人工的方式進行,但只要有人就會有江湖遺漏的可能發生,但如果透過工具來輔助可以更有效率,針對有爭議的項目看說明與 sample code 做討論,更有效的達到團隊的共識與提供程式碼的品質,甚至掃到潛在的安全性議題,針對問題盡早發現並排除,才會是比較有效的方式

參考
sonarlint

Related Posts:

  • [C#] Web API - HttpClient 入門HttpClient 介紹 當在開發 Client 程式時,要取得呈現在畫面上的資料會與 API / Server 進行連線動作,在過去可以使用 WebClient 或者是 HttpWebRequest ,在 .NET Framework 4.5 開始微軟提供 HttpClient 類別給開發者使用,命名空間為 Sysyem.Net.Http,它提供靈活且可擴充的 API 來訪問 HTTP 公開的物件,發送 Request 跟… Read More
  • [CheatSheets] LINQ API 廢話 LINQ的好用大家都知道,今天不小心發現LINQ API簡單易上手的圖片介紹檔(大喜 也簡單做個筆記方便日後查詢使用 :D 同場加映 : LINQ Tutorial … Read More
  • [VS2017] 如何在Visual Studio中設定C#建置版本發生情境 前陣子同事從版控取完最新的source Build在Build時跳出錯誤,錯誤訊息如下 Feature 'nameof operator' is not available in C# 5. Please use language version 6 or greater.錯誤訊息中很明確的說明在 code 所使用的 nameof function 僅支援 C# 6以上的版本,但修改的同事並未發生此問題,因此立即解決發生提出… Read More
  • [IIS] HTTP 錯誤 500.21 - Internal Server Error前言 換新筆電後在安裝公司專案過程遇到很多問題,昨天是SQL Server服務異常關閉,今天是專案出現問題是"HTTP 錯誤500.21 - Internal Server Error",但這樣也不錯,可以學到更多新知識與問題,這裡簡單紀錄一下處理過程 錯誤訊息 HTTP 錯誤 500.21 HTTP Status Code 狀態碼 是Server端 Response 的狀態,在 Status Code Definitions&nbs… Read More
  • [CheatSheets] ASP.NET Format Strings 廢話 在之前自己有整理過 [筆記] string.Format 格式整理,最近在蒐集小抄表時發現原來早有神人整理過類似的資訊 .NET Format Strings 整理為下列幾項 DateTime : Standard, Custom DateTime Format Strings Number : Standard, Custom DateTime Format S… Read More

0 意見:

張貼留言

Copyright © 2025 m@rcus 學習筆記 | Powered by Blogger

Design by Anders Noren | Blogger Theme by NewBloggerThemes.com