令和6年度 III-20

科目: 専門科目 / 分野: 情報工学部門 / 年度: 令和6年度

III-20 問題画像

出典:公益社団法人 日本技術士会「技術士第一次試験 過去問題」

C言語のプログラムで、モジュールAとBの結合関係を弱くするリファクタリングとして、構造体を引数として渡す関数の引数を基本データ型のみに修正するという案が最も適切かを問う問題。

解説

この問題で問われていること

モジュール間の結合度を下げるリファクタリング案を選ぶ問題。

解き方

① モジュール間の結合は、必要な値だけを基本データ型で渡す「データ結合」が最も弱い(良い)。構造体をまるごと渡すと、相手の構造体の定義に依存する
② 関数が使うのは時(h)と分(m)だけ → 引数を基本データ型にすれば依存がなくなる。④グローバル変数は共通結合で結合が強くなる
③ ③

正解が正しい理由

c_minutes関数は、構造体s_timeとe_timeを引数として受け取るが、実際に使うのは各構造体の時(h)と分(m)だけである。モジュールBが、モジュールAの構造体の定義に依存している(スタンプ結合)状態である。引数を、必要な値だけの基本データ型(int型の時・分など)に修正すれば、データ結合(最も弱い結合)になり、モジュールBは、モジュールAの構造体の定義を知る必要がなくなる。したがって③が最も適切である。

各選択肢について

覚えるべきポイント

結合度は、内容結合>共通結合>外部結合>制御結合>スタンプ結合>データ結合の順に強い。必要なデータだけを基本データ型の引数で渡すデータ結合が、最も弱い(望ましい)結合である。

キーワード: 結合度、スタンプ結合、データ結合、リファクタリング、モジュール設計、C言語、情報工学部門