Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
JJUG CCC Fall 2023 若手こそテストを書こう!
Search
shiryu
November 11, 2023
Technology
210
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
JJUG CCC Fall 2023 若手こそテストを書こう!
発表資料です。
Github :
https://github.com/Shiryu-go/wakate_test
shiryu
November 11, 2023
More Decks by shiryu
See All by shiryu
JJUG_CFPの書き方について
shiryu
0
100
ゆるゆるJava第二回「第一回でのつまづきと復習ラムダ式」
shiryu
0
45
2023/08/26 むきむきJava GithubActions+GCP+自動デプロイ(他山の石ver)
shiryu
1
170
今更JUnit4を勉強する
shiryu
0
150
2023/08/31 JJUG LT会 初登壇から学んだ一つのこと
shiryu
0
120
Other Decks in Technology
See All in Technology
絵ではじめるKubernetesセキュリティ
aoi1
4
670
AIは推し活である。
kurazuuuuuu
1
520
What the customer really needed
kawaguti
PRO
3
210
アプリログインとWeb認証基盤をつなぐ ASWebAuthenticationSession 作法
shimastripe
1
340
バイブコーディング時代のWebアプリ開発入門~Cloud Runで学ぶセキュアなビルドとデプロイ
waiwai2111
1
140
AI時代の「技術的負債」の変質ー概念の終焉と再解釈、エージェントと共に向かう先
nwiizo
1
2.9k
Slack上でインフラをトラブルシュートする! Agentic Platform Engineeringの第一歩
teru0x1
5
1.8k
30座EKS, 180次升級淬煉的EKS Upgrade Skill 的歷程
eric8230
0
180
AIエージェントの権限管理 3: Agentic RAG の Fine grained access control 編
ren8k
0
120
映像変換サーバーなしで端末内でHLSを生成してライブ配信
hikarusato
0
130
Minecraft JavaのMODをSwiftで作る
1mash0
0
180
開発投資の期待値を上げるプロダクトロードマップづくり ~プロダクトエンジニアが越境して事業を伸ばす~
kekekenta
1
210
Featured
See All Featured
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
470
Claude Code のすすめ
schroneko
67
230k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Six Lessons from altMBA
skipperchong
29
4.5k
The Limits of Empathy - UXLibs8
cassininazir
1
680
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
1
530
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.2k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
530
Git: the NoSQL Database
bkeepers
PRO
432
67k
Transcript
若手こそテストを書こう! JJUG CCC Fall 2023 1
2 @Shiryu_go 新卒1年目 関東圏SES企業勤務 むきむきJava
3 アイスブレイク
4 指摘されたこと、継続できている 1. 姿勢 2. コミットメッセージ 3. 勉強習慣 4. 質問するときのフォーマット
…etc…
5 実際のところ、どのくらいの継続率? • 8割以上 • 5以上 • それ以下
6 実際のところ、どのくらいの継続率? • 8割以上 ← • 5割以上 • それ以下
7 実際のところ、どのくらいの継続率? • 8割以上 • 5割以上 ← • それ以下
8 実際のところ、どのくらいの継続率? • 8割以上 • 5割以上 • それ以下 ←
9 「言ったこと、言った時しかやっていないじゃん。」 上司からの一言
10 🥺 ぼく
11 忘れる
12
13 上昇するグラフ 理想の成長曲線はこっち
14 どうすれば良いか チェックシート 模擬的に取り組み、評価 無意識のうちにできるようになれば実現可能
15 めちゃめちゃだるい
16 人とソフトウェアを考えた時 指摘事項 = バグ
17 ソフトウェアの場合 自動化可能
18 テストを書く
19 今回の発表は皆さんに これをやってもらうのを目標にして喋ります 家に帰って テストコードを とりあえず書いてもらう
若手こそテストを書こう! JJUG CCC Fall 2023 Shiryu 20
21 ソフトウェア・テストは、 ソフトウェア製品または アプリケーションが想定どおりに 機能することを評価および検証するプロセス テストってなんなのか 要は確認
22 テストってなんなのか ブラックボックステストとホワイトボックステスト 疎結合 密結合
23 テストってなんなのか ブラックボックステストとホワイトボックステスト 疎結合 密結合
24 テストを書くメリット 品質確保、(動作保証)
25 テストでなぜ品質確保ができるのか 1. 手動でテストを行うことによるミスの排除 2. 何度でも実行可能 a. 変更時に行うリグレッションテスト b. CI/CDパイプラインへの組み込み
確認をちゃんと行う
26 テストを書かなかった場合 1. クラス同士の繋ぎこみに苦労 2. Curlをひたすら打ち込んで動作確認(手打ち) 3.デプロイしたは良いけどエラー吐いてる… 一日中Curlコマンド打って動作確認していた時が 辛かった
27 バグシューティングの手順 1.問題の再現 2.問題箇所の特定(依存関係の整理) 3.バグの発生理由の探索 単体テストを書くことで、問題箇所の特定が簡単に
28 時間効率的な話
29 テストを書いてみたら 依存関係をあまり気にすることなく、一つのクラス ・メソッドの実装に集中できた 丸1日かかっていたのが、四時間程度に
30 これによって 開発効率の上昇(実装速度) バグ発生箇所の特定速度上昇 →開発速度の向上
31 なんで若手? 1. コードを動く状態で手元に置いておけるから a. コードの書きっぱなし防止 2. 品質の基準を自分の中で確立できるから a. 部下の仕事の品質保証は、上司の仕事の一つ
3. チェックする習慣が身に付く
32 実際のテストを紹介していく
33 これだけ覚えて テスト用メソッド 最低限これだけあれば良い assertThat(A).isEquals(B);
34 サンプルコード(POJO)
35 サンプルコード(POJO)のテスト
36 極端にシンプルだが、やることはこれだけ 入力に対して 期待する動作を行なっているかを 確認する
37 他のクラスに依存するクラスのテスト モック(スタブ)によって切り離しが必要
38 モック = ハリボテ
39
40
41 モック - > 高機能なスタブ スタブ - > テスト用に用意される、依存関係があ る他のものへの代替物、
モックとスタブの違い
42 実例…の前に
43 SpringBootのざっくりとした紹介 Servlet Controller Controller Controller Service Repository D B
44 テストコード(SpringBoot) 1. Repository 2. Service 3. Controller 依存先クラスが少ないものから 書いていくのがベスト
45 これを覚えよう Spring依存なし 1. @Mock 2. doA().when().method() Spring依存有り 3. WebMVCMock(Springに依存)
4. @Sql()(Springに依存)
46 以下、InteliJIDEAが 上手く映らなかった時用スライド 紹介
47 実践的なテストコード(SpringBoot)サンプル 1,Repository
48 1.Repositorテスト用コード テスト用SQLデータをロード、 組み込みデータベースに対して実行 Repositoryクラスメソッド呼び出し Repositoryクラスは 組み込みデータベースにアクセスし、 データを取得 SQLが正しく動作し、 Repositoryクラスから帰ってくるか
テスト
49 importはこんな感じ
50 実践的なテストコード(SpringBoot)サンプル 2.Service
51 実践的なテストコード(SpringBoot)サンプル 2.Service Mockを注入するための前処理 Mockを入れられるクラスインスタンス クラスインスタンスに入れるMock Mockの挙動の定義 ServiceがMockから受け取ったデー タをうまく加工できているかのテスト
52 2.Service importはこんな感じ
53 実践的なテストコード(SpringBoot)サンプル 3.Controller
54
55 ResponseBodyがJSON形式 ているかどうかの確認 Web Rest APIの簡易呼び出し Web Rest APIの簡易呼び出し Web
Rest APIの簡易呼び出し
56 3.Controller import
57 デモから戻る(予定) まとめ
58 assertThat(A).isEquals(B); A Equals Bであることの証明 isEqualsはMathcerクラスなので、 等価性の定義に注意
59 まとめ1 InjectMocks -> テストのための依存性解決 Mock -> テスト対象を外部から独立させる為 doNothing().when().method() ->
Mockの動作定義
60 まとめ2 @jdbcTest ->データベース関連のテスト @Sql ->SQLファイルの読み込み、実行 WebMVCTest -> HTTPリクエストの模擬
61 最後に
62 確実に一歩進んでいることを確かめる ソフトウェア Good : 定期的なテスト 自己成長 Good : 同じ失敗をしないように確認をする
63 上昇するグラフ こんな感じにね おしまい
64 Appendix
65 リグレッションテスト(回帰テスト) バグが発生する時 1.プログラムに変更が発生した時 2.ハードの変化(経年劣化等)
66 どうしたらバグの発生を抑えられるか プログラムに変更を加える度にテストで動作保証 →同一の検査を何度も手で行うのは効率が悪い →テストコードを書くことで自動化したら、バグの 発生も抑えられるので、良い。