Slide 1

Slide 1 text

テストコードについて(仮) コーチェット チェックイン 2022/04/28 Bunta Fujikawa

Slide 2

Slide 2 text

※ Speaker Deck にアップロードするにあたり、一部 社内の情報は非表示にするなど変更をしてます

Slide 3

Slide 3 text

今日わかること - テストコードが何かわかる - テストコードの重要性

Slide 4

Slide 4 text

話そうと思った背景 - そろそろキューちゃんに必要になってくる - チーム内でテストコードの話をする機会が増えてきた - エンジニアの仕事内容をより知って欲しい

Slide 5

Slide 5 text

新しい機能を作ったら どのように正しく動いていると確認しますか?

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

ログイン機能に対するテスト

Slide 8

Slide 8 text

ログイン機能に対するテスト - すぐにこれだけテストケースが思いつく - メールアドレスとパスワードが正しい場合にログインができるか - ログイン後のリダイレクト先は正しいか - ログイン状態を維持できるか - メールアドレスが間違っていた場合 - メールアドレスの大文字小文字は区別するか - パスワードが間違っていた場合 - 退会済みのユーザーの場合 - セキュリティのあれこれ (詳細は省く) などなど

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

基本プログラムは共通化されている

Slide 11

Slide 11 text

基本プログラムは共通化されている このファイルどこに影響出るかわかります? 社内事例

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

例えば、社内ツールの変更 - 〇〇を必須で追加して! 社内事例

Slide 14

Slide 14 text

例えば、社内ツールの変更 - 〇〇を必須で追加して!→ 〇〇も対応しないとバグ 社内事例 社内事例

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

プログラムの影響範囲を全て把握して 手動で全てテストするのは辛い

Slide 17

Slide 17 text

なるべくテストも自動化させたい

Slide 18

Slide 18 text

テストコードとは - 書いたプログラムをテストするためのプログラム - 例えばブラウザ操作を自動でやってくれる - プログラムに変更があるたびに自動でテストが実行される(ようにするの一般的)

Slide 19

Slide 19 text

テストコードとは - 書いたプログラムをテストするためのプログラム - 例えばブラウザ操作を自動でやってくれる - プログラムに変更があるたびに自動でテストが実行される(ようにするの一般的) 自分たちの代わりに 自動でテストをしてくれるもの

Slide 20

Slide 20 text

自動でブラウザを動かしてみよう

Slide 21

Slide 21 text

Chrome DevTools から操作を記録

Slide 22

Slide 22 text

テストって工数が減るだけ?

Slide 23

Slide 23 text

例1: グーグルドライブのフォルダ構成変更 - フォルダ構成を大きく変更する場合 - ファイルの権限を間違えたらインシデントにつながる

Slide 24

Slide 24 text

例1: テストコードがあったら? Admin 管理者 ぶん

Slide 25

Slide 25 text

例1: テストコードがあったら? Admin 管理者 ぶん テストコード① 管理者はアクセスできる

Slide 26

Slide 26 text

例1: テストコードがあったら? Admin 管理者 ぶん テストコード① 管理者はアクセスできる テストコード② 管理者以外はアクセスできない

Slide 27

Slide 27 text

例1: テストコードがあったら? Admin Admin Admin 管理者 ぶん テストコード① 管理者はアクセスできる テストコード② 管理者以外はアクセスできない

Slide 28

Slide 28 text

例1: テストコードがあったら? Admin Public 管理者 ぶん テストコード① 管理者はアクセスできる テストコード② 管理者以外はアクセスできない Admin

Slide 29

Slide 29 text

例1: テストコードがあったら? Admin Public 管理者 ぶん テストコード① 管理者はアクセスできる テストコード② 管理者以外はアクセスできない Admin

Slide 30

Slide 30 text

例1: テストコードがあったら? Admin Public 管理者 ぶん テストコード① 管理者はアクセスできる テストコード② 管理者以外はアクセスできない Admin 意図しない変更を防げる(安心感)

Slide 31

Slide 31 text

例2: 口座の残高を倍にするプログラム書いてって言われたら

Slide 32

Slide 32 text

例2: 口座の残高を倍にするプログラム書いてって言われたら - 倍にするプログラムを書く (残高 × 2 すれば良い?)

Slide 33

Slide 33 text

例2: 口座の残高を倍にするプログラム書いてって言われたら - 倍にするプログラムを書く (残高 × 2 すれば良い?) - 残高と同じ金額を入金させる - プログラムの正しさを検証するプログラム(テストコード)を書く - 10,000円 → 20,000 円 - 最終的な残高と入金のレコードを確認 - 0円 → 0円 - -10,000円(総合口座) → ??

Slide 34

Slide 34 text

例2: 口座の残高を倍にするプログラム書いてって言われたら - 倍にするプログラムを書く (残高 × 2 すれば良い?) - 残高と同じ金額を入金させる - プログラムの正しさを検証するプログラム(テストコード)を書く - 10,000円 → 20,000 円 - 最終的な残高と入金のレコードを確認 - 0円 → 0円 - -10,000円(総合口座) → ?? テストを考える過程で 仕様が明確になる & テストが仕様書になる

Slide 35

Slide 35 text

メリット - 正しく動くことを証明する資産になる - テストコードがドキュメントになる - 手動でのテストを減らせる - 安心して変更ができる - バグが減る などなど

Slide 36

Slide 36 text

デメリット - テストコードを書く・変更する時間が必要になる - テストコードがあるからといってバグがないわけではない

Slide 37

Slide 37 text

テストがないコードはレガシーコード

Slide 38

Slide 38 text

まとめ - テストは大事、でも大変 - テストコードは自分たちの代わりに自動でテストをしてくれるもの - テストコードがあると安心して変更ができる(リファクタリングしやすい)

Slide 39

Slide 39 text

Author Bunta Fujikawa Twitter @buntafujikawa Qiita @buntafujikawa Github @buntafujikawa