TY - BOOK AU - Bell,Douglas TI - Software engineering: a programming approach SN - 0201648563 U1 - 005.1 BEL PY - 2000/// CY - Harlow PB - Addison Wesley KW - Software engineering KW - Computer programming N1 - Includes bibliographical references and index; Preface xv Part A Introduction Software -- problems and prospects 3 (18) Introduction 3 (1) Meeting users' needs 4 (1) The cost of software production 5 (5) Meeting deadlines 10 (1) Software performance 10 (1) Portability 11 (1) Maintenance 12 (1) Reliability 13 (3) Human--computer interaction 16 (1) A software crisis? 16 (1) A remedy -- software engineering? 17 (1) Summary 18 (3) Exercises 19 (1) Answers to self test questions 20 (1) Further reading 20 (1) Process models 21 (24) Introduction 21 (1) The components of software development 22 (2) Validation and verification 24 (1) The waterfall model 25 (3) Prototyping 28 (8) Formal methods -- the transform model 36 (1) The spiral model 37 (3) Discussion 40 (1) Summary 41 (4) Exercises 41 (1) Answers to self test questions 42 (1) Further reading 42 (3) Part B Requirements engineering Requirements analysis 45 (10) Introduction 45 (1) The notion of a requirement 46 (1) The process of eliciting requirements 47 (2) The requirements specification 49 (3) Summary 52 (3) Exercises 53 (1) Further reading 54 (1) Formal specification 55 (16) Introduction 55 (2) Formal specification in Z: an example 57 (7) The role of formal specification 64 (1) Summary 65 (6) Exercises 66 (1) Answers to self test questions 67 (1) Further reading 67 (4) Part C Design Structured programming 71 (14) Introduction 71 (1) Arguments against goto 72 (4) Arguments in favor of goto 76 (1) Selecting control structures 77 (2) What is structured programming? 79 (3) Summary 82 (3) Exercises 83 (1) Further reading 84 (1) Modularity 85 (21) Introduction 85 (1) Why modularity? 86 (2) Module size 88 (2) Complexity 90 (1) Global data is harmful 91 (1) Information hiding and abstract data types 92 (2) Coupling and cohesion 94 (1) Coupling 95 (3) Cohesion 98 (2) Shaw and Garlan's classification 100 (2) Object-oriented programming 102 (1) Summary 103 (3) Exercises 104 (1) Answer to self test question 105 (1) Further reading 105 (1) Functional decomposition 106 (10) Introduction 106 (1) An example -- a video game 107 (3) More about the method 110 (1) What about data? 111 (1) Alternative solutions 112 (1) The place of functional decomposition 113 (1) Discussion 113 (1) Summary 114 (2) Exercises 114 (1) Further reading 115 (1) Data structure design: The Michael Jackson program design method (JSP) 116 (25) Introduction 116 (1) A simple example 117 (5) Processing input files 122 (2) Physical and logical structures 124 (2) Processing several input and output streams 126 (5) Structure clashes 131 (4) Discussion and evaluation 135 (2) Summary 137 (4) Exercises 138 (1) Answer to self test question 139 (1) Further reading 140 (1) Data flow design 141 (16) Introduction 141 (1) An analogy 142 (1) First examples 143 (3) Case study -- point-of-sale terminal 146 (4) Case study -- monitoring a plant 150 (1) Rationale for the method 151 (2) Discussion 153 (2) Summary 155 (2) Exercises 155 (1) Further reading 156 (1) Object-oriented desing 157 (26) Introduction 157 (1) The features of OOP 158 (5) The aims of OO design 163 (2) Finding the classes 165 (2) Specifying the responsibilities of the classes 167 (1) Specifying the collaborators 168 (1) Other design techniques and notations 169 (1) Using the class library 169 (1) Class--responsibility--collaborator (CRC) cards 170 (1) Use-case analysis 171 (1) Creating good class hierarchies 172 (3) Is-a and has-a analysis 175 (1) Design guidelines 176 (1) Re-usable design patterns (frameworks) 176 (1) Object-oriented design methodologies 177 (1) Discussion 177 (2) Summary 179 (4) Exercises 179 (2) Answers to self test questions 181 (1) Further reading 181 (2) User interface design 183 (16) Introduction 183 (1) An interdisciplinary field 184 (1) Styles of human--computer interface 184 (2) Different perspectives on HCI 186 (1) Design principles and guidelines 187 (3) Human--computer interface design 190 (1) Task analysis 191 (2) Design evaluation 193 (1) Help systems 194 (1) Implementation tools 195 (1) Summary 196 (3) Exercises 196 (1) Answers to self test questions 197 (1) Further reading 197 (2) Formal development 199 (16) Introduction 199 (1) What is a formal method? 200 (1) Formal development: a case study 201 (7) The role of formal development 208 (1) Summary 209 (6) Exercises 210 (1) Answers to self test questions 211 (1) Further reading 211 (4) Part D Programming paradigms The programming language 215 (50) Introduction 215 (1) Design principles 216 (2) Language syntax 218 (3) Control abstractions 221 (6) Data types and strong typing 227 (11) Procedural abstraction 238 (5) Abstract data types 243 (6) Programming in the large 249 (7) The role of programming languages 256 (2) Summary 258 (7) Exercises 258 (2) Answers to self test questions 260 (4) Further reading 264 (1) Object-oriented programming (OOP) 265 (21) Introduction 265 (1) Encapsulation 265 (2) Classes 267 (1) Creating objects 268 (1) Constructor methods 269 (1) Destructor methods 270 (1) Class or static methods 270 (1) Inheritance 271 (3) Single versus multiple inheritance 274 (1) Polymorphism 274 (1) Event-driven programming 275 (1) Case study -- a complete Java program 276 (4) The role of OOP 280 (1) Summary 281 (5) Exercises 282 (2) Answers to self test questions 284 (1) Further reading 285 (1) Concurrent programming 286 (35) Introduction 286 (2) Independent threads 288 (3) Dying and killing 291 (1) The state of a thread 292 (1) Scheduling and thread priorities 293 (1) Mutual exclusion 293 (3) Thread interaction 296 (5) The producer--consumer problem 301 (11) Interruptions 312 (1) Deadlock 313 (1) Conclusions 314 (2) Summary 316 (5) Exercises 316 (2) Answers to self test questions 318 (2) Further reading 320 (1) Functional programming 321 (17) Introduction 321 (1) Procedural languages 322 (2) Characteristics of functional programming 324 (7) Other functional languages 331 (2) The role of functional programming 333 (2) Summary 335 (3) Exercises 336 (1) Answers to self test questions 337 (1) Further reading 337 (1) Logic programming 338 (17) Introduction 338 (2) Facts and rules 340 (2) Execution mechanisms 342 (6) Prolog in use 348 (2) Conclusions 350 (1) Summary 351 (4) Exercises 352 (1) Further reading 352 (3) Part E Implementation Software tools 355 (17) Introduction 355 (1) Tools for programming 356 (1) Not programming tools 357 (1) Examples of tools 357 (8) Discussion 365 (1) Application development tools 365 (4) The physical environment 369 (1) Summary 370 (2) Exercises 371 (1) Answers to self test questions 371 (1) Further reading 371 (1) Verification 372 (24) Introduction 372 (1) The nature of errors 373 (1) The problem of testing 374 (1) Black box (functional) testing 375 (2) White box (structural) testing 377 (2) Walkthroughs and inspections 379 (3) Other testing strategies 382 (1) Discussion 383 (2) System (integration) testing 385 (1) Bottom-up testing 386 (1) Top-down development 387 (3) Summary 390 (6) Exercises 391 (2) Answers to self test questions 393 (2) Further reading 395 (1) Softwar fault tolerance and exceptions 396 (22) Introduction 396 (3) Fault detection by software 399 (3) Fault detection by hardware 402 (3) Dealing with damage 405 (2) Exceptions and exception handlers 407 (3) Recovery blocks 410 (3) N-version programming 413 (1) The role of fault tolerance 414 (1) Summary 414 (4) Exercises 415 (2) Answers to self test questions 417 (1) Further reading 417 (1) Software metrics and quality assurance 418 (12) Introduction 418 (1) Complexity metrics 419 (3) Faults and reliability -- estimating bugs 422 (1) Software quality 423 (2) Quality assurance 425 (1) Process improvement 426 (1) The capability maturity model (CMM) 426 (1) Summary 427 (3) Exercises 428 (1) Answers to self test questions 429 (1) Further reading 429 (1) Project management 430 (19) Introduction 430 (1) The challenge of project management 431 (1) The ingredients of project management 431 (1) Cost estimation 432 (2) Team organization 434 (7) Selecting tools and methods 441 (1) Introducing new methods 442 (1) The project plan 442 (1) Peopleware 443 (1) Summary 444 (5) Exercises 444 (1) Further reading 445 (4) Part F Review Review 449 (14) Introduction 449 (1) Assessing and comparing development methods 450 (2) Software tools 452 (1) Software re-usability 452 (1) The current state of methods 452 (1) A single development method? 453 (1) The real world of software engineering 454 (3) The question of skill 457 (1) The future of software engineering 457 (1) Summary 458 (5) Exercises 459 (1) Further reading 460 (3) Appendix: An introduction to Java 463 (4) A.1 Variables and assignment 463 (1) A.2 Control structures 464 (1) A.3 Methods 464 (1) A.4 Summary 465 (2) Index 467 ER -