この投稿では、スパゲティ化するコードやモデルの原因と対策について説明します。
原因
最近、スパゲティコードやスパゲティモデルに関するアドバイスを求められる機会が増えています。
スパゲティコードやスパゲティモデルが生じる主な原因は、ソフトウェア設計者がソフトウェア要求仕様とコードやモデルを一致させようと設計し、そのままコーディングやモデル作成を行うためです。ソフトウェア要求仕様は、ソフトウェアアーキテクチャやコンポーネント間インタフェース変数(コンポーネントを跨るインタフェース変数:グローバル変数)を考慮せずに作成されることがあり、その結果、スパゲティコードやスパゲティモデルが生じています。
この問題を防ぐには、要求仕様の発行者またはソフトウェア設計者のいずれかが、ソフトウェアアーキテクチャやコンポーネント間インタフェース変数を考慮する役割を担うことを、設計ルールとして明確に定める必要があります。しかし、これを担当者の裁量に委ねた結果、スパゲティコードやスパゲティモデルが多発しているのが現状です。
スパゲティコードやスパゲティモデルは、保守性や移植性を低下させるだけでなく、設計効率や品質の低下を招く要因となっています。
原因:
- ソフトウェアアーキテクチャやコンポーネント間インタフェース変数に対するアーキテクチャ設計が不足している
- コンポーネント間インタフェース変数のソフトウェア要求仕様の設計ルールが不足している
- コンポーネント間インタフェース変数のソフトウェア設計の設計ルールが不足している
- ソフトウェアアーキテクチャやコンポーネント間インタフェース変数の教育が不足している

対策案
次の対策を提案させていただきます。他にも対策方法はありますので、皆様もご検討ください。
対策案:
- 下図のようにコンポーネントReceive部とSend部を設ける
Receive部:コンポーネント間インタフェース変数からコンポーネント内ローカル変数にコピーする
Send部:コンポーネント内ローカル変数をコンポーネント間インタフェース変数にコピーする
コンポーネントは全てコンポーネント内ローカル変数にて処理を行う - ソフトウェア要求仕様書は、コンポーネント間インタフェース変数を明記する
- ソフトウェア設計は、№1のコンポーネントReceive部とSend部を用いて設計する
- №1のコンポーネントReceive部とSend部について教育する
下図は、対策№1と№3にて対策した例です。
