- Final exam will be posted on Thursday May 9 at noon, due Friday May 10 at noon
- Assignment 3 posted on iLearn, due May 24 at 11:59 p.m.
- Assignment 2 posted on iLearn, due April 19 at 11:59 p.m.
- Assignment 1 posted on iLearn, due April 12 at 11:59 p.m.
- The first lecture will be on Tuesday, March 29
Instructor: Iulian Neamtiu
Lectures: Tuesdays 05:10 p.m. - 08:00 p.m., MSE 0011
Office hours: Tuesdays 02:00 p.m. - 04:00 p.m. or by appointment
Grading: Project (45%) + Final Exam (25%) + Class participation (15%) + Homeworks (15%).
Final exam: Take-home, June 9
Synopsis: Covers the principles, tools, and techniques for disciplined software evolution. Includes migration strategies, change patterns, software maintenance, legacy system reengineering, reverse engineering for program understanding, middleware, source code analysis, software visualization, and program transformation tools.
|Sommerville: Ch.1 (optional) Ch. 2 (excluding 2.4), Ch. 3|
Mens and Demeyer: Ch.1
|April 5||Software Evolution
No silver bullet
|Sommerville: Ch. 9|
Brooks: Ch. 2, 11, 16, 17 (full) Ch. 19 (pp 265--271, 273--275)
"No silver bullet" reloaded: retrospective on "essence and accidents of software engineering"
|April 12||Software Aging
Lehman, Rules and Tools for Software Evolution Planning and Management
Xie, Chen, and Neamtiu, Towards a Better Understanding of Software Evolution: An Empirical Study on Open Source Software
|Assignment 1 due|
|April 19||SE research
Analyzing software repositories
|Mens, Wermelinger, Ducasse, Demeyer, Hirschfeld, and Jazayeri, Challenges in Software Evolution|
Mens and Demeyer: Ch. 3, Ch. 11
|Assignment 2 due|
|April 26||Bug tossing
Programming language impact on evolution
|Bhattacharya and Neamtiu, Fine-grained Incremental Learning and Multi-feature
Tossing Graphs to Improve Bug Triaging|
Bhattacharya and Neamtiu, Assessing Programming Language Impact on Development and Maintenance: A Study on C and C++
|May 3||Change impact analysis
Raghavan, Rohana, Leon, Podgurski, and Augustine,
Dex: A Semantic-Graph Differencing Tool for Studying Changes
in Large Code Bases|
Dig and Johnson, The Role of Refactorings in API Evolution
Ren, Shah, Tip, Ryder and Chesley, Chianti: a tool for change impact analysis of java programs
Apiwattanapong, Orso, and Harrold, A Differencing Algorithm for Object-Oriented Programs
|Project stage 1 due|
|May 10||Open source
SE for OS kernels
|Mockus, Fielding, and Herbsleb, Two case studies of open source software development: Apache and Mozilla|
Spinellis, A tale of four kernels
Padioleau, Lawall, Hansen and Muller, Documenting and automating collateral evolutions in Linux device drivers
|May 17||Runtime Evolution
Neamtiu, Hicks, Stoyle and Oriol, Practical Dynamic Software Updating for C|
Arnold and Kaashoek, Ksplice: Automatic rebootless kernel updates
Gupta, Jalote and Barua, A formal framework for on-line software version change
|Project stage 2 due|
|May 31||Evolution support tools|
Begel, Khoo, and Zimmermann,
discovering and exploiting relationships in software repositories
Curino, Moon, and Zaniolo, Graceful Database Schema Evolution: the PRISM Workbench
|May 31||Project presentations|| ||Project due|
Each student is expected to complete a research project, write up the material describing the project in a similar manner to research papers, and present the project in class (in one of the last classes in May). The project can have an implementation or theoretical flavor (or both).
The instructor has suggested possible project topics, but the students are encouraged to choose their own topics (as long as they are relevant to this class).
The projects can be completed individually or in teams, with the expectation for team projects being commensurately higher than for individual projects.
- Conferences/Workshops: ICSM, ICSE, ASE, IWPSE.