新人技術者のためのロジカル・シンキング入門(4) ―― 直したバグがゾンビのごとく復活する
【1】ミスを確実に防ぐしくみを作る(1/2)
時々,ニュースなどで医療事故の話を聞くことがあります.例えば,患者を取り違えて手術しそうになったとか,酸素と麻酔のチューブをまちがえてつないでしまったとかいったニュースです.そういうニュースを聞くと筆者は,ソフトウェア開発のしごとでありがちなソース管理のミスと重ねて考えてしまいます.
もちろん,人の命に直接かかわるしごととそうでないしごとの違いがあり,そこを無視した議論というのはある意味で乱暴に聞こえるかもしれません.しかし筆者としては,「単純作業におけるケアレス・ミス」という問題の管理の難しさが共通であるように思えてなりません.ニュースで医療事故が報道されると,よく聞かれるコメントが,「考えられないミスだ」というものです(図1).でも,人間は実のところ,単純な作業を行う際に,この「考えられないミス」をしばしば起こしてしまうものなのです.
図 1 単純ミスに対する反応
見た目は単純ミスであっても,再発防止に取り組むのはとても難しい.人間は機械ではないので,ほうっておけば単純ミスを起こしうる.それらを防ぐしくみ作りを考えないで,精神論のお説教で終わらせてしまうと,ミスを繰り返すはめになる
冒頭の例に挙げたFさんのプロジェクトのソース管理ミスについても,このことは言えるでしょう.こんな単純なミスは,ソフトウェア開発に携わったことがない人からみると「アホか?」と思うくらいまぬけで,不誠実な行いに思えるかもしれません.しかし,ソフトウェア開発に実際に従事したことのある人なら,大なり小なり似たような経験をしたり,あるいは耳にしたりしたことがあるはずです.ですから,このような管理ミスに対する対応策として,個人の注意力不足を問題にしたり,あるいは「お客様の製品を扱っているという自覚の徹底」といったお題目を掲げてみたりしても,恐らく根本的な解決にはなりません.ありがちな単純ミスを確実に防ぐしくみ作りを試みない限り
は....
● 個人作業の場合の管理ミスの原因を探る
例によって,まず流れで作業内容をとらえ,ソース・コードの管理ミスというものがどこで発生するかを見ていくことにしましょう.手始めに,コードの改造の最初から最後までひとりだけで行う,ほかの人が介在しないシンプルな例から考えてみることにします.
図2にあるように,ソースの改造というのは,要するに,
取ってくる→改造する→提出する
というものです.だからまず,この流れのどこでミスが入るかを考えることにしましょう.
図 2 ミスの発生例(個人作業の場合)
ミスの発生要因を作業全体の流れからとらえて調べてみる.これはひとりの人間のみがソース・コードに改造を加えるもっともシンプルな例.取ってくる→改造する→提出する,という流れの中で,どこでどのようなミスが生じえるのかを考える
1)「取ってくる」工程の管理ミス
このときにありがちな管理ミスは,ソース・コードを集めて管理しておく場所がそもそも定まっていない,というものです.管理場所がきちんと定まっていなければ,各人がバラバラにソース・コードを更新してしまうことになります.
例えば冒頭の例で,Fさんがソース修正を終えた新人に向かって,「じゃあ,サーバのXXXというディレクトリに置いておくように」と告げてほかのメンバに周知しなかったら,次の修正からなんらかの管理ミスが発生しえます.ほかのメンバは,最新版のソース・コードがどこにあるのかを知らないからです.
また,管理場所が決まっていたとしても,「たぶん同じはずだから」といって自分が作業しているローカル・マシンにあるソース・コードに改造を加え始めてしまった場合,反映されているべきだったほかの改造が抜け落ちることになりかねません.