SQL Antipatterns ch24 Diplomatic Immunity
- Diplomatic Immunity
- Objective: Employ Best Practice
- Antipattern: Make Sql a Second-Class Citizen
- How to Recognize the Antipattern
- Legitimate Uses of the Antipattern
- Solution: Esablish a Big-Tent Culture of Quality
- 英語
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
- ソフトウェアエンジニアリングにおける好ましい習慣
- VCS使う
- 自動テスト回す
- ドキュメンテーション、仕様書、コメント書く
- 不要な作業ゃ繰り返し作業を大幅に減らし、トータルで工数削減につながる
- 急場しのぎでこれらを犠牲にすると失敗する
Antipattern: Make Sql a Second-Class Citizen
- 上記の好ましい習慣が、データベース関連においてのみ「免除」されてしまう傾向がある
- なんで?
- 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要素
- プロジェクトの要件の仕様書を明記
- 要件のソリューションを設計・開発
- ソリューションが要件にマッチしていることの検証・テスト
- 下記を実践することで達成できる
- ドキュメンテーション
- VCS
- テスト
Exhibit A: Documentation
- self-documentingなコードなんてない
- 「読める」なら「コード」ではない
- 未実装機能や未解決問題についてソースコードは教えてくれない
- DBについても、アプリケーション同様に要求と実装とをドキュメンテーションせよ
- 開発者はドキュメントを最新に維持するのを嫌がる
- ベテランこそDBのドキュメントが必要なことを知っている
- 他の部分は書かなくても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インスタンスを別々に作る
- 開発者ごと
- リビジョンごと
- 仮想化技術により、商用環境と同じ機能の環境を用意するハードル下がってきている
- アプリケーションで、コネクションの設定をコンフィグに外出しする
- DBインスタンスを別々に作る
英語
- euphemism
- 婉曲
- Big-Tent
- 包括政党
- Diplomatic Immunityの対義として使用
- 包括政党
- dispiriting
- 落胆させる
- battle-hardened
- 百戦錬磨の