Updated at: 2014-01-16

Software Enginnering

一般教養

用語 / 頭字語系


  • ACID 特性
    • トランザクション処理の信頼性を保証する 4 つの性質
  • CRUD
    • Create, Read, Update, Delete

法則系

  • KISS の原則
    • Keep it simple, stupid / シンプルに保てアホ
  • YAGNI
    • You ain't gonna need it / そんなの必要ないって(必要になるまでやるな)
  • DRY原則
    • Don't repeat yourself / 繰り返しを避けよ

  • 何かのときにすっと出したい、プログラミングに関する法則・原則一覧 - Qiita
    • デメテルの法則(最小知識の原則)
    • ヴィルトの法則(ソフトウェアはハードウェアが高速化するより速く低速化する)
      • ムーアの法則:ハードの性能 18 ヶ月 で 2 倍
      • ゲイツの法則:ソフトの速度 18 ヶ月 で半分
    • ブルックスの法則
      • 遅れているプロジェクトへの要員追加は、プロジェクトをさらに遅らせる
      • 9人の妊婦を集めても、1ヶ月で赤ちゃんを出産することはできない
    • コンウェイの法則(組織構造がシステム設計に影響を与える)
    • ホフスタッターの法則
      • 常に予測以上の時間がかかる(ホフスタッターの法則を計算に入れても)
    • 驚き最小の原則
      • どちらかで悩んだら、よりユーザやプログラマが驚かない方を選ぼう
    • ボーイスカウトの規則
      • 来たときよりも美しく
  • ハンロンの剃刀 - Wikipedia
    • 無能で十分説明されることに悪意を見出すな
    • 陰謀論より失敗論

  • アムダールの法則
    • あるプログラムの並列化による速度の向上は、プログラムの逐次処理部分によって制限される
    • (並列化できない部分の処理が n 時間かかるなら、全体をいくら並列化しても n 時間より速くはできない)

設計の指針

  • 設定より規約
    • 規約を設けることで設定やパラメータの指定を減らせる
    • もともとの意味は「開発者はシステムの慣例に従わない部分だけを指定する」
      • こうすれば柔軟性も損なわれない

SOLID原則

  • Single responsibility principle
    • 単一責任の原則
  • 開放/閉鎖原則
    • オープン・クローズドの原則 (OCP : Open-Closed Principle)
    • クラスは拡張に対しては open で、修正に対しては closed であるべき
    • 振る舞いを追加可能であり、振る舞いの追加で既存コードは影響を受けないということ
  • リスコフの置換原則
    • LSP : Liskov Substitution Principle
    • コード中である基本クラスが使われている場所は、そのどんな派生クラスでも置換可能であるべき
  • インターフェイス分離の原則(ISP)
  • Dependency inversion principle
    • 依存関係逆転の法則
    • 上位モジュールは下位モジュールに依存してはならない。どちらも抽象に依存すべき
      • 参照を抽象クラス / インタフェースで持つ(具象クラスを参照しない)
      • 具象クラスを継承しない
      • 基本クラスで実装済みのメソッドをオーバライドしない

参考

性質

  • 直行性
    • 機能ごとに独立性が高い(依存関係が小さい)こと
  • 参照透過性
    • 式(関数)の値が文脈によらず一意に定まること / 副作用を持たないこと
    • これがあるとテストしやすく、事故(バグ)が起こりにくい

尺度

  • 凝集度
    • 高いほうがよい。コードが関心ごとや責任範囲の観点でまとまっているか
  • 結合度
    • 低いほうがよい。結合度が高いとは、依存が広範囲に渡っている状態。読みにくく、事故りやすくなる

テスト

キーワード

  • 正常系、異常系、エッジケース
  • カバレッジ
  • αテスト、βテスト
  • Feature Complete, Release Candidate
  • 単体テスト、結合テスト、システムテスト、受け入れテスト、スモークテスト
  • ドライバ、スタブ
  • ホワイトボックステスト、ブラックボックステスト

エンジニアが使う言葉 / 慣用句

教訓系読み物