1. Interactive Development Environments (Eclipse, VisualStudio, etc.)
For the first Prime Directive, an IDE helps to develop a system on the code level. It checks the syntax and eliminates repetitive procedures so that a developer can efficiently release a product that accomplishes a useful task. It really serves no purpose for an external user so it does nothing for the second PD but for the third PD, an IDE is great for developers because coding style can remain consistent throughout the code. It also allows an external developer to quickly make sense of the source code and efficiently edit the code because the IDE lets them develop code on an environment customized to their preference.
2. Coding Standards and Coding Standards Compliance Tools (Checkstyle, etc.)
Coding standards satisfy the first and third PD because it helps to keep code easy to read and edit. If everyone was to code in their own way, then external developers would have a difficult time making sense of the code and would waste that much time and the motivation to actually work on the code. Compliance tools help to keep code bug free and to assure that the quality of the code is at release level.
3. Build Systems (Ant, Make, etc.)
Build systems are a great tool for saving time. They basically do the job of compiling all code and keeping version control. They check to make sure that all code that has been edited is recompiled when needed and make it simple to build and pack a project. It is also helpful because different IDEs can work together on the same code. This is a great benefit to all developers old and new so it satisfies all PD. Users will most likely benefit from the fact that either the program comes packaged and ready to go or compiling the program and running it is a one step process.
4. Automated Quality Assurance Tools (PMD and FindBugs, etc.)
These tools help to keep code bug free and running smoothly. Thus they affect the first PD because those tools make sure that the task being accomplished is actually done right. External developers benefit from these tools as well because they can make sure that the code they edit is at the same level of quality and as bug free as when they started. External installers don't really benefit much other than knowing that the code works. Maybe not completely bug free but most common errors are weeded out.
5. Black and White Box Testing
Black and White Box testing help developers find bugs that might come up in their code. Black box testing try to categorize user inputs and runs tests to see if those inputs will break the system. White box testing shows developers which lines of code are executed during tests. This ensures that certain methods are called when they need to be called. This satisfies the first PD because it ensures that a task is accomplished successfully. This also satisfies the third PD because external developers can also ensure that their code is doing what they think its doing. Installers don't really worry too much but users will want a program to do what it’s supposed to do. So it satisfies all three PD.
6. Automated Testing Tools (JUnit, HttpUnit, etc.)
Automated testing tools make it easy for all developers to create tests. Tests ensure that a program works the way it is intended thus it affects all three PD. It helps to develop a quality program that will accomplish a useful task, then users can install and use a program as it is intended, lastly external developers can enhance the code and run more tests. These test show that the original functions work as well as the new functions.
7. Configuration Management (CVS, SVN, etc.)
Configuration Management helps groups of developers to work on a program without having to worry about trampling over each other’s code. These programs help to ensure that code written in one file from one developer can be merged with code that was written by another developer at the same time. Thus files can be edited without worrying about it being out of sync with the rest of the files. This helps out all developers but does little for users and installers because they will probably never use these tools.
8. Issue Driven Project Management
Issue Driven Project Management allows all the work that must be done on a program to be divide into “issues” that can be resolved to form a milestone. This helps to keep developers up to date on the difference between versions and the evolution of the program itself.
9. Use Cases
Use Cases are an example of just how the program works to accomplish a task. This sets up the design process so that developers can model the code after this case. It shows the developer how to make the code. The end result is a program that works the way is was intended leaving users satisfied.
10. Software Review
Software review helps developers look through their code and ensures that the code is following the design. It begs developers to ask other developers to look at their code so that both developers can become better developers. They can show each other how things could be implemented better or more efficiently. It also shows a developer that he can make mistakes but learn from them. This is essential for all PD because although developers are the ones carrying out this process, users benefit with a robust program.
11. Agile Methods (XP, Scrum, etc.)
The agile methods change the way code is being developed. Instead of wasting time looking and waiting for requirement, two or more programming can just get cracking on some code and incrementally build a better system. In the end, the code almost always turns out better, which also leads to happy users.
12. Open Source Licenses (GPL, CPL, etc.)
These licenses help to develop and grow the open source community by protecting what they have developed. Each license has it own set of restrictions and while some are very tight, others are very loose and viral. This helps out the whole open source community because they can step on the shoulders of giants and release ever better code. Although the whole situation can be convoluted at times, there is proof that this works. We have to look no further than Linux itself.
13. Online Hosting Services (Google Project Hosting, SourceForge, etc.)
Online hosting services help out the development community by working along with things like the open source licenses. Online hosting services makes it easy to access source code so that other developers can add to or learn from it. In the end, it helps to generate better code and program