
Software Evolution and Maintenance
Description
Alles über E-Books | Antworten auf Fragen rund um E-Books, Kopierschutz und Dateiformate finden Sie in unserem Info- & Hilfebereich.
More details
Other editions
Additional editions

Persons
Content
Preface xiii
List of Figures xvii
List of Tables xxi
1 Basic Concepts and Preliminaries 1
1.1 Evolution Versus Maintenance, 1
1.1.1 Software Evolution, 3
1.1.2 Software Maintenance, 4
1.2 Software Evolution Models and Processes, 6
1.3 Reengineering, 9
1.4 Legacy Systems, 11
1.5 Impact Analysis, 12
1.6 Refactoring, 13
1.7 Program Comprehension, 14
1.8 Software Reuse, 15
1.9 Outline of the Book, 16
References, 18
Exercises, 23
2 Taxonomy of Software Maintenance and Evolution 25
2.1 General Idea, 25
2.1.1 Intention-Based Classification of Software Maintenance, 26
2.1.2 Activity-Based Classification of Software Maintenance, 28
2.1.3 Evidence-Based Classification of Software Maintenance, 28
2.2 Categories of Maintenance Concepts, 37
2.2.1 Maintained Product, 37
2.2.2 Maintenance Types, 40
2.2.3 Maintenance Organization Processes, 41
2.2.4 Peopleware, 43
2.3 Evolution of Software Systems, 44
2.3.1 SPE Taxonomy, 46
2.3.2 Laws of Software Evolution, 49
2.3.3 Empirical Studies, 54
2.3.4 Practical Implications of the Laws, 56
2.3.5 Evolution of FOSS Systems, 58
2.4 Maintenance of Cots-Based Systems, 61
2.4.1 Why Maintenance of CBS Is Difficult?, 62
2.4.2 Maintenance Activities for CBSs, 65
2.4.3 Design Properties of Component-Based Systems, 67
2.5 Summary, 70
Literature Review, 73
References, 75
Exercises, 80
3 Evolution and Maintenance Models 83
3.1 General Idea, 83
3.2 Reuse-Oriented Model, 84
3.3 The Staged Model for Closed Source Software, 87
3.4 The Staged Model for Free, Libre, Open Source Software, 90
3.5 Change Mini-Cycle Model, 91
3.6 IEEE/EIA Maintenance Process, 94
3.7 ISO/IEC 14764 Maintenance Process, 99
3.8 Software Configuration Management, 111
3.8.1 Brief History, 112
3.8.2 SCM Spectrum of Functionality, 113
3.8.3 SCM Process, 117
3.9 CR Workflow, 119
3.10 Summary, 125
Literature Review, 126
References, 129
Exercises, 131
4 Reengineering 133
4.1 General Idea, 133
4.2 Reengineering Concepts, 135
4.3 A General Model for Software Reengineering, 137
4.3.1 Types of Changes, 140
4.3.2 Software Reengineering Strategies, 141
4.3.3 Reengineering Variations, 143
4.4 Reengineering Process, 144
4.4.1 Reengineering Approaches, 144
4.4.2 Source Code Reengineering Reference Model, 146
4.4.3 Phase Reengineering Model, 150
4.5 Code Reverse Engineering, 153
4.6 Techniques Used for Reverse Engineering, 156
4.6.1 Lexical Analysis, 157
4.6.2 Syntactic Analysis, 157
4.6.3 Control Flow Analysis, 157
4.6.4 Data Flow Analysis, 158
4.6.5 Program Slicing, 158
4.6.6 Visualization, 160
4.6.7 Program Metrics, 162
4.7 Decompilation Versus Reverse Engineering, 164
4.8 Data Reverse Engineering, 165
4.8.1 Data Structure Extraction, 168
4.8.2 Data Structure Conceptualization, 169
4.9 Reverse Engineering Tools, 170
4.10 Summary, 174
Literature Review, 176
References, 178
Exercises, 185
5 Legacy Information Systems 187
5.1 General Idea, 187
5.2 Wrapping, 189
5.2.1 Types of Wrapping, 189
5.2.2 Levels of Encapsulation, 191
5.2.3 Constructing a Wrapper, 192
5.2.4 Adapting a Program for Wrapper, 194
5.2.5 Screen Scraping, 194
5.3 Migration, 195
5.4 Migration Planning, 196
5.5 Migration Methods, 202
5.5.1 Cold Turkey, 202
5.5.2 Database First, 203
5.5.3 Database Last, 204
5.5.4 Composite Database, 205
5.5.5 Chicken Little, 206
5.5.6 Butterfly, 208
5.5.7 Iterative, 212
5.6 Summary, 217
Literature Review, 218
References, 219
Exercises, 221
6 Impact Analysis 223
6.1 General Idea, 223
6.2 Impact Analysis Process, 225
6.2.1 Identifying the SIS, 228
6.2.2 Analysis of Traceability Graph, 229
6.2.3 Identifying the Candidate Impact Set, 231
6.3 Dependency-Based Impact Analysis, 234
6.3.1 Call Graph, 234
6.3.2 Program Dependency Graph, 235
6.4 Ripple Effect, 238
6.4.1 Computing Ripple Effect, 238
6.5 Change Propagation Model, 242
6.5.1 Recall and Precision of Change Propagation Heuristics, 243
6.5.2 Heuristics for Change Propagation, 245
6.5.3 Empirical Studies, 246
6.6 Summary, 247
Literature Review, 248
References, 249
Exercises, 253
7 Refactoring 255
7.1 General Idea, 255
7.2 Activities in a Refactoring Process, 258
7.2.1 Identify What to Refactor, 258
7.2.2 Determine Which Refactorings Should be Applied, 259
7.2.3 Ensure that Refactoring Preserves the Behavior of the Software, 261
7.2.4 Apply the Refactorings to the Chosen Entities, 262
7.2.5 Evaluate the Impacts of the Refactorings on Quality, 263
7.2.6 Maintain Consistency of Software Artifacts, 265
7.3 Formalisms for Refactoring, 265
7.3.1 Assertions, 265
7.3.2 Graph Transformation, 266
7.3.3 Software Metrics, 267
7.4 More Examples of Refactorings, 271
7.5 Initial Work on Software Restructuring, 273
7.5.1 Factors Influencing Software Structure, 273
7.5.2 Classification of Restructuring Approaches, 275
7.5.3 Restructuring Techniques, 276
7.6 Summary, 282
Literature Review, 283
References, 286
Exercises, 288
8 Program Comprehension 289
8.1 General Idea, 289
8.2 Basic Terms, 291
8.2.1 Goal of Code Cognition, 291
8.2.2 Knowledge, 291
8.2.3 Mental Model, 293
8.2.4 Understanding Code, 296
8.3 Cognition Models for Program Understanding, 298
8.3.1 Letovsky Model, 298
8.3.2 Shneiderman and Mayer Model, 301
8.3.3 Brooks Model, 303
8.3.4 Soloway, Adelson, and Ehrlich Model, 308
8.3.5 Pennington Model, 310
8.3.6 Integrated Metamodel, 312
8.4 Protocol Analysis, 315
8.5 Visualization for Comprehension, 317
8.6 Summary, 321
Literature Review, 321
References, 322
Exercises, 324
9 Reuse and Domain Engineering 325
9.1 General Idea, 325
9.1.1 Benefits of Reuse, 327
9.1.2 Reuse Models, 327
9.1.3 Factors Influencing Reuse, 328
9.1.4 Success Factors of Reuse, 329
9.2 Domain Engineering, 329
9.2.1 Draco, 331
9.2.2 DARE, 331
9.2.3 FAST, 331
9.2.4 FORM, 331
9.2.5 KobrA, 332
9.2.6 PLUS, 332
9.2.7 PuLSE, 332
9.2.8 Koala, 332
9.2.9 RSEB, 332
9.3 Reuse Capability, 333
9.4 Maturity Models, 334
9.4.1 Reuse Maturity Model, 334
9.4.2 Reuse Capability Model, 336
9.4.3 RiSE Maturity Model, 338
9.5 Economic Models of Software Reuse, 340
9.5.1 Cost Model of Gaffney and Durek, 346
9.5.2 Application System Cost Model of Gaffney and Cruickshank, 348
9.5.3 Business Model of Poulin and Caruso, 350
9.6 Summary, 352
Literature Review, 352
References, 353
Exercises, 356
Glossary 359
Index 379
1
BASIC CONCEPTS AND PRELIMINARIES
Another flaw in the human character is that everybody wants to build and nobody wants to do maintenance.
-Kurt Vonnegut, Jr.
1.1 EVOLUTION VERSUS MAINTENANCE
In 1965, Mark Halpern introduced the concept of software evolution to describe the growth characteristics of software [1]. Later, the term "evolution" in the context of application software was widely used. The concept further attracted the attentions of researchers after Belady and Lehman published a set of principles determining evolution of software systems [2, 3]. The principles were very general in nature. In his landmark article entitled "The Maintenance 'Iceberg'," R. G. Canning compared software maintenance to an "iceberg" to emphasize the fact that software developers and maintenance personnel face a large number of problems [4]. A few years later, in 1976, Swanson introduced the term "maintenance" by grouping the maintenance activities into three basic categories: corrective, adaptive, and perfective [5]. In the early 1970s, IBM called them "maintenance engineers" or "maintainers" who had been making intentional modifications to running code that they had not developed themselves. The main reason for using nondevelopment personnel in maintenance work was to free up the software development engineers or programmers from support activities [6]. In this book, we will use maintainer, maintenance engineer, developer, and programmer interchangeably.
Bennett and Rajlich [7] researched the term "software evolution" and found that there is no widely accepted definition of the term. In addition, some researchers and practitioners used the phrases "software evolution" and "software maintenance" interchangeably. However, key semantic differences exist between the two. The two are distinguished as follows:
- The concept of software maintenance means preventing software from failing to deliver the intended functionalities by means of bug fixing.
- The concept of software evolution means a continual change from a lesser, simpler, or worse state to a higher or better state ([8], p. 1).
Bennett and Xu [9] made further distinctions between the two as follows:
- All support activities carried out after delivery of software are put under the category of maintenance.
- All activities carried out to effect changes in requirements are put under the category of evolution.
In general, maintenance and evolution are generally differentiated as follows [10]:
- Maintenance of software systems primarily means fixing bugs but preserving their functionalities. Maintenance tasks are very much planned. For example, bug fixing must be done and it is a planned activity. In addition to the planned activities, unplanned activities are also necessitated. For example, a new usage of the system may emerge. Generally, maintenance does not involve making major changes to the architecture of the system. In other words, maintenance means keeping an installed system running with no change to its design [11].
- Evolution of software systems means creating new but related designs from existing ones. The objectives include supporting new functionalities, making the system perform better, and making the system run on a different operating system. Basically, as time passes, the stakeholders develop more knowledge about the system. Therefore, the system evolves in several ways. As time passes, not only new usages emerge, but also the users become more knowledgeable. As Mehdi Jazayeri observed: "Over time what evolves is not the software but our knowledge about a particular type of software" ([12], p. 3).
While we are on the topic of maintenance, it is useful to glance at the maintenance of physical systems. Maintenance of physical systems often requires replacing broken and worn-out parts. For example, owners replace the worn-out tires and broken lamps of their cars. Similarly, a malfunctioning memory card is replaced with a good one. On the other hand, software maintenance is different than hardware maintenance. In hardware maintenance, a system or a component is returned to its original good state. On the other hand, in software maintenance, a software system is moved from its original erroneous state to an expected good state [13]. Software maintenance comprises all activities associated with the process of changing software for the purposes of:
- fixing bugs; and/or
- improving the design of the system so that future changes to the system are less expensive.
1.1.1 Software Evolution
Although the phrase "software evolution" had been used previously by other researchers, fundamental work in the field of software evolution was done by Lehman and his collaborators. Based on empirical studies [2, 14], Lehman and his collaborators formulated some observations and they introduced them as laws of evolution. The "laws" themselves have "evolved" from three in 1974 to eight by 1997 [15, 16]. Those laws are the results of studies of the evolution of large-scale proprietary or closed source software (CSS) systems. The laws concern a category of software systems called E-type systems. The eight laws are briefly explained as follows:
- Continuing change. Unless a system is continually modified to satisfy emerging needs of users, the system becomes increasingly less useful.
- Increasing complexity. Unless additional work is done to explicitly reduce the complexity of a system, the system will become increasingly more complex due to maintenance-related changes.
- Self-regulation. The evolution process is self-regulating in the sense that the measures of products and processes, that are produced during the evolution, follow close to normal distributions.
- Conservation of organizational stability. The average effective global activity rate on an evolving system is almost constant throughout the lifetime of the system. In other words, the average amount of additional effort needed to produce a new release is almost the same.
- Conservation of familiarity. As a system evolves all kinds of personnel, namely, developers and users, for example, must gain a desired level of understanding of the system's content and behavior to realize satisfactory evolution. A large incremental growth in a release reduces that understanding. Therefore, the average incremental growth in an evolving system remains almost the same.
- Continuing growth. As time passes, the functional content of a system is continually increased to satisfy user needs.
- Declining quality. Unless the design of a system is diligently fine-tuned and adapted to new operational environments, the system's qualities will be perceived as declining over the lifetime of the system.
- Feedback system. The system's evolution process involves multi-loop, multi-agent, multi-level feedback among different kinds of activities. Developers must recognize those complex interactions in order to continually evolve an existing system to deliver more functionalities and higher levels of qualities.
In circa 1988, Pirzada [17] was the first one to study the differences between the evolution of the Unix operating system developed by Bell Laboratories and the systems studied by Lehman and Belady [18]. Pirzada argued that the differences in academic and industrial software development could lead to differences in the evolutionary pattern. In circa 2000, after a gap of 12 years, empirical study of evolution of free and open source software (FOSS) was conducted by Godfrey and Tu [19]. The authors provided the trend of growth of the popular FOSS operating system Linux during 1994-1999. They showed the growth rate to be super-linear that is greater than linear. Robles et al. [20] later replicated the study of Godfrey and Tu and concluded that Lehman's laws Nos. 3, 4, and 5 do not hold for large-scale FOSS systems such as Linux. These studies reveal the changing nature of both software and software development processes. Lehman's studies mostly examined proprietary, monolithic systems developed by a team of developers within a company, whereas FOSS systems and their developments follow a different evolution paradigm.
Remark: FOSS is available to all with relaxed or nonexistent copyrights. FOSS is commonly used as a synonym for free software even though "free" and "open" have different semantics. The term "free" means the freedom to modify and redistribute the system under the terms of the original agreement, while "open" means accessibility to the source code.
1.1.2 Software Maintenance
More likely than not, there are defects in delivered software applications, because defect removal and quality control processes are not perfect. Therefore, maintenance is needed to repair those defects in released software. E. Burton Swanson [5] initially defined three categories of software maintenance activities, namely, corrective, adaptive, and perfective. Those definitions were later incorporated into the standard software engineering-software life cycle processes-Maintenance [21] and introduced a fourth category called preventive maintenance. The reader may...
System requirements
File format: ePUB
Copy protection: Adobe-DRM (Digital Rights Management)
System requirements:
- Computer (Windows; MacOS X; Linux): Install the free reader Adobe Digital Editions prior to download (see eBook Help).
- Tablet/smartphone (Android; iOS): Install the free app Adobe Digital Editions or the app PocketBook before downloading (see eBook Help).
- E-reader: Bookeen, Kobo, Pocketbook, Sony, Tolino and many more (not Kindle).
The file format ePub works well for novels and non-fiction books – i.e., „flowing” text without complex layout. On an e-reader or smartphone, line and page breaks automatically adjust to fit the small displays.
This eBook uses Adobe-DRM, a „hard” copy protection. If the necessary requirements are not met, unfortunately you will not be able to open the eBook. You will therefore need to prepare your reading hardware before downloading.
Please note: We strongly recommend that you authorise using your personal Adobe ID after installation of any reading software.
For more information, see our ebook Help page.