SlideShare a Scribd company logo
1 of 33
Download to read offline
@ktanaka117

ダンボー⽥中
俺コン Day2 Track A 20:40 〜
Swiftで

聞いておぼえるテスト書き
⾃⼰紹介
• ダンボー⽥中/ktanaka117
• 百合好きのダンボールの⼈
• テスト、設計、リファクタリング

がホットワード
• 「愛してる」を知りたいのです。
もくじ
• 対象聴衆
• トークの⽬的
• 想定外に⽬を向ける
• むかしばなし
• 単体テストはロジックに
• ライヴコーディング
• FAQ
対象聴衆
• テストってなに?と思う⽅
• テストをどう書き始めるべきか悩む⽅
• テスト初⼼者の⽅
• テスト経験者の⽅


「エンジニアは想定外を考える仕事だよ」
by ⽗(ソフトウェアエンジニア)


⼩学⽣Danbo-Tanaka


幼い頃からPCゲームをたしなむ⼦供がおりました。
基本プレイ無料のオンラインPCゲームが流⾏りだした頃。
その頃は⾃分⽤のPCを持っておらず、

Adminである⽗親が管理する家族共⽤PCがあるのみでした。
⼩学⽣Danbo-Tanaka
権限を持たない⼩学⽣は、インストールするソフトウェアや

サービスの安全性をAdminに説明する必要がありました。
Admin ⽗


権限を持たない⼩学⽣は、インストールするソフトウェアや

サービスの安全性をAdminに説明する必要がありました。
Admin ⽗




家族に迷惑をかける可能性がある部分=

ウイルスなどソフトウェアの信頼性やお⾦の話、

住所や電話番号などのプライバシーに関わる情報の取り扱い
⼈権を求めて、ゲームの利⽤規約を読み漁る。
• 「基本プレイ無料」

→有料になるのはどういうとき?

→有料になったらいくらかかるの?
• 「退会後、半年はユーザーの情報を保持します」

→退会しなかったらどうなる?

→半年が経過したらユーザー情報はどう破棄される?
⼈権を求めて、ゲームの利⽤規約を読み漁る。
• 「基本プレイ無料」

→有料になるのはどういうとき?

→有料になったらいくらかかるの?
• 「退会後、半年はユーザーの情報を保持します」

→退会しなかったらどうなる?

→半年が経過したらユーザー情報はどう破棄される?


⽇常⽣活にも潜むテストケース
• 地震が起きたら?

→この机の下に隠れたら⽣き残れそう

→家に備蓄品が⾜りないので、死ぬしかない
• 登壇直前に⾵邪をひいたら?

→仲間に連絡してキャンセルする

→全⼒で治して翌⽇の空き時間に登壇する


テストの書き⽅
• 「この条件で」
• 「この操作をしたら」
• 「この結果になること」
仕様を明確に理解すること
定まっていない仕様を決めること
仕様を明確に理解すること
定まっていない仕様を決めること


まとめ:テストを書くには
• 仕様を明確にする
• 定まっていない仕様を決める
• 正常系以外の、想定外に⽬を向ける

もしものときにどうするか考えておく
テストの書き⽅
• もしもの時にどうするか=条件分岐


Q. なんで⾃動テストを書く必要があるの?
A. ⼿動テストが⾯倒だから
なにか変更を加えたとき、

既存の実装を壊していないか確認する必要がある。

全ての「もしも」を⼿動ですべて確認できますか?
Q. どこからテストを書くべき?
A. 慣れた⼈は、重要な箇所から。 

初⼼者の⼈は、⼊れられそうなところから。
テストにもメンテナンスコストが発⽣します。

アプリにとってクリティカルなところから優先的に⼊れるべきですが、

初⼼者は⼊れられるところから⼊れるで良いと思っています。
Q. どれくらいまでテストケースを考えるべき?
A. 不安を解消できるところまで。
開発を進めるのに、⾃信を持って開発を進められるところまで。

開発をするエンジニアが探索的テストまで担保する必要はないと思う。
参考
どうやってテストケースを

考えれば良いか

(テスト設計)
参考
どうやってテストを書いていくか
参考
Swiftではどう書くか
宣伝
iOSDC Reject Confも登壇します。



OSSにテストを⼊れていく話と

