Computing systems, specifically software systems, are prone to vulnerabilities which can be exploited. One of the key difficulties in building trustworthy software systems - is the lack of specifications, or intended behavior, or a description of how the software system is supposed to behave. In our work, we have developed semantic analysis techniques to extract or discover specifications from an erroneous or vulnerable program. Such a specification discovery process helps in automatically generating repairs, thereby moving closer to the goal of self-healing software systems. We have focused on specification inference from tests, and we are also looking into specification inference from other program artifacts. There exist exciting possibilities for combining semantics based repair approaches with search-based repair, and this is under investigation in our research team. We envision that automated repair capabilities should be integrated into programming environments in the future. Instead of treating the software as a passive entity which is validate, we view it as an active entity which heals itself thereby delivering higher trust and assurance.

State-of-the-art in Program Repair: Pictorial view derived from Communications of the ACM article 2019.