段階的に詳細に -ソフトウエア設計シリーズ「守」②

自動車のコックピットの図 脳の和
この記事は約8分で読めます。

「設計する」とは、人が「考える行為」の一種だ。
優れたソフトウエア設計技術者は、トップダウン思考で段階的に分解しながら安定な構造を設計し、画期的なシステムを作る。
本シリーズは設計と文書化をテーマとし、本稿では大規模で複雑なシステムを設計するノウハウの基礎を説明する。

ソフトウエア設計シリーズ「守」② 段階的に詳細に 松浦公政 2023年
対象読者
段階的詳細化に興味がある方
システム思考に興味がある方
トップダウン思考で進む「自動車システム」開発の設計技術に興味があるIT技術者

記事の音声解説付き(下のプレイボタンで解説開始)

段階的に詳細に

作りたいモノ(アウトプット)の明確なイメージを意識し、そのイメージを実現できそうな「いくつかの部品に分解」して考えてみる。

そして ⇩

分解した部品のひとつに着目し、その部品を実現する、さらに下位の小さな部品を考える。

これを繰り返して ⇩

分解を重ねるうちに、考える部品の規模は段階的に小さく、単純になって行く。
十分に単純になれば、その部品の作り方は容易にイメージできる。

この一連のプロセスの名前は ⇩

この思考様式を「トップダウン思考」と呼び、徐々に小さくする過程を「段階的詳細化」と呼ぶ。
トップダウン思考の利点 大きい部品より、小さい部品の方が「単純」。
単純なので、機能を実現するメカニズムを考えやすい。
複雑な製品でも、繰り返し分解すると似たような単純部品の集合体。
小さい部品(例:ねじ・板・スイッチ)は、多様な製品で利用できる。

トップダウン思考は副産物を生む ⇩

小さくて使い勝手が良い部品は、それ自身が汎用的な商品となる。

トップダウン思考は価値を生む ⇩

使いやすい部品ほど様々な製品で利用されるので、「使い勝手」は部品自身の製品価値を決める。

部品の繋げ方

複雑なメカニズムを持つ製品(自動車やコンピュータなど)は、基本的に出来上がったパーツ(部品)を組み上げて作る。

そのために ⇩

部品同士を繋ぐには、部品が「接点」を持つ必要がある。
  部品の接点 部品は「接点」を通じて結合し繋がる。
「接点」には様々な形状があり得る。

ただし ⇩

部品を繋ぐ際に、接点の「形状」がバラバラだと、部品同士がピッタリ繋がらない。

だから ⇩

接点をピッタリ繋ぐために、形状のガイドラインとして、世の中では標準的な「規格」が設けられている。
  たとえば ねじ穴の口径は決まったサイズがあり、同じ規格ならどのメーカのねじでもハメられる。
クレジットカードは決まったサイズがあり、カード読取機はどの会社のカードもハメられる。
やや複雑な部品が「接点」で繋がると、接点を通じて情報をやり取りする目的で約束事も決められる。

「接点の約束事」の名前は ⇩

情報をやり取りする部品同士を繋ぐ接点を「インターフェース」、約束事を「プロトコル」と呼ぶ。
  インターフェースには「ハードウエア同士」「ソフトウエア同士」など種類が幅広い。
プロトコルとは、電話での最初に「もしもし」、最後に「またね」に相当するルール。

インターフェースを定める利点は ⇩

インターフェースは、やり取りするデータの形式を標準化する。
  たとえば タブレットPCと無線型マウスとは、通信規格があり(広く普及した規格はブルートゥースなど)、同じ規格ならどのメーカのマウスでもタブレットPCで使える。
コンピュータの表示装置(部品)とファイル(部品)は、規格(テキストファイル、動画ファイルなど)があり、コンピュータは規格に応じた表示方法でファイルを表示する。

現代の設計の基本は「システム思考」

現代の工業社会では、トップダウン思考で必要な部品を洗い出し、できるだけ洗い出した部品への要求を満たす「出来合いの部品」同士を繋ぎ合わせて製品を開発する。

とはいっても ⇩

要求を満たす出来合いの部品がない箇所があれば、新たに部品を開発する。

だが ⇩

新部品の開発は、ヒト・時間・カネが大量に必要なので、製品コスト削減のためになるべく少なくする。

だから ⇩

製品開発ではどのように既存部品を繋げれば、期待したように上位の機能・性能を発揮するかが重要なテーマになる。

このため ⇩

現代工業社会での「設計」とは、すでにある部品をいかに効果的に組み合わせ、連携や協働させるかを「考える」行為が中心になる。

このように設計するために ⇩

部品間の関係を具体化して製品の全体像をイメージする脳の使い方を「システム思考」と呼ぶ。

たいていの製造企業が使っている方法論 製造業の視点で見ると
命題 目的 結論
複雑なモノを作る手法(技術) 単純な部品に分割して、部品単体では複雑さを緩和させる。 設計とは
分割した部品同士がスムースに組み付くように、 分割の仕方を考慮する技術。
単純な部品を組み合わせて総合的に複雑な機能・性能を発揮させる 。 壊れた部品だけを取り換えやすいように、

段階的に詳細して行く具体的なイメージ

