ざっくり読んだ。

本書は、システム保守の現場でありがちな、構造が複雑で理解できないようなコードに対する分析手法・対処手法について解説します。つまり、「コードを理解し、テストできるようにし、リファクタリングを可能にし、機能を追加できるテクニックを紹介している書籍です。

本書には、以下のことが記載されています。
●仕様が分からないコードの分析方法
●仕様が分からないコードの修正方法、またテストコードの追加方法
●コードの修正で、疎結合な設計に部分的に改善する方法

また、本書には、以下のことは記載されていません。
●COBOLなどで記述されているメインフレーム上のアプリケーションの改修方法

対象読者
●現行のシステムが仕様が分からず保守作業に悩む、保守担当者
●現行のシステムの修正作業は可能であるもののデグレーションに悩む、保守担当者
●疎結合な設計手法を知りたい技術者

本書はJava、C、C++でサンプルを記述していますが、記載されているテクニックは言語依存するものではないため、他の言語(Delphi、Visual Basic、COBOL、FORTRAN)でも使えます。

レガシーコード改善ガイド - 翔泳社の本

興味深いところをいくつかピックアップしておく。

テストが大事、みたいな話が延々と続くのかと思ったけど、そうでもなかった。

レガシーコード改善ガイド 保守開発のためのリファクタリング Working Effectively with Legacy Code

あれこれとリファクタリングのテクニックが載っていて楽しい。

レガシーコード改善ガイド 保守開発のためのリファクタリング Working Effectively with Legacy Code

偽装オブジェクト fake object

レガシーコード改善ガイド 保守開発のためのリファクタリング Working Effectively with Legacy Code

処理を別のクラスに移動して、インターフェースの抽出。

レガシーコード改善ガイド 保守開発のためのリファクタリング Working Effectively with Legacy Code

接合部 seam

レガシーコード改善ガイド 保守開発のためのリファクタリング Working Effectively with Legacy Code

オブジェクト接合部 object seam

レガシーコード改善ガイド 保守開発のためのリファクタリング Working Effectively with Legacy Code

呼び出し側を変更せずに、呼び出されるメソッドを変更する。動的束縛。依存関係を排除。

レガシーコード改善ガイド 保守開発のためのリファクタリング Working Effectively with Legacy Code

スプラウトメソッド sprout method。古いコードを放置したまま、新しいメソッドを追加する。

レガシーコード改善ガイド 保守開発のためのリファクタリング Working Effectively with Legacy Code

スプラウトクラス sprout class

レガシーコード改善ガイド 保守開発のためのリファクタリング Working Effectively with Legacy Code

ラップメソッド wrap method

レガシーコード改善ガイド 保守開発のためのリファクタリング Working Effectively with Legacy Code

古いコードを別のメソッドに移して、元のメソッドから呼び出す。

レガシーコード改善ガイド 保守開発のためのリファクタリング Working Effectively with Legacy Code

モックオブジェクト mock object

レガシーコード改善ガイド 保守開発のためのリファクタリング Working Effectively with Legacy Code

テストハーネス。

レガシーコード改善ガイド 保守開発のためのリファクタリング Working Effectively with Legacy Code

「変更できるほど十分に私はコードを理解していません」

レガシーコード改善ガイド 保守開発のためのリファクタリング Working Effectively with Legacy Code

レガシーコード改善ガイド 保守開発のためのリファクタリング Working Effectively with Legacy Code

「モンスターメソッドを変更する必要がありますが、テストを書くことができません」

レガシーコード改善ガイド 保守開発のためのリファクタリング Working Effectively with Legacy Code

リファクタリングツールでモンスターに立ち向かう。

レガシーコード改善ガイド 保守開発のためのリファクタリング Working Effectively with Legacy Code

レガシーコード改善ガイド 保守開発のためのリファクタリング Working Effectively with Legacy Code

理解できている部分、小さい範囲を抽出。

レガシーコード改善ガイド 保守開発のためのリファクタリング Working Effectively with Legacy Code

検出用変数の導入。

レガシーコード改善ガイド 保守開発のためのリファクタリング Working Effectively with Legacy Code

骨組みメソッド。条件部分と処理部分を分けて2つのメソッドに抽出する。

レガシーコード改善ガイド 保守開発のためのリファクタリング Working Effectively with Legacy Code

依存関係を排除する。Martin Fowler「リファクタリング」に記載されている手法。

レガシーコード改善ガイド 保守開発のためのリファクタリング Working Effectively with Legacy Code

レガシーコードで成功する鍵は、やりがいを見出すこと。隣の新規開発の芝はそれほど青くない。

レガシーコード改善ガイド 保守開発のためのリファクタリング Working Effectively with Legacy Code

各章のタイトルが楽しいので、いくつかピックアップしておく。

・時間がないのに変更しなければなりません
・いつまで経っても変更作業が終わりません
・ライブラリへの依存で身動きが取れません
・私のアプリケーションには構造がありません
・このクラスは大きすぎて、もうこれ以上大きくしたくありません
・もうウンザリです。何も改善できません

目から汗が出そうなタイトルばかり(;´Д`)

本書は、システム保守の現場でありがちな、構造が複雑で理解できないようなコードに対する分析手法・対処方法について解説します。つまり、コードを理解し、テストできるようにし、リファクタリングを可能にし、機能を追加できるテクニックを紹介しています。レガシーコードとは、メインフレームのアプリケーションのことではなく、変更することが困難なコードを指しています。著者は、本書で「私にとって、テストがないコードはレガシーコードだ」「テストコードがあれば振舞いを変えても、すばやく変更、確認することができる。もし、テストコードがなければ振舞いを変更しても、それが正しいのか、悪いのか判断できない」「ソースコードがきれいで、良い構造であれば十分か?そうではない。もし、テストコードなしで大幅な修正を加えるとしたら、信じられないほどのスキルと明確な理解が必要になる」と述べています。本書はJava、C、C++でサンプルを記述していますが、記載されているテクニックは言語依存するものではないため、他の言語(Delphi、Visual Basic、COBOL、FORTRAN)でも使えます。

Amazon.co.jp: レガシーコード改善ガイド (Object Oriented SELECTION): マイケル・C・フェザーズ, ウルシステムズ株式会社, 平澤 章, 越智 典子, 稲葉 信之, 田村 友彦, 小堀 真義: 本

tags: book

Posted by NI-Lab. (@nilab)