検索
連載

ソフトウェア技術者のためのバグ百科事典(21)【総まとめ】バグの特定手順を解説山浦恒央の“くみこみ”な話(142)(3/3 ページ)

ソフトウェア技術者に向けて、バグに関する基礎知識をまとめていく新シリーズ「バグ百科事典」。第21回は、シリーズの総まとめとして、バグの検出から修正までの「バグ特定手順」の一連の流れを解説します。

PC用表示 関連情報
Share
Tweet
LINE
Hatena
前のページへ |       

3.6 バグを修正し確認する

 バグ修正自体は簡単な場合が多いでしょうが、正しく修正することは簡単ではありません。逆に、修正が原因で新たなバグが発生することがあります。これが、機能退行です。機能退行がないことを確認するため、バグ修正時には回帰テスト(全機能の正常ケースが正しく動作すること)を実施する必要があります。

 筆者がよくやったのが、データにバグを作り込むこと(第124回第125回掲載)です。「設定値が間違っていたので、修正したつもりが誤ったデータを入れてしまう」「データを変更したことで別の機能に影響が出た」などが発生し、焦ります。

3.7 類似バグをチェックする

 検出したバグだけを修正するのでは品質向上は望めません。そこで、バグを見つけた場合は、同じ原因による類似バグがないか、他のモジュール、他の機能、他人のプログラムをチェックする必要があります(図5)。

図5
図5 類似バグの例(左:ゼロ割の例、右:類似のバグ)(クリックで拡大)

 図5は、類似バグの例です。例えば、fncAとfncBという2つの関数のどちらも、数値演算のバグ(第132回掲載)におけるゼロ除算の対策ができていません。このように、あるバグと同様のものが、複数箇所に存在しないか確認しましょう。

3.8 バグがどうしても見つからない場合

 バグによっては再現性がなく、異常動作の発生頻度が1000回に1回のような低確率の場合もあります。開発日程が厳しくても、必ずリリース日に出荷すべきですが、全てのバグを完全に修正できない場合、例えば以下のような条件を設定し、出荷する/しないを決定します。

  • 当該バグが発生しても、ユーザーの財産や身体に影響を与えない
  • 当該バグが発生しても、他のソフトウェアの動作に大きな影響を与えない
  • バグの発生により、他のソフトウェアの動作に大きな影響を与えない
  • バグの発生により、悪影響を受ける機能の代替案がある(運用でカバーできる)
  • 2000回実行して2回発生したなど、統計的な情報を持っている
  • 組み込み系製品の場合、出荷台数とバグ発生率を比較し、不良の発生頻度が低いことを確認する
  • 継続的にバグを調査するため、バグが発生した場合のデータを収集するためのロジックを埋め込む

 上記のような条件を顧客や上司に説明し、どのような判断をすべきか決定しましょう。

4.終わりに

 今回は、バグ百科事典の総まとめとして、過去20回かけて連載してきたバグを振り返りつつ、それらの検出手順をまとめました。ところどころに連載番号を振っておきましたので、興味のあるバグを見つけた場合は、過去記事を見ていただければと思います。

 本シリーズにおいて、全てのバグを取り上げていませんが、解説したバグを思い出し、明日のより良いソフトウェア開発につなげていただければ幸いです。

 次回からは、バグ検出ドリル(過去シリーズ)とバグ百科事典を発展させた新シリーズをお届けします。どうぞご期待ください。

山浦先生の新刊「ソフトウェア技術者のためのバグ検出テキスト」が発売!

 本シリーズ「ソフトウェア技術者のためのバグ百科事典」を大幅に加筆、修正した山浦恒央先生の新刊「ソフトウェア技術者のためのバグ検出テキスト」が日科技連出版から発売されました。連載でも取り上げた、「要求仕様書のバグ」「実装抜けのバグ」「テスト業務のバグ」など、バグを36種類に分類して解説しました。囲碁や将棋であれば、「相掛かり」「矢倉」「四間飛車」「藤井システム」のような戦法を網羅した内容になっています。

 前著「ソフトウェア技術者のためのバグ検出ドリル」(2019年11月刊行)も好評発売中です。実際にバグを含む要求仕様書、設計書、コーディング、デバッグ、保守を具体的に取り上げ、練習問題として31問を出題しました。同書は、囲碁や将棋における「次の一手」的な問題であり、ピンポイントの場面を取り上げ、実践力を鍛えることを目的としています。

 両書とも興味のある方は、Amazon.comや書店でチェックしてください!

【 筆者紹介 】
山浦 恒央(やまうら つねお)

東海大学 大学院 組込み技術研究科 非常勤講師(工学博士)


1977年、日立ソフトウェアエンジニアリングに入社、2006年より、東海大学情報理工学部ソフトウェア開発工学科助教授、2007年より、同大学大学院組込み技術研究科准教授、2016年より非常勤講師。

主な著書・訳書は、「Advances in Computers」 (Academic Press社、共著)、「ピープルウエア 第2版」「ソフトウェアテスト技法」「実践的プログラムテスト入門」「デスマーチ 第2版」「ソフトウエア開発プロフェッショナル」(以上、日経BP社、共訳)、「ソフトウエア開発 55の真実と10のウソ」「初めて学ぶソフトウエアメトリクス」(以上、日経BP社、翻訳)。


前のページへ |       

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る