Adaptive-software-development-quick-guide

提供:Dev Guides
移動先:案内検索

アダプティブS/W開発-はじめに

アジャイルとは何ですか?

文学用語では、「アジャイル」という言葉は、すばやく簡単に動くことができる人、またはすばやく明確に考えて行動できる人を意味します。 ビジネスでは、「アジャイル」は作業の計画と実行の方法を説明するために使用され、必要に応じて変更を加えることが仕事の重要な部分であると理解されています。 ビジネスの「俊敏性」とは、企業が常に市場の変化を考慮に入れる立場にあることを意味します。

ソフトウェア開発では、「アジャイル」という用語は、「変更に対応する能力-要件、技術、および人からの変更」を意味するようになっています。

アジャイルマニフェスト

アジャイルマニフェストは2001年にソフトウェア開発者チームによって公開され、変化する要件と顧客の関与に対応する開発チームの重要性を強調しています。

アジャイル宣言は-

私たちは、ソフトウェアを開発し、他の人がそれを行うのを支援することにより、ソフトウェアを開発するより良い方法を発見しています。 この作業を通じて、私たちは価値になっています-

  • プロセスとツールを介した個人と相互作用。
  • 包括的なドキュメントよりも機能するソフトウェア。
  • 契約交渉に関する顧客コラボレーション。
  • 計画に従うことによる変化への対応。

つまり、右側の項目には値がありますが、左側の項目にはさらに値を付けます。

敏ility性の特徴

アジリティの特徴は次のとおりです-

  • アジャイルソフトウェア開発の俊敏性は、チーム全体の文化に焦点を当てており、権限が与えられ、自己組織化されている複数の専門分野にわたる機能横断型のチームです。
  • 責任と説明責任を共有します。
  • 効果的なコミュニケーションと継続的なコラボレーションを促進します。
  • チーム全体のアプローチにより、遅延と待ち時間が回避されます。
  • 頻繁かつ継続的な配信により、迅速なフィードバックが保証され、チームが要件に合わせて調整できるようになります。
  • コラボレーションにより、実装、不具合の修正、変更への対応において、さまざまな視点をタイムリーに組み合わせることが容易になります。
  • 進歩は、透明性を強調し、持続可能で、予測可能なものです。

アジャイル手法

アジャイルメソッドの初期の実装には、Rational Unified Process、Scrum、Crystal Clear、Extreme Programming、Adaptive Software Development、Feature Driven Development、Dynamic Systems Development Method(DSDM)が含まれます。 2001年にアジャイルマニフェストが公開された後、これらは現在、アジャイル手法と総称されています。

このチュートリアルでは、アジャイル手法-*適応型ソフトウェア開発*を学習します。

適応ソフトウェア開発とは何ですか?

アダプティブソフトウェア開発はアダプティブプラクティスへの動きであり、決定論的なプラクティスを複雑なシステムと複雑な環境のコンテキストに残します。 適応型ソフトウェア開発では、複雑なシステムを構築するための手法として、コラボレーションと学習に焦点を当てています。 Rapid Application Development(RAD)およびEvolutionary Life Cyclesのベストプラクティスから進化しています。 その後、Adaptive Software Developmentが拡張され、管理のためのアダプティブアプローチが含まれるようになりました。

ASDライフサイクル

Jim Highsmithは2000年にAdaptive Software Developmentに関する本を出版しました。 ハイスミスの言葉で-

'_「適応型ソフトウェア開発は進化モデルのように周期的であり、フェーズ名は推測、コラボレーション、学習がますます複雑になるシステムの予測不可能な領域を反映しています。 アダプティブ開発は、2つの重要な方法で、その進化の遺産よりもさらに進んでいます。 まず、決定論を明示的に出現に置き換えます。 第二に、ライフサイクルの変化を超えて、管理スタイルのより深い変化へと進みます。」_

SDLCモデル-進化

ソフトウェア開発ライフサイクル(SDLC)モデルは、ソフトウェア開発プロジェクトの各段階で実行されるアクティビティを記述するフレームワークです。

ソフトウェア開発ライフサイクルでは、アクティビティは5つのフェーズで実行されます-

  • 要件収集-開発されるソフトウェアの要件が収集されます。 これらの要件は、顧客/ユーザーが理解できる言語になります。 ドメイン固有の用語をお勧めします。
  • 分析-収集された要件は実装の観点から分析され、ソフトウェア仕様は機能要件と非機能要件の両方をカバーするように記述されています。
  • 設計-このフェーズでは、開発用に選択されたテクノロジに基づいて、ソフトウェアアーキテクチャと実装仕様に到達します。
  • 構築-このフェーズでは、コードの開発、単体テスト、統合、統合テストが行​​われ、ビルドが生成されます。
  • テスト-ビルドされたソフトウェアの機能テストはこのフェーズで行われます。 これには、非機能要件のテストも含まれます。

これらのアクティビティを実行するには、2つのアプローチがあります-

  • 規定-フレームワークで定義されている規定の方法でアクティビティを実行する方法を提供するSDLCモデル。
  • 適応-従う必要がある特定のルールを使用して、アクティビティの実行に柔軟性を与えるSDLCモデル。 アジャイルメソッドは主にこのアプローチに従い、それぞれにルールがあります。 ただし、アダプティブまたはアジャイルアプローチに従うことは、ソフトウェアが規律に従わずに開発されることを意味するものではありません。 これは混乱を招きます。

特定のSDLCモデルが良いか悪いとは言えないことを理解する必要があります。 それぞれに長所と短所があり、特定の状況に適しています。

あなたのプロジェクトにSDLCモデルを選択するとき、あなたは理解する必要があります-

  • 組織のコンテキスト
  • 技術コンテキスト
  • あなたのチーム構成
  • お客様のコンテキスト

たとえば、ソフトウェア開発が予測可能な場合は、規範的なアプローチを使用できます。 一方、ソフトウェア開発が予測不可能な場合、つまり 要件が完全に知られていない、または開発チームが現在のドメインやテクノロジーなどに事前にさらされていない その場合、アダプティブアプローチが最適です。

