CS 245 - Software Evolution
Spring 2011



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

iLearn page

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.


The schedule might change during the quarter so check this page often!

Date Topic Reading Notes
March 29 Introduction
Software processes
Process activities
Sommerville: Ch.1 (optional) Ch. 2 (excluding 2.4), Ch. 3
Mens and Demeyer: Ch.1
April 5 Software Evolution
Mythical man-month
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's laws
Parnas, 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
Emprirical studies
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
API evolution
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
(Dynamic updating)
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
Schema evolution
Begel, Khoo, and Zimmermann, Codebook: 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.



Attendance and basic etiquette

Students are required to attend, follow, and actively participate in all lectures and discussions. All lectures, discussions, and exams start at the stated time. Avoid being late coming to class, as this is very disruptive. Students are requested to refrain from using electronic devices (laptops, cell phones, music players, etc.) during lectures, exams, and discussions. If, for some compelling reason, you need to be on call, be sure to put your cell phone in silent mode, and excuse yourself from the class if you need to take a call. Analogously, when coming to see the instructor, please turn your cell phone off.

Academic Integrity

Academic integrity will be strictly enforced. Any violation or suspected violation of academic integrity will be dealt with according to the UCR discipline procedure. An excellent, detailed guide to what constitutes academic dishonesty and the procedure in case of academic integrity violations is available here.

What constitutes academic dishonesty?

In short: acts including but not limited to, cheating, fabrication, plagiarism, unauthorized collaboration, or facilitating any of the above.

What are the penalties and sanctions for academic dishonesty?

In short: if a student is found guilty of academic dishonesty, penalties range from receiving an F for the class and adding a record of violation to the student's file, up to dismissal from the University, depending on the severity of the infraction and the number of prior violations of the integrity code.

Ignorance is no excuse.

The above information is not designed to threaten or intimidate the student. Rather, it is presented to inform the individual of the consequences. The important thing to remember is that if there is any doubt in one's mind that an act is in violation of academic integrity guidelines, then the prudent response would be not to do the act. It is a simplistic approach, to be sure, but one that will benefit both the student and the university community as a whole.