第1.1

1 章 ソフトウェアと設計

ソフトウェア設計の意義

現在，ソフトウェアはあらゆる機械の中に組み込まれて動作しています．メ
インフレーム・サーバ・パソコンなどの汎用コンピュータ，自動車・飛行機・電車などの乗り物，ショベルカー・ロボット・工作機械などの産業機械，洗濯機・掃除機・カメラ・テレビなどの家電製品，携帯電話・スマートフォンなどの通信機器等，様々なものがあります．
歴史的には，コンピュータ（電子式計算機）の利用は，統計計算や弾道計算などの数値計算の領域から始まりました．その後，効率化や生産性向上を目的に企業事務などのシステム化・自動化，それに加えて経営分析や市場予測など，人の判断を支援する領域にも広がりました．さらには，パソコン・インターネットなどの形で個人のコミュニケーション手段を拡大し，その一方で，マイクロコンピュータの利用が様々な機器の電子制御化を推し進めてきました．1930
年代から約 80 年の間の出来事です．その勢いは衰えることなく，コンピュータの新しい利用分野は様々な領域に拡大しています．
これらの出来事をものづくりの視点で考えてみると，「ハードウェアはできる限り汎用化を目指し，制御や機能はソフトウェアで作り込む」という傾向が見えてきます．サーバ・パソコンなどの汎用機はもとより，自動車や工作機械なども，機械としてのハードウェア自体が進化を続ける中，それを管理・制御する機能は，ほとんどがソフトウェアにより実現されています．スマートフォンなどは，携帯電話にあった機械式のボタンは既になく，その機能はタッチパネルを介してソフトウェアで実現されています．この傾向は，ハードウェアの1

第1章

ソフトウェアと設計

1.2

ソフトウェア設計の特徴

量産コストを下げ，ソフトウェアの柔軟性という特徴を生かすものづくりと言このように作ろうとするソフトウェアについてのすべての情報，つまり，そわれています．この考え方は，経済的にも顧客価値の観点からも，市場に広くのソフトウェアを作るために必要な情報，使うために必要な情報を生み出して受け入れられて今後さらに拡大していくと考えられます．さらに，インターネ決定していくのが設計です．

ットを介してものとサービスが結びつき，環境や人々の生活に深く入り込んでソフトウェア設計の特徴くることが想定される現在では，ソフトウェアはものづくりのみならず，サー1.2

ビスや環境を含めたシステム全体の価値を決める大きな要因となっています．

設計という視点で見たときに，ソフトウェアにはハードウェアにない特徴がこのようなソフトウェアを作るにはどうしたらよいのでしょう．また，これいくつかあると言われることがあります．ここでは，代表的なものを 3 つあげまでにないソフトウェアを作り出していくためにはどうしたらよいのでしょう．

ます．

「ソフトウェアを作る」といえば，プログラムを作成することだと考えてい第 1 に，ソフトウェア設計によって出来上がったものが直接目に見えないこる人もいるかもしれません．また，インターネットで手に入るプログラムを集とです．例えば，家電製品や工作機械など，様々な機器を作る現場では，機械めてくればよいと考えたり，思いつくままにプログラムを書けばよいと考えた

設計者，電気・電子設計者，ソフトウェア設計者，通称，メカ屋・エレキ屋・りしている人もいるかもしれません．しかし，それでは社会や利用者の要求をソフト屋と呼ばれる設計者が共同で開発を行うことが一般的です．設計対象物満足し，本当に役に立つソフトウェアを作ることはできません．そういうソフを構造と振舞いに分けたとすると，メカ屋は，構造も振舞いも目で見て，手でトウェアを作るためには，ソフトウェアも機械と同様，ソフトウェアを構成す触って確認することができます．エレキ屋は，構造は目や手で確認することがるために必要な部品を考え出して作っていかなければなりません．ソフトウェできるものもありますが，振舞いは見て確かめることが難しくなり，測定器をアを作るためには，あらかじめ作ろうとするソフトウェアについてすべてのこ通してそれを確かめることになります．ソフト屋に至っては，振舞いはもとよとを頭の中で考えて決める「設計」という作業が必要なのです．

