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
8yabusa
March 19, 2018
Programming
0
78
テストデータについて
AndroidTestNight#3の発表資料です
8yabusa
March 19, 2018
Tweet
Share
More Decks by 8yabusa
See All by 8yabusa
BLEアプリ設計パターン / ble_app_pattern
tomohikosato
10
3.2k
Bluetoothわかんねぇよなぁ!ハム太郎! / Bluetooth_hamutaro
tomohikosato
4
1.2k
効率よく勉強する(Androidアプリ開発編)
tomohikosato
1
300
いかにして問題を解くか
tomohikosato
0
230
Other Decks in Programming
See All in Programming
NixOS + Kubernetesで構築する自宅サーバーのすべて
ichi_h3
0
450
What's new in Spring Modulith?
olivergierke
1
130
高度なUI/UXこそHotwireで作ろう Kaigi on Rails 2025
naofumi
4
3.8k
Django Ninja による API 開発効率化とリプレースの実践
kashewnuts
0
1.2k
Goで実践するドメイン駆動開発 AIと歩み始めた新規プロダクト開発の現在地
imkaoru
4
790
CSC509 Lecture 03
javiergs
PRO
0
330
Advance Your Career with Open Source
ivargrimstad
0
450
詳しくない分野でのVibe Codingで困ったことと学び/vibe-coding-in-unfamiliar-area
shibayu36
3
4.8k
私はどうやって技術力を上げたのか
yusukebe
43
18k
明日から始めるリファクタリング
ryounasso
0
130
複雑化したリポジトリをなんとかした話 pipenvからuvによるモノレポ構成への移行
satoshi256kbyte
1
990
デミカツ切り抜きで面倒くさいことはPythonにやらせよう
aokswork3
0
220
Featured
See All Featured
[RailsConf 2023] Rails as a piece of cake
palkan
57
5.9k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Building a Modern Day E-commerce SEO Strategy
aleyda
43
7.7k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
9
580
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
2.7k
Learning to Love Humans: Emotional Interface Design
aarron
274
41k
Git: the NoSQL Database
bkeepers
PRO
431
66k
Designing for humans not robots
tammielis
254
26k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.6k
Large-scale JavaScript Application Architecture
addyosmani
514
110k
Done Done
chrislema
185
16k
Transcript
テストデータについて Tomohiko Sato
⾃⼰紹介 • Tomohiko Sato @8yabusa • Qrio.inc (2017年10⽉~) • テストは主に本で読んだ知識で実践
テストデータについて 具体例で考えよう
視聴回数、どんな⾵に表⽰されるか? • 万、億単位がある (例: 32回、 256 万回、3億回) • 3桁⽬にカンマがある (例:
1,353 回、3,245万回) 例: Youtube
ViewCount(58).show() // 58回 ViewCount(43453).show() // 4万回 実装したとする
ViewCount(58).show() // 58回 ViewCount(43453).show() // 4万回 テストどうしよう?
• テストは特定のケースで成功/失敗することしか⽰せない • Intが取りうる値の範囲 = 2^32通りのテストするのか? • じゃあどのケースでテストする? 完璧なテストなど存在しない
Q. そもそも何のためにテスト しているのか A1. テスト対象が仕様通りに動いて欲しいから A2. テスト対象がバグって欲しくないから
A1.テスト対象が仕様通りに 動いて欲しい • 仕様をグループ分け(同値分割)、グループに属する適当 な値を選びテスト • 億回、万回、回とグループ分けし、適当な値でテ スト • カンマあり、カンマとグループ分けし、適当な値
でテスト
A2. テスト対象がバグって欲しくな い • バグを引き起こしそうなテストデータを⽤意する • グループの変わり⽬ ( = 境界値)
• 9999, 10000 -> 9,999回、1万回 (桁の変わり⽬) • 300, 3,000 -> 300回、 3,000回 (カンマが付く、付 かないの変わり⽬) • 特殊な値 • 0, INT_MAXとか
こんな感じ(?) * いろんな桁でテスト * 単位の変わり⽬目、カンマがつく、付かないに特に着⽬目 * 0とか9999, 10000でテスト * -1とか異異常な値は、インスタンス⽣生成時に弾かれる。テストしたければ別途テスト
どこが失敗したかわかり⾟い
パラメタライズドテスト JUnitParams
まとめ • 完全なテストは存在しない、それっぽい値でテストする必要がある • 仕様を満たしていると⾔えそうな値を⽤意 • 仕様をグループ分けして適当な値でテスト • プログラマがミスりそうな値を⽤意 •
例えばメソッドの出⼒が変わる境界の値 • いろんな値をテストする場合はパラメタライズドテストが便利 • JUnit4標準のは微妙なので、JUnitParamsか、JUnit5を使おう
• 完全なテストは存在しない、それっぽい値でテストする必要がある • 仕様を満たしていると⾔えそうな値を⽤意 • 仕様をグループ分けして適当な値でテスト • プログラマがミスりそうな値を⽤意 • 例えばメソッドの出⼒が変わる境界の値
• いろんな値をテストする場合はパラメタライズドテストが便利 • JUnit4標準のは微妙なので、JUnitParamsか、JUnit5を使おう ありがとうございました !
参考リンク • テスト7原則について http://www.itmedia.co.jp/im/ articles/1111/07/news192.html • テストは⽋陥があることしか⽰せない • 全数テストは不可能 •
JUnitParams https://github.com/Pragmatists/JUnitParams • JUnit5 ParameterizedTest https://junit.org/junit5/docs/ current/user-guide/#writing-tests-parameterized-tests