Caution! - Many of these posts are creepy-old in the Ruby on Rails world (before 1.0!)
The :author => Charles Abbott now blogs here

Loading...

Refactoring - Vital to Software Development

2007-09-23   [ 0 comments ]

Refactoring is a process of redesign that prevents software entropy, and was first coined as a software development term during the early days of the Smalltalk community. Refactoring, in itself, is nothing amazing and in most cases happens without many software teams consciously aware they are participating.


Unfortunately, this lack of awareness is exactly the reason why it doesn’t happen as often as it should in most projects.

David Thomas and Andrew Hunt (authors of The Pragmatic Programmer) explain that software design and development is more akin to gardening then to bridge construction. This metaphorical relationship is most easily seen in the way that software design can change rapidly over time. During the development phase many parts may become unusable (“compost”) while other parts may need relocation or pruning. As designers it becomes necessary in many situations to change the structure of many inter-related programs, which is natural. Refactoring, however, is the act of consistently looking for ways to simplify the existing code even in places that it is not necessary.


Refactoring, however, is the act of consistently looking for ways to simplify (improve, clean-up...) the existing code...

Many of the Agile movements have considered refactoring as one of the most important parts of the development phase. Reasons for refactoring vary, but the most important ones focus on replacing bad design patterns. These bad designs include – code duplication (areas that violate the DRY: Don’t Repeat Yourself principle), non-orthogonal design (portions of code that are too closely coupled with other modules that could be separated), performance (although processor speeds continue to increase, true enterprise level software should not be poorly written), and outdated implementation (solving problems based on an old implementation requirement, then having patches for those outdated modules).

Refactoring requires that you take a few precautions to prevent potentially corrupting the project or removing vital functionality. Martin Fowler suggest that you never try to add new functionality and refactor at the same time. Additionally one should never begin refactoring before a thorough suite of automated tests are in place (this helps prevent an introduction of previously seen bugs).


...never try to add new functionality and refactor at the same time.

By adhering to the idea that refactoring is necessary and a perpetual step, development teams may benefit from smaller maintenance requirements. As Hunt and Thomas state “Refactor Early, Refactor Often”.

:author => "Charles Abbott"
Software Engineering
 


Frameworks Good or Bad?   :date => "2007-10-06"
Where is ForTheCode.com Going?   :date => "2007-09-23"
Refactoring - Vital to Software Development   :date => "2007-09-23"
Mongrel Cluster a quick note - and extra notes   :date => "2007-05-20"
Linux Mongrel and Rails   :date => "2007-05-15"
form_remote_tag revisited   :date => "2007-01-07"
How To: Ubuntu 6.10 Edgy on Rails part 3   :date => "2006-12-30"
How To: Ubuntu 6.10 Edgy on Rails part 2   :date => "2006-12-24"
How To: Ubuntu 6.10 Edgy on Rails   :date => "2006-12-22"
verify ... 5.times do cycle   :date => "2006-09-25"
country_select, country_options_for_select, mail_to   :date => "2006-09-05"
Generate and Send Email in Rails   :date => "2006-08-26"
FDF Model, gsub, and send_data   :date => "2006-08-18"
Active Directory Authentication with acts_as_authenticated   :date => "2006-08-17"
Apache2 proxy with Lighttpd - FastCGI for Rails   :date => "2006-08-08"
reverse! && a simple file Upload Class   :date => "2006-07-29"
send_file - a link to download a file   :date => "2006-07-24"
Environments (production, development, test) and cache_pages   :date => "2006-07-04"
.class .methods .instance_variables   :date => "2006-06-14"
select_tag :multiple => true   :date => "2006-06-01"
FileUtils, action_controller rescues   :date => "2006-05-20"
file_field_tag, File.size, File.path, FileUtils.mv   :date => "2006-05-15"
javascript_include_tag, stylesheet_link_tag   :date => "2006-05-02"
submit_to_remote, form_remote_tag, script.aculo.us   :date => "2006-04-30"
periodically_call_remote, simple_format   :date => "2006-04-26"
observe_field - Ajax!   :date => "2006-04-21"
h method, TextHelper, sanitize(), strip_tags()   :date => "2006-04-15"
Rails API :My API [.count(), link_to, text_area :size]   :date => "2006-04-13"
Rails - HTML Select Tag   :date => "2006-04-05"
Pruning Old Sessions   :date => "2006-03-21"
If Elsif Else, and Searching Too!   :date => "2006-03-17"
SHA1 - A quick update   :date => "2006-03-15"
Initialized! good, Authorized? Great! part 2   :date => "2006-03-11"
Initialized! good, Authorized? Great!   :date => "2006-03-08"
Forms and Routing in RoR   :date => "2006-03-06"
My First RoR Post !   :date => "2006-03-05"