次のセクションでは、業界全体のソフトウェア開発プロジェクトの実行中に進化する最も一般的なSDLCモデルを理解します。 また、それぞれの長所と短所、およびそれらが適しているコンテキストを知ることもできます。

SDLC-ウォーターフォールモデル

Waterfallモデルは、広く知られ、理解され、一般的に使用されている古典的なSDLCモデルです。 1970年にRoyceによって導入され、業界全体のさまざまな組織におけるソフトウェア開発の一般的なアプローチとして引き続き採用されています。

ウォーターフォールモデルでは、各ライフサイクルフェーズは、以前のライフサイクルフェーズが完了した後にのみ開始できます。 したがって、フィードバックループのない線形モデルです。

ウォーターフォールのライフサイクル

ウォーターフォールモデル–強み

ウォーターフォールモデルの強みは次のとおりです-

  • わかりやすく、使いやすい。
  • 経験の浅い開発チームに構造を提供します。
  • マイルストーンはよく理解されています。
  • 要件の安定性を設定します。
  • 管理制御(計画、監視、レポート)に最適です。
  • コストやスケジュールよりも品質が重要な場合に有効です。

ウォーターフォールモデル–弱点

滝モデルの弱点または欠点は-

  • 理想化-現実とうまく一致しません。
  • 非現実的-プロジェクトの初期段階で正確な要件を期待することはできません。
  • より一般的な探索的開発の反復的な性質を反映していません。
  • 変更が難しく、費用がかかります。
  • ソフトウェアはプロジェクトの最後にのみ配信されます。 このため-
  • 重大な欠陥の発見を遅らせます。
  • 廃止された要件の配信の可能性。
  • 小規模なチームやプロジェクトではコストがかかる可能性のある、大きな管理オーバーヘッド。
  • アナリスト、デザイナー、開発者、テスターなど、あらゆる段階で経験豊富なリソースが必要です。
  • テストが開始されるのは、開発が完了し、テスターが以前のフェーズに関与していない場合のみです。
  • 各フェーズはサイロで実行されるため、部門を超えたチームの専門知識は共有されません。

ウォーターフォールモデルを使用する場合

以下の場合、ウォーターフォールモデルを使用できます。

  • 要件はよく知られています。
  • 製品の定義は安定しています。
  • 技術はよく理解されています。
  • 既存の製品の新しいバージョン。
  • 既存の製品を新しいプラットフォームに移植する。
  • 構造化された機能横断型チームを備えた大規模な組織。
  • コミュニケーションチャネルは、組織内および顧客とも確立されています。

進化的プロトタイピングモデル

Evolutionary Prototypingモデルを使用したソフトウェア開発では、開発者は要件フェーズでプロトタイプを構築します。 その後、エンドユーザーはプロトタイプを評価し、フィードバックを提供します。 フィードバックは、プロトタイプの修正または追加機能です。 フィードバックに基づいて、開発者はプロトタイプをさらに改良します。

したがって、製品は、Prototype→Feedback→Refined Prototype Cycles、したがってEvolutionary Prototypingという名前で進化します。 ユーザーが機能と製品の動作に満足すると、プロトタイプコードが最終製品の配信に必要な標準に引き上げられます。

最終製品の配送

進化的プロトタイピングモデル–強み

進化的プロトタイプモデルの長所または利点は次のとおりです-

  • 顧客/エンドユーザーは、プロトタイプを見て収集されたシステム要件を視覚化できます。
  • 開発者は顧客から学習するため、ドメインまたは本番環境に関する曖昧さはありません。
  • 柔軟な設計と開発が可能です。
  • プロトタイプとの相互作用は、追加で必要な機能の認識を刺激します。
  • 予期しない要件と要件の変更に簡単に対応できます。
  • 着実かつ目に見える進歩の兆候が生まれます。
  • 正確で保守可能な最終製品の提供。

進化的プロトタイピングモデル–弱点

進化的プロトタイプモデルの弱点または欠点は次のとおりです-

  • コードと修正の開発で構造化開発を放棄する傾向がありますが、それはモデルで規定されているものではありません。
  • このモデルは、手っ取り早い方法で評判が悪い。
  • 全体的な保守性はおそらく見落とされる可能性があります。
  • 顧客は、開発者が最終ステップを実行する機会を与えずに、おそらく最終版としてプロトタイプの提供を要求できます。 最終製品の標準化。
  • プロジェクトは永久に継続することができ(継続的なスコープクリープを伴う)、経営者はそれを評価しないかもしれません。

進化的プロトタイピングモデルを使用する場合

あなたは進化的プロトタイプモデルを使用することができます-

  • 要件が不安定な場合、または明確にする必要がある場合
  • ウォーターフォールモデルの要件の明確化段階として
  • ユーザーインターフェイスを開発するには
  • 短命のデモンストレーション用
  • 新規またはオリジナルの開発用
  • 新しい技術を実装するために

SDLC-反復増分モデル

反復インクリメンタルモデルでは、最初に、システム全体の部分的な実装が構築され、配信可能な状態になります。 強化された機能が追加されました。 以前の配信からの欠陥があれば、それが修正され、動作中の製品が配信されます。 製品開発全体が完了するまで、このプロセスが繰り返されます。 これらのプロセスの繰り返しは、繰り返しと呼ばれます。 すべての反復の終わりに、製品の増分が配信されます。

イテレーション

反復増分モデル-強み

反復増分モデルの利点または長所は次のとおりです-

  • 最初に優先順位付けされた要件を作成できます。
  • 最初の製品の配送はより高速です。
  • 顧客は重要な機能を早期に入手します。
  • 初期配送コストを削減します。
  • 各リリースは製品の増分であるため、顧客は常に使用可能な製品を手に入れることができます。
  • 顧客は製品の増分ごとにフィードバックを提供できるため、開発終了時の驚きを回避できます。
  • 要件の変更に簡単に対応できます。

反復増分モデル-弱点

