モデルからコードを自動生成することはやめる

最近、つぶやいてばかりで、すっかりまとまったエントリを書かなくなってしまいました。よくないですね。

さて、最近とある人と話していて思ったのだが、過去にいうところのMDAとかExecutable UMLの概念、つまりモデルを書いて、保守してそっから自動的に実装コードを吐くという考えはもうやめたほうがよいのではないかと思った。とかいって自分はそのようなことに深くかかわっている。そこで気づいたのだが、実行系を、たとえばJavaで吐こうとするとなんだかんだ言ってJavaの記述に変換可能なレベルでシステムの内部処理の手続きを書かなくてはならない。結構細かく書かなくてはならないから、これだったらコードを直接書くよという人が後を絶たないし、自分もこっそりとそう思う。
ただ、一方で、ソースが原本という状態でメンテナンスはしたくない。なるべくなら現在でいうドキュメント、モデル中心ならモデルを原本としたいわけだ。これをどのように解決したらいいだろうかと考えた。
改めて考えたのだが、メインテナンスしたいものはなんだろうか?それは処理ではなく仕様だ。別に処理の流れなんぞどうでもよくて、その処理で実現する仕様のみをメインテナンスしたいはずなのだ。追跡性も処理ではなく仕様に対して行いたいはずなのだ。じゃあ、どうすればよいか。細かい説明は省くとしてこうするのだ

  • モデルからコードを自動生成することはやめる
  • モデルからはテストのみを自動生成する
  • コードはモデルを見ながら人が書くなり、自動生成するなりすきにやってもらう

こうすることによって、手続き型の処理をモデルで書く必要はなくなるし、宣言型言語でモデルを記述しておけば、ブラックボックステストを導出することも可能であろう。実装はテストさえ通れば適当でいいのである。こうすればモデルとして表現しメインテナンスすべき項目もへるし、宣言型ならさまざまな数学的道具が使える
そんなんで、大丈夫かと思われるが、今までの品質管理は結局テスト依存でかつそれで何の問題もなかったのだがからこれでいいのだ。

結構なパラダイム変換っであり、実はかなり良いアイデアだと思うのだがどうかな。