FAST/PASTA
はじめに
近年、大量個別生産を実現するためのプロダクトラインの重要性が叫ばれていますが、導入が大変難しいという問題を抱えています。このような問題を解決するための方法論の一つとして、FAST/PASTAを紹介いたします。
プロダクトラインとは、予めコア資産を作り(ドメインエンジニアリング)、そのコア資産から多品種の製品を生み出す(アプリケーションエンジニアリング)ことで大量個別生産を実現させるという開発手法です。このプロダクトラインを成功させるためには、綿密に計画されたコア資産を作ることが重要です。しかし、コア資産は将来の製品の進化やバリエーションを予測して定義しなければならないという点で、なかなか実現することが難しいのが現状です。将来予測が困難という問題は、そもそも一度、コア資産を定義してしまったら変更ができないという考え方が根本原因であり、この部分を克服しなければ原因を取り除くことができません。一方、FAST PASTAは、コア資産の定義は変化するという前提の上で開発されたプロセスです。そのため、コア資産の定義は、顧客のニーズに合わせて変更可能であり、常にコア資産を進化させていきます。たとえば、アプリケーションエンジニアリングにおいて、最初に共通部分として定義していた仕様を可変部分に変更した方がいいという要望が出たとすると、その情報がドメインエンジニアリングにフィードバックされるプロセスが予め用意されており、このような変更にも柔軟に対応が可能です。従って、FAST PASTAは、プロダクトラインの導入をサポートする手段として大変効果的です。
また、FAST PASTAには、プロセスを体系的に記述できるテンプレートを準備しています。このテンプレートがあることで、初めてプロダクトラインを導入する際でも、合理的な開発プロセスを踏むことが可能です。また、FAST PASTAのテンプレートは、テンプレートからコードや文書を生成することが可能という点で他と異なります。
図1:テンプレートを利用してファミリーメンバーを構成する
FAST/PASTAとは何か?
FASTの概要
ソフトウェアプロダクトラインの開発プロセスの1パターンとして、体系的に定義されたものが「FAST(Family-Oriented Abstraction, Specification and Translation)」です。
FASTを利用することによって、プロダクトライン開発のためのプロセスを生成することができます。以下に、FASTの特徴を示します。
ドメインエンジニアリングとアプリケーションエンジニアリングを分離している
予測されたファミリーメンバーの共通部分・可変部分をベースとして、ファミリーを明確に定義する
ファミリーメンバーの詳述・分析が可能である
ファミリーメンバーのコード・文書の生成が可能である
「ファミリー」というのは、プロダクトラインで言う「製品系列」のことです。また、「ファミリーメンバー」というのは、「製品系列の一製品」を指します。
上に挙げたFASTの特徴の上2つは、まさにプロダクトラインの特徴です。下2つはFAST独自のもので、具体的にはAML(Application Modeling Language)という仕様記述言語を使って、分析したファミリーを記述し、実装コードを生成することができます。
※FASTの詳細についてはこちらをご覧ください。
PASTAの概要
「PASTA(Process and Artifacts States Transition Abstraction)」とは、プロセスの設計・実装を行うためのツールです。
FASTプロセスをPASTAで記述することで、ファミリーメンバーの共通性・可変性の管理を体系的に行うことができます。つまりファミリーの進化の管理が可能となるのです。
PASTAモデルの特徴は、プロセスが状態マシンの形で表現できるということです。プロセスを状態マシンモデルで表現することで、後戻りの表現が容易にできる上に、仕様の変更に柔軟に対応できるようになります。また、PASTAでは成果物状態も状態マシンで表現することができ、今、どの成果物がどの状態にあるのかを把握することで正確に進捗状況を把握することができます。従来のプロセス記述の多くはアクティビティ図で表現していますが、これではプロセスの側面しかとらえることができず、変更にも容易に対応できません。プロダクトラインといった一つの仕様から多種多様な製品開発を長期的に行わないといけない開発において、ファミリーの進化を支えるためには仕様変更の容易性・柔軟性といった性質は必要不可欠となります。このような点において、状態マシンを用いるPASTAは大変有用なプロセス記述手法です。
他にも、PASTAではフォームやツリー図でプロセスの要素を記述します。これにより、様々な抽象度でプロセスを見ることが可能です。
また、FAST PASTAモデルにおいて、PASTAは、FASTプロセスのレファレンスモデルとしての位置付けにあります。つまり、FASTプロセスをPASTAで実装することで、FASTプロセスを体系的に記述することができ、FASTプロセスの管理(進捗状況や各プロセスにおける詳細情報などの参照)が可能です。
※PASTAの詳細についてはこちらをご覧ください。
FAST PASTAに何ができるか?
関心事の分離
FASTは「どのようなバリエーションが必要となるか予測できる」という仮説(啓示の仮説)に基づいた、効率的なソフトウェア生産を可能にする言語、 ツール、設計、クラス、コンポーネントライブラリなどのリソース開発を体系化しようとします。FASTプロセスへの理解が深まることで、プロセスを支援する最適なツールや環境が見えてきます。PASTAは、現場のプロセスの考え方、設計手順、表現方法を提供します。また、PASTAを支援するツールを使えば、開発で必要となる文書や環境を整備することが出来ます。
FASTは、ファミリーメンバーのスピード生成を目標とする体系的プロセスであり、このプロセスを有することで、ソフトウェア開発の成功率を大きく高め、その実現に要する時間を大きく縮めます。体系化の大部分は、開発者の変更の計画を標準的手順の中で考えるように導き、その決定の結果は標準的成果物に取り入れられます。この一連の流れの中で、開発者の関心は、ある時点で1点に集中します。FAST PASTAモデルは注目すべき対象を識別するように作用するからです。また、その時点で何を実行し、何を作成すべきかについての理解を促します。
プロセス進化の支援
FAST PASTAという標準化された体系的プロセスのさらなる利点は、各アクティビティでエンジニアが行った決定が、予め準備されたテンプレートに埋め込まれる点にあります。このことにより、出来上がった時点で情報が整理されているため、その決定に対するレビューがし易くなります。また、その成果物は他のアクティビティの入力として使われ、実施された決定についての記録としても役立ちます。更に、その成果物はアクティビティの次のイテレーションや、 新しいエンジニアの教育にも利用できます。FASTの全成果物は、有用で時とともに進化するという意味で、生きた成果物になることを意図しています。更新されることのない1時点の単なるスナップショットではありません。同様に、FASTプロセスを表現するために使用するPASTA成果物も、プロセスの進化を支援します。
基本概念
FASTの再利用
FASTの主な動機は、ソフトウェア生産プロセスの効率化を目指し、綿密に構築されたソフトウェアをスピード生産するという難局を乗り越えることです。 再利用は、FASTがこのゴールの達成に用いるメカニズムの1つです。FASTプロセスでは、ソフトウェアエンジニアに対し、要件、仕様、設計、コード、 テスト、ドキュメントに及ぶ多くの種類の成果物の再利用を推奨します。FASTにおける再利用は、ファミリー指向開発のレンズを通して参照されます。従来の様々なプロセスは、ドメインやビジネスモデルを入力としない、ソフトウェア開発技術の適用に重点を置くが故に、再利用に関する記述がないか、または、あったとしても、使い物になりませんでした。しかしながら、FASTでは、ファミリーメンバー間に共通するドメインを限定化することによって、ソフトウェアエンジニアはそのファミリーの中の再利用可能な部分を体系的に捉えられるようになります。さらに、ソフトウェアの生産にあたって、そうした再利用可能な部分を活用するように仕向けます。
ファミリーにおける効果的なコードの再利用は、適合可能コンポーネントの実装によって実現されます。その一方で、全体としてのFASTプロセスは、ファミリー全体の再利用を促進するために、ファミリー内の標準を作成します。たとえば、ファミリー用の標準用語や、ファミリーメンバーを記述するための標準言語がそれにあたります。ファミリーの作成によって確立される思考のパターンは、ファミリーメンバーの効果的な生産を支援するために散りばめられたメカニズムの再利用を促します。
マルチパラダイムプロセスとしてのFAST
ファミリーメンバー用のコードおよび文書を生成することは、全てのFASTプロセスに共通する事柄です。しかし、FASTは、その目標をどのように成就させるかという点でかなりの柔軟性を持っています。ドメインや組織が異なれば、生成を実現させるための異なるパラダイムが必要になります。それ以外の場面でも、ドメインごとに異なる設計手法が必要になります。このことから、時にFASTはソフトウェア作成におけるマルチパラダイムアプローチとして括られます。
FASTとオブジェクト指向
ソフトウェア開発のパラダイムとして、一連のオブジェクト指向パラダイムが普及しています。それらの全ては、基本的原理を同じくするものですが、それぞれのオブジェクト指向開発で用いられる分析および設計方法論、実装言語は異なります。FASTが修正の計画・設計を重要視していることにより、オブジェクト指向手法とFASTプロセスは、うまく折り合う傾向にあります。たとえば、オブジェクト指向フレームワークは、ファミリー設計の優れた土台になります。具体的には、適合可能コンポーネントの役割をクラスが担うことになります。
ソフトウェア開発へのFAST PASTAの適用
FASTの適用可能性
ファミリー開発の基本的原則では、ドメインエンジニアリングの費用を先々のファミリーメンバー開発の費用・時間の削減によって回収できるのであれば、そのドメインにFASTプロセスを適用する価値があります。つまり、ドメインエンジニアリングの費用を、ドメインエンジニアリングの成果物(コア資産)を使って作成されるファミリーメンバーによって償却します。以下の状況下で、こうした回収が可能です。
長期的に見て、システムに数多くのバリエーションが存在すると考えられるとき
システムの継続的な修正に対して、かなりの時間と労力が費やされているとき
1つのシステムに多数の顧客がおり、各顧客の用途に合わせたシステムのカスタマイズが望まれるとき
ソフトウェアシステムに調整が望まれる変更の型を予測することは、暗示的であれ明示的であれ、必ずぶつかる問題です。FASTは、この予測を執行し、それを活用する「時」と「構造」を明示的に提示します。後の変更の必要性と、変更を実行できるスピードにも注意を払います。その理由は、変更の予測を暗示的なままにしておくと、変更が困難かつ高コストのソフトウェアに至ってしまうからです。
ゆえに、新たな市場に進出し、多様な顧客要件に対応しなければならないという状況にある場合、FASTが最適です。
FASTの漸進的な適用
FASTプロセスは、利用者がそれを適用した直後から利益を獲得できるように、また、反復的な適用を可能とするように設計されました。つまり、イテレーションを重ねるごとに投資と利益を拡大できます。FASTの漸進的な性質は以下の通りです。
FASTの初期アクティビティでは、FAST利用者が彼らを取り巻く市場、顧客、要件を正しく理解し、彼らのドメインを説明するための標準用語を定義します。こうして得られた「理解」と「用語」は、チームメンバー間の対話を円滑にし、新メンバーの教育にも役立ち、ドメインメンバーの設計に必要不可欠な情報を伝えます。共通性分析は、FAST利用者が自分たちのドメインの深い理解を少ない労力で得られるようにするアクティビティの最もたる例です。
それに続くFASTのアクティビティは、前のアクティビティで得られた情報と理解を効果的に活用するように設計されています。FAST利用者が、コードや文書を生成する際の設計およびメカニズムを作成し、洗練するのを支援します。前のアクティビティから、特に、アーキテクチャが調整すべき変更についての理解と文書化された情報を引き継ぎます。また、そのドメインの安定した抽象概念も伝えられます。
FASTプロセスは、反復的な適用を行えるように設計されています。各サイクルの改良は、前のサイクルの結果の上で行われます。たとえば、第1サイクルでは共通性分析のみを実行することを決定し、その結果を設計の柔軟性の向上に役立てます。第2サイクルでは、顧客要件に伴い頻繁に修正されるデータ構造を生成できるような簡単な言語を組込むことを決定しました。第3サイクルでは、その言語を拡張し、コードの大部分を生成させることを決定しました。
とりわけ、前の結果を少しずつ肉付けしていく漸増的アプローチは、ある企業にとって新規のドメインによく適合します。こうした場合、そのプロダクトファミリーの進化の方向性を正しく予測できるかが不安であったり、大きな初期投資をする資源を持ち合わせていないという状況が考えられます。このような状況下では、必要最小のドメインメンバーを構築できるようにすることによって、可変性の予測を検証し、かつ、追加の投資によりすぐ利益を生み出せるようにします。たとえ、予測が間違っていたとしても、初期ドメインメンバーの多くの機能性と複雑性を埋め込み、大規模に投資するのに比べ、損失した労力および改良を行う労力は少なくて済みます。このことは、FASTを使おうが使うまいが当てはまることです。しかし、FASTを使った場合、どの予測に誤りがあるのかすぐ分かり、その予測をもととする設計やコードの場所を素早くつきとめ修正できます。
PASTAの適用
組織が新しいプロセスを導入したり、既存のプロセスを改良したりするときには、プロセスについて標準的な方法で記述し、プロセスについて議論する標準的用語を持つことが有用かつ便利です。PASTAは、標準的にプロセスを記述する方法を提供します。PASTAをプロセスの設計および実装というドメインにおけるアプリケーションモデリング言語として見なすこともできます。 PASTAのアプリケーションエンジニアリング環境には、PASTAエディタとジェネレータが含まれます。これらのツールを合わせると、プロセスの詳述および分析が可能となり、さまざまなフォーマット(PostScriptやWebページ)でプロセスのガイドブックを生成し、プロセスを実施させるための環境を生成できるようになります。また、ごく少数のアクティビティプロセス、成果物、ロールから開始するところから、プロセスの自動化に足る詳細な記述を構築するに至るまで、PASTAは漸増的な適用が可能です。また、対象のドメインプロセスをよく知っているほど、柔軟な記述が可能です。プロセス設計者の望 みに応じて、詳細を省くことも、かなり詳細に記述することもできます。
最後に
FAST/PASTAの基本的な内容の一部を紹介しました。FAST/PASTAがどのような技術であるかを理解して頂き、興味を持って頂けたら幸いです。
FAST/PASTAを更に詳しく知りたい方は、書籍「Software Product-Line Engineering - A Family-Based Software Development Process(著者:David M. Weiss, Chi Tau Robert Lai)」をご参照ください。