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
Atsushi Okui
January 12, 2026
Programming
32
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
35
モックを適切に使ったテスト
a_okui
0
63
カバレッジとは?
a_okui
0
35
プログラミングどうやる? ~テスト駆動開発から学ぶ達人の型~
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
人間の目はかわらない、だからJPEGは30年もつ
yuzneri
12
19k
PyConJP2026_wat_Python × Signal Processing: How to Draw Pictures with Sound Using Spectrogram Art
wat
0
200
go-spidermonkeyでAIエージェントのCode Modeを実装する
syumai
1
650
30年振りにコンパイラの定数整数除算を改善した
herumi
9
4k
Japan Community Day at Kubecon + CloudNativeCon Japan 2026: Learning Container Privilege Control by Building My Own Low-Level Container Runtime
ternbusty
1
170
Jindong: Introducing Declarative Haptics in Compose Multiplatform
l2hyunwoo
0
130
170k Jobs a Day on GKE: Scaling Mercari's CI Platform - and What's Next for AI-Native Development
junyaokabe
0
120
わからない話を追いかけたら、プログラミング言語を作る側にいた
ydah
3
540
複数の Claude Code が"放置"されてしまう問題をCLI ダッシュボードを自作して解決した話
sumihiro3
1
720
関東Kaggler会_NVIDIA_Nemotron_コンペ_振り返り
rick_ds
0
710
片田舎のおっさん、 Swift Buildのダイアモンド問題解決の不具合修正PRを出すが、解決方法がキャッシュをしないようにすることであり、ビルド時間が伸びると言われてマージされないので高速化もする/swiftbuild
yimajo
0
250
ソフトウェアラスタライザ
fadis
1
500
Featured
See All Featured
Measuring & Analyzing Core Web Vitals
bluesmoon
9
970
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.3k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
440
The browser strikes back
jonoalderson
0
1.5k
The Limits of Empathy - UXLibs8
cassininazir
1
610
Speed Design
sergeychernyshev
33
2k
How to Talk to Developers About Accessibility
jct
2
520
YesSQL, Process and Tooling at Scale
rocio
174
15k
A designer walks into a library…
pauljervisheath
211
24k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
500
Producing Creativity
orderedlist
PRO
348
40k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
64
56k
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?
完