
Software Technology
Description
Alles über E-Books | Antworten auf Fragen rund um E-Books, Kopierschutz und Dateiformate finden Sie in unserem Info- & Hilfebereich.
This book is a compendium of extended and revised publications that have appeared in the "Software Technologies" column of IEEE Computer magazine, which covers key topics in software engineering such as software development, software correctness and related techniques, cloud computing, self-managing software and self-aware systems. Emerging properties of software technology are also discussed in this book, which will help refine the developing framework for creating the next generation of software technologies and help readers predict future developments and challenges in the field.
Software Technology provides guidance on the challenges of developing software today and points readers to where the best advances are being made. Filled with one insightful article after another, the book serves to inform the conversation about the next wave of software technology advances and applications. In addition, the book:
* Introduces the software landscape and challenges associated with emerging technologies
* Covers the life cycle of software products, including concepts, requirements, development, testing, verification, evolution, and security
* Contains rewritten and updated articles by leaders in the software industry
* Covers both theoretical and practical topics
Informative and thought-provoking throughout, Software Technology is a valuable book for everyone in the software engineering community that will inspire as much as it will teach all who flip through its pages.
More details
Other editions
Additional editions


Person
Mike Hinchey, PhD, is a Professor and former Director of Lero - the Irish Software Research Centre at the University of Limerick, Ireland. Dr. Hinchey is also the President of the International Federation for Information Processing (IFIP), a former column editor for Software Technologies (IEEE Computer Magazine), and a senior member of the IEEE. He is the author of more than 200 papers, and has written multiple books.
Content
Foreword xv
Preface xix
Acknowledgments xxiii
List of Contributors xxv
Part I The Software Landscape 1
1 Software Crisis 2.0 3 Brian Fitzgerald
1.1 Software Crisis 1.0 3
1.2 Software Crisis 2.0 5
1.2.1 Hardware Advances 6
1.2.2 "Big Data" 8
1.2.3 Digital Natives Lifelogging and the Quanti¿ed Self 9
1.2.4 Software-De¿ned* 10
1.3 Software Crisis 2.0: The Bottleneck 10
1.3.1 Signi¿cant Increase in Volume of Software Required 11
1.3.2 New Skill Sets Required for Software Developers 12
1.4 Conclusion 13
References 14
2 Simplicity as a Driver for Agile Innovation 17 Tiziana Margaria and Bernhard Steffen
2.1 Motivation and Background 17
2.2 Important Factors 20
2.3 The Future 22
2.4 Less Is More: The 80/20 Principle 27
2.5 Simplicity: A Never Ending Challenge 28
2.6 IT Speci¿cs 29
2.7 Conclusions 29
Acknowledgments 30
References 30
3 Intercomponent Dependency Issues in Software Ecosystems 35 Maëlick Claes, Alexandre Decan, and Tom Mens
3.1 Introduction 35
3.2 Problem Overview 36
3.2.1 Terminology 36
3.2.2 Identifying and Retrieving Dependency Information 38
3.2.3 Satisfying Dependencies and Con¿icts 39
3.2.4 Component Upgrade 40
3.2.5 Inter-Project Cloning 41
3.3 First Case Study: Debian 42
3.3.1 Overview of Debian 42
3.3.2 Aggregate Analysis of Strong Con¿icts 44
3.3.3 Package-Level Analysis of Strong Con¿icts 45
3.4 Second Case Study: The R Ecosystem 46
3.4.1 Overview of R 46
3.4.2 R Package Repositories 47
3.4.3 Interrepository Dependencies 50
3.4.4 Intrarepository Dependencies 52
3.5 Conclusion 53
Acknowledgments 54
References 54
4 Triangulating Research Dissemination Methods: A Three-Pronged Approach to Closing the Research-Practice Divide 58 Sarah Beecham, Ita Richardson, Ian Sommerville, Padraig O'Leary, Sean Baker, and John Noll
4.1 Introduction 58
4.2 Meeting the Needs of Industry 60
4.2.1 Commercialization Feasibility Study 61
4.2.2 Typical GSE Issues Were Reported 62
4.3 The Theory-Practice Divide 63
4.3.1 Making Research Accessible 64
4.3.2 Where Do Practitioners Really Go for Support? 65
4.4 Solutions: Rethinking Our Dissemination Methods 66
4.4.1 Workshops, Outreach, and Seminars 66
4.4.2 Case Studies 69
4.4.3 Action Research 70
4.4.4 Practitioner Ph.D.'s 71
4.4.5 Industry Fellowships 73
4.4.6 Commercializing Research 74
4.5 Obstacles to Research Relevance 76
4.5.1 The (IR) Relevance of Academic Software Engineering Research 76
4.5.2 Barriers to Research Commercialization 77
4.5.3 Academic Barriers to Commercialization 78
4.5.4 Business Barriers to Commercialization 79
4.5.5 Organizational Barriers to Commercialization 80
4.5.6 Funding Barriers to Commercialization 81
4.6 Conclusion 84
4.6.1 Research and Practice Working Together to Innovate 85
4.6.2 Final Thoughts 86
Acknowledgments 86
References 86
Part II Autonomous Software Systems 91
5 Apoptotic Computing: Programmed Death by Default for Software Technologies 93 Roy Sterritt and Mike Hinchey
5.1 Biological Apoptosis 93
5.2 Autonomic Agents 94
5.3 Apoptosis within Autonomic Agents 96
5.4 NASA SWARM Concept Missions 98
5.5 The Evolving State-of-the-Art Apoptotic Computing 100
5.5.1 Strong versus Weak Apoptotic Computing 100
5.5.2 Other Research 101
5.6 "This Message Will Self-Destruct": Commercial Applications 102
5.7 Conclusion 102
Acknowledgments 103
References 103
6 Requirements Engineering for Adaptive and Self-Adaptive Systems 107 Emil Vassev and Mike Hinchey
6.1 Introduction 107
6.2 Understanding ARE 108
6.3 System Goals and Goals Models 109
6.4 Self-* Objectives and Autonomy-Assistive Requirements 111
6.4.1 Constraints and Self-* Objectives 113
6.4.2 Mission Analysis and Self-* Objectives 114
6.5 Recording and Formalizing Autonomy Requirements 116
6.5.1 ARE Requirements Chunk 117
6.6 Conclusion 118
Acknowledgments 119
References 119
7 Toward Arti¿cial Intelligence through Knowledge Representation for Awareness 121 Emil Vassev and Mike Hinchey
7.1 Introduction 121
7.2 Knowledge Representation 122
7.2.1 Rules 122
7.2.2 Frames 122
7.2.3 Semantic Networks and Concept Maps 122
7.2.4 Ontologies 123
7.2.5 Logic 123
7.2.6 Completeness and Consistency 124
7.2.7 Reasoning 125
7.2.8 Technologies 125
7.3 KnowLang 126
7.3.1 Modeling Knowledge with KnowLang 127
7.3.2 Knowledge Representation for Self-Adaptive Behavior 129
7.3.3 Case Study 129
7.4 Awareness 131
7.4.1 Classes of Awareness 132
7.4.2 Structuring Awareness 133
7.4.3 Implementing Awareness 134
7.5 Challenges and Conclusion 136
References 136
Part III Software Development and Evolution 139
8 Continuous Model-Driven Engineering 141 Tiziana Margaria, Anna-Lena Lamprecht, and Bernhard Steffen
8.1 Introduction 141
8.2 Continuous Model-Driven Engineering 143
8.3 CMDE in Practice 147
8.4 Conclusion 150
Acknowledgment 150
References 151
9 Rethinking Functional Requirements: A Novel Approach Categorizing System and Software Requirements 155 Manfred Broy
9.1 Introduction 155
9.2 Discussion: Classifying Requirements - Why and How 158
9.2.1 On Classifying Requirements as Being Functional 158
9.2.2 "Nonfunctional" Requirements and Their Characterization 159
9.2.3 Limitations of Classi¿cation Due to Heterogeneity and Lacking Precision 160
9.2.4 Approach: System Model-Based Categorization of Requirements 162
9.3 The System Model 164
9.3.1 The Basics: System Modeling Ontology 164
9.3.2 System Views and Levels of Abstractions 171
9.3.3 Structuring Systems into Views 172
9.4 Categorizing System Properties 172
9.4.1 System Behavior: Behavioral Properties 173
9.4.2 Variations in Modeling System Behavior 175
9.4.3 System Context: Properties of the Context 176
9.4.4 Nonbehavioral System Properties: System Representation 177
9.5 Categorizing Requirements 178
9.5.1 A Rough Categorization of Requirements 179
9.5.2 A Novel Taxonomy of Requirements? 183
9.6 Summary 186
Acknowledgments 187
References 187
10 The Power of Ten-Rules for Developing Safety Critical Code 188 Gerard J. Holzmann
10.1 Introduction 188
10.2 Context 189
10.3 The Choice of Rules 190
10.4 Ten Rules for Safety Critical Code 192
10.5 Synopsis 200
References 201
11 Seven Principles of Software Testing 202 Bertrand Meyer
11.1 Introduction 202
11.2 De¿ning Testing 202
11.3 Tests and Speci¿cations 203
11.4 Regression Testing 204
11.5 Oracles 204
11.6 Manual and Automatic Test Cases 205
11.7 Testing Strategies 205
11.8 Assessment Criteria 206
11.9 Conclusion 207
References 207
12 Analyzing the Evolution of Database Usage in Data-Intensive Software Systems 208 Loup Meurice, Mathieu Goeminne, Tom Mens, Csaba Nagy, Alexandre Decan, and Anthony Cleve
12.1 Introduction 208
12.2 State of the Art 210
12.2.1 Our Own Research 211
12.3 Analyzing the Usage of ORM Technologies in Database-Driven Java Systems 212
12.4 Coarse-Grained Analysis of Database Technology Usage 215
12.4.5 Discussion 222
12.5 Fine-Grained Analysis of Database Technology Usage 222
12.5.1 Analysis Background 222
12.5.2 Conceptual Schema 224
12.5.3 Metrics 226
12.5.4 Discussion 235
12.6 Conclusion 236
12.7 Future Work 237
Acknowledgments 238
References 238
Part IV Software Product Lines and Variability 41
13 Dynamic Software Product Lines 243 Svein Hallsteinsen, Mike Hinchey, Sooyong Park, and Klaus Schmid
13.1 Introduction 243
13.2 Product Line Engineering 243
13.3 Software Product Lines 244
13.4 Dynamic SPLs 245
References 246
14 Cutting-Edge Topics on Dynamic Software Variability 247 Rafael Capilla, Jan Bosch, and Mike Hinchey
14.1 Introduction 247
14.2 The Postdeployment Era 248
14.3 Runtime Variability Challenges Revisited 249
14.4 What Industry Needs from Variability at Any Time? 253
14.5 Approaches and Techniques for Dynamic Variability Adoption 255
14.6 Summary 266
14.7 Conclusions 267
References 268
Part V Formal Methods 271
15 The Quest for Formal Methods in Software Product Line Engineering 273 Reiner Hähnle and Ina Schaefer
15.1 Introduction 273
15.2 SPLE: Bene¿ts and Limitations 274
15.3 Applying Formal Methods to SPLE 275
15.4 The Abstract Behavioral Speci¿cation Language 277
15.5 Model-Centric SPL Development with ABS 279
15.6 Remaining Challenges 280
15.6.4 Maintenance 280
15.7 Conclusion 281
References 281
16 Formality, Agility, Security, and Evolution in Software Engineering 282 Jonathan P. Bowen, Mike Hinchey, Helge Janicke, Martin Ward, and Hussein Zedan
16.1 Introduction 282
16.2 Formality 283
16.3 Agility 283
16.4 Security 284
16.5 Evolution 285
16.6 Conclusion 289
Acknowledgments 290
References 290
Part VI Cloud Computing 293
17 Cloud Computing: An Exploration of Factors Impacting Adoption 295 Lorraine Morgan and Kieran Conboy
17.1 Introduction 295
17.2 Theoretical Background 296
17.3 Research Method 298
17.4 Findings and Analysis 303
17.4.2 Organizational Factors Impacting Adoption 306
17.4.3 Environmental Factors Impacting Adoption 308
17.5 Discussion and Conclusion 310
17.5.1 Limitations and Future Research 311
References 311
18 A Model-Centric Approach to the Design of Resource-Aware Cloud Applications 315 Reiner Hähnle and Einar Broch Johnsen
18.1 Capitalizing on the Cloud 315
18.2 Challenges 316
18.2.1 Empowering the Designer 316
18.2.2 Deployment Aspects at Design Time 316
18.3 Controlling Deployment in the Design Phase 318
18.4 ABS: Modeling Support for Designing Resource-Aware Applications 319
18.5 Resource Modeling with ABS 320
18.6 Opportunities 324
18.6.1 Fine-Grained Provisioning 324
18.6.2 Tighter Provisioning 324
18.6.3 Application-Speci¿c Resource Control 324
18.6.4 Application-Controlled Elasticity 324
18.7 Summary 325
Acknowledgments 325
References 325
Index 327
1
Software Crisis 2.0
Brian Fitzgerald
Lero - The Irish Software Research Centre, University of Limerick, Limerick, Ireland
1.1 Software Crisis 1.0
In 1957, the eminent computer scientist, Edsger Dijkstra, sought to record his profession as "Computer Programmer" on his marriage certificate. The Dutch authorities, probably more progressive than most, refused on the grounds that there was no such profession. Ironically, just a decade later, the term "software crisis" had been coined, as delegates at an international conference in 1968 reported a common set of problems, namely that software took too long to develop, cost too much to develop, and the software which was eventually delivered did not meet user expectations.
In the early years of computing during the 1940s, the computer was primarily used for scientific problem solving. A computer was needed principally because of its speed of mathematical capability, useful in areas such as the calculation of missile trajectories, aerodynamics, and seismic data analysis. The users of computers at the time were typically scientific researchers with a strong mathematical or engineering background who developed their own programs to address the particular areas in which they were carrying out research. For example, one of the early computers, ENIAC (Electronic Numerical Integrator and Calculator), which became operational in 1945, by the time it was taken out of service in 1955 "had probably done more arithmetic than had been done by the whole human race prior to 1945" [1].
During the 1950s, the use of computers began to spread beyond that of scientific problem solving to address the area of business data processing [2]. These early data processing applications were concerned with the complete and accurate capture of the organization's business transactions, and with automating routine clerical tasks to make them quicker and more accurate. This trend quickly spread, and by 1960, the business data processing use of computers had overtaken the scientific one [3]. Once underway, the business use of computers accelerated at an extremely rapid rate. The extent of this rapid expansion is evidenced by the fact that in the United States, the number of computer installations increased more than twentyfold between 1960 and 1970 [4].
However, this rapid expansion did not occur without accompanying problems. The nature of business data processing was very different from the computation-intensive nature of scientific applications. Business applications involved high volumes of input and output, but the input and output peripherals at the time were very slow and inefficient. Also, memory capacity was very limited, and this led to the widespread conviction among developers that good programs were efficient programs, rather than clear, well-documented, and easily understood programs [3]. Given these problems, writing programs required much creativity and resourcefulness on the part of the programmer. Indeed, it was recognized that it was a major achievement to get a program to run at all in the early 1960s [5].
Also, there was no formal training for developers. Programming skills could only be learned through experience. Some programmers were drawn from academic and scientific environments and thus had some prior experience. However, many programmers converted from a diverse range of departments. As Friedman [3] describes it
People were drawn from very many areas of the organization into the DP department, and many regarded it as an 'unlikely' accident that they became involved with computers.
Also, during the 1960s, the computer began to be applied to more complex and less-routinized business areas. Aron [6] identifies a paradox in that as the early programmers improved their skills, there was a corresponding increase in the complexity of the problem areas for which programs had to be written.
Thus, while the term "software" was only introduced in 1958 [7], within 10 years, problems in the development of software led to the coining of the phrase "software crisis" at the NATO Conference in Garmisch [8]. The software crisis referred to the reality that software took longer to develop and cost more than estimated, and did not work very well when eventually delivered.
Over the years, several studies have confirmed these three aspects of the software crisis. For example, in relation to development timescales: Flaatten et al. [9] estimated development time for the average project to be about 18 months - a conservative figure perhaps given that other estimates put the figure at about 3 years [10] or even up to 5 years [11]. Also, an IBM study estimated that 68% of projects overran schedules [12]. In relation to the cost, the IBM study suggested that development projects were as much as 65% over budget [12], while a Price Waterhouse study in the United Kingdom in 1988 concluded that £500 million was being lost per year through ineffective development. Furthermore, in relation to performance, the IBM study found that 88% of systems had to be radically redesigned following implementation [12]. Similarly, a UK study found that 75% of systems delivered failed to meet users expectations. This has led to the coining of the term "shelfware" to refer to those systems that are delivered but never used.
Notwithstanding the bleak picture painted above, the initial software crisis has largely been resolved, while the Standish Chaos Report continues to report high rates of software project failure - estimated at 68%, for example [13].1 Although there has been no "silver bullet" advance, using Brooks [16] term, which affords an order of magnitude improvement in software development productivity, a myriad of advances have been made in more incremental ways, and software is now routinely delivered on time, within budget, and meets user requirements well. Software is really the success story of modern life. Everything we do, how we work, travel, communicate, entertain ourselves has been dramatically altered and enhanced by the capabilities provided by software.
1.2 Software Crisis 2.0
However, a new software crisis is now upon us, one that I term "Software Crisis 2.0." Software Crisis 2.0 is fuelled by a number of "push factors" and "pull factors." Push factors include advances in hardware such as that perennially afforded by Moore's law, multiprocessor and parallel computing, big memory servers, IBM's Watson platform, and quantum computing. Also, concepts such as the Internet of Things and Systems of Systems have led to unimaginable amounts of raw data that fuel the field of data analytics. Pull factors include the insatiable appetite of digital native consumers - those who have never known life without computer technology - for new applications to deliver initiatives such as the quantified self, lifelogging, and wearable computing. Also, the increasing role of software is evident in the concept of software-defined * (where * can refer to networking, infrastructure, data center, enterprise). The Software Crisis 2.0 bottleneck arises from the inability to produce the volume of software necessary to leverage the absolutely staggering increase in the volume of data being generated, which in turn allied to the enormous amount of computational power offered by the many hardware devices also available, and both complemented by the appetite of the newly emerged "digital native" consumer and a world where increasingly software is increasingly the key enabler (see Figure 1.1).
Figure 1.1 Software Crisis 2.0.
1.2.1 Hardware Advances
There are many eye-catching figures and statistics that illustrate the enormous advances in the evolution of hardware capacity over the past half-century or so. Moore's law, for example, predicted the doubling of hardware capacity roughly every 18 months or so. To illustrate this in a more familiar context, if one had invested just a single dollar in some shares when Moore was declaring his prediction initially in 1964, and if the stock market return on this shares had kept pace accordingly with Moore's prediction, the individual's net worth would now exceed $17 billion - not bad for a $1 investment. On each occasion when hardware appears to be halted due to an insurmountable challenge in the fundamental laws of physics - the impurity of atoms, sculpting light-wavelength limits, heat generation, radiation-induced forgetfulness, for example - new advances have emerged to overcome these problems as we move into the quantum computing area.
Moore's law is paralleled by similar "laws" in relation to storage capacity (Kryder's law) and network capacity (Butter's law) that portray similar exponential performance with decreasing costs. Big memory servers are disrupting the technology landscape with servers now capable of providing terabytes of physical memory. This has led to the observation that disks have become the new magnetic tape, as it is now possible to use physical memory for random access operations and to reserve the traditional random access disk for purely sequential operations.
1.2.1.1 Parallel Processing
In the era of Software Crisis 1.0, the programming paradigm was one based on serial computation. Instructions were executed one at a time on a single processor. Parallel processing allows programs to...
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.