Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
ソフトウェアテスト 2022新卒研修講義 2022/04/19 岡村啓二郎
Slide 2
Slide 2 text
講義・ハンズオン ・講義 10分 ‐ ソフトウェアテストと ‐ 実務で使われているソフトウェアテスト 紹介 ・ハンズオン 80分 - 単体テスト - DI - テストダブル
Slide 3
Slide 3 text
講義 目標 ・ソフトウェアテストが何かを知る ・実務で使われているソフトウェアテスト 種類を知る
Slide 4
Slide 4 text
ソフトウェアテストと 何か
Slide 5
Slide 5 text
ソフトウェアテストと 公式 定義(IEEE) ある特定 条件化でシステムまた コンポーネント を操作するプロセスであり、 そ 結果を観察また 記録して、 システムまた コンポーネント ある側面を評価すること 引用: 日経BP社, 日経BPマーケティング, じめて学ぶソフトウェア テスト技法 p11
Slide 6
Slide 6 text
言い換えてみると... 様々なテストケースを作成し、 それに沿ってシステムを実行し、 ソフトウェア 品質を確かめる作業
Slide 7
Slide 7 text
ソフトウェア 品質 https://kyog02.hatenablog.com/entry/2019/11/17/012531
Slide 8
Slide 8 text
ど 品質を評価したいかによって ソフトウェアテスト 種類も変わってくる
Slide 9
Slide 9 text
ソフトウェアテスト 種類 ・単体テスト(ユニットテスト) ・結合テスト ・ステージ環境で リリース前テスト
Slide 10
Slide 10 text
単体テスト(ユニットテスト) ・クラスやメソッドなど、単一 プログラム テスト ・PHPUnit/unittest(python)/JUnit
Slide 11
Slide 11 text
単体テスト(ユニットテスト) 例 テスト対象 テストコード テスト実行
Slide 12
Slide 12 text
結合テスト ・複数 プログラム、モジュールを組み合わせたテスト ・実装中および完了後に行う
Slide 13
Slide 13 text
結合テスト ブラウザ DB アプリケーション API classA object const method method method method classB method classC ✅ ✅ ✅ log
Slide 14
Slide 14 text
ステージ環境で リリース前テスト ・機能要件を満たせているかどうかを確認する ・ユーザ 操作と同じことを行う
Slide 15
Slide 15 text
ステージ環境 本番DB 本番とほとんど同じ構成で構築された環境 DBやネットワークやサーバなどアプリケーション以外 構成が本番と同じ 本番環境 ステージ環境 本番サーバ 本番NW お客様 運営 ✅ ✅
Slide 16
Slide 16 text
まとめ ・ソフトウェアテスト ソフトウェア 品質を確かめる工程 ・ソフトウェア 品質 たくさんある ・社内で 主に3種 ソフトウェアテストが用いられている
Slide 17
Slide 17 text
ハンズオン
Slide 18
Slide 18 text
準備 ・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
Slide 19
Slide 19 text
単体テストを書くとどんな良いことが? ・良いこと 結合テスト時 デバッグが楽になる テストコードが仕様になる コード 品質があがる(テスト容易性) ・一方でこんな意見も ... テストコードを書く工数が発生する
Slide 20
Slide 20 text
目的 ・単体テストを書いてみる ・依存性注入(DI)をやってみる ・テストダブルを使ってみる
Slide 21
Slide 21 text
ハンズオン 流れ 学習 ・スライドで 用語 説明 ・実装例 解説 📝 体験 ・ライブコーディング ・お手本見ながら実践
Slide 22
Slide 22 text
テストケースを作ってみよう
Slide 23
Slide 23 text
テストケース作成に役立つ技法 ・ブラックボックステスト ・ホワイトボックステスト
Slide 24
Slide 24 text
ブラックボックステスト テスト対象 入力 出力 テスト対象 実装 中身 見えないも とし、要件や仕様から それぞれ 入力値に対して、期待する出力値を決定し 実際に入力を行い、実際 出力値と期待する出力値 比較を行う 仕様例: 金額を入力として受け取り、 税込み金額を出力する 入力100, 期待する出力110
Slide 25
Slide 25 text
ホワイトボックステスト テスト対象 入力 出力 A B C D テスト対象 実際 内部構造を分析し、 テスト対象 ソフトウェア 特定 パスを実行するような入力を決定し、 実際に入力を行い、実際 出力値と期待する出力値 比較を行う 例: 下記 図で 、A->B, A->C->Dを経由する2パターン テストケースが考えられる if
Slide 26
Slide 26 text
📝 テストケース作成
Slide 27
Slide 27 text
ブラックボックステスト 誕生日を入力すると、誕生日/星座名が返却される
Slide 28
Slide 28 text
📝ブラックボックステスト src/tests/Feature/HoroscopesGetRequestTest.php
Slide 29
Slide 29 text
ホワイトボックステスト
Slide 30
Slide 30 text
📝ホワイトボックステスト src/tests/Feature/HoroscopesGetRequestTest.php
Slide 31
Slide 31 text
⚡ 仕様変更 ⚡
Slide 32
Slide 32 text
星座取得APIが完成した で そっちを使うようにしてください
Slide 33
Slide 33 text
📝仕様変更 src/app/Http/Controllers/HoroscopesController.php
Slide 34
Slide 34 text
📝 テストダブルを利用するために 実装を見直そう
Slide 35
Slide 35 text
📝 依存性注入(DI)
Slide 36
Slide 36 text
📝 DI前 src/app/Http/Controllers/HoroscopesController.php HoroscopesApiに依存している
Slide 37
Slide 37 text
📝 DI後(DIされる側) src/app/Http/Controllers/HoroscopesController.php HoroscopesInterfaceに依存 index 呼び出し側から好きなモジュールを注入できるようになった 🎉
Slide 38
Slide 38 text
📝 DI後(DIする側) src/app/Providers/AppServiceProvider.php サービスコンテナに登録しておくことで index()実行時に実装クラスが注入される ユニットテストから 、こ ようにして サービスコンテナ 上書き src/tests/Feature/HoroscopesGetRequestTest.php 💡 Laravel 機能
Slide 39
Slide 39 text
📝 DI
Slide 40
Slide 40 text
テストダブル
Slide 41
Slide 41 text
参考 https://goyoki.hatenablog.com/entry/20120301/1330608789 こちら ブログ記事から画像と説明を引用させていただいてます。
Slide 42
Slide 42 text
テストダブル テストダブルと 、テスト実行時に、 テスト対象が依存しているコンポーネントと置き換わるも ex. HoroscopesApi
Slide 43
Slide 43 text
間接入力と間接出力 間接入力: テストコードから見えないテスト対象へ 入力 間接出力: テストコードから見えないテスト対象 出力 ex. HoroscopesApi
Slide 44
Slide 44 text
間接入力と間接出力 間接入力: $horoscope_japanese_name テスト対象が依存するコンポーネント 間接出力: $birthday_yyyymmdd テスト対象
Slide 45
Slide 45 text
テストダブル 種類 ・ダミー ・スタブ ・モック ・スパイ ・フェイク
Slide 46
Slide 46 text
ダミー テストに影響を与えない代替オブジェクト
Slide 47
Slide 47 text
スタブ テスト対象へ 間接入力を操作できるも
Slide 48
Slide 48 text
📝スタブを使ったテスト src/tests/Feature/HoroscopesGetRequestTest.php スタブ化(間接入力)
Slide 49
Slide 49 text
モック 間接出力 期待結果を持ち、実際 間接出力と 比較判定を行う。 スタブ 機能を内包する場合もある
Slide 50
Slide 50 text
📝モックを使ったテスト HoroscopesInterfaceを実装したインスタンスで、 getJapaneseName関数が引数’19941107’で一度だけ実行される src/tests/Feature/HoroscopesGetRequestTest.php 間接出力 期待値
Slide 51
Slide 51 text
スパイ テスト対象 間接出力を記録し、参照可能にしたも
Slide 52
Slide 52 text
スパイを使ったテスト 間接出力 期待値
Slide 53
Slide 53 text
📝 今回 スタブとモックを 使ってテストを作成しましょう