アットマーク・アイティ @IT| @IT情報マネジメント| @IT自分戦略研究所| QA@IT| イベントカレンダー  
 
 @IT > .NETエンタープライズ新時代 > フローの重視〜「Visual Studio Team Systemで実践するソフトウェアエンジニアリング」
 
@IT Special

 

PR

「Visual Studio Team Systemで実践する
ソフトウェアエンジニアリング」


フローの重視
フローに基づく計画とプロジェクトマネジメントの手法では、中間工程の進行中作業(Work in Process)を最小限に抑えることが求められる。そうすることで、問題の発見が遅れたり、想定外のやり直し作業が突然発生したりするリスクが軽減されるからだ。そしてフローを継続的に測定するとボトルネックの形成が明らかになる。

本記事は、日経BPソフトプレス社が発行する書籍「Visual Studio Team Systemで実践するソフトウェアエンジニアリング〜成功する開発プロジェクト運営のために〜」の第1章 1.3「フローの重視」を、同社の許可を得て転載したものです。

本書は Visual Studio Team System の開発チームにおいてプロダクト プランナーを務めた Sam Guckenheimer が Juan J. Perez と共著で書き記した書籍です。本書ではそもそも Visual Studio Team System という製品を通じて開発者の方々に提供したかったバリューは何なのか説明を行い、またそのバリューを最大限に受け取っていただくために理解いただきたい理論的な背景を、抽象的過ぎずまた細部にとらわれすぎることなく解説を行なっています。

ご注意:本記事は、書籍の内容を改訂することなく、そのまま転載したものです。このため用字用語の統一ルールなどは@ITのそれとは一致しません。また注釈、図版番号に関しても書籍内容のまま転載しています。あらかじめご了承ください。

 バリューアップパラダイムの中心にあるのが、フローの重視です。「フロー」という言葉には異なる2つの意味があり、どちらもソフトウェアプロジェクトの計画において重要です。

 第一の意味は、人間がうまく実行できる経験です。Mihaly Csikszentmihalyiは 『Flow: The Psychology of Optimal Experience』で以下のように述べています。

 最高の経験というものの一般的な特徴を人々がどのように表現するか調べたことがある。それによると、最高の経験とは、目標と規則が明示されて個人の活動のレベルがはっきりとわかる行動体系の中で、自分には目の前の問題に対処する適切な能力が備わっていると実感できることである。しっかりと集中しているため、関係のないことを考えたり問題が起こらないか気に病んだりする余地はない。また自意識は消え、時間の感覚も変化する。このような経験を生み出す活動は喜びを伴うので、損得に関係なく、あるいは困難や危険を伴う場合でも、皆進んでやろうとする。(!0)

 この意味での「フロー」は、eXtreme Programming(XP)提唱者や個人の活動を重視するその他の手法の提唱者がよく取り上げています。

 第二の意味は、進捗の測定基準としての顧客価値フローです。この考え方について、David J. Andersonは『Agile Management for Software Engineering』で以下のように述べています。

 フローとは、システム全体を通して価値が常に動いていることを意味する。顧客価値となる機能は、稼働コードの提供を経ながら各変化段階を通して変動し続け、処理能力は着実に達成されていく。(!1)

 このパラダイムでは、計画した各タスクの完了を基本基準として進捗を把握するのではなく、達成できた価値を単位とします。達成した価値の処理能力および価値単位の達成度で示される進捗率が、計画と進捗測定の指標になります。

 これに相応して、価値フローという考え方では、フローに課される制約を把握することが必然的に求められます。フロー全体の流れを調整するには、最も重大なボトルネック、つまりプロセスで特に非効率的な部分を特定し、それを修正してから次に大きいボトルネックに対処します。Andersonは次のように説明しています。

 開発マネージャは、システムにおいて変化の各過程を通して価値フローを明確にする必要がある。さらに、システムにおける開発進捗度および各設計項目への対応にかかる時間について責任を持つ。開発マネージャは、どうしたら開発進捗率を高め、所要時間を短縮できるかを理解するために、システムのしくみを理解し、制約を見極め、システム工程の保護、活用、格下げまたは格上げについて適切な決断を行わなければならない。(!2)

 フローに基づく計画とプロジェクトマネジメントの手法では、図1-3に示すように、中間工程の進行中作業(Work in Process)を最小限に抑えることが求められます。そうすることで、問題の発見が遅れたり、想定外のやり直し作業が突然発生したりするリスクが軽減されます。

