Book Review: Working Effectively With Legacy Code
Working Effectively with Legacy Code is
a book that should be a mandatory reading for anyone who is interested
in coding for a living. I don't deal with many legacy systems at the
present (except for NQA, of course :-) ) and still this book has
been a fountain of knowledge about techniques, tips and tricks.
This is not a book about pretty code, it's a book about ugly code and
all the myrad ways you can abuse design pricipals and good coding
practices. What it does is show a set to systematically take a legacy
code* and break down the dependencies so you can write tests for the
code. The moment you've tests, you can move forward. Until you've
tests, you're in a position where all you can do is "Edit & Pray"
or... you can write tests.
I've had recent experiance with
developing applications in a TDD from the start (Rhino Mocks) and
converting a legacy application to TDD (NQA). I can't rave enough about
how much easier it is to make a change in Rhino Mocks because of those
tests. When I adapted Rhino Mocks to run on .Net 2.0 I'd broken just
about every part of the application because I didn't consider what the
change from Hashtable to Dictionary<T> would do when there is no
item in the dictionary. Because I'd tests, it was literaly the work of
a minute to find the problem and fix it.
One thing to note about this book, it took me over two months to read it. Like Xp Explained 2nd Ed. I
just can't seem to read it for any length of time without starting to
feel a sudden need to code something. Very productive for my projects,
less so for my reading backlog.
* Legacy Code == Code without tests.