Technology‎ > ‎FAST/PASTA‎ > ‎

FAST(Family-Oriented Abstraction, Specification, and Translation)



FASTの概要

 FAST(Family-Oriented Abstraction, Specification, and Translation)は、ソフトウェア開発プロセスの1パターンであり、このプロセスを使用することにより、下記の2つについて期待することができます。
  • 短納期開発 
  • 変更に対する柔軟な対応
 FASTでは、まず、ファミリーと考えられるソフトウェアの識別を行い(スコーピング;FASTでは「ドメイン審査」と呼んでいます)、そのファミリーメンバーの共通部分と可変部分の設計とファミリーメンバーを生産するプロセスの設計を予め行うこと(ドメインエンジニアリング)で、短期間での多種多様なアプリケーションを大量に生産すること(アプリケーションエンジニアリング)を実現させることを目的としています。また、アプリケーションエンジニアリングから、スコーピング(ドメイン審査)フェーズやドメインエンジニアリングフェーズへのフィードバックをするプロセスが用意されており、変更の柔軟な対応が可能です。図1にFASTプロセスの概略図を示します。 
図1:FASTプロセスの概略図 


FASTのプロセスパターン

 FASTは、次の3つのサブプロセスから構成されています。(図2を参照)
1. ドメイン審査(ドメインの経済性分析を行うサブプロセス)
2. ドメインエンジニアリング(アプリケーションエンジニアリング環境(コア資産)とアプリケーションエンジニアリングプロセスを作成するサブプロセス)
3. アプリケーションエンジニアリング(ドメインエンジニアリングで作成された環境とプロセスを利用して多品種のアプリケーションを生産するサブプロセス)

図2:FASTプロセスパターン(楕円は成果物、四角はアクティビティ) 
 ドメイン審査は、ファミリーの経済性分析を行います。ここでは、ファミリーメンバーの個数や価値、それらを開発する場合の費用を概算することが必要となります。 ドメインエンジニアリングは、ファミリーメンバーの開発を実現させるための準備プロセスです。ここでは、ドメイン審査によって定義されたファミリーについて共通性・可変性分析を行い、その分析結果をもとにアプリケーションエンジニアリング環境とアプリケーションエンジニアリングプロセスを作成します。アプリケーションエンジニアリングでは、ドメインエンジニアリングで作成された環境とプロセスをもとにファミリーメンバーを生産します。また、図2にあるように、アプリケーションエンジニアリングは直接、ユーザの意見を聞くことができるため、それらの意見をドメイン審査やドメインエンジニアリングにフィードバックさせ、ファミリーの進化に役立てることができます。
 また、図3はFASTプロセスに対する投資とその回収について示しています。ドメインエンジニアリングでは、綿密にアプリケーションエンジニアリング環境(コア資産)を構築するために多額の投資が必要です。この環境が構築されることで、アプリケーションエンジニアリングでは、ファミリーメンバーの開発が短期間で実現可能となります。つまり、アプリケーションエンジニアリングによって、ドメインエンジニアリングでの投資が回収されるのです。ここで注意しておくことは、ファミリーの将来予測を的確に行った上で、綿密にアプリケーションエンジニアリング環境を構築することで、投資の回収をより効果的に行うことができるということです。しかし、将来予測を的確に行うことは、現実として大変難しいです。そこで、最初は少ない投資で開発を行い、アプリケーションエンジニアリングで得たユーザの意見をドメインエンジニアリングにフィードバックさせ、徐々にアプリケーションエンジニアリング環境(コア資産)をブラッシュアップしていくという戦略も考えられます。

図3:投資と回収 (FASTプロセス)

 前にも少し述べましたが、ドメインエンジニアリングをベースとするソフトウェア開発プロセスの特徴として、環境を整えるまでにかなり綿密なエンジニアリングが必要となり、最初のファミリーメンバーの開発に取りかかる時期が遅れるという問題があります。この時期を短縮するために、FASTでは体系的な手法を導入しています。ファミリーを定義し、ファミリーメンバーを記述できる準備を整え、その記述を入力とし、ファミリーメンバーの生成を実現できるようにしています。 ファミリーを定義するのは、ドメイン審査で行われます。また、ファミリーメンバーを記述できる準備を整えるのは、ドメインエンジニアリングで行われます。ここで、図4に注目してください。「分析_ドメイン」では、定義されたファミリーの共通部分・可変部分を分析します。この分析結果は、アプリケーションモデリング言語(AML)によってモデルが記述されます。これをもとに、アプリケーションエンジニアリング環境やアプリケーションエンジニアリングプロセスという、 ファミリーを記述する準備となるものが作成されるのです。最終的には、アプリケーションエンジニアリングで、これらの環境やプロセスを利用して、ファミリーメンバーの生成が実現されます。
