1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

「ソフトウェアテストの教科書」を読んだので、学びをまとめる

Last updated at Posted at 2022-11-06

注意書き

個人の学びのメモとしてまとめている側面が大きいため、読み物としてはあまりまとまっていません。
あらかじめご了承ください。

該当の書籍

  • 【この1冊でよくわかる】 ソフトウェアテストの教科書 [増補改訂 第2版]
  • 布施昌弘:著者 / 江添智之:著者 / 永井努:著者 / 三堀雅也:著者 / 石原一宏:監修 / 堀明広:監修

なぜ読んだのか

  • なんとなくソフトウェアのQAに対する解像度が低いような気がしているため、テストに関する体系的な知識を手に入れたい
  • 雰囲気でテストを書いていたり書いていなかったりするので、堅牢なソフトウェアを作るための知識を手に入れたい

何を学んだのか

  • テストを書く際に、何をテストするべきなのかの勘所
  • ソフトウェアを設計する際に検討するべき項目
    • 「何をテストするべきか」の項目を知る事が、「設計する際に注意すべきポイント」にもつながる

具体的に得た知識

ソフトウェアの品質とは

ソフトウェアの品質を評価する際の一つの考え方として、以下3点が存在する。

  • 当たり前品質
    • ユーザーが最低限、ソフトウェアに期待する品質。これが達成されていなければ、製品として販売するべきではない。
    • 例えばYouTubeで言うと「動画の視聴ができること」など。
  • 一元的品質
    • 当たり前品質をMUSTだとした際に、必ずしも満たす必要はないが、満たしていなければユーザーの不満となり得る品質。
    • 例えばYouTubeで言うと「動画を視聴する際に、自由に解像度を選べること」など。
  • 魅力的品質
    • 一元的品質をBESTだとした際に、Betterに位置付けられるもの。実現できなくても仕方なくユーザーの不満にはなり得ないが、実現できればソフトウェアの評価を大きく向上させる品質。
    • 例えばYouTubeで言うと、「動画を視聴する際に、クライアントのネットワーク速度から自動的に最適な解像度を選び、配信する」など。

テストの種類と、各テストケースが期待する目的

テストの種類や考え方は多数存在するが、一つの切り口として以下のような考え方ができる。

  • 内部の処理に注目するかどうか
    • ホワイトボックステスト
    • ブラックボックステスト
  • 実際にソフトウェアを動作させるかどうか
    • 静的テスト
    • 動的テスト
  • 各開発工程に適したテスト
    • 単体テスト
    • 結合テスト
    • システムテスト

具体的なテスト手法

ホワイトボックステスト

一つの機能やモジュール等の単体テストを行う際に用いる手法。

  • 制御フローテスト(命令文の処理順序を確認する)
  • データフローテスト(データの流れを確認する)

制御フローテストでは、論理構造(条件分岐)の正しさを図る。そのための手法は幾つか存在するが、もし可能なのであれば全ての条件に対するテストをカバーするのが望ましい。
データフローテストでは、使われていない変数等がないかをテストする。こちらはRubyにおいてはあまり意識する必要がなさそう。

ブラックボックステスト

ブラックボックステストは、主に機能テストとシステムテストにおいて用いる。
内部処理がどのように動いているのかは気にせず、入力や出力が意図した通りに行われているかをテストする。

ブラックボックステストの手法は複数存在するが、以下について記述していく。

  • 境界値テスト、同値分割テスト
  • デシジョンテーブルテスト
  • 状態遷移テスト

境界値テスト、同値分割テスト

仕様の境界となる値に対してテストを行う。例えばユーザー名を入力するフォームがあったとして、

  • 数字、英大文字、小文字のみ入力可能
  • 5文字以上、15文字以下のみ有効

が仕様だとするならば、以下のように境界値のテストを行う。

  • 4文字、16文字の数字、英大文字、小文字を入力して入力がされない事を確認する
  • 5文字、15文字の数字、英大文字、小文字を入力して入力される事を確認する

※境界値のテストを行う際は、値の最小単位に注意する。整数なのか少数なのか等。

デシジョンテーブルテスト

デシジョンテーブルテストでは、複数の条件に着目してテストを行う。
複数の条件とは具体的に、複雑な条件分岐の事を指す。

具体的な例として、以下のような仕様をモデルとしてみる。

  • 12歳以下は、入場料が600円
  • 13歳以上、18歳以下は入場料が900円
  • 19歳以上は、入場料が1200円
  • 土曜日は入場料が2倍になる(土曜日価格)
  • 毎月15日は、年齢を問わず入場料が500円になる(遊園地デー)

このような場合、例えば一例として以下のようなコードが考えられる。

# Ruby
return 500 if 15

admission_fee = 0
if 12
    admission_fee = 600
elsif 13歳以上且つ18歳以下
    admission_fee = 900
elsif 19歳以上
    admission_fee = 1200
end

return admission_fee * 2 if 土曜日
admission_fee

まず、毎月15日は年齢を問わず一律で入場料が500円になるため、土曜日の場合は500円を返却する。
次に、土曜日の場合は入場料が倍になるため、各年齢層の価格に対して2倍の掛け算を行い、その値を返却する。
15日でもなく土曜日でもない場合は、普段の入場料を返却する。

このように、条件が複数存在し、条件によってリターンを変える必要がある場合は、デシジョンテーブルテストが適している。
以下のような表を作成し、組み合わせ毎の抜け漏れを減らす事ができる。

スクリーンショット 2022-11-06 23.01.47.png

ただし、このデシジョンテーブルは項目が増えるほどテーブルが膨大になっていくため、重複している項目等はうまく消去していく必要がある。

具体的にどのようなテクニックがあるのかは、「ソフトウェアテストの教科書」を参照されたし。

状態遷移テスト

ここは現在学習中のため、理解できたら書く。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?