Composing Software Components (eBook)

A Software-testing Perspective

(Autor)

eBook Download: PDF
2010 | 2010
XVII, 368 Seiten
Springer US (Verlag)
978-1-4419-7148-7 (ISBN)

Lese- und Medienproben

Composing Software Components -  Dick Hamlet
Systemvoraussetzungen
149,79 inkl. MwSt
  • Download sofort lieferbar
  • Zahlungsarten anzeigen

Software components and component-based software development (CBSD) are acknowledged as the best approach for constructing quality software at reasonable cost. Composing Software Components: A Software-testing Perspective describes a 10-year investigation into the underlying principles of CBSD. By restricting attention to the simplest cases, startling results are obtained:

• Components are tested using only executable code. Their behavior is recorded and presented graphically.

• Functional and non-functional behavior of systems synthesized from components are calculated from component tests alone. No access to components themselves is required.

• Fast, accurate tools support every aspect of CBSD from design through debugging.

Case studies of CBSD also illuminate software testing in general, particularly an expanded role for unit testing and the treatment of non-functional software properties.

This unique book:

• Contains more than a dozen case studies of fully worked-out component synthesis, with revealing insights into fundamental testing issues.

• Presents an original, fundamental theory of component composition that includes persistent state and concurrency, based on functional software testing rather than proof-of-programs.

• Comes with free supporting software with tutorial examples and data for replication of examples. The Perl software has been tested on Linux, Macintosh, and Windows platforms. Full documentation is provided.

• Includes anecdotes and insights from the author's 50-year career in computing as systems programmer, manager, researcher, and teacher.

Composing Software Components: A Software-testing Perspective will help software researchers and practitioners to understand the underlying principles of component testing. Advanced students in computer science, engineering, and mathematics can also benefit from the book as a supplemental text and reference.


Software components and component-based software development (CBSD) are acknowledged as the best approach for constructing quality software at reasonable cost. Composing Software Components: A Software-testing Perspective describes a 10-year investigation into the underlying principles of CBSD. By restricting attentionto the simplest cases, startling results are obtained: Components are tested using only executable code. Their behavior is recorded and presented graphically. Functional and non-functional behavior of systems synthesized from components are calculated from component tests alone. No access to components themselves is required. Fast, accurate tools support every aspect of CBSD from design through debugging. Case studies of CBSD also illuminate software testing in general, particularly an expanded role for unit testing and the treatment of non-functional software properties.This unique book: Contains more than a dozen case studies of fully worked-out component synthesis, with revealing insights into fundamental testing issues. Presents an original, fundamental theory of component composition that includes persistent state and concurrency, based on functional software testing rather than proof-of-programs. Comes with free supporting software with tutorial examples and data for replication of examples. The Perl software has been tested on Linux, Macintosh, and Windows platforms. Full documentation is provided. Includes anecdotes and insights from the author's 50-year career in computing as systems programmer, manager, researcher, and teacher.Composing Software Components: A Software-testing Perspective will help software researchers and practitioners to understand the underlying principles of component testing. Advanced students in computer science, engineering, and mathematics can also benefit from the book as a supplemental text and reference.

