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
2
180
JJUG CCC Fall 2023 若手こそテストを書こう!
発表資料です。
Github :
https://github.com/Shiryu-go/wakate_test
shiryu
November 11, 2023
Tweet
Share
More Decks by shiryu
See All by shiryu
JJUG_CFPの書き方について
shiryu
0
71
ゆるゆるJava第二回「第一回でのつまづきと復習ラムダ式」
shiryu
0
27
2023/08/26 むきむきJava GithubActions+GCP+自動デプロイ(他山の石ver)
shiryu
1
150
今更JUnit4を勉強する
shiryu
0
120
2023/08/31 JJUG LT会 初登壇から学んだ一つのこと
shiryu
0
100
Other Decks in Technology
See All in Technology
戰略轉變:從建構 AI 代理人到發展可擴展的技能生態系統
appleboy
0
190
AWS re:Invent 2025 を振り返る
kazzpapa3
2
110
Introduction to Bill One Development Engineer
sansan33
PRO
0
340
Databricks Free Edition講座 データエンジニアリング編
taka_aki
0
2.5k
Kusakabe_面白いダッシュボードの表現方法
ykka
0
120
Bill One 開発エンジニア 紹介資料
sansan33
PRO
4
17k
次世代AIコーディング:OpenAI Codex の最新動向 進行スライド/nikkei-tech-talk-40
nikkei_engineer_recruiting
0
140
AIエージェントを5分で一気におさらい!AIエージェント「構築」元年に備えよう
yakumo
1
150
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
10k
AI駆動開発ライフサイクル(AI-DLC)の始め方
ryansbcho79
0
330
Models vs Bounded Contexts for Domain Modularizati...
ewolff
0
140
AI時代のアジャイルチームを目指して ー スクラムというコンフォートゾーンからの脱却 ー / Toward Agile Teams in the Age of AI
takaking22
11
6.4k
Featured
See All Featured
[RailsConf 2023] Rails as a piece of cake
palkan
58
6.2k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
61k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
370
Un-Boring Meetings
codingconduct
0
180
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
130
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
2
79
Code Review Best Practice
trishagee
74
19k
How Software Deployment tools have changed in the past 20 years
geshan
0
31k
GitHub's CSS Performance
jonrohan
1032
470k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.6k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
0
150
Docker and Python
trallard
47
3.7k
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 どうしたらバグの発生を抑えられるか プログラムに変更を加える度にテストで動作保証 →同一の検査を何度も手で行うのは効率が悪い →テストコードを書くことで自動化したら、バグの 発生も抑えられるので、良い。