31.5K Views
June 24, 22
スライド概要
エクストリームプログラミング ―基本に立ち戻れ― 2022年6月24日 techbase-vol1 エクストリームプログラミングで見える開発風景 ワイクル株式会社 角征典 (かど まさのり) @kdmsnr [email protected]
自己紹介 ‣ ‣ 角 征典(@kdmsnr) • 「XP白本」の翻訳 • 技術書の翻訳・執筆 ワイクル株式会社 代表取締 • ‣ アジャイル開発/リーンスタートアップの導入支援 東京工業大学 環境・社会理工学院 特任講師 • エンジニアのためのデザイン思考 2
XPに関するこれまでの講演 https://www.docswell.com/user/kdmsnr https://www.youtube.com/watch?v=YRFWWS_2Epo 3
基本に立ち戻れ 4
エクストリームプログラミング(XP)は ソーシャルチェンジである See Also: https://xtech.nikkei.com/it/article/NEWS/20060906/247316/ 5
XPの前日譚(1984-) http://wiki.c2.com/?WardAndKent 6
XPの前日譚(1984-) Wardが私の情報源。 私は彼が自然にやっていた ことを説明しているだけ。 http://wiki.c2.com/?WardAndKent 6
XPの前日譚(1984-) Kentの最大の功績は 我々が発見したものを 極限まで高めてくれたこと。 Wardが私の情報源。 私は彼が自然にやっていた ことを説明しているだけ。 http://wiki.c2.com/?WardAndKent 6
Wardとの対話による自己研鑽 https://en.wikipedia.org/wiki/Ward_Cunningham 7
Wardとの対話による自己研鑽 • 本を読むのが遅く、学校ではそれほど優秀で はありませんでした。でも、先生の話を予測 しながら聞くのは好きでした。 • 今でも人の話を聞いたり、コンピュータに耳 を傾けたりすることが好きです。 https://en.wikipedia.org/wiki/Ward_Cunningham • プログラミングしているときの自分の気持ち を話すことにも抵抗はありません。 • Kentも同じでした。だから、2人でただ一緒 に座って、問題を解いていました。 7
コミュニケーション フィードバック 8
あなたの会社に 対話できる相手はいますか?🗣 9
対話する相手重要 私の師匠:高橋征義(@takahashim) https://www.youtube.com/watch?v=7Yeir75CoPc 10
XPの誕生 11
C3プロジェクト(1996) エクストリームプログラミングの正式な誕生 https://bliki-ja.github.io/C3/ Martin Fowler アナリスト Kent Beck 技術コンサルタント Ron Je ries XPコーチ(フルタイム) https://en.wikipedia.org/wiki/Martin_Fowler_(software_engineer) https://en.wikipedia.org/wiki/Kent_Beck https:// ic.kr/p/72ij3L ff fl 12
C3参加のきっかけは LISTSERV https://youtu.be/4fkUyQHToGI?t=1623 (2021) 13
XPは人間中心の規律(1998) Beck, K. (1998, March). Extreme programming: A humanistic discipline of software development. In International Conference on Fundamental Approaches to Software Engineering (pp. 1-6). Springer, Berlin, Heidelberg. 14
ソフトウェア開発は人間のプロセス 人間は恐怖を感じる 恐怖は経験によって払拭される Aggressive(積極性)が必要 15
勇気 16
Kent Beckの書いたXPの本 1999 2000 2004 第1版と第2版はまったく違う本である。 第1版では、技術的な限界をプログラマに再発見するように促した。 第2版では、トレードオフのなかで責任を持って仕事をするようにすべての人に呼びかけた。 https://twitter.com/KentBeck/status/1488901187990556672 17
第1版は敬意を欠いていた(2015) The 1st ed.is very programmer centric. It was snotty, disrespectful toward other people. 第1版は非常にプログラマ中心だった。 傲慢で他の人たちへの敬意を欠いていた。 https://youtu.be/cGuTmOUdFbo?t=1602 18
リスペクト 19
【宣伝】第2版とクリーンアジャイル 2020年代はこの2冊で十分ですよ!(わかってくださいよ*) *『ブレードランナー』(1982)の引用です(念の為) 20
基本に立ち戻れ 21
エクストリーム✨ 22
コリン・ターンブルの研究 Kent Beck, Cynthia Andres『エクストリームプログラミング』オーム社 ※『山の民』のほうは真偽が怪しいらしい 23
極限まで高める 映画『スパイナル・タップ』予告編 24 https://www.youtube.com/watch?v=A-FducsaVww
ソフトウェアで大切なこと ‣コードを書くこと • 当たり前(!) ‣テストすること • コードが完成したかどうかを教え てくれる。 ‣話を聞くこと • 何のためのコードを書くのか? ‣設計すること • コードとテストだけではいずれ行 き詰まる。賢くやる必要がある。 http://wiki.c2.com/?ExtremeProgramming 25
ソフトウェアで大切なこと ‣コードを書くこと ‣話を聞くこと • 当たり前(!) • 何のためのコードを書くのか? ‣テストすること ‣設計すること • コードが完成したかどうかを教え てくれる。 • コードとテストだけではいずれ行 き詰まる。賢くやる必要がある。 これがソフトウェアのすべて。 違うことを言う人は、何かを売りつけようとする人。 http://wiki.c2.com/?ExtremeProgramming 26
ソフトウェアで大切なこと ‣コードを書くこと ‣話を聞くこと • 当たり前(!) • 何のためのコードを書くのか? ‣テストすること ‣設計すること • コードが完成したかどうかを教え てくれる。 • コードとテストだけではいずれ行 き詰まる。賢くやる必要がある。 これがソフトウェアのすべて。 違うことを言う人は、何かを売りつけようとする人。 http://wiki.c2.com/?ExtremeProgramming 27
ソフトウェアで大切なこと ‣コードを書くこと ‣話を聞くこと コミュニ • 何のためのコードを書くのか? ケーション • 当たり前(!) ‣テストすること ‣設計すること • コードが完成したかどうかを教え てくれる。 • コードとテストだけではいずれ行 き詰まる。賢くやる必要がある。 これがソフトウェアのすべて。 違うことを言う人は、何かを売りつけようとする人。 http://wiki.c2.com/?ExtremeProgramming 27
ソフトウェアで大切なこと ‣コードを書くこと ‣話を聞くこと コミュニ • 何のためのコードを書くのか? ケーション • 当たり前(!) ‣テストすること ‣設計すること • コードが完成したかどうかを教え フィード てくれる。 バック • コードとテストだけではいずれ行 き詰まる。賢くやる必要がある。 これがソフトウェアのすべて。 違うことを言う人は、何かを売りつけようとする人。 http://wiki.c2.com/?ExtremeProgramming 27
ソフトウェアで大切なこと ‣コードを書くこと ‣話を聞くこと • 当たり前(!) 勇気(積極性) ‣テストすること ‣設計すること • コードが完成したかどうかを教え フィード てくれる。 バック コミュニ • 何のためのコードを書くのか? ケーション • コードとテストだけではいずれ行 き詰まる。賢くやる必要がある。 これがソフトウェアのすべて。 違うことを言う人は、何かを売りつけようとする人。 http://wiki.c2.com/?ExtremeProgramming 27
ソフトウェアで大切なこと ‣コードを書くこと ‣話を聞くこと • 当たり前(!) 勇気(積極性) ‣テストすること ‣設計すること • コードが完成したかどうかを教え フィード てくれる。 バック コミュニ • 何のためのコードを書くのか? ケーション • コードとテストだけではいずれ行 シンプリ シティ き詰まる。賢くやる必要がある。 これがソフトウェアのすべて。 違うことを言う人は、何かを売りつけようとする人。 http://wiki.c2.com/?ExtremeProgramming 27
ソフトウェアで大切なこと ‣コードを書くこと ‣話を聞くこと • 当たり前(!) 勇気(積極性) ‣テストすること ‣設計すること • コードが完成したかどうかを教え フィード てくれる。 バック コミュニ • 何のためのコードを書くのか? ケーション • コードとテストだけではいずれ行 シンプリ シティ き詰まる。賢くやる必要がある。 これがソフトウェアのすべて。 リスペクト 違うことを言う人は、何かを売りつけようとする人。 http://wiki.c2.com/?ExtremeProgramming 27
ソフトウェアで大切なこと ‣コードを書くこと ‣話を聞くこと • 当たり前(!) 勇気(積極性) コミュニ • 何のためのコードを書くのか? ケーション ‣テストすること 設計すること ‣ 価値(Values) • コードが完成したかどうかを教え • コードとテストだけではいずれ行 シンプリ フィード てくれる。 バック シティ き詰まる。賢くやる必要がある。 これがソフトウェアのすべて。 リスペクト 違うことを言う人は、何かを売りつけようとする人。 http://wiki.c2.com/?ExtremeProgramming 27
XPプラクティスの「サークルオブライフ」 ビジネスに関すること チームに関すること 技術に関すること チーム全体 継続的 インテグレーション テスト駆動 共同所有 開発(TDD) 受け入れテスト 協力的プログラミング メタファー リファクタリング シンプルな 設計 計画ゲーム 持続可能なペース 小さなリリース Bob Martin『Clean Agile』図1.8 サークルオブライフ ※プラクティスは他にも考えられる 28
XPプラクティスの「サークルオブライフ」 ビジネスに関すること チームに関すること 技術に関すること チーム全体 継続的 インテグレーション テスト駆動 共同所有 開発(TDD) 受け入れテスト 協力的プログラミング メタファー リファクタリング シンプルな 設計 計画ゲーム 持続可能なペース 小さなリリース Bob Martin『Clean Agile』図1.8 サークルオブライフ ※プラクティスは他にも考えられる 28
ソフトウェアで大切なこと ‣コードを書くこと ‣話を聞くこと • 当たり前(!) 勇気(積極性) ‣テストすること ‣設計すること • コードが完成したかどうかを教え フィード てくれる。 バック コミュニ • 何のためのコードを書くのか? ケーション • コードとテストだけではいずれ行 シンプリ シティ き詰まる。賢くやる必要がある。 これがソフトウェアのすべて。 リスペクト 違うことを言う人は、何かを売りつけようとする人。 http://wiki.c2.com/?ExtremeProgramming 29
ソフトウェアで大切なこと ‣コードを書くこと ‣話を聞くこと • 当たり前(!) 勇気(積極性) ‣テストすること コミュニ • 何のためのコードを書くのか? ケーション ‣設計すること • コードが完成したかどうかを教え フィード てくれる。 バック 受け入れ テスト • コードとテストだけではいずれ行 シンプリ シティ き詰まる。賢くやる必要がある。 これがソフトウェアのすべて。 リスペクト 違うことを言う人は、何かを売りつけようとする人。 http://wiki.c2.com/?ExtremeProgramming 29
ソフトウェアで大切なこと ‣コードを書くこと ‣話を聞くこと • 当たり前(!) 勇気(積極性) ‣テストすること 協力的 プログラミ ング • コードが完成したかどうかを教え フィード てくれる。 バック 受け入れ テスト コミュニ • 何のためのコードを書くのか? ケーション ‣設計すること • コードとテストだけではいずれ行 シンプリ シティ き詰まる。賢くやる必要がある。 これがソフトウェアのすべて。 リスペクト 違うことを言う人は、何かを売りつけようとする人。 http://wiki.c2.com/?ExtremeProgramming 29
ソフトウェアで大切なこと ‣コードを書くこと ‣話を聞くこと • 当たり前(!) 勇気(積極性) ‣テストすること 協力的 プログラミ ング • コードが完成したかどうかを教え フィード てくれる。 バック 受け入れ テスト コミュニ • 何のためのコードを書くのか? ケーション ‣設計すること • コードとテストだけではいずれ行 シンプリ シンプル シティ き詰まる。賢くやる必要がある。 な設計 これがソフトウェアのすべて。 リスペクト 違うことを言う人は、何かを売りつけようとする人。 http://wiki.c2.com/?ExtremeProgramming 29
ソフトウェアで大切なこと ‣コードを書くこと ‣話を聞くこと • 当たり前(!) 勇気(積極性) ‣テストすること 協力的 プログラミ ング • コードが完成したかどうかを教え フィード てくれる。 バック TDD + リファクタリ ング 受け入れ テスト コミュニ • 何のためのコードを書くのか? ケーション ‣設計すること • コードとテストだけではいずれ行 シンプリ シンプル シティ き詰まる。賢くやる必要がある。 な設計 これがソフトウェアのすべて。 リスペクト 違うことを言う人は、何かを売りつけようとする人。 http://wiki.c2.com/?ExtremeProgramming 29
受け入れテスト 30
ストーリーを中心に置く 記入 記入 & 決定 ユーザーストーリー プロダクトオーナー ガイド 開発者 プロダクトマネージャー 対話的ストーリー https://bliki-ja.github.io/ConversationalStories/ 31
ストーリーから受け入れテストへ 記入 記入 & 決定 ユーザーストーリー プロダクトオーナー プロダクトマネージャー ガイド 開発者 エッジケースと テスト条件を記入 テスト自動化 テスター 対話的ストーリー https://bliki-ja.github.io/ConversationalStories/ 32
協力的プログラミング 33
ペアプログラミング ‣ Fred Brooks「大学院生時代(1953-56)にはじめてペアプログラミングをやってみた」 ‣ Richard P. Gabriel「MIT人工知能研究所時代(1972-73)一般的に実施されていた」 ‣ Larry Constantine「1980年代の"ダイナミックデュオ"という開発方法」 ‣ Jim Coplien「1995年、ベル研究所におけるペアによる開発(組織パターン)」 出典:『Pair Programming Illuminated』Laurie Williams, Robert R. Kessler 昔からあるプログラミング方法だった 『Clean Coder』Bob C. Martin 34
エゴレスプログラミング ‣ Ward Cunningham:Kentと私が一緒に仕事をしていたとき、自分たちが やってきたことをふりかえり、そういう言葉(エゴレスプログラミング)を 使っていたことがある。私たち2人は、どちらも大きなエゴを持っている。で も、一緒に仕事をしているときは、それを脇に置くようにしている。2人の間 にはエゴがないんだ。でも、2人としては非常に大きなエゴがあったよ。 35
シンプルな設計 36
Kent Beckの設計のルール ‣テストをパスさせる • テスト可能なコードは「分離」されたコード ‣意図を明らかにする • リーダブルコード、ユビキタス言語 ‣重複を排除する • DRY ‣要素を最小限にする https://bliki-ja.github.io/BeckDesignRules/ 37
TDD + リファクタリング 38
TDDのRGRサイクル (1) 失敗するテストを書く (3) コードをクリーンにする (2) テストをパスさせるコードを書く https://blog.cleancoder.com/uncle-bob/2014/12/17/TheCyclesOfTDD.html 39
TDDの手順「変換の優先順位説」 行き詰まらないための変換の順番 1. {} → Nil 5. 値 → リスト 2. Nil → 固定値 6. 選択 → 反復 3. 固定値 → 変数 7. 文 → 再帰 4. 無条件 → 選択 8. 値 → 変異値 * Bob C. Martin『Clean Craftsmanship』ch04 * https://blog.cleancoder.com/uncle-bob/2013/05/27/TheTransformationPriorityPremise.html 40
TDDはプロの前提条件 TDDを実践していなければ、プロのソフトウェア開発者になれない。 私は本気だ。というより、それが真実になりつつある。 Bob C. Martin『Clean Craftsmanship』 41
基本に立ち戻れ 42
ソフトウェアで大切なこと ‣コードを書くこと ‣話を聞くこと • 当たり前(!) 勇気(積極性) ‣テストすること 協力的 プログラミ ング • コードが完成したかどうかを教え フィード てくれる。 バック TDD + リファクタリ ング 受け入れ テスト コミュニ • 何のためのコードを書くのか? ケーション ‣設計すること • コードとテストだけではいずれ行 シンプリ シンプル シティ き詰まる。賢くやる必要がある。 な設計 これがソフトウェアのすべて。 リスペクト 違うことを言う人は、何かを売りつけようとする人。 http://wiki.c2.com/?ExtremeProgramming 43
すべてをエクストリームにしよう 映画『スパイナル・タップ』予告編 44 https://www.youtube.com/watch?v=A-FducsaVww
XPとは、あなたが自分の理想について考え、 その理想にもとづいて行動するための方法だ。 Kent Beck, Cynthia Andres『エクストリームプログラミング』オーム社 45
快適に過ごせる世界を求めているのであれば、 バランスのとれた生活と順調な仕事をしよう。 Kent Beck, Cynthia Andres『エクストリームプログラミング』オーム社 46
エクストリームプログラミング(XP)は ソーシャルチェンジである See Also: https://xtech.nikkei.com/it/article/NEWS/20060906/247316/ 47
「誰と働くか」超重要 48
http://wiki.c2.com/?WardAndKent 49
https://www.youtube.com/watch?v=7Yeir75CoPc 50
あなたの理想とする順調な仕事は? 51