このウインドウを閉じる

Oaks may fall when reeds stand the storm.

 
 Waterfall モデル が現実にそぐわないので、小生は、プロトタイプ を前提にした RAD (注 1)を実行している。
 小生が実行している RAD は、おおまかに言えば、以下の体系である。

 (1) 現行の画面・帳票を インプット として、T字形 ER 図を作成する。
 (2) T字形 ER図を読んで、「mission critical な event」(注 2)を探し出す。
 (3) 「mission critical な event」を入力・更新・照会する画面の プロトタイプ を
    作成する。
 (4) [ プロトタイプ を作成中に、]
    インフォーマル・データ が出てきたら、T字形 ER図のなかに追記する。
 (5) データ 項目ごとに、アトリビュート・リスト を作成する。
 (6) 画面・帳票ごとに、アルゴリズム の定義表を作成する。

 
 T字形 ER図が作成された時点で、以下の 3点を確認・検証する。

 (1) 再構築の目的 (再構築が実現しなければならない目的)
 (2) 現行事業の顕在的・潜在的な問題点
 (3) 現行事業の顕在的・潜在的な問題点に対する改善案

 
 以上の諸点を加味して、T字形 ER図を推敲する。
 以上の作業は、 DA (注 3)と エンドユーザ がおこなう。
 以上の ドキュメント が正式に承認されたら、 DBA (注 4)は、T字形 ER図のなかに記述された データセット を用意して、データ を移行する。

 
 SWAT チーム(注 5)は、以下の ドキュメント を インプット として、プログラム を作成する。

 (1) T字形 ER 図
 (2) アトリビュート・リスト
 (3) アルゴリズム の定義表
 (4) 画面・帳票

 
  RAD の際だった特徴は、以下の点にある。

 (1) SWAT チーム の人数は、10人とする。

 (2) [ 1,000,000 ステップ くらいの アプリケーション・システム なら、]
    6ヶ月以内に、システム を導入する。

 
 小生が RAD を実行している最大の理由は、事業過程の周期 (計画・実行・批判) と システム 作りの期間が、大幅に乖離しているので、事業過程が見直しされる周期内に、システム を作る点にあった。(注 6)

 それを実現するためには、まず、プログラム の作成量を、大幅に削減しなければならなかった。幸い、適切な データ 構造が用意されていれば、(手続き型言語を使って作成してきた) プログラム の ソース・コード の 70%を削減することができる [ この数値は、実態調査をした報告値である ]。(注 7)
 さらに、適切な データ 構造が用意されていれば--そして、RDB を使うとすれば--、プログラム のなかでは、「nested-IF」 が、ほぼ、皆無に近い コントロール・フロー が実現できる。(「nested-IF」 がなければ、) 当然ながら、プログラム の テスト 工程は、短縮されるし、プログラム の品質も高くなる。

 大型汎用機の環境や クライアント・サーバ 形態では、小生は、プログラム の再利用を考えてはいなかった。(プログラム の ソース・コード を大幅に削減して、しかも、ソース・コード は、「nested-IF」 のない構成なので、) 「プログラム は使い捨て」 という考えかたをしていた。そういう やりかた をしてきて、システム 作りの生産性は、従来比、平均 3倍を実現してきた--或る クライアント では、従来比 8倍という報告もあった。

 2000年頃から、(コンポーネント を使った Java プログラム 生成の) フレームワーク が出てきて、「プログラム の再利用」 が論点になってきた。小生の クライアント が、「フレームワーク を使って、RAD ができるどうか」 を検証しているが、コンポーネント を使って、生産性を、どのくらい向上できるか、という点は、今回、測量していない。(注 8)

 プログラミング・パラダイム として、以下の 2つを考えることができる。

 (1) 構造的 プログラミング
 (2) 抽象 データ 型

 複数の ファイル を読み込んで、レポート などの アウトプット を手続き型言語を使って作成する際、構造的 プログラミング が多く用いられてきた。

 構造的 プログラミング は、ソリューション を第一義に考えて、ソリューション を手続き的に変換して、変数のなかに値を代入し、1つずつの ステップ を実行する やりかた である。1つずつの ステップ を実行する際、「場合分け」 を網羅して、コントロール・フロー は、「判断 (IF) と繰返し (ループ 制御)」 の操作を基本とする。「データ の型 (構造化)」 は、問題に即応した型が定義される。

 いっぽう、「抽象 データ 型」 は、データ に固有な操作も同時に扱い、データ と プロセス を カプセル 化する やりかた である。

 
 「アトリビュート・リスト」 は、「抽象 データ 型」 として扱うことができる。
 「アトリビュート・リスト」 は、コンポーネント として、再利用できることは確かだ、と思う。

 「アルゴリズム の定義表」 のなかに記述される (テーブル の 「関係」 のなかで成立する--すなわち、複数の テーブル を対象にした--) プロセス は、できうるかぎり、(JOIN および PROJECTION を使って、) データ に対する I/O のみで終わるように配慮しているが、系列 (関係) のなかでしか検証できない バリデーション・ルール もあれば、系列 (関係) のなかでしか成立しない アルゴリズム も、多々、ある。
 たとえば、「データ 解析に関する FAQ」 の 293ページ に示した事象 (「resource 対 event = 複数-対-複数」) では、resource と event は同じであるが、ビジネス・ルール が変化したら、データ 構造も アルゴリズム も変化してしまっている。すなわち、resource と event は、ほとんど、再利用できるが--アトリビュート・リスト は、ほとんど、再利用できるが--、「関係」 のなかで成立する構造は、ほとんど、再利用できない--アルゴリズム の定義表は、ほとんど、再利用できない。

 モジュール 化は、「再利用」 を目的にしているのではなくて、(環境が変化したら、) 修正しやすい構造を作ることが目的ではないか。

 おそらく、(フレームワーク を使う ユーザ にしてみれば、) 論点になるのは、「アルゴリズム の定義表」 が、コンポーネント を使って速く作ることができるかどうか、という点にあるのではないか--あるいは、「アルゴリズム の定義表」 を、コンポーネント を使って作ることができないとしても、それ以外の プロセス (プロトタイプ 作成や画面作成とか、アトリビュート・リスト の入力とか) が、コンポーネント を使って生産性を高めることができれば、フレームワーク は有用である。
 そして、事業が変化した際に、コンポーネント を使って、プログラム を作成するほうが、(構造的 プログラミングを用いて作成された) プログラム の ソース・コード を修正することに比べて、生産性が高いのであれば、フレームワーク は、多大に有用になる。

 
 (2004年6月23日)

 