図1-3 シナリオ達成フローを日単位で測定すると、進捗のリズムを把握でき、ボトルネックの発生時にすぐ発見できる。

 図1-3 が示すように、フローを継続的に測定するとボトルネックの形成が明らかになります。このイテレーションで計画した作業は、開発工程(「アクティブ」から「解決済み」へ移行)では順調に進んでいますが、テスト工程(「解決済み」から「終了」へ移行)ではどんどん積み重なっています。これにより、進行中作業が中間工程にたまってしまいます。開発工程だけを見れば、アクティブ作業項目が減少しているので完了予定日までに作業が終わるように見えるかもしれませんが、ボトルネックがあるために終了項目のラインはなかなか上昇せず、予定日までに作業が完了しないことがわかります。これに基づいてボトルネックを調査すると、テストリソースが足りないのか、または開発工程の作業品質が低いのか、問題の原因を突き止めることができます。

■1.3.1 ワークダウン手法との対比

 ワークダウン手法の象徴として、プロジェクトマネジメントを表現する「鉄の三角形」が広く説かれています。この考え方では、プロジェクトマネージャが管理する可変要素は、時間、リソース(とりわけ人的資源が最重要)、機能の3つに限定されています。4番目の要素として品質も考慮するなら(現在はこれが一般的)、図1-4のような四面体になります。

図1-4 ワークダウン手法の古典的概念において、「鉄の三角形」(または四面体)はプロジェクトをタスクの固定的集合と見なす。この四面体のいずれかの面を拡大するには、他の面も拡大する必要がある。

 Steve McConnell は『Rapid Development』の中で、鉄の三角形について以下のように述べています。

 この三角形のバランスを保つには、スケジュール、コスト、成果物のバランスをとる必要がある。この三角形の成果物のコーナーを拡大するには、コストとスケジュールのどちらか一方または両方を拡大する必要がある。これは他のどのコーナーについても同様である。三角形のいずれかのコーナーを変えるには、残りの2つのコーナーの少なくともどちらかを変えてバランスをとらなければならない。(!3)

 この考え方では、プロジェクトマネージャは最初にある程度のリソースと時間を用意しています。機能または品質を変更する場合は、時間またはリソースを増やす必要があります。すべての面がつながっているので、どれか1つを大きくするなら他も大きくしなければなりません。

 このパラダイムは広く普及していますが、うまく機能していません。ニュートン物理学が特殊状況であったと今では知られているように、鉄の三角形も、工程は順調に進むものであるという前提に基づく特殊状況なのです。つまり、リソースの生産性はきわめて均等であり、タスク達成効率にはばらつきがほとんどなく、システムのどこにも余分なキャパシティはないということが前提となっています。このような前提が成立するプロジェクトもときには存在します(特にリスクの低いプロジェクトの場合)。しかし残念ながら、一般的なソフトウェアプロジェクトはそうではありません。

 アジャイル手法のユーザーの多くは、このような見方と相反する実例を示してきました。たとえば、信頼性などのサービス品質を向上させることで時間を「短縮」できることがよくあります。リソースと時間はそのままでも、フローを大きく改善するこ とが可能です。(!4)

