Vital Mission Software Pty Ltd
ACN 081 099 274

Home
Contact us
Tools

I will use whatever tools you specify to develop your code for you.
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 final result can be imported 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 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 means that I 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 PDF allow for efficient on-line navigation. The Wikipedia article on Literate Programming is here. And here is an essay on Literate Programming in which I give a short example.
  • 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.
  • 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 advantantageous 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 here.
  • Linux is the operating system I use on my own machine. Of course, but which distribution. LFS. That's Linux From Scratch. I build my entire system from the sources. My machine is a DEC (sorry, Compaq) (sorry, HP) Alpha and commecial distributions are few and ones imported into Australia are even fewer. I've done it three times. It's about three days work every couple of years, but it's worth it. I end up with a clean system that has everything I want, nothing I don't want and I can't be left in the lurch by a distributer (as has already happened). And updating individual bits between upgrades is a doddle. For more information see LFS.
  • I don't normally use Object Oriented methods. They work well if you have a complete solution to your problem before you start the implementation. However, in research projects the job is to find a solution, so you don't have the information you need until the end of the project. Of course, once you have that information, Object Oriented methods are valuable for the second version.