However, if you don't specify any, these are the ones I will use.
They aren't the latest, greatest, "silver-bullet that will solve all the problems of software engineering and also cure the common cold" development environment, but they work well together and the final result can be exported to any development environment you wish.
- Aegis is my configuration manager. It allows me to keep different projects completely separate, it keeps concurrent development streams within a project separate, requires that I create a regression test for every change I make to the project and ensures that the baseline, the deliverable, passes all those tests. The regression tests are part of the deliverable. Here is the official Aegis site.
- Jam is my preferred build tool. It is rule-based, like Make, but the rules are named rather than deduced from patterns on file names. It is simpler to use than Make, partly because it does not require dependencies for the intermediate files of a build and partly because it doesn't need include dependencies, it can work those out for itself. It fits in very well with Aegis. You can find out more about jam from here.
- Literate Programming is my programming style. Using literate programming I can write the documentation of the detailed design. The deliverable source code is generated automatically from the documentation, with cross-references in the code back to the documentation. This means that the documentation is always up-to-date and always refers to the delivered code. A copy of the documentation (in PDF) is part of the delivery. Hyperlinks in the documentation allow for efficient on-line navigation. The Wikipedia article on Literate Programming is here and an example illustrating it is here.
- Z is the specification language I use. You will want me to use this in projects where due diligence is required, such as safety critical software. Even if you do not require it, I often use it to make sure I understand your requirements and to guide the development and testing. For more see here. I am developing my own tool (Vimes) to check specifications.
- LaTeX is the documentation tool I use. It is a structured document processor which allows me to concentrate on the content of documents as distinct from a WYSIWYG word processor that requires me to concentrate on the appearance. This is especially advantageous where the documentation of a project may run into many hundreds of pages. The final documents produced are in the industry standard PDF format. There is an enormous amount of material about LaTeX. Start with the Wikipedia entry.
- Vimes is a tool I am developing myself, using all the tools above. You can download it from here and judge for yourself how well these tools work.