[書評]レガシーコード改善ガイド

https://www.amazon.co.jp/dp/4798116831/

始めに

 本書ではレガシーコードをテストがないコードと定義しています。コードの綺麗さ、オブジェクト指向か、カプセル化されているかなどは関係ありません。何故なら、ソフトウェアは変更されるものであり、テストがない限り変更が正しく行われたかどうかはわからないからです。
 これは綺麗なコードや優れた設計は価値がないということはなく、むしろ有益です。しかし、大規模な変更をするときはそれだけでは不十分で、より安全で安心な変更をするために必要だということで、このような定義をしています。

第1部

 ここでは主にソフトウェアの変更に置ける問題点を、テストでどのように解決するかを述べています。例えば単体テストがあり、それを動かしながら修正をすることで、フィードバックを受けながら作業を進めることができます。リファクタリングがうまくいっていることができます。テストが失敗すると、エラーの箇所の特定が早く行えます。
 また、レガシーコードを扱うためのツールの紹介や、レガシーコードにテストを入れるとき、どのように見るべきについて述べています。

第2部

 実際にレガシーコードを変更するときに起こりうる様々な問題に対する対処法が多く書かれています。例えば、
・時間がないのに変更しなければならない
・いつまでも変更が終わらない
・何をテストすればいいかわからない
・クラスが大きすぎる
・同じコードをいろんなところで変更している
・何も改善できない
などなどです。

第3部

 ここでは依存関係を排除する手法についてを紹介しています。通常のリファクタリングと違うのは、テストがないコードにテストを整備することを目的にしていることです。紹介されている手法は、
・パラメータの適合
・メソッドオブジェクトの取り出し
・グローバル参照のカプセル化
などです。これらの手法の中に、カプセル化に反するものもあるため、二の足を踏む人もいるかもしれませんが、提案手法を適用して保守性をあげた上で、再度リファクタリングを行えば、設計を綺麗にすることもできます。

まとめ

 レガシーコードの定義が厳しく思いましたが、読み進めていくと、うなづける点が多くありました。特に、テストを動かすことで、フィードバックを受けながら作業をするのは心理的安全を得ることに効果があるように感じました。

この記事が気に入ったらサポートをしてみませんか?