Location via proxy:
[ UP ]
[Report a bug]
[Manage cookies]
No cookies
No scripts
No ads
No referrer
Show this form
Submit Search
Submit Search
Upload
「レガシーコード」とはいったい?
•
16 likes
•
16,419 views
Hiroyuki Ohnaka
Follow
オープニング+「実践レガシーコード」
Read less
Read more
Report
Share
Related slideshows
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
Report
Share
1 of 59
Download now
Download to read offline
More Related Content
「レガシーコード」とはいったい?
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: かれたコード
16.
Win NT 4.0 A: 用のコード
18.
あの先輩か A: ら引き継いだ コード
20.
その答えを求めて 教科書を ひもといてみましょう
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