SlideShare uma empresa Scribd logo
1 de 15
Shumpei Hozumi
穂積 俊平
しくみ製作所 福島支部長
レガシーコード
と闘う方法
2
レガシーコード改善ガイド
Shumpei Hozumi
原題
Working Effectively with Legacy Code
著者
マイケル・C・フェザーズ (著), 平澤 章 他 (翻訳)
発行日
2004/9 (米国)
2009/7 (日本)
※ 販売時期的に、Java などの静的言語を
意識した内容になっています。
構成:3部構成
1. 変更のメカニズム
レガシーコードの変更方法や観点を紹介
※抽象的な話が多い
1. ソフトウェアの変更
開発現場で起こるソフトウェアの変更に対する対処策を紹介
※具体的な話が多い
1. 依存関係を排除する方法
依存関係を排除する具体的な方法を紹介
※具体的な話が多い
3
本の構成
Shumpei Hozumi
4
レガシーコードとは?
Shumpei Hozumi
1. 定義
一般には「理解できず、変更が難しいコード」
本書では「テストがないコード」
2. レガシーコードは悪いコード
テストなしにコードを変更するのは危険な賭け
「変更」はソフトウェアの宿命
5
コードの変更
Shumpei Hozumi
変更の種類
1. 要件の追加
2. バグの修正
3. 設計の改善
4. リソース利用の最適化
変更の正しさを保証するためにはテストが重要
6
レガシーコードの変更手順
Shumpei Hozumi
1. 変更点を洗い出す
2. テストを書く場所を洗い出す
3. 依存関係を排除する
4. テストを書く
5. 変更を行う
理想的な設計にならない場合が多い。少しでも良くなっているな
ら、完璧でないことに躊躇せずに実行する
変更の心構え
7
依存関係を排除する理由
Shumpei Hozumi
1. 分離
テスト対象から、テストに邪魔なコードを引き剥がして、テス
トを実行したい。
例:ネットワーク接続を行うコード
2. 検出
テスト対象から、計算結果を取得できるようにして、アサー
ションしたい。
例:電卓ソフトで計算と表示が同じメソッドに書かれており、
計算結果はローカル変数に埋もれている。結果、計算結果の取
得ができない
8
依存関係を排除するときに役立つ観点
Shumpei Hozumi
1. 接合部
その場所を直接編集しなくても、プログラムの振る舞いを変え
ることのできる場所のこと。
例:オブジェクト接合部(インターフェイス)
2. 許容点
どの振る舞いを使うかを決定するところ。どの接合部も許容点
を持つ。
例:オブジェクト代入式、コンストラクタ
9
依存関係の排除方法(第三部)
Shumpei Hozumi
具体的手法
1. パラメータの適合
2. メソッドオブジェクトの取り出し
3. 定義の補完
4. グローバル参照のカプセル化
5. 静的メソッドの公開
6. 呼び出しの抽出とオーバーライド
7. Factory Method の抽出とオーバーライド
8. Get メソッドの抽出とオーバーライド
など24個の手法が書かれている
10
ソフトウェアの変更(第二部)
Shumpei Hozumi
開発現場でこんなこと起きていませんか?
1. 時間がないのに変更しなければなりません
2. 変更する必要がありますが、どのメソッドをテストすれば
よいのでしょうか?
3. 検出できない副作用があります
など24個の事象に対する対処策が書かれている。
11
時間がないのに変更しなければいけません
Shumpei Hozumi
1. スプラウト手法
全く新しいコードを書くことで変更に対処する。
テストは新しいコードに対してのみ記述する。
メソッド () {
…
}
クラス
メソッド () {
…
新規追加メソッド();
}
新規追加メソッド(){…}
クラス
ここだけテ
ストする
12
変更する必要がありますが、
どのメソッドをテストすればよいのでしょうか?
Shumpei Hozumi
1. 影響スケッチ
メソッドの呼び出しや変数へのアクセス関係を図に書いてみる
影響の伝播のチェック方法
1. 呼び出し側によって使われる戻り値
2. パラメータとして渡されるオブジェクトの変更
3. staticデータ、あるいはグローバルなデータの変更
List <Member> members;
getMemberCount () {
return members.size();
}
Project クラス
13
検出できない副作用があります
Shumpei Hozumi
1. クエリーメソッドを追加する
クエリーメソッド:副作用のない値を返すメソッド (getter)
コマンド:副作用のみで値を返さないメソッド (setter)
14
感想
Shumpei Hozumi
1. 良い点
1. 具体的な事象が書かれているので想像しやすい
2. TDD,DRY原則,単一責務など重要な概念がけっこう出てくる
初学者には良いと思う。ただし、そんなに深堀りはしていない。
3. 心構え的なことが参考になる
完璧を求めてはいけない。
2. 悪い点
1. やたら言葉使いが難しく読みにくい…
2. 残念ながら新しい発見があまりなかった…
15
感想
Shumpei Hozumi
おすすめの方法
以下のサイトにわかりやすい言葉かつ、読みやすい構成でまと
められているので、読むならこちらがおすすめ。
http://d.hatena.ne.jp/asakichy/20130401/1364767414

Mais conteúdo relacionado

Mais de しくみ製作所

冴えない動画の育てかた
冴えない動画の育てかた冴えない動画の育てかた
冴えない動画の育てかたしくみ製作所
 
解説!30分で分かるLEAN ANALYTICS
解説!30分で分かるLEAN ANALYTICS解説!30分で分かるLEAN ANALYTICS
解説!30分で分かるLEAN ANALYTICSしくみ製作所
 
クライアントサイドjavascript簡単紹介
クライアントサイドjavascript簡単紹介クライアントサイドjavascript簡単紹介
クライアントサイドjavascript簡単紹介しくみ製作所
 
Rubyによるクローラー開発
Rubyによるクローラー開発Rubyによるクローラー開発
Rubyによるクローラー開発しくみ製作所
 
Webサービスを分類してみた
Webサービスを分類してみたWebサービスを分類してみた
Webサービスを分類してみたしくみ製作所
 

Mais de しくみ製作所 (8)

Reactjs
ReactjsReactjs
Reactjs
 
冴えない動画の育てかた
冴えない動画の育てかた冴えない動画の育てかた
冴えない動画の育てかた
 
解説!30分で分かるLEAN ANALYTICS
解説!30分で分かるLEAN ANALYTICS解説!30分で分かるLEAN ANALYTICS
解説!30分で分かるLEAN ANALYTICS
 
クライアントサイドjavascript簡単紹介
クライアントサイドjavascript簡単紹介クライアントサイドjavascript簡単紹介
クライアントサイドjavascript簡単紹介
 
Rubyによるクローラー開発
Rubyによるクローラー開発Rubyによるクローラー開発
Rubyによるクローラー開発
 
スマホ対応
スマホ対応スマホ対応
スマホ対応
 
Androidアプリ開発
Androidアプリ開発Androidアプリ開発
Androidアプリ開発
 
Webサービスを分類してみた
Webサービスを分類してみたWebサービスを分類してみた
Webサービスを分類してみた
 

レガシコード改善ガイド