り構造さえ見ることが困難です．これは，人間が設計という行為を行う際にか設計では，どのようなソフトウェアを作ればよいのかという構想を立て，基なりの障壁になるのではないかと考える人もいます．

本的な性能を決め，必要な機構・構造を練ります．そしてさらにそれを具体化

第 2 に，ソフトウェアにハードウェアのような保守作業はないということでして，詳細なインターフェイス・データ構造・アルゴリズムなどすべてのことす．ソフトウェアはハードウェアと違って物理的な劣化がありません．バイナを決めていきます．その結果が設計書として仕上がります．ソフトウェアを作リコードとして作られたものは，それを動作させるハードウェアさえあれば，るための具体的な情報をすべて作り出していくのです．まだ実物になってはい

何十年，何百年でも変わることなく利用することができます．そのため，消耗ませんが，頭の中や設計書の中でソフトウェアができあがるわけです．この過という考え方はありませんし，保守部品という考え方もありません．保守は必程で，そのソフトウェアが本当に動くのか，当初の要求を満足しているのか，要ないと考えて，開発が一段落すると，開発部隊を極端に縮小したり，アウト

安全性に問題はないのか，製作は可能なのかなどを検討し，設計をやり直し，ソーシングしたりする経営者もあるくらいです．

修正をしていきます．このようにして頭の中や設計書の上でソフトウェアを作

第 3 に，ソフトウェア設計者は論理を扱うということです．ハードウェア設り直して最終的な情報ができあがります．これを実際にプログラムとして製作

計者は，自然法則としての物理に制約されています．ところが，ソフトウェアして，実物のソフトウェアができあがるわけです．

設計者は，設計対象物を抽象的な概念として表出し，それを設計者自ら構築す

23

第1章

ソフトウェアと設計

1.3

設計者に求められる基本視点る論理に基づいて制御します．ここには遍く働く自然法則はなく，法則と同じれば，設計対象物の価値を維持していくという観点では，ハードウェアとソフ役割を果たす規則を自ら決めなくてはならないということです．ソフトウェア

トウェアは同じ制約を受けていると言えます．そして，このソフトウェア流のでアーキテクチャといわれる設計思想や設計方針がことのほか重要視されるの保守を続けていけるようにするためには，保守性ということで，当初から設計はそのためです．ソフトウェア設計には規則作りが非常に重要な役割を果たしを工夫しておく必要があります．これもまたハードウェアと同じ制約を受けてます．

いると考えられます．

これらは，一般に認識されているハードウェアとソフトウェアの違いです．

第 3 の特徴については，物理と論理という設計の理（ことわり）のうち，ど確かに表面的にはその通りなのですが，筆者は少し違った見方をしています．

ちらで設計解を出すのかという違いを述べたものであり，それぞれの設計分野

第 1 の特徴は設計者が受ける制約について述べたものです．設計は，実際にの特徴を示している，と筆者は考えています．機械の設計が物理だけでできるものを作り出す前に行う行為です．機械の設計であっても，世の中で初めて作わけではありません．例えば，力をどの部品にどのように伝達させていくのかり出すものにはまだ実体がありません．確かに，ソフトウェアには製造されたという設計者の意図を論理と呼ぶことにすると，形状と寸法という物理的特性ものが目に見えないという特徴があります．しかし，作ろうとしているものにを左右する要因を決定することで，その論理を実現しているのです．一方，ソ対して必要な情報をすべて決めるという設計の定義に照らせば，ハードウェア

フトウェア設計では，どの部品にどのようなデータを入力し，どのような処理もソフトウェアも違いはありません．また，要求機能を定義し，機能からそれをさせて，結果を出力させるのかという設計者の意図，すなわち論理を，インを実現する機構・構造を作り出していくという設計の思考過程そのものも何らターフェイスとプログラムという論理的特性を左右する要因を決定することで変わることがありません．それだけでなく，設計に用いる概念，例えば，機械実現しているのです．このとき，ハードウェアの物理的特性，例えば CPU 性の場合には，形状や寸法，材料や加工法といった概念も，上位概念に登って見能やメモリ量などは設計の制約条件と見なされます．

