Transforming the software engineering paradigm with synthesis
Synthesis has long been regarded by researchers and computer science experts as the “holy grail” of software engineering. Yet, most practitioners have never even heard the word. Roughly speaking, synthesis (in the context of software) is the problem of creating a correct executable software application directly from requirements. In the purest sense, it means that no human intervention is ever required at any stage of the process and that the resulting software is correct in the sense that it satisfies the requirements.
Requirements therefore stand at the heart of this problem. Good requirements should be easy to understand and work with, but must also be formal—a quality lacking of many mainstream modeling languages such as UML. They should not only state what the software should do, but also what it shouldn’t do. Open synthesis requires external behaviors to be taken into consideration, such as those produced by users, hardware, and other actors beyond the control of the software. Synthesis algorithms first determine whether it’s even possible to satisfy the requirements. If so, at least one solution satisfying the requirements is constructed.
This vision, once a dream, has already become reality at least for certain software domains. For some time, there have existed many so-called code generation tools that claim to “synthesize” software, but they actually only generate parts of an application, sometimes only with skeleton code, and no correctness guarantee exists. While correctness may seem like an obvious requirement not worth much attention, it actually means the difference between software with or without bugs. In a world where users have almost come to expect periodic bugs and failure, any variation from this norm could very well be considered a breakthrough. For software producers, it could mean keeping software development efforts on shore at far less cost than before.
Synthesis is yet another active research area of Prolifogy experts. It is a difficult problem to solve efficiently, and it’s known to be unsolvable in the general case. However, there has been some success applying synthesis techniques to applications with certain well-understood behaviors. Prolifogy has been working with clients to put synthesis research to use in real-life applications. Forward-minded software practitioners who are interested in learning more about the state-of-the-art in synthesis should call Prolifogy toll-free at 855-PROLIFOGY (855-776-5436).