Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Shumpei Hozumi
穂積 俊平
しくみ製作所 福島支部長
レガシーコード
と闘う方法
2
レガシーコード改善ガイド
Shumpei Hozumi
原題
Working Effectively with Legacy Code
著者
マイケル・C・フェザーズ (著), 平澤 章 他 (翻訳)
発行日
2004/9 (米国)
200...
構成:3部構成
1. 変更のメカニズム
レガシーコードの変更方法や観点を紹介
※抽象的な話が多い
1. ソフトウェアの変更
開発現場で起こるソフトウェアの変更に対する対処策を紹介
※具体的な話が多い
1. 依存関係を排除する方法
依存関係を排除...
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. 呼び出しの抽出とオーバ...
10
ソフトウェアの変更(第二部)
Shumpei Hozumi
開発現場でこんなこと起きていませんか?
1. 時間がないのに変更しなければなりません
2. 変更する必要がありますが、どのメソッドをテストすれば
よいのでしょうか?
3. 検出で...
11
時間がないのに変更しなければいけません
Shumpei Hozumi
1. スプラウト手法
全く新しいコードを書くことで変更に対処する。
テストは新しいコードに対してのみ記述する。
メソッド () {
…
}
クラス
メソッド () {
...
12
変更する必要がありますが、
どのメソッドをテストすればよいのでしょうか?
Shumpei Hozumi
1. 影響スケッチ
メソッドの呼び出しや変数へのアクセス関係を図に書いてみる
影響の伝播のチェック方法
1. 呼び出し側によって使われ...
13
検出できない副作用があります
Shumpei Hozumi
1. クエリーメソッドを追加する
クエリーメソッド:副作用のない値を返すメソッド (getter)
コマンド:副作用のみで値を返さないメソッド (setter)
14
感想
Shumpei Hozumi
1. 良い点
1. 具体的な事象が書かれているので想像しやすい
2. TDD,DRY原則,単一責務など重要な概念がけっこう出てくる
初学者には良いと思う。ただし、そんなに深堀りはしていない。
3. 心構...
15
感想
Shumpei Hozumi
おすすめの方法
以下のサイトにわかりやすい言葉かつ、読みやすい構成でまと
められているので、読むならこちらがおすすめ。
http://d.hatena.ne.jp/asakichy/20130401/1...
Upcoming SlideShare
Loading in …5
×

レガシコード改善ガイド

3,503 views

Published on

レガシーコード改善ガイドを読んだ感想

Published in: Technology
  • Be the first to comment

レガシコード改善ガイド

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

×