We introduce a Capabilities-based approach for constructing large-scale systems such that they are change-tolerant. The inherent complexity of software systems increases their susceptibility to change when subjected to the vagaries of user needs, technology advances, market demands, and other change-inducing factors. Despite the inevitability of change, traditional requirements engineering strives to develop systems based on a fixed solution; a mostly unsuccessful approach as evidenced by the history of system failures. In contrast, we utilize Capabilities - functional abstractions that are neither as amorphous as user needs nor as rigid as system requirements - to architect systems that accommodate change with minimum impact. These entities are designed to exhibit the desirable characteristics of high cohesion, low coupling, and balanced abstraction levels and are generated by a two-phased process called Capabilities Engineering. Phase I mathematically exploits the structural semantics of a function decomposition graph - a representation of user needs - to formulate change-tolerant Capabilities. Phase II optimizes these Capabilities to comply with schedule and technology constraints. In this paper, we present the overall framework of this process and detail the algorithm to identify Capabilities. In addition, we empirically evaluate the change tolerance of Capabilities resulting from Phase I. For this we examine the ripple effect of needs change on a real-world Course Evaluation System based on the original requirements-based design and the corresponding Capabilities-based design. Our experimental results indicate, with statistical significance, that the Capabilities-based design is less impacted by change and thereby improves the change tolerance of the system when subjected to needs volatility.
%0 Journal Article
%1 ravichandar08
%A Ravichandar, Ramya
%A Arthur, James D.
%A Bohner, Shawn A.
%A Tegarden, David P.
%D 2008
%J Journal of Software Maintenance and Evolution: Research and Practice
%K capabilities empirical evolution
%N 2
%P 135-170
%R 10.1002/smr.367
%T Improving change tolerance through Capabilities-based design: an empirical analysis
%U http://dx.doi.org/10.1002/smr.367
%V 20
%X We introduce a Capabilities-based approach for constructing large-scale systems such that they are change-tolerant. The inherent complexity of software systems increases their susceptibility to change when subjected to the vagaries of user needs, technology advances, market demands, and other change-inducing factors. Despite the inevitability of change, traditional requirements engineering strives to develop systems based on a fixed solution; a mostly unsuccessful approach as evidenced by the history of system failures. In contrast, we utilize Capabilities - functional abstractions that are neither as amorphous as user needs nor as rigid as system requirements - to architect systems that accommodate change with minimum impact. These entities are designed to exhibit the desirable characteristics of high cohesion, low coupling, and balanced abstraction levels and are generated by a two-phased process called Capabilities Engineering. Phase I mathematically exploits the structural semantics of a function decomposition graph - a representation of user needs - to formulate change-tolerant Capabilities. Phase II optimizes these Capabilities to comply with schedule and technology constraints. In this paper, we present the overall framework of this process and detail the algorithm to identify Capabilities. In addition, we empirically evaluate the change tolerance of Capabilities resulting from Phase I. For this we examine the ripple effect of needs change on a real-world Course Evaluation System based on the original requirements-based design and the corresponding Capabilities-based design. Our experimental results indicate, with statistical significance, that the Capabilities-based design is less impacted by change and thereby improves the change tolerance of the system when subjected to needs volatility.
@article{ravichandar08,
abstract = {We introduce a Capabilities-based approach for constructing large-scale systems such that they are change-tolerant. The inherent complexity of software systems increases their susceptibility to change when subjected to the vagaries of user needs, technology advances, market demands, and other change-inducing factors. Despite the inevitability of change, traditional requirements engineering strives to develop systems based on a fixed solution; a mostly unsuccessful approach as evidenced by the history of system failures. In contrast, we utilize Capabilities - functional abstractions that are neither as amorphous as user needs nor as rigid as system requirements - to architect systems that accommodate change with minimum impact. These entities are designed to exhibit the desirable characteristics of high cohesion, low coupling, and balanced abstraction levels and are generated by a two-phased process called Capabilities Engineering. Phase I mathematically exploits the structural semantics of a function decomposition graph - a representation of user needs - to formulate change-tolerant Capabilities. Phase II optimizes these Capabilities to comply with schedule and technology constraints. In this paper, we present the overall framework of this process and detail the algorithm to identify Capabilities. In addition, we empirically evaluate the change tolerance of Capabilities resulting from Phase I. For this we examine the ripple effect of needs change on a real-world Course Evaluation System based on the original requirements-based design and the corresponding Capabilities-based design. Our experimental results indicate, with statistical significance, that the Capabilities-based design is less impacted by change and thereby improves the change tolerance of the system when subjected to needs volatility.},
added-at = {2008-10-14T19:05:32.000+0200},
author = {Ravichandar, Ramya and Arthur, James D. and Bohner, Shawn A. and Tegarden, David P.},
biburl = {https://www.bibsonomy.org/bibtex/281c4da7098a2c999798454a2f2c620db/neilernst},
doi = {10.1002/smr.367},
interhash = {2bb60a59d037fbf426dec37b994e97cc},
intrahash = {81c4da7098a2c999798454a2f2c620db},
journal = {Journal of Software Maintenance and Evolution: Research and Practice},
keywords = {capabilities empirical evolution},
number = 2,
pages = {135-170},
timestamp = {2008-10-14T19:05:32.000+0200},
title = {Improving change tolerance through Capabilities-based design: an empirical analysis},
url = {http://dx.doi.org/10.1002/smr.367},
volume = 20,
year = 2008
}