🕒 学習時間
7:00~10:30
🧑💻 実施した学習内容
✅テストを行う必要性→プログラムの詳細の部分をテストしなければならない。ここがおろそかになると手戻りが発生する。実行することで、製品の品質を高め、問題発生時、修正することができる。
✅なぜするか→製品が期待通りに動作するか確認するため。(仕様通り、パフォーマンスなど様々な要因がある)
(例:車)
①アクセルを踏んで前や後ろに進むか
②衝撃が加わった時。シートベルトは取れないか。エアバックが動作するか。
③エンジンがかかるのに3秒以内か。
商品はできたけど、品質が悪くて運用ができない物は意味が無い。
✅Webシステムのテスト(具体例:以下他にも様々)
①Sign inボタンを押下し、メールアドレスとパスワードが一致していれば、ユーザーページに遷移するか。
②Sign inボタンを押下し、メールアドレスとパスワードが一致していなければ、Sign inページに戻るか。
③パスワードのバリデーションは機能するか
✅テストではテスト設計を行う。必要なテスト、不要なテスト(重要)を決めて、どこまでの範囲でテストを行うかを検討し、定め、実践方法まで含める必要がある。不要なテストは特にクライアントとの合意が必要になる。
✅機能テストとは、システムの機能が仕様通りに動作するか確認するテスト。土台になる部分で重要。目に見えやすい部分。(例:以下)
1.ユーザーインターフェースのテスト
・システムの画面レイアウト、デザインに関するテスト。
・システムの画面レイアウトが期待通りか。
・フォントの大きさや色、ボタンや画像などの配置が正しいか
・フォームのバリデーションが動作するか。
2.手動テスト
・ユーザーがシステムを操作する際の手順や流れを手動でテストすること。
・ユーザーの入力に対して正常な応答を返すか確認すること。
・商品の詳細ページで「カートに追加」ボタンが正常に動作するか。
・商品の検索ページで「絞り込みフィルター」が正常に動作するか。
3.データ処理のテスト
・システム側の処理で、正しいデータの処理を行うかテストすること
・購入処理行った結果、購入履歴としてデータが保存されるか。
・過去の購入履歴を取得できるか。
・購入した商品を返品し、購入履歴のステータスを返品済みに変更できるか。
✅非機能テストとは、システムの性能や品質に関するテストで、機能テスト以外の要件をテストする。目に見えにくい部分。
1.パフォーマンステスト
・システムが要求される負荷やユーザー数に耐えられるか検証するテスト
・10万ユーザーから同時アクセスでも、応答時間0.1以内にレスポンスを返す
・11万ユーザーを超える同時アクセスの場合、1000名ずつアクセス順にレスポンスを返す
2.セキュリティテスト
・システムが安全にどうさするか確認するテスト
・同じIPアドレスから不正なリクエストが大量に送られた場合、そのIPアドレスからのアクセスブロックする
・不正ログインが検知された場合に、ユーザーのメールアドレス宛に確認通知を送る
・サーバーへの直接アクセスができないことを確認する
※セキュリティテストを強くしすぎると使い勝手が悪い。
3.互換性テスト
・システムがデバイスやブラウザで動作するか確認するテスト
・ECサービスはChrome/Firefox/safariで使用できるか確認する
・iOS/AndroidでECサービスを使用できるか確認する
4.可用性テスト
・システムが使用可能な状態である時間/割合を確認するテスト
・サーバーが落ちた際の、ダウンタイムが1分以内であるか
・サーバーが落ちた際の復旧時間を確認する
・複数のサーバーのうち1つが落ちても、別サーバーで処理を継続できることを確認する
✅単体テスト(具体例)
・小さな単位(ユニット)でうまく動いてるかどうかを確認するためのテスト
・商品検索の機能単体→検索フォームを入力して、正しい商品が検索結果に表示されるか
・カート機能単体→商品をカートに追加して正しい商品が追加されるか
・注文機能→注文情報を入力して注文者情報が正しく登録されるか
✅単体テスト手法
・ホワイトボックス→プログラムの構造エンジニアが作成したロジック制御の流れっていうものが 内部の処理も含めて正常かどうかを検証するテスト
※if文やfor文の配置、ループ処理の適切性、分岐処理のパターンテストについて具体的に言及し、ネストした分岐処理では掛け算でパターンが増加するため、シンプルな設計を重要視する
・ブラックボックステスト→内部構造を考慮せず期待通りの結果確認を行うテスト
※開発したエンジニアがブラックボックステストを行うのは困難であり、他の人に実施してもらうのが理想的だが、実際には作成者が両方のテストを行うことが多い
✅結合テスト(具体例)
・単体テスト済みモジュールの組み合わせて正しく動作するか確認するテスト
・商品検索とカート機能が連携して動作するか
・注文機能と在庫管理機能の連携して正しく更新されるか
✅結合テスト手法
・ビッグバンテスト→全てのモジュールを一度に組み合わせでテストする。全体の結合で問題がないことを確認するために用いられる。
※商品検索とカートとの連動みたいな所というのはよりビッグバンテストに近い
・トップダウンテスト→上位モジュールから順に結合テストを行う。下位のモジュールはダミーなので置き換えて上位のモジュールテストのテスト順に進める。
・ボトムアップ→下位モジュールから順に結合テストを行う。上位のモジュールは ダミーなどで置き換えて下位モジュールテストを順に進める。
✅トップダウン方式の利点
・商品検索機能は商品詳細画面への遷移、ワンクリック購入、カート追加など多くの機能と連携するため、これらの機能を仮実装として先に動作確認を行う重要である。
・カート機能やワンクリック注文機能について、実際のデータ処理は行わずに画面上での動作確認のみを先行して実施する手法を提案しました。これにより、画面レイアウトのテストや基本的な動作確認を効率的に進められる。
✅ボトムアップ方式
・商品詳細などの細かい部分から開始する単体テストに近いアプローチであり、アジャイル開発で使用されることがある
✅結合テストではビッグバンやトップダウンが、多用されることが多い。
✅受け入れテスト
・システムを納品するため、実際に利用する環境でシステムを利用して正しく動作るか検証する。
・ユーザーの購入処理のテスト→商品を購入し、支払いを行い、注文が正常に処理されるか、注文処理が完了したら、発送処理が行われるか。
・ユーザーの登録テスト→ユーザーが正常に登録でき、登録情報が正しく教示されるか登録内容が指定したメールアドレスに通知されるか。
※お客さんとかユーザーとかが実際にやってもらうっていうもの。理想はこちらが何も携わらなくても、 思っているとおりに動かしてもらって、思っているとおりに動いてることが確認取れたらもう一番ですね。
✅セキュリティテスト
・セキュリティテストとは、システムやアサーバーとの不具合、バグ、設計ミスなどから情報セキュリティ上の欠陥がないか調べるテストのことです。 セキュリティテストは非常に重要です。 セキュリティ上の欠陥により、 顧客情報を流出してしまうと、 事業へも甚大な被害をもたらし、 顧客からの信頼を大きく低下させてしまいます。
🔄 次回の目標・改善点
・様々なテスト手法があり、システムはそうやって運用されてると発見があり関心を持てた。
・実際にテストをシステムに導入する。