あるあるネタです。よくある危険な体験談なので、共感を得られるのも当然だと思います。ですが、単に並べるだけでは苦笑やネガディブなネタになってしまい、何も改善されません。
笑って済ませるのは悪です。そんなの皆わかってるでしょうけど、改めて「そんなもの」にしてしまわないように意識して欲しいと思うのです。どこが危険であり、どう改善するべきか。また、なぜそのような事が行われるか。そして実際体験する事になった場合の対処等に展開できたらいいなと思っています。最終目標はこれらの多くを無くす事です。こんな事、体験させるべきじゃないんです。
発端
子どもが体験するべき50の危険なこと (Make: Japan Books) がTLに流れてきたので、とりあえず反応したのが発端です。
「プログラマが体験すべき50の危険なこと」
当初思っていた以上の反応で、完全に他人のふんどしで相撲をとってる*2状態ですが、こういう情報の収集や増幅も需要や価値があるのかなーと、改めて考えさせられました。
以下ではいくつかをピックアップし、それの何が危険か、引き起こされる背景、遭遇時の対処、加えて関連するきのこを独断と偏見たっぷりの箇条書きでお送りします。きのこ本を片手に読めば一層楽しめるかもしれません*3。
- 作者: 和田卓人,Kevlin Henney,夏目大
- 出版社/メーカー: オライリージャパン
- 発売日: 2010/12/18
- メディア: 単行本(ソフトカバー)
- 購入: 58人 クリック: 2,107回
- この商品を含むブログ (339件) を見る
「○○が正常に動作すること。って言う試験項目」
「仕様書なしのレガシー再構築」「システムの中身が不明な状態での改善、保守」
「環境上の問題で、データ送信箇所をコメントアウトした状態で修正。」
- 危険
- 未テストでリリースされるため、本番トラブルを起こす可能性がある。
- 背景
- 何らかの理由により環境依存部分の切り離せていない。
- コメントを外せば動くと思っている。
- 対処
- 環境依存部分は切り離す。
- 外部リソースとし、リリース時に自動的に取り込まれるようにビルドする。
- 環境依存部分は切り離す。
- 関連きのこ
- 59 バイナリは常に1つ
「本番環境のJSPを稼働中に修正」「本番のソース直でいじってバグ修正」「直前までコード弄って現地でテスト」
- 危険
- コードが構成管理から外れるため、改修・保守が困難になる*11。
- ぶっつけ本番では何が起こるか判らない。
- 背景
- 即時対応を強要された。
- 運用フローが明確となっていない。もしくはザル。
- 単純に時間が不足している。
- ただの手抜き。
- 対処
- 本番コードを直接編集するような状況は避ける。
- テスト済み*12でなければ本番にリリース出来ない運用とする。
- 日常よりテストおよびビルドにかかる時間を最小限に抑える必要がある。
- 理不尽に急かされた場合は「○○機能に影響を与える可能性が…」とか適当な事を言って危機感を煽る。
- 関連きのこ
- 20 すばやくデプロイ、こまめにデプロイ
- 30 そのコードに触れてはならない!
- 79 テストのないソフトウェア開発はあり得ない
「テストコードのないリファクタリング」
「コンフリクトしたソースコードを強制コミット」「SVNでのコミット合戦」
- 危険
- 「修正箇所の潰しあいは楽しいぜヤッホウ!」
- デグレの主因となる。
- 背景
- メンバーがバージョン管理システムを理解していない。
- コードがSRPに違反しまくっている。
- 対処
- バージョン管理システムの教育を行う。
- テストコードを書き、上書きによるデグレをいち早く検知する。
- 不吉な匂い*13を感じ取ったなら、早々にリファクタリングを行う。
- 関連きのこ
- 65 バージョン管理システムを有効に使う
- 73 単一責任原則
「コード汚いから1から書き直そう!!」
- 危険
- 高い確率で独り善がりです。
- 書き直した後が綺麗である保証がありません。
- システム全体の一貫性が取れなくなります。
- スパゲティだったのがスパゲィとざるそばを混ぜた物になってしまいます。
- 自動テストがない場合は特にテスト工数が洒落になりません。
- 背景
- 汚いコードが悪いです。なので気持ちはわかります…。
- 対処
- 独断ではやらない。
- チームとして明確な指針を持って行う。
- やると決めたなら徹底的にやる。
- 現行機能が存在するわけなので、テストによるサポートが必須*14。
「本番機とテスト機を間違えて、ふざけたデータを登録してしまうこと。」
- 関連きのこ
- 25 見られて恥ずかしいデータは使わないこと
「デスマ」
- 危険
- 死にます。冗談抜きで…。
- 背景
- 原因はいくらでもあるのですが、挙げられている他の項目がそれだったりもします。
- 対処
- …。
- 関連きのこ
- 36 ハードワークは報われない
ほか
(気が向いたら追加します)
まとめ
認識の甘い管理者や他の技術者に「そこまでしなくても…」とか「そんなのいいよ」とか言われる事もあると思いますが、これらに安易に屈してはいけないと思います。それは顧客のためであり、自身のためでもあり、「しなくて良い」と言ってきた彼らのためにもなるはずです。ビジネスなので様々な事と天秤にかけられることはありますが、ツールによるサポートや技術の裏付けを正しく運用*15できれば、彼らの言い分を凌駕出来る筈です*16。
*1:時系列ではなく、「(ネタ + 反応) * n + 感想」の順に並べてます。そのほうが読みやすいと思ったので。あと、体験は赤文字、感想は緑文字でデコりました。
*2:私自身のネタは一つも無かったりします。
*3:予想以上に対応するものが多くて驚きました。
*4:規模(ステップ数)によって決められたりする悪習の一つです。
*5:既存の試験項目としてこれらが横行している現状、一担当者が容易に全体を引っくり返せるとは思えません。
*6:そもそも自動テストであればこんな試験項目にはなりませ……assert無しのテストが実在するだけになんとも言えませんか。
*7:レガシーコード改善ガイド (Object Oriented SELECTION)
*8:テストのためのコードの変更は許されずに適切なテストを書けない可能性も高い。
*9:幸い駄目な事は誰もが理解出来る――ユーザすら理解している場合もある――ので、愚痴も聞き入れられやすいはず。
*10:関連しそうなの見当たらなかった…
*11:一時的だから問題なしと思われるかもしれませんが、この運用を続けていると必ずどこかで漏れます。
*12:最低でも動作検証(疎通)は済んでいるもの。
*13:リファクタリング―プログラムの体質改善テクニック (Object Technology Series)の「巨大なクラス」、「長すぎるメソッド」など。
*14:無ければ仕様化テストから行う。
*15:なんて言ってる私も勉強中であり、常に押し切れる訳ではありません。