Software needs to undergo changes all the time, for many reasons.
Typical causes for change include requests for added, changed, and removed functionality, and the deployment of previously developed software in new and unanticipated contexts. There are many reasons why making changes is difficult. Changing unfamiliar software is hard, because code is hard to understand, and tends to get harder to understand as more changes are made. This includes techniques for multi-dimensional separation of concerns, as well as tools and analyses for refactoring and maintenance of existing software. The following is a summary of current and recent activities by group members.