誰にも見えないブログ

雑なメモ。まとまってない文章等

メイヤー オブジェクト指向入門読書ノート2

メイヤー本を読む続き

オブジェクト指向入門 第2版 原則・コンセプト (IT Architect’Archive クラシックモダン・コンピューティング)

オブジェクト指向入門 第2版 原則・コンセプト (IT Architect’Archive クラシックモダン・コンピューティング)

  • 1H実施

yuyubu-sub.hateblo.jp

p10「1.2.6効率性」からp18「ドキュメントについて」まで読んだ。 次回はp19「1.2.13トレードオフ」から

第一章ソフトウェアの品質

1.1外的品質要因と内的品質要因

1.2 外的品質要因

1.2.6 効率性(efficiency)

定義

効率性とは、処理時間、内部記憶および外部記憶所の空間、通信装置で使用する帯域幅などのハードウェア資源をできる限り必要しないソフトウェアシステムの能力である

  • ソフトウェア業界での似た概念「性能」
  • 開発者の態度は二分化する

    • 最適化に多大な労力を費やす 
    • 効率軽視。未来のスペックアップしたコンピュータに期待(ムーアの法則的なアレ)
  • 正しくないならば、速さを気にするな

  • 極端な最適化により特殊化されたソフトウェアは度々変更や再利用に不向きなものになる
  • ハードウェアの能力の進化は著しい(疑問:これは本書出版から数十年たった今も有効な考え方なのか?)

  • 性能に対して無関心でいることはそれなりの覚悟が必要。

    • 最終的なシステムがおそすぎたり大きすぎたりしてはいけない
  • リアルタイムシステム
    • 効率性が正確性(仕様)の一部となるものもある
  • 本書は効率性についてはあまり入り込まない
  • オブジェクト指向的と関連する効率性の話題は扱う
    • オブジェクト指向的計算処理のための管理手法
      • 例:
        • ガーベージコレクション
        • 動的束縛
        • 総称性
        • 多重継承

効率性は品質要因の一つに過ぎない。効率性によって我々の光学的生活が支配されるべきではない

※当たり前だが設計の本であり実装の本ではないため、あまりアルゴリズムのパフォーマンスなどには深入りしないようだ

1.2.7 可搬性(portability)

定義

可搬性とは多様なハードウェア及びソフトウェア環境へのソフトウェア製品の移植しやすさである。

  • プラットフォーム(ハードウェア + ソフトウェアマシン)

  • プラットフォーム間の非互換性の多くは正当化出来ない

    • エンジニアリングの大きな課題

1.2.8 使いやすさ(end of use)

定義

使いやすさとは、経験も資格も異なる人々がいかに容易にソフトウェア製品の利用法を学習し、問題解決に応用できるかである。これにはインストールや、操作、監視の容易さも含まれる。

  • 多種多様なユーザーのレベルに対応すること

    • 上級レベルユーザーの仕事を邪魔しない作りであること
    • 入門レベルユーザーのに対して詳細な指示と説明を与えること
  • 「使いやすさ」はオブジェクト指向と相性が良い

  • 成功したシステムは最初に想定したユーザーよりも広い範囲のユーザーに利用される

    • 例:当初の想定より世界的に使われるようになったもの
      • Fortran:IBM 704ユーザー(ごく一部の科学者等)が初期のターゲット
      • UNIX:ベル研内部での利用が初期の目的
  • ユーザーについてあまり多くの前提を置かないことが重要

    • 最終的に誰がユーザーになるかわからないため

ユーザーインターフェース設計の原則:そのユーザーのことを知っている気になるな。あなたは知らない。byハンセン(誰?)

1.2.9 機能性(functionality)

定義

機能性とは、そのシステムが提供できるサービスの範囲である。

  • 機能主義

    • より多くの機能を求める圧力が存在する
      • 競合製品との機能比較
      • ユーザーからの要望
  • 機能主義の問題点

    • 1.機能追加により使いやすさ&一貫性が失われる
      • ただし余計に見える機能は他のユーザーにとっては必要な可能性があることに注意
      • 対処法
        • 機能には一貫性を持たせ、すべての要素がある共通の性質を持つ一つの塊になるようにする
    • 2.機能性が他の品質要因より優先されてしまう
      • Osmodの推奨対処法
        • オブジェクト指向による品質向上
          • 信頼性と拡張性をその他の品質要素より優先する
            • 満たされない場合は新しい機能を拒否する
              • 早期リリースの要望は、低品質な多機能より高品質な少数機能で答えるほうが良い
        • クラスタモデル(cluster model)と相性が良い

1.2.10 適時性(timeliness)

定義

適時性とはユーザが必要としているとき、または、必要とする前にソフトウェアシステムをリリースできること

  • ソフトウェア産業に対する圧力の一つ
  • 機を逃せばターゲットを失う
    • 変化のペースが他の産業より速い

1.2.11 その他の品質要因

これまでに説明したもの以外で ユーザー、購入者、開発委託者などに影響を与える要因

  • 実証性(verifiability)テストしやすさ
  • 統合性(integrity)認証されていないアクセスや修正からソフトウェアを守る
  • 修復性(repairability)血管の修復を助ける
  • 経済性(economy)安い

1.2.12 ドキュメントについて

  • ドキュメントは独立した品質要素ではない
  • ドキュメントは上記品質要素の結果である
  • ドキュメントの分類

    • 外部向けドキュメント:ユーザー向け
    • 内部向けドキュメント:保守、開発者向け
    • モジュールインターフェースドキュメント:ライブラリユーザー向け
      • 中身の実装を理解せずにモジュールの機能を理解することを助ける
  • 上記すべての3ドキュメントでソフトウェア自体をドキュメント化することが望まれる

    • オンラインヘルプ機能
    • 明確さと構造を備えた実装言語(疑問:宣言的に処理を書ける言語のことか?)
    • 情報隠蔽を適用し、分離したインターフェースからドキュメントを自動生成する(疑問javadoc的なツールのことか)
  • オブジェクト指向により従来のドキュメントの役割を軽減する

    • ドキュメントをすべてなくすことは期待しない