Redmineのブロッキング機能で工程単位Redmine運用とトレーサビリティを解決するアイデア
かつてアンチパターンとされたRedmineの工程別プロジェクト運用。
だが、A-SPICEなど厳格なトレーサビリティが求められる現場では、ブロッキング機能(FF関係)による制御が強力な武器となる。
製造業の複雑な階層構造に挑む、Redmineの新たな運用アプローチを探る。
Redmineプロジェクトを工程別に分けて運用したい意図を理解したのでメモ。
ラフなメモ書き。
【参考】
Redmineのブロッキング機能はどこで使うのか?~FF関係で使うべきだ!: プログラマの思索
【1】Redmineプロジェクトを工程別に分けて運用したいケースがある。
WF型開発で要件定義、設計、開発、テスト、移行の順に工程ごとにタスクが分かっていて、各タスクは上位の工程から派生して関連付けられて追跡できる前提とする。
たとえば、組み込みソフトウェア開発において、ISO規格、A-SPICEなどの規格に沿って開発し、その結果を商標と残すべき要求があるとする。
特に、A-SPICEのソフトウェア開発プロセスではV字型モデルで定義されていて、各工程のエビデンスをきちんと残すことを義務付けられている。
では、Redmineではどのように仕組みを実装すべきか?
一つのやり方として、工程別にRedmineプロジェクトを作り、各工程プロジェクトにタスクを作り、下位チケットは上位チケットに関連付けて作成する運用とする。
たとえば、要件定義チケットがあれば、そこから画面設計、機能設計、I/F設計、帳票設計、DB設計などの下位チケットが作られるだろう。
それら下位チケットは、上位の要件定義チケットに関連付けたタイミングで新規作成する。
すると、下位チケットを作成するタイミングで作業開始出来たことが分かる。
一番重要な点は、トレーサビリティが確保できることだ。
設計、開発、テスト、移行工程の各チケットは、必ず上位工程のチケットから関連付けられて作成するので、たとえば、リリース後に不具合が発生すれば、過去のチケットから上位工程に遡って影響調査することが簡単になる。
また、A-SPICEなどの規格では、ソフトウェア監査においてトレーサビリティをすごく重視するので、関連チケットを追跡できれば監査エビデンスを探し出す時に非常に有効になる。
つまり、工程別プロジェクトの運用では、「下位工程の作業チケットは上位工程の作業チケットに関連付けた時に新規作成する」制約条件が発生する。
【2】では、この工程別プロジェクトのRedmine運用において、他の重要な制約条件は何があるだろうか?
最も重要な制約条件は「上位工程の作業チケットが完了していなければ、関連付けられた下位工程の作業チケットは完了できない」だ。
たとえば、外部設計において、一つの要件から画面帳票設計、I/F設計のタスクが関連付けられて、どれかのチケットが作業完了できる状態になったとする。
しかし、1つの要件のチケットにおいて、顧客要求から要件定義がきちんと完了し、要件チケットをクローズできなければ、次工程の作業を完了に出来ない。
なぜならば、顧客要求からまだ要件定義が完了できていない状態は、まだ漏れている要求があるかもしれないし、非機能要件の品質特性を全て洗い出したとは言えないからだ。
漏れている要求があれば、下位チケットにはその要求は反映されていないのは当然だ。
ソフトウェア開発において、機能の実装漏れが出てくる場合は、たいていこんな単純ミスから発生する。
よって、下位チケットをクローズする時に、上位チケットのステータスを見て、クローズ条件を制御する必要がある。
この条件は、PMBOKで言う「FF関係」に相当する。
つまり、「上位チケットが終了できなければ、下位チケットも終了できない」条件に相当する。
利用シーンとしては、ガントチャートでタスクの依存関係に「完了の同期」を強制させたい場合がある。
【3】では、この機能はRedmineではどのように実装されているのか?
具体的には「ブロック元のチケットがクローズできなければ、ブロックされているチケットはクローズできない」機能になる。
この機能はまさに、Redmineのブロッキング機能に相当する。
Redmineのブロッキング機能はどこで使うのか?~FF関係で使うべきだ!: プログラマの思索
関連するチケット ? Redmine用語解説
チケット同士の関連づけ | Redmine.JP Blog
たとえば、FF関係にある2つのチケットは、「ブロックしているチケット#11のステータスが終了でなければ、ブロックされているチケット#12のステータスを終了に変更することができない」例がある。
よくある例は、リリース判定レビューのチケットがあるだろう。
リリース判定レビューをクローズさせるには、もちろん、要件定義~移行までの全てのタスクを終わらせる必要がある。
たとえば、バグ修正が追いつかず、バグが1間残っています、とか、全部テストできておらず10件のテストケースが残っています、みたいな状態でリリースできるわけがない。
一方、炎上案件では、まだテスト中、バグ修正中だが、並行作業でリリース判定レビューを実施して、後追いでリリース判定の承認を得たい場面が割とある。
PMOレビュー事務局を経験した人ならよく分かるだろう。
すると、リリース判定レビューでは、テストケース残件が0件、バグ未解決件数0件ならばリリースを認めるといった、条件付きOKの判断が下る場合が多い。
案件のPMもPLも担当者も、リリース判定レビューの後も、必死になってテストしてバグを潰して、その結果をPMOレビュー事務局へ送って、その結果がOKならば、テストや移行作業のチケットが全て完了にできる。
そして、テストや移行作業のチケットが全て完了になった状態で、初めて後続のリリース判定レビューチケットをクローズできて、ようやくリリース承認が降りるわけだ。
このような制御をRedmineチケットに課すことで、実際の運用ルールを知らなくても、監査プロセスをRedmine上に実装できる。
僕は、Redmineのブロッキング機能をFF関係として使うケースを知らなかったので、本当に面白いなと思う。
一方、Redmineのガントチャート画面では、【FS】関係は、先行・後続の関係=青矢印、【FF】関係はブロック元・ブロック先の関係=赤矢印で図示される。
つまり、Redmine標準機能として、FS関係とFF関係の矢印の色が異なるように実装されているので、ガントチャート画面を見れば、チケットの依存関係を把握できる。
LycheeRedmineでは、ガントチャート画面上でマウスをD&DすることでFS関係を付けれる機能があり、そのタイミングで、ブロッキング機能をチェックするかどうか選ぶダイアログが出てくる。
つまり、LycheeRedmineでは、FS関係やSS関係を簡単につないで、まるでMSProjectみたいにガントチャート画面上で制約条件を正確に表現できる。
Redmineのブロッキング機能はどこで使うのか?~FF関係で使うべきだ!: プログラマの思索
Redmineはとても奥深い。
【4】以前の僕は、Redmineを工程別プロジェクトを作るやり方は悪手だと思っていた。
その理由は10年以上前にたくさん書いた。
つまり、理由は、アジャイル開発のイテレーション、スプリントに紐づけることが単純でないこと、工程単位のプロジェクトが乱立して1人の担当者が複数のRedmineプロジェクトを渡り歩いて見る必要があってチケット管理が面倒になるからだ。
TiDD初心者が陥りやすい罠part2~工程単位のRedmineプロジェクトやリリース予定バージョン: プログラマの思索
【続】TiDD初心者が陥りやすい罠part2~工程単位のRedmineプロジェクトやリリース予定バージョン: プログラマの思索
チケット駆動開発の適用範囲part5~どの工程をカバーするのかという質問: プログラマの思索
【事前公開】【第16回Redmine大阪】RedmineのFAQとアンチパターン~親子チケットの功罪: プログラマの思索
チケット駆動開発の適用範囲Part2~チケット駆動開発の運用パターン: プログラマの思索
チケット駆動開発がもたらした新しい観点part1~Redmineプロジェクトへ案件や組織構造を反映する: プログラマの思索
Redmineをもっと強化できるポイントpart1~上流工程のトレーサビリティ強化: プログラマの思索
しかし、上記のように、Redmineブロッキング機能を使って各工程チケットのトレーサビリティを確保したい場合、工程別プロジェクトを作りたい意図は理解できる。
また、Redmineブロッキング機能は所詮、Redmineの関連チケットの一種に過ぎないので、担当者にとってもチケット操作は簡単であり、運用ルールに乗せやすい。
こういう使い方もありだなと思う
【5】一方、留意点としては、複数プロジェクトをまたいでチケット同士のブロッキング機能を使うには、「管理」→「設定」画面内「チケットトラッキング」タブ内の設定「異なるプロジェクトのチケット間で関連の設定を許可」を有効にする必要がある。
この設定がなければ、プロジェクト内で閉じたチケット同士でしか、ブロッキング機能が使えない。
先行・後続関係の機能も同様だ。
Redmineで異なるプロジェクトのチケット同士を関連づけたい ? Redmine.JP
他方、「異なるプロジェクトのチケット間で関連の設定を許可」を有効にするデメリットは、情報セキュリティの高い案件のRedmineプロジェクトのチケットが関連付けられてしまうケースが考えられる。
本来は、ある案件の親PJがあり、要件定義~移行の子PJが作られて、親子PJの関係が付けられている範囲内でのみ、ブロッキング機能を有効にしてほしいのだ。
製造業のように、製品開発の案件は機密性が高いので、情報セキュリティ上、他案件のチケットが無関係の社員に見せることはしたくないからだ。
すると、「プロジェクトツリー内のチケットはで関連チケットの設定を許可する」「プロジェクトツリー内でカテゴリ、カスタムクエリ、ユーザを継承できるようにする」機能が欲しくなる。
そのアイデアは既に書いた。
製造業DXを支える工程管理とは?Redmineの大規模プロジェクト階層化における課題:プロジェクトツリーの設定継承と関連チケット制限の壁: プログラマの思索
@g_maedaさんにXで聞いたら、そんな機能はありません、の一言で終わったけれど、正直実装してほしい機能だ。
なぜならば、製造業では、親子PJを使って階層化したRedmineプロジェクトが自然に出てくるケースが多いので、プロジェクトツリー内の各プロジェクトの各チケットに対し、親PJの設定を子PJへ継承させたいケースが多くなるからだ。
たとえば、製造業では、上記のように工程単位プロジェクトが自然に出てくる。
工程単位プロジェクトが自然な理由は簡単で、製造業では工程ごとに専門部署が割り当てられているからだ。
実際、プロトタイプ製品を作る企画フェーズならR&D部、設計工程では設計部門、製造工程では工場の製造部門や生産管理部門、試験工程では品質管理や品質保証部門、サービス保守では営業部門や保守部隊などに分かれる。
製造業は、高度に専門化された知識が必要なので、機能別組織になりやすく、工程別にノウハウを集約し蓄積する機能別組織になりやすい。
また、たとえば、複数の製品を組み合わせて一つのシステムを作り、それをパッケージングして販売するSystemOfSytems(SoS)のようなサービスも製造業ではよくある。
たとえば、医療システム、防衛宇宙システムの業界ならよくあるだろう。
すると、SoSの親PJが案件に相当し、子PJには各製品や各システムが作られて、さらに孫PJは工程単位のプロジェクトが作られる。
つまり、親子孫という3階層のプロジェクトツリー構造を持つRedmineが自然に現れる。
よって、SoSの案件をRedmineで運用する場合、かなり複雑な構造をRedmine自体が持つ。
実際、プロマネが1個のRedmineプロジェクトでチケット管理できないマネジメントレベルならば、そもそも3階層のRedmineプロジェクトを持つ高度なチケット管理はできないだろう。
すなわち、SIerで僕が経験してきたアジャイル開発のRedmine運用よりも、製造業のRedmine運用のほうがはるかに難易度は高いと考える。
製造業のRedmine運用がかなり難しい理由は、実はこんな点にあるのかなと思う。
今後も製造業のRedmine運用を探っていく。


最近のコメント