川村渇真の「知性の泉」

どの要素の設計でも科学的な手法を用いる


システムの要素ごとに適切な設計手法がある

 ソフトウェアを中心としたシステム開発の多くでは、設計対象となる様々な要素が含まれている。すべてのシステムに含まれる要素としては、システム全体の構造設計、エラー処理設計などがある。他にもいろいろな要素があり、主なものを挙げただけでも以下のように多い。

システム開発で用いる主な要素設計
・システム全体の構成設計
・ユーザーとの対話設計
・複数画面の構成設計
・画面レイアウト設計
・問題領域オブジェクト設計
・実装クラス設計
・プロセス設計
・プロセス間インターフェース設計
・フォーマット設計
・項目コード設計
・エラー処理設計
・信頼性設計
・運用設計
・処理性能設計
・プロトコル設計

 以上のような要素設計では、対象となる要素ごとに、科学的に設計するための手順や考慮点が存在する。質の高い設計結果を得るための方法だ。それを知らないで設計すると、大切な点を考慮してないなど、不十分な設計結果になりやすい。この差はかなり大きく、開発者の能力評価にも影響を与える。
 要素ごとの設計手法を知るメリットは、設計結果の質の向上だけではない。手順や考慮点が決まっているので、より安心しながら作業を進められる。悩みの中心は、システムが扱う問題になるので、より本質的な部分に労力を集中できる。
 こうして各要素を設計し、その結果が集まったものがシステム設計になる。実際のシステム設計では、より大きな要素から順に設計していき、小さな要素の設計へと段階的に作業する。最初はシステム全体の構成設計で、次にユーザーとの対話設計などが続く。相互に関係する要素もあるため、ときどき戻って整合性を保つ作業も含まれる。最後のほうで細かな要素の設計が終わり、全体での整合性が確認できれば、システム設計が終わることとなる。

どの設計手法にも手順と考慮点が含まれる

 設計手法の具体的な中身は要素ごとで異なるが、基本的な考え方は同じだ。どの要素の設計でも、基本的な作業手順と、設計における考慮点を含んでいる。他に、数値化可能なものは数値化して評価するとか、科学的に実施するための共通ルールも満たす。
 基本的な作業手順を設計手法で定めるのは、誰もが使えるように配慮したためだ。手順を示すことで、より多くの人が利用できるようになる。作業手順というのは、作業を単純に並べたものではなく、設計ミスを防止するとか、設計結果が良くなるように考えて決める。それにより、手順どおりに作業すれば失敗しにくい。
 設計の際の考慮点は、複数の視点があって、その視点ごとに分けて提供する。視点が異なると、一部に矛盾する考慮点も出てくる。たとえば、複雑なデータのフォーマットを設計する場合、素早くアクセスできるように設計する考慮点と、データのエラーが発見できるように設計する考慮点は、どうしても相容れない。どちらか片方を重視するしかなく、システム全体が求める方針に合わせて選ぶ。
 実際の設計では、すべての面で満足できる設計結果を得るのは難しい。使える時間は限られているし、人材や道具も十分なことのほうが少ない。重要な点だけは満たすように、妥協点を探す必要がある。どの要素の設計でも、挙げられた考慮点のうち、どれを重視するのか、逆にどれを軽視するのか、設計の方針を定めなければならない。
 重視する点を選ぶ基準となるのは、システム全体の設計方針である。設計方針として何を重視するのかを決め、それに合わせる形で各要素の設計方針を決める。そうしなければ、システム全体のバランスが崩れて、期待した機能や性能を満たせないなど、システムの質が低下しやすい。
 利用の際には、注意点がもう1つある。開発するシステムには様々なので、提示した考慮点が適用しづらいものも出てくるだろう。注意点の主旨をよく考え、適切にアレンジすることが求められる。どんなシステムでも少しずつ異なるので、最適な適用方法を考える癖を付けてほしい。
 設計手法とは直接関係ないが、設計の質を高めるためにはレビューが欠かせない。重要な要素に関しては必ず、それ以外の要素に関してもできるだけやったほうがよい。とくに、その要素の設計が始めての人に対しては、慣れている人がレビューするのは必須だ。設計の質が高まるだけでなく、設計する人の能力も向上する。

要素設計自体にシステム設計を適用して得られた結果

 本コーナーで紹介する要素ごとの設計手法は、自分のシステム開発経験をもとにしている。経験が不足する一部の要素に関しては、該当分野を調べて補った。どの要素でも、求められる点を深く分析し、どのように設計すればよいのかを考察して得た内容だ。つまり、各要素の設計手法を、システム設計して得た結果である。システム設計の対象には、設計手法自体もなり得るので、このようなことも可能なのだ。
 実は、システム設計の能力が高まると、いろいろなものが設計できるようになる。要素ごとの設計手法では作業手順を含んでいるが、作業手順の設計にもコツや注意点がある。その内容も、システム設計を適用すれば求められる。このように、設計が何重にも重なった結果として、要素ごとの設計手法が得られている。突き詰めれば突き詰めるほど、面白い分野なのだ。
 ここで少し、世間の状況に目を向けてみよう。要素ごとの科学的な設計手法は、非常に残念なことだが、ソフトウェア関連の雑誌や単行本に取り上げられる機会は非常に少ない。雑誌や単行本で取り上げられるのは、プログラミング関連の言語やコーディング方法と、OSやネットワークなどに関する細かな技術が中心だ。こんな現状なので、設計手法を知らずにシステムを設計している人が多くなってしまう。
 こんなに重要なことなのに、なぜ広く取り上げられないのであろうか。おそらくは、体系的なノウハウとして構築できる人が少ないことと、その種の内容に編集者が興味を持っていないことが原因だろう。きちんと設計するためには相当に重要な技術なのに。とても残念な状況だ。ともあれ、システム開発能力を向上させたい人は、読んで吸収してほしい。

 なお、どの要素の設計も、1ページの説明で終わるような内容ではない。書く側の都合から、段階的に詳しく説明を進める。まず最初の1ページで全体像を示し、それに加える形でページ数を増やしていく。また、開発技術が進歩すると、新しい要素を追加しなければならない。それも順番に増やしていこう。

(1999年9月13日)


下の飾り