ソフトウェア工学における直交性

直交性

ソフトウェアエンジニアリングでは、コンポーネントの1つを変更すると、そのコンポーネントの状態のみが変更される場合、システムは直交していると見なされます。

たとえば、a、b、cの3つの変数を持つプログラムについて考えてみます。aの値を変更しても、bまたはcの値は独立していれば、変更されません。

このプロパティは、プログラムの可動部分の数を絞り込んで問題の根本原因を特定することに依存しているため、プログラムのデバッグでは特に重要です。

Eric S.Raymondの「ArtofUNIXprogramming」からの次の引用を参照してください。

直交性は、複雑な設計でもコンパクトにするのに役立つ最も重要な特性の1つです。純粋に直交する設計では、操作に副作用はありません。各アクション(API呼び出し、マクロ呼び出し、または言語操作)は、他のアクションに影響を与えることなく、1つのことだけを変更します。制御しているシステムの各プロパティを変更する方法は1つだけです。

直交性は、あるコンポーネントを変更しても他のコンポーネントに影響を与えないようにコンポーネントを作成するためのソフトウェア設計の原則です。これは、他の2つの原則、つまり強い凝集度と疎結合の組み合わせです。

それは実際には数学から借りた用語です。たとえば、2本の線が垂直である場合、それらは直交しています。ソフトウェア設計では、一方の変更が他方に影響を与えない場合、2つのコンポーネントは直交しています。

この概念をコードのクラスまたは他のセクションに適用すると、結合が少なくなります。直交する2つのクラスは、相互の実装に依存することはできません。また、グローバルデータを共有することもできません。1つのクラスの内部を変更しても、他のクラスには影響しません。コンポーネントは独立している必要があり、単一の責任のみがあります。

ファイルから数値のリストを読み取り、それらをソートされた順序で返すメソッドについて考えてみます。これで要件が変更され、数値がデータベースに保存されます。このメソッドを変更してデータベースにアクセスすると、クライアントコードが変更されます。これが2つの異なる方法である場合、新しいソースは並べ替え方法に影響を与えません。クライアントコードだけが番号のソースを知っている必要があります。

強い凝集度

ソフトウェアコンポーネント内では、コードが強力に接続されている必要があります。これは、コードが正しく分割されていることを示しています。

コンポーネントに2つ以上の比較的切断されたパーツがある場合、それらのパーツが別のコンポーネントにあるか、それ自体である必要があることを示している可能性があります。

疎結合

ソフトウェアコンポーネント間では、接続がほとんどないはずです。2つのコンポーネントが強く結合している場合は、それらを1つのコンポーネントにする必要があるか、別のコンポーネントに分割する必要があることを示している可能性があります。