|
Preface |
4 |
|
|
I. Software Product Line Engineering |
4 |
|
|
II. Readers of the Book |
4 |
|
|
III. Book Overview |
5 |
|
|
IV. Share Your Experience! |
8 |
|
|
V. Acknowledgements |
9 |
|
|
I. Fourteen-Lecture Course on SPLE |
11 |
|
|
II. Two-Lecture Module on SPLE |
13 |
|
|
III. Four-Lecture Module on SPLE |
13 |
|
|
IV. One-Lecture Module on COTS Selection |
14 |
|
|
V. Three-Lecture Module on Testing in SPLE |
14 |
|
|
VI. Exercises |
14 |
|
|
Paper-Based Exercises |
15 |
|
|
Extending a Product Line and Deriving an Application |
17 |
|
|
Contents |
20 |
|
|
Part I Introduction |
26 |
|
|
Introduction to Software Product Line Engineering |
27 |
|
|
1.1 Principles of Product Line Engineering |
28 |
|
|
1.1.1 Mass Customisation |
28 |
|
|
1.1.2 Platforms |
29 |
|
|
1.1.3 Combining Platform-Based Development and Mass Customisation |
31 |
|
|
1.2 Engineering Customised Products |
31 |
|
|
1.2.1 Creating the Platform |
31 |
|
|
1.2.2 Introducing Flexibility |
32 |
|
|
1.2.3 Reorganising the Company |
33 |
|
|
1.3 Motivations for Product Line Engineering |
33 |
|
|
1.3.1 Reduction of Development Costs |
33 |
|
|
1.3.2 Enhancement of Quality |
34 |
|
|
1.3.3 Reduction of Time to Market |
34 |
|
|
1.3.4 Additional Motivations |
35 |
|
|
1.4 Software Product Line Engineering |
37 |
|
|
1.4.1 Definition |
38 |
|
|
1.4.2 Software Platform |
39 |
|
|
1.4.3 Prerequisites |
40 |
|
|
A Framework for Software Product Line Engineering |
43 |
|
|
2.1 Introduction |
44 |
|
|
2.2 Two Development Processes |
44 |
|
|
2.3 Overview of the Framework |
45 |
|
|
2.4 Domain Engineering |
47 |
|
|
2.4.1 Product Management |
48 |
|
|
2.4.2 Domain Requirements Engineering |
49 |
|
|
2.4.3 Domain Design |
50 |
|
|
2.4.4 Domain Realisation |
51 |
|
|
2.4.5 Domain Testing |
51 |
|
|
2.4.6 Other Software Quality Assurance Techniques |
52 |
|
|
2.5 Domain Artefacts |
52 |
|
|
2.5.1 Product Roadmap |
52 |
|
|
2.5.2 Domain Variability Model |
53 |
|
|
2.5.3 Domain Requirements |
53 |
|
|
2.5.4 Domain Architecture |
53 |
|
|
2.5.5 Domain Realisation Artefacts |
54 |
|
|
2.5.6 Domain Test Artefacts |
54 |
|
|
2.6 Application Engineering |
54 |
|
|
2.6.1 Application Requirements Engineering |
55 |
|
|
2.6.2 Application Design |
56 |
|
|
2.6.3 Application Realisation |
57 |
|
|
2.6.4 Application Testing |
57 |
|
|
2.7 Application Artefacts |
58 |
|
|
2.7.1 Application Variability Model |
59 |
|
|
2.7.2 Application Requirements |
59 |
|
|
2.7.3 Application Architecture |
59 |
|
|
2.7.4 Application Realisation Artefacts |
59 |
|
|
2.7.5 Application Test Artefacts |
60 |
|
|
2.8 Role of the Framework in the Book |
60 |
|
|
Overview of the Example Domain: Home Automation |
63 |
|
|
3.1 Smart Home Fundamentals |
64 |
|
|
3.1.1 Goals |
64 |
|
|
3.1.2 Stakeholders |
65 |
|
|
3.1.3 Smart Homes vs. Conventional Homes |
65 |
|
|
3.2 Building Blocks of a Home Automation System |
67 |
|
|
3.2.1 Sensors and Actuators |
67 |
|
|
3.2.2 Smart Control Devices |
67 |
|
|
3.2.3 The Home Gateway |
68 |
|
|
3.2.4 Networking |
69 |
|
|
3.2.5 Standards in the Home Automation Domain |
69 |
|
|
3.3 An Example |
70 |
|
|
3.3.1 System Functionality |
70 |
|
|
3.3.2 A Simple System Configuration |
72 |
|
|
3.3.3 System Component Interaction |
73 |
|
|
3.4 Software Variability in Smart Home Applications |
74 |
|
|
3.4.1 Examples of Variability |
74 |
|
|
3.4.2 Causes of Variability |
75 |
|
|
3.5 Role of the Home Automation Domain in the Book |
76 |
|
|
Part II: Overview |
78 |
|
|
Part II Product Line Variability |
77 |
|
|
Principles of Variability |
79 |
|
|
4.1 Introduction |
80 |
|
|
4.2 Variability Subject and Variability Object |
81 |
|
|
4.3 Variability in Software Product Line Engineering |
83 |
|
|
4.3.1 Variation Point |
83 |
|
|
4.3.2 Variant |
84 |
|
|
4.3.3 Defining Variation Points and Variants |
85 |
|
|
4.3.4 Variability of a Software Product Line |
86 |
|
|
4.4 Variability in Time vs. Variability in Space |
87 |
|
|
4.5 Internal and External Variability |
90 |
|
|
4.5.1 Causes of External Variability |
91 |
|
|
4.5.2 Causes of Internal Variability |
91 |
|
|
4.5.3 Deciding between Internal and External Variability |
92 |
|
|
4.5.4 The Variability Pyramid |
93 |
|
|
4.6 Orthogonal Variability Model |
94 |
|
|
4.6.1 Explicit Documentation of Variability |
95 |
|
|
4.6.2 Orthogonal Variability Definition |
96 |
|
|
4.6.3 Variation Points, Variants, and Variability Dependencies |
97 |
|
|
4.6.4 Alternative Choice |
99 |
|
|
4.6.5 Variability Constraints |
101 |
|
|
4.6.6 Traceability between Variability Model and Other Development Artefacts |
104 |
|
|
4.6.7 Graphical Notation |
106 |
|
|
4.6.8 An Example |
107 |
|
|
4.6.9 Terminology Issues |
108 |
|
|
4.7 Handling Complexity in Variability Models |
109 |
|
|
4.8 Differences from Single-System Engineering |
110 |
|
|
4.9 Summary |
110 |
|
|
Documenting Variability in Requirements Artefacts |
111 |
|
|
5.1 Introduction |
112 |
|
|
5.2 Documenting Requirements |
113 |
|
|
5.2.1 Model-Based vs. Textual Requirements Documentation |
113 |
|
|
5.2.2 Requirements Artefacts |
114 |
|
|
5.2.3 Goals and Features |
114 |
|
|
5.2.4 Scenarios and Use Cases |
115 |
|
|
5.2.5 Traditional Requirements Models |
117 |
|
|
5.3 Variability in Textual Requirements |
118 |
|
|
5.3.1 Defining Variability in Textual Requirements |
119 |
|
|
5.3.2 Documenting Variability Using XML |
120 |
|
|
5.4 Variability in Requirements Models |
121 |
|
|
5.4.1 Variability in Feature Models |
121 |
|
|
5.4.2 Variability in Use Case Models |
125 |
|
|
5.4.3 Variability in Traditional Requirements Models |
127 |
|
|
5.5 Traceability Between Variability Model and Requirements Artefacts |
131 |
|
|
5.6 Differences from Single-System Engineering |
134 |
|
|
5.7 Summary |
135 |
|
|
Documenting Variability in Design Artefacts |
136 |
|
|
6.1 Introduction |
137 |
|
|
6.2 Architectural Artefacts |
138 |
|
|
6.2.1 Architecture Views |
140 |
|
|
6.3 The Reference Architecture |
144 |
|
|
6.4 Variability in the Development View |
145 |
|
|
6.4.1 Subsystems and Layers |
145 |
|
|
6.4.2 Components |
147 |
|
|
6.4.3 The Role of Interfaces |
148 |
|
|
6.4.4 Configurations |
149 |
|
|
6.5 Variability in the Process View |
152 |
|
|
6.6 Variability in the Code View |
153 |
|
|
6.7 Differences from Single-System Engineering |
155 |
|
|
6.8 Summary |
155 |
|
|
Documenting Variability in Realisation Artefacts |
156 |
|
|
7.1 Introduction |
157 |
|
|
7.2 Detailed Design Artefacts |
158 |
|
|
7.3 Component Interface Variability |
160 |
|
|
7.3.1 Variability in Algorithms and Protocols |
161 |
|
|
7.3.2 Variability in Resources |
162 |
|
|
7.3.3 Variability in Application Configuration |
163 |
|
|
7.3.4 Many Components Providing the Interface |
164 |
|
|
7.4 Internal Component Variability |
166 |
|
|
7.5 Differences from Single-System Engineering |
168 |
|
|
7.6 Summary |
168 |
|
|
Documenting Variability in Test Artefacts |
170 |
|
|
8.1 Introduction |
171 |
|
|
8.2 Test Artefacts |
172 |
|
|
8.3 Variability in Test Artefacts |
173 |
|
|
8.3.1 Test Plan |
173 |
|
|
8.3.2 Test Case |
174 |
|
|
8.3.3 Test Case Scenario |
175 |
|
|
8.3.4 Test Case Scenario Step |
176 |
|
|
8.3.5 Test Summary Report |
177 |
|
|
8.4 Differences from Single-System Engineering |
178 |
|
|
8.5 Summary |
178 |
|
|
Part III: Overview |
180 |
|
|
Part III Domain Engineering |
179 |
|
|
Product Management |
181 |
|
|
9.1 Introduction |
182 |
|
|
9.1.1 Interrelation with Domain Requirements Engineering |
183 |
|
|
9.1.2 Interrelation with Application Requirements Engineering |
184 |
|
|
9.2 Terminology |
184 |
|
|
9.3 Traditional Product Management Activities |
185 |
|
|
9.4 Portfolio Management |
186 |
|
|
9.4.1 IT Business Types |
187 |
|
|
9.4.2 Product Life Cycle |
188 |
|
|
9.4.3 Product Portfolio Analysis |
190 |
|
|
9.4.4 Product Interdependences |
192 |
|
|
9.4.5 Product Variants |
193 |
|
|
9.5 Extension of the Product Portfolio |
195 |
|
|
9.5.1 Product Innovation |
195 |
|
|
9.5.2 Product Imitation |
197 |
|
|
9.5.3 Assessment of Product Ideas |
197 |
|
|
9.5.4 Product Definition with the Kano Scheme |
199 |
|
|
9.5.5 Quality Function Deployment (QFD) |
204 |
|
|
9.5.6 Target Costing |
204 |
|
|
9.6 Management of Existing Products |
204 |
|
|
9.6.1 Conservation and Expansion of Potentials |
204 |
|
|
9.6.2 Product Elimination |
205 |
|
|
9.7 Scoping |
206 |
|
|
9.8 Differences from Single-System Engineering |
207 |
|
|
9.8.1 Strategic Role of the Platform |
208 |
|
|
9.8.2 Product Definition |
208 |
|
|
9.8.3 Output |
209 |
|
|
9.9 Summary |
209 |
|
|
Domain Requirements Engineering |
211 |
|
|
10.1 Introduction |
212 |
|
|
10.1.1 Interrelation with Product Management |
213 |
|
|
10.1.2 Interrelation with Domain Design |
213 |
|
|
10.1.3 Interrelation with Application Requirements Engineering |
214 |
|
|
10.2 Traditional Requirements Engineering Activities |
215 |
|
|
10.3 Challenges of Domain Requirements Engineering |
216 |
|
|
10.3.1 Specific Activities |
216 |
|
|
10.3.2 Variability in Different Views |
217 |
|
|
10.4 Overview of Major Steps |
217 |
|
|
10.4.1 Defining Common Requirements |
217 |
|
|
10.4.2 Defining Variable Requirements |
218 |
|
|
10.5 Requirements Sources |
219 |
|
|
10.6 Commonality Analysis |
219 |
|
|
10.6.1 Application–Requirements Matrix |
220 |
|
|
10.6.2 Priority-Based Analysis |
221 |
|
|
10.6.3 Checklist-Based Analysis |
222 |
|
|
10.7 Variability Analysis |
222 |
|
|
10.7.1 Variability Analysis with the Application–Requirements Matrix |
223 |
|
|
10.7.2 Priority-Based Variability Analysis |
223 |
|
|
10.7.3 Checklist-Based Variability Analysis |
224 |
|
|
10.8 Defining Requirements Variability |
224 |
|
|
10.8.1 Variation Points and Variants |
224 |
|
|
10.8.2 Variability Dependencies |
225 |
|
|
10.8.3 Constraint Dependencies |
227 |
|
|
10.8.4 Adaptation of Product Line Variability Based on Product Management Decisions |
227 |
|
|
10.9 Example |
227 |
|
|
10.9.1 Commonality Analysis |
228 |
|
|
10.9.2 Variability Analysis |
231 |
|
|
10.9.3 Defining Variation Points and Variants |
231 |
|
|
10.9.4 Defining Variability Dependencies |
232 |
|
|
10.9.5 Defining Constraint Dependencies |
232 |
|
|
10.9.6 Documenting Domain Requirements |
233 |
|
|
10.10 Differences from Single-System Engineering |
233 |
|
|
10.11 Summary |
234 |
|
|
Domain Design |
235 |
|
|
11.1 Introduction |
236 |
|
|
11.1.1 Interrelation with Domain Requirements Engineering |
236 |
|
|
11.1.2 Interrelation with Domain Realisation |
237 |
|
|
11.1.3 Interrelation with Application Design |
238 |
|
|
11.2 Traditional Design Activities |
238 |
|
|
11.3 Quality Requirements |
239 |
|
|
11.4 Commonality and Variability in Design |
243 |
|
|
11.4.1 Requirements Prioritisation |
244 |
|
|
11.4.2 Mapping Between Requirements and Design |
245 |
|
|
11.4.3 Adding Variability in Design |
247 |
|
|
11.5 Designing the Reference Architecture |
249 |
|
|
11.5.1 Use of Component Frameworks |
250 |
|
|
11.5.2 Use of Application-Specific Plug-ins |
252 |
|
|
11.5.3 Use of Aspects |
252 |
|
|
11.5.4 Role of the Architectural Texture |
253 |
|
|
11.6 Architecture Validation |
254 |
|
|
11.7 Differences from Single-System Engineering |
256 |
|
|
11.8 Summary |
257 |
|
|
Domain Realisation |
259 |
|
|
12.1 Introduction |
260 |
|
|
12.1.1 Interrelation with Domain Design |
261 |
|
|
12.1.2 Interrelation with Domain Testing |
261 |
|
|
12.1.3 Interrelation with Application Realisation |
261 |
|
|
12.2 Traditional Realisation Activities |
262 |
|
|
12.3 Realising Interfaces |
263 |
|
|
12.3.1 Variable vs. Invariant Interfaces |
263 |
|
|
12.3.2 Interface Elements |
264 |
|
|
12.4 Realising Variable Components |
266 |
|
|
12.4.1 Quality of a Component |
266 |
|
|
12.4.2 Distributing Variability over Components |
267 |
|
|
12.5 Binding Time of Variability |
268 |
|
|
12.5.1 Before Compilation |
269 |
|
|
12.5.2 At Compile Time |
270 |
|
|
12.5.3 At Link Time |
270 |
|
|
12.5.4 At Load Time |
271 |
|
|
12.5.5 At Run-Time |
271 |
|
|
12.6 Realising Configurability |
271 |
|
|
12.7 Differences from Single-System Engineering |
273 |
|
|
12.8 Summary |
273 |
|
|
Domain Testing |
275 |
|
|
13.1 Introduction |
276 |
|
|
13.1.1 Interrelation with Domain Requirements Engineering |
278 |
|
|
13.1.2 Interrelation with Domain Design |
279 |
|
|
13.1.3 Interrelation with Domain Realisation |
279 |
|
|
13.1.4 Interrelation with Application Testing |
279 |
|
|
13.2 Software Testing |
280 |
|
|
13.2.1 Defects |
281 |
|
|
13.2.2 Test Levels |
281 |
|
|
13.3 Domain Testing and Application Testing |
284 |
|
|
13.4 Testing Variability at Different Test Levels |
285 |
|
|
13.4.1 Domain Unit Test |
285 |
|
|
13.4.2 Domain Integration Test |
286 |
|
|
13.4.3 Domain System Test |
286 |
|
|
13.5 Criteria for Product Line Test Strategies |
288 |
|
|
13.5.1 Time to Create Test Artefacts |
288 |
|
|
13.5.2 Absent Variants |
288 |
|
|
13.5.3 Early Validation |
289 |
|
|
13.5.4 Learning Effort |
289 |
|
|
13.5.5 Overhead |
289 |
|
|
13.6 Product Line Test Strategies |
289 |
|
|
13.6.1 Brute Force Strategy |
290 |
|
|
13.6.2 Pure Application Strategy |
291 |
|
|
13.6.3 Sample Application Strategy |
293 |
|
|
13.6.4 Commonality and Reuse Strategy |
295 |
|
|
13.6.5 Conclusions for Strategy Selection |
298 |
|
|
13.7 Domain Test Activities |
299 |
|
|
13.7.1 Domain Test Planning |
299 |
|
|
13.7.2 Domain Test Specification |
300 |
|
|
13.7.3 Domain Test Execution, Recording, and Completion |
301 |
|
|
13.8 Differences from Single-System Engineering |
301 |
|
|
13.9 Summary |
302 |
|
|
Selecting High- Level COTS Components |
303 |
|
|
14.1 Introduction |
304 |
|
|
14.1.1 Interrelation with Domain Requirements Engineering |
305 |
|
|
14.1.2 Interrelation with Domain Design |
306 |
|
|
14.2 The CoVAR Process |
306 |
|
|
14.2.1 Component Screening |
309 |
|
|
14.2.2 Detailed Component Evaluation |
313 |
|
|
14.2.3 Component Selection |
318 |
|
|
14.3 Differences from Single-System Engineering |
318 |
|
|
14.4 Summary |
319 |
|
|
Part IV: Overview |
321 |
|
|
Part IV Application Engineering |
320 |
|
|
Application Requirements Engineering |
322 |
|
|
15.1 Introduction |
323 |
|
|
15.1.1 Interrelation with Product Management |
324 |
|
|
15.1.2 Interrelation with Domain Requirements Engineering |
325 |
|
|
15.1.3 Interrelation with Application Design |
326 |
|
|
15.2 Application Requirements Engineering Activities |
327 |
|
|
15.3 Communication of the Product Line Variability |
330 |
|
|
15.3.1 Variation Points and Variants |
330 |
|
|
15.3.2 Domain Requirements Artefacts |
331 |
|
|
15.3.3 Result of the Communication Activity |
333 |
|
|
15.4 Analysis of Requirements Deltas |
333 |
|
|
15.4.1 Variability Model Deltas |
333 |
|
|
15.4.2 Impact on the Variability Model |
333 |
|
|
15.4.3 Impact on Requirements Artefacts |
336 |
|
|
15.4.4 Impact on the Architecture |
337 |
|
|
15.5 Documentation of the Application Requirements |
341 |
|
|
15.6 Differences from Single-System Engineering |
343 |
|
|
15.7 Summary |
344 |
|
|
Application Design |
345 |
|
|
16.1 Introduction |
346 |
|
|
16.1.1 Interrelation with Application Requirements Engineering |
346 |
|
|
16.1.2 Interrelation with Domain Design |
347 |
|
|
16.1.3 Interrelation with Application Realisation |
348 |
|
|
16.2 Development of the Application Architecture |
348 |
|
|
16.2.1 Application-Specific Modelling |
349 |
|
|
16.2.2 Binding of Variants |
350 |
|
|
16.2.3 Determining the Configuration |
352 |
|
|
16.2.4 Consistent Selection of Component Variants |
353 |
|
|
16.3 Feedback of Application Artefacts to the Domain |
354 |
|
|
16.4 Effort and Cost of Variants |
355 |
|
|
16.5 Differences from Single-System Engineering |
356 |
|
|
16.6 Summary |
357 |
|
|
Application Realisation |
358 |
|
|
17.1 Introduction |
359 |
|
|
17.1.1 Interrelation with Application Design |
359 |
|
|
17.1.2 Interrelation with Application Testing |
360 |
|
|
17.1.3 Interrelation with Domain Realisation |
360 |
|
|
17.2 Configuration |
361 |
|
|
17.3 Realisation of Application-Specific Components |
363 |
|
|
17.4 Building the Application |
364 |
|
|
17.5 Differences from Single-System Engineering |
366 |
|
|
17.6 Summary |
367 |
|
|
Application Testing |
368 |
|
|
18.1 Introduction |
369 |
|
|
18.1.1 Interrelation with Application Requirements Engineering |
370 |
|
|
18.1.2 Interrelation with Application Design |
370 |
|
|
18.1.3 Interrelation with Application Realisation |
371 |
|
|
18.1.4 Interrelation with Domain Testing |
371 |
|
|
18.2 Domain Test Artefact Reuse |
372 |
|
|
18.2.1 Dealing with Variability |
372 |
|
|
18.2.2 Use of Traceability Links |
373 |
|
|
18.3 Tests Related to Variability |
375 |
|
|
18.4 Testing Variability at Different Test Levels |
377 |
|
|
18.4.1 Application Unit Test |
377 |
|
|
18.4.2 Application Integration Test |
377 |
|
|
18.4.3 Application System Test |
378 |
|
|
18.5 Application Test Coverage |
378 |
|
|
18.5.1 Application Commonality Test |
379 |
|
|
18.5.2 Application Variant Test |
379 |
|
|
18.5.3 Application-specific Tests |
380 |
|
|
18.6 Application Test Activities |
380 |
|
|
18.6.1 Application Test Planning |
380 |
|
|
18.6.2 Application Test Specification |
381 |
|
|
18.6.3 Application Test Execution |
382 |
|
|
18.7 Differences from Single-System Engineering |
382 |
|
|
18.8 Summary |
383 |
|
|
Part V: Overview |
385 |
|
|
Part V Organisation Aspects |
384 |
|
|
Organisation |
386 |
|
|
19.1 Introduction |
387 |
|
|
19.2 Properties of Organisation Structures |
387 |
|
|
19.3 Basic Hierarchical Organisation Structures |
389 |
|
|
19.3.1 Development Department |
390 |
|
|
19.3.2 Distributed Domain Engineering |
391 |
|
|
19.3.3 Centralised Domain Engineering |
393 |
|
|
19.3.4 Several Domain Engineering Units |
394 |
|
|
19.4 Matrix Organisation Structures |
395 |
|
|
19.5 Detailed Structure |
400 |
|
|
19.6 Cross-Functional Teams |
400 |
|
|
19.7 Organisation Theory |
400 |
|
|
19.8 Differences from Single-System Engineering |
402 |
|
|
19.9 Summary |
403 |
|
|
Transition Process |
404 |
|
|
20.1 Introduction |
405 |
|
|
20.2 Motivation and Business Objectives |
405 |
|
|
20.3 Transition Strategies |
406 |
|
|
20.4 Benefits and Drawbacks of the Transition Strategies |
409 |
|
|
20.5 Cost Model |
411 |
|
|
20.6 Application of the Cost Model to the Transition Strategies |
413 |
|
|
20.7 Major Steps of a Transition Process |
417 |
|
|
20.8 Summary |
421 |
|
|
Part VI Experience and Future Research |
422 |
|
|
Experiences with Software Product Line Engineering |
423 |
|
|
21.1 ABB |
424 |
|
|
21.2 Boeing Company |
425 |
|
|
21.3 CelsiusTech Systems AB |
426 |
|
|
21.4 Cummins Inc. |
427 |
|
|
21.5 Hewlett-Packard |
429 |
|
|
21.6 LG Industrial Systems Co., Ltd. |
430 |
|
|
21.7 Lucent Technologies |
431 |
|
|
21.8 MARKET MAKER Software AG |
432 |
|
|
21.9 Philips |
434 |
|
|
21.10 Robert Bosch GmbH |
437 |
|
|
21.11 Salion Inc. |
438 |
|
|
21.12 Siemens AG Medical Solutions HS IM |
440 |
|
|
21.13 Testo AG |
441 |
|
|
21.14 The National Reconnaissance Office |
442 |
|
|
21.15 The Naval Undersea Warfare Center |
443 |
|
|
Future Research |
445 |
|
|
22.1 Domain Specialisation |
446 |
|
|
22.2 Quality Assurance |
446 |
|
|
22.3 Model-Driven Development |
446 |
|
|
22.4 Evolution |
447 |
|
|
22.5 Multiple Product Lines |
447 |
|
|
22.6 Tool Support |
447 |
|
|
22.7 Process Improvement and Assessment |
448 |
|
|
22.8 Economics |
448 |
|
|
The Authors |
449 |
|
|
References |
453 |
|
|
Glossary |
465 |
|
|
Index |
468 |
|
|
More eBooks at www.ciando.com |
0 |
|