Upgrade to Pro — share decks privately, control downloads, hide ads and more …

2022年度新卒技術研修「 ソフトウェアテスト」講義

2022年度新卒技術研修「 ソフトウェアテスト」講義

ソフトウェアテストの基礎を学ぶ講義です。ハンズオンも載せています。
・講義
 ・ソフトウェアテストの概要
 ・自社で取り扱われるソフトウェアテストを3種類紹介
  ・単体テスト
  ・結合テスト
  ・ステージング環境での受け入れテスト
・ハンズオン
 ・Laravelで構築されたサンプルアプリケーションを題材に単体テストを書く体験をする

094e424062f60b011a0d0b294fbc17e4?s=128

excitejp
PRO

June 15, 2022
Tweet

More Decks by excitejp

Other Decks in Technology

Transcript

  1. ソフトウェアテスト 2022新卒研修講義 2022/04/19 岡村啓二郎

  2. 講義・ハンズオン ・講義 10分  ‐ ソフトウェアテストと  ‐ 実務で使われているソフトウェアテスト 紹介 ・ハンズオン 80分

     - 単体テスト  - DI  - テストダブル
  3. 講義 目標 ・ソフトウェアテストが何かを知る ・実務で使われているソフトウェアテスト 種類を知る

  4. ソフトウェアテストと 何か

  5. ソフトウェアテストと 公式 定義(IEEE) ある特定 条件化でシステムまた コンポーネント を操作するプロセスであり、 そ 結果を観察また 記録して、

    システムまた コンポーネント ある側面を評価すること 引用: 日経BP社, 日経BPマーケティング, じめて学ぶソフトウェア テスト技法 p11
  6. 言い換えてみると... 様々なテストケースを作成し、 それに沿ってシステムを実行し、 ソフトウェア 品質を確かめる作業

  7. ソフトウェア 品質 https://kyog02.hatenablog.com/entry/2019/11/17/012531

  8. ど 品質を評価したいかによって ソフトウェアテスト 種類も変わってくる

  9. ソフトウェアテスト 種類 ・単体テスト(ユニットテスト) ・結合テスト ・ステージ環境で リリース前テスト

  10. 単体テスト(ユニットテスト) ・クラスやメソッドなど、単一 プログラム テスト ・PHPUnit/unittest(python)/JUnit

  11. 単体テスト(ユニットテスト) 例 テスト対象 テストコード テスト実行

  12. 結合テスト ・複数 プログラム、モジュールを組み合わせたテスト ・実装中および完了後に行う

  13. 結合テスト ブラウザ DB アプリケーション API classA object const method method

    method method classB method classC ✅ ✅ ✅ log
  14. ステージ環境で リリース前テスト ・機能要件を満たせているかどうかを確認する ・ユーザ 操作と同じことを行う

  15. ステージ環境 本番DB 本番とほとんど同じ構成で構築された環境 DBやネットワークやサーバなどアプリケーション以外 構成が本番と同じ 本番環境 ステージ環境 本番サーバ 本番NW お客様

    運営 ✅ ✅
  16. まとめ ・ソフトウェアテスト ソフトウェア 品質を確かめる工程 ・ソフトウェア 品質 たくさんある ・社内で 主に3種 ソフトウェアテストが用いられている

  17. ハンズオン

  18. 準備 ・F5 VPN Clientを終了(起動しているひとだけ) ・git clone https://github.com/keijiro-okamura/unittest-handson-2022 ・git checkout init_handson

    ・make init ・open http://localhost/horoscopes/ ・make test
  19. 単体テストを書くとどんな良いことが? ・良いこと 結合テスト時 デバッグが楽になる テストコードが仕様になる コード 品質があがる(テスト容易性) ・一方でこんな意見も ... テストコードを書く工数が発生する

  20. 目的 ・単体テストを書いてみる ・依存性注入(DI)をやってみる ・テストダブルを使ってみる

  21. ハンズオン 流れ 学習 ・スライドで 用語 説明 ・実装例 解説 📝 体験

    ・ライブコーディング ・お手本見ながら実践
  22. テストケースを作ってみよう

  23. テストケース作成に役立つ技法 ・ブラックボックステスト ・ホワイトボックステスト

  24. ブラックボックステスト テスト対象 入力 出力  テスト対象 実装 中身 見えないも とし、要件や仕様から  それぞれ

    入力値に対して、期待する出力値を決定し  実際に入力を行い、実際 出力値と期待する出力値 比較を行う 仕様例: 金額を入力として受け取り、 税込み金額を出力する 入力100, 期待する出力110
  25. ホワイトボックステスト テスト対象 入力 出力 A B C D テスト対象 実際

    内部構造を分析し、 テスト対象 ソフトウェア 特定 パスを実行するような入力を決定し、 実際に入力を行い、実際 出力値と期待する出力値 比較を行う 例: 下記 図で 、A->B, A->C->Dを経由する2パターン テストケースが考えられる if
  26. 📝 テストケース作成

  27. ブラックボックステスト 誕生日を入力すると、誕生日/星座名が返却される

  28. 📝ブラックボックステスト src/tests/Feature/HoroscopesGetRequestTest.php

  29. ホワイトボックステスト

  30. 📝ホワイトボックステスト src/tests/Feature/HoroscopesGetRequestTest.php

  31. ⚡ 仕様変更 ⚡

  32. 星座取得APIが完成した で そっちを使うようにしてください

  33. 📝仕様変更 src/app/Http/Controllers/HoroscopesController.php

  34. 📝 テストダブルを利用するために 実装を見直そう

  35. 📝 依存性注入(DI)

  36. 📝 DI前 src/app/Http/Controllers/HoroscopesController.php HoroscopesApiに依存している

  37. 📝 DI後(DIされる側) src/app/Http/Controllers/HoroscopesController.php HoroscopesInterfaceに依存 index 呼び出し側から好きなモジュールを注入できるようになった 🎉

  38. 📝 DI後(DIする側) src/app/Providers/AppServiceProvider.php サービスコンテナに登録しておくことで index()実行時に実装クラスが注入される ユニットテストから 、こ ようにして サービスコンテナ 上書き

    src/tests/Feature/HoroscopesGetRequestTest.php 💡 Laravel 機能
  39. 📝 DI

  40. テストダブル

  41. 参考 https://goyoki.hatenablog.com/entry/20120301/1330608789 こちら ブログ記事から画像と説明を引用させていただいてます。

  42. テストダブル テストダブルと 、テスト実行時に、 テスト対象が依存しているコンポーネントと置き換わるも ex. HoroscopesApi

  43. 間接入力と間接出力 間接入力: テストコードから見えないテスト対象へ 入力 間接出力: テストコードから見えないテスト対象 出力 ex. HoroscopesApi

  44. 間接入力と間接出力 間接入力: $horoscope_japanese_name テスト対象が依存するコンポーネント 間接出力: $birthday_yyyymmdd テスト対象

  45. テストダブル 種類 ・ダミー ・スタブ ・モック ・スパイ ・フェイク

  46. ダミー テストに影響を与えない代替オブジェクト

  47. スタブ テスト対象へ 間接入力を操作できるも

  48. 📝スタブを使ったテスト src/tests/Feature/HoroscopesGetRequestTest.php スタブ化(間接入力)

  49. モック 間接出力 期待結果を持ち、実際 間接出力と 比較判定を行う。 スタブ 機能を内包する場合もある

  50. 📝モックを使ったテスト HoroscopesInterfaceを実装したインスタンスで、 getJapaneseName関数が引数’19941107’で一度だけ実行される src/tests/Feature/HoroscopesGetRequestTest.php 間接出力 期待値

  51. スパイ テスト対象 間接出力を記録し、参照可能にしたも

  52. スパイを使ったテスト 間接出力 期待値

  53. 📝 今回 スタブとモックを 使ってテストを作成しましょう