れば，それがソフトウェアのインターフェイスやプログラム，プログラミング

このように，設計対象物をハードウェア・ソフトウェアという見かけの特徴言語やプログラミングに相当するということも分かってきます．本書では，上で捉えるのではなく，設計という思考の働きとして捉えることで，ハードウェ

位概念（抽象化された設計概念）を元に機械設計とソフトウェア設計の対比を

ア設計もソフトウェア設計も上位概念に登れば同じように議論できる，という各所に取り入れて，設計をより深く理解していきます．

ことが言えるのではないかと筆者は考えています．本書ではこの考え方を基本

第 2 の特徴はソフトウェアがハードウェアのように物理的に劣化しないことに置いて，ソフトウェア設計の様々なものの見方・考え方を見ていきます．

を述べています．現在のようにハードウェアの進歩が早い場合，ソフトウェア設計者に求められる基本視点は 10 年使うが，ハードウェアは 3 年で変更するなどということがよくあります．

1.3

つまり，ソフトウェアにはハードウェアの何倍もの寿命があるということにな

ソフトウェアは本来，ハードウェアと組み合わさってシステムとして動作しります．そのため，ソフトウェアそのものは変わらなくても，世の中の要求やます．そのため，設計者はシステムが全体としてどのような目的で，どのよう利用者の方が変化します．ソフトウェアには常にそれに対応するための保守，に動作するべきなのかを十分理解しておく必要があります．ここでは，これかつまり消耗品交換という意味での保守ではなく，正確には機能追加という意味

ら設計について学んでいくにあたって，システム全体を俯瞰するために設計者での保守が不可欠なのです．これをソフトウェア流の保守4と呼ぶことにすが持つべき視点について説明します．
5

第1章

ソフトウェアと設計

1.3.1

システムの捉え方と基本視点

ここでは，自動車や工作機械などの機械システム，企業の情報システム，電力，交通システムなどの社会基盤システムなど，ハードウェアとソフトウェアを組み合わせ，それを体系的に人が利用できるようにしたものをシステムと呼びます．
システムは機械や電気的な装置などハードウェア中心でできていた時代から，それらのハードウェアをコンピュータおよびソフトウェアを使って制御する，いわゆる組込みシステムを中心としたシステムへと変化してきています．そして一方で，企業情報システムやインターネットに代表される情報処理・伝達のためのシステムがそれらと組み合わされ，社会の様々な基盤システムをさらに高度な形に変えていこうとしています．
筆者は，多数のプロジェクトに参画し，初級設計者から上級設計者，上級企画者を経験していく中で，構造化設計やオブジェクト指向設計など，その時々で最新と言われる設計方法論に接してきました．確かにシステムやソフトウェ
ア開発の方法論は時代とともに進化してきていますが，システム設計者が考慮すべき概念や考え方，システムを見る視点には普遍的なものが存在します．本
節ではそれを中心にシステム設計の基本視点について述べます．
まず，共通するシステム設計の基本視点を図 1．1 に示します．
実際に設計を進めていく際には，決定によって次第に明らかになっていくシステムの全体像を頭の中に置きつつ，そのシステムの内外で起きる現象を頭の中で想像しながら，さらに決定を繰り返していくことが重要となります．つまり，決める側の視点で作り出したものを，見る側の視点で評価しながら設計を進めていくわけです．このとき必要なシステムや現象をとらえる視点を図 1．2に示します．
システムやそこで起きる現象を捉えるには，システムを構成している要素の全体構造や相互関係を考えて全体像をマクロに考える必要があります．そして，それとは対照的に，個々の構成要素でプロセッサ，メモリやストレージなどの記憶域，通信路などの挙動をミクロに捉えることを同時に行う必要があります．
6