2016年5月14日
松谷 秀久(@mattani)
 分析していない?
◦ せっかくのデータなのにもったいない・・・
 標準機能のサマリは見ている
◦ 充分な分析はできないですね
 CSVでエキスポートしてExcelで分析?
◦ 分析には毎回稼働がかかりますよね
もうちょっと楽できる
方法を紹介します
 リアルタイム分析
◦ 現時点のデータを使って分析
◦ 基本機能の「サマリー」も一種のリアルタイム分析
◦ プラグインを使えば、より柔軟な分析が可能
 ヒストリカル分析
◦ 過去からのデータを使って分析
◦ 外部ツールによって実現
本日のメイントピック
後で詳しく説明します
トラッカー、優先度、担当者、
作成者、バージョン、カテゴ
リ毎のステータスのサマリー
を確認できる
リアルタイムにピボット分析
できます。
あらかじめ分析対象をクエリ
で絞っておくこともできます。
棒グラフで表示も可能。
デモ
 REST APIでデータを取得
◦ REST APIの特徴
◦ スクリプトの紹介
 外部ツールでデータを加工
◦ Gnuplotでグラフを描画
 ユーザへの見せ方
◦ Wikiを活用
 定期的な分析の実行
◦ Jenkinsを活用
管理ー設定ーAPIで
「RESTによるWebサービスを
有効にする」にチェックを
いれておく
URLの後ろに
.json
をつけると、チケット情報を
JSON形式で取得できる
認証用にAPIアクセスキーが必要
 URLとAPIアクセスキーを指定して、チケットの
データに外部プログラムからHTTPでアクセス
 デフォルトでは1回のアクセスで、25件分の
データを取得
(全データ取得にはページネーション制御要)
ちょっとハードル高いかな
 REST APIを意識せずにJSONを取り出すツール
 動作イメージ
API_KEY,URL
インスタンス作成
コールバック登録
全チケット処理実行
REST APIでチケット情報取得
コールバック実行
(1チケット毎)
集計ファイル
(TXT)
出力処理
月別完了日数クラスや
放置日数クラスなどの
処理を登録(複数可)
MetricsTools_for_Redmine
RestIssues
クラス(perl)
ユーザ
カスタマイズ部(perl)
実行sh
REST APIの複雑な制御
を隠ぺい
 ユーザがやること
◦ URLとAPIキーを指定してオブジェクトを作る
◦ 1チケットのJSONを処理する集計関数をコールバックメ
ソッドとしてオブジェクトに登録
 ツールがやってくれること
◦ REST APIで取得したJSONをチケット毎に分解して
コールバックメソッドに渡す
◦ 完了日数、放置日数などの集計メソッドを提供
 拡張性
◦ ユーザカスタマイズ部を作れば拡張可能
 GitHubで公開しました
https://github.com/Mattani/MetricsTools_for_Redmine
 チケット起票から完了までの日数
 チケットがうまく捌けていることの目安になる
◦ チケットが多いと短期間で捌けない
◦ チケットが放置されると平均完了日数も長くなる
◦ 平均完了日数が短い=品質がよい
 REST API(Perlスクリプト)イメージ
 出力される集計ファイルイメージ
# 年月 未完了件数 完了件数 完了日数の和
2016-04 0 34 251
2016-05 0 78 2115
2016-06 0 41 2248
2016-07 0 12 1005
平均完了日数=完了日数の和/完了件数
# ライブラリを読み込む
use RestIssues;
# URLとAPIキーを指定してオブジェクトをインスタンス化
my $issues = RestIssues->new(Url =>$url, Apikey => $apikey);
# チケットを集計するコールバックメソッドを登録
$issues->addAggregateProc(&ClosedInEachMonth::aggregate);
# 全チケットを処理するメソッドを呼び出す
$issues->processAllIssues();
# 集計結果を出力する
&ClosedInEachMonth::putResult($opath,$queryname);
月別完了日数クラス
ClosedInEachMonth
を使用
 放置された日数毎にチケット件数を集計
 どのくらい放置チケットがあるかを知る
◦ 長期間放置されているチケットを見つけて
対応することで、チケットの捌きが早くなる
◦ 平均完了日数も短くなる→品質の向上につながる
 REST API(Perlスクリプト)イメージ
 出力される集計ファイルイメージ
