適応型ソフトウェア開発について

適応型ソフトウェア開発(ASD: Adaptive Software Development)の概要

適応型ソフトウェア開発とは

適応型ソフトウェア開発(以下ASD)とは、アジャイル開発手法の一つであり、継続的な仕様変化に適応することを重視した手法です。
この開発プロセスは、1990 年代初頭にJim HighsmithとSam BayerがRapid Application Development (RAD) を改良して設計したフレームワークであり、1999年に発行されたHighsmith氏の著書『Adaptive Software Development』によって、その手法が広く知れ渡りました。


適応とは

ASDにおける「適応」とは、ソフトウェア開発における継続的な仕様変更に対して、開発プロセスを「適応」するという意味です。
つまり、作り始めて分かってきたシステム仕様の詳細に対して、環境や条件を変化させて適合しながら開発を進めていくことになります。
ASDは「目の前の作業にメソッドを継続的に適応させることが通常の状態である」という原則を体現します。


ASDの特徴

ASDは、複雑で状況変化の激しいシステムを開発する場合に適した手法です。
「複雑なソフトウェアプロジェクトで成功する方法は、厳格な計画に固執せず、プロジェクト全体を通じて継続的に学習することである」と考えます。
ASDでは、顧客との緊密なコラボレーションへのこだわりと、ソフトウェアプロジェクトに内在する不確実性を積極的に受け入れる姿勢を重要視します。


ASDのメリット

システムの詳細な仕様というものは、作ってみなければわからないことが多くあります。
そのため、アウトラインを大まかに決めた状態で開発に着手できるという点がASD開発の強みとなっています。

ASDでは、厳密な計画を持ったPDC(Plan - Do - Check)サイクルではなく、方向性に的を絞った緩やかな計画からの反復的な開発を実施していきます。
そして、レビューを踏まえて、開発から学習していき、目標に収束していきます。
こうすることで、結果的に、開発チームが成長していくので、質の高いソフトウェア開発が実現できるようになります。


ASD ライフサイクル

ASD開発では「思索」「協調」「学習」という3つのフェーズで構成される反復サイクルを繰り返しながら開発を進めます。
このサイクルは、開発チームが最小限の計画と継続的な学習によって製品を進化させ、変化する要求に対して迅速に適応することを可能にします。


It is difficult to Collaborate without Learning or to Learn without Collaborating.
It is difficult to Speculate without Learning or to Learn without Speculating.
It is difficult to Speculate without Collaborating or to Collaborate without Speculating.

Speculation(思索・推論)

Speculationとは、他の方法論で「計画」と呼ばれるフェーズです。
このフェーズでは、どのような機能を開発するのかという検討を行い、仕様変化を受け入れることができるような開発日程を決定します。

複雑なシステムを開発する場合、結果を予測することは困難であり、計画段階では正しいことよりも間違っていることの方が多いものです。
そこで、ASDでは、「計画」という用語を「思索・推論」に置き換えることによって、その不確実性を認めています。
(計画とは、結果の確実性を示す決定論的な用語であり、計画の変更は失敗を連想してしまう。)

チームは、複雑な問題における不確実性を認識して、短いサイクルでの推測による探索と実験の反復を実行します。
・現在のすべてのシナリオを考慮してミッション・ステートメント(組織の行動指針)を準備します。
・最終目標についてのコンセンサス(合意)を構築します。 そして、ミッションアーティファクト(ミッションの成果物)を作成して共有します。
・プロジェクトのライフサイクルを通じて学んだことを、次のライフサイクルで適応できるように準備します。


Collaboration(協調)

Collaborationとは、開発者が実際に開発作業を行うフェーズです。
このフェーズでは、チームメンバーの多様な経験と知識を共有して、複雑な問題を解決することを重視します。

チームは協力的な環境を構築し、機能を開発するための知識共有を積極的に行います。
また、開発チーム内だけでなく、開発者とエンドユーザーの間でも、緊密で継続的なコラボレーションが重要です。
そのために、思索で決めたイテレーション計画に沿って作業を進め、短い期間で機能をリリースし、製品を見える状態にしておきます。


Learning (学習)

Learningは、他の方法論で「レビュー」や「レトロスペクティブ(振り返り)」と呼ばれるフェーズです。
ASDでは、ソフトウェア開発プロセスに関与する全員が、プロジェクト全体を通じて継続的に学習することを重視します。

チームは、設計、構築、テストのサイクルを短い繰り返しで実行します。
こうした繰り返しにより、チームは小さな間違いを犯しては修正するというループを通じて知識を蓄積することができます。
間違いと修正のパターンが経験となり、最終的には習得につながります。

またこのフェーズでは、イテレーション結果をレビューして、次イテレーションに対しての準備を行います。
この品質レビューによって製品をリリースするか、適応サイクル計画に戻るかの決定を行い、順次開発を進めていく形になります。


関連ページ