|
By Timothy C. Lethbridge
and Robert
Laganière
- Foreword xi
- Preface xv
- Guided tour xxi
- Technology to enhance learning and teaching xxiii
- Chapter 1 Software and software engineering 1
- 1.1 The nature of software 1
- 1.2 What is software engineering? 6
- 1.3 Software engineering as a branch of the engineering profession 8
- 1.4 Stakeholders in software engineering 10
- 1.5 Software quality 11
- 1.6 Software engineering projects 14
- 1.7 Activities common to software projects 16
- 1.8 The themes emphasized in this book 20
- 1.9 Difficulties and risks in software engineering as a whole 24
- 1.10 Summary 26
- 1.11 For more information 26
- Chapter 2 Review of object orientation 29
- 2.1 What is object orientation? 29
- 2.2 Classes and objects 31
- 2.3 Instance variables 36
- 2.4 Methods, operations and polymorphism 38
- 2.5 Organizing classes into inheritance hierarchies 39
- 2.6 The effect of inheritance hierarchies on polymorphism and variable
declarations 45
- 2.7 Concepts that define object orientation 52
- 2.8 A program for manipulating postal codes 55
- 2.9 Classes for representing geometric points 57
- 2.10 Measuring the quality and complexity of a program 60
- 2.11 Difficulties and risks in programming language choice and OO
programming 62
- 2.12 Summary 63
- 2.13 For more information 63
- Chapter 3 Basing software development on reusable technology 67
- 3.1 Reuse: building on the work and experience of others 68
- 3.2 Incorporating reusability and reuse into software engineering 69
- 3.3 Frameworks: reusable subsystems 71
- 3.4 The client?server architecture 77
- 3.5 Technology needed to build client?server systems 87
- 3.6 The Object Client?Server Framework (OCSF) 91
- 3.7 Basic description of OCSF ? client side 92
- 3.8 Basic description of OCSF ? server side 95
- 3.9 An instant messaging application using the OCSF 99
- 3.10 Difficulties and risks when considering reusable technology and
client?server systems 101
- 3.11 Summary 102
- 3.12 For more information 103
- Chapter 4 Developing requirements 109
- 4.1 Domain analysis 109
- 4.2 The starting point for software projects 114
- 4.3 Defining the problem and the scope 115
- 4.4 What is a requirement? 119
- 4.5 Types of requirements 119
- 4.6 Use cases: describing how the user will use the system 127
- 4.7 Some techniques for gathering requirements 138
- 4.8 Types of requirements document 145
- 4.9 Reviewing requirements 148
- 4.10 Managing changing requirements 155
- 4.11 GPS-based Automobile Navigation Assistant (GANA) 156
- 4.12 Requirements for a feature of the SimpleChat instant messaging
program 160
- 4.13 Difficulties and risks in domain and requirements analysis 164
- 4.14 Summary 165
- 4.15 For more information 166
- Chapter 5 Modeling with classes 169
- 5.1 What is UML? 169
- 5.2 Essentials of UML class diagrams 172
- 5.3 Associations and multiplicity 173
- 5.4 Generalization 182
- 5.5 Object diagrams 186
- 5.6 More advanced features of class diagrams 188
- 5.7 The basics of Object Constraint Language (OCL) 193
- 5.8 A class diagram for genealogy 196
- 5.9 The process of developing class diagrams 199
- 5.10 Implementing class diagrams in Java 216
- 5.11 Difficulties and risks when creating class diagrams 218
- 5.12 Summary 218
- 5.13 For more information 219
- Chapter 6 Using design patterns 221
- 6.1 Introduction to patterns 221
- 6.2 The Abstraction?Occurrence pattern 223
- 6.3 The General Hierarchy pattern 226
- 6.4 The Player?Role pattern 228
- 6.5 The Singleton pattern 231
- 6.6 The Observer pattern 232
- 6.7 The Delegation pattern 234
- 6.8 The Adapter pattern 236
- 6.9 The Facade pattern 238
- 6.10 The Immutable pattern 239
- 6.11 The Read-Only Interface pattern 240
- 6.12 The Proxy pattern 241
- 6.13 The Factory pattern 243
- 6.14 Enhancing OCSF to employ additional design patterns 246
- 6.15 Difficulties and risks when using design patterns 250
- 6.16 Summary 251
- 6.17 For more information 251
- Chapter 7 Focusing on users and their tasks 253
- 7.1 User-centered design 254
- 7.2 Characteristics of users 256
- 7.3 The basics of user interface design 258
- 7.4 Usability principles 262
- 7.5 Evaluating user interfaces 273
- 7.6 Implementing a simple GUI in Java 276
- 7.7 Difficulties and risks in user-centered design 280
- 7.8 Summary 280
- 7.9 For more information 281
- Chapter 8 Modeling interactions and behavior 285
- 8.1 Interaction diagrams 285
- 8.2 State diagrams 292
- 8.3 Activity diagrams 301
- 8.4 Implementing classes based on interaction and state diagrams 302
- 8.5 Difficulties and risks in modeling interactions and behavior 306
- 8.6 Summary 307
- 8.7 For more information 307
- Chapter 9 Architecting and designing software 309
- 9.1 The process of design 310
- 9.2 Principles leading to good design 314
Design Principle 1: Divide and conquer 314
Design Principle 2: Increase cohesion where possible 315
Design Principle 3: Reduce coupling where possible 321
Design Principle 4: Keep the level of abstraction as high as
possiblev 329
Design Principle 5: Increase reusability where possible 330
Design Principle 6: Reuse existing designs and code where
possible 331
Design Principle 7: Design for flexibility 331
Design Principle 8: Anticipate obsolescence 332
Design Principle 9: Design for portability 333
Design Principle 10: Design for testability 334
Design Principle 11: Design defensively 334
- 9.3 Techniques for making good design decisions 336
- 9.4 Model Driven Development 340
- 9.5 Software architecture 342
- 9.6 Architectural patterns 347
The Multi-Layer architectural pattern 347
The Client?Server and other distributed architectural
patterns 349
The Broker architectural pattern 351
The Transaction Processing architectural pattern 352
The Pipe-and-Filter architectural pattern 353
The Model?View?Controller (MVC) architectural pattern 355
The Service-Oriented architectural pattern 358
The Message-Oriented architectural pattern 360
- 9.7 Writing a good design document 362
- 9.8 Design of a feature for the SimpleChat instant messaging application
365
- 9.9 Difficulties and risks in design 366
- 9.10 Summary 367
- 9.11 For more information 368
- Chapter 10 Testing and inspecting to ensure high quality 371
- 10.1 Basic definitions 371
- 10.2 Effective and efficient testing 373
- 10.3 Defects in ordinary algorithms 380
- 10.4 Defects in numerical algorithms 388
- 10.5 Defects in timing and co-ordination: deadlocks, livelocks and
critical races 391
- 10.6 Defects in handling stress and unusual situations 394
- 10.7 Documentation defects 398
- 10.8 Writing formal test cases and test plans 398
- 10.9 Strategies for testing large systems 402
- 10.10 Inspections 409
- 10.11 Quality assurance in general 413
- 10.12 Test cases for phase 2 of the SimpleChat instant messaging system
416
- 10.13 Difficulties and risks in quality assurance 420
- 10.14 Summary 421
- 10.15 For more information 422
- Chapter 11 Managing the software process 425
- 11.1 What is project management? 425
- 11.2 Software process models 428
- 11.3 Cost estimation 435
- 11.4 Building software engineering teams 445
- 11.5 Project scheduling and tracking 449
- 11.6 Contents of a project plan 452
- 11.7 Difficulties and risks in project management 453
- 11.8 Summary 455
- 11.9 For more information 456
- Chapter 12 Review 459
- 12.1 Theme 1: Understanding the customer and user 459
- 12.2 Theme 2: Basing development on solid principles and reusable
technology 459
- 12.3 Theme 3: Object orientation 464
- 12.4 Theme 4: Visual modeling using UML 464
- 12.5 Theme 5: Evaluation of alternatives in requirements and design 465
- 12.6 Theme 6: Incorporating quantitative and logical thinking 465
- 12.7 Theme 7: Iterative and agile development 466
- 12.8 Theme 8: Communicating effectively using documentation 467
- 12.9 Theme 9: Risk management in all software engineering activities 467
- 12.10 Where next? 469
- Appendix A: Summary of the UML notation used in this book 471
- Appendix B: Summary of the documentation types recommended in this book
475
- Appendix C: System descriptions 479
- Glossary 485
Additional material
including the
source code and a brief review of Java is found on the book's web
site
Other important points about the organization of the book
There are many exercises
throughout each
chapter. At the end of each
chapter there are project exercises which guide students, in an iterative
manner, through the steps of developing a real project. The project
exercises are all based on the Object Client-Server Framework, described
in Chapter 3. Since complete requirements, designs, source code and test
cases are available, students can develop a reasonably sophisticated
system in a relatively short time. Answers to the
exercises, and
suggested
answers to the project work, are available to instructors. A subset of
answers is available to students.
Also at the end of each chapter is a list of references to
books and web pages
Back to the book's main page
|