/ 最近 .rdf 追記 編集 設定 本棚

脳log[20091214] まだまだ 5章の途中 > [単行本(ソフトカバー)] ジョン・ラコス【新装版 大規模C++ソフトウェアデザイン (ADDISON-WESLEY PROFESSIONAL COMPUTI) (ADDISON‐WESLEY PROFESSIONAL COMPUTING SERIES)】 ピアソンエデュケーション



2009年12月14日 (月)

最終更新: 2009-12-27T19:28+0900

[] まだまだ 5章の途中 > [単行本(ソフトカバー)] ジョン・ラコス【新装版 大規模C++ソフトウェアデザイン (ADDISON-WESLEY PROFESSIONAL COMPUTI) (ADDISON‐WESLEY PROFESSIONAL COMPUTING SERIES)】 ピアソンエデュケーション

頭に残っていることの羅列でも……

自分が少し前に励んでいた「ヘッダの減量」はコンパイル時依存性を減らす行為。そのヘッダをインクルードする別のコンポーネント(定義は省略。実装単位。.hファイルと .cファイルのペアと思っていて大方は間違いではない)のコンパイルコストを減らすことにはなるが、リンクコストは減らない。

SakuraEditorの場合、リンクは sakuraW.exeを作成する一回だけしか行われないからリンクのコストは度外視できた。でもコンポーネントごとにテストを実行する場合、実行可能なテストを作成するにはコンポーネントのコンパイルに加えてリンクが必要で、そのコストがのしかかってくる。

CCD(Cumulative Component Dependency)という指標。コンポーネントごとのリンクコストの総和を示唆する値。N個のコンポーネントがあり、どの一つのコンポーネントも他のすべてに依存しているという最悪の場合 CCD(N) = Nの二乗。コンポーネントの依存関係が完全二分木*で表せるときは CCD(N) = N・lb(N)。依存がなくコンポーネントがフラットな階層を形成している場合 CCD(N) = N。規模を大きくした(コンポーネント数Nを増やした)ときに CCDが増加するオーダーの違いに注目。

著者の一貫した主張。巡回依存をなくせ。第2部 5.1 昇位(escalation)、5.2 降位(demotion)はその目的で使えるテクニック。

引用。「通常、初期のデザインは慎重に計画され、たいていレベル化可能である。次第にクライアントからの予期しなかった要求のため、検討が十分とはいえない、不要な巡回依存性を招くような機能強化が行われる。」(170ページ「5.1.1 機能強化」から) 言い訳に釘をさされた感じ。

話はとんで、DFT(design for testability)。「ICチップの DFTの一形態である SCANは、テスト目的のためだけに提供される余分なピンと追加の内部電子回路を使って実現される」「採用当初、DFTは品質改善に非常に役立ったが、ICデザイナーはこうした追加のデザイン用件を評価しなかった。これが余計な考慮事項となるのみならず、デザインが大きくなり製造コストを一層高いものにしたからだ。多くのデザイナーが欲求不満を抱いた、というのもこの規律の厳しいアプローチを創造性に対する侵害と考えたからだ。」「今日、DFTは IC業界では標準である。有能なハードウェアエンジニアでテスト容易性問題に直接取り組まずに複雑なチップをデザインしようと考えるものはいない。それに比べ、大規模ソフトウェアシステムの機能性は最大の集積回路の場合よりもはるかに規模が大きく複雑になりかねない。驚くべきことに、確実にソフトウェアのテストを容易にする計画が整っていないのがしばしばだ。ソフトウェアのテスト容易性を強要する試みは、10年前の IC業界と同じ欲求不満にたびたび見舞われている。技術的な問題の解決に向けて別の面で大きな障害となっているのは、往々にしてテクノロジそのものよりむしろ人である。」(すべて 135ページから。強調は自分) これは 1996年に書籍化された文章の翻訳だから 10年はもう過ぎている。はてさてソフトウェア業界の現状は?(知らない)

* 参考「[[二分木 - Wikipedia|http://ja.wikipedia.org/wiki/%E4%BA%8C%E5%88%86%E6%9C%A8]]」

 参考「[[ISOに記されている対数関数の表記法 - あらきけいすけの雑記帳|http://d.hatena.ne.jp/arakik10/20090724/p1]]」