具体的で取り組みたくなりました
★★★★☆
既存のソースコードの変更を行わなくてはならない状況で、苦労して影響調査や
テストを行っている方も多いと思います。
(慎重に取り組んでも、往々にて考慮漏れが合ったりする)
本書はそのような状況への対応方法が載っています。
まだ一部のみしか読んでいないことと、一部理解が追いつかない点がありますが
ユニットテストを行う上での「依存性を少なくすること」の重要性と一般的に
直面する難しさを説明しており、具体的な修正方法と著者の考え方が記載されて
います。
たとえば、「既存ソースの改善はあきらめて、新たに追加するコードだけテスト
可能にする」という方法や、「設計の綺麗さは少しくらい犠牲にしても、ユニット
テストが可能になることの方が重要」といった点が印象に残っています。
「部分的に」少しずつ改善していくための具体的なやり方が書かれており、ぜひ
取り組んでみたい気持ちが起きました。
また、昔のシステムだから、、、ということであきらめる必要は無いのだと改めて
感じました。
自動化テストのためのリファクタリングパターン
★★★★★
レガシーコードと聞いてイメージしたのは「仕様書も無く、設計やコーディングもメチャクチャ、おまけに当時の開発者はすでにいない。しかし重要なシステムであるためトラブル対応や改造は続けなければいけないこの上なく保守しにくい、担当者泣かせのソースコード」というものでした。しかし、本の帯にもあるように、ここでは自動化テストのないコードを「レガシーコード」と定義しています。
私がイメージしていたような「レガシーコード」には私自身、実際に泣かされることも多いため、「銀の弾丸」的なテクニックが載っていないかと期待していましたが、残念ながらこの本からはそのようなテクニックは見つかりませんでした。
この本が主にターゲットとしているのは、「ある程度オブジェクト指向設計に基づいたソースコード」です。オブジェクト指向ではコーディングされにくいVB/VBAや、JavaやC#なのに活用されている言語機能はC言語止まり、といったコードにはあまり向いていないかもしれません。
こういうケースはやはり地道に解析するしかないんですかね・・・。
とはいえ、星は5つです。
改めて自動化テストの重要性を確認する事ができましたし、テストを優先してメソッドの可視性をあえて上げる、といった発想が新鮮でした。
この本で書かれているリファクタリング技法はマーティンファウラーの「リファクタリング」と重なる部分も多いですが、それでも「テストのためのリファクタリング」という視点が新しいと思います。
そして何より「既存のコード」への対処方法をメインに扱った書籍というのは前例がないと思います。この本を読めば間違いなく、これまでにはなかったプログラムに対する新しい視点を持つ事が出来るようになるでしょう。
P.S.
保守開発に苦労している方はこちらの本も参考になるかもしれません。
=> 「派生開発」を成功させるプロセス改善の技術と極意
かなりの重要本
★★★★★
本書は以下の3点で画期的だと感じる
(1)単体テストが書かれていないコードをレガシーコードと定義したこと。
(2)単体テストがない、あるいは単体テストを書くことが一般的に困難なのが現実であると認めていること。
そしてその現実の上で何をすればいいかをメインテーマに据えていること
(3)ソフトウェアの設計において、テスト容易性は最上位級の重要な課題であると、繰り返し提示していること。
特に(1)の定義に関しては、既にアジャイルやXPのコミュニティに大きな影響を与えており、今や多数の書籍やドキュメント・講演等から原著Working Effectively with Legacy Codeが引用・紹介される状況を作り出している。個人的に、本書はソフトウェア開発史に名を残すことになる本だと感じている。
なお注意として、Cといった非OO言語に関しては、説明が少ない上、その改善アドバイスの結論に「非OO言語はどうしようもないからOO言語に乗り換えなさい」みたいな意見を載せる程度の扱いしかしていない。Cなどをメインとする開発者には、本書は部分的にしか役に立たないと思う。
ただ一方で特定の言語機能に依存する説明は避けられているので、RubyやJava、C++、C#といった一般的なOO言語を扱う開発者にとっては、特に例外なく有益な内容になると感じる。
既知の一般的な技法やパターンの紹介が内容の多くを占める、少々古い説明があるといった問題を持つものの、本書の重要度はかなり高いと感じる。
お暇があれば読んでもいいかも
★★☆☆☆
著者は冒頭で“他の言語にも適用することができます”と述べていますが、内容はJavaとC++に偏っており、他の言語への応用は難しいでしょう。Java専門プログラマ向け割り切るべきでしょう。
文章が冗長で、話が整理されておらす、状況説明も結論もおかしい。ネット上の文章をそのまま紙媒体にしたようなユルユル、ダルい文体と、紹介されたテクニックもその文体相応です。編集はちゃんと仕事したのかな。
経験豊富な人ほど読んで欲しい
★★★★★
今までに書いたコードに対してどのように「このコードにすぐに終わるテストコードを書いたらいいんだろう……」って思ったことはありませんか?
私も今まで「このコードにはサーバが絡むからどうしても×分かかる」などと思っていました。
この本では、そういったコードに対してでも「では、それをすぐに終了できるコードを書くにはどうしたらいいのか」といった、『現実を知っている』例示が多数出てきます。
このクラスの本を手にする人なら、それを容易に自分のものにできることでしょう。簡単にものにできない人でも目の前に例題があるのですから、なぜそういったコードを書く必要があるのか、そういったコードにどのような価値があるのかを気付くことができるでしょう。
この本は、新たにコードを起こす場合でも「どのような設計をしたら容易にテストが行えるコードを書けるのか」という点についてのヒントを与えてくれるでしょう。
ある程度経験を踏んだ人に対しては、様々なヒントを与えてくれる一冊だと思います。