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
書籍「テスト駆動」が 教えてくれること 教えてくれないこと 知っておくべきこと @こたうち さんさん
Slide 2
Slide 2 text
自己紹介 ● こたうち さんさん ● @kotauchisunsun ● 株式会社STYLY ● 本職:サーバーサイドエンジニア ● ARグラスが好き
Slide 3
Slide 3 text
2024年のソフトウェア品質シンポジウムで経験発表 ナイショ!! ナイショ!!
Slide 4
Slide 4 text
技術同人誌での実績 t-wadaさんから書評を頂きました。 https://techbookfest.org/product/5060368671965184?productVariantID=4792676413079552
Slide 5
Slide 5 text
商業誌での実績 ソフトウェアデザイン 2025年1月号 第2特集 Web APIテスト 実践ガイド E2Eテスト,ユニットテストだ けで十分だと思っているあなたへ 第3章:実践的なWeb APIテストの考え方 APIの品質を担保するヒント
Slide 6
Slide 6 text
なぜ私がテスト駆動開発を読んだのか
Slide 7
Slide 7 text
前職でのプロダクト保守運用の辛さ ● 日々更新されるセキュリティパッチ ● セキュリティアップデートするたびに壊れるプロダクト ● 期日までに間に合わなかったら責任者に謝りに行く日々 ● 終わったと思ったら始まるセキュリティアップデート ● 新機能を追加したくても作りこみにくいコードベース ● 機能を追加すると増える手動テストのケース プログラムが直しにくい。 手動テストの工数が重くて辛い。 機能が多くなればテスト工数が重くなる。
Slide 8
Slide 8 text
なにか良い方法はないだろうか。
Slide 9
Slide 9 text
No content
Slide 10
Slide 10 text
● テスト駆動開発 Test-Driven Development: By Example ● ケント・ベック (Kent Beck) ● 2002年発行
Slide 11
Slide 11 text
なんか書名にテストって入ってるし、 なんか自動テストを利用して開発するらしいし、 これで手動テストの工数が減って楽になるぞ!!!
Slide 12
Slide 12 text
読んだ結果
Slide 13
Slide 13 text
うまくいかなかった
Slide 14
Slide 14 text
書籍「テスト駆動」が 教えてくれること 教えてくれないこと 知っておくべきこと
Slide 15
Slide 15 text
テスト駆動とは何か 実装 テスト 実装 テスト ③テストコードを書く ④テストが合格するように実装 ⑤必要であればリファクタリングする テストコードのみで テストは失敗(RED) テストは合格だが コードが汚い(GREEN) テストが合格し コードがきれい (Refactor) 自動テストをハーネス (安全装置)にしながら、コードをきれいに実装する技術 ①網羅したいテストケースをリスト化する ②テストケースを1つ選ぶ ⑥テストケースがなくなるまで②~⑤を繰り返す テスト
Slide 16
Slide 16 text
なぜうまくいかなかったか
Slide 17
Slide 17 text
単体テストが対象 目次 ● 多国通貨 ● xUnit ● テスト駆動開発のパターン
Slide 18
Slide 18 text
自動テストの分類 分類 スコープ 説明 単体テスト 個々の関数やクラス オブジェクトは正しく振舞っているか? また,オブジェクトは扱いやすいか? 結合テスト モジュール間の連携部分 私たちが変更できないコード (ORMやフレームワーク) に対して,書いたコードが機能するか? 受け入れテスト (E2Eテスト) システム全体 システム全体が機能するか? ソフトウェア開発業務の実務としては結合テストとE2Eテストの書き方も必要 書籍『テスト駆動』の取り扱い領域
Slide 19
Slide 19 text
Q. E2Eテストや結合テストの テスト駆動を学ぶ方法はあるか?
Slide 20
Slide 20 text
A. あります
Slide 21
Slide 21 text
● 実践テスト駆動開発: テストに導かれてオブジェクト指向ソフトウェア を育てる ● 通称: GOOS Growing Object-Oriented Software, Guided By Tests ● Steve Freeman, Nat Pryce ● 2012年発行
Slide 22
Slide 22 text
実践テスト駆動開発における開発ループ 失敗する E2Eテストを書く 失敗する 単体テストを書く テストを 通すようにする リファクタリングする E2Eテストを書き、その中で単体テストを書く、2重のループ構造がある。
Slide 23
Slide 23 text
テスト駆動開発と実践テスト駆動開発の違い ロンドン学派 モック主義TDD モックの意義:設計ツールの一種 デトロイト学派 古典的TDD モックの意義:動作の遅いモジュールの代替
Slide 24
Slide 24 text
実践テスト駆動開発を読めば、 実務でもテスト駆動できる!!
Slide 25
Slide 25 text
というわけではない。
Slide 26
Slide 26 text
2012年発刊 デスクトップアプリケーションが題材 Java + Swing
Slide 27
Slide 27 text
テスト駆動開発と実践テスト駆動開発の領域の整理 単体テストを用いたテスト駆動 デスクトップアプリにおける 単体テスト・結合テスト・E2Eテストを用いた テスト駆動
Slide 28
Slide 28 text
テスト駆動開発と実践テスト駆動開発の適用領域の整理 ソフトウェアの種類 テストの分類 書籍『テスト駆動開発』 書籍『実践テスト駆動開発』 * 単体テスト 〇 〇 デスクトップアプリ 結合テスト × 〇 E2Eテスト × 〇 モバイルアプリ 結合テスト × × E2Eテスト × × Webフロントエンド 結合テスト × × E2Eテスト × × REST API 結合テスト × × E2Eテスト × × 網羅されている領域は極わずか
Slide 29
Slide 29 text
Q.実践テスト駆動でE2Eテストや結 合テストのテスト駆動を学び、応用 すればよいのでは?
Slide 30
Slide 30 text
結合テスト・E2Eテストの困難さ 単体テスト 結合テスト E2Eテスト 結合テスト E2Eテスト 結合テスト E2Eテスト REST API Webフロントエンド モバイルアプリ フレームワークに依存しないので、 スキルが分野に依存しない ● Docker ● ミドルウェアの扱い ● ネットワーク ● ブラウザの取り扱い ● スナップショットテスト ● VRT ● 実機orエミュレータ ● テスト端末へのインストール ● 証明書の取り扱い 分野により結合テスト・E2Eテストに要求されるテスト技術が違う
Slide 31
Slide 31 text
欠陥の修正におけるテストの割合 MR:Modification Request(修正依頼) 欠陥修正依頼の24.8%はテスト関連由来 Making Software ―エビデンスが変えるソフトウェア開発 第5章ソフトウェアの大半の欠陥はどこから生じる? p432 テストを行うことがそもそも難しい
Slide 32
Slide 32 text
テスト駆動からプロダクトでの実践までの道 単体テスト 単体テスト 結合テスト E2Eテスト 単体テスト 結合テスト E2Eテスト ①テスト駆動開発で 単体テストによる テスト駆動を学ぶ ②実践テスト駆動開発で デスクトップアプリに対し、 結合テストとE2Eテストの テスト駆動手法を学ぶ ③プロダクトの ソフトウェア領域の 結合テストとE2Eテストの 自動テストの手法を学ぶ テスト駆動の学習 プロダクトへの適用 アプリへの”適用例”の学習 3ステップを完了することでプロダクトでテスト駆動が実践可能となる
Slide 33
Slide 33 text
書籍「テスト駆動」が 教えてくれること 教えてくれないこと 知っておくべきこと
Slide 34
Slide 34 text
書籍「テスト駆動」が 教えてくれること 教えてくれないこと 知っておくべきこと 単体テストの テスト駆動の手法 結合テスト・E2Eテストの テスト駆動の方法 テスト駆動したい分野の 結合テスト・E2Eテストの 自動テストの方法
Slide 35
Slide 35 text
こたうちのテスト駆動に対する問題意識 単体テスト 結合テスト E2Eテスト 実務でのテスト駆動 結合テスト・E2Eテストの自動テストの知見が無いため 実務でのテスト駆動の実践が困難になっている 実際のプロダクトのフレームワークを利用した テスト駆動の実例がないため学習困難になっている。 テスト駆動は自動テストを用いるため、実践には自動テストの困難が伴う
Slide 36
Slide 36 text
結合テスト・E2Eテストの困難性に対する執筆 ~BE~ ● Go言語 ● gorilla/mux ● MySQL ● Docker ● Docker Compose ● GithubActions サーバー構成を例にした E2Eテストの自動テストの構成の執筆 https://techbookfest.org/product/5060368671965184?productVariantID=4792676413079552 サーバーサイドの自動テスト環境に関して実 例を用いて説明した書籍は珍しい(はず)
Slide 37
Slide 37 text
結合テスト・E2Eテストの困難性に対する執筆 ~FE~ Reactを用いたフロントエンド領域の テスト観点・テストツール・ライブラリの整理 どのテストツールを使うと、 どの観点のテストが可能かを整理
Slide 38
Slide 38 text
結合テスト・E2Eテストの困難性に対する執筆 ~XR~ XR領域における CI環境の整備 E2Eテスト環境の整備
Slide 39
Slide 39 text
テスト駆動だけでなく 結合テスト・E2Eテスト領域の 自動テストに関する知識を深めることが テスト駆動を実践するコツ
Slide 40
Slide 40 text
知識が整理されていない部分を整理し舗装することで プロダクトの安定性が増し、 プロダクトの優位性につながるかもしれない。
Slide 41
Slide 41 text
ご清聴ありがとうございました。