反復増分モデルの欠点は次のとおりです-

  • 反復の効果的な計画が必要です。
  • 必要な機能を含めるための効率的な設計と、後で変更するためのプロビジョニングが必要です。
  • 増分の定義を可能にするために、完全かつ完全に機能するシステムの早期定義が必要です。
  • 一部のモジュールは他のモジュールよりもずっと前に開発されるため、明確に定義されたモジュールインターフェイスが必要です。
  • 完全なシステムの総コストは低くなりません。

反復増分モデルを使用する場合

反復増分モデルは、次の場合に使用できます-

  • ほとんどの要件は事前に知られていますが、時間の経過とともに進化することが予想されます。
  • 要件が優先されます。
  • 基本機能を迅速に提供する必要があります。
  • プロジェクトには長い開発スケジュールがあります。
  • プロジェクトには新しいテクノロジーがあります。
  • ドメインはチームにとって新しいものです。

SDLC-迅速なアプリケーション開発モデル

Rapid Application Development(RAD)モデルには次のフェーズがあります-

  • 要件計画フェーズ-要件計画フェーズでは、ワークショップを実施して、ビジネス上の問題を構造化された方法で議論する必要があります。
  • ユーザー説明フェーズ-ユーザー説明フェーズでは、自動ツールを使用してユーザーから情報を取得します。
  • 構築フェーズ-構築フェーズでは、コードジェネレーター、スクリーンジェネレーターなどの生産性ツール。 タイムボックス内で「完了まで実行」アプローチで使用されます。
  • カットオーバーフェーズ-カットオーバーフェーズでは、システムのインストール、ユーザー受け入れテスト、およびユーザートレーニングが実行されます。

RADフェーズ

迅速なアプリケーション開発モデル–強み

迅速なアプリケーション開発モデルの利点または長所は次のとおりです-

  • 少ないチームメンバーでサイクルタイムを短縮し、生産性を向上させると、コストが削減されます。
  • サイクル全体を通じて顧客が関与することで、顧客満足度とビジネス価値を達成できないリスクを最小限に抑えます。
  • フォーカスは、「見たいものが見える」モード(WYSIWYG)でコードに移動します。 これにより、構築されているものが正しいことが明確になります。
  • モデリングの概念を使用して、ビジネス、データ、およびプロセスに関する情報をキャプチャします。

迅速なアプリケーション開発モデル–弱点

迅速なアプリケーション開発モデルの短所または長所は次のとおりです-

  • 加速された開発プロセスは、ユーザーに迅速に応答する必要があります。
  • 閉鎖が達成されないリスク。
  • レガシーシステムでは使いにくい。
  • 開発者と顧客は、短縮された時間枠で迅速な発射活動に取り組む必要があります。

迅速なアプリケーション開発モデルを使用する場合

迅速なアプリケーション開発モデルは次の場合に使用できます-

  • ユーザーはライフサイクル全体に関与できます。
  • プロジェクトはタイムボックス化できます。
  • 機能は段階的に提供できます。

Rapid Application Developmentモデルの長所は高く評価されていますが、業界ではあまり使用されていません。

SDLC-スパイラルモデル

スパイラルモデルは、ウォーターフォールモデルにリスク分析とRADプロトタイピングを追加します。 各サイクルには、ウォーターフォールモデルと同じ一連のステップが含まれます。

スパイラルモデル

スパイラルモデルには4つの象限があります。 それらについて詳しく説明しましょう。

象限1-目標、代替案、および制約を決定する

  • 目的-機能、パフォーマンス、ハードウェア/ソフトウェアインターフェイス、重要な成功要因など
  • 代替-構築、再利用、購入、下請けなど
  • 制約-コスト、スケジュール、インターフェースなど

象限2-代替案の評価、リスクの特定と解決

  • 決定された目的と制約に関連する代替案を検討します。
  • 経験不足、新技術、厳しいスケジュールなどのリスクを特定します。
  • 特定されたリスクを解決して、プロジェクトへの影響を評価し、必要な緩和および緊急事態計画を特定し、それらを実装します。 リスクは常に監視する必要があります。

象限3-次のレベルの製品を開発する

典型的な活動は次のとおりです-

  • デザインを作成する
  • 設計のレビュー
  • コードを開発する
  • コードを検査する
  • 試験品

象限4-次のフェーズを計画する

典型的な活動は次のとおりです-

  • プロジェクト計画を作成する
  • 構成管理計画を作成する
  • テスト計画を作成する
  • インストール計画を作成する

スパイラルモデル–強み

スパイラル法の利点または長所は次のとおりです-

  • 多くのコストをかけずに、リスクを早期に示します。
  • ラピッドプロトタイピングツールにより、ユーザーはシステムを早期に表示できます。
  • 重要な高リスク機能が最初に開発されます。
  • デザインは完璧である必要はありません。
  • ユーザーは、すべてのライフサイクル手順に密接に関与できます。
  • ユーザーからの早期かつ頻繁なフィードバック。
  • 頻繁に評価される累積コスト。

スパイラルモデル–弱点

スパイラル法の欠点または弱点は次のとおりです-

  • 目標、次の反復に進む準備ができていることを示す検証可能なマイルストーンを定義するのが難しい場合があります。
  • 計画、目標のリセット、リスク分析およびプロトタイピングに費やす時間はオーバーヘッドになる可能性があります。
  • リスクの評価に費やされる時間は、小規模または低リスクのプロジェクトには長すぎる場合があります。
  • スパイラルモデルは、新しいチームメンバーにとって理解が複雑です。
  • リスク評価の専門知識が必要です。
  • スパイラルは無期限に続く場合があります。
  • 開発者は、開発段階以外のアクティビティ中に再割り当てする必要があります。

スパイラルモデルを使用する場合

スパイラルモデルは次の場合に使用できます。

  • プロトタイプの作成が適切です。
  • リスク評価は重要です。
  • プロジェクトのリスクは中から高です。
  • ユーザーは自分のニーズを確信できません。
  • 要件は複雑です。
  • 製品ラインは新しいです。
  • 探査中に大幅な変更が予想されます。
  • 潜在的なビジネスの変化のため、賢明ではない長期的なプロジェクトのコミットメント。

