Submit Search
Upload
「レガシーコード」とはいったい?
•
16 likes
•
16,412 views
Hiroyuki Ohnaka
Follow
オープニング+「実践レガシーコード」
Read less
Read more
Technology
Economy & Finance
Report
Share
Report
Share
1 of 59
Download now
Download to read offline
Recommended
jQuery
jQuery
Alexey Bovanenko
SQLite in Android App (in tamil)
SQLite in Android App (in tamil)
Dr. Ramkumar Lakshminarayanan
Rating Bar in Android Example
Rating Bar in Android Example
Dr. Ramkumar Lakshminarayanan
プログラマのためのテスト2
プログラマのためのテスト2
Kuniaki Igarashi
Hardware Interface in Android (in tamil)
Hardware Interface in Android (in tamil)
Dr. Ramkumar Lakshminarayanan
jQuery Tutorial
jQuery Tutorial
Eric ShangKuan
C++编程实践
C++编程实践
Bin Cai
b2con2006_sato
b2con2006_sato
Hiroshi Ono
Recommended
jQuery
jQuery
Alexey Bovanenko
SQLite in Android App (in tamil)
SQLite in Android App (in tamil)
Dr. Ramkumar Lakshminarayanan
Rating Bar in Android Example
Rating Bar in Android Example
Dr. Ramkumar Lakshminarayanan
プログラマのためのテスト2
プログラマのためのテスト2
Kuniaki Igarashi
Hardware Interface in Android (in tamil)
Hardware Interface in Android (in tamil)
Dr. Ramkumar Lakshminarayanan
jQuery Tutorial
jQuery Tutorial
Eric ShangKuan
C++编程实践
C++编程实践
Bin Cai
b2con2006_sato
b2con2006_sato
Hiroshi Ono
210110 deformable detr
210110 deformable detr
taeseon ryu
Apport de la simulation sur maquette adaptative à la démarche de conception d...
Apport de la simulation sur maquette adaptative à la démarche de conception d...
Benoit LANGARD - PhD
Shared Preference in Android App
Shared Preference in Android App
Dr. Ramkumar Lakshminarayanan
Capitulo 27 - Corriente y Resistencia
Capitulo 27 - Corriente y Resistencia
Laura Milena Parra Navarro
Capitulo 28 - Circuitos Corriente Directa
Capitulo 28 - Circuitos Corriente Directa
Laura Milena Parra Navarro
Creating List in Android App (in tamil)
Creating List in Android App (in tamil)
Dr. Ramkumar Lakshminarayanan
Creating Image Gallery - Android app (in tamil)
Creating Image Gallery - Android app (in tamil)
Dr. Ramkumar Lakshminarayanan
Code Template with EA
Code Template with EA
YoungSu Son
CEO-015-領導01
CEO-015-領導01
handbook
Написание DSL в Perl
Написание DSL в Perl
mayperl
Zh 01 Monotheism
Zh 01 Monotheism
sameh sameh
2008IFLA report
2008IFLA report
Martika Yang
L’Allemagne et nous
L’Allemagne et nous
Donatien Huet
2007 17 1048
2007 17 1048
Chiulan
Giao an-boi-duong-hoc-sinh-gioi-toan-lop-7
Giao an-boi-duong-hoc-sinh-gioi-toan-lop-7
Quangminhbaohan Quang Minh
HR-002-土地管理學系職涯路徑圖
HR-002-土地管理學系職涯路徑圖
handbook
Hr 002 土地管理學系職涯路徑圖
Hr 002 土地管理學系職涯路徑圖
handbook
ilm ul Qur'aan
ilm ul Qur'aan
Zain Ul Abidin
Math third-3rd-primary-2nd-term (5)
Math third-3rd-primary-2nd-term (5)
khawagah
1libro quinto 1-35_0_
1libro quinto 1-35_0_
ivette simon
Nyandoc: Scaladoc/Javadoc to markdown converter
Nyandoc: Scaladoc/Javadoc to markdown converter
tod esking
貧者のための入力デバイス
貧者のための入力デバイス
tod esking
More Related Content
What's hot
210110 deformable detr
210110 deformable detr
taeseon ryu
Apport de la simulation sur maquette adaptative à la démarche de conception d...
Apport de la simulation sur maquette adaptative à la démarche de conception d...
Benoit LANGARD - PhD
Shared Preference in Android App
Shared Preference in Android App
Dr. Ramkumar Lakshminarayanan
Capitulo 27 - Corriente y Resistencia
Capitulo 27 - Corriente y Resistencia
Laura Milena Parra Navarro
Capitulo 28 - Circuitos Corriente Directa
Capitulo 28 - Circuitos Corriente Directa
Laura Milena Parra Navarro
Creating List in Android App (in tamil)
Creating List in Android App (in tamil)
Dr. Ramkumar Lakshminarayanan
Creating Image Gallery - Android app (in tamil)
Creating Image Gallery - Android app (in tamil)
Dr. Ramkumar Lakshminarayanan
Code Template with EA
Code Template with EA
YoungSu Son
CEO-015-領導01
CEO-015-領導01
handbook
Написание DSL в Perl
Написание DSL в Perl
mayperl
Zh 01 Monotheism
Zh 01 Monotheism
sameh sameh
2008IFLA report
2008IFLA report
Martika Yang
L’Allemagne et nous
L’Allemagne et nous
Donatien Huet
2007 17 1048
2007 17 1048
Chiulan
Giao an-boi-duong-hoc-sinh-gioi-toan-lop-7
Giao an-boi-duong-hoc-sinh-gioi-toan-lop-7
Quangminhbaohan Quang Minh
HR-002-土地管理學系職涯路徑圖
HR-002-土地管理學系職涯路徑圖
handbook
Hr 002 土地管理學系職涯路徑圖
Hr 002 土地管理學系職涯路徑圖
handbook
ilm ul Qur'aan
ilm ul Qur'aan
Zain Ul Abidin
Math third-3rd-primary-2nd-term (5)
Math third-3rd-primary-2nd-term (5)
khawagah
1libro quinto 1-35_0_
1libro quinto 1-35_0_
ivette simon
What's hot
(20)
210110 deformable detr
210110 deformable detr
Apport de la simulation sur maquette adaptative à la démarche de conception d...
Apport de la simulation sur maquette adaptative à la démarche de conception d...
Shared Preference in Android App
Shared Preference in Android App
Capitulo 27 - Corriente y Resistencia
Capitulo 27 - Corriente y Resistencia
Capitulo 28 - Circuitos Corriente Directa
Capitulo 28 - Circuitos Corriente Directa
Creating List in Android App (in tamil)
Creating List in Android App (in tamil)
Creating Image Gallery - Android app (in tamil)
Creating Image Gallery - Android app (in tamil)
Code Template with EA
Code Template with EA
CEO-015-領導01
CEO-015-領導01
Написание DSL в Perl
Написание DSL в Perl
Zh 01 Monotheism
Zh 01 Monotheism
2008IFLA report
2008IFLA report
L’Allemagne et nous
L’Allemagne et nous
2007 17 1048
2007 17 1048
Giao an-boi-duong-hoc-sinh-gioi-toan-lop-7
Giao an-boi-duong-hoc-sinh-gioi-toan-lop-7
HR-002-土地管理學系職涯路徑圖
HR-002-土地管理學系職涯路徑圖
Hr 002 土地管理學系職涯路徑圖
Hr 002 土地管理學系職涯路徑圖
ilm ul Qur'aan
ilm ul Qur'aan
Math third-3rd-primary-2nd-term (5)
Math third-3rd-primary-2nd-term (5)
1libro quinto 1-35_0_
1libro quinto 1-35_0_
Viewers also liked
Nyandoc: Scaladoc/Javadoc to markdown converter
Nyandoc: Scaladoc/Javadoc to markdown converter
tod esking
貧者のための入力デバイス
貧者のための入力デバイス
tod esking
概観テキストマイニング
概観テキストマイニング
tod esking
精神論によるいきいきとした組織づくりのご提案
精神論によるいきいきとした組織づくりのご提案
tod esking
仕様変更で死なないためのユニットテスト
仕様変更で死なないためのユニットテスト
tod esking
レガシーコード改善のススメ
レガシーコード改善のススメ
Akira Hirasawa
レガシーコードとの付き合い方とテストでの話
レガシーコードとの付き合い方とテストでの話
H Iseri
Viewers also liked
(7)
Nyandoc: Scaladoc/Javadoc to markdown converter
Nyandoc: Scaladoc/Javadoc to markdown converter
貧者のための入力デバイス
貧者のための入力デバイス
概観テキストマイニング
概観テキストマイニング
精神論によるいきいきとした組織づくりのご提案
精神論によるいきいきとした組織づくりのご提案
仕様変更で死なないためのユニットテスト
仕様変更で死なないためのユニットテスト
レガシーコード改善のススメ
レガシーコード改善のススメ
レガシーコードとの付き合い方とテストでの話
レガシーコードとの付き合い方とテストでの話
More from Hiroyuki Ohnaka
remote Docker over SSHが熱い
remote Docker over SSHが熱い
Hiroyuki Ohnaka
VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験
VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験
Hiroyuki Ohnaka
Remote Development with Visual Studio Code & A clean dev env, working every ...
Remote Development with Visual Studio Code & A clean dev env, working every ...
Hiroyuki Ohnaka
ChefとItamaeをニコイチしてAnsibleにマイグレーションした話
ChefとItamaeをニコイチしてAnsibleにマイグレーションした話
Hiroyuki Ohnaka
「WindowsデスクトップでWeb開発 改訂版」サンプル
「WindowsデスクトップでWeb開発 改訂版」サンプル
Hiroyuki Ohnaka
Mackerelの薄い本
Mackerelの薄い本
Hiroyuki Ohnaka
Microsoft DocsにContributeした話
Microsoft DocsにContributeした話
Hiroyuki Ohnaka
Azure functions+typescript
Azure functions+typescript
Hiroyuki Ohnaka
技術書典4 く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版
技術書典4 く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版
Hiroyuki Ohnaka
4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版
4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版
Hiroyuki Ohnaka
仮想通貨始めました~GethではじめるEthereum~
仮想通貨始めました~GethではじめるEthereum~
Hiroyuki Ohnaka
錬金術MeetUpへのお誘い
錬金術MeetUpへのお誘い
Hiroyuki Ohnaka
Mackerelではじめる お手軽サーバー監視
Mackerelではじめる お手軽サーバー監視
Hiroyuki Ohnaka
「GebとSpockではじめるシステムテスト自動化」
「GebとSpockではじめるシステムテスト自動化」
Hiroyuki Ohnaka
TDDはじめて物語Second Season(updated)
TDDはじめて物語Second Season(updated)
Hiroyuki Ohnaka
TDDはじめて物語 Second Season #tddbc
TDDはじめて物語 Second Season #tddbc
Hiroyuki Ohnaka
XP祭り2017 LT 「DevOps再考」(改題)
XP祭り2017 LT 「DevOps再考」(改題)
Hiroyuki Ohnaka
JDK9の真の目玉機能はこれだ!
JDK9の真の目玉機能はこれだ!
Hiroyuki Ohnaka
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Hiroyuki Ohnaka
「すいーとみゅーじっく」のできるまで
「すいーとみゅーじっく」のできるまで
Hiroyuki Ohnaka
More from Hiroyuki Ohnaka
(20)
remote Docker over SSHが熱い
remote Docker over SSHが熱い
VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験
VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験
Remote Development with Visual Studio Code & A clean dev env, working every ...
Remote Development with Visual Studio Code & A clean dev env, working every ...
ChefとItamaeをニコイチしてAnsibleにマイグレーションした話
ChefとItamaeをニコイチしてAnsibleにマイグレーションした話
「WindowsデスクトップでWeb開発 改訂版」サンプル
「WindowsデスクトップでWeb開発 改訂版」サンプル
Mackerelの薄い本
Mackerelの薄い本
Microsoft DocsにContributeした話
Microsoft DocsにContributeした話
Azure functions+typescript
Azure functions+typescript
技術書典4 く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版
技術書典4 く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版
4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版
4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版
仮想通貨始めました~GethではじめるEthereum~
仮想通貨始めました~GethではじめるEthereum~
錬金術MeetUpへのお誘い
錬金術MeetUpへのお誘い
Mackerelではじめる お手軽サーバー監視
Mackerelではじめる お手軽サーバー監視
「GebとSpockではじめるシステムテスト自動化」
「GebとSpockではじめるシステムテスト自動化」
TDDはじめて物語Second Season(updated)
TDDはじめて物語Second Season(updated)
TDDはじめて物語 Second Season #tddbc
TDDはじめて物語 Second Season #tddbc
XP祭り2017 LT 「DevOps再考」(改題)
XP祭り2017 LT 「DevOps再考」(改題)
JDK9の真の目玉機能はこれだ!
JDK9の真の目玉機能はこれだ!
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
「すいーとみゅーじっく」のできるまで
「すいーとみゅーじっく」のできるまで
「レガシーコード」とはいったい?
1.
「レガシーコード」とはいったい!? レガシーコード」 ~あなたも書いてるレガシーコード~ あなたも書いてるレガシーコード~
レガシーコード 高橋邦彦 大中浩行 13-E-4 中谷秀洋 川西俊之
2.
自己紹介 高橋邦彦(たかはし くにひこ)
本日進行役 id:kunit 新しいフレームワークを作ろうとしていろい ろ調べているうちに REST と TDD の魅力 に取り付かれて今に至る 2008年5月より株式会社ディノで Web アプ リケーション開発を行っている
3.
自己紹介 大中浩行(おおなかひろゆき) (株)エルテックス
商品開発室 azusa@fieldnotes.jp / @setoazusa Working Effectively With Legacy Code 読 書会幹事 Seasarプロジェクトコミッタ
4.
自己紹介 中谷 秀洋(なかたに
しゅうよう) サイボウズ・ラボ株式会社 Web 間アプリフレームワーク flowr 英単語タイピングゲーム iVoca コンピュータと無縁の就職をするも、社長の鶴の 一声で、一人情シス(兼業)として内製&外注 (中略) 現在に至る
5.
自己紹介 川西 俊之(かわにしとしゆき)
仕事ではC/C++で開発からテストまで テスト管理システムTestLink C言語用BDDフレームワークCSpec
6.
それでは
7.
「レガシーコード」とはいっ たい!? ~あなたも書いてるレガシーコード~
8.
あらため
9.
現場で闘う あなたに贈る レガシーコード迎撃 座談会
10.
副題: 副題: クラウドもSaaSも iPhoneも レガシーやろ!
11.
スタート!
12.
まず、皆さんに 問題
13.
Q:レガシーコード とはいったい何?
14.
COBOLで書 A: かれたコード
15.
16.
Win NT 4.0 A: 用のコード
17.
18.
あの先輩か A: ら引き継いだ コード
19.
20.
その答えを求めて 教科書を ひもといてみましょう
21.
22.
現場で闘う あなたのための バイブル ※翔泳社から 日本語訳出版決定!
23.
レガシーコード とは
24.
一般には 「理解しづらい・変更しにく いコードのこと」 を指すかもしれない
25.
ただ、この本に よれば
26.
レガシーコード とは
27.
ずばり テストのないコード を指す Working Effectively with
Legacy Code p.xvi
28.
そう
29.
明日あなたが 書くコードも
30.
レガシーコード かもしれない
31.
では、私たちは いったいどうしていけば 良いのだろう
32.
それを共々に 考えていきましょう
33.
本日の 本日の目標 レガシーから 逃げない レガシーを 作らない レガシーを
作り込ませない
34.
本日の 本日の目標 そのために 各人がすべきことを 探すきっかけを作る
35.
それが レガシーコード 迎撃 座談会
36.
それでは、 ここで、 本題に入る前に
37.
レガシーを語る上での 基本用語を押さえましょう Edit &
Pray Cover & Modify
38.
Edit & Play
編集し、そして祈る 不安を抱きながらコードを変更 うまくいったと一息つくのも束の間 たまに、納品後にその不安が的中 現在のソフトウェア開発の主流 (by Working Effectively with Legacy Code)
39.
Cover & Modify
カバーして、変更する 変更の正しさ確めるテストを用意 作成したテストをセーフティネットと してコードを変更 変更の影響がわかるので安心 このセッションでこれを目指したい
40.
ということで ここからが本題
41.
今日のお題 今日のお題 のお
実践レガシーコード レガシー座談会 コミュニケーションとしての レガシーコード まとめ
42.
実践レガシーコード ※フィクションです。たぶん
43.
その1 その //コンストラクタ //コンストラクタ public TooLong (String
path,Map map1,Map map2,String id, IIF intf) ….
44.
どうやって生成 すりゃいいんだ ?
45.
その1・ その ・テストケース public void
testTooLong() { TooLong tooLong = new TooLong(null,null,null,nul l,null); …. }
46.
→Pass Null
47.
その2 その2 private DataSource dataSource; public
void doLogic() throws Exception { Connection con = dataSource.getConnection(); ….. }
48.
その2 その2 InitialContext ictx
= new InitialContext(); DataSource ds = (DataSource) ictx.lookup(quot;java:comp/env/jdbc/SampleDSquot;) ; Field[] fields = Demo2.class .getDeclaredFields(); for (Field field : fields) { if (field.equals(quot;dataSourcequot;)) { field.setAccessible(true true); true field.set(instance, ds); } }
49.
テストのためなら リフレクションも 厭わず
50.
その3 その3(Before) Properties prop
= new Properties(); ServletContext servletContext = ContextFactory.getContext(); prop.put(quot;PROP_PATHquot;, servletContext.getRealPath (quot;WEB-INF/prop.propertiesquot;));
51.
その3 その3(After) Properties prop =
new Properties(); if (ContextFactory.hasContext()) { // 本番 ServletContext servletContext = ContextFactory.getContext(); prop.put(quot;LIB_PATHquot;, servletContext .getRealPath(quot;WEB-INF/prop.propertiesquot;)); } else { // テスト prop.put(quot;LIB_PATHquot;, quot;WEB- INF/prop.propertiesquot;); }
52.
やりすぎ? そこで…
53.
その3 その3(ContextFactory内)
内 public static void setContext(ServletContext fakeServletContext) { servletContext = fakeServletContext; }
54.
→静的setter
55.
その4 その MysteriousObject obj =
new MysteriousObject(); Result result = obj.mysteriousLogic(); //どうassertするの? …
56.
その4 その4 Result result =
obj.mysteriousLogic(); assertEquals(quot;ありえない リターンquot;, result.getString());
57.
→Characterization Tests
58.
いろいろ データベースのテストには Seasar2(S2Unit)が有効
DBの操作とトランザクション管理が分離 されていることが前提ですが… どこにテストを書くのか? 何をテストしたいのか →どこにバグがありそうか →プログラマーとしての直感を信じよう
59.
まとめ 依存性を解決するために、本番 コード側に手をいれることがあり
ます テストを通すことよりも、今ある コードの振る舞いを明らかにす ることを優先しましょう
Editor's Notes
<number>
<number>
<number>
<number>
<number>
<number>
<number>
<number>
<number>
<number>
<number>
<number>
<number>
<number>
<number>
<number>
<number>
<number>
<number>
<number>
<number>
<number>
<number>
<number>
<number>
<number>
<number>
<number>
<number>
<number>
<number>
<number>
<number>
<number>
<number>
<number>
<number>
<number>
<number>
<number>
<number>
Download now