Given the complexity of modern software systems, it is of great importance that such systems be able to autonomously modify themselves, i.e., self-adapt, with minimal human supervision. It is critical that this adaptation both results in reliable systems and scales reasonably in required memory and runtime to non-trivial systems. In this paper, we apply computational complexity analysis to evaluate algorithmic options for the reliable creation and adaptation of emergent software systems relative to several popular types of exact and approximate efficient solvability. We show that neither problem is solvable for all inputs when no restrictions are placed on software system structure. This intractability continues to hold relative to all examined types of efficient exact and approximate solvability when software systems are restricted to run (and hence can be verified against system requirements) in polynomial time. Moreover, both of our problems when so restricted remain intractable under a variety of additional restrictions on software system structure, both individually and in many combinations. That being said, we also give sets of additional restrictions that do yield tractability for both problems, as well as circumstantial evidence that emergent software system adaptation is computationally easier than emergent software system creation.(and hopefully more manageable) subsystems [14,15]. It is precisely at this current stage of new algorithm development that computational complexity analyses might be most useful.
Previous WorkComputational complexity analyses have been done previously for component-based software system creation by component selection [16,17] and component selection with adaptation [18], with [18,17] having the additional requirement that the number of components in the resulting software system be minimized. Given the intractability of all of these problems, subsequent work has focused on efficient approximation algorithms for component selection. Though it has been shown that efficient algorithms that produce software systems whose number of components is within a constant multiplicative factor of optimal are not possible in general [19], efficient approximation algorithms are known for a number of special cases [20,21,19]. All of these analyses assume that any component can be composed with any other component, in the sense that function definitions not given in a component c can be obtained by composition of c with any other components that have the required function definitions, i.e., component composition is not regulated using component interfaces. Moreover, none of the formalizations used include specification of the internal structure of software systems, system requirements, and components that are detailed enough to allow investigation of restrictions on these aspects that could make component selection or component selection with adaptation tractable.Only one analysis to date has incorporated a component model which allows investigation of the tractability effects of restrictions ...