機能間の相互作用は、ソフトウェアエンジニアリングの概念です。これは、2つの機能を統合することで、一方または両方の機能の動作が変更される場合に発生します。
「機能」という用語は、ソフトウェアアプリケーションの機能単位を表すために使用されます。コンピュータサイエンスにおける多くの概念と同様に、この用語はさまざまな抽象度で使用できます。たとえば、一般的な電話サービス(POTS)は、あるレベルでは電話アプリケーションの機能ですが、それ自体は発信機能と終端機能で構成されています。発信機能には、ダイヤルトーンの提供機能、数字の収集機能などが含まれる場合があります。
この機能相互作用の定義により、相互作用する機能の特定の動作、例えば統合によって応答時間がどのように変化するかなどに焦点を当てることができます。この分野の多くの研究者は、相互作用する機能の実行動作の変化によって生じる問題を検討しています。その文脈では、機能の動作は、与えられた入力に対する実行フローと出力によって定義されます。言い換えれば、相互作用は、与えられた入力に対する相互作用する機能の実行フローと出力を変化させます。
電話通信の分野では、電話回線(システム)は通常、着信転送や通話保留などの機能を提供します。通話保留機能では、1件目の通話を保留にして2件目の通話に応答できます。一方、着信転送機能では、顧客が電話を使用している場合に、追加の着信を転送する別の電話番号を指定できます。
例として、顧客に提供されている電話回線を考えてみましょう。この回線では、着信転送と着信待機の両方が有効になっているとします。最初の着信があると、電話が鳴り、応答されます。最初の着信ではどちらの機能も有効になっていないため、特に問題は発生しません。最初の着信が終了する前に2回目の着信があった場合、電話システムは、着信を別の番号に転送するか(着信転送)、最初の着信に応答した人に別の着信があったことを通知するか(着信待機)を判断する必要があります。この判断には明確な正解がないため、最適な回答は顧客のニーズによって異なります。この機能の相互作用は、システムの複雑化に伴い蔓延している一般的な問題の具体的な例です。
このような状況では、競合状態やその他の設計上の要因により、システムの決定が非決定論的に行われる可能性があります。機能間の相互作用による影響は、軽微な不便から生命を脅かすソフトウェア障害まで多岐にわたるため、機能間の相互作用を検出および解決する方法を見つけるための研究が継続的に行われています。