Updated at: 2017-09-19

Software Enginnering

一般教養

用語 / 頭字語系


  • ACID 特性
    • トランザクション処理の信頼性を保証する 4 つの性質
      • 原子性 (Atomicity) : 処理が一部分だけ実行されたりしない
      • 一貫性 (Consistency) : 整合性。処理前後でデータが矛盾のある状態にならない
      • 独立性 (Isolation) : 処理の途中の状態を外部から観測できない
      • 永続性 (Durability) : 処理完了時点でデータが保存され、障害時でも失われないこと

分離レベル Dirty Read Fuzzy Read Phantom Read Lost Update 処理速度
Read Uncommitted 発生 発生 発生 発生 速い
Read Committed 起きない 発生 発生 発生
Repeatable Read 起きない 起きない 発生 発生
Serializable 起きない 起きない 起きない 起きない 遅い

※ Fuzzy Read は Nonrepeatable Read とも

  • 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
  • 単体テスト、結合テスト、システムテスト、受け入れテスト、スモークテスト
  • ドライバ、スタブ
  • ホワイトボックステスト、ブラックボックステスト

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

教訓系読み物

あれ何だっけシリーズ

配列の操作

 unshift -> [][][] <- push  // 足すやつ
   shift <- [][][] -> pop   // 出すやつ

何とか互換

用語 英語 意味
上位互換 Upper compatibility 上位グレードの製品が下位の機能も有する Pro 版は Lite 版の全ての機能を含む
下位互換 Lower compatibility 下位グレードの製品でも上位機能(の一部)を有する ゲームボーイカラーのゲームは GB でも(色は出ないが)動く
前方互換 Forward compatibility 新しいシステムの規格を古いシステムでも使える Excel 2016 で作成したデータが昔の Excel 2013 でも開ける
後方互換 Backward compatibility 古いシステムの規格を新しいシステムが使える ・Excel 2013 のデータは Excel 2016 でも開ける
・PS のゲームが PS2 で動く
  • 一般的なのは上位互換と後方互換