Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
若手こそテストを書こう! JJUG CCC Fall 2023 1
Slide 2
Slide 2 text
2 @Shiryu_go 新卒1年目 関東圏SES企業勤務 むきむきJava
Slide 3
Slide 3 text
3 アイスブレイク
Slide 4
Slide 4 text
4 指摘されたこと、継続できている 1. 姿勢 2. コミットメッセージ 3. 勉強習慣 4. 質問するときのフォーマット …etc…
Slide 5
Slide 5 text
5 実際のところ、どのくらいの継続率? ● 8割以上 ● 5以上 ● それ以下
Slide 6
Slide 6 text
6 実際のところ、どのくらいの継続率? ● 8割以上 ← ● 5割以上 ● それ以下
Slide 7
Slide 7 text
7 実際のところ、どのくらいの継続率? ● 8割以上 ● 5割以上 ← ● それ以下
Slide 8
Slide 8 text
8 実際のところ、どのくらいの継続率? ● 8割以上 ● 5割以上 ● それ以下 ←
Slide 9
Slide 9 text
9 「言ったこと、言った時しかやっていないじゃん。」 上司からの一言
Slide 10
Slide 10 text
10 🥺 ぼく
Slide 11
Slide 11 text
11 忘れる
Slide 12
Slide 12 text
12
Slide 13
Slide 13 text
13 上昇するグラフ 理想の成長曲線はこっち
Slide 14
Slide 14 text
14 どうすれば良いか チェックシート 模擬的に取り組み、評価 無意識のうちにできるようになれば実現可能
Slide 15
Slide 15 text
15 めちゃめちゃだるい
Slide 16
Slide 16 text
16 人とソフトウェアを考えた時 指摘事項 = バグ
Slide 17
Slide 17 text
17 ソフトウェアの場合 自動化可能
Slide 18
Slide 18 text
18 テストを書く
Slide 19
Slide 19 text
19 今回の発表は皆さんに これをやってもらうのを目標にして喋ります 家に帰って テストコードを とりあえず書いてもらう
Slide 20
Slide 20 text
若手こそテストを書こう! JJUG CCC Fall 2023 Shiryu 20
Slide 21
Slide 21 text
21 ソフトウェア・テストは、 ソフトウェア製品または アプリケーションが想定どおりに 機能することを評価および検証するプロセス テストってなんなのか 要は確認
Slide 22
Slide 22 text
22 テストってなんなのか ブラックボックステストとホワイトボックステスト 疎結合 密結合
Slide 23
Slide 23 text
23 テストってなんなのか ブラックボックステストとホワイトボックステスト 疎結合 密結合
Slide 24
Slide 24 text
24 テストを書くメリット 品質確保、(動作保証)
Slide 25
Slide 25 text
25 テストでなぜ品質確保ができるのか 1. 手動でテストを行うことによるミスの排除 2. 何度でも実行可能 a. 変更時に行うリグレッションテスト b. CI/CDパイプラインへの組み込み 確認をちゃんと行う
Slide 26
Slide 26 text
26 テストを書かなかった場合 1. クラス同士の繋ぎこみに苦労 2. Curlをひたすら打ち込んで動作確認(手打ち) 3.デプロイしたは良いけどエラー吐いてる… 一日中Curlコマンド打って動作確認していた時が 辛かった
Slide 27
Slide 27 text
27 バグシューティングの手順 1.問題の再現 2.問題箇所の特定(依存関係の整理) 3.バグの発生理由の探索 単体テストを書くことで、問題箇所の特定が簡単に
Slide 28
Slide 28 text
28 時間効率的な話
Slide 29
Slide 29 text
29 テストを書いてみたら 依存関係をあまり気にすることなく、一つのクラス ・メソッドの実装に集中できた 丸1日かかっていたのが、四時間程度に
Slide 30
Slide 30 text
30 これによって 開発効率の上昇(実装速度) バグ発生箇所の特定速度上昇 →開発速度の向上
Slide 31
Slide 31 text
31 なんで若手? 1. コードを動く状態で手元に置いておけるから a. コードの書きっぱなし防止 2. 品質の基準を自分の中で確立できるから a. 部下の仕事の品質保証は、上司の仕事の一つ 3. チェックする習慣が身に付く
Slide 32
Slide 32 text
32 実際のテストを紹介していく
Slide 33
Slide 33 text
33 これだけ覚えて テスト用メソッド 最低限これだけあれば良い assertThat(A).isEquals(B);
Slide 34
Slide 34 text
34 サンプルコード(POJO)
Slide 35
Slide 35 text
35 サンプルコード(POJO)のテスト
Slide 36
Slide 36 text
36 極端にシンプルだが、やることはこれだけ 入力に対して 期待する動作を行なっているかを 確認する
Slide 37
Slide 37 text
37 他のクラスに依存するクラスのテスト モック(スタブ)によって切り離しが必要
Slide 38
Slide 38 text
38 モック = ハリボテ
Slide 39
Slide 39 text
39
Slide 40
Slide 40 text
40
Slide 41
Slide 41 text
41 モック - > 高機能なスタブ スタブ - > テスト用に用意される、依存関係があ る他のものへの代替物、 モックとスタブの違い
Slide 42
Slide 42 text
42 実例…の前に
Slide 43
Slide 43 text
43 SpringBootのざっくりとした紹介 Servlet Controller Controller Controller Service Repository D B
Slide 44
Slide 44 text
44 テストコード(SpringBoot) 1. Repository 2. Service 3. Controller 依存先クラスが少ないものから 書いていくのがベスト
Slide 45
Slide 45 text
45 これを覚えよう Spring依存なし 1. @Mock 2. doA().when().method() Spring依存有り 3. WebMVCMock(Springに依存) 4. @Sql()(Springに依存)
Slide 46
Slide 46 text
46 以下、InteliJIDEAが 上手く映らなかった時用スライド 紹介
Slide 47
Slide 47 text
47 実践的なテストコード(SpringBoot)サンプル 1,Repository
Slide 48
Slide 48 text
48 1.Repositorテスト用コード テスト用SQLデータをロード、 組み込みデータベースに対して実行 Repositoryクラスメソッド呼び出し Repositoryクラスは 組み込みデータベースにアクセスし、 データを取得 SQLが正しく動作し、 Repositoryクラスから帰ってくるか テスト
Slide 49
Slide 49 text
49 importはこんな感じ
Slide 50
Slide 50 text
50 実践的なテストコード(SpringBoot)サンプル 2.Service
Slide 51
Slide 51 text
51 実践的なテストコード(SpringBoot)サンプル 2.Service Mockを注入するための前処理 Mockを入れられるクラスインスタンス クラスインスタンスに入れるMock Mockの挙動の定義 ServiceがMockから受け取ったデー タをうまく加工できているかのテスト
Slide 52
Slide 52 text
52 2.Service importはこんな感じ
Slide 53
Slide 53 text
53 実践的なテストコード(SpringBoot)サンプル 3.Controller
Slide 54
Slide 54 text
54
Slide 55
Slide 55 text
55 ResponseBodyがJSON形式 ているかどうかの確認 Web Rest APIの簡易呼び出し Web Rest APIの簡易呼び出し Web Rest APIの簡易呼び出し
Slide 56
Slide 56 text
56 3.Controller import
Slide 57
Slide 57 text
57 デモから戻る(予定) まとめ
Slide 58
Slide 58 text
58 assertThat(A).isEquals(B); A Equals Bであることの証明 isEqualsはMathcerクラスなので、 等価性の定義に注意
Slide 59
Slide 59 text
59 まとめ1 InjectMocks -> テストのための依存性解決 Mock -> テスト対象を外部から独立させる為 doNothing().when().method() -> Mockの動作定義
Slide 60
Slide 60 text
60 まとめ2 @jdbcTest ->データベース関連のテスト @Sql ->SQLファイルの読み込み、実行 WebMVCTest -> HTTPリクエストの模擬
Slide 61
Slide 61 text
61 最後に
Slide 62
Slide 62 text
62 確実に一歩進んでいることを確かめる ソフトウェア Good : 定期的なテスト 自己成長 Good : 同じ失敗をしないように確認をする
Slide 63
Slide 63 text
63 上昇するグラフ こんな感じにね おしまい
Slide 64
Slide 64 text
64 Appendix
Slide 65
Slide 65 text
65 リグレッションテスト(回帰テスト) バグが発生する時 1.プログラムに変更が発生した時 2.ハードの変化(経年劣化等)
Slide 66
Slide 66 text
66 どうしたらバグの発生を抑えられるか プログラムに変更を加える度にテストで動作保証 →同一の検査を何度も手で行うのは効率が悪い →テストコードを書くことで自動化したら、バグの 発生も抑えられるので、良い。