バグがいっぱい出た

仕事で作ったシステムの今回リリースされた箇所から多数のバグが見付かり大変な1週間だった。
私自身もいくつかバグを出してしまったし、プロジェクト全体では、これまでない数のバグが数えられていた。今日、休めているのでまだマシなのだが、発生したバグの中には一刻を争うものもあってだいぶ冷や汗をかいた。私はいまいち、こういった事の記録におっくうで、誰かと電話で話してそれで忘れてしまってたりしていたが、今回は深刻度も高いのでここに書いておこうと思った。
バグが発生してしまうと、プロジェクトの存続に関わるので問題が大きい。これは製品が要求された機能を満たしていない事から、最悪契約問題にも発展しかねない。今回は、通常の3倍近い数のバグが発生した事により、いろいろな事があったが現場ではまだいまいち対策が出来ていないように私には思っている。
私は自分の会社ではちょっとエライ役職だが、これは派遣先の事なので私は1作業員として働いている。


今回の開発はスケジュール的な無理もあったが、私が思うに一番の問題は開発体制にあったように思った。もとものプロジェクトは3人体制だったのが、今回増員があり5人に増えた。しかし、プロジェクトの内容がかなり分かりにくいために、新人2人はお手伝いさんになった。
もともとの3人をA、B、Cとすると、全体を一番把握しているAは新人の面倒と以前のシステムのメンテ作業、一番古株のBはシステム2本、複雑なロジック物担当のCはややこしいシステム1本といった分担だった。(私がどの人かは非公開、あしからず)
すると、こんな事が起こった。Aは細かい作業を大量に受け持つ事になり、新人を動かしておくために作業の準備に追われた。Bは基本設計は問題無く無難に終えたが大量の詳細設計書と、試験に忙殺された。Cは仕様検討に時間がかかり、見切り発車で製造を行い、リリース直前まで仕様変更を繰り返す事になった。
結果、プロジェクト内での会話量が激減し、誰も自分の抱えている仕事の事を人に話さなくなり、情報の共有はとても乏しい物になり、他の人の書いた設計書を見ても書式や誤字についてしかコメントが出来なくなった。
リリースされたシステムのAの作業範囲からは、考慮漏れからの実装漏れと言う大きなバグが発生した。Bの作業範囲からは、大きな実装間違いはなかったものの、詳細設計段階の細かいミスからのバグが多発した。Cの作業範囲からは、本当にややこしい箇所からはバグが出ず、普通の箇所からは設計ミスの実装間違いと言う大きなバグが発生した。BとCが同じ機能の関数を、それぞれ別々に作ってしまうような事も起こった。またあとから、バグでは無いがAとBの作業箇所から実装方法が最適でなかった点が多数見付かった。今、思えばどれも起こるべくして発生したバグに思える。情報共有がまるでなってなかったのだ。
今回初めて、プロジェクトでも「バグ発生の傾向と対策会議」があったが、結論は無難な「検討漏れが無いがないようにする」、「設計レビューをやる」、「試験をちゃんとする」等といった役に立たない対策が立てられた。私自身はこういった事は建前であって、本当はもっと根本的な作業方法から見直すべきだと考えている。
私はプログラムの実装方法から意見した。フレームワークをガッチリ作り、作業として書かなくてはならないコードを少なくすればその分単純なバグは減るはずだ。システム開発とは言え、コードの量で売っているのではないし、品質を高めるために記述コード量を減らす事が疑問視されたよ、今回私がこれを言ったら。なんでだ。ムカツク。コードの量を減らして品質高くしろて意見はなんかオカシイか!?
閑話休題。設計レビューもこれまでやってなかったワケではないのだが、形式的なものになっていた。お客さんはもちろんのこと、内部の人間にまで何を言っているのか分からない設計書を作っていたのが事実だ。「傾向と対策会議」では何故だかその点については問う者がいなかった。私は「資料の書式が悪いなら変えればいい」と去年一年間言い続けて来たので、ここでまた言うのもなんなので黙ってた。と言うか、私の意見に合わせて作られた書式も少なくないので、言えなかった。ごめん。謎。つーか、一般的にはこの辺はUMLとか別の技術を持ってきたり、設計書を本当にマンガのように図や絵をガンガン入れ、例を入れて描く様にするんではないだろうか?少なくとも今の設計書には処理例がないので、来週これをチラッと言ってみようかな。
「試験をちゃんとする」と言っても、もちろんこれまでちゃんとしていなかったワケではない。十分な時間をとってやっていたハズだが、みんな試験作業に慣れてしまっていて、飽きてきているのではないだろうか?作業パターンをお客さんから貰って(出来なきゃ自分で一覧を作って)、あとは借りてきた人員か、外注に試験だけを出すのはどうだろうか?と私は思った。単体試験ならともかく、結合試験となればそれが良いように思う。この段階にくればお客さんもβ版と言うことで、巻き込むことも可能ではないだろうか?ダメなのかな?β版とは言え「えぇ!?こんなの全然違ってるよ!?」って言われてしまうだろうか?
私は微妙な運用に影響しないようなバグは残る可能性はあるにしても、明らかなバグは100%潰せると考えているし、そう出来る開発体制に大変興味がある。今、私のしている場所はそれに物凄く近づけるところだと思うので、今後もこれを追及しいきたい。

