Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
3
Help us understand the problem. What is going on with this article?
@Kaito_Noguchi

テストを制する者は開発を制す🏀

More than 1 year has passed since last update.

はじめに

テストを完璧に実施できれば、バグも発生せず開発を制したと言っても過言ではないぐらい開発者にとっては大切なテスト。
そんなテストの方法について知見があまりなかったので調べてみた。
初歩的なところから記載していく。

テストの種類

テストの種類は大きく分けて以下の2種類が存在する。

  • ホワイトボックステスト
    • プログラム内部の関数やメソッド内部の条件分岐や繰り返し文などを確認するテスト。 また、テストでどのぐらいの条件を網羅するかはカバレッジ(網羅率)によって判断する。主に単体テストとして行われる。
  • ブラックボックステスト
    • プログラムの入出力だけに注目し仕様通りにプログラムが動作するかをテストする。 テストケースの作成などに関して、内部の処理手順やプログラムの構造などは考慮しない。 主に機能テストやシステムテストとして行われる。

ホワイトボックステスト

ガバレッジを意識して単体テストを行う事でどれだけテストが網羅されているかを判断する事ができる。

カバレッジ(網羅率)

所定のテストがどれだけ網羅されているかを割合で表したもの。

コードカバレッジ

テスト対象となるプログラムコード(内部ロジック)全体の中で、テストが行われた部分が占める割合。

hoge.swift
    func hoge() {
        // 条件分岐A
        if (条件A) {
            // 処理A
        } else {
            // 処理B
        }

        // 条件分岐B
        if (条件B || 条件C) {
            // 処理C
        } else {
            // 処理D
        }
    }

C0(ステートメントカバレッジ / 命令網羅)

処理に着目して全ての処理が1度以上行われる様にテストする。
処理A, 処理B, 処理C, 処理Dの全てを通る様にテストを行う。

パターン 確認処理
1 処理A
2 処理B
3 処理C
4 処理D

処理のみに着目しているので4パターンで確認する。
処理のみに着目しているので条件分岐の内容までは詳細に確認しない。

C1(ブランチカバレッジ / 分岐網羅)

条件分岐に着目して条件式のすべての組み合わせ(true, false)をテストする。
あくまで条件分岐に対しての確認なので条件Bと条件Cの値はそれぞれで確認せずに条件分岐Bとして扱う。

パターン 条件分岐A 条件分岐B
1 true true
2 true false
3 false true
4 false false

C2(コンディションカバレッジ / 条件網羅)

条件分岐内の条件に着目して全ての条件結果をテストする。
条件分岐Bも条件Bと条件Cに分けて全てのパターンを網羅する様にテストを行う。

パターン 条件A 条件B 条件C
1 true true true
2 true true false
3 true false true
4 true false false
5 false true true
6 false true false
7 false false true
8 false false false

ブラックボックステスト

主に結合試験などで行われるテスト方法。
全てのパターンを網羅する事が出来れば良いが条件が複雑になる程、テストの数が膨大になってしまう。
そこで同値分割法と境界値分析利用する事により工数を削減しつつテストの品質を担保する事が出来る。

同値分割法

正常系の値を有効同値、準異常系・異常系を無効同値に分類してテストする方法。

例:月の値を例とした場合には以下の様に分類される。

有効・無効
0 無効同値
1~12 有効同値
13 無効同値

境界値分析

境界値分析とは、有効同値と無効同値を組み合わせるなどして、処理と処理の境界となる値(境界値)をテストする手法。

例:月の売り上げを例とした場合には以下の様に分類される。
(※4月~7月は繁忙期とする)

有効・無効 繁忙期 境界値 備考
0 無効同値 × 無効同値の境界線
1 有効同値 × 有効同値の最小値
2 有効同値 × ×
3 有効同値 × 繁忙期との境界線(-1)
4 有効同値 繁忙期の最小値
5 有効同値 ×
6 有効同値 ×
7 無効同値 繁忙期の最大値
8 無効同値 × 繁忙期との境界線(+1)
12 無効同値 × 有効同値の最大値
13 無効同値 × 無効同値の境界線

まとめ

何処をテストするかも重要だが、それと同じぐらいテストしないケースを決める事も重要だと学ぶことができた。
これからも学んだ事を更新していこうと思う!

3
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
tabelog
お店選びで失敗したくない人のためのグルメサイト「食べログ」を開発しています

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
3
Help us understand the problem. What is going on with this article?