第 1 ソフトウェアと設計 - pub.nikkan.co.jp ·...

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

Upload: others

Post on 10-Oct-2019

0 views

Category:

Documents


0 download

TRANSCRIPT

1

1.1 ソフトウェア設計の意義 現在,ソフトウェアはあらゆる機械の中に組み込まれて動作しています.メ

インフレーム・サーバ・パソコンなどの汎用コンピュータ,自動車・飛行機・

電車などの乗り物,ショベルカー・ロボット・工作機械などの産業機械,洗濯

機・掃除機・カメラ・テレビなどの家電製品,携帯電話・スマートフォンなど

の通信機器等,様々なものがあります.

 歴史的には,コンピュータ(電子式計算機)の利用は,統計計算や弾道計算

などの数値計算の領域から始まりました.その後,効率化や生産性向上を目的

に企業事務などのシステム化・自動化,それに加えて経営分析や市場予測など,

人の判断を支援する領域にも広がりました.さらには,パソコン・インターネ

ットなどの形で個人のコミュニケーション手段を拡大し,その一方で,マイク

ロコンピュータの利用が様々な機器の電子制御化を推し進めてきました.1930

年代から約 80 年の間の出来事です.その勢いは衰えることなく,コンピュー

タの新しい利用分野は様々な領域に拡大しています.

 これらの出来事をものづくりの視点で考えてみると,「ハードウェアはでき

る限り汎用化を目指し,制御や機能はソフトウェアで作り込む」という傾向が

見えてきます.サーバ・パソコンなどの汎用機はもとより,自動車や工作機械

なども,機械としてのハードウェア自体が進化を続ける中,それを管理・制御

する機能は,ほとんどがソフトウェアにより実現されています.スマートフォ

ンなどは,携帯電話にあった機械式のボタンは既になく,その機能はタッチパ

ネルを介してソフトウェアで実現されています.この傾向は,ハードウェアの

第 1 章 ソフトウェアと設計

第 1章 ソフトウェアと設計

2 3

1.2 ソフトウェア設計の特徴

 このように作ろうとするソフトウェアについてのすべての情報,つまり,そ

のソフトウェアを作るために必要な情報,使うために必要な情報を生み出して

決定していくのが設計です.

1.2 ソフトウェア設計の特徴 設計という視点で見たときに,ソフトウェアにはハードウェアにない特徴が

いくつかあると言われることがあります.ここでは,代表的なものを 3つあげ

ます.

 第 1に,ソフトウェア設計によって出来上がったものが直接目に見えないこ

とです.例えば,家電製品や工作機械など,様々な機器を作る現場では,機械

設計者,電気・電子設計者,ソフトウェア設計者,通称,メカ屋・エレキ屋・

ソフト屋と呼ばれる設計者が共同で開発を行うことが一般的です.設計対象物

を構造と振舞いに分けたとすると,メカ屋は,構造も振舞いも目で見て,手で

触って確認することができます.エレキ屋は,構造は目や手で確認することが

できるものもありますが,振舞いは見て確かめることが難しくなり,測定器を

通してそれを確かめることになります.ソフト屋に至っては,振舞いはもとよ

り構造さえ見ることが困難です.これは,人間が設計という行為を行う際にか

なりの障壁になるのではないかと考える人もいます.

 第 2に,ソフトウェアにハードウェアのような保守作業はないということで

す.ソフトウェアはハードウェアと違って物理的な劣化がありません.バイナ

リコードとして作られたものは,それを動作させるハードウェアさえあれば,

何十年,何百年でも変わることなく利用することができます.そのため,消耗

という考え方はありませんし,保守部品という考え方もありません.保守は必

要ないと考えて,開発が一段落すると,開発部隊を極端に縮小したり,アウト

ソーシングしたりする経営者もあるくらいです.

 第 3に,ソフトウェア設計者は論理を扱うということです.ハードウェア設

計者は,自然法則としての物理に制約されています.ところが,ソフトウェア

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