SDLC-アジャイルメソッド

アジャイルメソッドはアジャイルマニフェストに基づいており、本質的に適応的です。 アジャイルメソッドが保証します-

  • チームのコラボレーション。
  • 顧客コラボレーション。
  • 継続的かつ継続的なコミュニケーション。
  • 変更への対応。
  • 動作中の製品の準備。

いくつかのアジャイルメソッドが登場し、タイムボックスイテレーションを使用した反復的かつ段階的な開発が促進されました。 アジャイル手法は適応的ですが、特定の手法のルールを迂回することはできないため、規律のとれた実装が必要です。

アジャイル手法–強み

アジャイル方式の利点または長所は次のとおりです-

  • 早期かつ頻繁なリリース。
  • 変化する要件への対応。
  • 顧客と開発者の間の毎日のコミュニケーション。
  • やる気のある個人を中心に構築されたプロジェクト。
  • 自己組織化チーム。
  • すぐに必要なものに焦点を当てたシンプルさ。
  • 将来のビルドやコードの負担がありません。
  • 有効性を改善するために動作を調整するための定期的な反射。

アジャイルメソッド–弱点

スパイラル法の欠点または弱点は-

  • お客様が利用できない場合があります。
  • チームは、メソッドのルールに従うための経験が必要です。
  • 反復で提供する必要がある機能を迅速に決定するには、適切な計画が必要です。
  • チームには、評価スキルと交渉スキルが求められます。
  • チームには効果的なコミュニケーションスキルが必要です。
  • 新しいチームは自分で組織化できない場合があります。
  • タイムボックス化された反復で開発および配信するための規律が必要です。
  • 設計はシンプルで保守可能な状態に保つ必要があるため、効果的な設計スキルが必要です。

アジャイルメソッドを使用する場合

アジャイルメソッドは次の場合に使用できます-

  • アプリケーションはタイムクリティカルです。
  • 範囲は制限されており、形式的ではありません(一部のアジャイルメソッドに特定の拡張機能を備えた、より大きなプロジェクトへのアジャイルメソッドのスケーリングが進行中です)。
  • 組織は規律ある方法を採用しています。

適応型ソフトウェア開発-進化

以前のSDLCモデルは、安定性、予測可能性、およびリターンの減少の実践により向いています。 インターネットプラットフォームなどの業界は、リターン環境、予測不可能、非線形、および高速なアプローチを増やすために動いています。

適応ソフトウェア開発(ASD)は、これらの問題に対処するために進化しました。 製品開発を管理する能力を高めるために、経営陣の観点から最も重要な要素としての出現に焦点を当てています。

ジムハイスミスの言葉では、「適応型ソフトウェア開発フレームワークは、従来のソフトウェア開発方法論の長年の経験に基づいており、ラピッドアプリケーション開発(RAD)技術に関するコンサルティング、実践、執筆、および製品開発の管理に関するハイテクソフトウェア企業との連携プラクティス」。

ウォーターフォールモデルは、わずかなフィードバックで、直線性と予測可能性によって特徴付けられることがわかりました。 Plan→Build→Implement のシーケンスとして表示できます。

ウォーターフォールモデル

スパイラルモデルなどの進化的ライフサイクルモデルは、*プラン→ビルド→サイクルの修正*を使用して、決定論的アプローチをアダプティブアプローチに移行しました。

進化的ライフサイクル

ただし、開業医の考え方は確定的であり、長期予測可能性は短期予測可能性に変わりました。 RADなどの進化的ライフサイクルモデルの実践は、決定論的ではないことがわかっています。

アダプティブライフサイクル

適応モデルは、異なる視点から構築されています。 進化モデルのように周期的ですが、フェーズの名前はますま​​す複雑なシステムの予測不可能な性質を反映しています。

適応開発は、2つの重要な方法で、その進化の遺産よりもさらに進んでいます-

  • 決定論を明示的に出現に置き換えます。
  • それは、ライフサイクルの変化を超えて、管理スタイルのより深い変化になります。

Adaptive S/W Development Lifecycle

アダプティブソフトウェア開発ライフサイクルの3つのフェーズは次のとおりです-

  • 推測-推測は、決定論的な単語計画、製品仕様の計画、またはプロジェクト管理タスクの計画を置き換えます。
  • 共同作業-共同作業とは、
  • 従来のプロジェクト管理の意味での管理、および
  • 出現に必要なコラボレーション環境の作成と維持。
  • Learn -Learnは、開発者と顧客の両方が、各開発サイクルの結果を使用して次の方向を学習することを目的としています。

適応型ソフトウェア開発-コンセプト

この章では、適応ソフトウェア開発のさまざまな概念を理解します。

複雑な適応システム(CAS)理論

サンタフェ研究所のブライアンアーサーと彼の同僚は、複雑な適応システム(CAS)理論を使用して、物理学、生物学、進化、および経済学の理解に革命をもたらしました。

ブライアン・アーサーは、リターンの減少、均衡、決定論的ダイナミクスの基本的な仮定に支配されている彼らの見解は、現実を理解するのにもはや十分ではないと主流の経済学者を説得しようとする彼の20年以上を頂点にした。 新しい世界は、増加するリターン、不安定性、原因と結果を判断できないことの1つです。

2つの世界は、行動、スタイル、文化が異なります。 彼らは-

  • さまざまな管理手法
  • さまざまな戦略
  • 異なる理解

複雑なソフトウェア開発

ソフトウェアアプリケーションの範囲が爆発的に拡大しているため、ソフトウェア開発組織でさえ、上記と同様の矛盾が生じています。

  • 1つの世界は、安定性と予測可能性の基本に根ざした管理慣行に由来する決定論的開発によって表されます(アーサーの用語では、収益の減少を意味します)。
  • セカンドワールドは、予測不可能で非線形かつ高速なリターン環境の減少から増加へと移行する業界に代表されます。

