A generative development-process pattern language
Pattern languages of program design
The unified software development process
The unified software development process
On the criteria to be used in decomposing systems into modules
Communications of the ACM
Flexibility as a Design Driver
Computer
Scenario-Based Analysis of Software Architecture
IEEE Software
`Calls Considered Harmful' and Other Observations: A Tutorial on Telephony
ACoS '98/VISUAL '98, AIN '97 Selected papers on Services and Visualization: Towards User-Friendly Design
Evolution in Open Source Software: A Case Study
ICSM '00 Proceedings of the International Conference on Software Maintenance (ICSM'00)
Flexibility as a Design Driver
Computer
Hi-index | 0.00 |
Evolving software gets more complex in each increment. As real-life increments tend to be additive rather than upgrades with more fundamental purpose, the underlying code base keeps extending. With such increments, the associated core architecture of the system gets more and more difficult to modify, because an increasing number of functions are attached to it. Therefore, only the first versions of systems can be properly architected, whereas later versions rely on an already existing architecture into which new features are reflected as change requests. Due to this reason, architecture and high-level design in the scope of evolved software systems becomes primarily impact analysis and reengineering, and only secondarily design of new software artifacts, especially when considering large systems that have a long history. Every now and then, however, it may be possible to upgrade very core structures of a system, resulting in a new generation of the system. Understanding of these basic phenomena gives rise to practices that compensate the increase of complexity of software during software evolution.