量産コストを下げ,ソフトウェアの柔軟性という特徴を生かすものづくりと言

われています.この考え方は,経済的にも顧客価値の観点からも,市場に広く

受け入れられて今後さらに拡大していくと考えられます.さらに,インターネ

ットを介してものとサービスが結びつき,環境や人々の生活に深く入り込んで

くることが想定される現在では,ソフトウェアはものづくりのみならず,サー

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

 このようなソフトウェアを作るにはどうしたらよいのでしょう.また,これ

までにないソフトウェアを作り出していくためにはどうしたらよいのでしょう.

 「ソフトウェアを作る」といえば,プログラムを作成することだと考えてい

る人もいるかもしれません.また,インターネットで手に入るプログラムを集

めてくればよいと考えたり,思いつくままにプログラムを書けばよいと考えた

りしている人もいるかもしれません.しかし,それでは社会や利用者の要求を

満足し,本当に役に立つソフトウェアを作ることはできません.そういうソフ

トウェアを作るためには,ソフトウェアも機械と同様,ソフトウェアを構成す

るために必要な部品を考え出して作っていかなければなりません.ソフトウェ

アを作るためには,あらかじめ作ろうとするソフトウェアについてすべてのこ

とを頭の中で考えて決める「設計」という作業が必要なのです.

 設計では,どのようなソフトウェアを作ればよいのかという構想を立て,基

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

して,詳細なインターフェイス・データ構造・アルゴリズムなどすべてのこと

を決めていきます.その結果が設計書として仕上がります.ソフトウェアを作

るための具体的な情報をすべて作り出していくのです.まだ実物になってはい

ませんが,頭の中や設計書の中でソフトウェアができあがるわけです.この過

程で,そのソフトウェアが本当に動くのか,当初の要求を満足しているのか,

安全性に問題はないのか,製作は可能なのかなどを検討し,設計をやり直し,

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

り直して最終的な情報ができあがります.これを実際にプログラムとして製作

して,実物のソフトウェアができあがるわけです.

第 1章 ソフトウェアと設計

4 5

1.3 設計者に求められる基本視点

れば,設計対象物の価値を維持していくという観点では,ハードウェアとソフ

トウェアは同じ制約を受けていると言えます.そして,このソフトウェア流の

保守を続けていけるようにするためには,保守性ということで,当初から設計

を工夫しておく必要があります.これもまたハードウェアと同じ制約を受けて

いると考えられます.

 第 3の特徴については,物理と論理という設計の理(ことわり)のうち,ど

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

の特徴を示している,と筆者は考えています.機械の設計が物理だけでできる

わけではありません.例えば,力をどの部品にどのように伝達させていくのか

という設計者の意図を論理と呼ぶことにすると,形状と寸法という物理的特性

を左右する要因を決定することで,その論理を実現しているのです.一方,ソ

フトウェア設計では,どの部品にどのようなデータを入力し,どのような処理

をさせて,結果を出力させるのかという設計者の意図,すなわち論理を,イン

ターフェイスとプログラムという論理的特性を左右する要因を決定することで

実現しているのです.このとき,ハードウェアの物理的特性,例えば CPU性

能やメモリ量などは設計の制約条件と見なされます.

 このように,設計対象物をハードウェア・ソフトウェアという見かけの特徴

で捉えるのではなく,設計という思考の働きとして捉えることで,ハードウェ

ア設計もソフトウェア設計も上位概念に登れば同じように議論できる,という

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

に置いて,ソフトウェア設計の様々なものの見方・考え方を見ていきます.

1.3 設計者に求められる基本視点 ソフトウェアは本来,ハードウェアと組み合わさってシステムとして動作し

ます.そのため,設計者はシステムが全体としてどのような目的で,どのよう

に動作するべきなのかを十分理解しておく必要があります.ここでは,これか

ら設計について学んでいくにあたって,システム全体を俯瞰するために設計者