# 集計対象のトラッカーを設定
&UntouchedDays::setTargetTracker(['バグ']);
# 集計除外するステータスを設定
&UntouchedDays::setExcludeStatus(['破棄','終了']);
# チケットを集計するコールバックメソッドを登録
$issues->addAggregateProc(&UntouchedDays::aggregate);
# 全チケットを処理するメソッドを呼び出す
$issues->processAllIssues();
# 集計結果を出力する
&UntouchedDays::putResult($opath,$queryname);
# 放置日数 バグ 問合せ
0 30 0
1 25 0
~中略~
12 50 0
13 32 0
放置日数クラス
UntouchedDays
を使用
放置日数毎の件数が取得できる
 週毎に累積バグ数を集計
 累積バグ数から信頼度成長曲線を求め、
バグ収束率を計算する
 REST API(Perlスクリプト)イメージ
 出力される集計ファイルイメージ
# カウント開始日を設定
&CountEachWeek::setStartDate('2016-4-2');
# チケットを集計するコールバックメソッドを登録
$issues->addAggregateProc(&CountEachWeek::aggregate);
# 全チケットを処理するメソッドを呼び出す
$issues->processAllIssues();
# 集計結果を出力する
&CountEachWeek::putResult($opath,$queryname);
件数(週毎)クラス
CountEachWeek
を使用
# week 未完了 件数 累積件数
2016-04-02 0 3 3
2016-04-09 0 5 8
2016-04-16 0 4 12
2016-04-23 0 21 33
 集計結果をグラフとして見える化する方法の1つ
 FSFのGNUプロジェクトとは無関係
 学術分野でよく使われる
 30年前からあるグラフ描画ソフト
平均完了日数を描画する
gnuplotスクリプト
「ClosedInEachMonth.gp」
で描画
この例では以下のようなことがわかる
・4月はチケット少ないが平均完了日
数が長い
・5月がチケット多いが、4月より平
均完了日数短くなっている
放置日数を描画する
gnuplotスクリプト
「UntouchedDays.gp」
で描画
この例では以下のようなことがわかる。
・問合せは6日以内に回答できている
・20日間放置されたバグが2件ある
信頼度成長曲線を描画する
gnuplotスクリプト
「Gompertz.gp」
で描画
gnuplotにより、
信頼度成長曲線(ゴンペルツ
曲線)にfitさせる
𝒇(𝒙)=𝑲𝒃 𝒆−𝒄𝒙
バグ収束率=
バグ数(実績)
𝑲
× 100(%)
 gnuplotを使用すれば関数fitができる
◦ fitする関数を修正すればロジスティクス曲線
f x =
𝐾
1+𝑏𝑒−𝑐𝑥
にすることも可能
 定期的に描画すれば徐々に収束率が高くなってい
くのがわかる
 Gnuplotでグラフ画像をhttpサーバ配下に出力
 画像へのURLを、RedmineのWikiから外部参照
 Wikiでグラフ表示した下に、
注目すべきチケットにすぐアクセス可能にする
(Redmine_Wiki_Listsの活用)
 縮小表示機能をつかってダッシュボードを作成
 Redmine_Wiki_Extensionプラグインで
ダッシュボードにショートカットアクセス
デモ
 Jenkinsで毎日集計スクリプトを実行
◦ RedmineのRest APIにより取り出される
 gnuplotでグラフ化
 RedmineのWikiが更新される!
 実行するツールをリポジトリから取り出せる
 柔軟なスケジュールを定義できる
 エラー時にメール通知できる
 様々なプラグインにより動作を拡張できる
Perlスクリプト
(Rest API)
集計ファイル
(TXT)
gnuplotWikiから
http参照
画像ファイル
毎日実行
(Jenkins)
Excelで集計
PPTに貼付け
高機能BIツール
 ハンドルネーム
@mattani
 所属
NTTコムウェア(株)
 Redmine歴
◦ Redmine管理者歴 約4年
◦ 第6回勉強会(2014/2)からredmine.tokyo運営スタッフ
◦ ユーザ数120名。プロジェクト数 15~20
◦ タスク管理、課題管理、インシデント管理、検証設備利用申
請管理、工事管理、ヘルプデスク問合せ管理、
脆弱性管理 他
 業務経歴
◦ 開発経験17年、運用経験5年
◦ 現在は、某システムの運用担当(SE)でRedmine管理者
◦ Redmine経験を活用して社内で導入コンサル対応やってます

Redmineでメトリクスを見える化する方法