図4:ドメインエンジニアリングプロセス

 ファミリーは、顧客ニーズが変化したり、製品についての新たなアイディアが浮かんだり、新技術の到来に伴い進化します。ファミリーの進化を舵取りし、支援するためには、ドメインエンジニアリングが反復的かつ継続的なプロセスになることが必須です。ドメインエンジニアリングのプロセスに投入すべき情報は、ファミリーメンバーが顧客ニーズに上手く応えるための情報や、そのファミリーのアプリケーションエンジニアリング環境がアプリケーションエンジニアリングのニーズを上手く満たすための情報などです。アプリケーションエンジニアは、これらの情報を提供します。これは、顧客要件に関する情報、また、顧客要件に合致するアプリケーションを開発する際に必要な情報など、重要な情報を握っているからです。このため、FASTにおけるドメインエンジニアリングとアプリケーションエンジニアリングは、フィードバックのループで結ばれています。この2つの陣営で継続的に情報が交わされることになります。

図5:アプリケーションエンジニアリングプロセス

 FASTプロセスパターンは、高品質のソフトウェアをスピード生産するという課題の克服を支援するものです。FASTをプロセスの1パターンとして考えようとした理由の一つは、ドメインの多様性に対応し、様々な技法を利用できるように十分に柔軟でありたかったからです。
 FASTの柔軟性を示す一つの側面として、FASTドメインエンジニアリングでは、アプリケーションエンジニアリング環境と、その環境を利用するためのプロセスの双方を構築します。つまり、ドメインごとに固有のアプリケーションエンジニアリングプロセスがあるということです。これらは、アプリケー ションエンジニアリング環境をどのように実装するかの点で違いが生じますが、それ以外は類似しています。




FASTモデルの階層

 FASTについて記述するということは、ドメインエンジニアとアプリケーションエンジニア(および彼らの管理者)が作成および使用する「成果物」、それらの成果物を作成するための一連の「プロセス(アクティビティ)」、作成にあたって組織内の人間が果たす「ロール」について記述することを意味しています。これらのFASTの3つの主要要素は、英語文法における主語、動詞、目的語に喩えることができます。ロールが主語、プロセスが動詞、成果物が目的語として喩えることができ、これは英語文法の第3文型(SVO)の形になっています。図6は、ドメインエンジニア(ロール)が経済モデル(成果物)を使ってドメインを審査する(プロセス)ところです。
 このような記述は、1つのプロセスモデルです。これはプロセスのレファレンスとして働き、プロセス全体をくまなく一貫して説明できる点で有用です。以下に、FASTで定義されている成果物、プロセス(アクティビティ)、ロールについての階層を示します。
図6:FASTの主要要素であるロール、プロセス、成果物の関係

FAST成果物

 図7にFASTの成果物階層を示します。ルートとなる成果物はファミリーです。これは、FASTで使用される全ての成果物に相当します。成果物は、「環境」成果物、「アプリケーション」成果物、「修正レポート」成果物という3つのサブグループに分かれています。

図7:FAST成果物のツリー図

FASTプロセス

 図8にFASTアクティビティ階層を示します。ルートとなっているアクティビティは、「FAST」アクティビティです。これは、FASTプロセスの実施中に行われるアクティビティの集合に相当します。つまり、ファミリーの1メンバーとしてアプリケーション生成を実現させるために必要な全てのアクティビティです。FASTアクティビティは、5つのサブアクティビティから構成されています(「ドメイン_審査」、「ドメイン_エンジニアリング」、「アプリケーション_エンジニアリング」、「プロジェクト_管理」および「ファミリー_修正」)。これらのアクティビティで成果物が新規に作成されたり、既存の成果物の改良・洗練が行われます。

図8:FASTプロセス状態のツリー図

FASTロール

 図9にFASTプロジェクトのロール階層を示します。

図9:FASTロールのツリー図




【参考文献】
[1]David M.Weiss, Chi Tau Rovert Lai, "Software Product-Line Engineering: A Family-Based Software Development Process", 1999, Addison-Wesley, Professional
[2]Maarit Harsu, "FAST Product-Line Architecture Process", 2002
[3]Tao Xie, "Software, Process, Business Process and Software Process", thhp://people.engr.ncsu.edu/txie/publications/softprocess-slides.pdf