が持つべき視点について説明します.

る論理に基づいて制御します.ここには遍く働く自然法則はなく,法則と同じ

役割を果たす規則を自ら決めなくてはならないということです.ソフトウェア

でアーキテクチャといわれる設計思想や設計方針がことのほか重要視されるの

はそのためです.ソフトウェア設計には規則作りが非常に重要な役割を果たし

ます.

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

確かに表面的にはその通りなのですが,筆者は少し違った見方をしています.

 第 1の特徴は設計者が受ける制約について述べたものです.設計は,実際に

ものを作り出す前に行う行為です.機械の設計であっても,世の中で初めて作

り出すものにはまだ実体がありません.確かに,ソフトウェアには製造された

ものが目に見えないという特徴があります.しかし,作ろうとしているものに

対して必要な情報をすべて決めるという設計の定義に照らせば,ハードウェア

もソフトウェアも違いはありません.また,要求機能を定義し,機能からそれ

を実現する機構・構造を作り出していくという設計の思考過程そのものも何ら

変わることがありません.それだけでなく,設計に用いる概念,例えば,機械

の場合には,形状や寸法,材料や加工法といった概念も,上位概念に登って見

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

言語やプログラミングに相当するということも分かってきます.本書では,上

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

各所に取り入れて,設計をより深く理解していきます.

 第 2の特徴はソフトウェアがハードウェアのように物理的に劣化しないこと

を述べています.現在のようにハードウェアの進歩が早い場合,ソフトウェア

は10年使うが,ハードウェアは3年で変更するなどということがよくあります.

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

ります.そのため,ソフトウェアそのものは変わらなくても,世の中の要求や

利用者の方が変化します.ソフトウェアには常にそれに対応するための保守,

つまり消耗品交換という意味での保守ではなく,正確には機能追加という意味

での保守が不可欠なのです.これを“ソフトウェア流の保守”と呼ぶことにす

第 1章 ソフトウェアと設計

6

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

 ここでは,自動車や工作機械などの機械システム,企業の情報システム,電

力,交通システムなどの社会基盤システムなど,ハードウェアとソフトウェア

を組み合わせ,それを体系的に人が利用できるようにしたものをシステムと呼

びます.

 システムは機械や電気的な装置などハードウェア中心でできていた時代から,

それらのハードウェアをコンピュータおよびソフトウェアを使って制御する,

いわゆる組込みシステムを中心としたシステムへと変化してきています.そし

て一方で,企業情報システムやインターネットに代表される情報処理・伝達の

ためのシステムがそれらと組み合わされ,社会の様々な基盤システムをさらに

高度な形に変えていこうとしています.

 筆者は,多数のプロジェクトに参画し,初級設計者から上級設計者,上級企

画者を経験していく中で,構造化設計やオブジェクト指向設計など,その時々

で最新と言われる設計方法論に接してきました.確かにシステムやソフトウェ

ア開発の方法論は時代とともに進化してきていますが,システム設計者が考慮

すべき概念や考え方,システムを見る視点には普遍的なものが存在します.本

節ではそれを中心にシステム設計の基本視点について述べます.

 まず,共通するシステム設計の基本視点を図 1.1に示します.

 実際に設計を進めていく際には,決定によって次第に明らかになっていくシ

ステムの全体像を頭の中に置きつつ,そのシステムの内外で起きる現象を頭の

中で想像しながら,さらに決定を繰り返していくことが重要となります.つま

り,決める側の視点で作り出したものを,見る側の視点で評価しながら設計を

進めていくわけです.このとき必要なシステムや現象をとらえる視点を図 1.2

に示します.

 システムやそこで起きる現象を捉えるには,システムを構成している要素の

全体構造や相互関係を考えて全体像をマクロに考える必要があります.そして,

それとは対照的に,個々の構成要素でプロセッサ,メモリやストレージなどの

記憶域,通信路などの挙動をミクロに捉えることを同時に行う必要があります.