ライヴコーディングします。
⽥中賢治
GitHub: ktanaka117
Twitter: @ktanaka117

More Related Content

More from Kenji Tanaka

More from Kenji Tanaka (20)

2つの同期 4つの状態 #pixiv_ios_arch
2つの同期 4つの状態 #pixiv_ios_arch2つの同期 4つの状態 #pixiv_ios_arch
2つの同期 4つの状態 #pixiv_ios_arch
 
2つの同期 4つの状態 #app_mp
2つの同期 4つの状態 #app_mp2つの同期 4つの状態 #app_mp
2つの同期 4つの状態 #app_mp
 
2つの同期 4つの状態 #roppongiswift
2つの同期 4つの状態 #roppongiswift2つの同期 4つの状態 #roppongiswift
2つの同期 4つの状態 #roppongiswift
 
トークンリフレッシュ処理を含むAPIClientのテスト #hakata_test_night
トークンリフレッシュ処理を含むAPIClientのテスト #hakata_test_nightトークンリフレッシュ処理を含むAPIClientのテスト #hakata_test_night
トークンリフレッシュ処理を含むAPIClientのテスト #hakata_test_night
 
よく使うテストヘルパーの紹介 #ios_test_night
よく使うテストヘルパーの紹介 #ios_test_nightよく使うテストヘルパーの紹介 #ios_test_night
よく使うテストヘルパーの紹介 #ios_test_night
 
設計時空のリファクタリング
設計時空のリファクタリング設計時空のリファクタリング
設計時空のリファクタリング
 
WACATE 2018 Summer
WACATE 2018 SummerWACATE 2018 Summer
WACATE 2018 Summer
 
テスト駆動開発入門 by Swift
テスト駆動開発入門 by Swiftテスト駆動開発入門 by Swift
テスト駆動開発入門 by Swift
 
An iOS Engineer challenges Web.
An iOS Engineer challenges Web.An iOS Engineer challenges Web.
An iOS Engineer challenges Web.
 
エンジニアのためのブログ講座Ver4
エンジニアのためのブログ講座Ver4エンジニアのためのブログ講座Ver4
エンジニアのためのブログ講座Ver4
 
TDDやってみよ
TDDやってみよTDDやってみよ
TDDやってみよ
 
ストレス社会に生きる、iOSエンジニアにオススメする百合の世界と作品
ストレス社会に生きる、iOSエンジニアにオススメする百合の世界と作品ストレス社会に生きる、iOSエンジニアにオススメする百合の世界と作品
ストレス社会に生きる、iOSエンジニアにオススメする百合の世界と作品
 
節子、それViewControllerやない...、FatViewControllerや...。
節子、それViewControllerやない...、FatViewControllerや...。節子、それViewControllerやない...、FatViewControllerや...。
節子、それViewControllerやない...、FatViewControllerや...。
 
iOS 11からのDeviceCheck #とは
iOS 11からのDeviceCheck #とはiOS 11からのDeviceCheck #とは
iOS 11からのDeviceCheck #とは
 
設計に答えはないから探してみよう
設計に答えはないから探してみよう設計に答えはないから探してみよう
設計に答えはないから探してみよう
 
iOS 11からのアプリ間ファイル共有
iOS 11からのアプリ間ファイル共有iOS 11からのアプリ間ファイル共有
iOS 11からのアプリ間ファイル共有
 
iOS 11からのアプリ間ファイル共有_公開用
iOS 11からのアプリ間ファイル共有_公開用iOS 11からのアプリ間ファイル共有_公開用
iOS 11からのアプリ間ファイル共有_公開用
 
参加者と振り返るWWDC17 公開用
参加者と振り返るWWDC17 公開用参加者と振り返るWWDC17 公開用
参加者と振り返るWWDC17 公開用
 
WWWDCの振り返りを始めるために
WWWDCの振り返りを始めるためにWWWDCの振り返りを始めるために
WWWDCの振り返りを始めるために
 
Stubる - Mockingjayを使ったHTTPクライアントのテスト -
Stubる - Mockingjayを使ったHTTPクライアントのテスト -Stubる - Mockingjayを使ったHTTPクライアントのテスト -
Stubる - Mockingjayを使ったHTTPクライアントのテスト -
 

Swiftで聞いておぼえるテスト書き