アジャイル開発の弱点をプロジェクト管理サーバーが助ける
Redmine、TestLink、Hudsonなどの各種ツールを運用してみて、これらはアジャイル開発を補強するツール群なのだと直感した。
アイデアをメモ。
【元ネタ】
Redmine - Overview
TEF有志によるテスト管理システムTestLink日本語化プロジェクト
Hudsonを使ったアジャイルな開発入門:第1回 Hudsonの導入|gihyo.jp … 技術評論社
Perl製のソースコードレビューソフトウェア「Codestriker」
VMWareの開発でも利用されているソースコードレビュー共有ソフトウェア「Review Board」
【1】アジャイル開発の利点
XPを代表とするアジャイル開発の有用性は、昨今、色々知られてきた。
アジャイル開発の中で最も有名と思われるXPで最も重要なプラクティスは、小規模リリースだと思う。
小規模リリースとは、イテレーションという短いサイクルで小さく作りこんで小刻みにリリースしながら、システムを機能拡張し、品質を向上していくプロセスを指す。
緊急のバグ修正、突然の仕様変更に対しても、次のイテレーションに取り込む手法で、柔軟に対応していく。
小規模リリースのプラクティスは、メインラインモデルと呼ばれる構成管理と密接に関係する。
メインラインモデルとは、本番環境で稼働中のモジュールと、裏で新規開発中のモジュールの2つのコードラインを並行開発するソース管理手法。
メインラインモデルのおかげで、バグ修正のbranchと機能追加のtrunkの2つのコードラインを小刻みにバージョンアップしながら、品質保持と機能拡張という矛盾した開発スタイルを可能にする。
また、イテレーションは2~4週間のリリース単位でもあるから、一つのイテレーションで実装可能な機能の数は限られる。
従って、ストーリーカードのサイズはおのずと分割され、更に、優先順位付けされて、イテレーションに取り込まれていく。
つまり、高度なマネジメント手法を小規模リリースは必要とする。
又、イテレーションを一つずつリリースしていくうちに、ビルド作業やリリース作業の重大な欠陥、仕様漏れや要件漏れをすぐに判明でき、そのフィードバックをノウハウとして蓄積していく。
これがプロセス改善になり、ナレッジデータベースにつながる。
【2】アジャイル開発の弱点
しかしながら、アジャイル開発を実際の現場に運用するのは難しいと思う。
小規模リリースを実現するには、メインラインモデルと言う高度な構成管理手法を必要とする。
Subversionを骨の髄まで知り尽くしておかねばならない。
小規模リリースしていくには、どの機能をどのイテレーションでリリースしていくか、というイテレーション計画を作らねばならない。
しかし、イテレーション計画は、緊急のバグ修正や突発的な仕様変更に対応せざるを得ないため、頻繁に変わる。
だから、タスク漏れしないようなリアルタイムなタスク管理のインフラを必要とする。
Excelによるスケジュール管理だけでは、イテレーションを管理するのは非常に難しい。
また、XPが提唱する継続的インテグレーションを実現するには、ビルド作業やリリース作業を自動化することが大事。
継続的インテグレーションは、コードラインの品質を保証してくれる重要なプラクティス。
継続的インテグレーションが実現されなければ、回帰テストが難しくなるから、テスト駆動開発のメリットも半減する。
そして、プログラマがあまり重要視していないXPのプラクティスの一つである受入テストが、実は大きな弱点の一つだと考える。
テスト駆動開発は単体テストの観点で、品質を保証するだけ。
XPでは、結合テスト以降のシナリオベースのテストの観点がは弱い気がする。
特に、普通の受託開発では、結合テスト以降のテスト工程で開発人員が最大化するため、メンバーの管理だけでマネージャは忙しくなる。
受入テストの進捗管理や品質管理の観点が弱いと思う。
そして、ペアプロのプラクティスもその重要性や有用性が直感できるにも関わらず、実際の現場では根付かない。
ペアプロの本質は、レビュー工程の代替手段にある。
しかしながら、普通のSW開発では、レビュー工程が実は最大のボトルネックになっていると思う。
設計書のレビュー工程は、要件定義の代替プロセスと化しており、実際の設計の品質向上につながっていない。
実装のレビュー工程は、レビューワーが業務ロジックを知り尽くしていないから、単なるコーディングルールのチェックに過ぎない。
また、従来のレビューでは、複数人が大量の紙を印刷して持ち寄って、長時間議論して、紙ベースでレビューの記録を残すから、レビュー漏れが発生しやすい弱点がある。
【3】プロジェクト管理サーバーがアジャイル開発の弱点を助ける
僕が考えるプロジェクト管理サーバーの概念は、SW開発のプロジェクトを立ち上げる時に必要な構成管理ツール群が乗っているVMwareイメージをWebサーバー上で動かすことだ。
つまり、現場リーダーがSW開発を運営するのに必要な開発インフラが、プロジェクト管理サーバーの機能を持つWebサーバーであるイメージ。
Redmine、Tracでチケット駆動開発を実践することで、イテレーション計画を制御し、小規模リリースを実現するためのタスク管理の役割を担う。
メインラインモデルの実現は、SubversionあるいはGitなどのバージョン管理を使う。
もちろんソースだけでなく、ExcelやWordの仕様書もバージョン管理する。
AntやMavenなどのビルドツールと、CIツールHudsonを組み合わせて、ビルド管理やリリース管理を自動化する。
TestLinkで受入テスト工程を管理することで、テスト工程の進捗管理と、発生したバグ修正をRedmineのようなBTSと連携する。
また、コードレビューはコードレビューWebシステムで行う。
例えば、VMWareの開発でも利用されているソースコードレビュー共有ソフトウェアReviewBoardやPerl製のソースコードレビューソフトウェアCodestrikerなどを使ってみる。
これらのツールの最大の特徴は全てWebシステム上で実現されること。
Webシステムであることの利点は二つある。
一つは、いつでもどこでも誰でもアクセスさえすれば、必要な情報を取得できて更新できること。
もう一つは、実績や作業履歴がDBに残るため、データマイニングを使って、品質や進捗に関するメトリクスを簡単に出力できること。
特に、メトリクスを出力できることは、高度なマネジメントを行うのに決定的に有効だ。
昨今、テスト駆動開発やRuby on Railsなどのように下流工程で大幅な技術革新が生まれているのに、プロジェクト管理やテスト管理は10年前と同じようにExcelで手作業で集計するなど、上流工程でボトルネックになっていることが多くないだろうか?
プロジェクト管理サーバーを導入することで、SW開発のうちで特にプロジェクト管理の部分を強化してみよう。
| 固定リンク
「プロジェクトマネジメント」カテゴリの記事
- チームトポロジーの感想~大規模アジャイル開発でも組織構造は大きく変化する(2025.01.01)
- 「スクラムの拡張による組織づくり」のScrum@Scaleの感想(2024.03.31)
- ストラテジストとプロジェクトマネージャの役割の違いは何なのかpart2~プロセスのレイヤと達成目標のレイヤが異なる(2023.02.18)
- ストラテジストとプロジェクトマネージャの役割の違いは何なのかpart1~CSFはWBSみたいなものと捉える(2023.02.14)
- PM理論では課業志向の方が関係志向よりも生産性が高いことを主張しているのではないか(2023.01.22)
「Redmine」カテゴリの記事
- Jiraの機能はTracに似ている気がする #redmine(2025.06.01)
- Redmineは組織のナレッジ基盤として実現可能なのか~島津製作所の事例を読み解く #redmineT(2024.12.29)
- 「RedmineのUbuntu+Docker構築への移行」の感想 #redmineT(2024.11.24)
- 第27回redmine.tokyo勉強会の感想 #redmineT(2024.11.10)
- Redmineのバージョン設定でプロジェクトの設定方法が違う(2024.06.23)
「ソフトウェア工学」カテゴリの記事
- Jiraの機能はTracに似ている気がする #redmine(2025.06.01)
- チームトポロジーの感想~大規模アジャイル開発でも組織構造は大きく変化する(2025.01.01)
- Redmineは組織のナレッジ基盤として実現可能なのか~島津製作所の事例を読み解く #redmineT(2024.12.29)
- アーキテクチャ設計はベストプラクティスを参照するプロセスに過ぎないのか?~Software Processes are Software, Too(ソフトウェアプロセスもまたソフトウェアである)(2024.09.22)
- 「システムアーキテクチャ構築の原理」の感想part2~非機能要件がシステムのアーキテクチャに影響を与える観点をプロセス化する(2024.05.06)
「TestLink」カテゴリの記事
- JSTQBのテストプロセスの概念モデルを描いてみた(2023.05.26)
- TestLinkの要件管理にUSDMを適用する方法(2023.01.22)
- TestLinkのテストケースはクラスとインスタンスの考え方で区別する(2023.01.22)
- テスト管理ツールCAT、TestRail、QualityForwardのオンラインのマニュアルのリンク(2022.09.24)
- テスト管理ツールTestRail、CAT、QualityForwardの感想(2022.07.30)
「構成管理・Git」カテゴリの記事
- 「GitLabに学ぶ 世界最先端のリモート組織のつくりかた」の感想(2023.12.10)
- パッケージ設計の原則の意義は変化しているのか(2023.09.30)
- 小説活動にプルリクエスト駆動が必要になってきた(2022.05.08)
- 【資料公開】チケット駆動開発の解説~タスク管理からプロセス改善へ #redmine(2022.01.14)
- プログラミングしてる時はでっかいピタゴラ装置を作ってるみたいな感じ(2022.01.09)
「チケット駆動開発」カテゴリの記事
- Jiraの機能はTracに似ている気がする #redmine(2025.06.01)
- Redmineは組織のナレッジ基盤として実現可能なのか~島津製作所の事例を読み解く #redmineT(2024.12.29)
- 第26回redmine.tokyo勉強会の感想~多様性はコミュニティが成功する重要な要因の一つ #redmineT(2024.06.15)
- チケットはデータでとプロセスの二面性を持つ #redmine(2023.12.24)
- 小説活動にプルリクエスト駆動が必要になってきた(2022.05.08)
「Agile」カテゴリの記事
- Jiraの機能はTracに似ている気がする #redmine(2025.06.01)
- チームトポロジーにおける4チームのインタラクションをUMLで整理してみた(2025.01.12)
- チームトポロジーの感想~大規模アジャイル開発でも組織構造は大きく変化する(2025.01.01)
- 「世界一流エンジニアの思考法」の感想(2024.12.08)
- 「システムアーキテクチャ構築の原理」の感想part2~非機能要件がシステムのアーキテクチャに影響を与える観点をプロセス化する(2024.05.06)
コメント