Program synthesis is an automated technique to infer programs in a domain-specific programming language (DSL) as per a specification provided by the user. Synthesis techniques typically generate a set of candidate programs by searching the program space for programs that satisfy the given specification and selects the best program among the candidates based on an optimization criterion. If the specification is complete, then the generated program is exact. However, if the specification is partial such as input/output examples, the users may get a desirable program after a few iterations by refining the specifications and re-synthesizing the program.
Program synthesis has been successfully applied to automate data wrangling tasks such data extraction, transformation, cleansing, and software engineering tasks such as inferring program invariants, program and database refactoring, program repair etc.
However, building a synthesizer requires identifying a suitable specification mechanism, a DSL to restrict the program search space, the program search algorithm, and an ambiguity resolution procedure to select an optimal program from the candidates. Hence designing and developing a synthesizer is a non-trivial activity without the help of a suitable tool set and expert knowledge. As a result, it is yet to become a mainstream technique for software construction and maintenance.
The objective of this workshop is to address the key issues in the application of program synthesis techniques and tools to solve software engineering tasks by software practitioners.