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
JJUG CCC Fall 2023 若手こそテストを書こう!
Search
shiryu
November 11, 2023
Technology
190
2
Share
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
88
ゆるゆるJava第二回「第一回でのつまづきと復習ラムダ式」
shiryu
0
34
2023/08/26 むきむきJava GithubActions+GCP+自動デプロイ(他山の石ver)
shiryu
1
160
今更JUnit4を勉強する
shiryu
0
140
2023/08/31 JJUG LT会 初登壇から学んだ一つのこと
shiryu
0
120
Other Decks in Technology
See All in Technology
[Scram Fest Niigata2026]Quality as Code〜AIにQAの思考を再現させる試み〜
masamiyajiri
1
310
Databricks 月刊サービスアップデートまとめ 2026年04月号
tyosi1212
0
110
SLI/SLO、「完全に理解した」から「チョットデキル」へ
maruloop
4
410
AI時代の品質はテストプロセスの作り直し #scrumniigata
kyonmm
PRO
4
1.5k
PdM・Eng・QAで進めるAI駆動開発の現在地/aidd-with-pdm-eng-qa
shota_kusaba
0
200
20260513_生成AIを専属DSに_AI分析結果の検品テクニック_ハンズオン_交通事故データ
doradora09
PRO
0
220
拝啓、あの夏の僕へ〜あなたも知っているApp Runnerの世界〜
news_it_enj
0
240
「QA=テスト」「シフトレフト=スクラムイベントの参加者の一員」の呪縛を解く。アジャイルな開発を止めないために、10Xで挑んだ「右側のしわ寄せ」解消記 #scrumniigata
nihonbuson
PRO
5
1k
AI時代に、 データアナリストがデータエンジニアに異動して
jackojacko_
0
730
そのSLO 99.9%、本当に必要ですか? 〜優先度付きSLOによる責任共有の設計思想〜 / Is that 99.9% SLO really necessary? Design philosophy of shared responsibility through prioritized SLOs
vtryo
0
580
Swift Sequence の便利 API 再発見
treastrain
1
260
カオナビに Suspenseを導入するまで / The Road to Suspense at kaonavi
kaonavi
1
450
Featured
See All Featured
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
350
Reality Check: Gamification 10 Years Later
codingconduct
0
2.1k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
110
Rails Girls Zürich Keynote
gr2m
96
14k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
52k
What's in a price? How to price your products and services
michaelherold
247
13k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
160
Technical Leadership for Architectural Decision Making
baasie
3
360
ラッコキーワード サービス紹介資料
rakko
1
3.3M
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.4k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
190
RailsConf 2023
tenderlove
30
1.4k
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 どうしたらバグの発生を抑えられるか プログラムに変更を加える度にテストで動作保証 →同一の検査を何度も手で行うのは効率が悪い →テストコードを書くことで自動化したら、バグの 発生も抑えられるので、良い。