川村渇真の「知性の泉」

設計とは何かを正しく理解する


決定理由を説明できるのが良い設計

 良い仕様書に仕上げるためには、何が必要だろうか。もちろん書き方も重要だが、書いてある内容の方がより重要である。書くのは設計した内容なので、設計の質を高めることこそ、良い仕様書を作るために一番重要な条件となる。
 良い設計を考える前に、仕様書の書き方に少しだけ触れておこう。仕様書はレビューなどに利用するので、設計が悪かったときは、悪いことがハッキリと分かってしまう方がよい。つまり、書き方で重要なのは、書いた内容(つまり設計した内容)の良し悪しが明確に出ることだ。逆に、設計した内容が悪くても、中身が良さそうに見えるとか、見栄えで良い印象と与えるのは、最悪の書き方である。
 設計の話に戻ろう。良い設計とは、どのようなものであろうか。どんな条件が整っていれば、良い設計になるのだろうか。それを求めるには、設計と呼べない内容と比べればよい。該当するのは、何となく決めてしまう場合だ。こういうやり方をすると、どんな点を考慮したのか、どうしてそう決めたのか、なぜそれを選んだのかなど、まったく説明できない。
 これと逆の状態こそ、良い設計である。どんな点を考慮したのか、どうしてそんな仕様に決めたのか、なぜその実現方法を選んだのかなどを、第三者に説明できなければならない。大まかな機能だけでなく、細かな機能まで含めてだ。
 当然ながら、説明しただけでは不十分で、説明内容が説得力を持つ必要もある。そのためには、検討の内容が論理的でなかったり、大事な要素を検討し忘れていたらダメだ。また、実現方法などを決める際には、どこからか1つだけ出てきたような形ではなく、実現可能な複数の候補を評価して、最良のものを選ばなければならない。
 実際に設計するとき、こういった点を検討していれば、説明に困ることはない。検討した内容をそのまま伝えるだけで、説得力のある内容に仕上がる。設計の質が高ければ、説明の説得力が増すのは当然のことだ。
 もちろん、明確に答えが出せない設計対象もある。しかし、そんな場合でも、何らかの判断材料を仕入れて、可能な選択枝の中から良いものを選んでいるはずだ。そうした検討過程を説明できれば、悪いと評価されない程度の説得力を持たせられる。

検討した過程や範囲を示すことも重要

 設計内容の良し悪しを見極めようと、設計者以外によるレビューを実施する。それが有効に働くためには、レビュー担当者が設計内容を確認できる形で、仕様書を書かなければならない。それには何が必要だろうか。最も有効なのは、設計者が検討した過程を、レビュー担当者に見せることだ。つまり、検討の過程である設計の過程まで含めて、仕様書に記述すればよい。
 どんな分野の設計でも、一気に結論を出すわけではない。設計の目的を明確に定義したり、対象の問題点や原因を洗い出したり、必要な機能を規定したり、その機能を実現する方法を選んだり、期待した効果を発揮するか調べたりという具合に、複数の工程を含む。こうした検討の流れも含めて説明すれば、設計内容が良いかどうか評価できる。
 もう1つ重要なのは、検討した範囲である。システム開発であれば、信頼性の確保、使い勝手の向上、問題領域の例外処理への対処、エラー発生時の処理、現実の運用への対応、将来の変更への配慮など、いろいろな点を考慮するだろう。どんな面を考慮したのか、それぞれの面で具体的に何を検討したのか、明らかにしなければならない。
 ここまで挙げた点を満たすように設計を進めれば、得られた設計内容の質は確実に向上する。また、レビューの質も上がり、ダメな箇所は指摘されて直させられ、設計の質がさらに向上する。以上の話を整理すると、良い設計の条件が得られる。それは次のとおりだ。

良い設計に必要な条件
・対象となる全内容に関して、検討を論理的に進める
・検討全体を複数の工程に分け、工程間で整合性を保つ
  (設計した内容が、設計の目的に適合している点も含めて)
