Instructor: Dr. Miryung Kim

Monday/Wednesday: 3:30 PM to 5 PM, ENS 116

Software evolution plays an ever-increasing role in software development. Programmers rarely build software from scratch but often spend more time in modifying existing software to provide new features to customers and fix defects in existing software. Evolving software systems is often a time-consuming and error-prone process. This course focuses on state-of-the art methods, tools, and techniques for evolving software.

I will begin by addressing software design principles for ease of change and reviewing empirical studies on software evolution. Subsequently, I will cover program differencing techniques and source transformation languages and tools. Next, I will cover analysis, testing, debugging and visualization methods for evolving software. This course also presents the-state-of-the-art research in analyzing software evolution by mining software repositories such as CVS, Subversion, and Bugzilla.

Prerequisites
Undergraduate level knowledge of data structures and object-oriented program languages is required. Knowledge of compilers and program analysis is encouraged.

Readings
Relevant papers will be drawn from the leading software engineering journals and conference proceedings such as: TOSEM, TSE, ICSE, FSE, ASE, OOPSLA, and ICSM

Optional Textbooks
  • Software Fundamentals, edited by Daniel M. Hoffman and David M. Weiss, Addison Wesley, 2001
  • Design Patterns: Elements of Reusable Object-Oriented Software, Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, Addison-Wesley Professional,1994
  • Refactoring: Improving the Design of Existing Code, Addison-Wesley Professional, 1999
Grading
  • Problem Sets and Reading Assignments: 25%
  • Midterm: 15%
  • Project: 50%
  • Class participation: 10%
For the project, students may choose to do (A) both a term paper and a tool evaluation or (B) a more extensive research project. If a student takes the option (A), he or she is required to write 10-15 page literature survey paper and to perform a case study using one of the tools studied in the class. Students may choose the option (B) and work on a suitable research project on their own. Students submit a brief proposal for either option (A) or (B), which must be approved by the instructor before they begin. Good projects will result in work that is of a quality expected for conference or workshop submission. At the end of the course, students will present their projects to the class. Oral discussion of homework problems is encouraged. However, be sure to submit your own independent solution. Copying of any part of a solution without explicit reference to its source is plagiarism and considered cheating. Final projects can be done in teams upon the instructor's approval.

