

ソフトウェアに関する今まで発生している多くの問題は、SW工学の二つの構造的な問題から始まっています。一つ目の問題は、あるプログラムの内部を構成する必須要素ですが、完全に異なる性格を持っている「ロジック」と「機能」を混合し実装してきた事です。
「ロジック(Logic)」とは、ある仕事の処理方法、手順、特定の事実(Facts)を込めているデータ、情報、あるいは知識で、静的な性格を持っています。現在のプログラムは世界の全てに対応して作られることを考えると、「ロジック」はその範囲がごく広くて、多様な種類が必要です。
反面、「機能(Function)」とは、利用者の操作に反応して装置が実際に実行される動作で、動的な性格を持っています。ロジックと比べると、機能の種類は少なく、定型化したいくつのタイプで定義できます。
一般的に「機能」は、ある動作との関連を意味し、コーディング作業で実装するのが望ましいですが、「ロジック」はほとんどが静的なデータや情報なので、あえてコーディング作業で実装しなくても簡単に表現し、構成もできます。
今までプログラムは、このような全く違う要素を混合して全部をコーディング作業で実装してきたのが問題といえます。それで、ロジックが少し異なる場合や、変わる場合にも、コーディング作業を繰り返すことしか方法がありませんでした。コーディングの結果を見ると、ロジック以外の残りのコードはいくつかのタイプで分類でき、そのタイプ毎のコードは各々が似ていることを発見できます。
開発すべきプログラムは多すぎますが、これほど多くのロジックを全部コーディングで実装し、これからもコーディングで実装するしかない現実は、SW工学の最も深刻な構造的問題です。


