In the formal-methods research community, there seems to be a trend away from general methods and tools--those that are supposed to apply equally well to all software. The trend is toward methods and tools that address the particular characteristics and problems of specific application domains.
To some extent, this trend is externally imposed. These are lean times for research funding, and research with obvious practical value has a better chance of getting support. In formal-methods research, by far the easiest way to show practical value is to work on a specific application domain. Even a negative result is useful, because it shows practitioners within that application domain what not to waste their time on!
Despite the negative aspects of this motivation, the trend is good for research in formal methods. The next two subsections give two reasons why it will lead to stronger and more interesting (as well as more useful) research results.
When we compare software engineering to civil, chemical, aeronautical, nuclear, electrical, mechanical, and biomedical engineering, we can see that software engineering is the software aspect of "physical engineering" [10]. No other engineering discipline is related to so many different parts and aspects of the real world.
For the same reason that there is no major in Physical Engineering, it is unrealistic to expect that excellent software can be built for all application domains using the same tools and techniques. Application-specific research thus moves us in a more productive direction.
It is also somewhat arrogant for us to assume that it is possible to make a contribution to software development in an application domain without extensive knowledge of the nature of that application domain. A field study of the software design process [11] showed that "exceptional designers" stand out because of their domain knowledge:
One of the major unsolved problems in formal methods is the size and complexity of formal descriptions of real systems. Only three basic attacks on this problem come to mind:
These three strategies have been studied extensively. We can divide research on these strategies into two categories. The first category concerns general-purpose, technical support of the strategies. The second category concerns applying them creatively and productively to application domains.
The point of this example is that, when we look at each of the three strategies, research on technical support is much more mature than research on applications. In other words, there is much more room for innovative work on applications. Furthermore, some of the most useful and intellectually satisfying results are those in which a strategy has been applied cleverly to an application domain.
Table 1 shows examples of research topics or results in each of the six divisions, and gives an estimate of the maturity or saturation of research in that division. Maturity estimates range from 5 (very mature) to 1 (very new and open).