あなたの勤務先が自動車業界に新規参入し、自動車を一から開発すると想定してみよう。
まず、自動車のどのメカニズム(仕組み)から考えようかと思い巡らすだけで、途方に暮れる。
あらためて自動車は大規模で複雑な高性能機械だと気づく。
  人間の脳は、小規模な単純部品のメカニズムだと比較的容易にイメージしたり考えたりできるが、複雑度が高いメカニズムを考え始めると手に負えず失敗しやすい。

まずは ⇩

自動車開発の第一歩は、「走る」「曲がる」「止まる」の基本機能に分割し、

  • 「走る」メカニズム  の設計
  • 「曲がる」メカニズム の設計
  • 「止まる」メカニズム の設計

に役割分担することから始まる。
そして各機能別に設計チームを設け、並行に設計して開発期間を短縮する。

役割分担に応じて、システム設計も同様に機能分割する ⇩

自動車の機能構成を紐解き、ツリー状に表現して行く。

1層 2層
自動車のメカニズムの設計
  ├ 走るメカニズムの設計
├ 曲がるメカニズムの設計
└ 止まるメカニズムの設計

考える要素が多いと、自動車のメカニズムの設計は、細分化される。
たとえば「走るメカニズム」の機能は下図のように、より詳細な機能に分解する。

1層 2層
3層
自動車のメカニズムの設計
  走るメカニズムの設計
 







エネルギーを生み出す
|    メカニズムの設計
エネルギーを地面に
|    伝えるメカニズムの設計
エネルギー源の燃料を補給
|    するメカニズムの設計
  曲がるメカニズムの設計
止まるメカニズムの設計

例として「エネルギーを生み出すメカニズム」の機能を詳細に分解して行く。

1層 2層
3層

自動車のメカニズムの設計
  走るメカニズムの設計
 

エネルギーを生み出す
|    メカニズムの設計

 











運動エネルギーを生成する
|    メカニズムの設計
運動エネルギーを回転エネルギー
|    変換するメカニズムの設計


 





エネルギーを地面に伝える
|    メカニズムの設計
エネルギー源の燃料を補給
|    するメカニズムの設計


  曲がるメカニズムの設計
止まるメカニズムの設計

段階的詳細化の例となるエンジン図

1層 2層
3層

・・・

n層

自動車のメカニズムの設計
  走るメカニズムの設計
 

エネルギーを生み出す
|    メカニズムの設計

 







運動エネルギーを生成する
|    メカニズムの設計
運動エネルギーを回転エネルギー
|    へ変換するメカニズムの設計

  ・・・
    : 
 


 
エンジンECUの設計
 








    ├ アクセル踏込量を測る
|     メカニズムの設計

 





 
 





エネルギーを地面に伝える
|    メカニズムの設計
エネルギー源の燃料を補給
|    するメカニズムの設計


  曲がるメカニズムの設計
止まるメカニズムの設計

自動車のような大規模で複雑な機械は、もしかすると10階層以上も詳細化して、ようやく人間の脳が考えられる複雑さの部品規模になるのかもしれない。

考えやすさを決める要因

自動車のメカニズムを設計する例をよくみると、段階的詳細化の過程で現れる「考える対象」の大きさと「考えやすさ」は、次の関係に整理できる。

考える対象 解像度 具体性 視野 粒度 考えやすさ
「自動車が動くメカニズム」 広い 考えにくい
「走るメカニズム」
「運動エネルギーを生み出すメカニズム」
「燃料を噴射するメカニズム」
「アクセルの踏込み量を測るメカニズム」 狭い 考えやすい

このように ⇩

単純な部品に分割すると、考える範囲が狭まって思考する対象の解像度が高まる(=細かな点に注意が向けられる)。

解像度が高まると ⇩

細かな点に注意が向く結果、その部品のメカニズムを具体的に考えやすくなる。
  自動車が動くメカニズム(抽象的)より、アクセルの踏込み量を測るメカニズム(具体的)の方が説明しやすい。

メカニズムが具体化すると ⇩

そのメカニズムを実現する部品をどう設計すればよいか(=機能・構造・性能)を具体的に考えやすくなる。

【参考】山口拓郎『言語化大全』

まとめ

小さな部品への分割を繰り返して「具体性」を徐々に増して行く過程を「段階的詳細化」と呼ぶ。
  ガソリンで動く自動車の部品数は2~3万点(【出展】日本自動車部品工業会「映像で見る自動車部品~ Auto Parts Visualized ~」)で、もしかすると10段階程度の詳細化の過程を踏んでいる。
たくさん部品を組み合わせて作る複雑な製品の出来栄え(品質)は、ヒトの脳が考えやすい粒度・具体性まで「分割設計」する上流工程の設計者の技術力で決まる。

次回は、最も詳細化した工程で使う「プログラミング言語」を解説します
ソフトウエア設計シリーズの目次はこちら

この記事を書いた人
公政

ヒトの行動原理を、書籍や番組で得た「知恵」「知見」を基に言語化します。
ヒトの行動原理に、ソフトウエア開発畑での設計の仕事で蓄積した知見を組み合わせ、独自視点で編成し言語化した『知恵』を発信しています。
ご興味あれば他の記事もご覧ください。

公政をフォローする
脳の和技の和

コメント