こんにちは!運営者のハックです。
今回はデイトラJava中級編Day35「テスト設計、テスト手法」の学習内容について記録します。
IT業界でも製品テストは重要です!
作成した製品というのは通常であれば作りっぱなしということはなくて、その製品がきちんと動作するか、などをテストします。品質を検査せずに納品する、というのはどこの業界でもほとんどありません。
それはIT業界でも同じです。
今回の講義ではWebシステムの開発現場で実際に考える「テスト設計」と、実際に行う「テスト手法」について学習しました。
そもそもなぜテストが必要なの?
例えば、オンラインショッピングサイトで考えてみます。
ユーザーが商品をカートに追加し、決済を試みる際、システムが正しく機能しなければ、決済エラーが発生するかもしれません。
これは顧客の信頼を失う原因となり、売上げの損失に直結します。
また、セキュリティが甘いと、ユーザーの個人情報が漏洩するリスクがあります。
そんなショッピングサイト使いたくないのにゃあ!
ねこ奈の買ったちゅーる100セットとかの購買履歴が筒抜けになるなんて嫌にゃー!
別にちゅーるの購買履歴ぐらい漏れてもいいのでは…
そのためテストを実行することで、サイトの品質を高め、問題がある場合は早期に発見し、修正することで問題を事前に防ぐことができるのです。
「テスト設計」を行い、各種「テスト手法」でテストせよ!
テストでは必ずテスト設計を行います。
テスト設計では何をテストするか、どういったテストをするべきかなどを検討し、定め、実践方法まで含めて考えます。
また、「開発段階」では色々な「テスト手法」に乗っ取ってテストを行います。
次から「テスト設計」と「テスト手法」について学んだ内容を紹介します。
テスト設計の種類
テスト設計には主に「機能テスト」と「非機能テスト」に分けられます。
- 機能テスト…システムの機能が仕様通りに動作するのかを確認するテストのこと。
- 非機能テスト…システムの性能や品質に関するテスト。機能テスト以外の要件をテストする。
どちらか一方だけ作成すればよいと言うものではなく、システムの要求に応じて、必要なテストを実施することが重要です。
「機能テスト」と「非機能テスト」の各テストの具体例について
『左のようなケーキ屋さんのホームページを納品するシチュエーション』で考えてみました!
※画像のページはデイトラWeb制作で作成したものであり、あくまで説明の補完としてイメージしてください。
機能テスト
システムの画面レイアウト、デザインなどに関するテストをすること。
- ホームページ上で商品の写真が適切に表示され、価格情報が明確であるか。
- フォントの大きさや色、注文ボタンやケーキの画像などの配置が正しいか。
ユーザーがシステムを操作する際の手順や流れを手動でテストすること。
- 商品の詳細ページで「ケーキを注文」ボタンが正常に動作するか。
- ユーザーの入力に対して正常な応答を返すかを確認するか。
システム側の処理により、正しいデータの処理を行うかをテストすること。
- オンラインでのケーキ注文情報が正しくデータベースに登録されるか。
- 顧客情報や注文内容が正確に処理され、在庫管理システムと連携しているか。
非機能テスト
システムが要求される負荷やユーザー数に耐えられるかどうかを検証するテスト。
- 特定の日(例えばクリスマス前)にアクセスが集中する場合でも、応答時間0.1秒以内にレスポンスを返し、注文処理が滞りなく行われるか。
システムが安全に動作するかどうかを検証するテスト。
- 顧客の個人情報やクレジットカード情報が外部からの攻撃によって漏洩しないか確認。
- 同じIPアドレスから不正なリクエストが大量に送られた場合、そのIPアドレスからのリクエストブロックする。
システムが様々なデバイスやブラウザで動作するかを確認するテスト。
- Chrome / Firefox / Safariでホームページを開いた際に、表示や機能に問題がないかを確認。
- iOS / Android のアプリでも表示や機能に問題がないかを確認。
システムが使用可能な状態である時間/割合を確認するテスト。
- ケーキ屋さんのホームページが24時間365日、中断なくアクセス可能であるか。
- ダウンタイムが1分以内に抑えられているかをテスト。
これまで紹介した機能テストと非機能テストは基本的にはシステムの開発が完了した「後」に行うテストになります。
テスト手法の種類
では開発中にはどのようにテストを行うのでしょうか?
開発段階で行うテストとして、以下のような種類があります。引き続きケーキ屋さんのホームページを納品するシチュエーションで考えました。
プログラムを構成する小さな単位(ユニット)が個々の機能を正しく果たしているかを検証するテスト。
- ホームページの各機能(商品一覧表示、カートへの追加、注文フォーム)を個別にテストし、それぞれが正しく動作するかを確認。
単体テストはさらに具体的な手法として以下の手段があります。
- ホワイトボックステスト…プログラムの構造やエンジニアが作成したロジック、制御の流れなどが内部の処理も含めて正常かどうかを検証します。
- ブラックボックステスト… プログラムの構造など内部を考慮せずに期待通りの結果を返すか検証します。
プログラムを構成する小さな単位(ユニット)が個々の機能を正しく果たしているかを検証するテスト。
- ホームページの複数の機能が連携して正しく動作するかを確認。
- カートに追加した商品が正しく注文フォームに反映されるかをテスト。
結合テストはさらに具体的な手法として以下の手段があります。
- ビッグバンテスト…全てのモジュールを一度に組み合わせてテストします。全体の結合に問題がないことを確認するために用いられれます。
- トップダウンテスト… 上位モジュールから順に結合テストを行います。「スタブ」という仮の下位のモジュールで置き換えて、上位モジュールのテストを順に進めます。
- ボトムアップテスト… 下位モジュールから順に結合テストを行います。「ドライバ」という仮の上位のモジュールで置き換えて、下位モジュールのテストを順に進めます。
プログラムを構成する小さな単位(ユニット)が個々の機能を正しく果たしているかを検証するテスト。ユーザーの観点で要件を満たしているかを確認する工程です。
- 実際のケーキ屋さんのスタッフや、一般の顧客を対象にホームページを使用してもらい、最終的なユーザー体験が要件を満たしているかを評価。
システムやサーバーなどの不具合、バグ、設計ミスなどから、情報セキュリティ上の欠陥がないか調べるテスト。
- 既に述べたセキュリティテストに加え、外部からの攻撃シミュレーションを行い、ホームページが安全に運用できるかを継続的に検証。
Webシステムにおいて代表的なセキュリティの問題についても学習しました。
- SQLインジェクション…不正なSQLコマンドをデータベースへ送り込むことでデータベースを操作する攻撃手法のこと。これによりデータの読み取りや書き込み、削除が可能になります。
- XSS(クロスサイトスクリプティング)…Webシステムに対して不正なスクリプトを注入する攻撃です。攻撃者はサイト上でのユーザー操作を盗み見たり、ログイン情報を盗む、悪質なサイトへ誘導したりすることができます。
また、自分で調べたセキュリティ問題について、以下のようなものがありました。
- CSRF(クロスサイトリクエストフォージェリ)…ユーザーがログインした状態で信頼できないサイトから悪意あるリクエストを送られ、ユーザーが意図しない操作を実行させられてしまう攻撃です。ユーザを攻撃用サイト(罠を仕掛けたサイト)に誘導し、攻撃用URLをクリックさせます。
- セッションハイジャック…攻撃者がユーザーのセッションIDを盗み取り、そのIDを使用してユーザーになりすまし、認証済みのセッションで悪意のある操作を行う攻撃です。攻撃者はユーザーのアカウントにアクセスし、個人情報を盗んだり、不正な操作を行ったりすることができます。
うわぁ…個人情報漏洩って怖いのにゃあ…
製品テストがいかに大事かって分かるのにゃ。
それが、デイトラ講師によると「何故かIT業界は目に見えない、体に入れない、というのを良いことに「テストを適当にする」という事が稀によくあります」とのことです。
えっ…マジで!?
まとめ
システムが仕様を満たしていることと品質が保証されることは同じではないため、バグの発見はテストの重要な目的です。システムは変化するため、テストは継続的に行う必要があります。
本来満たしておくべきものが満たされていないと言うバグをどれだけ見つけられるかと言う観点が大切で、継続的にテスト実施する中で、何かしらのバグを発見できれば「良いテスト」と言えます。
ハックがプロになったら製品テストはちゃんとするようににゃ!
「テストの結果問題が無かった」で済ませるのではなく、「改善点やバグを必ず見つけてやるぞ」という心構えでテストを行うように心がけたいと思います。
次回の記事では課題取り組みの様子を紹介します
今回の講義では「三角形の種類を判定するアプリケーション として実施するべきテストを考えてみましょう!」という課題が出されました。
具体的な課題内容と取り組みの様子は次回の記事で紹介します。
回答は既にデイトラメンターの方にレビューを依頼してチェックを受けていただきました。
「実際に製品のテストを考えるにはどうするか」を考える練習として課題に取り組みましたので、テスト設計について気になった方は次回の記事を参考にしていただけると幸いです。
以上で今回の学習記録を終えます。
ここまでご覧いただきありがとうございました。
コメント