Sunday, December 9, 2007

33.PrimeDirectivesRedux

The Three Prime Directives discussed throughout this semester are defined Here.

To summarize, they are
1. The system successfully accomplishes a useful task. (Is it useful?)
2. An external user can successfully install and use the system. (Is it usable?)
3. An external developer can successfully understand and enhance the system. (Is it enhanceable?)

For each software engineering tool or method we have used or discussed this semester, I will briefly outline how it pertains to these directives (if at all). Rather than specifically describing each tool, I will explain how each type of tool affects the Three Prime Directives.


1. Interactive Development Environments (Eclipse, VisualStudio, etc.)
Interactive Development Environments (IDEs) describe a huge variety of tools used by many types of software developers. They range from complete, contained tool kits to only slightly enhanced text editors. The goal of IDEs is to enable more efficient and correct programming.
IDEs do not directly affect any of the Three Prime Directives. Most of the tools provided IDEs do not affect the directives at all. Only the third directive could potentially be affected by the use of these tool kits. If the user uses a specific, defined set of tools, it could enable a developer to more easily recreate the original development environment. Use of the same development environment could make it easier for a developer to read, understand, and improve or maintain the system.
An example of a powerful development tool provided by most IDEs is colorized keywords for a specific language. Eclipse provides this tool and it can make reading the code much easier.


2. Coding Standards and Coding Standards Compliance Tools (Checkstyle, etc.)
Coding standards provide clearly defined standards for code style. While style may not directly affect the system itself, it greatly affects the readability of the code. Coding standards compliance tools enable the system developer to ensure all of the code complies with a defined standard.
Since the style of the code is not seen by the user, the first two Prime Directives do not affected by coding standards. However, following coding standards can greatly improve the readability of the code. Therefore, it can make the final system much easier to enhance and maintain, even by the original developer.
Checkstyle, the Java coding standards tool used this semester, provides clear errors when the specified coding standards are not met. It ensures the code is more easily readable and all members of a software team follow the same standards of code.


3. Build Systems (Ant, Make, etc.)
Build systems provide configuration and automation for any or all steps of building of a system. They directly affect every Prime Directive because of the importance of configuration. Many systems must be built first to run on the system. Build systems provide a simple procedure to build, install, or run a system. Without this procedure, configuration can be very difficult and time-consuming for a user or developer.
Make is a very popular and heavily used build system. It allows a developer to create a file that will compile, install, or perform many other tasks automatically. When a user or developer downloads a system, they can simple type "make", rather than having to follow a complex series of instructions.


4. Automated Quality Assurance Tools (PMD and FindBugs, etc.)
Automated quality assurance tools are a family of tools that provide automated, standardized tests that can be run on a developing or completed system. Many of these tools parse the code directly to try and detect certain types of errors. While many developers do not use these types of tools, they can affect the second two Prime Directives by improving the quality of the system. A system with less bugs will be a system that is more usable and and easier to enhance.
The Java tools we used this semester (PMD and FindBugs), while sometimes annoying and difficult to satisfy, was useful at times. It would occasionally reveal bugs that would have been problematic.


5. Black and White Box Testing
Testing is a very important phase in the development of any system. Black box testing focuses on the overall behavior of the system (or components), while white box testing is concerned with details of the code itself. Both of these systems can improve the quality of the system. As mentioned earlier, system quality affects Prime Directives two and three. In addition, black box testing can increase usefulness of the system (Prime Directive 1) by revealing requirements and desired behavior of the system.
For most of the software I created this semester, I used both of these testing techniques. I created many "use case" types of tests for black box testing. These tests performed certain actions a user may take and test the outcome. I also used the tool EMMA to test code coverage of white box testing.


6. Automated Testing Tools (JUnit, HttpUnit, etc.)
Automated testing tools provide a simple and routine way of testing the system. Like previously discussed, this can increase the overall quality of the system, thereby increasing the ability to achieve the Three Prime Directives. For the Java software I created this semester, I used JUNIT to run tests on the system. It was a very useful and powerful tool that made the testing process simple and straightforward. It also made it easy to test components during development, allowing test-driven design.


