Your SlideShare is downloading. ×
「レガシーコード」とはいったい?
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

「レガシーコード」とはいったい?

20,798
views

Published on

オープニング+「実践レガシーコード」

オープニング+「実践レガシーコード」

Published in: Technology, Economy & Finance

0 Comments
13 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
20,798
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
155
Comments
0
Likes
13
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide
  • <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>
  • Transcript

    • 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. Win NT 4.0 A: 用のコード
    • 16. あの先輩か A: ら引き継いだ コード
    • 17. その答えを求めて 教科書を ひもといてみましょう
    • 18. 現場で闘う あなたのための バイブル ※翔泳社から 日本語訳出版決定!
    • 19. レガシーコード とは
    • 20. 一般には 「理解しづらい・変更しにく いコードのこと」 を指すかもしれない
    • 21. ただ、この本に よれば
    • 22. レガシーコード とは
    • 23. ずばり テストのないコード を指す Working Effectively with Legacy Code p.xvi
    • 24. そう
    • 25. 明日あなたが 書くコードも
    • 26. レガシーコード かもしれない
    • 27. では、私たちは いったいどうしていけば 良いのだろう
    • 28. それを共々に 考えていきましょう
    • 29. 本日の 本日の目標 レガシーから 逃げない レガシーを 作らない レガシーを 作り込ませない
    • 30. 本日の 本日の目標 そのために 各人がすべきことを 探すきっかけを作る
    • 31. それが レガシーコード 迎撃 座談会
    • 32. それでは、 ここで、 本題に入る前に
    • 33. レガシーを語る上での 基本用語を押さえましょう Edit & Pray Cover & Modify
    • 34. Edit & Play 編集し、そして祈る 不安を抱きながらコードを変更 うまくいったと一息つくのも束の間 たまに、納品後にその不安が的中 現在のソフトウェア開発の主流 (by Working Effectively with Legacy Code)
    • 35. Cover & Modify カバーして、変更する 変更の正しさ確めるテストを用意 作成したテストをセーフティネットと してコードを変更 変更の影響がわかるので安心 このセッションでこれを目指したい
    • 36. ということで ここからが本題
    • 37. 今日のお題 今日のお題 のお 実践レガシーコード レガシー座談会 コミュニケーションとしての レガシーコード まとめ
    • 38. 実践レガシーコード ※フィクションです。たぶん
    • 39. その1 その //コンストラクタ //コンストラクタ public TooLong (String path,Map map1,Map map2,String id, IIF intf) ….
    • 40. どうやって生成 すりゃいいんだ ?
    • 41. その1・ その ・テストケース public void testTooLong() { TooLong tooLong = new TooLong(null,null,null,nul l,null); …. }
    • 42. →Pass Null
    • 43. その2 その2 private DataSource dataSource; public void doLogic() throws Exception { Connection con = dataSource.getConnection(); ….. }
    • 44. その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); } }
    • 45. テストのためなら リフレクションも 厭わず
    • 46. その3 その3(Before) Properties prop = new Properties(); ServletContext servletContext = ContextFactory.getContext(); prop.put(quot;PROP_PATHquot;, servletContext.getRealPath (quot;WEB-INF/prop.propertiesquot;));
    • 47. その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;); }
    • 48. やりすぎ? そこで…
    • 49. その3 その3(ContextFactory内) 内 public static void setContext(ServletContext fakeServletContext) { servletContext = fakeServletContext; }
    • 50. →静的setter
    • 51. その4 その MysteriousObject obj = new MysteriousObject(); Result result = obj.mysteriousLogic(); //どうassertするの? …
    • 52. その4 その4 Result result = obj.mysteriousLogic(); assertEquals(quot;ありえない リターンquot;, result.getString());
    • 53. →Characterization Tests
    • 54. いろいろ データベースのテストには Seasar2(S2Unit)が有効 DBの操作とトランザクション管理が分離 されていることが前提ですが… どこにテストを書くのか? 何をテストしたいのか →どこにバグがありそうか →プログラマーとしての直感を信じよう
    • 55. まとめ 依存性を解決するために、本番 コード側に手をいれることがあり ます テストを通すことよりも、今ある コードの振る舞いを明らかにす ることを優先しましょう