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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
99
ゆるゆる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
振り返りこそエンジニアの本領
negima
0
330
GoにおけるFFIのこれまでとこれから
goccy
1
560
Beyond the Hype: Practical AI for Your Oracle Database with MCP
thatjeffsmith
1
280
Autonomous AI Databaseサービス・アップデート(FY27)/ adb-service-update-jp-fy27
oracle4engineer
PRO
0
130
20260903 Tokyo Jazug Night #62 | Azure エンジニアよ、 その環境は本当にセキュアか?
olivia_0707
1
630
Bet AI Day 2026丨Production-Ready AI Agents — エンタープライズの実務を任せるための設計と運用
layerx
PRO
4
2.6k
プロダクト思考 × 基盤思考を AIで実現する Compound Engineering
tkc66buzz
1
280
エンタープライズInnerSourceと開発者ポータル
nogikazuma
1
110
V8コントリビュート超入門
riyaamemiya
0
150
薬剤師(ドメインエキスパート)と一緒に育てる薬局向けAIアシスタント
kakehashi
PRO
2
120
AIに丸投げしないトイル削減 / Eliminating Toil Without Leaving It All to AI
kohbis
3
990
GuardDuty 検知対応を DevOps Agent で効率化しようとしている話 / GuardDuty Investigations with DevOps Agent
masahirokawahara
1
330
Featured
See All Featured
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Building the Perfect Custom Keyboard
takai
2
870
Discover your Explorer Soul
emna__ayadi
2
1.3k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
500
Build your cross-platform service in a week with App Engine
jlugia
234
19k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
470
Java REST API Framework Comparison - PWX 2021
mraible
34
9.7k
The Curse of the Amulet
leimatthew05
2
14k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.5k
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
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 どうしたらバグの発生を抑えられるか プログラムに変更を加える度にテストで動作保証 →同一の検査を何度も手で行うのは効率が悪い →テストコードを書くことで自動化したら、バグの 発生も抑えられるので、良い。