■1.3.2 透明性

 誰もが知っているとおり、ほとんどのソフトウェアプロジェクトは計画より遅れます。進行が遅れるだけでなく、遅れが発見されるのも遅いのが実情です。(!5)本書のほとんどすべての章では、この現象がもたらすさまざまな結果を取り上げています。こうした結果の1つが、フローの効率を損なう集団思考と否認の悪循環です。作業が遅れると、計画の見直しが求められ、それがより楽観的な見通しにつながり、それによってさらに作業が遅れるという繰り返しです。このようなプロジェクトではほとんどの構成員が楽観的な計画を立て、計画の見直しに次ぐ見直しを行いますが、現実的な見通しは立ちません。当然ながら、行き着く先はデスマーチ(死の行進)です。

 こうなる原因は、計画能力や時間管理能力の欠如ではありません。ほとんどの場合、チームメンバ間で優先順位や期待が一致していないことが原因です。多くのソフトウェアエンジニアリング手法では、作業状況がさまざまな場所で管理されます。各種スプレッドシート、Microsoft Projectファイル、要求データベース、バグデータ ベース、テスト管理システム、トリアージ(優先順位)議事録などがあります。情報がこのように分散していると、プロジェクトの全体像を把握することは非常に困難です。参照しなければならない情報の管理場所が多すぎて、すべての情報を1つのスケジュールで調整するのは難しくなります。また、あまりに多くの場所で管理していると、見つかった情報が既に古くなっているという場合も多くなります。

 すべてのプロジェクトがそうであるとは限りません。一部のコミュニティプロジェク トでは、開発スケジュールをWebで公開しており、個人参加者がそれぞれのタスクに何を期待するかを明確にしてコミュニティで共有しています。プロジェクト内のすべての作業を見えるようにすると、好循環が生まれます。もちろん、その前提として、プロジェクトがイテレーション(反復)方式で構築されていること、スケジュールと見積もりの精度が適切であること、トリアージによってそのイテレーションで利用可能なリソースに合わせて作業項目の優先度が適切に調整されていることが必要です。

 アジャイル手法の1つであるスクラム(SCRUM)では、図1-5で示すように、製品バックログの透明性という考えを提唱しています。スクラムの考案者Ken SchwaberとMike Beedleによる製品バックログの定義は以下のとおりです。

 製品バックログとは、システムに組み込むべき技術的機能と業務を優先順位順に保持しながら進化するキューである。製品バックログは、製品または工程に関心を持っている人物がその製品にとって必要または有用であると考えた要素をすべて含んでいる。これは、将来のリリースに変更として加えられる予定のすべての機能、技術、拡張、バグ修正のリストである。その製品に対して行われる作業はすべて製品バックログ内に含まれている。(!6)

 このような透明性は、さまざまな理由から非常に効果的です。これによって作られる「資料一式」は、完了作業と残存作業に関する1つの固有の情報源として管理されます。図1-3のようなフローの測定基準と組み合わせると、全チームメンバが同じデータと計画を参照できるので、チーム内の信頼性が築かれます。そして最終的に、チームの連帯責任と個人の責任の間に好循環が生まれます。自分のタスクの完了を待っている人の存在がはっきりすると、タスクを終わらせようという気持ちが強くな ります。(!7)

図1-5 スクラム手法の中心的な概念図。この図は管理の視点で見たフローをよく表している。スクラムは、管理技法としての製品バックログという概念を提唱した先駆的存在である。

(!0) Mihaly Csikszentmihalyi, Flow: The Psychology of Optimal Experience (New York: HarperCollins, 1990), 71. 【邦訳】『フロー体験喜びの現象学』今村浩明訳(世界思想社、1996 年)

(!1) David J. Anderson, Agile Management for Software Engineering: Applying the Theory of Constraints for Business Results (Upper Saddle River, NJ: Prentice Hall, 2004), 77. 【邦訳】『アジャイルソフトウェアマネジメント』宗雅彦、前田卓雄訳(日刊工業新聞社、2006 年)

(!2) 同上、77 ページ。

(!3) Steve McConnell, Rapid Development (Redmond, WA: Microsoft Press, 1996), 126. 【邦訳】『ラピッドデベロップメント― 効率的な開発を目指して』日立インフォメーションアカデミー訳 (アスキー、1998 年)

