Monday, December 10, 2007

PrimeDirectivesRedux

In this entry I will talk about how the following tools and techniques support one or more of the Three Prime Directives.

1. Interactive Development Environments (Eclipse, VisualStudio, etc.)
It support PD 3 by providing great help in developing. Good IDE can provide much more than a text editor. It can not only compile and debug programs, but also give out useful analysis such as package tree, class outline and documentation of classes and methods. Some of them can even provide useful auto edit function, such as refactor in Eclipse.

2. Coding Standards and Coding Standards Compliance Tools (Checkstyle, etc.)
It supports PD 3 by greatly increasing the codes' readability, thus helps developer to understand the program better. When all variables are given with meaningful name, developers will be able to read the code just as a article.

3. Build Systems (Ant, Make, etc.)
It supports PD 2 & 3. As a automatic mechanism, it hides many specified detail in building process that user could just type some simple commands to build up the whole system. To the developer, facilitate the building process is also helpful. And as build systems are IDE-dependent, it enable developer to choose whatever he like to develop.

4. Automated Quality Assurance Tools (PMD and FindBugs, etc.)
It support PD 3 by ensuring a better code quality. These tools could help clean many implicit bugs and ensure some more reasonable coding style, which may be more close to programmers' common sense. A system with fewer bugs are surely more friendly to developers.

5. Black and White Box Testing
Testing supports PD 1. It guarantees the correctness of the system so that it can run as expected and accomplishes the tasks successfully.

6. Automated Testing Tools (JUnit, HttpUnit, etc.)
This supports PD 3 by providing a automatic checking mechanism to make sure what the develop modified is proper. If the unit tests fails after some hacking, developer will immediately acknowledge that some hacking mush be wrong and therefore bugs can be fixed cheaper.

7. Configuration Management (CVS, SVN, etc.)
It supports PD 2 & 3. Users can easily check out the system from a repository and, with a well developed build system, build the system for use. Developer gain more benefit from CM system that it facilitates collaborating development. It tracks down the system's configuration all through its life-time so that errors introduced in some versions are more easier to found and fix or recover.

8. Issue Driven Project Management
It supports PD 3 by providing useful guide line for new developers that what is deficient right now in the system so that they will have better idea of what to do to contribute to the development.

9. Use Cases
It supports PD 1. Using use cases, developers can better understand what users expect and therefore build the system that way. Developers can have better communication with users with use cases and let users know what the system will be and properly do some changing, even before the system is built.

10. Software Review
It supports all 3 PDs. It provide another way to test all the 3 prime directives. Developers could get more feedback as an external user or developer so that they can do a better job to perfect the system.

11. Agile Methods (XP, Scrum, etc.)
It supports all 3 PDs. With better communication with customers, developers are able to ensure what they building can really satisfy users need. New developers will find it helpful to attend daily meeting to gain some general idea of development process. And simplicity also make it easier to understand and maintain.

12. Open Source Licenses (GPL, CPL, etc.)
It does not support prime directives directly. But it may have some contribution to PD 3 because new developer may feel easier to continue a software with proper license that he will not need to worry about legal responsibility in copyright to the original developer.

13. Online Hosting Services (Google Project Hosting, SourceForge, etc.)
It supports PD 3. Online Hosting Services provide developers a great place to share developing source, including codes and other materials. With CM tools, developers can easily check out others work and submit his to keep codes up to date. That much accelerate the development process.