勉強日記

チラ裏

SQL Antipatterns ch24 Diplomatic Immunity

pragprog.com


Diplomatic Immunity

Use software development best practices, including documentation, testing, and source control, for your database as well as your application.

  • 担当者死亡につきプロジェクトを引き継いだ話
  • 技術的負債
    • ドキュメンテーションもテストもない
    • VCS不使用
    • 本番稼働中コード、開発中コード、もう使われていないコードが渾然一体

Objective: Employ Best Practice

  • ソフトウェアエンジニアリングにおける好ましい習慣
  • 不要な作業ゃ繰り返し作業を大幅に減らし、トータルで工数削減につながる
  • 急場しのぎでこれらを犠牲にすると失敗する

Antipattern: Make Sql a Second-Class Citizen

  • 上記の好ましい習慣が、データベース関連においてのみ「免除」されてしまう傾向がある
  • なんで?
    • ソフトウェアエンジニアとDBAとが分かれている現場がある
      • DBAは複数チームと仕事をする
      • ので、チーム側からしてみれば、DBAはフルタイムのメンバーとはみなされない
        • お客様扱い
    • SQLは普通のプログラミングと異なるという認識がある
      • アプリケーションコード内のSQL文の発行の仕方からして異質
    • (書籍執筆当時)DB開発に関してIDEツールがあまり発達していなかった
      • 少なくとも、広く使われてはいなかった
    • DBAが生き字引であり生きVCSという認識がある
  • DBはアプリケーションの礎であり、品質への影響が大きい

How to Recognize the Antipattern

  • こんなのが聞こえてきたら、DBを特別扱いして何か横着しているおそれあり
    • 「新しい開発手法を取り入れようと思う -- より軽いやつ」
      • 必要な何らかのステップを省こうとしている
        • 合法なこともある
        • 重要なベストプラクティスに従わないことの婉曲表現であることも
    • 「DBAはVCS講習に呼ばなくていいよ、どうせ使わないから」
      • 誰かを講習に呼ばないことで、その人がそれを使わないことが確定する
        • もしかしたら使うかもしれないのに
    • 「テーブルとカラムの利用を追跡するにはどうすればいい?使われていなそうなものを消したいんだけど」
    • 「2つのデータベースのスキーマを比較して差分をレポートし、一致させるスクリプトを生成するツールはありませんか」
      • DBスキーマの変更をデプロイするプロセスを確立できてないと開発と本番とで同期がとれなくなる

Legitimate Uses of the Antipattern

  • 1度きりしか使わないその場限りのコードならドキュメンテーション、テスト、VCS等使わないこともある
  • 本当にすぐ消してもよいかが判断基準
    • すぐに消せないということは、保存するに値するということ
      • VCS使え
      • メモ書け
        • 何のためのもの
        • どう使う

Solution: Esablish a Big-Tent Culture of Quality

  • QAの3要素
    • プロジェクトの要件の仕様書を明記
    • 要件のソリューションを設計・開発
    • ソリューションが要件にマッチしていることの検証・テスト
  • 下記を実践することで達成できる

Exhibit A: Documentation

  • self-documentingなコードなんてない
    • 「読める」なら「コード」ではない
    • 未実装機能や未解決問題についてソースコードは教えてくれない
  • DBについても、アプリケーション同様に要求と実装とをドキュメンテーションせよ
    • ERD
    • テーブル、カラム、ビュー
    • リレーションシップ
    • トリガー
    • ストアドプロシージャ
    • SQLセキュリティ
    • DBインフラ
    • ORマッピング
  • 開発者はドキュメントを最新に維持するのを嫌がる
    • ベテランこそDBのドキュメントが必要なことを知っている
      • 他の部分は書かなくてもDBは書く

Trail of Evidence: Source Code Control

  • VCSで解決したいこと
    • DBサーバが完全にぶっ壊れたらどうやって再構築するの?
    • DB設計を複雑に更新し、後から追跡したい場合は?
    • 変更を巻き戻すには?
  • VCSのコントロール下におくべきもの
    • DDL
    • トリガー、プロシージャ
    • マスタデータ
    • ERD、ドキュメンテーション
    • DBAスクリプト
      • アプリケーション外でデータ処理する
        • import/export
        • 同期
        • レポート
        • バックアップ
        • バリデーション
        • テスト

Burden of Proof: Testing

  • テスト項目
    • テーブル、カラム、ビュー
    • 制約
    • トリガー
    • ストアドプロシージャ
    • マスタデータ
    • クエリ
    • ORMクラス

コラム: Schema Evolution Tools

Case Load: Working in Multiple Branches

  • DBインスタンスVCSに追従できない。どうする
    • DBインスタンスを別々に作る
      • 開発者ごと
      • リビジョンごと
      • 仮想化技術により、商用環境と同じ機能の環境を用意するハードル下がってきている
    • アプリケーションで、コネクションの設定をコンフィグに外出しする

英語

  • euphemism
    • 婉曲
  • Big-Tent
  • dispiriting
    • 落胆させる
  • battle-hardened
    • 百戦錬磨の