この第二世界の問題に対処するために、Jig Highsmithは、確定的ソフトウェア開発とは異なるフレームワーク、適応ソフトウェア開発を提供しました。

適応ソフトウェア開発は、複雑なシステムに対処することに焦点を当てています-

  • 開発ライフサイクルのための適応型ソフトウェア開発。
  • 従来のプロジェクト管理プラクティスとは異なる考え方を要求する適応管理手法。

このチュートリアルでは、これらの両方の実装を理解できます。

適応型ソフトウェア開発(ASD)は2つの観点に基づいています-

  • この章の最初のセクションで示した、複雑な適応システム(CAS)理論に基づく概念的視点。
  • に基づく実用的な視点
  • 確定的ソフトウェア開発方法論の長年の経験。
  • ラピッドアプリケーション開発(RAD)技術に関するコンサルティング、練習、および執筆。また、ハイテクソフトウェア企業と協力して製品開発の管理を行っています。

この章では、適応ソフトウェア開発の概念的な観点を理解します。

複雑な適応システム(CAS)の概念

複雑な適応システム(CAS)理論には多くの概念があります。 適応型ソフトウェア開発は、これらの概念のうち2つに基づいています-

  • 出現
  • 複雑

出現

複雑なソフトウェア製品開発プロジェクトでは、結果は本質的に予測不可能です。 しかし、成功した製品は常にそのような環境から出現します。

これは、複合適応システム(CAS)理論で説明されているように、出現によって発生する可能性があります。 単純な例、鳥の群れ行動によって理解できます。

あなたが鳥の群れを観察するとき、あなたはそれに気づく-

  • 各鳥はしようとします
  • 他の鳥を含む環境内の他の物体からの最小距離を維持します。
  • 近隣の鳥と速度を一致させます。
  • 近所の鳥の質量の知覚中心に向かって移動します。
  • グループの行動のルールはありません。 唯一のルールは、個々の鳥の行動に関するものです。
  • しかし、鳥の群れという緊急行動があります。 誤った鳥が追いつくために殺到すると、群れは障害物の周りで分裂し、反対側で改革します。

これは、適応開発における最も困難なメンタルモデルの変更の要件を示しています。その個々の自由を管理および整理する方法から、創造的な新しい秩序が自然発生的な自己組織化から予期せず現れるという概念までです。

開発に加えて、管理の観点からも出現が最も重要な概念です。

複雑

ソフトウェア開発のコンテキストでは、複雑さは約です-

  • 開発者、顧客、ベンダー、競合他社、株主などのチームの個人、人数、スピード。
  • サイズと技術的な複雑さ。

適応型ソフトウェア開発プラクティス

アダプティブソフトウェア開発は、ソフトウェア管理の実践について異なる視点を提供します。 次のセクションでは、品質とRADの2つの重要なプラクティスを理解できます。どちらも要件を収集するための影響があります。

このチュートリアルの「適応型ソフトウェア開発の実践」の章で、すべての実践の詳細を見つけることができます。

品質

複雑な環境では、最初から何が正しいかを予測できないため、「最初に正しく行う」という昔からの慣習は機能しません。 適切な価値を生み出すための目標が必要です。 ただし、複雑な環境では、スコープ(機能、パフォーマンス、欠陥レベル)、スケジュール、リソースなどの値コンポーネントの組み合わせと順列が非常に大きいため、最適な値を得ることができません。 したがって、焦点は、競争市場で最高の価値を提供するためにシフトすることです。

RADプラクティス

RADプラクティスは一般的に以下の組み合わせを伴います-

  • 進化的ライフサイクル
  • カスタマーフォーカスグループ、JADセッション、テクニカルレビュー
  • タイムボックス化されたプロジェクト管理
  • 継続的ソフトウェアエンジニアリング
  • 戦場のある専用チーム

RADプロジェクトには、本質的に適応性のある、創発的なフレーバーがあります。 多くのIT組織はRADに反対しています。 ただし、マイクロソフトなどは、RADに匹敵する技術を使用して、信じられないほど大きく複雑なソフトウェアを作成しました。これは、基本的な世界観について疑問を投げかけるためです。

RADプラクティスとMicrosoftプロセスは、どちらも適応型開発の実際の例です。 それらにラベルを付けて(つまり、適応開発)、科学知識(つまりCAS理論)が増えていることに気付いて、なぜ機能するのかを説明します。 これは、これらのプラクティスをより広範囲に使用するための基礎を提供するはずです。

適応型ソフトウェア開発-ライフサイクル

適応型ソフトウェア開発はRADプラクティスから発展しました。 チームの側面もこれらのプラクティスに追加されました。 ニュージーランドからカナダまでの企業は、幅広いプロジェクトと製品タイプで、適応型ソフトウェア開発を使用しています。

Jim Highsmithは2000年にAdaptive Software Developmentを発表しました。

アダプティブソフトウェア開発プラクティスは、変化に対応する能力を提供し、計画と学習をほとんど必要とせずに製品が進化する乱流環境に適応できます。

ASDライフサイクルのフェーズ

適応型ソフトウェア開発は進化モデルと同様に周期的であり、フェーズ名は複雑なシステムでの予測不可能性を反映しています。 適応型開発ライフサイクルのフェーズは次のとおりです-

  • 推測する
  • 協力する
  • 学ぶ

これらの3つのフェーズは、適応ソフトウェア開発の動的な性質を反映しています。 適応開発は、決定論を明示的に出現に置き換えます。 ライフサイクルの単なる変更を超えて、管理スタイルのより深い変更に進みます。 適応型ソフトウェア開発には、動的な投機-コラボレーション-学習ライフサイクルがあります。

アダプティブソフトウェア開発ライフサイクルは、タスクではなく結果に焦点を当てており、結果はアプリケーション機能として識別されます。

Adaptive Software Development Lifecycle

推測する

