アーキテクチャー定義による同期の確保

SCLM は、ビルドの範囲にあるすべてのモジュールを同期させます。 ソース・モジュールをビルドした場合、SCLM はその結果生じるオブジェクト・モジュールとリストをその ソース・モジュールに同期させます。 アーキテクチャー定義をビルドした場合、SCLM は、ビルドへの入力として 使用されたすべてのメンバーと、ビルドから出力されるすべてのメンバーを 同期させます。 しかし、 特定のビルドの範囲外にあるオブジェクト・モジュールまたはロード・モジュールが、その ビルドの範囲内にあるソース・モジュールに依存している場合には、それらのソース・モジュール、 オブジェクト・モジュール、およびロード・モジュールの 同期化ができなくなることがあります。

次の例では、オブジェクト・モジュール OBJ1、OBJ2、および OBJ3 は、それぞれソース・モジ ュール SOURCE1、SOURCE2、および SOURCE3 をコンパイルして得られます。 SOURCE2 は、数多くのアプリケーションで使用される入出力ルーチン用のソース・モジュールです。 ロード・モジュール LOAD1 は、OBJ1 と OBJ2 がリンクされてできたものであり 、LOAD2 は OBJ2 と OBJ3 をリンク・エディットしたものです。 LOAD1 と LOAD2 は 、同じ種類のデータに対して操作を行う 2 種類のプログラムとなるもので、 そのために共通の入出力ルーチン (SOURCE2) が必要になります。 FLM01AP1 と FLM01AP2 は、それぞれ LOAD1 と LOAD2 をリンク・エディットする方法を記 述した LEC アーキテクチャー定義です。 最後の TOPARCH は、FLM01AP1 と FLM01AP2 を含む上位アーキテクチャー定義です。

図 1. 同期の例
本文に記載のとおりです。

図 1 で、ダイアグラムの中のすべてのモジュールは、 SCLM 制御下の階層の実稼働層にのみ存在するものであり、ソース・モジュール、オブジェクト・モジュール、 およびロード・モジュールのすべてが同期します。 すなわち、各ロード・モジュールに関しては、 そのロード・モジュールのリンク・エディットに使用された オブジェクト・モジュールのバージョンが階層に含まれます。 各オブジェクト・モジュールに関しても、そのオブジェクト・モジュールを作成するためにコンパイルされたソース・ モジュールのバージョンが含まれます。 したがって、アプリケーションに関するオブジェクト・モジュールとロード・モジュールをいつでも正確に (タイム・スタンプを除いて) 再作成することができます。

この構造では、開発の変更をビルドしてプロモートするためにどのアーキテクチャー定義を 使用するかに十分な注意を払う必要があります。 ソース・モジュールとロード・モジュールの間の同期を失わせる誤ったアーキテクチャー定義の使用 について、下記に例を挙げて説明します。

あるユーザーから LOAD1 に対する変更を申し込まれて、 SOURCE2 を修正することがその変更を実施する方法であると判断したとします。 LOAD1 に変更を行うのだから、FLM01AP1 を使用して、 ビルドとプロモートを行えばよいと判断したとします (後で誤りであることがわかりますが)。 変更を行ってビルドの準備ができると、ビルド・パネルに FLM01AP1 を指定して、 OBJ2 (SOURCE2 が変更されたから) と LOAD1 (OBJ2 が変更されたから) を SCLM に再ビルドさせます。 LOAD2 はアーキテクチャー定義 FLM01AP1 の範囲外であるため、 たとえ OBJ2 が変更されても LOAD2 は再ビルドされません 。 ここに問題があります。 FLM01AP1 をプロモートすると、SCLM は、 再ビルドされるべきすべてのモジュール (FLM01AP1 の範囲内の) が再ビルドされたかを検査します。 この場合は、FLM01AP1 の範囲外のモジュールも再ビルドする必要があったわけです。

こうしてビルドとプロモートが完了すると、FLM01AP1 の範囲内のすべてのモジュールが 同期化され、再作成可能になります。 しかし、LOAD2 は使用したアーキテクチャー定義の範囲外にあったので、再作成できません。 そのため、LOAD2 はそのソース・モジュールと同期しなくなります。

このような問題を避けるには、SCLM 制御下のプロジェクトのなかの アプリケーション・アーキテクチャーを分析して、 再ビルドを必要とする すべてのモジュールが含まれるアーキテクチャー定義を選択しなければなりません。 この例では、TOPARCH が正しいアーキテクチャー定義でした。 LOAD1 と LOAD2 の両方を含むのは TOPARCH だけだからです。 SOURCE2 が変更されたので、この 2 つのモジュールを再リンクしなければなりません。

SCLM プロジェクトが制御するすべてのモジュールを含む、 上位アーキテクチャー定義を作っておくように、強くお勧めします。 日常の開発作業では、もっと範囲の小さいアーキテクチャー定義を使用することができます。 しかし、その場合には、テストの一部として、 最上位アーキテクチャー定義でビルドを実施して、 プロジェクトのなかのすべてのモジュールの同期を検査することも必要です。