Techniques for Automated Software Evolution
Raffi Khatchadourian · OhioLink ETD Center (Ohio Library and Information Network) · 2011
For a variety of reasons, modern, non-trivial software systems must evolve to cope with change, including alterations in stakeholder requirements, environments in which the software is deployed, and dependent technologies, e.g., frameworks.Unfortunately, evolution and maintenance is an expensive, time-consuming, and errorprone task, especially when the system in question is large and complex.Typically, a change to a single program element requires changes to related, and often seemingly unrelated, elements scattered throughout the source code.To address this problem, approaches have emerged to mechanically assist developers with a wide range of software evolution and maintenance tasks, including migrating code to a new framework version, translating existing code to a new platform, and restructuring code to mirror an improved design.This assistance is typically provided in the form of extensions (plug-ins) to integrated development environments (IDEs) that afford (semi-) automated aid in carrying out these tasks, thus easing the burden associated with evolution and maintenance.In some approaches, the corresponding plug-in keeps track of the elements relevant to the change being implemented, with the IDE displaying only those elements.Other approaches attempt to automatically restructure code to improve such features as type safety while preserving semantics.Although existing approaches are useful in alleviating some of the burden associated with software evolution and maintenance, there are a number of situations where There have been many people that have helped, in one form or another, along the way in writing this thesis.I acknowledge a subset of them here, as it is inevitable that I inadvertently fail to mention everyone.For this, I apologize in advance.I would like to thank my advisor, Dr. Neelam Soundarajan, for his support throughout my many years in graduate school.He has written numerous recommendation letters for my award applications, grant proposals, conference volunteering applications, and job applications.He has never denied a request for a letter and has been prompt in delivering them.Without this, I would not have been available to achieve and participate in many of the awards and activities listed on my curriculum vitae today.Dr. Soundarajan seemed a bit hesitant to accept me as a student at first.After several months of inquiries and many trips to his office, I finally got him to agree.I never quite knew the reason for his hesitancy, but I suspect that is was mainly due to our difference in backgrounds.I came from a small liberal arts school with a solid yet industry focused Computer Science program.I had also spent some time as a software developer before entering my full-time graduate program at Ohio State.Thus, my background was very practical.Dr. Soundarajan, on the other hand, had a theoretical and mathematics-based background with respect to Software Engineering.This is a side of Software Engineering that I was not initially familiar with.vi Despite our background differences, Dr. Soundarajan and I both benefited from our differences and found a way to compliment them to achieve a good mix of theory and practicality that the greater Software Engineering research community desired at the time.I am very grateful that Dr. Soundarajan finally decided to accept me as a student.He, and many other members of the Software Engineering group at Ohio State University, taught me to see problems for a different perspective.I learned to think of programs more mathematically.In solving problems, I thought about assertions rather than just examples.I learned to think abstractly about problems, which helped immensely in my progress towards a PhD degree.Indeed, it is this particular skill that allowed me to learn one of the most valuable skills any graduate student can learn, that is, the ability to learn.I learned how to properly not understand difficult and complex concepts at first so that I may fully understand them later.This, along with the skill of effective and thorough explanation, are not easily achievable and are the greatest assets I have obtained during my time as a graduate student.Equally critical to my success was my girl friend, Kelly McMeans, whom stood by my side during almost my entire time as a graduate student.I am utterly gratefully for her tremendous support throughout all these years, and without it, I would have not completed this thesis.She picked me up when I was down, and she stood by my side when I felt alone.There were many times when I felt that I had no more energy nor resources to continue, and she convinced me otherwise.She waited countless months for me during my many trips overseas and always welcomed me back with open arms.vii Kelly and her family made me feel at home in a place that was hundreds of miles away from the only place I knew as home and that was very different in many ways.For this, I will be forever grateful.I am also grateful to my cat, Fluffy, and my dog, Pudding.I am grateful to Fluffy for providing me company when I lived alone for almost two years in my one bedroom apartment in Worthington.She would always welcome me with a purr after returning from many long nights of hard work at the local coffee shops.I thank Pudding for stealing my heart at the pet store and for the opportunity for many long walks in the park we had together where I could easily gather my thoughts and relax.