Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
私のテストコードの書き方
Search
Atsushi Okui
January 12, 2026
Programming
33
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
私のテストコードの書き方
Atsushi Okui
January 12, 2026
More Decks by Atsushi Okui
See All by Atsushi Okui
ソフトウェアテストの概観を学ぶ 2026
a_okui
0
41
モックを適切に使ったテスト
a_okui
0
68
カバレッジとは?
a_okui
0
38
プログラミングどうやる? ~テスト駆動開発から学ぶ達人の型~
a_okui
0
450
『Accelerate State of DevOps Report 2022』翻訳とまとめ
a_okui
0
2.5k
コード品質がもたらすビジネスへの影響(社内向け翻訳、まとめ)
a_okui
0
420
『Accelerate State of DevOps Report 2021』翻訳とまとめ
a_okui
0
640
Other Decks in Programming
See All in Programming
手動確認はもう限界 〜XCUITestでCustom URL Schemeの遷移を起動種別ごとに自動テストする〜 / Testing Custom URL Schemes with XCUITest
otouto
0
280
個人開発基盤をまるごとCloudflareに引っ越して爆速で総合的体験を向上させた話
tinykitten
0
190
一参加者から『中の人』へ 〜全通PHPerがブースに立って学んだ、カンファレンスを100倍楽しむコツ〜
wp_daisuke
0
150
cdk deploy JawsSonic #MARATHONしながらAWSリソースをデプロイしてみよう
akihisaikeda
2
130
GKE で Pod の見方を変えたら、スケールアウト時の挙動を真に捉えられた話
stkk
0
120
AgentCore CLI で進化した AWS での AI エージェントの作り方 : 必要な機能を必要な時に
icoxfog417
PRO
3
340
thread_parallel_with_free-threaded_Python_and_NumPy.pdf
riku_sakamoto
0
330
AI に Inclusive UI を書かせよう — Design Rules Skill で Compose UI を作り直す
theoriatec2024
1
490
速習iPhone Duo対応
yuukiw00w
1
340
Heart of Swift Concurrency
koher
0
730
モバイル交通系ICへのチャージ実例から考える、クロスプラットフォーム開発におけるiOS実機テスト設計とCI運用
yusuga
1
470
FreeBSDでZabbixを動かす.pdf
kenkino
0
280
Featured
See All Featured
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
240
GraphQLとの向き合い方2022年版
quramy
50
15k
Code Reviewing Like a Champion
maltzj
528
40k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
230
How to build a perfect <img>
jonoalderson
1
6k
The Cost Of JavaScript in 2023
addyosmani
55
10k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.9k
HDC tutorial
michielstock
2
870
Product Roadmaps are Hard
iamctodd
55
13k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
SEO for Brand Visibility & Recognition
aleyda
0
4.7k
Transcript
私のテストコードの書き方
自己紹介 Atsushi Okui (@blue32a_jp) ソフトウェアエンジニア / Webアプリケーション エンジニア / PHPer
関心:設計、コード品質、リファクタリング、テス ト、モデリング
【悩み】テストコードをどのように 書いていけばいいのか分からない😥
自分がどのように書いているか 言語化してみる🤔
前置き
1. 自動テストへの期待
自動テストに期待すること 自動テストに期待されることは様々ありますが、大雑把には下記の2つであると思われ ます。 • 品質保証 • 即時フィードバック
自動テストに期待すること • 品質保証 • 即時フィードバック 👉
品質保証としてはもの足りない ”「最も効果が高いのはテスト対象コードを書いた本人がテストコードを書くときである」 と述べましたが、これを裏返すと、開発者主導の自動テストからは第三者検証の観点 が抜け落ちてしまうということでもあります。書いた本人が気づいていない欠陥を、その 張本人が書いた自動テストがすべて検出してくれるわけではありません。品質を保証 するには実装者以外の目が必要で、それはピアレビュー(コードを別の人が詳細に評 価・検証するレビュー)やコードインスペクション(コードに不具合がないか人の目で確 認する作業 ) 、ペアプログラミング(1つのプログラムを2人で共同開発する手法)などで
適宜補わなければなりません。” 保守しやすく変化に強いソフトウェアを支える柱 自動テストとテスト駆動開発 、その全体像 – 和田卓人(t-wada) https://gihyo.jp/article/2024/01/automated-test-and-tdd
品質を保証するには実装者以外の目が必要 原則2: プログラマは自分自身のプログラムをテストしてはなら ない. ソフトウェア・テストの技法 第2版 – p.15 https://www.kindaikagaku.co.jp/book_list/detail/9784764903296/
では、なぜ開発者自身が テストコードを書いてテストするのか🤔
自動テストに期待すること • 品質保証 • 即時フィードバック 👉
即時フィードバック テストを手動やっている多くのプロジェクトでは、スケジュールの後半にテスト工程が設 けられます。その場合、開発者が抱く「自分は何も壊さず、新しい機能を追加できている だろうか」という疑問や不安への答えが、数日~数週間、場合によって数カ月先まで得 ることができません。よって、より良い品質を求めるために試行錯誤できる回数が極端 に少なくなります。 テストが自動化されることによって、フィードバックをオンデマンドに得ることが可能になり ます。開発者は不安を感じた時にすぐテストを実行し、自分が進んでいる方向が正しい ことを確信したり、あるいは誤りに気づいてすぐに後戻りすることができるようになり、安 心して試行錯誤することができます。結果として、数カ月に1回のようなサイクルだった
試行錯誤が、数分に1回のようなサイクルになります。
テストには「品質保証」への期待もあるが、 設計・実装フェーズにおいては 「即時フィードバック」への期待が大きい
2. テストはいつからできるか
成果物が完成してから でないとテストは出来ない?
例)2つの数値を足し算する test('2つの数値を足し算する ', () => { // Arrange // ???
// Act // ??? // Assert // ??? }); // todo
どのような結果が欲しい? test('2つの数値を足し算する ', () => { // Arrange // ???
// Act // ??? // Assert expect(result).toBe(3); }); // todo 実行結果して2つの整数を足した数値が欲しい🤔
結果を得るために、どのように実行する? test('2つの数値を足し算する ', () => { // Arrange // ???
// Act const result = plus(a, b); // Assert expect(result).toBe(3); }); // todo 2つの数値を引数に取り、戻り値として足し算した結果を返す関数にしよう🤔
実行するために必要なものは? test('2つの数値を足し算する ', () => { // Arrange const a
= 1; const b = 2; // Act const result = plus(a, b); // Assert expect(result).toBe(3); }); // todo 引数として渡すための2つの数値が必要だ🤔
実装する test('2つの数値を足し算する ', () => { // Arrange const a
= 1; const b = 2; // Act const result = plus(a, b); // Assert expect(result).toBe(3); }); function plus(a, b) { return a + b; } 👍
成果物が完成していなくても テストを考えることはできる
どうやって(How)だけではなく 振る舞い・仕様(What)を一緒に考える
本題
Q. どうやってテストコードを書いているか
A. プロダクトコードとテストコードを 一緒に育てていく
プログラミングするときの画面
プログラミングするときの画面 交互に少しずつ書いて、一緒に育てていく
実践編 実際に書いている様子を記載したかったのですが諸般の事情で割愛します。 代わりとして、過去にプログラミングしている時の思考を記事にしているので、そちらをご 覧いただければ幸いです。(記事の内容はテスト駆動開発にフォーカスしたものですが、 だいたいこんな感じで書いています) 【実践 TDD Katas】 ローマ数字 https://qiita.com/blue32a/items/2084c9e5cff97980a1c7
プロダクトコードとテストコードを一緒に育てる 個人的な経験としても、レガシーコードに後からテストコードを追加するのはとても苦労し ます。これはテストのことが考えられていないため、テスト容易性が低い状態です。テス トコードを早いうちから書いていくことで、必然的にテスト用意性が備わることになりま す。 また「テストがしにくい」というのは「使いにくい」ということでもあります。「どうやって実現 するか(How)」ばかりに注目していると、完成した時に「動きはするが使いにくい」状態 になっていることがあります。こういった事態を防ぐため、常に使う側の視点を持っておく 必要があります。
完成形が「分からない」からテストを書く プログラミングにおいてあまり効率的ではないと感じるのが「最短距離の完成形を考え てから一気に書く」という考え方です。分からない状態で考え込んでいても頭の中の成 果物はいつまでもボヤケたままで、時間だけが過ぎていきます。残念ながら、まだ道が ないところに最短距離はありません。このような手が動かない状態を回避するために、 テストを書くことで「何が求められているのか」を言語化し、それを「どのように実現する か」を試行錯誤していきます。
正解はないし、一筆書きもできない https://x.com/t_wada/status/1892118836402405595
うまくいかない方法をたくさん見つける “I have not failed. I’ve just found 10,000 ways
that won’t work.” 「私は失敗したわけではない。ただ、うまくいかない方法を1万通り見つけただけだ」 – Thomas Edison(トーマス・エジソン)
【TIPS】必ずテストを先に書くべきか テストを先に書くテストファーストを採用するかどうかはスタイルだと思っています。実際 に先に書くこともあれば後になることもあります。重要なのは「テストが先か後か」よりも 「一緒に、少しずつ書いていく」ことの方だと思います。
まとめ • 開発者として、自動テストには「品質保証」よりも「即時フィードバック」への期待が 大きい • フィードバックをオンデマンドで得られることで、開発者は安心して試行錯誤すること ができる • 成果物が完成する前でもテストのことを考えることはできる •
プロダクトコードとテストコードを一緒に育てていくことで、「テストしやすさ」「使いや すさ」も一緒に作っていく • 完成形が分からないからこそ、テストを書いて試行錯誤する
How do you like Testing?
完