[プログラミング]SonarQubeでC#のコードを解析する(Windows).2 - OpenCover

前回(d:id:pneumaster:20151229:1451408205)の続きです。

確認した環境

前回に追加して以下の環境を持ちます。

https://github.com/opencover/opencover/releases
Releaseバージョンを選びます。
# どこで拾ってきたのか4.5.2506を使って無駄な時間を過ごしました。

  • ReportGenerator 2.3.5

https://github.com/danielpalme/ReportGenerator/releases

SonarScannerのセットアップ

Getting Startedを前回の続きから進めると次はSonarQube Scannerをダウンロードすることになります。

今回はVisual Studioを使うので、リンク先のScannerではなくSonarQube Scanner for MSBuildを使います。
# 私が確認した時のバージョンは1.0.2(19 Oct. 2015)でした。(MSBuild.SonarQube.Runner-1.0.2.zip)
# このページの動作リストに2015 Communityが書かれていませんが、解析できました。

SonarQube本体と同様に適当にzipを伸長、配置します。


SonarQubeの設定

C#プラグインをセットアップします。

MSBuild.SonarQube.RunnerのPrerequisitesとしてC#プラグインが必要です。
起動しているSonarQubeのWebサーバにログインします。(前回最後に書きました。)


ページ上部のAdministrationからSystem->Update Centerに進みます。
Availableを押すとインストール可能なプラグインが出てくるのでC#の右側にある[Install]を押します。
Install Pendingが表示されたら一旦SonarQubeを再起動します。
前回の通りにStartSonar.batを起動している場合には、コマンドプロンプト(... is upが表示されているはず)でCtrl+Cを押すと終了させることができました。(終了フェーズが動くので「バッチを終了しますか?」が出るまで待ちます。そうしたらyで終了できます。)

同じように起動してログインするとAdministrationのページの左部CATEGORYにC#が表示されました。

次に解析対象のプロジェクトをSonarQubeに作成します。

Administration->Projects->Managementで表示されるページの右のCreate Projectボタンを押します。

  • Name:tempProject
  • Key:tmppj

としました。Branchは必須ではなさそうなのでここでは無記入としました。
追加されたtmpProjectプロジェクトを押すとDashboardが表示されました。
No analysis has been performed since creation.
まだソースファイルをアップロードしていないので解析結果がありません。

解析対象のソースコードを用意します。

今回はhttps://github.com/pneu/ForSonarQubeを使うことにします。
上でSonarQubeのプロジェクトを作った時のNameとKeyを使って次のコマンドを実行します。
kがkey、nがNameです。v(version)は指定しないと引数が足りないと怒られるので適当な値を与えました。
コマンドはVisual Studioについてくる開発者用コマンドプロンプト上です。

>MSBuild.SonarQube.Runner begin /k:tmppj /n:tmpProject /v:0.1
>msbuild
>MSBuild.SonarQube.Runner end


完了後下記のURLが表示されます。

18:17:12.789  Analysis results: http://localhost:9000/dashboard/index/tmppj
Post-processing succeeded.

アクセスするといろいろ解析結果が表示されていました。
Issuesページには全体の問題点が表示されています。
あとは修正後コミットを繰り返していくことになります。


以上が一連の解析プロセスになります。
プラグインC#以外にも色々用意されています。

カバレッジ

OpenCoverを使いました。


上述した一連の流れにOpenCoverのコマンドを挟みます。
MSTest以外を使う場合は適宜変えてください。
ユニットテストのプロジェクトは上に書いたGitHubのコードを使っています。

>MSBuild.SonarQube.Runner begin /k:tmppj /n:tmpProject /v:0.1
>msbuild
>opencover.4.6.166\OpenCover.Console -output:opencover.xml -register:user -target:"%VSINSTALLDIR%\Common7\IDE\MSTest.exe" -targetargs:"/nologo /testcontainer:UnitTestProject1\bin\Debug\UnitTestProject1.dll"
>MSBuild.SonarQube.Runner end


それからSonarQubeのDashboardを見てみると、ページに[Unit Test]の項目が追加されていました。

パーセントをクリックするとコードとの対応も見ることができます。


続いて、ReportGeneratorでレポートを生成します。
ここではopencoverが生成したテスト結果からhtmlファイルを生成しますが、それ以外についてはhttps://github.com/danielpalme/ReportGenerator#usageを見てください。生成されるレポートのイメージも載っています。
texでも出力できるみたいなので体裁にこだわる場合はpdfも生成できるわけですね。


さて、htmlを出力するコマンドは以下の1つです。
htmlフォルダ以下にいくつかのファイルが出力されます。

>ReportGenerator_2.3.5.0/bin/ReportGenerator.exe opencover.xml html


以上、めでたく完了です。