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
始めようテスト駆動開発
Search
pujyo
November 26, 2016
Technology
180
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
始めようテスト駆動開発
部会用発表資料
pujyo
November 26, 2016
Other Decks in Technology
See All in Technology
Getting Started with Google Antigravity
glaforge
0
300
実践!Cloud Run ハンズオン!! / Cloud Run handson
y0hgi
2
280
継続的なAIコスト最適化
bgpat
1
340
How to Design Configuration for Rails Applications
willnet
1
770
AI × アーキテクト 第1・2章|生成AIの課題とアーキテクトの素養
daidaidai
0
170
SAENM ~Jupyterで残すPoCの試行錯誤、未来の自分と仲間を助ける記録!~
terapyon
0
110
re:Invent初参加で変わったこと、2回目にやってみたいこと(JAWS-UG彩の国埼玉 #12)
mhrtech
2
220
その Valkey 使いこなしていますか?
onk
PRO
5
1.5k
PagerDuty Tech Hub-鳴らすけれど、人は動かない
ezaki
0
170
『SAR衛星データ解析入門』のご紹介とその応用
syuchimu
0
120
Conditional PED-ANOVA: Hyperparameter Importance in Hierarchical & Dynamic Search Spaces
pfn
PRO
0
130
Active Record Connection Adaptersにおける長年の課題に再び取り組む
yahonda
0
150
Featured
See All Featured
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
570
Typedesign – Prime Four
hannesfritz
42
3.2k
Everyday Curiosity
cassininazir
0
350
The #1 spot is gone: here's how to win anyway
tamaranovitovic
4
1.2k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
4
4.4k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
730
The Cult of Friendly URLs
andyhume
79
7k
Building Applications with DynamoDB
mza
96
7.2k
Discover your Explorer Soul
emna__ayadi
2
1.3k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
2
2k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
1.1k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.6k
Transcript
始めようテスト駆動開発 2016/11/11 システム開発グループ会
◦◦駆動開発 1. TDD 2. BDD 3. TiDD 4. FDD 5.
DDD 6. UCDD 7. AlcDD
◦◦駆動開発 1. TDD( テスト駆動開発 ) 2. BDD (振舞い駆動開発) 3. TiDD
(チケット駆動開発) 4. FDD (ユーザー機能駆動開発) 5. DDD( ドメイン駆動開発 ) 6. UCDD (ユースケース駆動開発) 7. AlcDD (アルコール駆動開発) ← 今日はテスト駆動開発のお話です
ところで皆さん、◦◦を実装してくださいっ て言われたらまず何をしますか?
1,とりあえず実装から入るタイプ 「いいから実装だ!!!」 • スピード重視の時 • ワンタイムしか使わないプログラミング (簡単な競技プログラミングとか) • つまり保守なんかしないよって人
2,まずは設計から入るタイプ 「そんな設計で大丈夫か?」 • 一般的な開発スタイル • 設計書が神 • ただしその設計書は開発と共に 保守されないといけない
3,テストから書いていくというあなた 既にテスト駆動開発をやられてるあなたに今回 のお話から得られるものは少ないかもしれませ ん ただし・・・
本日のアジェンダ • TDD 概要 • テストの自動化について • CI と TDD
について 今日話さない事 • テストコードの書き方とか
TDD概要 ユニットテストフレームワーク(◦◦ Unit )等を利用し、 プログラマがソフトウェアの自動テストコードを記述・保守しながら 開発をすすめる手法の事 ※ 品質保証を主目的にした技法ではない
TDDの役割 テストによって得られる情報を開発(主に設計と実装)に フィードバックしていく • 不安の解消 • 気づき
不安の解消 テストを行う事で不安を解消し、 プログラミングの一歩一歩を確実なものとする (結果として品質の向上につながる) 不安の例 • ネストした if 文をテストしないことに対する不安 •
経験の浅いライブラリをいきなり使うことに対する不安(テストの形で書いて技術検 証を行う)
気づき テストを書くと設計段階では気づかなかったことにも気づく (設計へのフィードバック) 例えば • クラス名やメソッドが変 • 使用する為の前提条件が多い • API
が直感的でない
TDDの方法 Red,Green,Refactor のサイクルで開発を行 う事 • Red( テストが失敗する事 ) • Green(
テストが成功する事 ) • Refactor( コードのファクファリング )
方法(詳細) 1. 目標を考え、 TODO リスト等にまとめ、その中から行うものを一つ選択する 2. 選択した目標を示す自動テストコードを書く 3. 自動テストを実行し、2で書いたテストが失敗することを確認する (Red)
4. 1で選択した目標を達成する為のコードを書く 5. 再度自動テストを実行し、2で書いたテストが成功することを確認する( Green ) 6. 自動テストが成功する状態を保ちながら、リファクタリングを行う (Refactor) 7. 1~6 を繰り返す
テスト自動化について ユニットテストフレームワーク一覧 • JUnit(Java) • PHPUnit(PHP) • PyUnit(Python) • testUnit(Ruby)
• Selenium(Web) 他にも色々あります https://ja.wikipedia.org/wiki/ ユニットテスト・フレームワーク一覧
ユニットテストFWを使わない問題点 リグレッションテストに時間がかかる 作った人だけがテスト可能 ( 各プログラマが思い思いのやり方で、テストを実施する ) ソースコードとテストコードの分離が出来ていない (main メソッド利用したテストコード )
ユニットテストFWを使う利点 テストの自動化がされる ソースコードの修正(リファクタリング)後の動作保証が容易になる テストコードと製品コードを切り離せる テストコードがそのままクラスの使い方の説明書(クラスの設計書になる)
CIについて CI(Continuous Integration) とは 継続的にビルドやテストを実施しようという、システム開発における考え方 CI ツールとは 継続的インテグレーションを実現する為のツール CI ツールを導入する事でサーバー上で自動的に結合テストや規約のチェックを行う事が
できる
CIとTDDとGitの運用について Git の Master ブランチは常にリリースできる状態であるという前提 • 開発者は開発ブランチをリモートにプッシュすることで CI ツールがビルドを実行して 自動テスト、規約チェックを行う
• CI が設定された自動テスト、規約チェックをパスしたら開発チームはソースコードをレ ビューする • 上記二点が通れば Master ブランチへマージする 自動テストが通っている事、開発チームがレビューを行っている事で品質の保証になる。
TDDのデメリット • 実装工数が増加する 記述するコードは増えるということ • 顧客の理解を得るのが難しい プロダクトコードとは関係ないコードの工数を予算には載せられな い
TDDのメリット • プログラマは安心感を得られる • 実装時にバグの混入が軽減される • テスト工数とデバックの時間の大幅な短縮化が期待できる • デグレ防げる •
設計力がつく • テストコードがそのままプロダクトの設計書になる • テストコードを Git と CI で管理していけば設計書は陳腐化しない • プロダクトコードの品質向上につながる
TDDのまとめ エンジニアにとってテストコードとは • 憂鬱なテストやデバックの時間を減らし てくれる存在 • プロダクトコードを読み解く地図になりえ る存在 • エンジニアに安心感を与えてくれる存在