2011年1月7日金曜日

「バグ」とは何かを考える

『知識ゼロから学ぶ ソフトウェアテスト』高橋寿一著  
「バグ」とは何かを考える
    1. テストをはじめる前に (「バグ」とは何かを考える)

    まったくバグのないソフトウェアは存在するのでしょうか?
    答えはNo。完全なテスト手法が存在しないからです。

    先人の言葉より
    “バグを全部見つけるのは無理だと心得よ” Cem Kaner
    “エラーは見つからないだろうという仮定のもとにテストの計画を立ててはいけない” G.J.Mayers
    “プログラム開発グループは、自分たちのプログラムをテストしてはいけない” G.J.Mayers

    もちろん時代の背景とともにテストの意義・方法は変わってくるものなので、一概には言い切れませんが、開発者自身でのテストだけでは無理があるみたいです。
    何となくバグというものは、プログラムの中に平均的に散らばっているものだと思いがちですが、ある例では、80%のバグが20%のコードに含まれているという報告があります。以下の理由が考えられます。
    「プログラムは、単純な計算部分から複雑なアルゴリズムを伴った部分まで多種多様な要素から構成されている。」
    つまり、そこを徹底的にテストをする必要があります。

    まとめると、ソフトウェアで重要なのは、どの部分にバグが出やすいのか、そこにどのようなテスト手法を適用すれば十分な品質が得られるかを知ることです。

    とても興味深い診断テストがあったので紹介します。
    <問題>
    「このプログラムでは、ユーザが3つの数字を入力します。この3つの値は、それぞれ三角形の3辺の長さを表すものとします。プログラムは、三角形が不等辺三角形・二等辺三角形・正三角形のうちのどれであるかを決めるメッセージを印字します。このプログラムをテストするのに十分と思われる一連のテストケースを書いてください。」

    このプログラムを書くことは何の問題もないでしょう。
    しかし十分なテストケースを書くとなると非常に難しいみたいです。

    <答え>
    ・有効な不等辺三角形をテストする
    ・有効な正三角形をテストする
    ・有効な二等辺三角形をテストする
    ・有効な二等辺三角形で3種類の辺の組み合わせをテストする
    ・1つの辺の長さがゼロの値をテストする
    ・1つの辺の長さが負の値をテストする
    ・2辺の和がもう1辺と同じである (例:1, 2, 3)
    ・2辺の和がもう1辺より小さい (例:1, 2, 4)
    ・全ての辺の長さがゼロ
    ・入力の個数が間違っている
    ・それぞれのテストケースに対しその出力が正しいかをチェックする

    ソフトウェアテストという作業はプログラミングに劣らず難しい作業であり、かつ創造的な仕事であることが分かるでしょう。
    ソフトウェアのテストを不完全な形で実施させ、それを製品として出荷するということは、その製品を使う顧客にも迷惑がかかります。また、企業の良識を問われかねない自体を招く可能性もあります。

    0 件のコメント:

    コメントを投稿