どうも!ひよこSE(@PiyoOct)です。
内部設計って何?
設計とは、料理で言うレシピにあたるもの。システム開発では「どんなプログラムにするのかを決めて、誰が読んでもわかるように文章にしようね」という役割をもつのが設計です。
そのうえで、内部設計(詳細設計)とは何か?
一言でわかりやすく説明すると、「目に見えない、プログラムの流れや実際の処理を設計する」ということになります。
「内部」という文字通り、作る人・開発者の人が見てわかる部分の設計!
内部設計を見れば、プログラムが作れるようになっています。
何も知らない人が見ると、何が書いてあるのかが、サッパリの内容だったり用語が出てくるのも当たり前だと思ってくださいまし。
内部設計(詳細設計)とは、プログラムの流れや実際の処理を設計
内部設計(詳細設計)とは、プログラムの流れや実際の処理を設計です。
(詳細設計)ってあるのは?
「内部設計=詳細設計」、つまりは、同じ意味だと思ってください。
基本情報技術者では「内部設計」で出ますが、「詳細設計」の呼び方の方がメジャーです。
内部設計は開発者目線の設計
内部設計の一つ前の「外部設計」では、具体的なプログラムの話に入る前に、実際に使う人にわかるように、システムの見た目や外枠を決めました。
だから、今度はプログラムの中身、内部の話をするってことだね!
そういうことです。開発者の「内部」で共有するイメージ!
H19の過去問
このことを知っていれば、H19の基本情報技術者試験の午前問が解けます。
外部設計及び内部設計の説明のうち,適切なものはどれか。
ア 外部設計ではシステムを幾つかのプログラムに分割し,内部設計ではプログラムごとのDFDを作成する。
「基本情報技術者試験ドットコム」より引用
イ 外部設計ではデータ項目を洗い出して論理データ構造を決定し,内部設計では物理データ構造,データの処理方式やチェック方式などを決定する。
ウ 外部設計と内部設計の遂行順序は,基本計画におけるユーザの要求に基づいて決定される。
エ 外部設計はコンピュータ側から見たシステム設計であり,内部設計はユーザ側から見たシステム設計である。
正解は、消去法でイです。
アは、外部設計なのに「システムを幾つかのプログラムに分割し」と、プログラムのお話をしているのでNG。
ウは、外部設計で画面とかの見た目を決めてから、内部設計でプログラムの話に入るので常に順番は同じです。
エは、外部設計は利用者(ユーザー)側、内部設計は開発者(コンピュータ)側なので反対です。
イの、「外部設計ではデータ項目を洗い出して論理データ構造を決定」がよくわからない・・・
「データ項目」って書いてあるのでわかりづらいですが、ここでは「画面で入力する項目」だと思ってください。
そもそも何を入力するのかを表す「データ項目」は、「システムを使う人が何を入力したいか?」によるので、使う人に決めてもらうしかありません。
そのあとの「論理データ構造」っていうのは、「どうやってデータとして管理するかを決めるもの」です。
なので、「データ項目を洗い出して論理データ構造を決定」=「画面で入力する項目を洗い出してどうやってデータとして管理するかを決める」みたいなかんじですね。
開発者が内部設計を見たらプログラムが書けるようになっている
開発者が内部設計を見たら、プログラムが書けるようになっています。
具体的に、内部設計ではどんなことが書かれてるの?
メジャーなものをピックアップします。
- データベースの設計(「物理データ設計」とも言ったりする)
- いろんな条件や分岐の説明(画面で1と入力されたら処理Aを実行し、2と入力されたら処理Bを実行みたいな)
- それぞれの処理の中身(処理Aと処理Bは何をするのかが説明されている)
ガッツリとプログラムの話をしているので、「???」となっていると思いますが、そんなもんです(*´ω`)。
大切なのは、「内部設計を見たらプログラムが書けるようになっている」ということです。
外部設計との違い
「内部設計」があるからには、「外部設計」というものがあります。
その2つはどう違うの?
外部設計は、システムで目に見える、見た目の話!
- 外部設計:システムで目に見える、見た目の設計(利用者側目線の設計)
- 内部設計:システムの中身の話。どうプログラミングするかを決める(開発者側目線の設計)
外部設計で、
こんな感じの見た目で作ろうとしてますけどいいですか?
いいですよ。それでお願いします
と同意してもらったら、「じゃあどういうプログラムにするの?」という中身の話に入っていきます。
なので、内部設計の工程になったら、開発者目線。
知らない用語とか、意味不明な図表が出てくるのが当たり前。
プログラマーはがんばって、それを読み解くのです(めんどいけど仕方ない)。
まとめ
内部設計は、「目に見えない、プログラムの流れや実際の処理を設計する」という役割です。
詳細設計という言葉も、全く同じ意味。
「本格的なプログラムの話をしてて、色々とむつかしそうなことが書かれてるんだな~」と覚えておいてくださいまし(-_-;)。
コメント