ソフトウェア技術者のためのバグ百科事典(9)境界値のバグ:山浦恒央の“くみこみ”な話(130)(3/3 ページ)
ソフトウェア技術者に向けて、バグに関する基礎知識をまとめていく新シリーズ「バグ百科事典」。第9回は、常連バグの代表格である、境界値に関する仕様の不良や勘違いのバグ「境界値のバグ」を取り上げます。
4.兆候
閉括のバグは、範囲の考察ミスか、不等号の実装ミスの可能性があります。仕様書に条件式や範囲を表す記述がある場合、境界値のバグが存在する可能性が大です。注意深く実装し、気になる箇所は仕様定義者と相談しましょう。
境界が左右に移動する場合、データ設定値、計算式のミスかもしれません。出力結果を確認しながら、どこにバグがあるか考えましょう。
境界抜けは、実装抜けの可能性があります。仕様とコードの対応付けを確認するといいでしょう。
余分な境界は、場合によっては実行結果が同じになるため、見つけるのが難しいかもしれません。冷静に確認しましょう。
5.対策
5.1 仕様記述を工夫する
プログラマーに誤解を与えない仕様記述を書く必要があります。また、不等号や日本語の読み間違いが発生しないように不等号と日本語の両方を記載するとよいでしょう。これにより、仕様と実装が同じ表記となり、閉括のバグを防げます。
5.2 仕様・プログラムのテスト項目を作成する
同値分割・境界値分析で、境界値のバグを見つけましょう。これにより、左右の境界、境界抜けを防げます。また、プログラム作成時ならば、プログラムを作成しながらテスト項目をその都度実行しましょう。
5.3 コードレビュー
余分な境界が発生しないように、コードを見直しましょう。また、余分と感じるコードがあれば、その段階で取り除くことをお勧めします。そうしないと、そのままコードが残り、余分な境界が出現する可能性がありますし、出荷直前のタイミングでは怖くて削除できず、そのまま「居座る」ことになります。
6.まとめ
下記に、今回のまとめを示します。
- 境界値とは、同値クラスの端の値であり、境界値に関するバグを境界値のバグという
- 「閉括のバグ」は、閉じているべき境界が開いていたり、開いているはずの境界が閉じていたりすること。仕様記述と実装が正しく対応していることを確認する
- 「左・右の境界移動」は、境界が左右にずれること。同値分割・境界値分析を実施し、バグを防ぐ
- 「境界抜け」は、あるべき境界が抜けていること。実装抜けがないか、確認する
- 「余分な境界」は、不必要な境界があること。前に実装したコードが残っていないか確認する
7.終わりに
今回は、ソフトウェア開発の不良の常連であり、圧倒的に多いバグである境界値のバグを取り上げました。今回の例題以外にも、さまざまな箇所に境界値は存在しますので、注意深く成果物を作成してください。
境界値に関係するバグは、前のシリーズのバグ検出ドリルや、書籍版の『ソフトウェア技術者のためのバグ検出ドリル(日科技連)』でも取り上げましたので、ご参照いただければと思います。
参考文献
[1]実践的プログラムテスト入門((著)ボーリス・バイザー、(翻訳)小野間彰、山浦恒央、1997年、日経BP)
[2]ソフトウェアテスト技法((著)ボーリス・バイザー、(翻訳)小野間彰、山浦恒央、1994年、日経BP)
[3]ソフトウェアテスト教科書 JSTQB Foundation 第3版(大西建児、勝亦匡秀、佐々木方規ほか、2011年、翔泳社)
山浦先生執筆の書籍「ソフトウェア技術者のためのバグ検出ドリル」が発売中!
山浦恒央先生が執筆した書籍「ソフトウェア技術者のためのバグ検出ドリル」が日科技連出版から発売中です。本連載「山浦恒央の“くみこみ”な話」とTechFactoryの連載「組み込みエンジニアの現場力養成演習ドリル」をベースに、大幅加筆、改訂した内容になっています。
内容は、「デバッグの詰将棋」で、要求仕様定義、設計、コーディング、テスト、保守の5フェーズでの「バグを埋め込んだ仕様記述やソースコード」を読んで、バグをピンポイントで見つける問題集になっています。全部で31問あり、難易度は初級から上級まで、いろいろです。興味のある方は、Amazon.comや書店でチェックしてください!
東海大学 大学院 組込み技術研究科 非常勤講師(工学博士)
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- ≫連載「山浦恒央の“くみこみ”な話」バックナンバー
- ソフトウェア技術者のためのバグ百科事典(8)バグを見つけるテストがバグってる
ソフトウェア技術者に向けて、バグに関する基礎知識をまとめていく新シリーズ「バグ百科事典」。第7回は、プログラムのバグを見つける作業である「テスト」がテーマです。テストの作業次第では逆にバグを作り込むこともあり、「テストのテストのテスト」のように無限ループに陥りかねません。 - ソフトウェア技術者のためのバグ百科事典(7)要求仕様書がバグってる
ソフトウェア技術者に向けて、バグに関する基礎知識をまとめていく新シリーズ「バグ百科事典」。第7回は、ソフトウェアのライフサイクルで最も重要な要求仕様に焦点を当てます。要求仕様書をしっかり作成しないと、その後のフェーズでさまざまな問題が発生し、プロジェクトの進行に大きく影響するのです。 - ソフトウェア技術者のためのバグ百科事典(6)不信感を生む“文書作成のバグ”
ソフトウェア技術者に向けて、バグに関する基礎知識をまとめていく新シリーズ「バグ百科事典」。第6回は、ソフトウェア開発業務の中で圧倒的に大きな比率を占める「文書作成」における間違い、「文書作成のバグ」を取り上げます。プログラムの動作には影響しませんが、その文書を読んだユーザーに不信感を与えかねない危険なバグなのです。 - ソフトウェア技術者のためのバグ百科事典(5)意外に多い「実装抜け」のバグ
ソフトウェア技術者に向けて、バグに関する基礎知識をまとめていく新シリーズ「バグ百科事典」。第5回は、学生のプログラミング作成を事例に「実装抜け」のバグを取り上げます。学生の事例ですが、プロも意外とやりがちなので気を付けておきましょう。 - ソフトウェア技術者のためのバグ百科事典(4)Excelがバグの原因に!?
ソフトウェア技術者に向けて、バグに関する基礎知識をまとめていく新シリーズ「バグ百科事典」。第4回は、前回に続き「データ入力ミスのバグ」について解説します。Excelのように日頃使う開発ツールもバグの原因になり得るのです。