Enviar pesquisa
Carregar
Tokyo Rubykaigi 01 t-wada
•
8 gostaram
•
2,940 visualizações
Takuto Wada
Seguir
Tecnologia
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 85
Baixar agora
Baixar para ler offline
Recomendados
WebOS Open Source Edition を試してみた
WebOS Open Source Edition を試してみた
Tetsuyuki Kobayashi
アジャイルサムライの次に読む技術書
アジャイルサムライの次に読む技術書
Takuto Wada
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術
Takuto Wada
Hacking Vox and Plagger
Hacking Vox and Plagger
Tatsuhiko Miyagawa
DevLOVE TDD : For Whom the Tests Run
DevLOVE TDD : For Whom the Tests Run
guest2724dc
DevLOVE TDD - For Whom the Tests Run
DevLOVE TDD - For Whom the Tests Run
Takuto Wada
C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会
Akihiko Matuura
Play meetup-2-dev-best-practices
Play meetup-2-dev-best-practices
k4200
Recomendados
WebOS Open Source Edition を試してみた
WebOS Open Source Edition を試してみた
Tetsuyuki Kobayashi
アジャイルサムライの次に読む技術書
アジャイルサムライの次に読む技術書
Takuto Wada
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術
Takuto Wada
Hacking Vox and Plagger
Hacking Vox and Plagger
Tatsuhiko Miyagawa
DevLOVE TDD : For Whom the Tests Run
DevLOVE TDD : For Whom the Tests Run
guest2724dc
DevLOVE TDD - For Whom the Tests Run
DevLOVE TDD - For Whom the Tests Run
Takuto Wada
C++ Template Meta Programming の紹介@社内勉強会
C++ Template Meta Programming の紹介@社内勉強会
Akihiko Matuura
Play meetup-2-dev-best-practices
Play meetup-2-dev-best-practices
k4200
Rancher と GitLab を使う3つの理由
Rancher と GitLab を使う3つの理由
Tetsurou Yano
Frequency with nltk
Frequency with nltk
Atsushi Hayakawa
bicep 0.5 pre
bicep 0.5 pre
Takekazu Omi
TripleO Deep Dive
TripleO Deep Dive
Takashi Kajinami
PostgreSQL 9.5 新機能紹介
PostgreSQL 9.5 新機能紹介
NTT DATA OSS Professional Services
scala-kaigi1-sbt
scala-kaigi1-sbt
Kenji Yoshida
CircleCIを使ったSpringBoot/GAEアプリ開発の効率化ノウハウ
CircleCIを使ったSpringBoot/GAEアプリ開発の効率化ノウハウ
Takeshi Mikami
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
Ryo Suzuki
OSS活動の活発さと評価の関係について
OSS活動の活発さと評価の関係について
Takuto Wada
unassert - encourage reliable programming by writing assertions in production
unassert - encourage reliable programming by writing assertions in production
Takuto Wada
OSS についてあれこれ
OSS についてあれこれ
Takuto Wada
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
power-assert, mechanism and philosophy
power-assert, mechanism and philosophy
Takuto Wada
Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるか
Takuto Wada
テスト用ライブラリ power-assert
テスト用ライブラリ power-assert
Takuto Wada
Reviewing RESTful Web Apps
Reviewing RESTful Web Apps
Takuto Wada
power-assert in JavaScript
power-assert in JavaScript
Takuto Wada
TDD のこころ @ OSH2014
TDD のこころ @ OSH2014
Takuto Wada
テストを書く文化を育てる戦略と戦術
テストを書く文化を育てる戦略と戦術
Takuto Wada
私にとってのテスト
私にとってのテスト
Takuto Wada
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
SQLアンチパターン - 開発者を待ち受ける25の落とし穴
SQLアンチパターン - 開発者を待ち受ける25の落とし穴
Takuto Wada
Mais conteúdo relacionado
Semelhante a Tokyo Rubykaigi 01 t-wada
Rancher と GitLab を使う3つの理由
Rancher と GitLab を使う3つの理由
Tetsurou Yano
Frequency with nltk
Frequency with nltk
Atsushi Hayakawa
bicep 0.5 pre
bicep 0.5 pre
Takekazu Omi
TripleO Deep Dive
TripleO Deep Dive
Takashi Kajinami
PostgreSQL 9.5 新機能紹介
PostgreSQL 9.5 新機能紹介
NTT DATA OSS Professional Services
scala-kaigi1-sbt
scala-kaigi1-sbt
Kenji Yoshida
CircleCIを使ったSpringBoot/GAEアプリ開発の効率化ノウハウ
CircleCIを使ったSpringBoot/GAEアプリ開発の効率化ノウハウ
Takeshi Mikami
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
Ryo Suzuki
Semelhante a Tokyo Rubykaigi 01 t-wada
(8)
Rancher と GitLab を使う3つの理由
Rancher と GitLab を使う3つの理由
Frequency with nltk
Frequency with nltk
bicep 0.5 pre
bicep 0.5 pre
TripleO Deep Dive
TripleO Deep Dive
PostgreSQL 9.5 新機能紹介
PostgreSQL 9.5 新機能紹介
scala-kaigi1-sbt
scala-kaigi1-sbt
CircleCIを使ったSpringBoot/GAEアプリ開発の効率化ノウハウ
CircleCIを使ったSpringBoot/GAEアプリ開発の効率化ノウハウ
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
Mais de Takuto Wada
OSS活動の活発さと評価の関係について
OSS活動の活発さと評価の関係について
Takuto Wada
unassert - encourage reliable programming by writing assertions in production
unassert - encourage reliable programming by writing assertions in production
Takuto Wada
OSS についてあれこれ
OSS についてあれこれ
Takuto Wada
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
power-assert, mechanism and philosophy
power-assert, mechanism and philosophy
Takuto Wada
Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるか
Takuto Wada
テスト用ライブラリ power-assert
テスト用ライブラリ power-assert
Takuto Wada
Reviewing RESTful Web Apps
Reviewing RESTful Web Apps
Takuto Wada
power-assert in JavaScript
power-assert in JavaScript
Takuto Wada
TDD のこころ @ OSH2014
TDD のこころ @ OSH2014
Takuto Wada
テストを書く文化を育てる戦略と戦術
テストを書く文化を育てる戦略と戦術
Takuto Wada
私にとってのテスト
私にとってのテスト
Takuto Wada
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
SQLアンチパターン - 開発者を待ち受ける25の落とし穴
SQLアンチパターン - 開発者を待ち受ける25の落とし穴
Takuto Wada
愛せないコードを書くには人生はあまりにも短い
愛せないコードを書くには人生はあまりにも短い
Takuto Wada
ペアプログラミング ホントのところ
ペアプログラミング ホントのところ
Takuto Wada
RESTful Web アプリの設計レビューの話
RESTful Web アプリの設計レビューの話
Takuto Wada
例外設計における大罪
例外設計における大罪
Takuto Wada
TDDBC お題
TDDBC お題
Takuto Wada
DevLOVE DDDBC
DevLOVE DDDBC
Takuto Wada
Mais de Takuto Wada
(20)
OSS活動の活発さと評価の関係について
OSS活動の活発さと評価の関係について
unassert - encourage reliable programming by writing assertions in production
unassert - encourage reliable programming by writing assertions in production
OSS についてあれこれ
OSS についてあれこれ
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
power-assert, mechanism and philosophy
power-assert, mechanism and philosophy
Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるか
テスト用ライブラリ power-assert
テスト用ライブラリ power-assert
Reviewing RESTful Web Apps
Reviewing RESTful Web Apps
power-assert in JavaScript
power-assert in JavaScript
TDD のこころ @ OSH2014
TDD のこころ @ OSH2014
テストを書く文化を育てる戦略と戦術
テストを書く文化を育てる戦略と戦術
私にとってのテスト
私にとってのテスト
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴
SQLアンチパターン - 開発者を待ち受ける25の落とし穴
愛せないコードを書くには人生はあまりにも短い
愛せないコードを書くには人生はあまりにも短い
ペアプログラミング ホントのところ
ペアプログラミング ホントのところ
RESTful Web アプリの設計レビューの話
RESTful Web アプリの設計レビューの話
例外設計における大罪
例外設計における大罪
TDDBC お題
TDDBC お題
DevLOVE DDDBC
DevLOVE DDDBC
Último
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
CRI Japan, Inc.
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
Toru Tamaki
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
WSO2
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
CRI Japan, Inc.
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
atsushi061452
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
sn679259
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
Toru Tamaki
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
Último
(10)
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
Tokyo Rubykaigi 01 t-wada
1.
それRubyでも やりたい ライブラリ移植と機能拡張のためのパターンランゲージ 和田 卓人 (a.k.a
id:t-wada) Aug, 21, 2008 @TokyoRubyKaigi 01
2.
3.
多様性
4.
Regional RubyKaigi に光あれ
5.
続け!
6.
自己紹介 名前: 和田 卓人
(わだ たくと) メール: takuto.wada@towersquest.jp ブログ: http://d.hatena.ne.jp/t-wada Twitter: t_wada Wassr: twada
7.
自己紹介 タワーズ・クエスト株式会社 プログラマ 兼 取締役社長
8.
これまで書いたもの WEB + DB
PRESS vol.35 「実演! テスト駆動開発」 vol.37 「実演! リファクタリング」 vol.42 「現場で使えるREST」 LifeHacks PRESS オープンソースマガジン(リレーコラム) 他いろいろ
9.
gihyoコラボ企画 『[動画で解説]和田卓人の テスト駆動開発 講座』 http://gihyo.jp/dev/serial/01/tdd/ 全20回すべて動画付き解説 ニコニコ動画でも見れます WEB+DB過去記事の特設サイトや動画
10.
デブサミ • デベロッパーテスティング・ライブ -
自信を持ってコードを書 くための心・技・体 - • 【徹底討論】テストなんていらない?!-テストを、どこ までやるべきか? • そしてデブサミ 2009 へ • テストトラックのコンテンツ委員になりました
11.
よろしく おねがい します
12.
Agenda •移植した中身のこと •移植する方法のこと •Q & A
13.
第一部 移植した 中身のこと
14.
背景
15.
始めに問題意識ありき •複雑な テーブル構造 •既にレールに乗れない •多くのテーブルを JOIN
しな ければならない要件
16.
餅は餅屋 •CASE句 •UNION ALL •RDBMS固有の関数
17.
SQL書きたい
18.
S2Dao •80:20 •2WaySQL •手書きのSQL をサポート •SQL を知っていれば書ける
19.
2 Way SQL
20.
代入コメント (1)
21.
SELECT * FROM emp WHERE job = /*ctx[:job]*/'CLERK' AND deptno
= /*ctx[:deptno]*/20 外部SQL
22.
SELECT * FROM emp WHERE job = /*ctx[:job]*/'CLERK' AND deptno
= /*ctx[:deptno]*/20 からくり
23.
SELECT * FROM emp WHERE job = /*ctx[:job]*/'CLERK' AND deptno
= /*ctx[:deptno]*/20 Given
24.
ctx[:job] = 'MANAGER' ctx[:deptno]
= 30 When
25.
SELECT * FROM emp WHERE job = ? AND deptno
= ? Then と、 ['MANAGER', 30]
26.
代入コメント (2)
27.
SELECT * FROM emp WHERE job = /*ctx[:job]*/'CLERK' AND id
IN /*ctx[:ids]*/(10,11) Given
28.
ctx[:job] = 'MANAGER' ctx[:ids]
= [30,40,50] When
29.
SELECT * FROM emp WHERE job = ? AND ids
IN (?, ?, ?) Then [ 'MANAGER', 30, 40, 50 ]
30.
IF コメント
31.
SELECT * FROM
emp WHERE job = /*ctx[:job]*/'CLERK' /*IF ctx[:age]*/AND age > / *ctx[:age]*/20/*END*/ Given
32.
ctx[:job] = 'MANAGER' ctx[:age]
= 30 When
33.
SELECT * FROM
emp WHERE job = ? AND age > ? Then と、 ['MANAGER', 30]
34.
SELECT * FROM
emp WHERE job = /*ctx[:job]*/'CLERK' /*IF ctx[:age]*/AND age > / *ctx[:age]*/20/*END*/ Given
35.
ctx[:job] = 'MANAGER' ctx[:age]
= nil When
36.
SELECT * FROM
emp WHERE job = /*ctx[:job]*/'CLERK' /*IF ctx[:age]*/AND age > / *ctx[:age]*/20/*END*/ Then
37.
SELECT * FROM
emp WHERE job = ? Then と、 ['MANAGER']
38.
BEGIN コメント
39.
SELECT * FROM
emp /*BEGIN*/WHERE /*IF ctx[:job]*/ job = /*ctx[:job]*/'CLERK'/*END*/ /*IF ctx[:age]*/AND age > /*ctx[:age]*/25/*END*/ /*END*/ Given
40.
ctx[:job] = nil ctx[:age]
= 35 When
41.
SELECT * FROM
emp /*BEGIN*/WHERE /*IF ctx[:job]*/ job = /*ctx[:job]*/'CLERK'/*END*/ /*IF ctx[:age]*/AND age > /*ctx[:age]*/25/*END*/ /*END*/ Then
42.
SELECT * FROM
emp WHERE age > ? Then と、 [35]
43.
SELECT * FROM
emp /*BEGIN*/WHERE /*IF ctx[:job]*/ job = /*ctx[:job]*/'CLERK'/*END*/ /*IF ctx[:age]*/AND age > /*ctx[:age]*/25/*END*/ /*END*/ Given
44.
ctx[:job] = nil ctx[:age]
= nil When
45.
SELECT * FROM
emp /*BEGIN*/WHERE /*IF ctx[:job]*/ job = /*ctx[:job]*/'CLERK'/*END*/ /*IF ctx[:age]*/AND age > /*ctx[:age]*/25/*END*/ /*END*/ Then
46.
SELECT * FROM
emp Then と、 [ ]
47.
第一部 完
48.
第二部 移植する 方法のこと
49.
検討
50.
本当に移植すべきか? •定番ライブラリではダメか •代替案はないのか •早急に結論を出す前に、定番を 調べるべし
51.
全部移植すべきか? •対象ライブラリの美点は何か •既にあるライブラリでも実現で きることは何か
52.
移植
53.
最初に確認すること •対象コードのテストはあるか •対象機能(の美点)は切り出し可 能か
54.
テストが無い場合 • 残念ながら、レガシーコードです • 本日は詳細は割愛 •
WEwLC 読書会を行っています • http://groups.google.co.jp/group/legacy-code
55.
大原則: 一度に複数を 相手にしない
56.
動作する、きれいなコードへ きれい 汚い (すぐには)動かない 動作する 二つの道がある
57.
逐語訳的移植 Context 言語間で移植しようとしている Force ともかくまず動くところまで 持っていきたい Solution 設計や名前を変えずに、まず言 語間の移植のみに集中する
58.
逐語訳的テスト移植 Context テストコードを移植しようとし ている Force 安全に移植したいが、 テストのテストは存在しない Solution テストの設計や語彙を変えず に、まず言語間の移植に集中
59.
変えないもの •xUnit という共通語彙 •設計 •クラスやメソッドの名前 •クラス構造 (interface除く)
60.
変えたもの •言語間の違い •静的型付けから動的型付けへ •予約語 •xUnit の方言
61.
Java コード public void
testNext() throws Exception { String sql = "SELECT * FROM emp"; SqlTokenizer tokenizer = new SqlTokenizerImpl(sql); assertEquals("1", SqlTokenizer.SQL, tokenizer.next()); assertEquals("2", sql, tokenizer.getToken()); assertEquals("3", SqlTokenizer.EOF, tokenizer.next()); assertEquals("4", null, tokenizer.getToken()); }
62.
Ruby コード def testNext sql
= "SELECT * FROM emp" tokenizer = SqlTokenizer.new(sql) assert_equal(SqlTokenizer::SQL, tokenizer.go_next(), "1") assert_equal(sql, tokenizer.getToken(), "2") assert_equal(SqlTokenizer::EOF, tokenizer.go_next(), "3") assert_nil(tokenizer.getToken(), "4") end
63.
PTSCTCPW Port The Simplest
Case That Could Possibly Work Context 逐語訳的テスト移植を終えた Force グリーンが見たいが、レッドに なるテストが多すぎる Solution 最も単純なテストケースから実 装し、それ以外は pending
64.
Context 移行元コードに不明点がある Force 不明点をおいたまま先に進めた くない Solution 移行元コードの現在の振る舞い を自動テストに落とし込む Characterization Test
65.
洗練
66.
TDDのサイクル 1. テストを書き 2. そのテストを実行して失敗させ(Red) 3.
目的のコードを書き 4. 1で書いたテストを成功させ(Green) 5. テストが通るままでリファクタリング を行う(Refactor) 6. 1∼5を繰り返す
67.
TDDとコード きれい 汚い (すぐには)動かない 動作する Red Green Refactoring
68.
TDDと黄金の回転 きれい 汚い (すぐには)動かない 動作する Red Green Refactoring
69.
実装のテストから 仕様のテストへ Context 移植の最初のステップが終わっ たので、内部を改善したい Force 実装内部を思う存分変更したい Solution ホワイトボックステストを ブラックボックステストに変換
70.
例えば、 RSpec を 使ってみる
71.
郷に入っては郷に従え Context 逐語訳的移植を終えた Force コードをきれいにしたい Solution 移植対象言語のイディオム、ベ ストプラクティスで書き換える
72.
王道を知る Context 逐語訳的移植を終えた Force コードをきれいにしたい Solution 設計の王道を調べ、移植対象言 語に実装が存在したら使用を検 討する
73.
パーサジェネ レータ racc
74.
ご存知、な (ry ごめんなさいごめんなさい
75.
racc デカルチャー ごめんなさいごめんなさい
76.
割愛 ごめんなさいごめんなさい
77.
そして 移植の 最後に
78.
恩返し
79.
第二部 完
80.
Q & A
81.
おわりに
82.
大原則: 一度に複数を 相手にしない
83.
TDDと黄金の回転 きれい 汚い (すぐには)動かない 動作する Red Green Refactoring
84.
続け!
85.
ご清聴 ありがとう ございました
Baixar agora