Tracking Behavioral Constraints during Object-Oriented Software Evolution ⋆ Johan Dovland, Einar Broch Johnsen, and Ingrid Chieh Yu Department of Informatics, University of Oslo, Norway {johand,einarj,ingridcy}@ifi.uio.no Abstract. An intrinsic property of real world software is that it needs to evolve. The software is continuously changed during the initial de- velopment phase, and existing software may need modifications to meet new requirements. to facilitate the development and maintenance of pro- grams, it is an advantage to have programming environments which allow the developer to alternate between programming and verification tasks in a flexible manner and which ensures correctness of the final program with respect to specified behavioral properties. This paper proposes a formal framework for the flexible development of object-oriented programs, which supports an interleaving of program- ming and verification steps. The motivation for this framework is to avoid imposing restrictions on the programming steps to facilitate the verification steps, but rather to track unresolved proof obligations and specified properties of a program which evolves. A proof environment connects unresolved proof obligations and specified properties by means of a soundness invariant which is maintained by both programming and verification steps. Once the set of unresolved obligations is empty, the invariant ensures the soundness of the overall program verification. 1 Introduction An intrinsic property of software in the real world is that it needs to evolve. This can be as part of the initial development phase, improvements to meet new requirements, or as part of a software customization process such as, e.g., feature selection in software product lines or delta-oriented programming [1,14]. Require- ments to a piece of software also change over time. For this reason we cannot always expect that the specifications are written before the code is developed, and that the verification efforts happen afterwards. As the code is enhanced and modified, it becomes increasingly complex and drifts away from its original design [11]. For this reason, it may be desirable to redesign the code base to improve its structure, thereby reducing software complexity. For example, the process of refactoring in object-oriented software development describes changes to the internal structure of software to make the software easier to understand ⋆ Partly funded by the EU project FP7-231620 HATS: Highly Adaptable and Trust- worthy Software using Formal Models (http://www.hats-project.eu).