« 神は細部に宿る | メイン | コードの意味付け »

目指せバグゼロ

目指せバグ“ゼロ”!ということで、「bug-zero」という名前の、プログラム検収管理のツールを配っています。フリーですので是非、お使いください。

http://www.ilovex.co.jp/info/freeSoft/kenshu.html

さて、当社がバグゼロを宣言して長いのですが、それでもバグは無くなりません。
最近では、わたしの視点は、プログラマにではなくてシステムエンジニアに当たっています。

それは、ある考えに至ったからなのです。
「プログラマは生産性が良い人ほどバグが少ない」というものです。

昔の言葉でいいかえて、「コードが短い人ほどバグが少ない」でもいいと思います。

では、プログラマの生産性は、何が決めるのでしょうか。

プログラマの個人の技術、性格といった、プログラマの能力で決まると思っていないでしょうか。

一般的には、そう思われているようです。

しかし、そこは亀の甲より歳の功。
そうでは無いと言えるんです。(きっぱり)
その証拠には、出来るシステムエンジニアが率いているチームでは、
プログラムの生産性が高いのです。

システムエンジニアの仕事のやり方だけでもプログラマの生産性を上げ、バグを少なくすることができるのです。

それは、詳細設計のドキュメントとその引き継ぎ方法、つまりレビューにコツがあるのです。

プログラムを引き継ぐときに、プログラマがドキュメントを読む前にまず全体像をイメージできるような引き継ぎをするのです。

そして次に、プログラマが陥りやすい罠をどこまで予測して、フォローしてあげられるのかということなのです。

イメージの為には、具体的な例にそったストーリーが大事です。

「営業が会社に戻ってから報告するためのプログラムです。
毎日、営業先から疲れて帰って来てから、今日一日を思い出して、報告書を入力するのです。

少しでも早く、忘れないうちに入力したいんです。
帰宅する直前なので時間もあまりないですしね。

だから、操作性が良いことや、入力したものが途中で消えてしまったりしないことが非常に重要です。

本当に急いでいるときには、詳細は後で入力する場合もあります。
中途のままで登録することもできたほうがいいのです。
そこで「仮登録」と「本登録」という機能に分かれています」

このような現場で使う状況がわかるようなストーリーがいいでしょう。

次に、プログラマが陥りやすい罠というのは、以下のようなことがあります。

1)実際には1,000に一つも無いような余分なことを考えて、それに対処するようなコーディングをすることに時間を費やしてしまう。

2)既に似たような画面、機能を他のプロジェクト等で他人が作っていることを知らずに一人で全部作ってしまう。

3)前回やったシステムが頭に焼きついていて、今回も同じだと決めつけてしまう。

4)今回の仕事は、今までの仕事と違うと信じていて、システムエンジニアが指示したことを自分で曲解し、勝手な思いこみによって、意図と異なる方法で実現しようとしてしまう。


1)と 2)は、システムエンジニアが、細部まで気を配って情報を余すところなく伝える必要があります。

先に述べたように、システムエンジニア自身で、プログラマがどう考えるかまで含めてきちんと細かな絵とストーリーを描いておく必要があるのです。

次に、3)と 4)は、バランスの悪い話ですが、これは、経験が少ないプログラマには本当に良くある話なのです。

そこで、経験が少ないプログラマに引き継ぐ場合には、プログラマの直属の先輩なり上司を含めて引き継ぎを行うことも大事なポイントとなるのです。

先輩であれば、彼らを、性格や技術力を含めて理解し、うまく指導してくれるはずです。

ドキュメントをいかに正確にわかりやすく書くかだけでなくシステムエンジニアとしてどれだけプログラマを見守ってあげられるのか、これが、生産性を上げ、バグゼロを実現する道でもあるのです。

Vol.00156

トラックバック

このエントリーのトラックバックURL:
http://www.ilovex.co.jp/scripts/intra/mt/mt-tb.cgi/2603

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

About

2008年08月19日 11:30に投稿されたエントリーのページです。

ひとつ前の投稿は「神は細部に宿る」です。

次の投稿は「コードの意味付け」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

Powered by
Movable Type 3.38