Readings
Books
There are no compulsory books that you must read in order to (successfully) take this class. However, studying the following books on software maintenance and evolution will help you better understand the material presented during the class, in the slides, and in the additional links and papers:
- Software Maintenance: Concepts and Practice (Second Edition) (Penny Grubb, Armstrong Takang), World Scientific Publishing, 2003, ISBN-10: 981238426X
- Software Evolution (Tom Mens, Serge Demeyer), Springer, 2008, ISBN-10: 3540764399
- Object-Oriented Metrics in Practice: Using Software Metrics to Characterize, Evaluate, and Improve the Design of Object-Oriented Systems (Michele Lanza, Radu Marinescu), Springer, 2006, ISBN-10: 3540244298
- Effective Software Maintenance and Evolution: A Reuse-Based Approach (Stanislaw Jarzabek), Auerbach Publications, 2007, ISBN-10: 0849335922
These books are also useful if you plan to take assignment B or do a MSc project further on in the area of software maintenance and evolution.
Articles
Below are several articles which cover topics in software maintenance and evolution relevant to (or discussed in) this lecture. The articles are provided as additional information to the key points discussed during the lecture, but also as examples of work pertaining to the assignments.
Theory articles
- A Method for Software Quality Planning, Control, and Evaluation: A good overview of the challenges of defining, measuring, and interpreting software metrics.
- Software Maintenance and Evolution: a Roadmap: A great introduction to software maintenance and evolution (definition, challenges, roadmap).
- Software’s Future: Managing Evolution: The vision on software evolution by M. Lehman, the father of the software evolution laws.
- Is This a Pattern? An essay on how patterns can (or cannot) help software reuse during maintenance.
Technique articles
- Software Inspection Using CodeSurfer A good example of early (but still frequently used) set of techniques to understand software structure, relations, and attributes.
- Structural Analysis and Visualization of C++ Code Evolution using Syntax Trees How to extend software structure views to show structure evolution.
- Mining Software Repositories with CVSgrab Explains the basic techniques and ideas behind SolidTA, the repository visual analysis tool.
- Multiscale and Multivariate Visualizations of Software Evolution A set of advanced techniques built atop of the basic idea of SolidTA for more refined evolution analyses.
- Building Visual Software Analytics Tools A very detailed example of the architecture and implementation techniques of a recent industry-grade visual analytics toolset.
Tool Articles
- Visual data mining and analysis of software repositories An overview paper of the visual analyses possible with SolidTA.
- Visual Querying and Analysis of Large Software Repositories A second overview paper (similar in aims to the previous one) of the visual analyses possible with SolidTA.
- How Do Changes in Buggy Mozilla Files Propagate? A simple (but illustrative) example of how to correlate software evolution with debug data.
Application Articles
Below are several presentations of actual usage of maintenance and evolution tools and techniques on large-scale code bases in the IT industry. They illustrate the entire path from stating a problem (or questions), selecting the right tools, gathering data, sketching a hypothesis, (in)validating the hypothesis with additional data, and finally communicating conclusions to stakeholders. Highly recommended!
- Case Study: Visual Analytics in Software Product Assessments: A 6-year industrial project failed to meet expectations. What are the causes, and what to do next? We show how several types of tools and analyses are used to come to an answer to this question.
- Visual Analysis for Optimizing the Build Performance of Large Code Bases: A 10+ year industrial project gets blocked by huge build times. What are the causes, and what can be done? We illustrate the entire path from modeling the problem to providing a tool that assists developers in optimizing build time.