・検討すべき範囲を洗い出し、その全部をキチンと検討する
・可能な方法を挙げて比較して、最良の解を選ぶ
・採用や選択などの判断で、その理由を明確に示せる
  (無視や不採用の理由も明確にする)
・以上の内容を記録として残す

 これらの条件を満たした作業こそが、設計したと胸を張って言えるレベルである。そうではなく、何となく決めたような結果では、残念ながら設計したとは言えない。もし満たしてないなら、満たすように努力したほうがよい。

検討の道具を採用し、その記述を仕様書とする

 実際の作業において、これらの条件を満たすためには、検討内容を上手に整理する道具が必要となる。設計を複数の工程に分け、工程ごとの作成内容を分かりやすい形でまとめる。そのまとめ方を規定したものが道具だ。箇条書き、一覧表形式、図形式など、内容にあった表現方法を選び、どんな内容を盛り込むのか規定する。
 こうした道具を用いて検討内容を作成すると、全体像が見通せるようになる。また、工程間の整合性も検査でき、論理的に正しくない部分を発見しやすい。大事な点が漏れているのも、見付けやすい。設計した内容が把握できるようになるからだ。
 道具を用いて書いた内容は、検討の過程を的確に表しているため、レビューにも適している。それなら、そのままレビューに使い、それを正式な仕様書にしてしまえばよい。つまり、道具として採用した書式を、仕様書の書式にするわけだ。
 検討の道具を用いて書いた内容が仕様書として使えるのは、よく考えると当然の結果である。検討の道具は、検討内容が正しいかどうか、設計者が自分で確認したり、検討内容を整理するために作られている。そのおかげで、間違った箇所を発見できたり、選択枝の中から最良のものを選ぶことができる。
 こうして書かれた設計内容を見る、レビュー担当者の視点も設計者と変わりない。自分が設計する場合と同様に、内容が適切なのか調べて、悪い点を指摘する。設計者もレビュー担当者も、検討している内容が適切かどうかを見るわけで、その点が一致しているために、検討の道具を用いて書いた内容が、仕様書として適する結果となる。
 こうした形で仕様書をまとめると、レビューの質が上がるだけでなく、設計者以外の人がシステムを理解するのも容易になる。システムのテスト内容を正しく作りやすいし、システムを改良するときも余計な苦労を生じさせない。
 ここまでの話で分かるように、良い仕様書を書こうと思うなら、設計の質を高める必要がある。もし達成できれば、検討した過程や範囲まで提示して説明できるし、「設計しました」と胸を張って言える。

設計できる領域を増やすのが、質の高いスキルアップ

 余談になってしまうが、ここで技術者のスキルアップを考えてみよう。優秀な技術者を目指すのなら、いろいろな部分で設計したと言えるレベルに達することが、大きな目標となる。底まで達すれば、自信を持って仕事ができるからだ。
 どんな技術者でも、すべての面で優秀なわけではない。ある領域では設計したと言えるレベルに達しているが、達してない領域も数多くある。だからこそ、どんなに優秀な人でも、いつもスキルアップを続け、様々な能力を向上させようと努力している。
 最初から一気に、設計したと言えるレベルになれるわけではない。だんだんと能力を高め、後の方でそのレベルに達する。少し長い目で見た目標とするのが、現実的な捉え方とであろう。そして、1つの領域で達したなら、設計できる領域を少しずつ増やすことが、次の目標となる。こうした方法が、質の高いスキルアップを実現する。
 設計というのは、物事の的確な検討が基礎になる。1つの領域で、設計したと言えるレベルに達したら、検討方法が身に付いたことを意味する。検討方法自体は、領域に関係なく共通なので、別な領域で設計レベルを目指すとき、その部分は新たに習得しなくて済む。2つ目以降の領域では、最初よりも容易に、設計したと言えるレベルへ達するはずだ。
 このように、優秀な設計者は、物事を検討する高い能力を備えている。だからこそ、様々な領域で適切な検討結果を導き出せる。こうした姿を、技術者の最終的な目標に置き、長期的に努力を続けるのも、良い生き方ではないだろうか。

(2001年7月28日)


下の飾り