計画という用語はあまりにも決定的であり、望ましい結果についてかなり高い程度の確実性を示しています。 計画への準拠の暗黙的かつ明示的な目標は、プロジェクトを革新的な方向に導くためのマネージャーの能力を制限します。

アダプティブソフトウェア開発では、用語プランは用語スペキュレートに置き換えられます。 推測しながら、チームは計画を放棄しませんが、複雑な問題の不確実性の現実を認識しています。 投機は探査と実験を奨励します。 短いサイクルでの反復が推奨されます。

協力する

複雑なアプリケーションは構築されず、進化します。 複雑なアプリケーションでは、大量の情報を収集、分析し、問題に適用する必要があります。 乱流環境では、情報の流れが高速です。 したがって、複雑なアプリケーションでは、大量の情報を収集して分析し、問題に適用する必要があります。 これにより、チームのコラボレーションでしか処理できないさまざまなナレッジ要件が発生します。

共同作業を行うには、共同で結果を出し、知識を共有し、意思決定を行う能力が必要です。

プロジェクト管理のコンテキストでは、Collaborationは、従来の管理手法で管理することと、出現に必要なコラボレーション環境を作成および維持することのバランスを示しています。

学ぶ

ライフサイクルの学習部分は、プロジェクトの成功に不可欠です。 チームは次のようなプラクティスを使用して、常に知識を強化する必要があります-

  • 技術レビュー
  • プロジェクト回顧
  • 顧客フォーカスグループ

各反復後にレビューを行う必要があります。 開発者と顧客の両方が自分の仮定を検証し、各開発サイクルの結果を使用して次の方向を学習します。 チームは学びます-

  • 製品の変更について
  • 製品の開発方法に関する基本的な前提のより根本的な変更

チームが大きなミスではなく小さなミスから学習できるように、反復は短くする必要があります。

推測-コラボレーション-全体としての学習サイクル

上記のSpeculate-Collaborate-Learnサイクルからわかるように、3つのフェーズが非線形で重複していることは明らかです。

アダプティブフレームワークから以下を観察します。

  • 学習せずにコラボレーションすること、またはコラボレーションせずに学習することは困難です。
  • 学習せずに推測すること、または推測せずに学習することは困難です。
  • 協力せずに推測することや、推測せずに協力することは困難です。

ライフサイクル特性

アダプティブソフトウェア開発ライフサイクルには、6つの基本的な特性があります-

  • ミッション重視
  • 機能ベース
  • 反復的
  • タイムボックス
  • リスク主導
  • 耐性の変更

この章では、Adaptive Software Developmentのこれら6つの特徴を理解します。

ミッション重視

多くのプロジェクトでは、チームを導く全体的なミッションは明確になっていますが、プロジェクトの開始時点では要件は不明確かもしれません。 ミッションステートメントは、最初は探査を奨励するガイドとして機能しますが、プロジェクトの過程に焦点を絞ります。 ミッションは、固定された目的地ではなく境界を提供します。 ミッションステートメントと、それらのステートメントにつながる議論は、重要なプロジェクトのトレードオフの決定を行うための方向と基準を提供します。

明確なミッションと継続的なミッションの洗練の実践がなければ、反復的なライフサイクルは振動するライフサイクルになり、開発の進展なしに前後に揺れ動きます。

機能ベース

アダプティブソフトウェア開発ライフサイクルは、タスクではなくアプリケーション機能に基づいています。 機能とは、顧客の優先度に基づいて反復中に開発される機能です。

顧客がフィードバックを提供すると、機能は数回の反復を経て進化する可能性があります。

実装後に顧客に直接結果を提供するアプリケーション機能が主要です。 ユーザーマニュアルなどの顧客向けのドキュメントも機能と見なされます。 成果物として定義されている場合でも、データモデルなどの他のドキュメントは常にセカンダリです。

反復的

アダプティブソフトウェア開発ライフサイクルは反復的であり、頻繁なリリースに焦点を当ててフィードバックを取得し、結果として得られた学習を吸収して、さらなる開発の正しい方向を設定します。

タイムボックス

アダプティブソフトウェア開発ライフサイクルでは、反復がタイムボックス化されます。 ただし、Adaptive Software Developmentのタイムボックス化は期限に関するものではないことを覚えておく必要があります。 コラボレーション環境に挑戦するチームを長時間作業させたり、成果物の品質に妥協したりするために使用しないでください。

アダプティブソフトウェア開発では、タイムボクシングは、必要に応じてハードトレードオフの決定に集中し、強制するための方向と見なされます。 変化率が高い不確実な環境では、作業を完了するためのタイムボックスなどの定期的な強制機能が必要です。

リスク主導

適応型ソフトウェア開発では、重要なリスクを特定して評価することにより、反復が推進されます。

変化に強い

アダプティブソフトウェア開発は、変更に対する耐性があり、変更を競争上の優位性を組み込む能力と見なしますが、開発の問題としてではありません。

適応型ソフトウェア開発-実践

適応型ソフトウェア開発のプラクティスは、継続的な変化を規範として受け入れるライフサイクルを備えた継続的な適応の信念によって推進されています。

アダプティブソフトウェア開発ライフサイクルは以下に特化しています-

  • 継続的な学習
  • 向きを変える
  • 再評価
  • 不確実な未来を見つめる
  • 開発者、管理者、および顧客間の強力なコラボレーション

適応SDLC

適応型ソフトウェア開発では、RADとソフトウェアエンジニアリングのベストプラクティスを組み合わせています。

  • プロジェクトの開始。
  • 適応サイクル計画。
  • コンカレントコンポーネントエンジニアリング。
  • 品質レビュー。
  • 最終QAおよびリリース。

適応型ソフトウェア開発のプラクティスは、次のように説明できます-

実践学習ループ

