Managing Software and System Complexity
The ability of a software system to survive is not only dependent on good design, but also the effective management of changes as the system evolves over time. With the emergence of incremental and iterative development approaches, this evolution is no longer restricted to the maintenance phase of development, but now manifests itself during system elaboration and construction. Complexity is often introduced as the number of interdependencies among parts of the system grows in a highly dynamic project environment where requirements are uncertain and their gradual discovery leads to addition of unanticipated features. Such increasing complexity may paradoxically impede the survivability of a system; we must, therefore, learn to track, manage, and mitigate complexity since, left unchecked, it can lead to systems that are difﬁcult to maintain and evolve.
There are several challenges to effective management of this complexity:
· Assessing the impact of change: Changes introduced in one part of a system have the potential to propagate to other parts of a system. Current approaches are limited largely to understanding this impact using modularity-based structures of a system but are not comprehensive enough for assessing the impact that changes have on the overall quality of the system and its development flow.
· Sustainable delivery of value: Projects following agile and lean development approaches often struggle trying to find the right balance between the desire to deliver value to a customer as early as possible, and the desire to reduce rework due to restructuring resulting from expedient design choices made for this early delivery of value.
This research is looking at ways to more effectively understand and manage interdependencies among various parts of a system as changes are introduced during its evolution. We are looking at extracting and representing dependencies from implementation views of a system such as its code or models from which the code is generated, augmenting this representation with dependencies extracted from additional views of the system such as its deployment, and analyzing these dependencies to understand and manage the impact of a change.
As a special case, we are looking at safety-critical systems where changes have the potential to introduce safety hazards and can create conditions leading to recertification of the entire system. Ideally, it should be possible to detect any safety hazards that may result from a change early in the design process and make recertification proportional to the scope of that change.
Robert L. Nord, Raghvinder S. Sangwan, Julien Delange, Peter H. Feiler, Luke Thomas, Ipek Ozkaya. Missed Architectural Dependencies: The Elephant in the Room. WICSA 2016, Venice, Italy, 5 – 8 April, 2016, pp. 41 – 50.
Robert L. Nord, Ipek Ozkaya, Raghvinder S. Sangwan, Ronald J. Koontz. Architecture Dependency Analysis to Understand Rework Costs for Safety-Critical Systems. International Conference on Software Engineering, Hyderabad, India, May-June 2014.
Robert L. Nord, Ipek Ozkaya, Raghvinder S. Sangwan. Making Architecture Visible to Improve Flow Management in Lean Software Development. IEEE Software, Sept/Oct 2012.
Robert L. Nord, Ipek Ozkaya, Raghvinder Sangwan, Nanette Brown. Communicating the Benefits of Architecting within Agile Development: Quantifying the Value of Architecting within Agile Software Development via Technical Debt Analysis. Bass et al. Results of SEI Line-Funded Exploratory New Starts Projects (CMU/SEI-2012-TR-004), 2012.
Nanette Brown, Yanfang Cai, Yuepo Guo, Rick Kazman, Miryung Kim, Phillippe Kruchten, Erin Lim, Alan McCormack, Robert Nord, Ipek Ozkaya, Raghvinder Sangwan, Carolyn Seaman, Kevin Sullivan, Nico Zazworka. Managing Technical Debt in Software-Reliant Systems. FSE/SDP Workshop on the Future of Software Engineering Research (FoSER), Santa Fe, NM, November, 2010.