(!4) このテーマについては、2005 年11 月のTOCICO カンファレンスでDavid J. AndersonとDragos Dumitriu が制約理論の用語を使って詳しく論じている。「From Worst to Best in 9 Months: Implementing a Drum-Buffer-Rope Solution in Microsoft's IT Department」というタイトルで行われたこの講演の資料はhttp://www.agilemanagement.net/Articles/Papers/From_Worst_to_Best_in_9_ Months_Final_1_2.pdf で参照できる。

(!5) The Standish Group(http://www.standishgroup.com/)は、隔年で「The Chaos Report」という調 査の結果を公開している。2004 年のデータによると、プロジェクトの71 %は遅れているか、予算超過か、中止になっている。

(!6) Ken Schwaber and Mike Beedle, Agile Software Development with SCRUM (Upper Saddle River, NJ: Prentice Hall, 2001), 32-3. 【邦訳】『アジャイルソフトウェア開発スクラム』長瀬嘉秀、今野睦監訳、スクラム・エバンジェリスト・ グループ訳(ピアソン・エデュケーション、2003 年)

(!7) Bellotti, V., Dalal, B., Good, N., Bobrow, D. G., and Ducheneaut, N., "What a to-do: studies of task management towards the design of a personal task list manager." ACM Conference on Human Factors in Computing Systems (CHI2004); 2004 April 24-29; Vienna; Austria. NY: ACM; 2004; 735-742.


Microsoft .NETはエンタープライズのシステム基盤として、多くの企業向けシステムでの開発基盤、および運用プラットフォームという形で導入が進んでいる。 .NETにかかわるキーマンたちの声を聞き、実際の導入事例を見て、.NETが開発をどう変えるのかを知ろう。
【注目インタビュー】 〜 .NETのキーマンがエンタープライズ戦略を語る
Visual Studio Team Systemで実践する ソフトウェアエンジニアリング
【導入事例】 〜 SIerに聞く。エンタープライズ向け.NET導入の実際
第1回
日本ユニシス株式会社
第2回
株式会社 富士通関西システムズ
第3回
アバナード株式会社
第4回
株式会社アークウェイ
第5回
株式会社ビジネス・インフィニティ & 株式会社NTTデータ

提供:マイクロソフト株式会社
企画:アイティメディア 営業局
制作:@IT編集部
掲載内容有効期限:2007年6月29日
 



■関連リンク


マイクロソフト株式会社

Microsoft .NET

Microsoft .NET Framework

Microsoft Visual Studio 2005 Team System

■Microsoft .NET関連記事


Microsoft Visual Studio 2005による Webアプリケーションテスト技法
第3章 VSTSとTFSによるソフトウェアテストの全体
第4章 4.3 データアクセスクラスに対する単体機能テスト
第5章 テストチームによる結合機能テストの実施
【連載】.NETの動作原理を基礎から理解する!
第1回 .NETアプリケーションを動かす土台
第2回 .NETアプリケーションが起動する仕組み
第3回 .NETアプリケーションが実行される仕組み
■ 連載完 ■
【特集】.NET開発者のための開発プロセス入門
【前編】 アジャイル開発を導入できていない.NET開発者たちへ
【後編】 .NETでアジャイルを導入するための実践テクニック
【連載】.NETで始めるデザインパターン
第1回 .NET開発におけるデザインパターンの有用性
第2回 うまくデザインパターンを使うための心得
第3回 リファクタリングにより導き出すStrategyパターン
第4回 リファクタリングで導き出すTemplate Methodパターン
第5回 Compositeパターンを導き出すための準備

第6回 リファクタリングにより導き出すCompositeパターン
第7回 デザインパターンの落とし穴

■ 連載完 ■


 
@ITトップ|@IT Special インデックス|会議室|利用規約|プライバシーポリシー|サイトマップ