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

ご清聴ありがとうございました。