第7回 アプリケーションの設計(5月27日)

今日の課題

■ 内部設計

内部設計は,プログラムをどのように作るのかを決めるものである.

■ プログラム構造設計

役割りとしてまとまりのあるプログラムをモジュールと呼ぶ.幾つかの小さなモジュールで1つのモジュールを実現することがある.このとき小さなモジュールを下位のモジュールという.C言語によるプログラミングでは,最上位のモジュールは,main関数である.

モジュールを設計するには2通りの手順が考えられる.

トップダウンアプローチは,ウォーターフォールモデルなどの設計と相性が良い.

分割の方針は経験に依ると言われている.たとえば,次の観点で分割するとよい.

通常のソフトウエア開発では,上記のポイントを考える必要がある.ただ,現在のC言語の学習時には,より具体的な観点が欲しいでしょう.

そこで,たとえば,次のような処理のタイプで分割するとよい.

そして,既存のライブラリが利用できる点を見付けて,不足する機能を新規にモジュールで実現する.

■ プログラム内設計

設計したモジュールごとにプログラムのサブルーチン(関数)を設計する.

上記の項目について記述しながら,プログラムがうまく動作するのかを頭の中でシミュレーションする.誤りがあれば,プログラム構造設計を見直す.データ構造(struct)で必要な要件を別の紙にメモしておくと,後で便利である.

関数名や変数名を,この段階で命名する.関数は処理をするので,英語の動詞句の形で書き,変数は処理の対象であるので,英語の名詞句の形で書くことが多い.

save_image()
print_header_info()
list_of_files
file_number

単語の区切にアンダーバーを使ったが,アンダーバーを使わずに単語の先頭を大文字で書く方法もある.ただし,1つのソフトウエア内では統一して命名すること.

SaveImage();
ListOfFiles

定数や独自に宣言したデータ型は,大文字の名前を使うことがある.

#define BUFSIZ 8192
typedef double RGB[3];

ライブラリを作成するときは,先頭に共通のキーワードを設ける.ライブラリのソースファイルも共通性のある名前を付ける.

list_hogehoge.c
list_make_node()
list_print()
pgmimage.c
pgm_scan_header()
pgm_save_image()

■ 物理データ設計

プログラム内設計の際に,想定したデータ構造やファイルフォーマットを明記する.

□ 課題

先週より作成した自分の設計書に従って,内部設計をせよ.

サンプルのプログラム内部設計書をここに示す.⇒サンプル設計書2

来週(6月3日)までに,内部設計を済ませておくこと.来週は,知能計算機室で,各自がコーディングをする.再来週(6月10日)に作成した結果をレポートして提出する.

レポートの書式は以下のとおりとする.

第1章 pgmcatプログラム内部設計書
1.1 プログラム構造設計
1.2 プログラム内設計
1.3 物理データ設計
第2章 pgmcatプログラムのソースプログラム
2.1 本体(pgmcat.c)
2.2 ライブラリ(list_???.c/pgm_???.c)
第3章 pgmcatプログラムの操作説明書
第4章 動作例
第5章 実装の完成度
5.1 完成度の評点
(ABCの3段階評価で自己採点をする)
(A..仕様どおり完成した.B..結合画像の出力が可能であるが,ある条件では動作しない.C..動作しない)
5.2 具体例
・○○モジュールのコーディングができなかった.理由は….
・○○モジュールはバグが残っている.理由/症状は….
など

サンプルの設計書をベースにして第1章を作成してもよい.第2章以降は,第1章での設計どおりであること.


2004.5.24 by tokuhisa