There are two software projects that have had huge influence on the
quality of free software, and I wanted to mention both in case someone
do not yet know them.
The first one is valgrind, a
tool to detect and expose errors in the memory handling of programs.
It is easy to use, all one need to do is to run 'valgrind program',
and it will report any problems on stdout. It is even better if the
program include debug information. With debug information, it is able
to report the source file name and line number where the problem
occurs. It can report things like 'reading past memory block in file
X line N, the memory block was allocated in file Y, line M', and
'using uninitialised value in control logic'. This tool has made it
trivial to investigate reproducible crash bugs in programs, and have
reduced the number of this kind of bugs in free software a lot.
The second one is
Coverity which is
a source code checker. It is able to process the source of a program
and find problems in the logic without running the program. It
started out as the Stanford Checker and became well known when it was
used to find bugs in the Linux kernel. It is now a commercial tool
and the company behind it is running
a community service for the
free software community, where a lot of free software projects get
their source checked for free. Several thousand defects have been
found and fixed so far. It can find errors like 'lock L taken in file
X line N is never released if exiting in line M', or 'the code in file
Y lines O to P can never be executed'. The projects included in the
community service project have managed to get rid of a lot of
reliability problems thanks to Coverity.
I believe tools like this, that are able to automatically find
errors in the source, are vital to improve the quality of software and
make sure we can get rid of the crashing and failing software we are
surrounded by today.