「バグがいっぱい出た」への4件のフィードバック

  1. バグはつぶすのではなく飼いならせ!
            by かっぱ(現在、大工見習)

  2. まじめな話しをしよう。
    プログラムは一般的に以下のステップで実装される
    1.要求分析
    2.設計
    3.実装
    要求分析の変更は設計に影響を及ぼし、設計の変更は実装に影響を及ぼす。しかし、実装の変更は設計には影響を及ぼさない。同様に、設計の変更は要求分析に影響を及ぼさない。
    このような性質から、要求分析を完璧に行い、次に設計を完璧に行い、最後に実装を完璧に行えば、完璧なプログラムが実装される、という考え方を元にした開発モデルがウォータフォールモデルと呼ばれるものである。ウォータフォールモデルでは、お客さんからの要求変更は極端に言えば”新たなプログラムの開発”を意味する。
    次に、”要求分析”→”設計”→”実装”→”要求分析”・・・
    と繰り返し行う開発モデルをスパイラルモデルという。
    このスパイラルモデルでは、”要求変更は当然あるもの”との前提に立っている。
    ここでウォータフォールモデルを繰り返せばスパイラルモデルになるのか?という疑問が湧くと思うが、結論から言うと、そうはならない。なぜならスパイラルモデルではフレームワークを前提とした要求分析、設計、実装をするからである。このことから、スパイラルモデルでは繰り返しの度に、設計と実装の期間が短くなると言う特徴を持つ。なぜなら、繰り返す度に基盤であるフレームワークが成熟し、より洗練された差分開発が可能であるからである。

  3. 実はそのコメントは今の私のやってる仕事にあまりにも激しく当てはまるのだけど、やっぱどーいうか「人間は完璧には実行出来ない」と言うか「誰かが絶対に道を外す」と言うか、それ以前に「フレームワークの成熟を感知出来ない人がいる」と言うか、「ズバリ、そっちに向かう意思が弱い人がリーダーだ」とか言ってると、「目の前の仕事をやれ」とか言われたり、「リーダー作業指示に対して、全員が独自の道を行ってしまう」と言うか、「決して私だけが暴走しているんではないぞ」と言うのが私の意見だ。(?
    一言で言うと「萎え~」。
    なんかあんまりスパイラルとかエクスストリームとかって浸透してない?私のいるとこだけ?

  4. >なんかあんまりスパイラルとかエクスストリームとかって浸透してない?私のいるとこだけ?
    ほとんどの会社は金や納期、スキルの関係でウォータフォールモデルで開発しているよ。だけど、それで良いのか?っと常々思う。やはり、フレームワークなどの開発経験が無いと難しいのかもしれない。幸いなことに最近はオープンソースでさまざまなフレームワークのソースを見ることができるが、私の知る限り、そういったものを読もうとしている人はあまりいないなぁ。みんな日々の忙しさに翻弄されているような気がする。まぁ、しょうがないとは思うけど・・・。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です