Finding faults in multi-threaded programs

Cyrille Valentin Artho · 2001

Multi-threaded programming creates the fundamental problem that the execution of a program is no longer deterministic, because the thread schedule is not controlled by the application. This causes traditional testing methods to be rather ineffective. Trilogy, producing many multi-threaded server programs, also has to deal with the limitations of regression testing. New approaches to this problem – static and extended dynamic checking – promise to ameliorate the situation. Many tools are in development that try to find faults in multi-threaded programs in new ways. The first part of this report describes a detailed evaluation of a wide variety of dynamic and static checkers. That comparison always had the applicability to industrial software in mind. While none of the checking tools was a clear winner, certain tools are more useful in practice than others. Because simple cases are the most common ones in practice, the decision was made to extend Jlint, a simple, fast static Java program checker. The new Jlint can now also check for deadlocks insynchronized blocks in Java, which results in improved faultfinding capabilities. The extensions and their usefulness in an industrial environment are described in the second part of the report. Jlint has been applied to many core packages of Trilogy, and also a few other software packages, and shown various degrees of success.

Read the paper · More papers on PaperTik