On 9-May-06, at 3:19 PM, Nuralanur / aol.com wrote:

>> Heh.  Recently a 4,500 line method caught my eye at work.  I  ignored
>> the advice to wait until it was >5,000 lines before  refactoring :-)
>
> Can you say what that method was doing ?

Hmmm.  Mustn't give too much away here.

There is a huge pool of data from multiple sources from the past 10  
years or so.  For each source there are one or two times per day  
where the data is analysed in a particular way, and the algorithm  
varies between sources, and it varies over time for a particular  
source.  Sometimes the only changes over time are the start & end  
times of the period of interest, sometimes the algorithm changes.

Now imagine code like:

   if ($source eq 'foo') {
     if ($event == 1) {
       $param1 = 'xxx';
       $param2 = 'yyy';
       if ($date <= ...) {
         $start_time = 'xxa';
         $finish_time = 'yyb';
       }
     }
     elsif ($event == 2) {
       ...
     }

     # 20 lines of database connect + calculation yielding $result
   }
   elsif ($source eq 'bar' or $source eq 'baz') {
     if ($event == 1) {
       $param1 = 'aaa';
       $param2 = 'bbb';
       if ($date < ... && $date >= ... and $source = 'bar')
         $param1 = 'ddd';
       }

       # 20 slightly different lines of database connect + calculation
       # yielding $result
     }
     elsif ($event == 2) {
       # as above, with minor variations
     }
   }
   ...
   else {
     die "can't handle source "$source"\n";
   }

Now imagine that the way cases were added were by the tried & tested  
cut & paste method.  Each stanza was about 100 .. 150 lines of code  
which had been copied and modified by different people over the past  
few years.

Does that give you an idea of what was going on?

My attack was to make a table of sources, date ranges, and period of  
inerest which gave you the correct values ofr $param1 and $param2 and  
the name of a method to call calculate the result.  Now I have  
reasonable sized routines to start tearing the common bits out of,  
but that's for another day.

Mike

-- 

Mike Stok <mike / stok.ca>
http://www.stok.ca/~mike/

The "`Stok' disclaimers" apply.