SlideShare a Scribd company logo
1 of 59
Download to read offline
「レガシーコード」とはいったい!?
 レガシーコード」
~あなたも書いてるレガシーコード~
 あなたも書いてるレガシーコード~
         レガシーコード

         高橋邦彦
         大中浩行
13-E-4
         中谷秀洋
         川西俊之
自己紹介

 高橋邦彦(たかはし くにひこ)
   本日進行役
   id:kunit
 新しいフレームワークを作ろうとしていろい
 ろ調べているうちに REST と TDD の魅力
 に取り付かれて今に至る
 2008年5月より株式会社ディノで Web アプ
 リケーション開発を行っている
自己紹介


 大中浩行(おおなかひろゆき)
 (株)エルテックス 商品開発室
 azusa@fieldnotes.jp / @setoazusa
 Working Effectively With Legacy Code 読
 書会幹事
 Seasarプロジェクトコミッタ
自己紹介
 中谷 秀洋(なかたに しゅうよう)
 サイボウズ・ラボ株式会社
  Web 間アプリフレームワーク flowr
  英単語タイピングゲーム iVoca


 コンピュータと無縁の就職をするも、社長の鶴の
 一声で、一人情シス(兼業)として内製&外注
  (中略)
 現在に至る
自己紹介


 川西 俊之(かわにしとしゆき)

 仕事ではC/C++で開発からテストまで

 テスト管理システムTestLink
 C言語用BDDフレームワークCSpec
それでは
「レガシーコード」とはいっ
 たい!?

~あなたも書いてるレガシーコード~
あらため
現場で闘う
あなたに贈る
レガシーコード迎撃
座談会
副題:
副題:
クラウドもSaaSも
iPhoneも
レガシーやろ!
スタート!
まず、皆さんに
問題
Q:レガシーコード
とはいったい何?
COBOLで書
A:
かれたコード
Win NT 4.0
A:
用のコード
あの先輩か
A:
ら引き継いだ
コード
その答えを求めて
教科書を
ひもといてみましょう
現場で闘う
あなたのための
バイブル
※翔泳社から
日本語訳出版決定!
レガシーコード
とは
一般には
「理解しづらい・変更しにく
 いコードのこと」
を指すかもしれない
ただ、この本に
よれば
レガシーコード
とは
ずばり
テストのないコード
を指す
Working Effectively with Legacy Code p.xvi
そう
明日あなたが
書くコードも
レガシーコード
かもしれない
では、私たちは
いったいどうしていけば
良いのだろう
それを共々に
考えていきましょう
本日の
本日の目標

レガシーから 逃げない
レガシーを 作らない
レガシーを 作り込ませない
本日の
本日の目標

そのために
各人がすべきことを
探すきっかけを作る
それが
レガシーコード
迎撃
座談会
それでは、
ここで、
本題に入る前に
レガシーを語る上での
基本用語を押さえましょう
 Edit & Pray
 Cover & Modify
Edit & Play
 編集し、そして祈る
 不安を抱きながらコードを変更
 うまくいったと一息つくのも束の間
 たまに、納品後にその不安が的中
 現在のソフトウェア開発の主流
 (by Working Effectively with Legacy Code)
Cover & Modify
 カバーして、変更する
 変更の正しさ確めるテストを用意
 作成したテストをセーフティネットと
 してコードを変更
 変更の影響がわかるので安心
 このセッションでこれを目指したい
ということで
ここからが本題
今日のお題
今日のお題
  のお

 実践レガシーコード
 レガシー座談会
 コミュニケーションとしての
 レガシーコード
 まとめ
実践レガシーコード
 ※フィクションです。たぶん
その1
その

//コンストラクタ
//コンストラクタ
public TooLong (String
 path,Map map1,Map
 map2,String id, IIF intf)
….
どうやって生成
すりゃいいんだ
?
その1・
その ・テストケース

public void testTooLong() {
TooLong tooLong = new
  TooLong(null,null,null,nul
  l,null);
  ….
}
→Pass Null
その2
その2

private DataSource dataSource;

public void doLogic() throws Exception
  {
Connection con =
   dataSource.getConnection();
…..
}
その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);
  }
}
テストのためなら
リフレクションも
厭わず
その3
その3(Before)

 Properties prop = new Properties();
 ServletContext servletContext =
           ContextFactory.getContext();
 prop.put(quot;PROP_PATHquot;,
  servletContext.getRealPath
 (quot;WEB-INF/prop.propertiesquot;));
