[[PageOutline(1-2)]] = !CoExist: Reduce Aversion to Change = !CoExist is an IDE extension that preserves intermediate development states and provides immediate access to source code and run-time information of previous development states. With !CoExist, programmers can easily withdraw recent changes, recover knowledge from previous development states, analyze the impact of each individual change concerning test cases and other metrics, or reassemble individual changes to meaningful increments to be shared with others. This encourages programmers to make changes in the moment they think of them without worries because they can rely on tools that help them with whatever their explorations will reveal. They no longer have to follow best practices only to avoid undesired consequences of changing code. [[Image(coexist.png)]] This figure illustrates how !CoExist extends the !Squeak/Smalltalk development environment: a version bar concept at the bottom that presents the continuously created versions and corresponding test results, the user debugs code on the most recent version (on the right), and recovers knowledge from a previous version next to it (on the left) == Motivation == Changing source code involves risks because programmers can make errors. A promising idea to simplify the code can suddenly turn out inappropriate later in the process. Also, programmers can have flaws in their reasoning or can unintentionally ignore relevant aspects. Making an error represents a risk because it typically requires compensational activities that are time consuming and tedious to accomplish. To deal with the risks of change, the recommended way is to anticipate that errors will be made and to continuously perform activities that keep compensation costs low. This includes checking for errors early and often as well as maintaining a safety net of stable development states one can fall back to. However, such precautionary activities can only reduce but not avoid the risk of tedious recovery work. Moreover, they can be easily ignored and distract from the actual task at hand. == Publication == Bastian Steinert, Damien Cassou, and Robert Hirschfeld. !CoExist: Overcoming Aversion to Change – Preserving Immediate Access to Source Code and Run-time Information of Previous Development States. In Proceedings of the Dynamic Languages Symposium (DLS) 2012, co-located with the Conference on Object-oriented Programming, Systems, Languages, and Applications (OOPSLA) 2012, pages 107-117, Tucson, Arizona, USA, October 22, 2012, ACM DL. [http://www.bastiansteinert.org/papers/CoExist.pdf paper] [http://www.bastiansteinert.org/papers/CoExistSlides.pdf slides] [http://www.bastiansteinert.org/bibtex/coexist.bib bibtex] > [http://dx.doi.org/10.1145/2384577.2384591 doi] == Artifacts == !CoExist has been implemented in !Squeak/Smalltalk. It requires an adapted version of the !Cog virtual machine, because we introduced late class binding to allow for sharing meta-objects among versions (class objects and compiled methods). [http://www.bastiansteinert.org/coexist/CoExist-CogVM-OSX.zip CoExist-CogVM-OSX.zip] [http://www.bastiansteinert.org/coexist/CoExist-CogVM-Linux.zip CoExist-CogVM-Linux.zip] [http://www.bastiansteinert.org/coexist/CoExist-CogVM-Win.zip CoExist-CogVM-Win.zip] Download one of the images offered below to have a closer look at !CoExist and try it. !CoExist is based on !Squeak 4.2. You need to start the image with your copy of the adapted Cog VM (above). !CoExist will already be installed and running. Note that while !CoExist's versioning is not limited to any package or category, unit tests are executed only for a selected package of interest. In the offered images, !CoExist is setup to run tests for a game called !MarbleMania. So, you might want to try out !CoExist by refactoring this game. !CoExist as of Jul. 2012 (paper submission): [http://www.bastiansteinert.org/coexist/CoExist-01.zip CoExist-01.zip] !CoExist as of Dec. 2012 (improved layout): [http://www.bastiansteinert.org/coexist/CoExist-02.zip CoExist-02.zip] == Follow-up work: Integration with Monticello == During a seminar course in winter (2012/2013), two groups of students worked on the integration of the !CoExist tools with Monticello. The groups consisted of: Fabian Bornhofen, Maria Graber, Jens Hildebrandt, Stefan Lehmann, Stephanie Platz, Cathleen Ramson, Lysann Schlegel, Philipp Tessenow. [http://www.bastiansteinert.org/papers/CoExistMonticelloIntegration.pdf slides of the students' presentation] The source code is available via Squeaksource; find the respective links below: [http://www.hpi.uni-potsdam.de/hirschfeld/squeaksource/modsyscoexist01.html Team 01] [http://www.hpi.uni-potsdam.de/hirschfeld/squeaksource/modsyscoexist02.html Team 02] [[Image(demoCoExist.png, 400px, link=https://www.youtube.com/watch?v=DlMb40H5mr4)]] [[Image(demoCoExistYellow.png, 400px, link=https://www.youtube.com/watch?v=K-ghlgrI554)]] = Acknowledgments = !CoExist has been developed by [http://www.bastiansteinert.org Bastian Steinert] as part of his [https://publishup.uni-potsdam.de/opus4-ubp/frontdoor/index/index/docId/6891 dissertation].