上記のように、適応ソフトウェア開発のプラクティスは、次の3つのフェーズに分散しています-

  • ** +推測-開始と計画
  • プロジェクトの開始
  • プロジェクト全体のタイムボックスを確立する
  • 反復回数を決定し、それぞれにタイムボックスを割り当てます
  • 反復ごとにテーマまたは目標を作成する
  • 各反復に機能を割り当てる
  • コラボレーション-同時機能開発
  • 分散チームのコラボレーション
  • 小規模プロジェクト向けのコラボレーション
  • 大規模プロジェクトのコラボレーション
  • 学習-品質レビュー
  • 顧客の視点からの結果品質
  • 技術的な観点からの結果の品質
  • デリバリーチームとチームメンバーが活用しているプラ​​クティスの機能
  • プロジェクトのステータス

推測-開始と計画

適応ソフトウェア開発では、投機フェーズには2つのアクティビティがあります-

  • 開始
  • 計画中

スペキュレートには、開始および計画段階で繰り返し実行できる5つのプラクティスがあります。 彼らは-

  • プロジェクトの開始
  • プロジェクト全体のタイムボックスを確立する
  • 反復回数を決定し、それぞれにタイムボックスを割り当てます
  • 反復ごとにテーマまたは目標を作成する
  • 各反復に機能を割り当てる

プロジェクトの開始

プロジェクトの開始には-

  • プロジェクトのミッションと目的を設定する
  • 制約を理解する
  • プロジェクト組織の設立
  • 要件の特定と概要
  • 初期サイズとスコープの推定を行う
  • 主要なプロジェクトリスクの特定

プロジェクト開始データは、速度を主要な側面と見なして、予備のJADセッションで収集する必要があります。 開始は、小規模から中規模のプロジェクトの場合は2〜5日間、大規模なプロジェクトの場合は2〜3週間の集中的な作業で完了できます。

JADセッション中に、要件を十分に詳細に収集して、機能を識別し、オブジェクト、データ、またはその他のアーキテクチャモデルの概要を確立します。

プロジェクト全体のタイムボックスの確立

範囲、機能セットの要件、見積もり、およびプロジェクト開始作業から生じるリソースの可用性に基づいて、プロジェクト全体のタイムボックスを確立する必要があります。

ご存じのように、投機は推定を放棄しませんが、推定が間違っている可能性があることを受け入れることを意味します。

反復とタイムボックス

プロジェクト全体の範囲と不確実性の程度に基づいて、反復回数と個々の反復の長さを決定します。

中小規模のアプリケーションの場合-

  • 反復は通常4〜8週間です。
  • 一部のプロジェクトは、2週間の反復で最適に機能します。
  • プロジェクトによっては、8週間以上かかる場合があります。

自分に合った時間を選択してください。 反復の回数と各反復の長さを決定したら、各反復にスケジュールを割り当てます。

テーマまたは目的を開発する

チームメンバーは、反復ごとにテーマまたは目標を作成する必要があります。 これは、スクラムのスプリントゴールに似ています。 各イテレーションは、製品の機能を実証できる一連の機能を提供し、顧客が製品を見えるようにして、レビューとフィードバックを可能にする必要があります。

繰り返しの中で、ビルドは統合機能を有効にし、製品を開発チームに見えるようにするために、できれば毎日ベースで作業機能を提供する必要があります。 テストは、機能開発の継続的な不可欠な部分である必要があります。 プロジェクトの終了まで遅らせてはなりません。

機能を割り当てる

開発者と顧客は、各反復に機能を一緒に割り当てる必要があります。 この機能割り当ての最も重要な基準は、すべての反復で、かなりの機能を備えた目に見える一連の機能を顧客に提供する必要があるということです。

反復への機能の割り当て中-

  • 開発チームは、機能の見積もり、リスク、および依存関係を考え出し、それらを顧客に提供する必要があります。
  • お客様は、開発チームから提供された情報を使用して、機能の優先順位付けを決定する必要があります。

したがって、反復計画は機能ベースであり、開発者と顧客とのチームとして行われます。 このタイプの計画は、プロジェクトマネージャーによるタスクベースの計画よりも、プロジェクトをよりよく理解できることが経験からわかっています。 さらに、機能ベースの計画は、各プロジェクトの一意性を反映しています。

コラボレーション─同時機能開発

共同作業段階では、開発に重点が置かれます。 コラボレーションフェーズには2つのアクティビティがあります-

  • 開発チームは共同で作業ソフトウェアを提供します。
  • プロジェクトマネージャーは、コラボレーションと同時開発活動を促進します。

コラボレーションは、開発チーム、顧客、マネージャーを含む共有作成の行為です。 共有の創造は、信頼と尊敬によって促進されます。

チームは協力すべきです-

  • 技術的な問題
  • ビジネス要件
  • 迅速な意思決定

以下は、適応ソフトウェア開発の共同作業段階に関連するプラクティスです。

  • 分散チームのコラボレーション
  • 小規模プロジェクト向けのコラボレーション
  • 大規模プロジェクトのコラボレーション

分散チームのコラボレーション

分散チームが関与するプロジェクトでは、以下を考慮する必要があります-

  • さまざまな提携パートナー
  • 幅広い知識
  • 人々が相互作用する方法
  • 相互依存関係を管理する方法

小規模プロジェクト向けのコラボレーション

小規模なプロジェクトでは、チームメンバーが物理的に近接して作業している場合、非公式の廊下でのチャットやホワイトボードの落書きとのコラボレーションを奨励する必要があります。

大規模プロジェクトのコラボレーション

大規模なプロジェクトでは、追加のプラクティス、コラボレーションツール、およびプロジェクトマネージャーの対話が必要であり、コンテキストベースで配置する必要があります。

学ぶ-品質レビュー

適応型ソフトウェア開発は、「実験と学習」の概念を奨励しています。

誤りと実験から学ぶには、チームメンバーが部分的に完成したコードとアーティファクトを早期に共有して、

  • 間違いを見つける
  • それらから学ぶ
  • 大きな問題になる前に小さな問題を見つけることで手戻りを削減

各開発イテレーションの終わりに、学ぶことの4つの一般的なカテゴリがあります-

  • 顧客の視点からの結果品質
  • 技術的な観点からの結果の品質
  • デリバリーチームとプラクティスチームの機能
  • プロジェクトのステータス

