この投稿では、スパゲティ化するコードやモデルの原因と対策について説明します。
原因
スパゲティ化するコードやモデルの原因は、機能要求の実現が設計観点となっているからです。その為、アーキテクチャやコンポーネントを理解せずにコードやモデルを作成した結果、スパゲティコードやスパゲティモデルが作られています。
原因としては、次のことがあげられます。
- 機能要求を満たすことが優先としている
- 非機能要件について設計検討する時間がない
または、設計スキルがない - アーキテクチャやコンポーネントの現状分析時間の不足している
または、アーキテクチャやコンポーネントの仕様の不足している
対策
機能要求仕様の対策
機能要求仕様の対策は、ソフトウェア仕様を考慮した機能要求仕様とすることをお勧めします。
例)下記のように機能別=コンポーネント別に機能要求を記載する。
対策前 | センサ値Xが、異常判定閾値Y以上となったとき、異常と判定し、リレーZをOFFとする |
対策後 | 診断仕様:センサ値Xが、異常判定閾値Y以上となったとき、異常と判定する リレー仕様:リレーZのOFF条件に「センサ値Zが異常」を追加する |
ソフトウェアの対策
ソフトウェアの対策は、コンポーネントにインタフェース部を設け、インタフェース変数をコンポーネント別に定義することをお勧めします。
例)この例は、ファイル構成をコンポーネント別のファイルとし、インタフェース変数をグローバル変数とした例です。
- コンポーネントにインタフェース部としてInput/Output処理部を設けます
- Inputは、Inputするインタフェース変数を接頭語を外した変数に書き込みます
- Outputは、Outputする変数を接頭語にコンポーネント名(略称)を付けたインタフェース変数に書き込みます