その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;);
}
やりすぎ?
そこで…
その3
その3(ContextFactory内)
                  内

 public static void
   setContext(ServletContext
   fakeServletContext) {
 servletContext =
   fakeServletContext;
 }
→静的setter
その4
その

MysteriousObject obj = new
 MysteriousObject();
Result result =
 obj.mysteriousLogic();
//どうassertするの?
…
その4
その4

Result result =
 obj.mysteriousLogic();
assertEquals(quot;ありえない
 リターンquot;,
 result.getString());
→Characterization
Tests
いろいろ

 データベースのテストには
 Seasar2(S2Unit)が有効
  DBの操作とトランザクション管理が分離
  されていることが前提ですが…
 どこにテストを書くのか?
  何をテストしたいのか
   →どこにバグがありそうか
   →プログラマーとしての直感を信じよう
まとめ

 依存性を解決するために、本番
 コード側に手をいれることがあり
 ます
 テストを通すことよりも、今ある
 コードの振る舞いを明らかにす
 ることを優先しましょう

More Related Content

What's hot

210110 deformable detr
210110 deformable detr210110 deformable detr
210110 deformable detrtaeseon 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...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
 
Code Template with EA
Code Template with EACode Template with EA
Code Template with EAYoungSu Son
 
CEO-015-領導01
CEO-015-領導01CEO-015-領導01
CEO-015-領導01handbook
 
Написание DSL в Perl
Написание DSL в PerlНаписание DSL в Perl
Написание DSL в Perlmayperl
 
Zh 01 Monotheism
Zh 01 MonotheismZh 01 Monotheism
Zh 01 Monotheismsameh sameh
 
L’Allemagne et nous
L’Allemagne et nousL’Allemagne et nous
L’Allemagne et nousDonatien Huet
 
2007 17 1048
2007 17 10482007 17 1048
2007 17 1048Chiulan
 
HR-002-土地管理學系職涯路徑圖
HR-002-土地管理學系職涯路徑圖HR-002-土地管理學系職涯路徑圖
HR-002-土地管理學系職涯路徑圖handbook
 
Hr 002 土地管理學系職涯路徑圖
Hr 002 土地管理學系職涯路徑圖Hr 002 土地管理學系職涯路徑圖
Hr 002 土地管理學系職涯路徑圖handbook
 
Math third-3rd-primary-2nd-term (5)
Math third-3rd-primary-2nd-term (5)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_1libro quinto 1-35_0_
1libro quinto 1-35_0_ivette simon
 

What's hot (20)

210110 deformable detr
210110 deformable detr210110 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...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 AppShared Preference in Android App
Shared Preference in Android App
 
Capitulo 27 - Corriente y Resistencia
Capitulo 27 - Corriente y ResistenciaCapitulo 27 - Corriente y Resistencia
Capitulo 27 - Corriente y Resistencia
 
Capitulo 28 - Circuitos Corriente Directa
Capitulo 28 - Circuitos Corriente DirectaCapitulo 28 - Circuitos Corriente Directa
Capitulo 28 - Circuitos Corriente Directa
 
Creating List in Android App (in tamil)
Creating List in Android App (in tamil)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)Creating Image Gallery - Android app (in tamil)
Creating Image Gallery - Android app (in tamil)
 
Code Template with EA
Code Template with EACode Template with EA
Code Template with EA
 
CEO-015-領導01
CEO-015-領導01CEO-015-領導01
CEO-015-領導01
 
Написание DSL в Perl
Написание DSL в PerlНаписание DSL в Perl
Написание DSL в Perl
 
Zh 01 Monotheism
Zh 01 MonotheismZh 01 Monotheism
Zh 01 Monotheism
 
2008IFLA report
2008IFLA report2008IFLA report
2008IFLA report
 
L’Allemagne et nous
L’Allemagne et nousL’Allemagne et nous
L’Allemagne et nous
 
2007 17 1048
2007 17 10482007 17 1048
2007 17 1048
 
Giao an-boi-duong-hoc-sinh-gioi-toan-lop-7
Giao an-boi-duong-hoc-sinh-gioi-toan-lop-7Giao 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-土地管理學系職涯路徑圖
 
Hr 002 土地管理學系職涯路徑圖
Hr 002 土地管理學系職涯路徑圖Hr 002 土地管理學系職涯路徑圖
Hr 002 土地管理學系職涯路徑圖
 
ilm ul Qur'aan
ilm ul Qur'aanilm ul Qur'aan
ilm ul Qur'aan
 
Math third-3rd-primary-2nd-term (5)
Math third-3rd-primary-2nd-term (5)Math third-3rd-primary-2nd-term (5)
Math third-3rd-primary-2nd-term (5)
 
