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