顧客の視点からの結果品質

アダプティブソフトウェア開発プロジェクトでは、顧客からフィードバックを得ることが最優先事項です。 このための推奨プラクティスは、顧客フォーカスグループです。 これらのセッションは、アプリケーションの動作モデルを調査し、顧客の変更要求を記録するように設計されています。

顧客フォーカスグループセッションは、jadセッションと同様の簡易セッションですが、要件を生成したりプロジェクト計画を定義したりするのではなく、アプリケーション自体を確認するように設計されています。 顧客は、反復から生じる動作中のソフトウェアに関するフィードバックを提供します。

技術的な観点からの結果品質

アダプティブソフトウェア開発プロジェクトでは、技術的な成果物の定期的なレビューが重要になります。 コードレビューは継続的に行う必要があります。 技術アーキテクチャなどのその他の技術成果物のレビューは、毎週または反復の最後に実施できます。

アダプティブソフトウェア開発プロジェクトでは、チームは自身のパフォーマンスを定期的に監視する必要があります。 回顧は、チームがチームとして一緒に自分自身と彼らの仕事について学ぶことを奨励します。

反復終了の回顧は、次のような定期的なチームパフォーマンスの自己レビューを促進します-

  • 何が機能していないかを判断します。
  • チームがさらに行う必要があること。
  • チームが必要とすることは少なくなります。

プロジェクトの状況

プロジェクトステータスレビューは、さらなる作業の計画に役立ちます。 適応型ソフトウェア開発プロジェクトでは、プロジェクトステータスの決定は機能ベースのアプローチであり、各反復の終わりは機能が完了した機能によってマークされ、ソフトウェアが機能します。

プロジェクトステータスのレビューには、

  • プロジェクトはどこにありますか?
  • プロジェクトと計画はどこにありますか?
  • プロジェクトはどこにあるべきですか?

アダプティブソフトウェア開発プロジェクトの計画は投機的であるため、上記の質問2よりも質問3が重要です。 つまり、プロジェクトチームと顧客は、「これまでに学んだことは何で、どこに行く必要があるかという観点を変えますか?」と自問する必要があります。

適応型ソフトウェア開発-管理

従来のソフトウェア管理のフローチャートを以下に示します。

再評価

従来のソフトウェア管理は、コマンド制御という用語で特徴付けられてきました。

多くの組織は、最適化、効率、予測可能性、制御、厳密性、プロセス改善の伝統に浸っています。 しかし、新たな情報化時代の経済には、適応性、速度、コラボレーション、即興、柔軟性、革新性、柔軟性が必要です。

ハーバードのビジネスレビューと管理の書籍では、エンパワーメント、参加型管理、学習組織、人間中心の管理などの用語が考案されていますが、これらはいずれも現代の組織の管理には組み込まれていません。

アダプティブソフトウェア開発のコンテキストでは、ギャップははるかに広く見えるため、他の分野で成功していることが証明されているアダプティブ管理手法を考慮する必要があります。

適応管理

適応管理は、リソースマネージャーが利害関係者および科学者とチームとして協力し、以下の目標を達成した環境で成功を収めました。

  • 管理対象システムが人間の介入にどのように応答するかを学習します。
  • 将来的にリソースのポリシーと実践を改善するため。

適応管理の背後にある原則は、多くのリソース管理活動が実験であり、その結果を事前に確実に予測できないことです。 これらの実験は、将来の改善のための学習機会として使用されます。

適応管理は、新しい情報に直面したり、さまざまな利害関係者の目標や好みを設定したりする際にタイムリーに対応する能力を高めることを目的としています。 環境の不確実性が調査され、よりよく理解されている間に、利害関係者が紛争を拘束し、規則的に議論することを奨励します。

適応管理は、利害関係者、管理者、およびその他の意思決定者が知識の限界と不完全な情報に基づいて行動する必要性を認識するのに役立ちます。

適応管理は、以下のことを明確にすることにより、決定を変更するのに役立ちます-

  • 決定は暫定的です。
  • 経営者の決定は必ずしも正しいとは限りません。
  • 変更が必要です。

適応管理アプローチには2つのタイプがあります-

  • パッシブ適応管理。
  • アクティブな適応管理。

パッシブ適応管理

適応管理は、科学的知識を高め、それによって不確実性を減らすことを目的としています。

パッシブアダプティブ

パッシブアダプティブ管理では、既存の情報と理解に基づいて、単一の優先行動方針が選択されます。 管理アクションの結果は監視され、その後の決定は結果に基づいて調整されます。

このアプローチは、学習と効果的な管理に貢献します。 しかし、選択された行動方針を超えた状況の科学的および管理能力を強化する能力には限界があります。

アクティブ適応管理

アクティブアダプティブ管理アプローチは、管理アクションが実行される前に情報を確認します。

アクティブアダプティブ

生態系および関連する応答のさまざまな競合する代替システムモデル(例: 人口動態の変化;その後、単一のモデルではなく、レクリエーション用途)が開発されます。 管理オプションは、これらの代替モデルの評価に基づいて選択されます。

リーダーシップコラボレーション管理

適応管理は、適応ソフトウェア開発に最適です。 このアプローチでは、リソースマネージャー、つまり 人と協力し、人間の介入を許可し、友好的な環境を作り出すことができるマネージャー。

ソフトウェア開発では、リーダーがしばしばこれらの責任を引き受けます。 指揮官よりもリーダーが必要です。 リーダーは共同作業者であり、チームとともに働きます。 協調的リーダーシップは、適応型開発で最も求められている実践です。

リーダーは次の性質を持っています-

  • 方向をつかんで設定します。
  • 関係者に影響を与え、ガイダンスを提供します。
  • チームのコラボレーション、促進、マクロ管理を行います。
  • 方向を提供します。
  • 才能ある人々が革新的で創造的であり、効果的な意思決定を行える環境を作成します。
  • 時々彼らが命令する必要があることを理解してください、しかし、それは彼らの支配的なスタイルではありません。