Reading List
Lecture 1  - (1/21)
Introduction
Lecture 2 - (1/26)
Software Design for Ease of Change, Part 1
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.
Software Design for Ease of Change, Part 2
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.
Design Patterns
Class Activity on Design Patterns

Lecture 5 - (2/4)
Software Architecture
® David Garlan and Mary Shaw. "An Introduction to Software Architecture", CMU Tech Report, January 1994.
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.
® 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
Class Activity on Threats to Validity
® Chris F. Kemerer and Sandra Slaughter. "An empirical approach to studying software evolution". IEEE Transactions on Software Engineering, 25(4):493–509, 1999.
Swanson, E.B., “The Dimensions of Software Maintenance”, Proceedings of the 2nd IEEE International Conference on Software Engineering, 1976, pp. 492-497.

Lecture 8 - (2/16)
Program Differencing Techniques, Part 1
® James W. Hunt and Thomas G. Szymanski. A fast algorithm for computing longest common subsequences. Communications of the ACM, 20(5):350–353, 1977.
Wuu Yang. Identifying syntactic differences between two programs. Software – Practice & Experience, 21(7):739–755, 1991.
Lecture 9 - (2/18)
Program Differencing Techniques, Part 2
Class Activity on Line-based and AST-based Program Diffferencing
® 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.

Lecture 10 - (2/23)
Program Differencing Techniques, Part 3
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.
Miryung Kim and David Notkin. "Discovering and Representing Systematic Code Changes". In Proceedings of the International Conference on Software Engineering, 2009
Lecture 11 - (2/25)
Mining Software Repositories, Part 1
® Thomas Zimmermann, Peter Weißgerber, Stephan Diehl, and Andreas Zeller. "Mining version histories to guide software changes", IEEE Transactions on Software Engineering, 31(6):429–445, 2005.
Sunghun Kim, Thomas Zimmermann, E. James Whitehead Jr., Andreas Zeller. "Predicting Faults from Cached History", ICSE 2007: 489-498
Mining Software Repositories, Part 2
Quiz on Association Rule Mining & eRose
® 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.
Christian Bird, David Pattison, Raissa D’Souza, Vladimir Filkov, Premkumar Devanbu. “Latent Social Structure in Open Source Projects”, FSE 2008: 24-35
Lecture 13 & 14- (3/4 and 3/9) 
Program Restructuring
Refactoring Class Activity
Martin Fowler. "Refactoring: Improving the Design of Existing Code". Addison-Wesley Professional, 2000.
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.
Lecture 15 - (3/11) 
Refactoring Reconstruction
® 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.
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.
Spring Break - (3/16 ~ 3/21)

Lecture 16 - (3/23) 
Crosscutting Concerns, Part 1
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
® Peri Tarr, Harold Ossher, William Harrison, and Jr. Stanley M. Sutton. "N degrees of separation: 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.
Lecture 17 - (3/25)
Crosscutting Concerns, Part 2
Quiz - Crosscutting Concerns & Visitor Pattern
Martin P. Robillard and Gail C. Murphy, "Concern graphs: finding and describing concerns using structural program dependencies," In ICSE ’02: Proceedings of the 24th International Conference on Software Engineering, pages 406–416, Washington, DC, USA, 2003. IEEE Computer Society.
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.
Lecture 18 - (3/30)
Delta Debugging Part 1
® 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.
Lecture 19 - (4/1) 
Delta Debugging Quiz & Statistical Bug Isolation
® Ben Liblit, Alexander Aiken, Alice X. Zheng, Michael I. Jordan, "Bug isolation via remote program sampling", PLDI 2003: 141-154
Delta Debugging Wrap-Up
Regression Testing Selection, Prioritization, Augmentation
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.
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.
Regression Testing Selection, Prioritization, Augmentation
Path Profiling
Class Activity - Code Coverage
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.
Lecture 22 - (4/13)
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.
Lecture 23- (4/15)
Reverse Engineering and Knowledge Discovery
Quiz - Chianti
® 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.
Susan Elliott Sim, Margaret-Anne D. Storey, "A Structured Demonstration of Program Comprehension Tools", WCRE 2000: 184-193

Lecture 24 -(4/20) 
Metrics and Visualization
Class Activity - Discussion on Practical Uses of Software Evolution Research, Part 1. 
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.

Lecture 25 -(4/22)
Recap - Polymetric Views
Code Clones, Part 1
Peer review assignments to be handed out in the class
® Toshihiro Kamiya, Shinji Kusumoto, and Katsuro Inoue, "CCFinder: A multilinguistic token-based code clone detection system for large scale source code", IEEE Transactions on Software Engineering, 28(7):654–670, 2002.

Lecture 26 -(4/27)
Class Activity - Discussion on Practical Uses of Software Evolution Research, Part 2.
Code Clones, Part 2
® 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.

Lecture 27 -(4/29) 
No Lecture - Use it for your project preparation.

Lecture 28 - (5/4) 
Final Presentations

Lecture 29 - (5/6) 
Final Presentations