テスト…どう書く??

こんにちは。株式会社フィックスポイントのよしだです。

今回は、新入社員のエンジニアが初めてテストを書くにあたり勉強した内容について発表がありました。

学習過程から実際のテストに至るまで盛りだくさんの内容でしたので、二部構成にてお送りします!

第一弾では、テストを行うにあたっての前提のお話から単体テストの紹介までをご紹介します。

下記の本から勉強したとのことですので、是非併せて参考にしてみてくださいね😊

bookplus.nikkei.com

前提

本の内容に入る前に、前提としてどの程度のテストが求められていたのかについて記載します。

  • PR を作成する際にレビュワーが実装を把握することを助けたい
  • 自分の実装にミスがないかをチェックしたい

開発者であるからには責任を持ってきちんとテストを行いたいということですね。

そのため、今回は単体テスト*1結合テスト*2にフォーカスし、且つブラックボックステスト*3を行うことにしたそうです。

ちなみに、弊社では QA 活動の一貫としてテスト講座を行っており過去の記事で紹介しておりますので、興味のある方は覗いてみてください!

blog.fixpoint.co.jp

勉強開始

それでは、発表者が学習していった内容に触れていきましょう✨

そもそも、テストを行うにあたり全パターンのテストを一つ一つ作っていくのは賢くないと言えます。

例えば、下記のパターンで人を雇いたいとします。

  • 0〜16歳:雇用せず
  • 16〜18歳:パートタイムで雇用
  • 18〜55歳:正社員で雇用
  • 55〜99歳:雇用せず

この場合、0~99までの入力で個別にテストを作成するのはとても効率が悪いですよね。

そこで、今回取り上げるテスト技法の出番という訳です!

同値クラステスト

まず、単体テストの一つである同値クラステストについて説明します。

同値クラスとは、モジュールで同等に処理されるデータの集合のことです。

そのため、同値クラスで括られた範囲でテストを行う場合、以下のことが言えます。

  • 同値クラス内のあるテストケースで欠陥が検出された場合には、同じ同値クラスの他のテストケースで同じ欠陥が検出される。
  • 同値クラス内のあるテストケースで欠陥が検出されない場合には、同じ同値クラスの他のどのようなテストケースでも欠陥は検出されない。

つまり、同値クラス内でテストが必要な値は一つだけになります。

もう少し詳しく言うと、同値クラスの中の代表値を決めて入力し、出力結果を確認する、ということですね。

概念の説明だけでは分かりづらいので、例を交えて技法の解説を見ていきましょう。

住宅ローンの会社を例に考えてみます。

まず、有効値を下表の通り定めます。

月収 契約軒数 申請者 住宅タイプ
1000 ~ 83333 ドル 1 ~ 5 軒 個人 一戸建て
タウンハウス
マンション

この有効値によるテストでは、以下の通りテストケースが考えられます。

  • 有効な値の組み合わせのテストケース
月収 契約軒数 申請者 住宅タイプ 結果
5000 1 個人 マンション
  • 無効値の項目を一つずつ変えた1組のテストケース
月収 契約軒数 申請者 住宅タイプ 結果
100 1 個人 マンション ×
5000 0 個人 マンション ×
5000 1 法人 マンション ×
5000 1 個人 ツリーハウス ×

注意点として、同値クラステストを適用するには、実際と同様の方法によりシステムが一つの同値クラス内のデータを処理している必要があります。

たしかに、せっかく区分を決めても実際の処理で同じ区分が同値クラスとして処理されていなかったら意味がないですよね。

実際の処理と同様の方法によりシステムがデータを処理できてこそ、初めて同値クラステストの意味があるということになります。

境界値テスト

続いて、同値クラステストの知識を前提として、境界値テストの説明に入ります。

境界値テストとは、同値クラスの境界にあたる値を使用してテストをする方法です。

同値クラスの端(=境界)には、エラーが潜んでいることが多いのだそうです。

最初に提示した雇用パターンの例で言うと、0,16,18,55,99歳が境界だと言えます。

  • 0〜16歳:雇用せず
  • 16〜18歳:パートタイムで雇用
  • 18〜55歳:正社員で雇用
  • 55〜99歳:雇用せず

境界値テストの手順としては、以下の通りです。

  1. 同値クラスを見つける
  2. 同値クラスの境界を見つける
  3. 各境界について、境界のちょうど上(境界)、境界のすぐ下(近傍①)、境界のすぐ上(近傍②)の値を一つずつ選んでテストケースを作成する

それでは、同値クラステストの際の例を再度用いて具体的に考えていきましょう😊

境界値テストになるとパターンが増えるため、月収と契約件数だけ有効値を設定してみます。

月収 契約軒数
1000 ~ 83333 ドル 1 ~ 5 軒

上記の有効値だと、テストケースの境界及び近傍の値は…

月収 契約軒数
下端 {999,1000,1001} | {0,1,2}
上端 {83332,83333,83334} | {4,5,6}

となります。

ちなみに、システムの全ての入力項目において、全境界値のテストケースを個別に作成できるケースはあまりないのだそうです。

そのため、通常は複数の入力フィールドを同時にテストできるテストケースを作成します。

今回の例だとテストケースは下表の通りになります。

月収 契約軒数 結果
1000 1
83333 1
1000 5
83333 5
1000 0 ×
1000 6 ×
83333 0 ×
83333 6 ×
999 1 ×
83334 1 ×
999 5 ×
83334 5 ×

テストケースの選び方をグラフにすると、下記の通りになります。

表の内容と同様ですが、分布が見た目で分かりやすいのではないでしょうか。

このように、同値クラスの境界からテストを行うパターンが境界値テストなのです。

おわりに

今回は、新入社員がテストを書くにあたり勉強した内容の発表について、第一弾をお送りしました。

次回の記事では、ペア構成テスト・ドメイン分析テストの紹介と実際に行ったテストの内容について記載する予定ですので、お楽しみに!

2023/02/08追記

続編を公開しましたので、是非続きを読んでみてくださいね♪

blog.fixpoint.co.jp





株式会社フィックスポイントでは、一緒に働いてくれるメンバーを募集しています!

詳細は、こちらをご覧ください。

*1:ユニット(モジュール)単位でのふるまいを確認するテスト

*2:複数モジュールを繋ぎ、一通りのふるまいを確認するテスト

*3:仕様と要件のみをもとにして作成するテスト