Jenkinsをメトリクス収集ツールとして使うアイデア
Jenkinsは単なるビルド管理ツールではなく、強力なメトリクス収集ツールなのだ、というアイデアについて考えたことをメモ。
ラフなメモ書き。
【元ネタ】
Jenkinsの特長 - メトリクス収集サーバの視点から -: ソフトウェアさかば
Redmineを業務システム化するアイデア~メトリクス集計の本質は集計バッチ処理: プログラマの思索
「Hudson」改め「Jenkins」で始めるCI(継続的インテグレーション)入門 (3/4) - @IT
「Hudson」改め「Jenkins」で始めるCI(継続的インテグレーション)入門 (4/4) - @IT
Jenkinsをたった1コマンドで公開用Mavenリポジトリにしてしまう方法 #jenkinsja | 世界のdaipresents
【1】継続的インテグレーション(CI)というアイデアは、本来、プログラムから動くモジュールへビルドする作業を自動化することから生まれた。
CIは常時統合とも呼ばれ、コミットと同時にユニットテストもしてビルドして、リリース可能なモジュールを作る作業になる。
JenkinsのようなCIツールはSCMリポジトリをインプットとして、ビルドモジュールをアウトプットにするだけでなく、ユニットテスト結果やLOC、ソフトウェア複雑度などの単体テストレポートもアウトプットとして出力する。
すなわち、JenkinsはSCMリポジトリからプログラムのメトリクス(LOC、ユニットテスト結果、複雑度など)を出力するツールとして代用することも可能。
【2】何故メトリクスを収集するのが重要なのか?
何故メトリクスを収集するのが従来は難しかったのか?
WF型開発や日本の従来の品質管理では、安定したプロセスを基盤として、各工程のメトリクスを収集して品質管理を行うことで、高い品質を保持していた。
信頼度成長曲線や管理図、ヒストグラムなどがそれに当たるだろう。
メトリクスに関しては、日本では品質管理の技法として既にたくさんのノウハウがある。
だが、ソフトウェア開発では、製造業とは違ってメトリクス収集が非常に難しい。
メトリクスを収集するプログラムそのものを作りこまないといけないし、定期的にメトリクスを開発者に報告させるようにすると、開発者に負担がかかる。
Jenkinsの特長 - メトリクス収集サーバの視点から -: ソフトウェアさかばの記事にその苦労が書かれているけれども、メトリクス収集ツールのインストールだけでも大変だし、メトリクスの元ネタとなるデータの入力も手間がかかるし、定期的に収集する手間もかかる。
【3】Jenkisの機能はビルド管理が一番の特徴だが、メトリクス収集ツールの特徴としていくつか面白い点がある。
一つは、高機能なCronであること。
Jenkinsには、SCMリポジトリを設定する画面で「SCMをポーリング」というチェックボックスがあり、Cronの形式で入力すれば、定期的にSCMリポジトリからチェックアウトしてジョブを実施する仕組みがある。
本来は定期的にビルドする仕組みなのだが、1時間または1日1回SCMリポジトリからメトリクスを集計する仕組みに応用できる。
つまり、ポーリング機能として使えるし、イベントフックのように使ってもいい。
このCronの機能をプログラムで一から作りこむのは車輪の再発明であり無駄。
むしろJenkinsを流用した方がGUIで制御できて楽だし、たくさんの機能を使うこともできる。
2つ目は、ビルドパイプラインを使ってジョブを組み合わせてバッチ処理のようにできること。
つまり、複雑な処理を分割して、ジョブフロー図のように処理をUnixのパイプのようにつなげれば、複雑な集計処理を実装することが可能。
更には、集計バッチ処理を並列処理にすれば、処理時間を半減できるから性能改善も可能。
業務システムのバッチ処理の設計技法を使えば、メトリクス集計のバッチ処理は会計のバッチ処理のように設計できるはずだ。
3つ目は、多種多様なビルド結果をリアルタイムに表示する機能があること。
Jenkinsでは、ビルド結果の履歴を時系列に表示したり、単体テスト結果だけでなくコードカバレッジを表示したり、静的コード解析ツールを入れておけば例えばCheckStyleやFindBugsなどのメトリクスも表示してくれる。
つまり、SCMリポジトリを指定しておけば、好きなだけいくらでもメトリクスを集計して表示してくれる仕掛けがある。
複雑度と単体テストケース数の相関関係: プログラマの思索の記事に書いたけれど、ソフトウェア複雑度と単体テストケース数には密接な関係があるので、その知識を使えば、テスト駆動開発におけるテストケース作成に応用できるだろう。
そもそもソフトウェア複雑度が30を超えるようなプログラムは、リファクタリングするよりも、処理をメソッド抽出で分割するか、一から作り直す方が品質が良くなるはずだ。
4つ目は、AntやMavenのようなビルドスクリプトを使えば、メトリクス集計のプログラムをキックしたり、組み合わせる処理が簡単に書けること。
AntやMavenはビルドするために必要なライブラリを取得したり、プログラムをビルドするために使うけれども、メトリクス集計のプログラムを呼び出したり、メトリクスの出力フォーマットを指定する処理へ適用することも可能。
JenkinsはSVN・Mercurial・GitのようなSCMリポジトリをインプットにするが、RedmineやTracのようなITSのDBもインプットに入れれば、ITSのDBからデータをロードしてバッチ処理を行うことも可能のはずだ。
ITSのチケット集計機能はリアルタイムな集計しかできないけれども、そのようなアイデアを実現出来れば、バッチ処理を行う集計結果も可能になる。
バッチ処理を行う集計結果としては、会計の締め処理のように、週次・月次のようなある一定期間でのバグや進捗に関するメトリクスがあげられる。
例えば、週次・月次でのEVMによる集計があげられるだろう。
これらのJenkinsの特徴をうまく利用して、高機能なメトリクス収集ツールとして実現して、チケット駆動開発を強化することができないか?
色々考えてみる。
| 固定リンク
「Redmine」カテゴリの記事
- Redmineのバージョン設定でプロジェクトの設定方法が違う(2024.06.23)
- ウクライナのRedmine開発者が作ったRedmineテーマやプラグイン(2024.06.18)
- 第26回redmine.tokyo勉強会の感想~多様性はコミュニティが成功する重要な要因の一つ #redmineT(2024.06.15)
- Redmineで持ち株管理する事例(2024.04.21)
- チケットはデータでとプロセスの二面性を持つ #redmine(2023.12.24)
「ソフトウェア工学」カテゴリの記事
- 「システムアーキテクチャ構築の原理」の感想part2~非機能要件がシステムのアーキテクチャに影響を与える観点をプロセス化する(2024.05.06)
- 「システムアーキテクチャ構築の原理」の感想(2024.05.06)
- ソフトウェア工学の根本問題から最近のソフトウェア設計を考えてみる(2024.03.03)
- マイクロサービス設計は従来のアーキテクチャ設計と何が違うのか(2024.01.02)
- 「ソフトウェアアーキテクチャ・ハードパーツ」の情報リンク~マイクロサービスの設計技法の課題は何なのか(2023.11.12)
「廃止Mercurial」カテゴリの記事
- GitHubはオープンソースのプロセスを標準化した(2015.06.11)
- 「反復型ソフトウェア開発」はソフトウェア工学の良書(2013.02.09)
- Mercurialに取り込まれたコミュニティ由来の機能一覧(2013.01.12)
- WordやExcelから直接Mercurialへコミットできるアドオンmsofficehg(2012.12.07)
- RedmineでSubversion リポジトリ表示を高速化する方法(2012.11.23)
「構成管理・Git」カテゴリの記事
- 「GitLabに学ぶ 世界最先端のリモート組織のつくりかた」の感想(2023.12.10)
- パッケージ設計の原則の意義は変化しているのか(2023.09.30)
- 小説活動にプルリクエスト駆動が必要になってきた(2022.05.08)
- 【資料公開】チケット駆動開発の解説~タスク管理からプロセス改善へ #redmine(2022.01.14)
- プログラミングしてる時はでっかいピタゴラ装置を作ってるみたいな感じ(2022.01.09)
「チケット駆動開発」カテゴリの記事
- 第26回redmine.tokyo勉強会の感想~多様性はコミュニティが成功する重要な要因の一つ #redmineT(2024.06.15)
- チケットはデータでとプロセスの二面性を持つ #redmine(2023.12.24)
- 小説活動にプルリクエスト駆動が必要になってきた(2022.05.08)
- 知識は経験よりも大切か、経験は知識よりも勝るのか、SECIモデルは相互作用を語る(2022.04.26)
- プロジェクト管理の基本はテーラリング、Redmineはプロセスをテーラリングするツール(2022.04.21)
「Agile」カテゴリの記事
- 「システムアーキテクチャ構築の原理」の感想part2~非機能要件がシステムのアーキテクチャに影響を与える観点をプロセス化する(2024.05.06)
- 「スクラムの拡張による組織づくり」のScrum@Scaleの感想(2024.03.31)
- ソフトウェア工学の根本問題から最近のソフトウェア設計を考えてみる(2024.03.03)
- 「GitLabに学ぶ 世界最先端のリモート組織のつくりかた」の感想(2023.12.10)
- 概念モデリングや設計原則は進化しているのか(2023.10.21)
コメント