23新卒技術研修で実施したテスト・設計研修の講義資料です。
動画:https://youtu.be/xR-LWJ4MAEM
資料の利用について 公開している資料は勉強会や企業の研修などで自由にご利用頂いて大丈夫ですが、以下の形での利用だけご遠慮ください。 ・受講者から参加費や授業料などを集める形での利用(会場費や飲食費など勉強会運営に必要な実費を集めるのは問題ありません) ・出典を削除または改変しての利用
©MIXI2023/04/21Vantageスタジオ Romi事業部 開発グループ加藤 修悟2023 テスト・設計研修
View Slide
©MIXI2• 加藤 修悟 (@shugo.kato) a.k.a. ろぐみ• 21新卒• Vantage スタジオ Romi 事業部 開発グループ• サーバ/フロント/インフラ• なんでもやさん• 好きなキーボード• 7sPro• Keyball61• HHKB• 好きなエディタ• VS Code自己紹介
©MIXI3• 江畑 拓哉 (@takuya.ebata)• 21新卒• ソーシャルベッティング事業本部 開発室システム2G アーキテクトT• 運用と開発、あと雑務全般• 好きなキーボード• Keychron• 好きなエディタ• Emacs自己紹介
©MIXI4• 大倉 真一希 (@maiki.okura)• 22新卒• みてね事業部 プロダクト開発部プロダクト開発Mグループ アプリ開発チーム• server が多めでたまに iOS, Android など• 好きなキーボード• Mac 標準• 好きなエディタ• VS Code with Vim自己紹介
©MIXI51. 講義2. 演習1 (ペアプログラミング)• 実装• 各チーム同士でコードレビュー & 修正3. 演習2、 3 …お昼は13:00頃〜を予定本日の流れ
©MIXI6講義
©MIXI7• テスト・ソフトウェアテストとは• ソフトウェアの品質の話• TDDの話• テスト技法の話• テストの7原則• ペアプログラミング• コードレビューの仕方とされ方本日の流れ
©MIXI8みなさん、テスト書いてますか?
©MIXI9テストと聞いて、どのようなことを思い浮かべますか?
©MIXI10テスト != デバッグテスト: 不具合があることを示すことができるだけデバッグ: 不具合を取り除くまでの一連の開発活動のことテスト・ソフトウェアテストとは
©MIXI11テスト・ソフトウェアテストとはソフトウェアテストはソフトウェアの品質 を評価して、運用時の不具合を低減するための 1 つの手段です
©MIXI12ソフトウェアの品質の話
©MIXI13ソフトウェア品質特性• 外部品質特性• システムの利用者が触れる、見える部分の品質• 内部品質特性• システムの利用者からは見えない内側の部分の品質ソフトウェアの品質
©MIXI14引用: 『つながる世界のソフトウェア品質ガイド あたらしい価値提供のための品質モデル活用のすすめ 』P30 図2.3-3(https://www.ipa.go.jp/publish/qv6pgp0000000wkj-att/000055008.pdf)ソフトウェアの品質
©MIXI15引用: https://iso25000.com/index.php/en/iso-25000-standards/iso-25010ソフトウェアの品質
©MIXI16TDD
©MIXI17• TDD (Test-Driven Development / テスト駆動開発)• Red, Green, Refactor のサイクルを回す1. まずはテストを書く (Red)a. 実装はないのでもちろんテストは落ちる2. テストを通すために、実装をする (Green)a. まずはテストを通すことを考えてみる3. リファクタリングする (Refactor)TDDRedGreenRefactor
©MIXI18• テストが落ちること• 落ちるはずのテストが通っちゃうと・・・?• テストを通すことをだけを考えてみる• 通るはずのテストが通らないときは・・・?TDD
©MIXI19テスト駆動開発は、テストを書くことがゴールなのではなく、開発中に感じる様々な不安を自身でコントロールしていく手法TDD
©MIXI20• テストが書きづらいとき• 副作用が多くないか?• 責務を持ちすぎてないか? もしくは不明瞭ではないか?TDDのコツ
©MIXI21ライブコーディング
©MIXI22テスト技法の話
©MIXI23• テストのレベル• 単体テスト (Unit testing)• もっとも小さなテスト• クラス、メソッド単位 (言語・テストライブラリ等で異なる)• 統合テスト (Integration testing)• 単体テストよりも大きな範囲のテスト• システムテスト (System testing)• ソフトウェア全体のテスト• 受け入れテスト (User Acceptance Testing)• 顧客がソフトウェアを受け入れる時のテストテスト技法
©MIXI24• テストの種別• ブラックボックステスト• 仕様や要件に基づいてテストを実施するテスト• 実装レベルの知識は必要としない• ホワイトボックステスト• 実装レベルの知識に基づいて実施するテスト• ソフトウェアの内部パス、構造、実装 ...• グレーボックステスト• 実装をある程度調べた上で、ブラックボックステストのテストケースを効率的に選択していくテスト技法
©MIXI25• ブラックボックステスト• 同値クラステスト• 境界値テスト• ….• ホワイトボックステスト• 制御フローテスト• データフローテストテスト技法
©MIXI26同値クラステスト• 同値クラスに分け、代表値を選んでテストケースを作る• 例• 入力値は0~100• 0~19は未成年、20~100は成人 と返すプログラムを考えるテスト技法
©MIXI27境界値テスト• 同値クラステストを元に、境界値に注目したテスト• パーティションの最小値と最大値、または最初の値と最後の値を選んでテストする• -1, 0, 19, 20, 100, 101テスト技法
©MIXI281. テストは欠陥があることは示せるが、欠陥がないことは示せない2. 全数テストは不可能3. 早期テストで時間とコストを節約4. 欠陥の偏在5. 殺虫剤のパラドックスにご用心6. テストは状況次第7. 「バグゼロ」の落とし穴テストの7原則
©MIXI29ペアプログラミング
©MIXI30• ドライバー• 実際に操作する人• ナビゲーター• ドライバーの操作を眺めつつ、助ける人• 定期的に役割を入れ替えながら進めるペアプログラミング
©MIXI31うまくやるコツ• ドライバー• 今、何をやろうとしているか、やっているかを明確にする (発言する)• ナビゲーター• 良い方法を思いついたり、ミスに気づいたりしたときに、積極的に発言する• ドライバーが何をやろうとしていることが良くわからなくなったら、すぐに聞くcommit & push してれば、役割交代はしやすいはず・・・?ペアプログラミング
©MIXI33(敬称略)チューター: A, B 加藤、C,D 江畑、E,F 大倉ペアプログラミング
©MIXI34コードレビューをしよう
©MIXI35• チームごとにteam-A,B,C,D,E,F ブランチ向きにPRを作ってください• レビューするチーム• 演習1: A → B、 B → C、 C → D、 D → E、E → F、F → A• 演習2: A → C、 B → D、 C → A、 D → B …• 時間が余ったら他のチームをレビューしてもOKコードレビューをしよう
©MIXI36• コードレビューの目的• コードの品質の保証• コードの共有• 設計や作戦の共有コードレビューをしよう
©MIXI37• どうすれば、レビューが通りやすいかを考えよう• PR の説明をしっかり書こう• どういう背景、理由で、どういうものを作った、など• 重点的にレビューして欲しいところや、実装していてよく分からなかったところ、など• 行単位でコメント/会話ができるのでそれも活用しよう• JIRA のチケットや、関連 PR, issue など• 背景の詳細や、仕様などを追いやすい• 監査などのときに、追いやすい、など• どういうタイミングでマージして欲しい、など (QA終わるまで待って、など)コードレビューをしよう
©MIXI38• レビューは人格攻撃ではない (心理的安全性)• レビューする側もされる側も攻撃ではないことを意識する• わからないところは聞こう• 褒めよう!• この人はこういうところをレビューしてくるだろうなぁと考えてみるコードレビューをしよう
©MIXI39• SQuBOK Guide V3• テスト駆動開発• はじめて学ぶソフトウェアのテスト技法• ソフトウェアテスト技法参考文献
©MIXI