Version Control System
A version control system provides versions of not just the software but also of all the documents. Even if a software project consists of just one person, it is always healthy to maintain a version control system. It is good to maintain versions not just for the backup but also because it is easy to revert back changes by selecting any previous version that we want. Popular version control systems are CVS, SVN, VSS. A version control system also provides a method of creating branches, so that we can have development on one branch which we set as the stable version. And we can have a bug fixing branch where we fix bugs. Later once most of the bugs are fixed, we can merge the bug fixes into the stable branch.
Unit Test Framework
Following the concept of test driven development, one part of testing which is under the control of developers is unit testing. Ideally, unit tests should be written along with (or perhaps even before) the implementation. A particular tried and tested unit testing framework such as CUnit can be used. Many of us as developers tend to ignore unit testing and are satisfied by random testing of the system that we create. This is definitely an invitation for letting off unnecessary bugs which will come back far later in the project to haunt us.
Automated Build System
It should be possible to have in addition to manual builds, an automated build system which is triggered by certain events such as nightly builds, change in critical files, etc. An automated build system can help detect a break in the system early. Reports can be generated automatically and sent to the concerned personnel by email. Automated build systems can be created using scripting languages such as perl or python.
Automated Test Framework
One of the most important tools in a software project is the automated test framework. Ideally, the automated tests should be run after every nightly build has successfully completed. As with the build, the test reports if any failure can be generated automatically and sent by email. Automated Test frameworks may be specific to projects.
Task/Defect tracking system
Most useful when the project consists of several members. More so if the members are geographically distributed. A task management system helps to assign tasks, prioritize tasks, set the percentage completed. Charts can be generated to analyse the work done in the project. Microsoft Project is an example of task management or rather project management. A defect tracking system is useful for developers and testers to report bugs, track the progress of fixing those bugs and to analyse the overall defects in the system. Bugzilla, Jira are examples of defect tracking systems.
Wiki/site
Maintain a wiki, website or blog about your project. This can contain the project milestones that are set and achieved. Also information such as project presentations can be added. This can be used not just for team clarity in project achievements but also as a front end for management whenever they need a gist or status of the project.
| > | Sends output to a named file. If file does not exist, it creates one. Overwrites existing file | command > somefile |
| >> | Appends output to contents of a named file or creates a file if none exists | command >> somefile |
| < | Uses contents of a named file as input to a command | command < somefile |
| ¦ | Sends (“pipes”) the output of command1 to the input of command2 | command1 ¦ command2 |
| & | Used to combine two commands. Executes command1 and then command2 | command1 & command2 |
| && | A conditional combination. Executes command2 if command1 completes successfully | command1 && command2 |
| ¦¦ | Command2 executes only if command1 does not complete successfully. | command1 ¦¦ command2 |
| @ | Used in batch files at the beginning of a line to turn off the display of commands | @echo off |