The Griffin 6
Acknowledgements 7
Contents 8
Chapter 1 15
1.1 A ‘Clear Drop’ 16
1.1.1 Testing Components and Recording Approximations 16
1.1.2 Synthesizing a System 19
1.1.3 Discussion of the Example 20
1.2 Roadmap of this Monograph 22
1.2.1 Theory vs. Practice 23
1.2.2 Formal Theory of Software Testing 24
1.2.3 Exploratory Tools 25
1.2.4 Insights into Component Composition 25
1.2.5 Implications for Testing in General 26
Part I Components and Component-based Development 28
Chapter 2 29
2.1 Standardized Components Make Engineering Possible 29
2.2 Mechanical Engineering of a Vacuum System 31
2.3 Electrical/Computer Engineering of a Laptop 33
2.4 Can It Be Done with Software? 35
Chapter 3 41
3.1 The Parts: Components 42
3.1.1 Common Environment for Software 42
3.1.2 Reuse 43
3.1.3 Information Hiding 44
3.1.4 Object-oriented Design 44
3.1.5 Szyperski’s Definition 45
3.2 The Systems: Component-based Software Development (CBSD) 46
3.2.1 Product Families 48
3.2.2 Component Development and Cataloging 48
3.2.3 System Design using Components 50
3.3 The Viewpoint: Testing Simple Components and Systems 50
3.3.1 Simple Components 50
3.3.2 Simple Systems 51
3.3.3 Critique of the Model 51
Chapter 4 53
4.1 Components and Connectors 53
4.2 System Architecture 55
4.3 Component Models 56
4.3.1 Middleware and Container Services 56
4.4 Immutable Components 57
4.5 Broader Theory of CBSD 58
4.5.1 General Component-based System Design Theory 58
4.5.2 Component-based Verification 60
4.5.3 Testing vs. Proving 61
4.6 Summary of CBSD Issues 62
Chapter 5 65
5.1 ‘Lifecycle’ Models of Development 66
5.1.1 Development Phases 66
5.1.2 Waterfall Models 67
5.1.3 Agile Models 68
5.1.4 Which Model is Best? 69
5.2 Functional/Requirements Testing 70
5.2.1 Unit Testing vs. System Testing 70
5.3 Preventing Bugs 71
5.3.1 Software Inspection 71
5.3.2 Formal Methods 72
5.3.3 Creating Perfection vs. Finding Failure 73
5.4 Testing in CBSD 73
Part II Software Testing: Practice and Theory 64
Chapter 6 75
6.1 Floyd-Hoare-Mills Semantics 75
6.2 Functional Testing Theory 77
6.2.1 Functional Testing Theory without State 77
6.2.2 Extending Functional Theory to Include State 79
6.2.3 Testing Concurrent Software 82
6.3 Summary of Testing Theory 85
Chapter 7 86
7.1 Divide and Conquer (or Multiply and Founder?) 87
7.2 History of ‘Coverage’ Testing 88
7.2.1 Functional Coverage 89
7.2.2 Structural Coverage 90
7.2.3 Combining Functional and Structural Coverage 94
7.3 Usage Profiles 95
7.4 Subdomain Testing in the Presence of State 97
7.5 Concurrency 100
7.6 Comparing Subdomain Techniques 101
7.6.1 The ‘Subsumes’ Partial Ordering 101
7.6.2 Random Testing 102
7.6.3 Comparing Randomand Subdomain-testing 103
Part III Composition of Components 104
Chapter 8 105
8.1 Software Testing is ‘Non-compositional’ 105
8.2 Approximating and Measuring Component Properties 107
8.3 Calculating Properties of Stateless Systems 109
8.3.1 Series System 110
8.3.2 Conditional System Control Structure 113
8.3.3 Iterative System Control Structure 114
8.4 Combining Different Component Approximations 115
8.5 Synthesizing a Component-based System 116
8.5.1 Combining Testing and Proving 116
8.6 Summary of the Subdomain Testing Theory 118
Chapter 9 119
9.1 Getting Started 120
9.2 A Simple Complete Example 121
9.3 Approximation and Prediction Errors 132
9.4 Better Component Approximations 136
9.4.1 Splitting and Adjusting Subdomains 138
9.4.2 Piecewise-linear Component Approximation 138
9.4.3 How Well Can a Component Developer Do? 141
9.5 Internal Profiles 142
9.6 Incremental Processing 145
9.7 Tutorial Summary 146
Chapter 10 147
10.1 Extended Subdomain Theory of Composition 147
10.1.1 Algorithms for Synthesizing Systems from Components with State 148
10.1.2 Verifying the Algorithms 152
10.2 Testing Measurements 153
10.2.1 3-D Graphs and Approximation Errors 153
10.2.2 Equi-spaced vs. Sequence Sampling 154
10.3 System Predictions 155
10.3.1 Synthesis of Systems with State 156
10.4 A Tutorial Example with State 158
10.4.1 Tutorial: Modes (Preferences) 159
Chapter 11 174
11.1 Adding Concurrency to Composition Theory 174
11.1.1 Algorithm for Synthesizing Components in Parallel 175
11.2 Testing Measurements, Behavior Graphs, and System Predictions 176
11.3 A Tutorial Example with Concurrency 177
11.3.1 Tutorial: Multiversion Software 178
Chapter 12 186
12.1 Reliability in Other Engineering Disciplines 186
12.2 Software Reliability Theory 188
12.2.1 Software ‘Time’ Parameter 189
12.2.2 The Minefield Analogy 189
12.2.3 A Speculative Software Failure Rate 191
12.2.4 Measuring Software Failure Rate 195
12.2.5 Failure Rate in Subdomains 198
12.3 Component Independence 199
12.4 Reliability Synthesis 200
12.4.1 Difficulties in Component Measurements 201
12.4.2 Synthesis Rules 201
Part IV Supporting Tools 205
Chapter 13 206
13.1 Component Developers and System Designers 206
13.2 Ideal Tools for I-CBSD 207
13.2.1 Ideal Component-level Testing/Measurement Tools 207
13.2.2 Ideal System-level Synthesis (CAD) Tools 208
13.2.3 SYN Tools: An Existence Proof 208
Chapter 14 209
14.1 Component Conventions 211
14.1.1 Artificial Components 212
14.2 Underlying Algorithms 213
14.3 Execution by Table-lookup 214
14.3.1 Validating Tools 215
14.3.2 A Nasty Mistake 217
14.4 Tool Performance 220
Chapter 15 223
15.1 Debugging Components 223
15.1.1 Checking Tests Against Requirements 224
15.1.2 Executing Code Outside the Tools 225
15.1.3 Finding Good Subdomains 225
15.1.4 Graphical Aids 226
15.2 Debugging Component-based Systems 226
15.2.1 Component Mismatch 229
15.2.2 Interface Profiles 231
15.3 Debugging of Support Tools 232
15.3.1 Problem Decomposition 232
15.3.2 Iterative Enhancement 233
15.3.3 Components and Debugging of Tools 234
Chapter 16 237
16.1 Unstable Algorithms and Code 237
16.2 Improving the SYN Tools 238
16.3 Who’s Next? 240
Part V Case Studies 241
Chapter 17 242
17.1 Better Component Approximation, Better System Prediction 242
17.1.1 Tuning Subdomains with Tool Support 247
17.2 Predicting Prediction Accuracy 250
17.2.1 Prediction Error is Linear in Measurement Error 250
17.2.2 Theory of Error Propagation 251
17.2.3 Prediction Error is an Emergent System Property 254
17.2.4 Approximating System Prediction Errors 255
17.3 Approximation Accuracy as a Component Test-quality Metric 256
17.4 The Right Subdomains for Component Testing 257
Chapter 18 259
18.1 Fundamental Questions about Subdomain Testing 259
18.1.1 How to Sample Subdomains? 260
18.1.2 Is Series Synthesis Associative? 263
18.2 Moving Control Structures between Components and Systems 264
18.2.1 Series Composition within a Component 265
18.2.2 Conditionals in Code and Conditional Components 266
18.2.3 Raising the Level of Programming 268
18.3 Persistent State 268
18.3.1 Infeasible States 268
18.3.2 Modes and Storage in State 272
18.3.3 A Controlled ‘Editor’ System 279
18.4 Iteration at System Level 286
18.5 Component and System Reliability 290
18.6 Substituting one Component for Another 294
18.6.1 Meeting a Non-functional System Requirement Bound 295
Part VI Implications for Software Testing 298
Chapter 19 299
19.1 Components Make Ideal Software ‘Units’ 300
19.1.1 Solving Unit-testing Problems 301
19.1.2 Choosing Unit-test Subdomains 303
19.2 Unit Testing Is More Than it Seems 305
19.2.1 Saving and Using Unit-test Results 305
19.2.2 Unit Tests the Only Tests 305
19.3 Trusting Unit Tests 307
19.3.1 Trustworthy Component Testing 307
19.3.2 Matching Interface Profiles 307
19.4 Comparing System Predictions to Requirements 308
Chapter 20 310
20.1 Non-functional Depends on Functional 310
20.2 Non-functional ‘Compositional’ Properties 311
20.2.1 Run Time 312
20.2.2 Reliability 312
20.2.3 Safety Factors and Prediction Accuracy 313
20.3 Predicting Emergent Properties 314
20.3.1 Memory Leaks 314
20.3.2 Security 315
20.3.3 ‘Emergent’ Prediction Error 316
Chapter 21 318
21.1 Software Components are Unlike Mechanical Components 318
21.2 Software Functions Are Inherently Discontinuous 319
21.2.1 Simple Component Behaviors Lead to Complicated System Behaviors 321
21.3 Testing Theory is Unlike Other Formal Methods 322
21.3.1 Conservative Reductions 322
21.3.2 Special Role of Persistent State 323
21.4 The Several Meanings of ‘Compositional’ 324
21.4.1 Compositional Properties 325
21.4.2 Testing Can Be Made Compositional 325
21.5 Simple Tools are Remarkably Powerful 326
Chapter 22 329
22.1 Subdomain Testing in Non-numeric Domains 329
22.2 Completing a Testing Theory including State 330
22.2.1 Reliability in the Presence of State 330
22.2.2 BetterTools for State 331
22.3 Limited Input Domain 331
Appendix A 341
A.1 Documentation 342
A.2 SYN Documentation Tricks 343
A.2.1 Stand-alone Script Execution 344
A.2.2 Error Messages 344
A.2.3 ‘Message-discovery’ Documentation 346
A.2.4 ‘#debug’ Statements 347
A.2.5 The Script Header Comments 347
A.3 Details of the Tool Scripts 347
A.3.1 File Formats 348
A.3.2 Testing and Approximating Components:and friends 351
A.3.3 Synthesizing and Predicting Systems:and 352
A.3.4 Auxiliary Scripts 359
Index 361

