Best Tools for Software Maintenance Engineering

Just like eating the elephant - one bite at a time :)

Sometimes the big picture can be a real demotivator, and you need to pick a spot and tackle it piece by piece.

Of course, you still need to choose the bit to start on. Typically this is driven mostly by the users/business with top priority specific changes required (yesterday) but if you have a little flexibility or familiarization time, metrics are often useful. Tools here vary with the technology and language, but tools like NDepend and JDepend, any built in Code Metrics (like in in Visual Studio Team System, or the various available Eclipse plugins) or a tool like Simian to get a feel for the size of the copy and paste problem.

Hopefully the number of unit tests and coverage is greater than zero, and so a good first step is to always get whatever tests you can running in a Continuous Integration environment, as a foundation for adding more tests as you learn.

And as others have said - assuming options are available for the language - a good IDE with code navigation and automated refactoring is a must (Eclipse, Visual Studio with or without ReSharper).

A couple of morale-boosting books:

Good luck :)


One of the best tools in the .Net space is ReSharper. This tool has saved me time in all aspects of the development life-cycle. They have also helped me survive while joining undocumented project/solutions.

  • Code Refactoring
  • Code Navigation
  • Code Analysis

These are some of the many features which help one perform time consuming tasks.


Code search engines can help you find you way around a huge source base.

A language-sensitive source code search engine can be found at SD Source Code Search Engine. It can handle many languages at the same time. Searches can be performed for patterns in a specific language, or patterns across languages (such as "find identifiers involving TAX"). By being sensitive to language tokens, the number of false positives is reduced, saving time for the user. It understands C, C++, C#, COBOL, Java, ECMAScript, Java, XML, Verilog, VHDL and a number of other languages.

(I'm the tool architect)