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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Atsushi Okui
January 12, 2026
Programming
25
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
23
モックを適切に使ったテスト
a_okui
0
28
カバレッジとは?
a_okui
0
30
プログラミングどうやる? ~テスト駆動開発から学ぶ達人の型~
a_okui
0
450
『Accelerate State of DevOps Report 2022』翻訳とまとめ
a_okui
0
2.5k
コード品質がもたらすビジネスへの影響(社内向け翻訳、まとめ)
a_okui
0
410
『Accelerate State of DevOps Report 2021』翻訳とまとめ
a_okui
0
640
Other Decks in Programming
See All in Programming
The Bowling Game- From Imperative to Functional Programming - Part 1
philipschwarz
PRO
0
290
Dataformのリポジトリを立ち上げるときにまずやること / dataform-day0-2026
snhryt
0
210
霧の中の代数的エフェクト
funnyycat
1
300
OSINT for SRE: 学術論文とポストモーテムから探る システム障害の共通パターン / SRE NEXT 2026
tomoyk
1
2.7k
Skillsは効率化、Agentsは"自分の拡張"——Builder時代のエージェント編成(CC Night 2026)
wemra
1
200
Honoでのサプライチェーン侵害対策 〜 3つのライブラリに学ぶ
yusukebe
7
1.8k
AIキャラアプリkaiwaの低遅延音声通話基盤をどう作ったか - AWS Gravitonで支える低遅延・低コストAI Agent基盤
mogamit
0
160
LaravelLive Japan の裏方のすべて — 第188回 PHP勉強会@東京 (2026-06-24)
suguruooki
2
150
任せる範囲はこう広がった / How the Scope of AI Delegation Has Expanded
nrslib
1
240
Language Server 使ってる? 〜VSCode と Zed の場合〜 / Are you using a Language Server? ~For VS Code and Zed~
handlename
0
840
音楽のための関数型プログラミング言語mimiumにおける多段階計算の活用
tomoyanonymous
1
290
Signal Forms: Details & Live Coding @enterJS 2026 in Mannheim
manfredsteyer
PRO
0
220
Featured
See All Featured
Accessibility Awareness
sabderemane
1
150
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
560
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
200
Docker and Python
trallard
47
3.9k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
What does AI have to do with Human Rights?
axbom
PRO
1
2.2k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
180
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
270
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.3k
New Earth Scene 8
popppiees
3
2.4k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.3k
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?
完