(注 1)
  RAD とは、Rapid Application Development の略称。
 アプリケーション・プログラム を速く作ることをいう。

(注 2)
 「mission critical な event」 とは、システム を再構築する際の目的に関与する 「event」 系 データ をいう。また、システム の中核となる 「event」 系 データ をいう。小生は、クライアント が作成したT字形 ER 図を レビュー する際、以下のように問うことが多い。
 「さて、この システム の中核となっている 『event』 を、T字形 ER図のなかで、3つほど選んでみてください。」

(注 3)
  DA とは、Data Administrator の略称。概念 スキーマ を管理をする人。

(注 4)
  DBA とは、Data Base Administrator の略称。物理 スキーマ を作成して、データベース を運用管理する人。

(注 5)
 SWAT チーム とは、SoftWare And Tactics チーム の略称。プログラマ の精鋭部隊。

(注 6)
 事業過程の周期 (計画、実行、批判) とは、(計画が立案され、実行に移され、目標値と実績値を対比する) フィードバック のことをいう。フィードバック は、たいがい、6ヶ月くらいである。
 (手続き型言語を使って、) 1,000,000 ステップ の システム を作るには、従来、2年ほど費やしていた。すなわち、システム を作っている最中に、すでに、ビジネス の見直しが、4回ほど、起こっている、ということである。とすれば、システム が稼働した際、2年前の事業目的を実現する古びた システム になってしまっている。

(注 7)
 Martin, J., and R. Murch, "Application Development without Programmers", Prentice-Hall, 1982.

(注8)
 この クライアント は、フレームワーク が SDI/ RAD の体系のなかで有用であることを、技術的に、逐一、検証しているので、「6ヶ月以内の導入」 という RAD の目標を、今回、対象外としている。

  このウインドウを閉じる