こんにちは!運営者のハックです。
今回は前回の記事の最後で出題された課題について、取り組み内容を記録します。
課題「『三角形の種類を判定するアプリケーション 』として実施するべきテストを考えてみよう!」
【アプリケーションの仕様】
三角形の各辺の長さを入力して、計算するボタンを押すと三角形の種類をアラートに表示します。
三角形の判定条件
– 3つの辺の長さが等しい場合、正三角形と表示する
– 2つの辺の長さが等しい場合、二等辺三角形と表示する
– 3つの辺の長さがどれも異なる場合、不等辺三角形と表示する
入力項目の制約
– 正の整数のみ
– 半角数字のみ
– 1〜99まで
入力規則に違反する場合、違反した項目の下部に「1から99の整数を半角数字で入力してください」というメッセージを表示します。
入力がない場合、違反した項目の下部に「入力してください」というメッセージを表示します。
引用:Triangle App
それぞれのテストごとに当てはめて考える
前回の記事で学習した「機能テスト」と「非機能テスト」「テスト手法」に当てはめて考えました。
機能テスト
機能テストは「ユーザインターフェースのテスト」、「手動テスト」、「データ処理のテスト」があったのにゃ。
一つずつ確認していきましょう!
ユーザインターフェースのテスト
ユーザインターフェースのテストはシステムの画面レイアウト、デザインなどに関するテストのことでした。
サイトを見ると三角形の辺の値を入力する「入力フォーム」と、「計算ボタン」が表示されていることが分かります。
そーすると、「入力フォーム」の大きさとか、「計算ボタン」の位置とか、そういったデザインに関することを確認するのかにゃ?
そうですね。
後は「入力フォーム」にきちんと数値を入力できるかとか、エラー表示の領域が正しいか、など考えました。
- 入力項目、計算ボタン、エラーメッセージ表示領域が適切に配置されているか確認する。
- 入力項目を選択することができ、キーボード入力が可能か。
手動テスト
手動テストはユーザーがシステムを操作する際の手順や流れを手動でテストすることでした。
サイトを見ると、「入力フォーム」が三か所あり、それぞれに辺の長さの値を入れることができることが分かります。
ここで課題のアプリケーションの仕様を再度見てみましょう。
【入力項目の制約】
- 正の整数のみ
- 半角数字のみ
- 1〜99まで
- 入力規則に違反する場合、違反した項目の下部に「1から99の整数を半角数字で入力してください」というメッセージを表示します。
- 入力がない場合、違反した項目の下部に「入力してください」というメッセージを表示します。
システム操作の手順とか流れってことは、何かを入力したらその後どうなるか、を確認すればいいってことかにゃ?
「手動」ってことは、実際に入力して結果がどうなるかを確認する、ということだと思うにゃ。
つまり、アプリケーションの仕様どおりにちゃんと動くかどうかをここで確認するということ、だと思います。
制約の条件や入力規約違反の場合を踏まえると、
- 【正の整数のみ、半角数字のみ、1~99まで】を満たす数字を入力したら「計算する」ボタンを押せるかどうか。
- 入力規約違反を満たした場合、該当のエラーが表示されるかどうか。
以上の条件をテストする必要があると考えました。
- 入力項目に1~99までの整数を入力できるか確認する。
- 全角入力、数字以外の入力など、各項目の中で一か所でも入力規則に違反する値を入力した際にエラーが表示されるか確認する。
- 入力項目が一つでも空欄の場合、計算ボタンを押しても計算されず、違反した項目の下部に「入力してください」というメッセージが表示されるか確認する。
- 入力規則に乗っ取った数値が入力された場合にのみ「計算ボタン」を押すことが可能か確認する。
データ処理のテスト
データ処理のテストはシステム側の処理により、正しいデータの処理を行うかをテストすることでした。
サイトを見ると、「「計算する」ボタンを押すと結果が表示される」ことが推測されます。
ここで課題のアプリケーションの仕様を再度見てみましょう。
【三角形の判定条件】
- 3つの辺の長さが等しい場合、正三角形と表示する
- 2つの辺の長さが等しい場合、二等辺三角形と表示する
- 3つの辺の長さがどれも異なる場合、不等辺三角形と表示する
「正しいデータの処理の行うか」ってことは、三角形の辺の長さに応じて三角形の種類が表示されるってことでいいのかにゃ?
その通りだと思います。
- 3辺が等しい、2辺が等しい、全ての辺が異なる数値を入力し、それぞれ正三角形、二等辺三角形、不等辺三角形と表示されるか確認する。
(…なーんかひっかかるとゆーか、見落としてることがあるような気が…うーん…)
それでは次は「非機能テスト」について確認していきましょう!
非機能テスト
非機能テストは「パフォーマンステスト」、「セキュリティテスト」、「互換性テスト」、「可用性テスト」があったのにゃ。
こちらも一つずつ確認していきましょう!
パフォーマンステスト
パフォーマンステストはシステムが要求される負荷やユーザー数に耐えられるかどうかを検証するテストでした。
考えるまでもなく、文章そのまんまのテストだにゃ。
- 大量のリクエストを同時に送信した場合にも、アプリケーションのレスポンス時間が適切に保たれるか確認する。
セキュリティテスト
セキュリティテストはシステムが安全に動作するかどうかを検証するテストでした。
- 想定外の入力に対しては、処理が強制終了されるか確認する。
- 入力項目にスクリプトやその他の不正な入力を行っても、システムの書き換えや不正アクセスがされないことを確認する。
これも言葉どおりのテストなんだけどさぁ…
セキュリティテストって実務上では具体的にどうやるのにゃ?
少し調べたのでまとめますね。
【自動スキャンツールを使用する】
- 脆弱性スキャナー…自動化されたツールを使用してアプリケーションをスキャンし、既知のセキュリティ脆弱性(例:SQLインジェクション、XSSなど)を検出する。
- コードスキャナー…ソースコードを分析してセキュリティ上の問題を特定するツールを使用する。
【ペネトレーションテスト(侵入テスト)をする】
- 専門のセキュリティ専門家が攻撃者の視点でシステムをテストし、脆弱性を発見してもらう。
【インシデントレスポンス計画のテストを行う】
- 実際にセキュリティインシデントが発生した場合の対応プロセスをテストするために、シミュレートされた攻撃(テーブルトップ演習など)を行う。
色々なセキュリティテストがあるんだにゃあ。
互換性テスト
互換性テストはシステムが様々なデバイスやブラウザで動作するかを確認するテストでした。
引用:Triangle App
左の画面はスマートフォン表示にしたものです。
スマートフォン表示にしても辺の入力を行うと、対象の種類の三角形が正常に表示されるのを確認しました。
パソコンからは見れるけどスマホからじゃ見れないとか、Chromeから動くけどSafariからじゃ動かない、なんてことにならないようにするんだにゃ。
- 異なるウェブブラウザ(例: Chrome、Firefox、Safari)やデバイス(PC、スマートフォン)でアプリケーションが正常に動作するか確認する。
可用性テスト
可用性テストはシステムが使用可能な状態である時間/割合を確認するテストでした。
サーバーが落ちたときにどうするかってことかにゃ?
そうですね。
ユーザーがいつでも必要なサービスにアクセスできることを保証するために、サーバーが落ちた際のテストも重要です。
- システムやサーバーが落ちた際のダウンタイムが1分以内である。
- システムやサーバーが落ちた際、正常な状態に復旧するまでの時間を確認する。
- システムやサーバーが落ちた際、別のサーバで処理を継続可能であることを確認する。
それでは最後に「テスト手法」について考えましょう。
テスト手法
テスト手法は開発中に行うテストのことでした。
あにゃ?サイトはもう完成しているのにゃ。
ということは「テスト手法」について考える必要はないのにゃ?
今回の課題ではそうなりますね。
ただ、実務上ではシステムを開発しながら「単体テスト」、「結合テスト」、「受入テスト」、「セキュリティテスト」をその都度行う必要があります。
メンターへレビュー依頼前に、ChatGPTでチェックしました
今まで考えたテストの内容が明らかに間違っていないかを確認するため、ChatGPTで事前チェックを行いました。
でもChatGPTに聞いちゃったら学習にならないんじゃにゃいの?
なので、プロンプトを工夫して直接的な解答を聞かないようにしました。
【誤り】のときのみアドバイスをくれる自習用プロンプトを公開!
スクールの課題で、三角形の種類を判定するアプリケーション として実施するべきテストケースを考えることになりました。 テストケースの種類は「ユーザインターフェースのテスト」、「手動テスト」、「データ処理のテスト」、「パフォーマンステスト」、「セキュリティテスト」、「互換性テスト」、「可用性テスト」で考えています。 アプリケーションの使用は【条件】のとおりです。 これを踏まえて###指示###を出します。 【条件】 ※当ブログ記事最初の「アプリケーションの仕様」全文をコピペ。 ###指示### ①これから各テスト種類ごとに私が考えたテストの内容を入力します。今回のプロンプトに対しては、【テスト内容の回答をお願いします】と返答してください。 ②あなたは具体的な解答を言わず、【正しい】か【誤り】であるかのみ回答してください。 ③【正しい】か【誤り】であるか回答後、【誤り】であった場合はアドバイスやヒントを出してください。
左の画像のように、回答が正しかった場合は【正しい】とだけ表示されます。
引用:ChatGPT誤っていた場合はアドバイスやヒントが表示されます。
※左の画像はわざと誤った回答を入力した際に表示されたものです。
質問を終了する時は以下のプロンプトを入力します。
質問は以上です。###指示###を解除してください。
プロンプトの文章を変えると他の課題にも使用できます。
解答を聞かずに誤っている部分だけ訂正したい場合などに使用できると思います。
コピーして是非使用してみてください!
メンターにレビューしていただきました
今まで考えたテスト設計をChatGPTですべて確認し、チェックが完了したらデイトラメンターの方にレビューを依頼しました。
ChatGPTで確認したんだから、完璧なのにゃ!
そう思ったでしょ?
実は…【完全に見落としている部分】があります。
この先、課題の解答のネタバレがあります!
解答は隠してありますが、デイトラJava受講生でまだ課題が済んでいない方や、自分で考えてみたい方は閲覧を控えてください!
ネタバレ注意(クリックすると開きます)!
・「入力項目に1~99までの整数を入力できるか確認する」
→1~99までの整数をいちいち入力するのは現実的ではありません。この場合「同値分割」という手法を使用します。具体的どの値を入力してテストするかまで整理してみてほしいです。
・「2辺が等しい場合」
→例えば、 1 、99、 1 のような入力値を入れた場合、二等辺三角形と判定されるのが正しいのかどうかについてご一考下さい。
…あーっっっ!?
そこまで言われて思い出したのにゃ!?
完全に見落としていました…
三角形が形成できないパターンがあることに。
三角形を形成するには、2辺の和がもう一辺よりも必ず大きくなる必要があります。
例えば3辺がそれぞれ1㎝、2㎝、3㎝であった場合、三角形を形成できず直線となります。
メンターさんの解答を踏まえると、入力は4パターン考える必要があるということかにゃ。
それが「同値分割」の考え方です。
同値分割…テストをする時にたくさんの試験をしなくても済むようにする方法です。この方法では、入力される情報をいくつかのグループに分けます。それぞれのグループから一つの例を選んでテストをします。
「同値分割」の手法から、三角形の種類について4つのパターン分けを具体的に考えました。
①正三角形を形成する入力(例: すべての辺が同じ長さ、例えば3辺ともに5)
→『a=b=c、ただし 1 <= a,b,c <=99 』の条件を満たす数値
②二等辺三角形を形成する入力(例: 2辺が同じで1辺が異なる長さ、例えば2辺が5、もう一辺が3)
→『a=b≠c, b=c≠a, a=c≠b、ただし 1 <= a,b,c <=99 かつ a+b>c, b+c>a, a+c>b』の条件を満たす数値
③不等辺三角形を形成する入力(例: 3辺がそれぞれ異なる長さ、例えば3、4、5)
→『a≠b≠c≠a、ただし 1 <= a,b,c <=99 かつ a+b>c, b+c>a, a+c>b』の条件を満たす数値
④三角形を形成できない入力(例: 2辺の和がもう一辺よりも小さい、例えば1、2、3)
→『a+b<=c, b+c<=a, a+c<=b の条件を満たし、かつ、1 <= a,b,c <=99』の条件を満たす数値
ねーねーモナ、課題のサイトで三角形を形成できない入力をしてもエラーにはならなかったのにゃ。
その場合、新たにメッセージを追加する必要があると思います。
以下のように④の条件を満たした場合にメッセージが表示されるように考えました。
上記④の条件を満たす場合、「計算ボタン」を押した際に「入力された辺の長さでは三角形を形成できません。三角形を形成するには、どの2辺の合計も残りの1辺よりも大きくなければなりません。」というメッセージが表示されるようにする。
以上の回答を追加でレビュー依頼したところ、正解となりました!
今回の課題では「三角形が成立しないパターンについてあえて考慮漏れさせています」とのことだそうです。
一見問題がなさそうに見える仕様でも、いざ実行してみると矛盾やバグが見つかる可能性があるよって教えだったのにゃ。テストがいかに大事かが分かったのにゃ!
まとめ
今回は実際のアプリケーションを例題として、テスト設計について考えました。
「デイトラ」の良いところとして、ただ教材どおりに教えるだけではなく、実務だったらどう考えるかという実践的な内容を学習できる点であると、今回の課題を通じて改めて思いました。
実際の現場ではもっと複雑なアプリケーションの仕様をテストするので、課題のように簡単にバグが発見できるとは限りません。
今回の課題を通じて現場で通用する力が少しでも身に付くように、しっかりと内容を復習します。
以上で今回の学習記録を終えます。
ここまでご覧いただきありがとうございました。
コメント