初心者向きソフトウェアのテスト手法紹介(「はじめて学ぶ ソフトウェアのテスト技法」要約)
先日ソフトウェアのテストに関する本を読んだため、その内容を簡単に整理したいと思います!
- 作者: リー・コープランド,宗雅彦
- 出版社/メーカー: 日経BP
- 発売日: 2005/11/03
- メディア: 単行本
- 購入: 24人 クリック: 539回
- この商品を含むブログ (51件) を見る
仕事でPythonスクリプトのテストをする機会があったのですが、テスト自体全くやったことがなかったため詰められてしまい、反省の念から読むことにしました。🤗
僕自身が全くの初心者であるため、以下の内容は超簡単な、テストをやったことがない人向けのものになっているかと思いますがご容赦ください!
テスト概要
テストとはソフトウェアにバグがないかを確認するものですが、一般にバグがないプログラムを作成することはほとんど不可能なものらしいです。
また、ソフトウェアが実際に行う可能性のある全ての挙動を確認することも実質的に不可能だと言われています。
例えば「与えられた整数の絶対値を返すソフトウェア」があったとして、このソフトウェアの挙動全てを確認するには、この世にある全ての数に関して動作をさせなければなりません。
今回紹介していくテスト手法は、そうした無限に存在するテストケースの中から、効率よく、網羅的なテストを実施するための、テストケースのサブセットの作成方法を提供するものとなっています。
テストのレベルに関して
データサイエンティストとしては、実際に行うのは下記の「単体テスト」、「結合テスト」くらいかと思いますが、テスト全体のレベル構成としては以下のようになっています。
ソフトウェアの最も小さい部品に対して行うテストです。基本的には1人のプログラマの成果物、1個のファイルが対象の粒度となるようです。
単体テストを行ったシステムをサブシステムとして結合したシステムに対して行うテストです。
顧客に届ける製品を作り上げている全てのソフトウェアを結合した、最も高いレベルの統合システムに対して行うテストです。
- 受け入れテスト
顧客が実際にソフトウェアを受け入れる際に問題がないかを確認するテストです。
システム設計とテスト
テストを行う際には、対象となるシステムがどのような設計で開発されたかということが重要となります。特に、「契約による設計」と「防御的設計」では行うテストが大きく変わります。
前者の場合、システムが正常に動作するために必要な事前条件が整っている、という前提を置いています。「与えられた整数の絶対値を返すソフトウェア」の場合、「入力がまともな整数(-1, 10など)」といった仮定を置いたテストを行うことになります。
後者の場合はその逆で、「与えられた整数の絶対値を返すソフトウェア」のテストとして「入力が整数か」といったこともテストを行う必要があります。
以下ではよりシンプルな「契約による設計」に基づいたテストについて説明していきます。
ブラックボックステスト
ブラックボックステストとは、要件と仕様書に基づき行うテストのことです。「ホワイトボックステスト」との違いとして、ブラックボックステストではテスト対象ソフトウェアの内部パス、構造、実装を知らない状態で行うものだという点が挙げられます。
また、ホワイトボックステストは、「全スクリプトのうちどのくらいの部分を実際にテストできたか」「全制御フロー(if分とかで分岐するやつ)のうちどのくらいテストできたか」といった「カバレッジ」に関連したテストとなります。(今回は省略します)
ディシジョンテーブルテスト
ディシジョンテーブルとは複雑なビジネスロジックを整理した表のことで、具体的には以下のようになります。
入力 | ルール1 | ルール2 | ルール3 | ルール4 |
---|---|---|---|---|
条件1:手持ちの現金が十分か | Yes | Yes | No | No |
条件2:ガッツリ飲みたいか | Yes | No | Yes | No |
アクション1:トリキに行く | No | Yes | No | Yes |
アクション2:鳥メロに行く | Yes | No | Yes | No |
アクション3:お金を下ろす | No | No | Yes | No |
それぞれのルールに対して、境界値テストなどの手法を用いて1つ以上のテストケースを作成することになります。
以上、簡単になってしまいましたが初心者向きソフトウェアのテスト手法紹介でした!