Erscheint lt. Verlag 13.8.2010
Zusatzinfo XVII, 368 p.
Verlagsort New York
Sprache englisch
Themenwelt Mathematik / Informatik Informatik Theorie / Studium
Mathematik / Informatik Informatik Web / Internet
Informatik Weitere Themen CAD-Programme
Schlagworte annotated references • component-based software development (CBSD) • component composition • component synthesis • concurrent execution • currentjm • functional behavior • historical anecdotes • non-functional behavior • persistent sta • software components • (software) engineering design • software reliabi • Software Testing • Software Tools • System • testing theory • Text • Unit Testing
ISBN-10 1-4419-7148-3 / 1441971483
ISBN-13 978-1-4419-7148-7 / 9781441971487
Haben Sie eine Frage zum Produkt?
PDFPDF (Wasserzeichen)
Größe: 5,2 MB

DRM: Digitales Wasserzeichen
Dieses eBook enthält ein digitales Wasser­zeichen und ist damit für Sie persona­lisiert. Bei einer missbräuch­lichen Weiter­gabe des eBooks an Dritte ist eine Rück­ver­folgung an die Quelle möglich.

Dateiformat: PDF (Portable Document Format)
Mit einem festen Seiten­layout eignet sich die PDF besonders für Fach­bücher mit Spalten, Tabellen und Abbild­ungen. Eine PDF kann auf fast allen Geräten ange­zeigt werden, ist aber für kleine Displays (Smart­phone, eReader) nur einge­schränkt geeignet.

Systemvoraussetzungen:
PC/Mac: Mit einem PC oder Mac können Sie dieses eBook lesen. Sie benötigen dafür einen PDF-Viewer - z.B. den Adobe Reader oder Adobe Digital Editions.
eReader: Dieses eBook kann mit (fast) allen eBook-Readern gelesen werden. Mit dem amazon-Kindle ist es aber nicht kompatibel.
Smartphone/Tablet: Egal ob Apple oder Android, dieses eBook können Sie lesen. Sie benötigen dafür einen PDF-Viewer - z.B. die kostenlose Adobe Digital Editions-App.

Zusätzliches Feature: Online Lesen
Dieses eBook können Sie zusätzlich zum Download auch online im Webbrowser lesen.

Buying eBooks from abroad
For tax law reasons we can sell eBooks just within Germany and Switzerland. Regrettably we cannot fulfill eBook-orders from other countries.

Mehr entdecken
aus dem Bereich
Technologische Grundlagen und industrielle Praxis

von André Borrmann; Markus König; Christian Koch …

eBook Download (2021)
Springer Fachmedien Wiesbaden (Verlag)
89,99
UX-Design für die moderne Produktentwicklung

von Jonas F. Schmid

eBook Download (2024)
tredition (Verlag)
24,99