ざっくり読んだ。
本書は、システム保守の現場でありがちな、構造が複雑で理解できないようなコードに対する分析手法・対処手法について解説します。つまり、「コードを理解し、テストできるようにし、リファクタリングを可能にし、機能を追加できるテクニックを紹介している書籍です。
本書には、以下のことが記載されています。
●仕様が分からないコードの分析方法
●仕様が分からないコードの修正方法、またテストコードの追加方法
●コードの修正で、疎結合な設計に部分的に改善する方法
また、本書には、以下のことは記載されていません。
●COBOLなどで記述されているメインフレーム上のアプリケーションの改修方法
対象読者
●現行のシステムが仕様が分からず保守作業に悩む、保守担当者
●現行のシステムの修正作業は可能であるもののデグレーションに悩む、保守担当者
●疎結合な設計手法を知りたい技術者
本書はJava、C、C++でサンプルを記述していますが、記載されているテクニックは言語依存するものではないため、他の言語(Delphi、Visual Basic、COBOL、FORTRAN)でも使えます。
レガシーコード改善ガイド - 翔泳社の本
興味深いところをいくつかピックアップしておく。
テストが大事、みたいな話が延々と続くのかと思ったけど、そうでもなかった。
あれこれとリファクタリングのテクニックが載っていて楽しい。
偽装オブジェクト fake object
処理を別のクラスに移動して、インターフェースの抽出。
接合部 seam
オブジェクト接合部 object seam
呼び出し側を変更せずに、呼び出されるメソッドを変更する。動的束縛。依存関係を排除。
スプラウトメソッド sprout method。古いコードを放置したまま、新しいメソッドを追加する。
スプラウトクラス sprout class
ラップメソッド wrap method
古いコードを別のメソッドに移して、元のメソッドから呼び出す。
モックオブジェクト mock object
テストハーネス。
「変更できるほど十分に私はコードを理解していません」
「モンスターメソッドを変更する必要がありますが、テストを書くことができません」
リファクタリングツールでモンスターに立ち向かう。
理解できている部分、小さい範囲を抽出。
検出用変数の導入。
骨組みメソッド。条件部分と処理部分を分けて2つのメソッドに抽出する。
依存関係を排除する。Martin Fowler「リファクタリング」に記載されている手法。
レガシーコードで成功する鍵は、やりがいを見出すこと。隣の新規開発の芝はそれほど青くない。
各章のタイトルが楽しいので、いくつかピックアップしておく。
・時間がないのに変更しなければなりません
・いつまで経っても変更作業が終わりません
・ライブラリへの依存で身動きが取れません
・私のアプリケーションには構造がありません
・このクラスは大きすぎて、もうこれ以上大きくしたくありません
・もうウンザリです。何も改善できません
目から汗が出そうなタイトルばかり(;´Д`)
本書は、システム保守の現場でありがちな、構造が複雑で理解できないようなコードに対する分析手法・対処方法について解説します。つまり、コードを理解し、テストできるようにし、リファクタリングを可能にし、機能を追加できるテクニックを紹介しています。レガシーコードとは、メインフレームのアプリケーションのことではなく、変更することが困難なコードを指しています。著者は、本書で「私にとって、テストがないコードはレガシーコードだ」「テストコードがあれば振舞いを変えても、すばやく変更、確認することができる。もし、テストコードがなければ振舞いを変更しても、それが正しいのか、悪いのか判断できない」「ソースコードがきれいで、良い構造であれば十分か?そうではない。もし、テストコードなしで大幅な修正を加えるとしたら、信じられないほどのスキルと明確な理解が必要になる」と述べています。本書はJava、C、C++でサンプルを記述していますが、記載されているテクニックは言語依存するものではないため、他の言語(Delphi、Visual Basic、COBOL、FORTRAN)でも使えます。
Amazon.co.jp: レガシーコード改善ガイド (Object Oriented SELECTION): マイケル・C・フェザーズ, ウルシステムズ株式会社, 平澤 章, 越智 典子, 稲葉 信之, 田村 友彦, 小堀 真義: 本
tags: book
Posted by NI-Lab. (@nilab)