Another vote here for "Working Effectively with Legacy Code"

On Jan 14, 2007, at 10:35 AM, Michael G Schwern wrote:


... (where's my refactoring browser!?)

  http://e-p-i-c.sourceforge.net/
Eclipse plugin for Perl. Provides "extract subroutine" using Devel::Refactor. I believe Jeff Thalhammer is working on adding perl::Critic support to EPIC as well.


At absolute minimum, with a big ball of mud, you can do dumb high level "exact input/output" tests of the sort which would normally be frowned upon.

Yes, and, you need not stop at "exact" input/output.
Putting automated end-to-end tests in place can indeed cover a good deal of the code - these would be tests that could also be called "acceptance" or "integration" tests. Using the web app example:
  - login
  - attempt login with bad credentials (should fail)
  - Add item to shopping cart.
  - Remove item from cart
Etc.
You can run many of these tests every 5 minutes all day, every day, and use them under something like Nagios or NetSaint, etc. as part of a monitoring system.

More about balls o'mud:

  - Add "seams" as described in "Working Effectively with Legacy Code."

Seams are places in the code where you can alter its behavior without editing at that place (once the seam is on.) For example, replacing an expression like ( $dollars .. $donuts ) with a subroutine call: Utils->get_range_of_items($dollars,$donuts) means you can now makes changes in get_range_of_items() which could be in a seperate (well tested) class.

Perhaps the most interesting area (to me) about balls o'mud is the question of how to decide what refactorings and improvements are worth the effort. On a big ball o' mud this is a very hard problem. It requires that one:

     1. Estimate the effort/cost of a refactoring/improvement.
and
     2. Estimate the value of a refactoring/improvement.

Since the ball o' mud is, by definition, hard to understand, these estimates are even harder than usual.



-------------------------------------------------------
Matisse Enzer <[EMAIL PROTECTED]>
http://www.matisse.net/  - http://www.eigenstate.net/



Reply via email to