【問題7】詳細設計におけるモジュール分割“組み込み力”向上! ETEC対策ドリル Step2(7)

要件定義、基本設計に続き、詳細設計では基本設計で分割したサブシステムをさらにモジュールに分割し、機能やインターフェイスなどを設計する

» 2011年03月07日 11時30分 公開
[近森満(株式会社サートプロ 代表取締役社長/JASA ETEC運営事務局),@IT MONOist]

 前回の課題演習―【問題7】は、「モジュール分割手法」に関する問題でした。

 要件定義および基本設計に続き、詳細設計では、基本設計で分割した「サブシステム」をさらに「モジュール」に分割し、機能やインターフェイスなどの詳細を設計します。

 今回は、問題の解答に続いて、“詳細設計におけるモジュールの分割手法や設計”について解説します。この機会にしっかりと理解しておきましょう。

 それでは、解答を発表します!


課題演習―【問題7】の解答

問題7

 解答は、「ウ.データの流れに着目して、プログラムを入力機能、変換機能、出力機能に分けてモジュール分割を行う」です。

 は「TR分割」、は「ジャクソン法」、は「ワーニエ法」の説明です。

モジュール分割

 要件定義でシステムへの機能要件および非機能要件を明確化し、基本設計ではシステムをサブシステムに分割してインターフェイスなどの設計を行いました。詳細設計では、サブシステムをさらにモジュールに分割し、モジュールのインターフェイスや機能を設計します。

 モジュールとは、ソフトウェアを構成する部品のことです。プログラミングや単体テストは、モジュールを最小単位として行います。モジュール分割を行うことによって、大人数での並行開発が可能になり、生産性が向上するだけでなく、ソフトウェアの再利用や保守がしやすくなります。

 代表的なモジュール分割手法には、表1のようなものがあります。

分割手法 説明
STS分割 データの流れに着目して、入力機能(Source:源泉)、変換機能(Transform:変換)、出力機能(Sink:吸収)に分けてモジュール分割を行う
TR(トランザクション)分割 データを処理するトランザクションごとにモジュール分割を行う
ジャクソン法 入出力データの構造に着目して、基本、連続、繰り返し、選択という4つの構成要素でモジュール分割を行う
ワーニエ法 入力データの構造に着目して、順次、選択、繰り返しという3つの構成要素でモジュール分割を行う
表1 代表的なモジュール分割手法

モジュールの独立性

 モジュール分割を行う際には、モジュールの独立性に注意しなければなりません。モジュールの独立性が低く、ほかのモジュールの処理などに依存する割合が高いと、再利用性や保守性などが低下し、モジュール分割によるメリットが十分得られなくなります。モジュールの独立性を測る尺度としてモジュールの強度結合度があります。

 モジュールの強度(または凝集度)は、1つのモジュールに実装される機能間の関連性の強さを示します。モジュールの強度が強いほど、モジュールの独立性も高くなります。

モジュールの強度 表2 モジュールの強度

 「機能的強度」を持つモジュールは、1つの機能のみを実装しているため、仕様変更による修正が生じてもほかのモジュールに影響を与えません。一方、「暗号的強度」のモジュールは関連性のない複数の機能を実装しているため、その機能のいずれかを修正すると、ほかのモジュールにも修正を加えなければならない可能性があり、プログラムの保守がしにくくなります。

 モジュールの結合度は、データの受け渡しに関し、ほかのモジュールにどれだけ依存しているかの度合いを表します。モジュールの結合度が弱いほど、モジュールの独立性が高くなります。

モジュールの結合度 表3 モジュールの結合度

 「データ結合」のモジュールは、必要最小限のデータのみを受け渡しているため、ほかのモジュールでの修正の影響が小さくて済みます。「内容結合」のモジュールは、ほかのモジュール内を直接参照してデータを受け渡しているため、ほかのモジュールの修正に合わせて修正しなければならない可能性が高くなります。

コラム1:サイクロマティック数

ソフトウェアの品質を測定するためのメトリクスの1つに、「サイクロマティック数」があります。サイクロマティック数とは、プログラム中のif文、while文、switch文などの分岐や制御の数に基づいた複雑度のことです。サイクロマティック数が大きいほどプログラムが複雑であることを意味します。サイクロマティック数が大きいと、プログラムが理解しにくくなり、テストや保守を行いにくくなります。if文やwhile文が多く、サイクロマティック数が大きい場合には、モジュール分割が適切に行われていない可能性があるため、モジュールの機能を再度見直すとよいでしょう。


モジュールの設計

 モジュール分割を行い、モジュール間のインターフェイスを決めたら、モジュールを設計します。このとき、モジュールでどのように処理を実行するかを「フローチャート」や「構造化チャート」などを使って図式化します。

図           説明
フローチャート モジュールの開始から終了までの論理の流れを、処理、分岐、繰り返しなどの記号を使って表す。フローチャートの書き方はJIS X 0121として規格化されている
構造化チャート モジュールの論理を階層構造にまとめて表す。論理を木構造として表すSPD(Structured Programming Diagram)やPAD(Problem Analysis Diagram)、処理や分岐などを矩形(くけい)を組み合わせて表現するNSチャートなどがある
表4 モジュールの設計に用いる図

フローチャートと構造化チャートの例 図1 フローチャートと構造化チャートの例

コラム2:MISRA-C

モジュールの設計が終わり、詳細設計が完了すると次はプログラミングの工程に移ります。プログラミング工程では、変数名などの命名規則、インデントやかっこの使い方、命令文や制御文の書き方、コメントの入れ方などをコーディング規約としてルール化することが推奨されます。コーディング規約を定めて、ソースコードの書き方を統一することで、分かりやすく、保守しやすいソースコードを作成できます。
MISRA-Cは英国のMISRA(Motor Industry Software Reliability Association)が公表した、自動車の制御ソフトウェア向けのコーディングガイドですが、自動車以外の分野の組み込みソフトウェアにも適用可能であり広く活用されています。
MISRA-C:2004では、分かりにくいソースコードを作る原因になりやすいgoto文の使用を禁止する、自動変数は必ず初期化するといった、147個のルール(必須および推奨のものを含む)を定めています。


課題演習―【問題8】

問題8

 いかがでしたでしょうか? モジュールの分割や設計の手法について理解できましたか。次回は「オブジェクト指向」について説明します。お楽しみに! (次回に続く)


【 筆者紹介 】
近森 満(ちかもり みつる)
株式会社サートプロ 代表取締役社長

大手電気メーカー、外資系IT教育ベンダ、オープンソース系技術者資格認定団体などを経て、2006年より組み込みシステム分野の人材育成・教育支援を行う株式会社サートプロを設立する。現在は、ETEC運営事務局としてJASAの組込みソフトウェア技術者試験の普及・啓蒙(けいもう)活動のほか、組み込み人材育成と教育支援事業を行う。


Copyright © ITmedia, Inc. All Rights Reserved.