Some software development best practices
Software development projects vary over such a wide range of magnitudes and complexity that it is not easy to generate a list of best practices that is applicable to every project. However, there are a few practices that are nearly universal in my experience. The ones I will cover in this post are: configuration management, feature/defect tracking, and unit testing.
Configuration management
In the context of software development, configuration management means keeping track of changes to the software during development. Revision control is a subset of configuration management and is the most important part of the process. Fortunate for software developers, this is now quite a mature field, and a wealth of software programs are available to assist with configuration management. Most effective tool I have found is Subversion, an open source application that runs on Windows, Linux, and other operating systems. Subversion gives you a powerful history over changes so source files and directory structure. It is the latter functionality that really sets Subversion apart from most competitors. For Windows, there is the excellent TortoiseSVN that serves as a front-end to Subversion and integrates tightly with the Windows Explorer shell.
Feature/defect tracking
The importance for feature and defect (aka, bug) tracking should be readily apparent. At any point in time, a development team will want to know what features have been implemented or are awaiting implementation, as well as what bugs have been found and are awaiting correction. While this fields seems like such a fundamental core functionality to possess, the availability of universally good third party applications is not as good as for configuration management tools. Bugzilla is a leading open source application for defect tracking, but it is designed so specifically for bug reporting and tracking that using it for tracking new features is a little out of its scope. I have used the open source application Redmine to good effect, which provides feature tracking and more general project management functionality. Sometimes, for small projects, a custom spreadsheet is sufficient. Needless to say, it behooves the software project leader to come up with a solution for bug/feature tracking for all but the smallest projects.
Unit testing
Unit testing means writing code to automate the testing of individual components/classes in your software application. The theory is that the production and regular application of unit tests lowers the risk of hidden bugs showing up in your application. In my experience, the small extra effort required to produce and use unit tests pays off big time as the size of your project grows. It can give you great peace of mind to know that a large section of complex code is passing all of the unit tests written for it. There are various unit testing frameworks available to provide some uniformity from one project to the next and to minimize the total amount of code you need to write to implement unit tests in your project. Specific frameworks are usually specific to a language, for instance, in Java there is JUnit, in C++ there is CppUnit, in .NET there is NUnit, etc. The scripting language Ruby comes with a built in unit-testing mechanism, one of the reasons why Ruby is such a great language to program in and why its popularity is growing so quickly.
Comments
Leave a Reply