7. Configuration Management (CVS, SVN, etc.)
Configuration management tools are essential for any software project with more than one member (and very useful for every project). CM tools provide a safe and effective way of managing, tracking, and documenting changes to the system. In addition to making development much easier and smoother, it also improves the quality of the system (thereby affecting the Three Prime Directives). The documentation and tracking of changes and versions also makes it easier for developers to enhance and change the system.
I used SVN this semester and found it rather useful. It took some learning to be able to quickly and easily work with SVN, but once I was comfortable with it I found it very useful. It made working with group members easier and allowed for easy version control and documentation.


8. Issue Driven Project Management
Issue driven management is a process of dividing the tasks of development into issues and working on individual issues at a time. While it could be argued that it increase overall system quality, this method of development does not, necessarily, help the system to satisfy the Three Prime Directives. Use of this type of organization is not essential to a system, though for some projects it can be a very useful documentation and communication tool. If used correctly, the documentation it provides can be useful for developers enhancing the system.
I found the Google project hosting issue tracker to be a useful tool when I was working in groups. It provided a method of task division that aided group work. I do not, however, think it directly affected the Three Prime Directives in my experience.


9. Use Cases
Use cases are a powerful tool for requirements definition, elicitation, and testing. Since use cases are directly concerned with the users and requirements of the system, they play a large role in satisfying Prime Directive 1 ("is the system useful?"). With proper use case definition, one can make sure the system meets the needs of the users and provides clear use. In addition, it can improve the overall quality of the system through better black box testing and acceptance testing.
I used a form of use cases in my black box testing for many projects. With the use of JUNIT and HTTPUNIT, I tested specific behavior of a user to guarantee the system met the users needs.


10. Software Review
Software review involves having a third party review and test a system. This is the only real way to be sure the system meets the Prime Directives. No developer testing or tools can guarantee the system meets the Prime Directives. Having a third party install, run, and test the system can directly make sure the Prime Directives are met (at least 2 and 3).
We were asked to have other groups test our software several times throughout this semester. I found their review and feedback useful, especially the bug description and testing review.


11. Agile Methods (XP, Scrum, etc.)
Agile methods are techniques of a specific family of software development models. They stress simplicity, rapid releases, close interaction with users, and other techniques. This style of software development is not essential, and is more of a project management choice. It is a debate as to how this affects the Three Prime Directives, as there are many other software development models that can be used. For example, the spiral model or waterfall model may be more appropriate for certain projects.


12. Open Source Licenses (GPL, CPL, etc.)
There are many different open source licenses, but they all share the goal of making source code available. Projects that are open source tend to be community types of projects that have many people working on them. This type of development environment can produce high quality products in a short time.
The use of open source licenses (when paired with community support and communication) can also guarantee satisfaction of the Three Prime Directives. The first Prime Directive is met because the community would not work on a system that is not useful. With so many people installing running, and working on the system, it is guaranteed to be usable (Prime Directive 2). Finally, with so many developers, there has to be extensive documentation and methods to enhance the system (Prime Directive 3).
A prime example of the power of open source licenses is the development of the Linux operating system. This open source system is considered by many to be superior to other, proprietary systems such as Windows.


13. Online Hosting Services (Google Project Hosting, SourceForge, etc.)
There are many online hosting services available on the Internet today. They provide easy access to source code, documentation, and binaries. Making a system more widely available along with its documentation and use/development guides helps the system meet all three Prime Directives. More people will use the system, it will be easier to obtain and install, and the resources will be available to users and developers.
I used Google project hosting this semester and found it a easy to use tool for uploading of project material.


Summary
All of the tools and methods we have been introduced to this semester help in the developing of a system that meets the Three Prime Directives. There is no one tool that will solve all the problems of software development, but many can help. With the right tools and methods, the development of a useful, usable, and enhanceable system is possible.