Student with Disabilities
The University of Texas at Austin provides upon request appropriate academic accommodations for qualified students with disabilities. For more information, contact the Office of the Dean of Students at 471-6259, 471-4641 TTY or the College of Engineering Director of Students with Disabilities at 471-4382.
Course Outline
Week 1 - (1/21): Introduction
Week 2 - (1/26 , 1/28)
Software Design for Ease of Change
Mythical Man-Month
Fredrick P. Brooks, Jr. "No Silver Bullet: Essence and Accidents of Software Engineering", Computer, April 1987
Information Hiding Principle
David Lorge Parnas. "On the criteria to be used in decomposing systems into modules", Communications of the ACM, 15(12):1053–1058, 1972.
Tool Support for Designing Software for Ease of Change
Vibha Sazawal, Miryung Kim, and David Notkin. "A study of evolution in the presence of source-derived partial design representations". In IWPSE ’04: Proceedings of the Principles of Software Evolution, 7th International Workshop, pages 21–30, Washington, DC, USA, 2004. IEEE Computer Society.
Week 3 - (2/2 , 2/4)
Design Patterns and Software Architecture
Erich Gamma, Richard Helm, Ralph E. Johnson, John M. Vlissides, "Design Patterns: Abstraction and Reuse of Object-Oriented Design", ECOOP 1993: 406-431
David Garlan and Mary Shaw. "An Introduction to Software Architecture", CMU Tech Report, January 1994.
Week 4 - (2/9 , 2/11)
Empirical Studies of Software Evolution
Laszlo A. Belady and M.M. Lehman. "A Model of Large Program Development", IBM Systems Journal, 15(3):225–252, 1976.
Code Decay and Analysis of Fault Prone Modules
Stephen G. Eick, Todd L. Graves, Alan F. Karr, J. S. Marron, and Audris Mockus. "Does code decay? Assessing the evidence from change management data", IEEE Transactions on Software Engineering, 27(1):1–12, 2001.
Corrective, Adaptive, and Perfective Changes
Swanson, E.B., “The Dimensions of Software Maintenance”, Proceedings of the 2nd IEEE International Conference on Software Engineering, 1976, pp. 492-497.
Chris F. Kemerer and Sandra Slaughter. "An empirical approach to studying software evolution". IEEE Transactions on Software Engineering, 25(4):493–509, 1999.
Week 5 - (2/16 , 2/18)
Software Change: Program Differencing Techniques
Taweesup Apiwattanapong, Alessandro Orso, and Mary Jean Harrold. "A differencing algorithm for object-oriented programs". In ASE ’04: Proceedings of the 19th IEEE International Conference on Automated Software  Engineering, pages 2–13, Washington, DC, USA, 2004. IEEE Computer Society.
Miryung Kim and David Notkin. "Program element matching for multi-version program analyses". In Proceedings of the International Workshop on Mining Software Repositories, pages 58–64, 2006.
Week 6 - (2/23 , 2/25)
Software Change: Source Transformation Languages and Tools
Marat Boshernitsan, Susan L. Graham, and Marti A. Hearst. "Aligning development tools with the way programmers think about code changes", In CHI ’07: Proceedings of the SIGCHI conference on Human factors in computing systems, pages 567–576, New York, NY, USA, 2007. ACM.
James R. Cordy, Thomas R. Dean, Andrew J.Malton, and Kevin A. Schneider. "Source transformation in software engineering using the txl transformation system", Journal of Information and Software Technology, 44:827–837, 2002.
Week 7 - (3/2 , 3/4)
Mining Software Repositories: Reconstruction of Related Changes
Thomas Zimmermann, Peter Weiίgerber, Stephan Diehl, and Andreas Zeller. "Mining version histories to guide software changes", IEEE Transactions on Software Engi-neering, 31(6):429–445, 2005.
Mining Software Repositories: Analysis of Version Control System and Bug Database Data
Davor Cubranic and Gail C. Murphy. "Hipikat: recommending pertinent software development artifacts". In ICSE ’03: Proceedings of the 25th International Conference on Software Engineering, pages 408–418, Washington, DC, USA, 2003. IEEE Computer Society.
Sunghun Kim, Thomas Zimmermann, E. James Whitehead Jr., Andreas Zeller. "Predicting Faults from Cached History", ICSE 2007: 489-498
Week 8 - (3/9 , 3/11)
Program Restructuring
Martin Fowler. "Refactoring: Improving the Design of Existing Code". Addison-Wesley Professional, 2000.
Refactoring Reconstruction
Beat Fluri, Michael W¨ursch, Martin Pinzger, and Harald C. Gall. "Change distilling tree differencing for fine-grained source code change extraction". IEEE Transactions on Software Engineering, 33(11):18, November 2007.
Danny Dig and Ralph Johnson. "Automated detection of refactorings in evolving components", In ECOOP ’06: Proceedings of European Conference on Object-Oriented Programming, pages 404–428. Springer, 2006.
Zhenchang Xing and Eleni Stroulia. "Umldiff: an algorithm for object-oriented design differencing", In ASE ’05: Proceedings of the 20th IEEE/ACM International Conference on Automated Software Engineering, pages 54–65, New York, NY, USA, 2005. ACM.
Week 9 - (3/16 , 3/21): Spring Break
Week 10 - (3/23 , 3/18)
Crosscutting Concerns
N-Dimensional Separation of Concerns
Peri Tarr, Harold Ossher, William Harrison, and Jr. Stanley M. Sutton. "N degrees of zeparation: multi-dimensional separation of concerns", In ICSE ’99: Proceedings of the 21st International Conference on Software Engineering, pages 107–119, Los Alamitos, CA, USA, 1999. IEEE Computer Society Press.
Aspect J
Gregor Kiczales, John Lamping, Anurag Menhdhekar, Chris Maeda, Cristina Lopes, Jean-Marc Loingtier, and John Irwin, "Aspect-oriented programming", In European Conference on Object-oriented Programming, volume 1241, pages 220–242. Lecture Notes in Computer Science 1241, 1997
Week 11 - (3/23 , 3/25)
Crosscutting Concerns
Michael VanHilst and David Notkin, "Decoupling change from design", In SIGSOFT ’96: Proceedings of the 4th ACM SIGSOFT Symposium on Foundations of Software Engineering, pages 58–69, New York, NY, USA, 1996. ACM.
Martin P. Robillard and Gail C. Murphy, "Feat: a tool for locating, describing, and analyzing concerns in source code", In ICSE ’03: Proceedings of the 25th International Conference on Software Engineering, pages 822–823, Washington, DC, USA, 2003. IEEE Computer Society.
Week 12 - (3/30 , 4/1)
Code Clones
Clone Detection
Toshihiro Kamiya, Shinji Kusumoto, and Katsuro Inoue, "CCFinder: A multilinguistic token-based code clone detection system for large scale source code", IEEE Trans-actions on Software Engineering, 28(7):654–670, 2002.
Is Cloning Considered Harmful?
James R. Cordy, "Comprehending reality ” practical barriers to industrial adoption of software maintenance automation", In IWPC ’03: Proceedings of the 11th IEEE Inter-national Workshop on Program Comprehension, page 196, Washington, DC, USA, 2003. IEEE Computer Society
Miryung Kim, Vibha Sazawal, David Notkin, and Gail Murphy, "An empirical study of code clone genealogies", In ESEC/FSE-13: Proceedings of the 10th European Soft-ware Engineering Conference held jointly with 13th ACM SIGSOFT International Symposium on Foundations of Software Engineering, pages 187–196, New York, NY, USA, 2005. ACM.
Week 13 - (4/6 , 4/8)
Program Comprehension and Visualization of Software Evolution
Metric and Visualization
Michele Lanza and St΄ephane Ducasse, "Polymetric views-a lightweight visual approach to reverse engineering", IEEE Transactions on Software Engineering, 29(9):782–795, 2003.
Reverse Engineering and Knowledge Discovery
Susan Elliott Sim, Margaret-Anne D. Storey, "A Structured Demonstration of Program Comprehension Tools", WCRE 2000: 184-193 Margaret-Anne D. Storey, Hausi A. Mόller: Manipulating and documenting software structures using SHriMP views. ICSM 1995: 275-
Reflexion Model
Gail C. Murphy, David Notkin, and Kevin Sullivan, "Software reflexion models: bridging the gap between source and high-level models", In SIGSOFT ’95: Proceedings of the 3rd ACM SIGSOFT Symposium on Foundations of Software Engineering, pages 18–28, New York, NY, USA, 1995. ACM.
Week 14 - (4/13 , 4/15)
Regression Testing and Change Impact Analysis
Regression Test Selection, Prioritization and Augmentation
Gregg Rothermel and Mary Jean Harrold. "A safe, efficient regression test selection technique", ACM Transactions on Software Engineering and Methodology, 6(2):173– 210, 1997.
Alessandro Orso, Nanjuan Shi, and Mary Jean Harrold, "Scaling regression testing to large software systems", In SIGSOFT ’04/FSE-12: Proceedings of the 12th ACM SIGSOFT twelfth International Symposium on Foundations of Software Engineering, pages 241–251, New York, NY, USA, 2004. ACM.
Change Impact Analysis
Thomas Reps, Thomas Ball, Manuvir Das, and James Larus, "The use of program profiling for software maintenance with applications to the year 2000 problem", In ESEC ’97/FSE-5: Proceedings of the 6th European Conference held jointly with the 5th ACM SIGSOFT International Symposium on Foundations of Software Engineering, pages 432–449, New York, NY, USA, 1997. Springer-Verlag New York, Inc.
Week 15 - (4/20)
Change Impact Analysis
Xiaoxia Ren, Fenil Shah, Frank Tip, Barbara G. Ryder, and Ophelia Chesley, "Chianti: a tool for change impact analysis of java programs", In OOPSLA ’04: Proceedings of the 19th annual ACM SIGPLAN Conference on Object-Oriented Programming, Systems, Languages, and Applications, pages 432–448, New York, NY, USA, 2004. ACM.
Maximilian Stoerzer, Barbara G. Ryder, Xiaoxia Ren, and Frank Tip. "Finding failure inducing changes in java programs using change classification", In SIGSOFT ’06/FSE- 14: Proceedings of the 14th ACM SIGSOFT International Symposium on Foundations of Software Engineering, pages 57–68, New York, NY, USA, 2006. ACM.
Week 15 - (4/22)
Fault Isolation and Debugging
Delta Debugging
Andreas Zeller. "Yesterday, my program worked. today, it does not. why?", In ESEC/FSE-7: Proceedings of the 7th European Software Engineering Conference held jointly with the 7th ACM SIGSOFT International Symposium on Foundations of Software Engineering, pages 253–267, London, UK, 1999. Springer-Verlag.
Statistical Bug Isolation
Ben Liblit, Alexander Aiken, Alice X. Zheng, Michael I. Jordan, "Bug isolation via remote program sampling", PLDI 2003: 141-154
Week 16 - (4/27 , 4/29): Final Presentations
Week 17 - (5/4 , 5/6): Final Presentations