Synthesis
As Prolifogy prepares to close out its second successful year, we take this opportunity to reflect upon the state of the world in software since our doors opened in January, 2010.
In the early days, developing software amounted to knowing how to write programs in a particular programming language, executing basic business logic, and carrying out largely mundane tasks such as moving information to and from a database management system or displaying data on a screen. Fast forward to today's world, where software development is far more sophisticated, dynamic, and interdisciplinary.
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.



