Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
書籍「テスト駆動」が 教えてくれること 教えてくれないこと 知っておくべきこと
Search
kotauchisunsun
January 24, 2025
0
77
書籍「テスト駆動」が 教えてくれること 教えてくれないこと 知っておくべきこと
Nextbeat Tech Bar:第二回ソフトウェアテストについて考える会
https://nextbeat.connpass.com/event/339286/
kotauchisunsun
January 24, 2025
Tweet
Share
More Decks by kotauchisunsun
See All by kotauchisunsun
2025年のARグラスの潮流
kotauchisunsun
0
890
幻のLispマシン
kotauchisunsun
0
230
仮想と実存。その融合する世界を創る。 ~XR業界へ就職・転職のために必要な経験・スキルとは?~
kotauchisunsun
0
59
ARグラスにChatGPTを入れてみた V2.2
kotauchisunsun
0
160
AR グラスにChatGPTを入れてみた V2.0
kotauchisunsun
0
130
AR グラスにChatGPTを入れてみた V2.1
kotauchisunsun
1
140
ARグラスにChatGPTを入れてみた
kotauchisunsun
0
560
ソースコードを美しくたもつために ~コードレビューの認知限界を突破し、年間400リリースを達成する~
kotauchisunsun
1
11k
Apple Vision Proにみるビデオシースルー型HMDと光学式ARグラスの比較・考察
kotauchisunsun
0
2.8k
Featured
See All Featured
Done Done
chrislema
182
16k
Facilitating Awesome Meetings
lara
51
6.2k
Fantastic passwords and where to find them - at NoRuKo
philnash
50
3k
Typedesign – Prime Four
hannesfritz
40
2.5k
We Have a Design System, Now What?
morganepeng
51
7.4k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Being A Developer After 40
akosma
89
590k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
44
9.4k
Fashionably flexible responsive web design (full day workshop)
malarkey
406
66k
KATA
mclloyd
29
14k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
27
1.5k
Optimizing for Happiness
mojombo
376
70k
Transcript
書籍「テスト駆動」が 教えてくれること 教えてくれないこと 知っておくべきこと @こたうち さんさん
自己紹介 • こたうち さんさん • @kotauchisunsun • 株式会社STYLY • 本職:サーバーサイドエンジニア
• ARグラスが好き
2024年のソフトウェア品質シンポジウムで経験発表 ナイショ!! ナイショ!!
技術同人誌での実績 t-wadaさんから書評を頂きました。 https://techbookfest.org/product/5060368671965184?productVariantID=4792676413079552
商業誌での実績 ソフトウェアデザイン 2025年1月号 第2特集 Web APIテスト 実践ガイド E2Eテスト,ユニットテストだ けで十分だと思っているあなたへ 第3章:実践的なWeb
APIテストの考え方 APIの品質を担保するヒント
なぜ私がテスト駆動開発を読んだのか
前職でのプロダクト保守運用の辛さ • 日々更新されるセキュリティパッチ • セキュリティアップデートするたびに壊れるプロダクト • 期日までに間に合わなかったら責任者に謝りに行く日々 • 終わったと思ったら始まるセキュリティアップデート •
新機能を追加したくても作りこみにくいコードベース • 機能を追加すると増える手動テストのケース プログラムが直しにくい。 手動テストの工数が重くて辛い。 機能が多くなればテスト工数が重くなる。
なにか良い方法はないだろうか。
None
• テスト駆動開発 Test-Driven Development: By Example • ケント・ベック (Kent Beck)
• 2002年発行
なんか書名にテストって入ってるし、 なんか自動テストを利用して開発するらしいし、 これで手動テストの工数が減って楽になるぞ!!!
読んだ結果
うまくいかなかった
書籍「テスト駆動」が 教えてくれること 教えてくれないこと 知っておくべきこと
テスト駆動とは何か 実装 テスト 実装 テスト ③テストコードを書く ④テストが合格するように実装 ⑤必要であればリファクタリングする テストコードのみで テストは失敗(RED)
テストは合格だが コードが汚い(GREEN) テストが合格し コードがきれい (Refactor) 自動テストをハーネス (安全装置)にしながら、コードをきれいに実装する技術 ①網羅したいテストケースをリスト化する ②テストケースを1つ選ぶ ⑥テストケースがなくなるまで②~⑤を繰り返す テスト
なぜうまくいかなかったか
単体テストが対象 目次 • 多国通貨 • xUnit • テスト駆動開発のパターン
自動テストの分類 分類 スコープ 説明 単体テスト 個々の関数やクラス オブジェクトは正しく振舞っているか? また,オブジェクトは扱いやすいか? 結合テスト モジュール間の連携部分
私たちが変更できないコード (ORMやフレームワーク) に対して,書いたコードが機能するか? 受け入れテスト (E2Eテスト) システム全体 システム全体が機能するか? ソフトウェア開発業務の実務としては結合テストとE2Eテストの書き方も必要 書籍『テスト駆動』の取り扱い領域
Q. E2Eテストや結合テストの テスト駆動を学ぶ方法はあるか?
A. あります
• 実践テスト駆動開発: テストに導かれてオブジェクト指向ソフトウェア を育てる • 通称: GOOS Growing Object-Oriented Software,
Guided By Tests • Steve Freeman, Nat Pryce • 2012年発行
実践テスト駆動開発における開発ループ 失敗する E2Eテストを書く 失敗する 単体テストを書く テストを 通すようにする リファクタリングする E2Eテストを書き、その中で単体テストを書く、2重のループ構造がある。
テスト駆動開発と実践テスト駆動開発の違い ロンドン学派 モック主義TDD モックの意義:設計ツールの一種 デトロイト学派 古典的TDD モックの意義:動作の遅いモジュールの代替
実践テスト駆動開発を読めば、 実務でもテスト駆動できる!!
というわけではない。
2012年発刊 デスクトップアプリケーションが題材 Java + Swing
テスト駆動開発と実践テスト駆動開発の領域の整理 単体テストを用いたテスト駆動 デスクトップアプリにおける 単体テスト・結合テスト・E2Eテストを用いた テスト駆動
テスト駆動開発と実践テスト駆動開発の適用領域の整理 ソフトウェアの種類 テストの分類 書籍『テスト駆動開発』 書籍『実践テスト駆動開発』 * 単体テスト 〇 〇 デスクトップアプリ
結合テスト × 〇 E2Eテスト × 〇 モバイルアプリ 結合テスト × × E2Eテスト × × Webフロントエンド 結合テスト × × E2Eテスト × × REST API 結合テスト × × E2Eテスト × × 網羅されている領域は極わずか
Q.実践テスト駆動でE2Eテストや結 合テストのテスト駆動を学び、応用 すればよいのでは?
結合テスト・E2Eテストの困難さ 単体テスト 結合テスト E2Eテスト 結合テスト E2Eテスト 結合テスト E2Eテスト REST API
Webフロントエンド モバイルアプリ フレームワークに依存しないので、 スキルが分野に依存しない • Docker • ミドルウェアの扱い • ネットワーク • ブラウザの取り扱い • スナップショットテスト • VRT • 実機orエミュレータ • テスト端末へのインストール • 証明書の取り扱い 分野により結合テスト・E2Eテストに要求されるテスト技術が違う
欠陥の修正におけるテストの割合 MR:Modification Request(修正依頼) 欠陥修正依頼の24.8%はテスト関連由来 Making Software ―エビデンスが変えるソフトウェア開発 第5章ソフトウェアの大半の欠陥はどこから生じる? p432 テストを行うことがそもそも難しい
テスト駆動からプロダクトでの実践までの道 単体テスト 単体テスト 結合テスト E2Eテスト 単体テスト 結合テスト E2Eテスト ①テスト駆動開発で 単体テストによる
テスト駆動を学ぶ ②実践テスト駆動開発で デスクトップアプリに対し、 結合テストとE2Eテストの テスト駆動手法を学ぶ ③プロダクトの ソフトウェア領域の 結合テストとE2Eテストの 自動テストの手法を学ぶ テスト駆動の学習 プロダクトへの適用 アプリへの”適用例”の学習 3ステップを完了することでプロダクトでテスト駆動が実践可能となる
書籍「テスト駆動」が 教えてくれること 教えてくれないこと 知っておくべきこと
書籍「テスト駆動」が 教えてくれること 教えてくれないこと 知っておくべきこと 単体テストの テスト駆動の手法 結合テスト・E2Eテストの テスト駆動の方法 テスト駆動したい分野の 結合テスト・E2Eテストの
自動テストの方法
こたうちのテスト駆動に対する問題意識 単体テスト 結合テスト E2Eテスト 実務でのテスト駆動 結合テスト・E2Eテストの自動テストの知見が無いため 実務でのテスト駆動の実践が困難になっている 実際のプロダクトのフレームワークを利用した テスト駆動の実例がないため学習困難になっている。 テスト駆動は自動テストを用いるため、実践には自動テストの困難が伴う
結合テスト・E2Eテストの困難性に対する執筆 ~BE~ • Go言語 • gorilla/mux • MySQL • Docker
• Docker Compose • GithubActions サーバー構成を例にした E2Eテストの自動テストの構成の執筆 https://techbookfest.org/product/5060368671965184?productVariantID=4792676413079552 サーバーサイドの自動テスト環境に関して実 例を用いて説明した書籍は珍しい(はず)
結合テスト・E2Eテストの困難性に対する執筆 ~FE~ Reactを用いたフロントエンド領域の テスト観点・テストツール・ライブラリの整理 どのテストツールを使うと、 どの観点のテストが可能かを整理
結合テスト・E2Eテストの困難性に対する執筆 ~XR~ XR領域における CI環境の整備 E2Eテスト環境の整備
テスト駆動だけでなく 結合テスト・E2Eテスト領域の 自動テストに関する知識を深めることが テスト駆動を実践するコツ
知識が整理されていない部分を整理し舗装することで プロダクトの安定性が増し、 プロダクトの優位性につながるかもしれない。
ご清聴ありがとうございました。