設計自動化と逆方向追跡確保を同居させるには

設計自動化ってのはMDAに代表される一定の決まりに基づき記述された設計書から機械的な変換によって、コードバイナリまで作ってしまうという技術である。
一方、逆方向追跡確保というのは、明確な共有定義の言葉ではないが、ここでは、コードレベルを変更しても設計書がその変更を、手動なり、自動なり手段は問わずとも反映されて同期されているということだ。
 この2つの技術は相性が悪い。なぜなら、上流工程からの自動化をする場合基本的に上流工程における定義に関係するような変更を下流でされてしまうと、その時点で同期がとれなくなり、たとえば、再び上流工程で変更を加えて自動的にコード、バイナリを作ってしまうと、以前に行った下流ソースコード変更が消されてしまうのだ。
さて、どうしようというのは長年の問題である。というのも、自動的に吐かれたソースって結構性能問題を中心とする非機能なところでイマイチなソースをはきがちであり、下流でのソースコードいじりが避けられない場合が多いからだ。
で、どうするのか、人ががんばるとしか言いようがないのだが、最近この問題でいろいろアイデアを考えていて、思いついた。ここでのアプローチは下流工程での変更をいかに凝集・局所化・モジュール化するかということにかかっている。こうすると、たとえば、上流で変更した場合、下流の変更は取り外し、そのあと上流の変更を反映し、最後にもう一度変更を付け加える。
そのための技術として思いついたのが3つだ。

  • アスペクト指向による処理の追加・入れ替え
  • リフレクションによる処理の横取り
  • アダプターパターン

これらが使えるのではないか。もちろん、構造が大きくかわるようなものはダメだが、それは設計レベルでのアーキテクチャが良くないということであきらめるしかない。