Submit Search
Upload
レガシーコードでTDD力を高めよう #agilesamurai
•
13 likes
•
4,276 views
Youtarou TAKAHASHI
Follow
Agile Samurai Base Camp 2013.12.08(Sun) で事例発表した際の資料です。
Read less
Read more
Report
Share
Report
Share
1 of 30
Download now
Download to read offline
Recommended
Rspec勉強会
Rspec勉強会
gaooh
20140226_TDD
20140226_TDD
uhe_uhe_uhe
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術
Takuto Wada
Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるか
Takuto Wada
Tddのすゝめ
Tddのすゝめ
将 高野
TDD のこころ @ OSH2014
TDD のこころ @ OSH2014
Takuto Wada
勉強会を始めるまで #java_ja
勉強会を始めるまで #java_ja
Go Sueyoshi (a.k.a sue445)
DDDのすすめ
DDDのすすめ
Ryo Amano
Recommended
Rspec勉強会
Rspec勉強会
gaooh
20140226_TDD
20140226_TDD
uhe_uhe_uhe
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術
Takuto Wada
Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるか
Takuto Wada
Tddのすゝめ
Tddのすゝめ
将 高野
TDD のこころ @ OSH2014
TDD のこころ @ OSH2014
Takuto Wada
勉強会を始めるまで #java_ja
勉強会を始めるまで #java_ja
Go Sueyoshi (a.k.a sue445)
DDDのすすめ
DDDのすすめ
Ryo Amano
TddカンファレンスLT
TddカンファレンスLT
kyon mm
ペアプログラミング ホントのところ
ペアプログラミング ホントのところ
Takuto Wada
プロト〜サービスアウトまでの開発支援ツールの作り方〜CrystalFantasia〜
プロト〜サービスアウトまでの開発支援ツールの作り方〜CrystalFantasia〜
Keisuke Utsumi
ぐるぐるDDD(ドメイン駆動設計)に参加してみました
ぐるぐるDDD(ドメイン駆動設計)に参加してみました
Takuya Kawabe
Ciecleci
Ciecleci
YosukeHojo
TDDを実践してわかったTDDつまづくあるあると自分なりの乗り越え方まとめ
TDDを実践してわかったTDDつまづくあるあると自分なりの乗り越え方まとめ
Kei Sawada
Ninja Testing at XP Matsuri
Ninja Testing at XP Matsuri
Nakajima Shigeru
俺とInstant team building
俺とInstant team building
Masayuki KaToH
TDDはじめる前に
TDDはじめる前に
Yasui Tsutomu
CodeZineAcademy TDD実践講座PR資料
CodeZineAcademy TDD実践講座PR資料
Yasui Tsutomu
TDD のこころ
TDD のこころ
Takuto Wada
テスト駆動開発入門 - C4K Meetup#2
テスト駆動開発入門 - C4K Meetup#2
Masashi Shibata
PHPerがgolangでもがいてる話@第1回 関西Golang勉強会
PHPerがgolangでもがいてる話@第1回 関西Golang勉強会
Keisuke Utsumi
簡単!Groovy入門
簡単!Groovy入門
Lee Choong Geun
Hey It's Not My TDD!
Hey It's Not My TDD!
Yasui Tsutomu
GDDでPlayNを見てゾクっとしたなど
GDDでPlayNを見てゾクっとしたなど
Takao Sumitomo
はじめてのTDD
はじめてのTDD
Yuto Matsukubo
俺のインセプションデッキ【Remaster版】
俺のインセプションデッキ【Remaster版】
Takao Oyobe
単体テストのすゝめ
単体テストのすゝめ
Li Satoshi
20141108 俺のエンジニアリング #devlove
20141108 俺のエンジニアリング #devlove
Takao Oyobe
TDD、ペアプログラミングのすすめ
TDD、ペアプログラミングのすすめ
Kyota Yasuda
新人がTDDを学ぶ方法
新人がTDDを学ぶ方法
Ito Kunihiko
More Related Content
What's hot
TddカンファレンスLT
TddカンファレンスLT
kyon mm
ペアプログラミング ホントのところ
ペアプログラミング ホントのところ
Takuto Wada
プロト〜サービスアウトまでの開発支援ツールの作り方〜CrystalFantasia〜
プロト〜サービスアウトまでの開発支援ツールの作り方〜CrystalFantasia〜
Keisuke Utsumi
ぐるぐるDDD(ドメイン駆動設計)に参加してみました
ぐるぐるDDD(ドメイン駆動設計)に参加してみました
Takuya Kawabe
Ciecleci
Ciecleci
YosukeHojo
TDDを実践してわかったTDDつまづくあるあると自分なりの乗り越え方まとめ
TDDを実践してわかったTDDつまづくあるあると自分なりの乗り越え方まとめ
Kei Sawada
Ninja Testing at XP Matsuri
Ninja Testing at XP Matsuri
Nakajima Shigeru
俺とInstant team building
俺とInstant team building
Masayuki KaToH
TDDはじめる前に
TDDはじめる前に
Yasui Tsutomu
CodeZineAcademy TDD実践講座PR資料
CodeZineAcademy TDD実践講座PR資料
Yasui Tsutomu
TDD のこころ
TDD のこころ
Takuto Wada
テスト駆動開発入門 - C4K Meetup#2
テスト駆動開発入門 - C4K Meetup#2
Masashi Shibata
PHPerがgolangでもがいてる話@第1回 関西Golang勉強会
PHPerがgolangでもがいてる話@第1回 関西Golang勉強会
Keisuke Utsumi
簡単!Groovy入門
簡単!Groovy入門
Lee Choong Geun
Hey It's Not My TDD!
Hey It's Not My TDD!
Yasui Tsutomu
GDDでPlayNを見てゾクっとしたなど
GDDでPlayNを見てゾクっとしたなど
Takao Sumitomo
はじめてのTDD
はじめてのTDD
Yuto Matsukubo
俺のインセプションデッキ【Remaster版】
俺のインセプションデッキ【Remaster版】
Takao Oyobe
単体テストのすゝめ
単体テストのすゝめ
Li Satoshi
20141108 俺のエンジニアリング #devlove
20141108 俺のエンジニアリング #devlove
Takao Oyobe
What's hot
(20)
TddカンファレンスLT
TddカンファレンスLT
ペアプログラミング ホントのところ
ペアプログラミング ホントのところ
プロト〜サービスアウトまでの開発支援ツールの作り方〜CrystalFantasia〜
プロト〜サービスアウトまでの開発支援ツールの作り方〜CrystalFantasia〜
ぐるぐるDDD(ドメイン駆動設計)に参加してみました
ぐるぐるDDD(ドメイン駆動設計)に参加してみました
Ciecleci
Ciecleci
TDDを実践してわかったTDDつまづくあるあると自分なりの乗り越え方まとめ
TDDを実践してわかったTDDつまづくあるあると自分なりの乗り越え方まとめ
Ninja Testing at XP Matsuri
Ninja Testing at XP Matsuri
俺とInstant team building
俺とInstant team building
TDDはじめる前に
TDDはじめる前に
CodeZineAcademy TDD実践講座PR資料
CodeZineAcademy TDD実践講座PR資料
TDD のこころ
TDD のこころ
テスト駆動開発入門 - C4K Meetup#2
テスト駆動開発入門 - C4K Meetup#2
PHPerがgolangでもがいてる話@第1回 関西Golang勉強会
PHPerがgolangでもがいてる話@第1回 関西Golang勉強会
簡単!Groovy入門
簡単!Groovy入門
Hey It's Not My TDD!
Hey It's Not My TDD!
GDDでPlayNを見てゾクっとしたなど
GDDでPlayNを見てゾクっとしたなど
はじめてのTDD
はじめてのTDD
俺のインセプションデッキ【Remaster版】
俺のインセプションデッキ【Remaster版】
単体テストのすゝめ
単体テストのすゝめ
20141108 俺のエンジニアリング #devlove
20141108 俺のエンジニアリング #devlove
Similar to レガシーコードでTDD力を高めよう #agilesamurai
TDD、ペアプログラミングのすすめ
TDD、ペアプログラミングのすすめ
Kyota Yasuda
新人がTDDを学ぶ方法
新人がTDDを学ぶ方法
Ito Kunihiko
Dev love関西 レガシーコードへの取り組み 20140325
Dev love関西 レガシーコードへの取り組み 20140325
Seiichi Sugahara
ゆるLTのススメ+α
ゆるLTのススメ+α
joker1007
20150715 『続・断捨離』TDDの心得編
20150715 『続・断捨離』TDDの心得編
nackypon
nseg第5回勉強会
nseg第5回勉強会
ko ty
Sue445 Style TDD #atest_hack
Sue445 Style TDD #atest_hack
Go Sueyoshi (a.k.a sue445)
20141213 俺のインセプションデッキ #agilesamurai
20141213 俺のインセプションデッキ #agilesamurai
Takao Oyobe
my-spirit-of-tdd
my-spirit-of-tdd
Yu Asano
Gunmaweb #9 LT
Gunmaweb #9 LT
Makoto Yonezawa
Discordから バーチャルオフィス「Teamflow」 に乗り換えてみた 雑談を生む工夫
Discordから バーチャルオフィス「Teamflow」 に乗り換えてみた 雑談を生む工夫
Koichiro Matsuoka
OSC2013 HIROSHIMA ライトニングトーク すごい広島
OSC2013 HIROSHIMA ライトニングトーク すごい広島
Tomohiko Himura
改善したほうがいい私の7つの開発習慣
改善したほうがいい私の7つの開発習慣
Noriaki Kadota
アイデアを塩漬けにしない-世界中の人に手伝ってもらう方法-
アイデアを塩漬けにしない-世界中の人に手伝ってもらう方法-
nishio
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
Koichiro Matsuoka
DevRel Meetupのおかげで転職した話
DevRel Meetupのおかげで転職した話
Daizen Ikehara
フレームワーク使おうぜ!
フレームワーク使おうぜ!
Takuya Sato
May the team be with you(episode2)
May the team be with you(episode2)
Koutarou Ishizaki
Pull Request & TDD 入門
Pull Request & TDD 入門
ESM SEC
いつでも聞けるTDD入門 #TDDBC_NAGOYA
いつでも聞けるTDD入門 #TDDBC_NAGOYA
kyon mm
Similar to レガシーコードでTDD力を高めよう #agilesamurai
(20)
TDD、ペアプログラミングのすすめ
TDD、ペアプログラミングのすすめ
新人がTDDを学ぶ方法
新人がTDDを学ぶ方法
Dev love関西 レガシーコードへの取り組み 20140325
Dev love関西 レガシーコードへの取り組み 20140325
ゆるLTのススメ+α
ゆるLTのススメ+α
20150715 『続・断捨離』TDDの心得編
20150715 『続・断捨離』TDDの心得編
nseg第5回勉強会
nseg第5回勉強会
Sue445 Style TDD #atest_hack
Sue445 Style TDD #atest_hack
20141213 俺のインセプションデッキ #agilesamurai
20141213 俺のインセプションデッキ #agilesamurai
my-spirit-of-tdd
my-spirit-of-tdd
Gunmaweb #9 LT
Gunmaweb #9 LT
Discordから バーチャルオフィス「Teamflow」 に乗り換えてみた 雑談を生む工夫
Discordから バーチャルオフィス「Teamflow」 に乗り換えてみた 雑談を生む工夫
OSC2013 HIROSHIMA ライトニングトーク すごい広島
OSC2013 HIROSHIMA ライトニングトーク すごい広島
改善したほうがいい私の7つの開発習慣
改善したほうがいい私の7つの開発習慣
アイデアを塩漬けにしない-世界中の人に手伝ってもらう方法-
アイデアを塩漬けにしない-世界中の人に手伝ってもらう方法-
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DevRel Meetupのおかげで転職した話
DevRel Meetupのおかげで転職した話
フレームワーク使おうぜ!
フレームワーク使おうぜ!
May the team be with you(episode2)
May the team be with you(episode2)
Pull Request & TDD 入門
Pull Request & TDD 入門
いつでも聞けるTDD入門 #TDDBC_NAGOYA
いつでも聞けるTDD入門 #TDDBC_NAGOYA
More from Youtarou TAKAHASHI
Selenide or Geb 〜あなたはその時どちらを使う〜
Selenide or Geb 〜あなたはその時どちらを使う〜
Youtarou TAKAHASHI
SpockからRSpecにきたときの気づき #coedorb
SpockからRSpecにきたときの気づき #coedorb
Youtarou TAKAHASHI
すし × TDD #sushiruit
すし × TDD #sushiruit
Youtarou TAKAHASHI
What makes Geb groovy?
What makes Geb groovy?
Youtarou TAKAHASHI
普通のエンジニアがテストエンジニアに助けてもらいたかったこと #automatornight
普通のエンジニアがテストエンジニアに助けてもらいたかったこと #automatornight
Youtarou TAKAHASHI
ペアプロデモの裏話 #tddbc
ペアプロデモの裏話 #tddbc
Youtarou TAKAHASHI
TDDでレガシーコードに立ち向かう
TDDでレガシーコードに立ち向かう
Youtarou TAKAHASHI
Db unitを使って なれる! レガシーコードメンテナー
Db unitを使って なれる! レガシーコードメンテナー
Youtarou TAKAHASHI
More from Youtarou TAKAHASHI
(8)
Selenide or Geb 〜あなたはその時どちらを使う〜
Selenide or Geb 〜あなたはその時どちらを使う〜
SpockからRSpecにきたときの気づき #coedorb
SpockからRSpecにきたときの気づき #coedorb
すし × TDD #sushiruit
すし × TDD #sushiruit
What makes Geb groovy?
What makes Geb groovy?
普通のエンジニアがテストエンジニアに助けてもらいたかったこと #automatornight
普通のエンジニアがテストエンジニアに助けてもらいたかったこと #automatornight
ペアプロデモの裏話 #tddbc
ペアプロデモの裏話 #tddbc
TDDでレガシーコードに立ち向かう
TDDでレガシーコードに立ち向かう
Db unitを使って なれる! レガシーコードメンテナー
Db unitを使って なれる! レガシーコードメンテナー
レガシーコードでTDD力を高めよう #agilesamurai
1.
レガシーコードで TDD力を高めよう!! Agile Samurai Base
Camp Re:TDD 2014/4/20
2.
@PoohSunny ● 海外チームと新サービスの立ち上 げに奮闘中。 ● 『レガシーコード改善ガイド』が座 右の書 ●
「テストがないコードはレガシー コードだぁっ!!」ってのがちょっ と前まで口癖
3.
はじめに 今日一日おつかれさまー!
4.
挙手! 今日TDDを体感してみて 「明日からTDDやってみたい なー」 って思った人!
5.
挙手! 今日TDDを体感してみて 「明日から現場でTDDできそう だ!」 って思った人!
6.
実践できる? 現場でいきなり 使うのは なかなか難しい なんで?
7.
8.
レガシーコード ● 一部の変更が全てに影響 ○ ジェンガ
/ スパゲッティ ○ 動いているコードに触るな! ○ Edit & Pray(変更して祈る) ● テストが書きにくい構造 ○ 実践しようにも...
9.
このままではイベントの目的が... テスト駆動開発はソフトウェアの質を確 実に向上させ、日々の成果に直結し ています。これもエンジニアひとりから 明日から始めることができます。 Agile Samurai Base
CampのHP
10.
というわけで今日は レガシーコードでもTDDの実践するに はどうしたらいいのか、 という最初の一歩の話しまーす (経験談)。
11.
今日の話の対象 ✕ レガシーコードをTDDで 改善しよう ○ レガシーコードで自分の TDD力高めよう ○
実現までの時間が結構かか る ○ 仲間が必要 ○ 「TDDから」が最適解とは限り ません
12.
レガシーコードって?
13.
私の出会ったレガシーコード ● これはEclipseの画面の右端です。 ● 行数を想像してみてください ○
Javaです。 ○ ざっと数万行です(てへぺろ) ● 青→とある変数にカーソルを当ててみた ○ 長寿の変数
14.
私の出会ったレガシーコード(フィクションです) public void legacyMethod(boolean
flag1, boolean flag2, HttpServletRequest request){ String code = (String) request.getAttribute("code"); String action = (String) request.getAttribute("action"); List<TargetData> datas = new TargetDataDAO().getTargetData(code); if (action == "1") { if (datas != null && datas.size() != 0) { for (TargetData data : datas) { if ((data.getId() != null && !data.getName() == "") || data.getId == null) { request.setAttribute("data", data); } } 引数が多い! DBアクセスが近 い ワイド画面でも足 りないifネスト 継ぎ足しされた秘 伝のif条件
15.
一体どうTDDしろと... ● どこからテスト書く? ● いつテスト書く? ●
テストが先かリファクタが先か問題 ○ テストがしやすいように内部構造を変える
16.
私が(当時)考えたこと ● テスト書こうとしてバグるのはダメ! ○ モチベーション下がる ○
変更が怖くなる ○ 痛みを伴うのはしんどい! ● まずは小さいところから ○ 大胆な構造改革は仲間が増えてからやろう ● 美味しそうなところをやる
17.
オススメパターン 不具合に テストを書いて 立ち向かう 和田 卓人
18.
手順(引用) 1. 手元で不具合を再現させる。 2. コードを注意深く調べ、不具合を発生させている 最小の部分を絞り込む。 3.
最小レベルで不具合を再現させ、不具合が修 正されたら通るような自動テストコードを書く。 4. 3.で書いたテストコードを実行し、落ちることを確 認する。
19.
手順(引用) 5. 不具合を修正する。 6. 3で書いたテストコードが通ることを確認する。 7.既存の全てのテストを実行し、不具合修正が他 の部分を壊していないことを確認する。
20.
手順(対レガシーコード) 1. 手元で不具合を再現させる 2. コードを注意深く調べ、不具合を発生させている 最小の部分を絞り込む 3.
最小部分をくくりだす。 4. くくりだした部分にテストを書く。 5. テストを書いたところをリファクタリングする。 6. 最小レベルで不具合を再現させ、~以下同じ
21.
TDDしたい箇所をくくりだす。 ● スプラウトメソッド、とか呼ばれる手法 ○ メソッドの抽出リファクタを実行してみる ○
そこにテストを書く
22.
最初はif条件文にやるとやりやすい if ((data.getId() !=
null && !data.getName() == "") || data.getId == null) { if (shouldSetAttribute(data)) { (略) public void shouldSetAttribute(TargetData data){ return (data.getId() != null && !data.getName() == "") || data. getId == null; }
23.
テストを書いてリファクタリング if (shouldSetAttribute(data)) { public
void shouldSetAttribute(TargetData data){ return (data.getId() != null && !data.getName() == "") || data.getId == null; } public void shouldSetAttribute(TargetData data){ if (data.getId == null) return true; return !"".equals(data.getName()) }
24.
効果 ● 多くのフィードバックを得られる ○ 名付けはメソッド名は適切? ○
もっとテストしやすい引数にできない? ○ もっと読みやすくできない? ● バグったところはまたバグりやすい ○ 「あなたのこのまえの修正、デグレ起こしてるっぽ いですよ(ドヤッ)」
25.
悩ましいポイント ● 大きいメソッドだと難しい ○ 本当に不安な部分にテコ入れできない ●
モチベーション管理が難しい ○ 誰かが地雷を踏むまでは一定時間かかる ○ それまで効果があるのかが見えにくい
26.
対策:もっと大くくりでテストできない? ● DBアクセスがいっぱいあってしんどい? => DBアクセスしてテストしてみたら? ●
画面からの情報が多くてしんどい? => 画面の自動テストしてみたら?
27.
結果 ● 頑張ればテストは書ける!状態 ○ 安心・健康 ○
仲間が増える(社内) ○ より大きな構造改革 ● スキルアップ ○ 知らないことをもっと知りたい!という好循環 ○ 仲間が増える(社外)
28.
まとめ(言いたかったこと) ● レガシーコードでも、工夫次 第でTDDできるよ! ● もし悩みがあれば、みんなで 共有しよう!
29.
駆け足すぎた? 質問お待ちしてます! (もっと突っ込んで話したいこともあったし、質 問してもらえるとそういうのにも答えられたりす るかと。)
30.
みんな無理せずレガシーコード改善やろうぜ! おしまい。 質問お待ちしていますー!
Download now