gallu’s blog

エンジニアでゲーマーで講師で占い師なおいちゃんのブログです。

バグに至るまでの道のり

えと…随所で耳にする、心も胸も痛む発言があります。
で、それに対して果敢に抵抗を試みてみようというのが本文章の趣旨でございますw


よく、ある挙動に対して(特に技術に無知な人間であればあるほど)「バグだ〜」と騒ぎ立てます。
この場合のバグというのはいわゆる「実装バグ」を指し示し、現場の技術者の心を傷つけ、寿命を縮め、関係性を悪化させます。
もちろんそれが「本当に実装バグ」なら、心ゆくまで作業員をなじるのも手段の一つではあるのですが*1
まず「実装バグなのか?」という部分で、大抵の心ない人非人*2が予想しているよりも多くのハードルがあったりします。


では、そのハードルを、玉ネギの皮をめくるように一枚一枚剥がしてみませう。


・確認ミス
自分の入力ミスとか視認ミスとか(あるはずなのに「自分が見つけられないから」というだけで「表示バグだ」とか)。まずそのあたりが第一に疑われます。
「正しい順で行い、それが間違いなく"おかしい"かどうか」。まず「自分の確認ミスなんじゃないか?」という点に疑いを持ってください。
…とかいってもITな方々*3はそれをやらないからこそのITなので。
表示系なら「画面キャプチャ」を絶対に添付させるとか、その辺を徹底させましょう。
また、そも「テストの仕方を間違えている」ITな方々がいます。
「どういう手順でその状況が再現されたのか」をちゃんとmemoさせるように躾けましょう。


・勘違い:仕様を勘違いしている
これも多いのですが。ITな方々の「こうあるべき」と作業員に渡された指示が「正しく一致している」なんて保証はどこにもありません。
彼らには「本来どうなってなければならないのに今はこうなっている」という風に、「理想と現実」を語らせましょう。
彼らの理想と指示された仕様がずれている可能性を忘れてはいけません。
ちなみに、ずれている理由としては
 *元々勘違い:思い込みがちょっと激しすぎた
 *正規ルートからの仕様変更の未把握:現場を把握していないのに喚いちゃった
 *非正規ルートからの仕様変更の発生:現場を誰も仕切れてないんだよねぇってのはあんたの責任ぢゃない?
などがあり得ます。


・設計バグ
では。ITな方々が、僥倖にも「正しいテストと確認」を行い、奇跡的に「仕様の認識が一致していた」として。
次に予想されるのは「設計上のミス」です。
概ね
 *伝達わすれ:「あれ? 言ってなかったっけ?」
 *設計上「そうなって然るべき」愚かな設計:仕様書にはちゃんと「右を見ながら左を見て」って書いてあるじゃん………あれ?
 *決まってない:なんていうかソンな事考えてもなかったっていうあんた本当に設計とかしてるの?
などがありえます。
まず落ち着いて冷静に、設計上のバグがないかどうかを確認しましょう。


・データバグ
そも「元データがミスってる」場合、確実に表示がおかしくなるのですが。
案外「おかしなデータを渡してきた」のに「おまえ等がおかしい」と騒ぎ立てるITな方々は決して以下略。
落ち着いて冷静に「元データ」の確認をしましょう。


・インフラ周り
インフラ系の設定ミスってのもありがちな面倒ごとです。
DBで「Webサーバからの接続がIPアドレス的に許可されていない」「必要なモジュールが入っていない」「用意されていたものが、実は本番サーバのバージョンだと動かない/挙動が変わる」などなど。
こんな時に「え〜よくわからないしとにかく動かないからなんとかしてよ」とか言い出すITな方々とバトルするためにも。
事前にプロジェクトスコープなどを確定しつつ「実際にはできる」ようにしておいて、適宜恩を売るなり、見捨てるなり、脅すなり、といったチョイスをする必要があります。


・頂戴した共通ルーチンのバグ
とりあえず「他人から貰った未検証なもの」にはとにかく注意を払いましょう。
ミニマムプログラムに切り出して、一個づつ丁寧にチェックをしていくと安全です。


だいたい、ここまでのハードルを全て「問題なし」で通ってきて、初めて「あぁじゃぁ実装バグかもねぇ」となります。
で、それにしてなおのこと「無理なスケジュールを押された」んなら、情状酌量の余地もあるんじゃないかと、個人的には思うんですがねぇ。


っつか。営業や上位レイヤーの方々と実装部隊で。バトルしたり空気悪くしたりして良い事なんざ一つも無いわけで。
そこで「とりあえず無知からくるイライラを無配慮に相手にぶつける」のか「落ち着いてまず深呼吸してから丁寧に質問などしてみる」のか(呑気しぐさって単語、ご存じですか? http://d.hatena.ne.jp/gallu/20081222/p1 )。
ほんのちょっとした配慮でずいぶんと状況は変わるのですが。


それを、頭ごなしに相手のミスだと決められて。
実装者は、これがまた大抵「まず自分を省みる」もんだから、散々っぱら自分のロジックを調べて調べて調べ尽くしてわからずに(もちろんその間も嫌みだ文句だのは雨あられで)。
ようやく見つけたのが相手のバグだとしても「あっそう」で片付けられて。「遅れてるんだから早くやって」とさらにせかされて。
挙げ句「実は相手のミスの方が多かった」のに、怒鳴る回数と遅れたという事実だけで無能扱いされて。場合によっては(ってか大抵の場合)、えげつないほどに値切られて。酷いと未払いされて。


これじゃ実装者の立つ瀬なんてどこにもないと思うのですが。
どんなもんなんですかねぇ?

*1:実際には、実装バグであって「なお」憂慮すべき問題は多々あるのですが

*2:えと…it(それ)とか呼んでみるのはどうかしらん? きっと彼らは「ITかぁそうかぁ俺たちが代表なんだなぁ」とか都合良く勘違いしてくれそうですしw。えと…「ITな人たち」「ITな方々」とかいう言い方?w

*3:上を見て