E-Book, Englisch, 368 Seiten
Hamlet Composing Software Components
1. Auflage 2010
ISBN: 978-1-4419-7148-7
Verlag: Springer
Format: PDF
Kopierschutz: 1 - PDF Watermark
A Software-testing Perspective
E-Book, Englisch, 368 Seiten
ISBN: 978-1-4419-7148-7
Verlag: Springer
Format: PDF
Kopierschutz: 1 - PDF Watermark
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.
Autoren/Hrsg.
Weitere Infos & Material
1;The Griffin;6
2;Acknowledgements;7
3;Contents;8
4;Chapter 1;15
4.1;1.1 A ‘Clear Drop’;16
4.1.1;1.1.1 Testing Components and Recording Approximations;16
4.1.2;1.1.2 Synthesizing a System;19
4.1.3;1.1.3 Discussion of the Example;20
4.2;1.2 Roadmap of this Monograph;22
4.2.1;1.2.1 Theory vs. Practice;23
4.2.2;1.2.2 Formal Theory of Software Testing;24
4.2.3;1.2.3 Exploratory Tools;25
4.2.4;1.2.4 Insights into Component Composition;25
4.2.5;1.2.5 Implications for Testing in General;26
5;Part I Components and Component-based Development;28
5.1;Chapter 2;29
5.1.1;2.1 Standardized Components Make Engineering Possible;29
5.1.2;2.2 Mechanical Engineering of a Vacuum System;31
5.1.3;2.3 Electrical/Computer Engineering of a Laptop;33
5.1.4;2.4 Can It Be Done with Software?;35
5.2;Chapter 3;41
5.2.1;3.1 The Parts: Components;42
5.2.1.1;3.1.1 Common Environment for Software;42
5.2.1.2;3.1.2 Reuse;43
5.2.1.3;3.1.3 Information Hiding;44
5.2.1.4;3.1.4 Object-oriented Design;44
5.2.1.5;3.1.5 Szyperski’s Definition;45
5.2.2;3.2 The Systems: Component-based Software Development (CBSD);46
5.2.2.1;3.2.1 Product Families;48
5.2.2.2;3.2.2 Component Development and Cataloging;48
5.2.2.3;3.2.3 System Design using Components;50
5.2.3;3.3 The Viewpoint: Testing Simple Components and Systems;50
5.2.3.1;3.3.1 Simple Components;50
5.2.3.2;3.3.2 Simple Systems;51
5.2.3.3;3.3.3 Critique of the Model;51
5.3;Chapter 4;53
5.3.1;4.1 Components and Connectors;53
5.3.2;4.2 System Architecture;55
5.3.3;4.3 Component Models;56
5.3.3.1;4.3.1 Middleware and Container Services;56
5.3.4;4.4 Immutable Components;57
5.3.5;4.5 Broader Theory of CBSD;58
5.3.5.1;4.5.1 General Component-based System Design Theory;58
5.3.5.2;4.5.2 Component-based Verification;60
5.3.5.3;4.5.3 Testing vs. Proving;61
5.3.6;4.6 Summary of CBSD Issues;62
5.4;Chapter 5;65
5.4.1;5.1 ‘Lifecycle’ Models of Development;66
5.4.1.1;5.1.1 Development Phases;66
5.4.1.2;5.1.2 Waterfall Models;67
5.4.1.3;5.1.3 Agile Models;68
5.4.1.4;5.1.4 Which Model is Best?;69
5.4.2;5.2 Functional/Requirements Testing;70
5.4.2.1;5.2.1 Unit Testing vs. System Testing;70
5.4.3;5.3 Preventing Bugs;71
5.4.3.1;5.3.1 Software Inspection;71
5.4.3.2;5.3.2 Formal Methods;72
5.4.3.3;5.3.3 Creating Perfection vs. Finding Failure;73
5.4.4;5.4 Testing in CBSD;73
6;Part II Software Testing: Practice and Theory;64
6.1;Chapter 6;75
6.1.1;6.1 Floyd-Hoare-Mills Semantics;75
6.1.2;6.2 Functional Testing Theory;77
6.1.2.1;6.2.1 Functional Testing Theory without State;77
6.1.2.2;6.2.2 Extending Functional Theory to Include State;79
6.1.2.3;6.2.3 Testing Concurrent Software;82
6.1.3;6.3 Summary of Testing Theory;85
6.2;Chapter 7;86
6.2.1;7.1 Divide and Conquer (or Multiply and Founder?);87
6.2.2;7.2 History of ‘Coverage’ Testing;88
6.2.2.1;7.2.1 Functional Coverage;89
6.2.2.2;7.2.2 Structural Coverage;90
6.2.2.3;7.2.3 Combining Functional and Structural Coverage;94
6.2.3;7.3 Usage Profiles;95
6.2.4;7.4 Subdomain Testing in the Presence of State;97
6.2.5;7.5 Concurrency;100
6.2.6;7.6 Comparing Subdomain Techniques;101
6.2.6.1;7.6.1 The ‘Subsumes’ Partial Ordering;101
6.2.6.2;7.6.2 Random Testing;102
6.2.6.3;7.6.3 Comparing Randomand Subdomain-testing;103
7;Part III Composition of Components;104
7.1;Chapter 8;105
7.1.1;8.1 Software Testing is ‘Non-compositional’;105
7.1.2;8.2 Approximating and Measuring Component Properties;107
7.1.3;8.3 Calculating Properties of Stateless Systems;109
7.1.3.1;8.3.1 Series System;110
7.1.3.2;8.3.2 Conditional System Control Structure;113
7.1.3.3;8.3.3 Iterative System Control Structure;114
7.1.4;8.4 Combining Different Component Approximations;115
7.1.5;8.5 Synthesizing a Component-based System;116
7.1.5.1;8.5.1 Combining Testing and Proving;116
7.1.6;8.6 Summary of the Subdomain Testing Theory;118
7.2;Chapter 9;119
7.2.1;9.1 Getting Started;120
7.2.2;9.2 A Simple Complete Example;121
7.2.3;9.3 Approximation and Prediction Errors;132
7.2.4;9.4 Better Component Approximations;136
7.2.4.1;9.4.1 Splitting and Adjusting Subdomains;138
7.2.4.2;9.4.2 Piecewise-linear Component Approximation;138
7.2.4.3;9.4.3 How Well Can a Component Developer Do?;141
7.2.5;9.5 Internal Profiles;142
7.2.6;9.6 Incremental Processing;145
7.2.7;9.7 Tutorial Summary;146
7.3;Chapter 10;147
7.3.1;10.1 Extended Subdomain Theory of Composition;147
7.3.1.1;10.1.1 Algorithms for Synthesizing Systems from Components with State;148
7.3.1.2;10.1.2 Verifying the Algorithms;152
7.3.2;10.2 Testing Measurements;153
7.3.2.1;10.2.1 3-D Graphs and Approximation Errors;153
7.3.2.2;10.2.2 Equi-spaced vs. Sequence Sampling;154
7.3.3;10.3 System Predictions;155
7.3.3.1;10.3.1 Synthesis of Systems with State;156
7.3.4;10.4 A Tutorial Example with State;158
7.3.4.1;10.4.1 Tutorial: Modes (Preferences);159
7.4;Chapter 11;174
7.4.1;11.1 Adding Concurrency to Composition Theory;174
7.4.1.1;11.1.1 Algorithm for Synthesizing Components in Parallel;175
7.4.2;11.2 Testing Measurements, Behavior Graphs, and System Predictions;176
7.4.3;11.3 A Tutorial Example with Concurrency;177
7.4.3.1;11.3.1 Tutorial: Multiversion Software;178
7.5;Chapter 12;186
7.5.1;12.1 Reliability in Other Engineering Disciplines;186
7.5.2;12.2 Software Reliability Theory;188
7.5.2.1;12.2.1 Software ‘Time’ Parameter;189
7.5.2.2;12.2.2 The Minefield Analogy;189
7.5.2.3;12.2.3 A Speculative Software Failure Rate;191
7.5.2.4;12.2.4 Measuring Software Failure Rate;195
7.5.2.5;12.2.5 Failure Rate in Subdomains;198
7.5.3;12.3 Component Independence;199
7.5.4;12.4 Reliability Synthesis;200
7.5.4.1;12.4.1 Difficulties in Component Measurements;201
7.5.4.2;12.4.2 Synthesis Rules;201
8;Part IV Supporting Tools;205
8.1;Chapter 13;206
8.1.1;13.1 Component Developers and System Designers;206
8.1.2;13.2 Ideal Tools for I-CBSD;207
8.1.2.1;13.2.1 Ideal Component-level Testing/Measurement Tools;207
8.1.2.2;13.2.2 Ideal System-level Synthesis (CAD) Tools;208
8.1.2.3;13.2.3 SYN Tools: An Existence Proof;208
8.2;Chapter 14;209
8.2.1;14.1 Component Conventions;211
8.2.1.1;14.1.1 Artificial Components;212
8.2.2;14.2 Underlying Algorithms;213
8.2.3;14.3 Execution by Table-lookup;214
8.2.3.1;14.3.1 Validating Tools;215
8.2.3.2;14.3.2 A Nasty Mistake;217
8.2.4;14.4 Tool Performance;220
8.3;Chapter 15;223
8.3.1;15.1 Debugging Components;223
8.3.1.1;15.1.1 Checking Tests Against Requirements;224
8.3.1.2;15.1.2 Executing Code Outside the Tools;225
8.3.1.3;15.1.3 Finding Good Subdomains;225
8.3.1.4;15.1.4 Graphical Aids;226
8.3.2;15.2 Debugging Component-based Systems;226
8.3.2.1;15.2.1 Component Mismatch;229
8.3.2.2;15.2.2 Interface Profiles;231
8.3.3;15.3 Debugging of Support Tools;232
8.3.3.1;15.3.1 Problem Decomposition;232
8.3.3.2;15.3.2 Iterative Enhancement;233
8.3.3.3;15.3.3 Components and Debugging of Tools;234
8.4;Chapter 16;237
8.4.1;16.1 Unstable Algorithms and Code;237
8.4.2; 16.2 Improving the SYN Tools;238
8.4.3;16.3 Who’s Next?;240
9;Part V Case Studies;241
9.1;Chapter 17;242
9.1.1;17.1 Better Component Approximation, Better System Prediction;242
9.1.1.1;17.1.1 Tuning Subdomains with Tool Support;247
9.1.2;17.2 Predicting Prediction Accuracy;250
9.1.2.1;17.2.1 Prediction Error is Linear in Measurement Error;250
9.1.2.2;17.2.2 Theory of Error Propagation;251
9.1.2.3;17.2.3 Prediction Error is an Emergent System Property;254
9.1.2.4;17.2.4 Approximating System Prediction Errors;255
9.1.3;17.3 Approximation Accuracy as a Component Test-quality Metric;256
9.1.4;17.4 The Right Subdomains for Component Testing;257
9.2;Chapter 18;259
9.2.1;18.1 Fundamental Questions about Subdomain Testing;259
9.2.1.1;18.1.1 How to Sample Subdomains?;260
9.2.1.2;18.1.2 Is Series Synthesis Associative?;263
9.2.2;18.2 Moving Control Structures between Components and Systems;264
9.2.2.1;18.2.1 Series Composition within a Component;265
9.2.2.2;18.2.2 Conditionals in Code and Conditional Components;266
9.2.2.3;18.2.3 Raising the Level of Programming;268
9.2.3;18.3 Persistent State;268
9.2.3.1;18.3.1 Infeasible States;268
9.2.3.2;18.3.2 Modes and Storage in State;272
9.2.3.3;18.3.3 A Controlled ‘Editor’ System;279
9.2.4;18.4 Iteration at System Level;286
9.2.5;18.5 Component and System Reliability;290
9.2.6;18.6 Substituting one Component for Another;294
9.2.6.1;18.6.1 Meeting a Non-functional System Requirement Bound;295
10;Part VI Implications for Software Testing;298
10.1;Chapter 19;299
10.1.1;19.1 Components Make Ideal Software ‘Units’;300
10.1.1.1;19.1.1 Solving Unit-testing Problems;301
10.1.1.2;19.1.2 Choosing Unit-test Subdomains;303
10.1.2;19.2 Unit Testing Is More Than it Seems;305
10.1.2.1;19.2.1 Saving and Using Unit-test Results;305
10.1.2.2;19.2.2 Unit Tests the Only Tests;305
10.1.3;19.3 Trusting Unit Tests;307
10.1.3.1;19.3.1 Trustworthy Component Testing;307
10.1.3.2;19.3.2 Matching Interface Profiles;307
10.1.4;19.4 Comparing System Predictions to Requirements;308
10.2;Chapter 20;310
10.2.1;20.1 Non-functional Depends on Functional;310
10.2.2;20.2 Non-functional ‘Compositional’ Properties;311
10.2.2.1;20.2.1 Run Time;312
10.2.2.2;20.2.2 Reliability;312
10.2.2.3;20.2.3 Safety Factors and Prediction Accuracy;313
10.2.3;20.3 Predicting Emergent Properties;314
10.2.3.1;20.3.1 Memory Leaks;314
10.2.3.2;20.3.2 Security;315
10.2.3.3;20.3.3 ‘Emergent’ Prediction Error;316
10.3;Chapter 21;318
10.3.1;21.1 Software Components are Unlike Mechanical Components;318
10.3.2;21.2 Software Functions Are Inherently Discontinuous;319
10.3.2.1;21.2.1 Simple Component Behaviors Lead to Complicated System Behaviors;321
10.3.3;21.3 Testing Theory is Unlike Other Formal Methods;322
10.3.3.1;21.3.1 Conservative Reductions;322
10.3.3.2;21.3.2 Special Role of Persistent State;323
10.3.4;21.4 The Several Meanings of ‘Compositional’;324
10.3.4.1;21.4.1 Compositional Properties;325
10.3.4.2;21.4.2 Testing Can Be Made Compositional;325
10.3.5;21.5 Simple Tools are Remarkably Powerful;326
10.4;Chapter 22;329
10.4.1;22.1 Subdomain Testing in Non-numeric Domains;329
10.4.2;22.2 Completing a Testing Theory including State;330
10.4.2.1;22.2.1 Reliability in the Presence of State;330
10.4.2.2;22.2.2 BetterTools for State;331
10.4.3;22.3 Limited Input Domain;331
11;Appendix A;341
11.1;A.1 Documentation;342
11.2;A.2 SYN Documentation Tricks;343
11.2.1;A.2.1 Stand-alone Script Execution;344
11.2.2;A.2.2 Error Messages;344
11.2.3;A.2.3 ‘Message-discovery’ Documentation;346
11.2.4;A.2.4 ‘#debug’ Statements;347
11.2.5;A.2.5 The Script Header Comments;347
11.3;A.3 Details of the Tool Scripts;347
11.3.1;A.3.1 File Formats;348
11.3.2;A.3.2 Testing and Approximating Components:and friends;351
11.3.3;A.3.3 Synthesizing and Predicting Systems:and;352
11.3.4;A.3.4 Auxiliary Scripts;359
12;Index;361