1libro quinto 1-35_0_
1libro quinto 1-35_0_1libro quinto 1-35_0_
1libro quinto 1-35_0_
 

Viewers also liked

Nyandoc: Scaladoc/Javadoc to markdown converter
Nyandoc: Scaladoc/Javadoc to markdown converterNyandoc: Scaladoc/Javadoc to markdown converter
Nyandoc: Scaladoc/Javadoc to markdown convertertod 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 converterNyandoc: Scaladoc/Javadoc to markdown converter
Nyandoc: Scaladoc/Javadoc to markdown converter
 
貧者のための入力デバイス
貧者のための入力デバイス貧者のための入力デバイス
貧者のための入力デバイス
 
概観テキストマイニング
概観テキストマイニング概観テキストマイニング
概観テキストマイニング
 
精神論によるいきいきとした組織づくりのご提案
精神論によるいきいきとした組織づくりのご提案精神論によるいきいきとした組織づくりのご提案
精神論によるいきいきとした組織づくりのご提案
 
仕様変更で死なないためのユニットテスト
仕様変更で死なないためのユニットテスト仕様変更で死なないためのユニットテスト
仕様変更で死なないためのユニットテスト
 
レガシーコード改善のススメ
レガシーコード改善のススメレガシーコード改善のススメ
レガシーコード改善のススメ
 
レガシーコードとの付き合い方とテストでの話
レガシーコードとの付き合い方とテストでの話レガシーコードとの付き合い方とテストでの話
レガシーコードとの付き合い方とテストでの話
 

More from Hiroyuki Ohnaka

remote Docker over SSHが熱い
remote Docker over SSHが熱いremote Docker over SSHが熱い
remote Docker over SSHが熱いHiroyuki Ohnaka
 
VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験
VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験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 ...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にマイグレーションした話ChefとItamaeをニコイチしてAnsibleにマイグレーションした話
ChefとItamaeをニコイチしてAnsibleにマイグレーションした話Hiroyuki Ohnaka
 
「WindowsデスクトップでWeb開発 改訂版」サンプル
「WindowsデスクトップでWeb開発 改訂版」サンプル「WindowsデスクトップでWeb開発 改訂版」サンプル
「WindowsデスクトップでWeb開発 改訂版」サンプルHiroyuki Ohnaka
 
Microsoft DocsにContributeした話
Microsoft DocsにContributeした話Microsoft DocsにContributeした話
Microsoft DocsにContributeした話Hiroyuki Ohnaka
 
Azure functions+typescript
Azure functions+typescriptAzure functions+typescript
Azure functions+typescriptHiroyuki Ohnaka
 
技術書典4 く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版
 技術書典4  く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版 技術書典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ではじめるお手軽サーバー監視」サンプル版4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版
4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版Hiroyuki Ohnaka
 
仮想通貨始めました~GethではじめるEthereum~
仮想通貨始めました~GethではじめるEthereum~仮想通貨始めました~GethではじめるEthereum~
仮想通貨始めました~GethではじめるEthereum~Hiroyuki Ohnaka
 
錬金術MeetUpへのお誘い
錬金術MeetUpへのお誘い錬金術MeetUpへのお誘い
錬金術MeetUpへのお誘いHiroyuki Ohnaka
 
Mackerelではじめる お手軽サーバー監視
Mackerelではじめる お手軽サーバー監視Mackerelではじめる お手軽サーバー監視
Mackerelではじめる お手軽サーバー監視Hiroyuki Ohnaka
 
「GebとSpockではじめるシステムテスト自動化」
「GebとSpockではじめるシステムテスト自動化」「GebとSpockではじめるシステムテスト自動化」
「GebとSpockではじめるシステムテスト自動化」Hiroyuki Ohnaka
 
TDDはじめて物語Second Season(updated)
TDDはじめて物語Second Season(updated)TDDはじめて物語Second Season(updated)
TDDはじめて物語Second Season(updated)Hiroyuki Ohnaka
 
TDDはじめて物語 Second Season #tddbc
TDDはじめて物語 Second Season #tddbcTDDはじめて物語 Second Season #tddbc
TDDはじめて物語 Second Season #tddbcHiroyuki Ohnaka
 
XP祭り2017 LT 「DevOps再考」(改題)
XP祭り2017 LT 「DevOps再考」(改題)XP祭り2017 LT 「DevOps再考」(改題)
XP祭り2017 LT 「DevOps再考」(改題)Hiroyuki Ohnaka
 
