はじめに

 近年,ソフトウェアシステムが社会で広く使われるようになり,その重要さがますます増大してきている。ソフトウェア開発技術者の中で,社会で最も必要とされているものに,ソフトウェア設計者がある。これは,ソフトウェア設計者がシステムの全体像を決め,そのプロジェクトの成否を握る場合が非常に多いからである。
 近頃,単なるプログラマの仕事は,単価の安い下請けや海外の請負会社に委託されて,開発コストを低減させる動きが加速しているが,設計作業の切り出しや委託は,容易ではない。きちんとした設計技術を習得しておくことが,ソフトウェア技術者として活躍するための必要条件と言える。
 本書は,大学や会社において,ソフトウェアの設計に初めて接する人を対象にしている。プログラミングは習ったが,設計作業はやったことがない,どういうことをすれば良いのか,全く知らないという人が前提である。本書の内容は,ある程度のプログラミングの経験があれば,比較的容易に理解できるはずである。
 本書では,構造化分析・設計法とUML(unified modeling language)という2種類のアプローチを取り上げている。構造化分析設計法は非常に古くからある手法であるが,現在でも広く開発に利用されている。UMLは近年,Javaなどオブジェクト指向言語の普及とともに利用され始めており,今後の普及が予想されている。このほかにも設計手法は数多くあるが,この2種類の知識があれば,他の手法に関しても応用が可能であろう。構造化分析設計法,UMLとも多少異なるいろいろな版(例えばUML1.1,1.3,2.0など)があるが,設計の初心者を対象に考えているので,ここでは,その差異は問題にならない。
 ソフトウェアの設計を,大学の授業としてうまくまとめて教えるのはなかなか難しい。ソフトウェア設計の教科書として確立されているものが,内外を見渡しても存在しない。この理由として考えられるのは,
1. コーディングやテストなどと違って,個別に確立した技術がない。例題や事例紹介中心になる。
2. 正解が1つあるわけではなく,極端な言い方をすれば,どんな悪い設計でもコーディングでがんばれば動くシステムになってしまう。
3. 設計をうまく行うためには,設計技術のことのみを知っていれば良いのではなく,要求分析,仕様作成,コーディングなど他の工程の知識が要求される。
4. 演習が必須であり,そのためには多くの時間が必要である。
などであろう。
 本書では,
1.に関しては,できるだけ,なぜそのような記述や設計にするか,その背景の考えを盛り込むように努力した。
2.に関しては,設計のレビューやそのためのチェックリストを含めることで,良い設計とは何か,について学べるようにした。
3.の他の工程の知識を必要とすることに関しては,1章で触れるとともに,各章に,関連する事項として囲み記事(コラム)を入れた。
4.に関しては,本書では,できる限り多くの演習課題とその解答を含めるようにしている。単に,本文の内容を理解するだけではなく,多くの演習問題に取り組んでもらいたい。そして,解答との違いについて,検討,議論してもらいたい。
 本書は,2章の構造化分析設計法と3章以降のUMLの部分は独立して利用できる。ただし,UMLのみを学習したい人も,2章の内容は比較的容易であるので,時間があれば読んで頂きたい。構造化分析設計法のデータフロー中心の考え方は,UMLで用いられるオブジェクト指向の考えとはだいぶ異なっているが,参考になる部分は多数ある。

 本書をまとめるにあたって,多くの人にお世話になった。構造化設計分析法に関しては,高知工科大学の荻原剛志教授の資料を参考にさせてもらった。研究室のスタッフ,学生からは直接,間接の御支援をいただいた。また,(株)エヌ・ティー・エスの北原裕一氏には,本書の出版で大変お世話になった。諸氏に心から感謝いたします。最後に,執筆にあたって暖かく励ましサポートしてもらった家族に感謝します。
2016年3月 筆者記す
第2版 演習で身につくソフトウェア設計入門 〜構造化分析設計法とUML〜 Copyright (C) 2016 NTS Inc. All right reserved.