システムにとってバグ(不具合)が発生しないことは大前提です。使い勝手の良さを考えることも大事ですが、それよりもバグを生まないことはもっと大事なことです。

システムが予期せぬ動作をしてしまうことで、お客様の業務が滞ってしまい、損害賠償を請求されるケースもあります。時にはそのバグが起因となり、人命が失われてしまうことだってありえるのです。

システムにとっての致命傷となるバグについて、担当エンジニアの当事者意識の違いによってバグ発生率が大きく変わるという話をしていきたいと思います。

絶対にバグが発生しないシステムは存在しない

システムが人の手で作り上げられる限り、絶対にバグが発生しないシステムは存在しません。人はロボットとは違いますので、「弘法にも筆の誤り」ということわざがあるように、どんな優れた人でもミスを犯してしまうもの。

だからこそシステムの開発工程には”テスト工程”が設けられており、処理を網羅したテスト項目を作成し、発生するであろう不具合はここでつぶしておくのです。こうして言葉だけで説明していれば、納品するまでに不具合のリスクはゼロになっていなければならないわけですが、それでもバグが発生してしまうことはあります。

テスト工程も結局は人の手で行う作業のため、どうしても穴ができてしまいますし、完璧にチェックするのはなかなか難しいものなのです。

エンジニアの経験年数も要因のひとつ

不具合が発生するのは仕方ないにしても「設計→プログラム→テスト」と、同じ工程を踏んでいたとしても、担当するエンジニアによってバグの発生率や検出率が変わってきてしまいます。

それはなぜでしょうか・・

まず挙げられるのは、それぞれのエンジニアのスキルレベルの違いです。経験年数が豊富なエンジニアであれば「こういったパターンならこうしたイレギュラーデータが発生する可能性が高いから、リスクを考慮した設計やテストをしよう」というように、過去の経験で培った知識を活かして、穴のないシステム開発ができるのです。

この通りに考えるなら、経験豊富なエンジニアほどバグが潜みそうなポイントを把握するのが上手になり、品質の高いものを納品できるようになります。

エンジニアの能力の差を埋めるには仕組みづくりが有効

上記のように経験豊富なベテランエンジニアならよいですが、経験年数がわずかな新米エンジニアではバグを生み出しやすくなります。

そのため少しでもバグを抑えるために、バグを発生させない or バグの検挙率を高めるための仕組みを設けることが多いです。基本的でよくあるものでは、以下のような仕組みでしょう。

  • テスト項目の作成時には有識者のレビューを受けること
  • バグ対応を行ったら、影響が及ぶ範囲のテストは全件やり直し
  • 設計書は必ずお客様確認を行う
  • 前工程に遡っての作業はNG

上記はあくまで一例ですが、このように仕組みづくりをしていくことで、システムの中にひそむ不具合リスクを最小限にしていくのです。

それでも結局は担当者の意識の違いでバグ発生率は変わる

経験豊富なエンジニアばかりを集めたとしても、どれだけバグを生み出さない緻密な仕組みを用意したとしても、バグが発生することがあります。しかもバグが発生するのは決まって同じ部署の同じエンジニアが原因ということはよくあります。

それはなぜかと考えた場合、結局のところは担当者の意識の違いとでも言うのでしょうか、不具合を発生させることに対して、危険意識が低いから作業も雑になってしまい、バグが生まれるのです。

仕組みは意識の低いエンジニアに対して集中的に

先に説明したバグを生まないための仕組みづくりは確かに有効ですが、その仕組みを実行することは新たな作業を増やすことと同じであり、エンジニアの作業効率を悪くしてしまいます。

もちろん無駄なことをしているわけではないため、設けられた仕組みを実行する意味はあるのですが、仕組みの内容によってはメンバー全員に徹底させなくてもよいものと考えています。

バグが発生するのは意識の低いエンジニアに集中することが多いので、バグを生み出さないための仕組みも意識の低いエンジニアに対して集中的に実施させればよいでしょう。

このように全てのエンジニアを同じように扱うわけではなく、経験年数や意識の違いによってエンジニアを区別し、実施する対策もそれぞれで変えていくべきなのです。

意識の低いエンジニアには意識を高めるための教育も

システムに不具合が発生するとどうなってしまうのか、エンジニアの意識を高めるための教育を行うのも一つの対策となります。

ひとつのバグが原因となって大きな損失を出してしまった事例や、問題を先延ばしにしたがゆえに大きなバグが生まれてしまった事例などを説明することで、本人の当事者意識を高くしていくことも大事です。

こうした教育も全てのエンジニアに実施していることは多いですが、教育を受けている時間は他の作業が行えないため、作業効率が悪くなります。意識の低いエンジニアに対してのみの実施で問題ないでしょう。

 

おわりに

バグの多いシステムかどうかは、結局のところエンジニア本人の事故に対する意識が低いことが大きく影響してきます。バグをそのままに納品してしまえば、後々大きな事故につながってさらに問題が拡大してしまいます。

もし管理者として品質の高いシステムを納品したいのであれば、意識の低いエンジニアを洗い出し、そこに対して特別な指導を行っていくことが、全体の作業効率を落とさずに品質を高めていける最善の策となりえるのではないでしょうか。

 



【X(旧twitter)でも情報発信中】

Xを最近始めたので、フォローしてもらえると嬉しいです(エンジニア界隈の方はフォローバックさせていただきます)! システム開発に関することや、最新テクノロジーのことなど、世のエンジニアにとって有用な情報を発信してます!

"X" @TECH_KEYSYS