JDK9の真の目玉機能はこれだ!
JDK9の真の目玉機能はこれだ!JDK9の真の目玉機能はこれだ!
JDK9の真の目玉機能はこれだ!Hiroyuki Ohnaka
 
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~Hiroyuki Ohnaka
 
「すいーとみゅーじっく」のできるまで
「すいーとみゅーじっく」のできるまで「すいーとみゅーじっく」のできるまで
「すいーとみゅーじっく」のできるまでHiroyuki Ohnaka
 

More from Hiroyuki Ohnaka (20)

remote Docker over SSHが熱い
remote Docker over SSHが熱いremote Docker over SSHが熱い
remote Docker over SSHが熱い
 
VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験
VSCode Remote Container & GitHub Codespacesで拓く次世代のJava開発体験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 ...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にマイグレーションした話ChefとItamaeをニコイチしてAnsibleにマイグレーションした話
ChefとItamaeをニコイチしてAnsibleにマイグレーションした話
 
「WindowsデスクトップでWeb開発 改訂版」サンプル
「WindowsデスクトップでWeb開発 改訂版」サンプル「WindowsデスクトップでWeb開発 改訂版」サンプル
「WindowsデスクトップでWeb開発 改訂版」サンプル
 
Mackerelの薄い本
Mackerelの薄い本Mackerelの薄い本
Mackerelの薄い本
 
Microsoft DocsにContributeした話
Microsoft DocsにContributeした話Microsoft DocsにContributeした話
Microsoft DocsにContributeした話
 
Azure functions+typescript
Azure functions+typescriptAzure functions+typescript
Azure functions+typescript
 
技術書典4 く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版
 技術書典4  く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版 技術書典4  く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版
技術書典4 く-35「錬金術MeetUp」 Alchemist Vol.1 サンプル版
 
4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版
4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版
4/22 技術書典4 か-16「ふぃーるどのーつ」 新刊「すいーとみゅーじっく vol.5Mackerelではじめるお手軽サーバー監視」サンプル版
 
仮想通貨始めました~GethではじめるEthereum~
仮想通貨始めました~GethではじめるEthereum~仮想通貨始めました~GethではじめるEthereum~
仮想通貨始めました~GethではじめるEthereum~
 
錬金術MeetUpへのお誘い
錬金術MeetUpへのお誘い錬金術MeetUpへのお誘い
錬金術MeetUpへのお誘い
 
Mackerelではじめる お手軽サーバー監視
Mackerelではじめる お手軽サーバー監視Mackerelではじめる お手軽サーバー監視
Mackerelではじめる お手軽サーバー監視
 
「GebとSpockではじめるシステムテスト自動化」
「GebとSpockではじめるシステムテスト自動化」「GebとSpockではじめるシステムテスト自動化」
「GebとSpockではじめるシステムテスト自動化」
 
TDDはじめて物語Second Season(updated)
TDDはじめて物語Second Season(updated)TDDはじめて物語Second Season(updated)
TDDはじめて物語Second Season(updated)
 
TDDはじめて物語 Second Season #tddbc
TDDはじめて物語 Second Season #tddbcTDDはじめて物語 Second Season #tddbc
TDDはじめて物語 Second Season #tddbc
 
XP祭り2017 LT 「DevOps再考」(改題)
XP祭り2017 LT 「DevOps再考」(改題)XP祭り2017 LT 「DevOps再考」(改題)
XP祭り2017 LT 「DevOps再考」(改題)
 
JDK9の真の目玉機能はこれだ!
JDK9の真の目玉機能はこれだ!JDK9の真の目玉機能はこれだ!
JDK9の真の目玉機能はこれだ!
 
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
Java8移行は怖くない~エンタープライズ案件でのJava8移行事例~
 
「すいーとみゅーじっく」のできるまで
「すいーとみゅーじっく」のできるまで「すいーとみゅーじっく」のできるまで
「すいーとみゅーじっく」のできるまで
 

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

Editor's Notes

  1. <number>
  2. <number>
  3. <number>
  4. <number>
  5. <number>
  6. <number>
  7. <number>
  8. <number>
  9. <number>
  10. <number>
  11. <number>
  12. <number>
  13. <number>
  14. <number>
  15. <number>
  16. <number>
  17. <number>
  18. <number>
  19. <number>
  20. <number>
  21. <number>
  22. <number>
  23. <number>
  24. <number>
  25. <number>
  26. <number>
  27. <number>
  28. <number>
  29. <number>
  30. <number>
  31. <number>
  32. <number>
  33. <number>
  34. <number>
  35. <number>
  36. <number>
  37. <number>
  38. <number>
  39. <number>
  40. <number>
  41. <number>