2017年1月15日 星期日

[iThome第8屆鐵人賽 20]靜態程式碼分析之程式碼風格 - Stylecop

在上篇介紹了如何透過使用Code Analysis來達到程式碼品質的分析。

在這一篇將會從另外一個層面介紹使用靜態程式碼分析來達到程式碼風格的一致性 - Stylecop。

Stylecop是什麼?

Stylecop才是比較符合俗稱的程式碼靜態分析工具。概念和Code Analysis一樣,差別在於Stylecop是分析程式碼的風格,而Code Analysis則是分析程式碼的邏輯或寫法是否有問題。

風格可能有點抽象,舉個簡單的例子就很容易理解,例如說兩個statement之間只能空一行,如果沒空就會報錯,或者是每一個方法都要寫註解,沒有就報錯。

這些可能感覺很無聊,但是實際上非常重要,因為當開發者是多人的時候,大家習慣不同,很容易整個程式碼看起來很亂。

Stylecop如何使用

Stylecop分兩個部分:設定規則和執行分析。

設定規則

stylecop的設定檔預設使用.stylecop作為付檔名。通常檔案名稱為setting.stylecop

可以下載設定檔編輯程式比較容易作調整 - 基本上打開就會有一個畫面能夠勾選要執行那些規則。

image
設定規則

設定檔放在solution下,就會在執行stylecop的時候自動被引用。

有些規則其實不太符合習慣,所以也不是所有規則都要啟用,可以找一些常見的專案然後看他們都設定些什麼做參考。舉例來說,在Mvc專案的source code就可以看到啟用了那些規則: Mvc最新程式碼

執行StyleCop

執行方式有兩種:

  1. 在VS上面執行 - 這個如果有安裝VS的Extension就可以呼叫
  2. 在建制的時候執行

在建制的時候執行

基本上,對於需要掃描stylecop的程式安裝套件StyleCop.MSBuild即可。

然後在build的時候,在Warning那邊就會看到不符合規則訊息。

image
執行結果不通過出現在warning裡面

整合到build script

同Code Analysis一樣,執行這種分析所花的時間也可能非常的久,因此這種類型的分析也最好是放在build server的時候執行。

如果要把stylecop整合到build script,需要做幾件事情:

  1. 先調整讓VS建制的情況下,不執行StyleCop
  2. 設定build script要執行StyleCop,並且把warning當做error

調整VS建制不執行StyleCop

這個要調整有要執行stylecop的專案csproj檔案 - 以這個例子是Webapplication1.csproj

用notepad打開,然後加上:


 false
image
調整csproj

調整build script

build script加入兩個參數:

  • StyleCopEnabled=true - 啟用StyleCop
  • StyleCopTreatErrorsAsWarnings=false - 把StyleCop錯誤當成error類型的錯誤

task Compile -depends Clean, Init -description "編譯程式碼" `
    -requiredVariables solutionFile, buildConfiguration, buildTarget, buildTempDirectory `
{ 
 Write-Host "開始建制檔案:$solutionFile"

 $buildParam = "Configuration=$buildConfiguration" +
     ";Platform=$buildTarget" + 
     ";OutDir=$buildTempDirectory"
 
 $buildParam = $buildParam + ";GenerateProjectSpecificOutputFolder=true"
 $buildParam = $buildParam + ";RunCodeAnalysis=true;CodeAnalysisRuleSet=MinimumRecommendedRules.ruleset;CodeAnalysisTreatWarningsAsErrors=true"
 $buildParam = $buildParam + ";StyleCopEnabled=true;StyleCopTreatErrorsAsWarnings=false"

 exec {msbuild $solutionFile "/p:$buildParam"}
}

結語

這篇粗略了介紹如何使用Stylecop並且如何整合到build流程的一部分。

通過,Test coverage的Opencover確保了測試程式碼的涵蓋率;透過Code Analysis分析程式碼上面是否有一些不好的邏輯寫法;透過StyleCop讓整個程式碼的風格一致化,這些都是保持程式碼的 品質在一定水準的方法。

品質過關之後,就要進入發佈上線的階段。

因此,在接下去將進入到另外一個階段,到底如何準備好發佈需要的東西。


沒有留言 :

張貼留言