外文科技图书简介
当前位置:首页 > 检索结果 >文献详细内容

书名:Object-oriented software engineering

责任者:David C. Kung  |  the university of texas at arlington

ISBN\ISSN:9780073376257,0073376256 

出版时间:2014

出版社:McGraw-Hill,

分类号:自动化技术、计算机技术


摘要

Object-Oriented Software Engineering: An Agile Unified Methodology, presents a step-by-step methodology - that integrates Modeling and Design, UML, Patterns, Test-Driven Development, Quality Assurance, Configuration Management, and Agile Principles throughout the life cycle. The overall approach is casual and easy to follow, with many practical examples that show the theory at work. The author uses his experiences as well as real-world stories to help the reader understand software design principles, patterns, and other software engineering concepts. The book also provides stimulating exercises that go far beyond the type of question that can be answered by simply copying portions of the text.

查看更多

前言

BACKGROUND
Computers are widely used in all sectors of our society, performing a variety of functions with the application software running on them. As a result, the market for software engineers is booming. The March 2006 issue of Money magazine ranked software engineer as number l of the 50 best jobs in the United States. According to the Bureau of Labor Statistics(BLS) 2010-2020 projections, the total number of jobs in application development software engineer and systems analyst positions is expected to increase from 520, 800 to 664, 500(27.6%) and from 544, 400 to 664, 800 (22.10%) , respectively. To be able to perform the work required of an application de-velopment software engineer or systems analyst, an education in software engineering is highly desired. However, according to the data released by BLS("Earned Awards and Degrees, by Field of Study, 2005-2006") , only 160 bachelor and 600 master's degrees in software engineering, and 10, 289 bachelor and 4, 512 master's degrees in computer science were awarded in 2006. Thus, there is a significant gap between the demand and supply, especially for graduates with a software engineering degree.
Many people do not know the scope and usefulness of software engineering as a practice, and the discipline is often misunderstood. Many media outlets seem to de-fine software engineering as writing Java programs. Some students think that software engineering includes everything related to software. Others think that software engi-neering is drawing UML diagrams, as the following story illustrates. Several years ago, after the first class of an object-oriented software engineering(OOSE) course, a student said to me, "Professor, you know that this will bean easy course for me because we've drawn lots of UML diagrams before. "At the end of the semester, the student came to me again and said, "Professor, I want to tell you that we worked very hard, but we learned a lot about OO design. It is not just drawing UML diagrams as I thought. "So what is software engineering? As a discipline, it encompasses re-search, education, and application of engineering processes, methodologies, quality assurance, and project managenent to significantly increase software productivity and software quality while reducing software cost and time to market. OOSE is a branch of software engineering that is characterized by its view of the world as con-sisting of objects relating to and interacting with each other. The advent of the C++ programming language in the 1980s marked the beginning of the OOSE era. Since then, software production began its unprecedented worldwide growth and was further accelerated by the creation and worldwide adoption of the unified modeling language (UML) and the unified process(UP) . Strictly speaking, a software process describes the phases and what should be done in each phase. It does not define(in detail) how to perform the activities in each phase. A modeling language, such as UML, defines the notations, syntax, and semantics for communicating and documenting analysis and design ideas. UML and UP are good and necessary but not sufficient. This is because how to produce the analysis and design ideas required to draw meaningful UML diagrams is missing.
MOTIVATION
To fill the gaps discussed in the last paragraph, we need a methodology or a "cook-book. Unlike a process, a methodology is a detailed description of the steps and procedures or how to carryout the activities to the extent that a beginner can follow to produce and deploy the desired software system. Without a methodology, a be-ginning software engineer would have to spend a few years of on-the-job training to learn OO design, implementation, and testing skills.
This book is also motivated by emerging interests in agile processes, design patterns, and test-driven development(TDD) . Agile processes emphasize teamwork, design for change, rapid deployment of small increments of the software system, and joint development with the customer and users. Design patterns are effective design solutions to common design problems. Design patterns promote software reuse and improve team communication. TDD advocates testable software, and requires test scripts to be produced before the implementation so that the latter can be tested immediately and frequently.
As an analogy, consider the development of an amusement park. The overall pro-cess includes the following phases:planning, public approval, analysis and design, financing, construction drawings, construction, procurement of equipment, installa-tion of equipment, preopening, and grand opening. However, knowing the overall process is not enough. The development team must know how to perform the activi-ties of the phases. For example, the planning activities include development of initial concept, feasibility study, and master plan generation. The theme park team must know how to perform these activities. The analysis and design activities include "re-quirements acquisition"from stakeholders, site investigation, design of park layout, design of theming for different areas of the park, creating models to study the layout design and theming, and producing the master design. Again, the theme park team must know how to perform these activities to produce the master design. Unlike a process that describes the phases of activities, a methodology details the steps and procedures or how to perform the activities.
The development of an amusement park is a multiyear project and costs billions of dollars. The investor wants the park to generate revenue as early as possible, but with the above process, the investor has to wait until the entire park is completed Once the master design is finalized, it can not be modified easily due to the restrictions imposed by the conventional process. If the park does not meet the expectations of the stakeholders, then changes are costly once the park is completed.
Agile processes are aimed to solve these problems. With an agile process, a list of preliminary theme park requirements is acquired quickly and allowed to evolve during the development process. The amusement and entertainment facilities are then derived from the requirements and carefully grouped into clusters of facilities. A plan to develop and deploy the clusters in relatively short periods of time is produced, that is, rapid deployment of small increments. Thus, instead of a finalized master design, the development process designs and deploys one cluster at a time. As the clusters of facilities are deployed and operational, feedback is sought and changes to the requirements, the development plan, budget, and schedule are worked out with the stakeholders—that is, joint development. In addition, the application of architectural design patterns improves quality and ability of the park to adapt to changing needs—that is, design for change. Teamwork is emphasized because effective collaboration and coordination between the teams and team members ensure that the facilities will be developed and deployed timely and seamlessly. The agile process has a number of merits. The investor can reap the benefits much earlier because the facilities are operational as early as desired and feasible. Since a small number of the facilities are developed and deployed at a time, errors can be corrected and changes can be made more easily
In summary, this text is centered around an agile unified methodology that in-tegrates UML, design patterns, OO software testing, and TDD, among others. The methodology presented in this book is called a "unified methodology" because it uses UML as the modeling language and it follows an agile unified process. It does not mean to unify any other methods or to be used as a "unified" methodology for all projects.
AUDIENCES
This book is for students majoring in computer science or software engineering as well as for software development professionals. In particular, it is intended to be used as the primary material for upper-division undergraduate and introductory graduate courses and professional training courses in the IT industry. This book's material evolved over the last decade from courses taught at several universities and companies, both domestically and internationally, as well as from applications of the material to industry-sponsored projects and projects conducted by software engineers in various companies. These projects allowed me to observe closely how students and software engineers applied UP, UML, design patterns, and TDD, and the difficulties they faced. Their feedback led to continual improvement of the material.
ORGANIZATION
The book has 24 chapters, divided into eight parts:
Part I. Introduction and System Engineering. This part consists of the first three chapters. It provides an overview of the software life-cycle activities. In particular, it covers software process models, the notion of a methodology, the difference between a process and a methodology, and system engineering.
Part II. Analysis and Architectural Design. This part presents the planning phase activities. It includes requirements elicitation, domain modeling, and ar-chitectural design.
Part III. Modeling and Design of Interactive Systems. This part deals with the modeling and design of interactive systems. It consists of six chapters. These chapters present how to identify use cases from the requirements, how to model and design actor-system interaction and object interaction behavior, how to apply responsibility assignment patterns, howto derive a design class diagram to serve as the design blueprint, and how to design the user interface.
Part IV. Modeling and Design of Other Types of Systems. This part consists of three chapters; each presents the modeling and design of one type of sys-tem. In particular, Chapter 13 presents the modeling and design of event-driven systems. Chapter 14 presents the modeling and design of transformational sys-tems. Chapter 15 presents the modeling and design of business rule-based systems.
Part V. Applying Situation-Specific Patterns. This part consists of two chap-ters and present show to apply situation-specific patterns. A case study, that is, the design of a state diagram editor, is used to help understand the process.
Part VI. Implementation and Quality Assurance. This part consists of three chapters. They present implementation considerations, software quality assur-ance concepts and activities, and software testing
Part VII. Maintenance and Configuration Management. This part includes two chapters and covers software maintenance and software configuration man-agement.
Part VIII. Project Management and Software Security. The last part of the book consists of the last two chapters. One of the chapters presents software project management. The other chapter covers software security, that is, life-cycle activities concerning the modeling and design of secure software systems.
The material can satisfy the needs of several software engineering courses. For example,
1. Part I through Part III and selected topics from Part VIto Part VIII area good combination for an Object-Oriented Software Engineering(OOSE) course or an Introduction to Software Engineering course. This could be a junior-or senior-level undergraduate course as well as an introductory graduate-level course.
2. Part II, Part V, and selected sections from the other chapters could form a Software Design Patterns course. It is recommended that the OOSE course described above be a prerequisite for this course. However, many international students may not have taken the OOSE course. In this case, a review of the methodology presented in Part II and Part III is recommended. The review of the methodology provides the framework for applying patterns. The review may take two to four weeks.
3. Part VI and Part VII could be taught in various ways. They could form one course—Quality Assurance, Testing, and Maintenance. They could be taught as two courses—Software Quality Assurance, and Software Testing and Mainte-nance. Alternatively, these chapters could be taught as three courses-Software Quality Assurance, Software Testing, and Software Maintenance.
4. Chapters 13-15, 19, and 20plus selected patterns from the other chapters may form a course on modeling, design, verification, and validation of complex systems.
5. Part I, Parts VI to VIII, and selected chapters from the other parts may form a Software Project Management course.
6. Finally, Part I, Parts II, and Chapter 24plus selected patterns and topics from the other chapters may comprise a course on Introduction to Software Secu-rity. The instructor may supply additional materials to make this course more comprehensive.
Various teaching supplements can be found at http//www.mhhe.com/kung. These include PowerPoint teaching slides, pop quiz and test generation software, databases of test questions, sample course descriptions and syllabi, lab work manuals, and software tools. Instructors who have not taught the courses may find these teaching tools helpful in reducing preparation time and effort.

查看更多

目录

Preface xvi

Part I Introduction and System Engineering 1

Chapter 1 Introduction 2

      1.1 What Is Software Engineering? 2

      1.2 Why Software Engineering? 3

      1.3 Software Life-Cycle Activities 4

      1.3.1 Software Development Process 5

      1.3.2 Software Quality Assurance 9

      1.3.3 Software Project Management 10

      1.4 Object-Oriented Software Engineering 11

      1.4.1 Object-Oriented Modeling and Design Languages 12

      1.4.2 Object-Oriented Development Processes 12

      1.4.3 Object-Oriented Development Methodologies 12

      1.4.4WillOO Replace the Conventional Approaches? 13

      1.5 Software Engineering and Computer Science 13

      Summary 14

      Further Reading 15

      Chapter Review Questions 15

      Exercises 15

Chapter 2 Software Process and Methodology 16

      2.1 Challenges of System Development 17

      2.2 Software Process 18

      2.3 Merits and Problems of the Waterfall Process19

      2.4 Software Development Is a Wicked Problem 19

      2.5 Software Process Models 21

      2.5.1 Prototyping Process 21

      2.5.2 Evolutionary Process 22

      2.5.3 Spiral Process 22

      2.5.4 The Unified Process 23

      2.5.5 Personal Software Process 25

      2.5.6 Team Software Process 28

      2.5.7 Agile Processes 30

      2.6 Software Development Methodology 37

      2.6.1 Difference between Process and Methodology 37

      2.6.2 Benefits of a Methodology 38

      2.6.3 Structured Methodologies 39

      2.6.4 Classical OO Methodologies 39

      2.7 Agile Methods 40

      2.7.1 Dynamic Systems Development Method 40

      2.7.2 Scrum 42

      2.7.3 Feature Driven Development 43

      2.7.4 Extreme Programming 44

      2.7.5 Agileor Plan-Driven 44

      2.8 Overview of Process and Methodology of the Book 45

      Summary 50

      Further Reading 51

      Chapter Review Questions 51

      Exercises 51

Chapter 3 System Engineering 53

      3.1 What Is a System? 54

      3.2 What Is System Engineering? 55

      3.3 System Requirements Definition 58

      3.3.1 Identifying Business Needs 58

      3.3.2 Defining System Requirements 60

      3.4 System Architectural Design 60

      3.4.1 System Decomposition 61

      3.4.2 Requirements Allocation 64

      3.4.3 Architectural Design Diagrams 66

      3.4.4 Specification of Subsystem Functions and Interfaces 70

      3.5 Subsystems Development 71

      3.5.1 Object-Oriented Context Diagram 71

      3.5.2 Usefulness of an Object-Oriented Context Diagram 72

      3.5.3 Collaboration of Engineering Teams 73

      3.6 System Integration, Testing, and Deployment 73

      3.7 System Configuration Management 74

      Summary 76

      Further Reading 76

      Chapter Review Questions 76

      Exercises 76

Part II Analysis and Architectur a Design 79

Chapter 4 Software Requirements Elicitation 80

      4.1 What Is Requirements Elicitation? 81

      4.2 Importance of Requirements Elicitation 82

      4.3 Challenges of Requirements Elicitation 83

      4.4 Types of Requirement 85

      4.5 Steps for Requirements Elicitation 86

      4.5.1 Collecting Information 87

      4.5.2 Constructing Analysis Models 91

      4.5.3 Deriving Requirements and Constraints 92

      4.5.4 Requirements Specification Standards 97

      4.5.5 Conducting Feasibility Study 97

      4.5.6 Reviewing Requirements Specification 99

      4.6 Applying Agile Principles 100

      4.7 Requirements Management and Tools 101

      Summary 102

      Further Reading 103

      Chapter Review Questions 103

      Exercises 103

Chapter 5 Domain Modeling 105

      5.1 What Is Domain Modeling? 105

      5.2 Why Domain Modeling? 106

      5.3 Object-Orientation and Class Diagram 107

      5.3.1 Extensional and Intentional Definitions 107

      5.3.2 Class and Object 108

      5.3.3 Object and Attribute 110

      5.3.4 Association 110

      5.3.5 Multiplicity and Role 111

      5.3.6 Aggregation 113

      5.3.7 Inheritance 114

      5.3.8 Inheritance and Polymorphism 114

      5.3.9 Association Class 115

      5.4 Steps for Domain Modeling 117

      5.4.1 Collecting Application Domain Information 118

      5.4.2 Brainstorming 119

      5.4.3 Classifying Brainstorming Results 120

      5.4.4 Visualizing the Domain Model 124

      5.4.5 Domain Model Review Checklist 129

      5.5 Putting It Together 130

      5.6 Guidelines for Domain Modeling 133

      5.7 Applying Agile Prineiples 134

      5.8 Tool Support for Domain Modeling 135

      Summary 136

      Further Reading 136

      Chapter Review Questions 138

      Exercises 138

Chapter 6 Architectural Design 139

      6.1 What Is Architectural Design? 140

      6.2 The Importance of Architectural Design 140

      6.3 Architectural Design Process 141

      6.3.1 Determine Architectural Design Objectives 142

      6.3.2 Determine System Type 143

      6.3.3 Applying Architectural Styles 147

      6.3.4 Perform Custom Architectural Design 157

      6.3.5 Specify Subsystem Functions and Interfaces 157

      6.3.6 Review the Architectural Design 158

      6.4 Architectural Style and Package Diagram 158

      6.5 Applying Software Design Principles 160

      6.5.1 What Are Software Design Principles? 161

      6.5.2 Design for Change 161

      6.5.3 Separation of Concems 162

      6.5.4 Information Hiding 163

      6.5.5 High Cohesion 164

      6.5.6 Low Coupling 165

      6.5.7 Keep It Simple and Stupid 166

      6.6 Guidelines for Architectural Design 166

      6.7 Architectural Design and Design Patterns 167

      6.8 Applying Agile Principles 167

      Summary 168

      Further Reading 168

      Chapter Review Questions 169

      Exercises 169

Part III Modeling and Design of Interactive Systems 171

Chapter 7 Deriving Use Cases from Requirements 172

      7.1 What Is An Actor? 173

      7.2 What Is a Use Case? 173

      7.3 Business Process, Operation, and Action 174

      7.4 Steps for Deriving Use Cases from Requirements 176

      7.4.1 Identifying Use Cases 177

      7.4.2 Specifying Use Case Scopes 184

      7.4.3 Visualizing Use Case Contexts 186

      7.4.4 Reviewing Use Case Specifications 190

      7.4.5 Allocating the Use Cases to Iterations 191

      7.5 Guidelines for Use Case Derivation 192

      7.6 Applying Agile Prineiples 195

      7.7 Tool Support for Use Case Modeling 196

      Summary 198

      Further Reading 198

      Chapter Review Questions 199

      Exercises 199

Chapter 8 Actor-System Interaction Modeling 200

      8.1 What Is Actor-System Interaction Modeling? 201

      8.2 Importance of Actor-System Interaction Modeling 202

      8.3 Steps for Actor-System Interaction Modeling 202

      8.3.1 Initializing a Two-Column Table 202

      8.3.2 Specifying Actor-System Interaction Steps 203

      8.3.3 Reviewing Actor-System Interaction Specifications 204

      8.4 Specifying Alternative Flows 204

      8.5 Using User Interface Prototypes 204

      8.6 Do Not Show Exception Handling 208

      8.7 Use Case Precondition and Post condition 209

      8.8 Including Other Use Cases 210

      8.9 Continuing with Other Use Cases 210

      8.10 Commonly Seen Problems 211

      8.11 Applying Agile Principles 213

      Summary 214

      Further Reading 214

      Chapter Review Questions 215

      Exercises 215

Chapter 9 Object Interaction Modeling 216

      9.1 What Is Object Interaction Modeling? 216

      9.2 UML Sequence Diagram 218

      9.2.1 Notions and Notations 218

      9.2.2 Representing Instances of a Class 218

      9.2.3 Sequence Diagrams Illustrated 220

      9.2.4 Sequence Diagram for Analysis and Design 222

      9.2.5 Using the Notations Correctly 224

      9.3 Steps for Object Interaction Modeling 225

      9.3.1 Collecting Information About Business Processes 226

      9.3.2 Identifying Nontrivial Steps 227

      9.3.3 Writing Scenarios for Nontrivial Steps 228

      9.3.4 Constructing Scenario Tables 230

      9.3.5 Scenarios: How to Write Them 232

      9.3.6 Deriving Sequence Diagrams from Scenario Tables 236

      9.3.7 Object Interaction Modeling Review Checklist 245

      9.4 Applying Agile Prineiples 246

      9.5 Tool Support for Object Interaction Modeling 248

      Summary 249

      Further Reading 249

      Chapter Review Questions 249

      Exercises 249

Chapter 10 Applying Responsibility-Assignment Patterns 251

      10.1 What Are Design Patterns? 252

      10.2 Why Design Patterns? 253

      10.3 Situation-Specific and Responsibility-Assignment Patterns 253

      10.4 Pattern Specification 254

      10.5 The Controller Pattern 254

      10.5.1 A Motivating Example 255

      10.5.2 What Is a Controller? 258

      10.5.3 Applying the Controller Pattern 258

      10.5.4 Types of Controller 261

      10.5.5 Keeping Track of Use Case State 261

      10.5.6 Bloated Controller 263

      10.5.7 Comparing Different Designs 264

      10.5.8 When Does One Apply the Controller Pattern ? 265

      10.5.9 Guidelines for Using Controller 265

      10.6 The Expert Pattern 267

      10.6.1The Information Expert 267

      10.6.2 Applying the Expert Pattern 267

      10.6.3 Expert Pattern Involving More Than One Object 269

      10.6.4 When Does One Apply the Expert Pattern? 269

      10.6.5 Guidelines for Using Expert 270

      10.7 The Creator Pattern 270

      10.7.1 What Is a Creator ? 270

      10.7.2 Applying the Creator Pattern 271

      10.7.3 Benefits of the Creator Pattern 272

      10.7.4 When Does One Apply the Creator Pattern ? 273

      Summary 273

      Further Reading 274

      Chapter Review Questions 274

      Exercises 275

Chapter 11 Deriving a Design Class Diagram 276

      11.1 What Is a Design Class Diagram? 278

      11.2 Usefulness of a Design Class Diagram 278

      11.3 Steps for Deriving a Design Class Diagram 279

      11.3.1 Identifying Classes 279

      11.3.2 Identifying Methods 281

      11.3.3 Identifying Attributes 281

      11.3.4 Relationships between Classes 285

      11.3.5 Identifying Relationships 285

      11.3.6 Design Class Diagram Review Checklist 288

      11.4 Organize Classes with Package Diagram 288

      11.5 Applying Agile Principles 291

      11.6 Tool Support for Design Class Diagram 292

      Summary 292

      Further Reading 292

      Chapter Review Questions 292

      Exercises 292

Chapter 12 User Interface Design 293

      12.1 What Is User Interface Design? 294

      12.2 Why Is User Interface Design Important? 295

      12.3 Graphical User Interface Widgets 296

      12.3.1 Container Widgets 297

      12.3.2 Input, Output, and Information Presentation Widgets 298

      12.3.3 Guidelines for Using GUI Widgets 298

      12.4 User Interface Design Process 300

      12.4.1 Case Study: User Interface Design for a Diagram Editor 301

      12.4.2 Identifying Major System Displays 302

      12.4.3 Producing a Draft Layout Design 304

      12.4.4 Specifying Interaction Behavior 306

      12.4.5 Constructing a Prototype 307

      12.4.6 Evaluating the User Interface Design with Users 308

      12.4.7 User Interface Design Review Checklist 310

      12.5 Designing User Support Capabilities 310

      12.6 Guidelines for User Interface Design 311

      12.7 Applying Agile Principles 313

      12.8 Tool Support for User Interface Design 314

      Summary 315

      Further Reading 315

      Chapter Review Questions 315

      Exercises 315

Part IV Modeling and Design of Other Types of Systems 317

Chapter 13 Object State Modeling for Event-Driven Systems 318

      13.1 What Is Object State Modeling? 319

      13.2 Why Object State Modeling? 319

      13.3 Basic Definitions 320

      13.4 Steps for Object State Modeling 321

      13.4.1 Collecting and Classifying State Behavior Information 322

      13.4.2 Constructing a Domain Model to Show the Context 325

      13.4.3 Constructing State Transition Tables 327

      13.4.4 Usefulness of the State Transition Table 329

      13.4.5 Converting State Transition Table to Analysis State Diagram 330

      13.4.6 Converting Analysis State Diagram to Design State Diagram 333

      13.4.7 State Modeling Review Checklists 334

      13.5 The State Pattern 334

      13.5.1 Conventional Approaches 334

      13.5.2 What Is State Pattern? 335

      13.5.3 Applying State Pattern 337

      13.6 Real-Time Systems Modeling and Design 339

      13.6.1 The Transformational Schema 339

      13.6.2 Timed State Machine 342

      13.6.3 Interrupt Handling 343

      13.7 Applying Agile Principles 344

      13.8 Tool Support for Object State Modeling 345

      Summary 345

      Further Reading 346

      Chapter Review Questions 346

      Exercises 346

Chapter 14 Activity Modeling for Transformational Systems 349

      14.1 What Is Activity Modeling? 350

      14.2 Why Activity Modeling? 351

      14.3 Activity Modeling: Technical Background 351

      14.3.1 Flowchart 352

      14.3.2 Petri Net 352

      14.3.3 Data Flow Diagram 353

      14.4 UML Activity Diagram 355

      14.5 Steps for Activity Modeling 356

      14.5.1 Identifying Activities and Workflows 357

      14.5.2 Producing a Preliminary Activity Diagram 360

      14.5.3 Introducing Branching, For king, and Joining 362

      14.5.4 Refining Complex Activities 362

      14.5.5 Activity Modeling Review Checklist 363

      14.6 Relationships to Other Diagrams 363

      14.7 Applying Agile Principles 364

      14.8 Tool Support for Activity Modeling 365

      Summary 365

      Further Reading 365

      Chapter Review Questions 366

      Exercises 366

Chapter 15 Modeling and Design of Rule-Based Systems 367

      15.1 What Is a Decision Table? 368

      15.2 Usefulness of Decision Table 369

      15.3 Systematic Decision Table Construction 370

      15.4 Progressive Decision Table Construction 371

      15.5 Checking for Desired Properties 373

      15.6 Decision Table Consolidation 374

      15.7 Generating Code from a Decision Table 375

      15.8 Applying the Interpreter Pattern 375

      15.8.1 Defining a Business Rule Grammar 376

      15.8.2 Representing Rules in a Class Diagram 376

      15.8.3 Constructing a Parser and a Variable Look Up Context 377

      15.8.4 Interpreting Business Rules 378

      15.8.5 Updating Rules Dynamically 378

      15.8.6 Merits of the Interpretation Approach 379

      15.9 Using a Decision Table in Test-Driven Development 379

      15.10 Decision Trees 380

      15.11 Applying Agile Principles 380

      Summary 381

      Further Reading 382

      Chapter Review Questions 382

      Exercises 382

Part V Applying Situation-Specific Patterns 385

Chapter 16 Applying Patterns to Design a State Diagram Editor 386

      16.1 Process for Applying Patterns 387

      16.2 Case Study: State Diagram Editor 390

      16.3 Working with Complex Structures 391

      16.3.1 Representing Recursive Whole-Part Structures 391

      16.3.2 Providing Layout Choices with Strategy 395

      16.3.3 Accessing Complex Structures with Iterator 395

      16.3.4 Analyzing Complex Structures with Visitor 398

      16.3.5 Storing and Restoring Object State with Memento 402

      16.4 Creating and Constructing Complex Objects 404

      16.4.1 Creating Families of Products 404

      16.4.2 Building Large Complex Objects 407

      16.4.3 Reusing Objects with Flyweight 410

      16.5 Designing Graphical User Interface and Display 411

      16.5.1 Keeping Track of Editing States 411

      16.5.2 Responding to Editing Events 412

      16.5.3 Converting One Interface to Another 414

      16.5.4 Providing Context-Dependent Help 418

      16.5.5 Enhancing Display Capability with a Decorator 420

      16.6 Applying Agile Principles 423

      Summary 424

      Further Reading 424

      Chapter Review Questions 425

      Exercises 425

Chapter 17 Applying Patterns to Design a Persistence Framework 426

      17.1 Problems with Direct Database Access 427

      17.2 Hiding Persistence Storage with Bridge 428

      17.3 Encapsulating Database Requests as Commands 431

      17.4 Hiding Network Access with Remote Proxy 435

      17.5 Sharing Common Code with Template Method 439

      17.6 Retrieving Different Objects with Factory Method 442

      17.7 Reducing Number of Classes with Prototype 444

      17.8 Applying Agile Principles 447

      Summary 447

      Further Reading 448

      Chapter Review Questions 448

      Exercises 448

Part VI Implementation and Quality Assurance 449

Chapter 18 Implementation Considerations 450

      18.1 Coding Standards 450

      18.1.1 What Are Coding Standards? 451

      18.1.2 Why Coding Standards? 455

      18.1.3 Code Review Checklist 455

      18.1.4 Guidelines for Practicing Coding Standards 456

      18.2 Organizing the Implementation Artifacts 457

      18.3 Generating Code from Design 459

      18.3.1 Implementing Classes and Interfaces 459

      18.3.2 From Sequence Diagram to Method Code Skeleton 460

      18.3.3 Implementing Association Relationships 460

      18.4 Assigning Implementation Work to Team Members 461

      18.5 Pair Programming 462

      18.6 Test-Driven Development 463

      18.6.1 Test-Driven Development Workflow 463

      18.6.2 Merits of Test-Driven Development 465

      18.6.3 Potential Problems 466

      18.7 Applying Agile Principles 466

      18.8 Tool Support for Implementation 467

      Summary 467

      Further Reading 467

      Chapter Review Questions 468

      Exercises 468

Chapter 19 Software Quality Assurance 469

      19.1 Benefits of Software Quality Assurance 469

      19.2 Software Quality Attributes 470

      19.3 Quality Measurements and Me tries 472

      19.3.1 Usefulness of Quality Measurements and Metrics 473

      19.3.2 Conventional Quality Metrics 474

      19.3.3 Reusing Conventional Metrics for Object-Oriented Software 480

      19.3.4 Object-Oriented Quality Metrics 480

      19.4 Software Verification and Validation Techniques 483

      19.4.1 Inspection 484

      19.4.2 Walk through 485

      19.4.3 Peer Review 486

      19.5 Verifieation and Validation in the Life Cycle 487

      19.6 Software Quality Assurance Functions 490

      19.6.1 Definition of Processes and Standards 490

      19.6.2 Quality Management 494

      19.6.3 Process Improvement 495

      19.7 Applying Agile Principles 497

      19.8 Tool Support for SQA 498

      Summary 498

      Further Reading 499

      Chapter Review Questions 499

      Exercises 499

Chapter 20 Software Testing 501

      20.1 What Is Software Testing? 502

      20.2 Why Software Testing? 503

      20.3 Conventional Black-Box Testing 504

      20.3.1 Functional Testing:An Example 504

      20.3.2 Equivalence Partitioning 505

      20.3.3 Boundary Value Analysis 507

      20.3.4 Cause-Effect Analysis 509

      20.4 Conventional White-Box Testing 510

      20.4.1 Basis Path Testing 510

      20.4.2 Cyclomatic Complexity 511

      20.4.3 Flow Graph Test Coverage Criteria 512

      20.4.4 Testing Loops 512

      20.4.5 Data Flow Testing 514

      20.4.6 Coverage Criteria for Data Flow Testing 515

      20.4.7 Inter procedural Data Flow Testing 515

      20.5 Test Coverage 516

      20.6 A Generic Software Testing Process 517

      20.7 Object-Oriented Software Testing 518

      20.7.1 Use Case-Based Testing 518

      20.7.2 Object State Testing with Class Bench 520

      20.7.3 Testing Class Hierarchy 523

      20.7.4 Testing Exception-Handling Capabilities 524

      20.8 Testing Web Applications 525

      20.8.1 Object-Oriented Model for Web Application Testing 525

      20.8.2 Static Analysis Using the Object-Oriented Model 526

      20.8.3 Test Case Generation Using the Object-Oriented Model 527

      20.8.4 Web Application Testing with Http Unit 527

      20.9 Testing for Nonfunctional Requirements 527

      20.9.1 Performance and Stress Testings 527

      20.9.2 Testing for Security 528

      20.9.3 Testing User Interface 529

      20.10 Software Testing in the Life Cycle 529

      20.11 Regression Testing 532

      20.12 When to Stop Testing? 533

      20.13 Applying Agile Principles 534

      20.14 Tool Support for Testing 534

      Summary 535

      Further Reading 535

      Chapter Review Questions 535

      Exercises 535

Part VII Maintenance and Configuration Management 537

Chapter 21 Software Maintenance 538

      21.1 What Is Software Maintenance? 539

      21.2 Factors That Mandate Change 539

      21.3 Lehman's Laws of System Evolution 540

      21.4 Types of Software Maintenance 541

      21.5 Software Maintenance Process and Activities 542

      21.5.1 Maintenance Process Models 542

      21.5.2 Program Understanding 543

      21.5.3 Change Identification and Analysis 544

      21.5.4 Configuration Change Control 547

      21.5.5 Change Implementation, Testing, and Delivery 547

      21.6 Reverse-Engineering 547

      21.6.1 Reverse-Engineering Workflow 548

      21.6.2 Usefulness of Reverse-Engineering 548

      21.6.3 Reverse-Engineering: A Case Study 549

      21.7 Software Reengineering 549

      21.7.1 Objectives of Reengineering 550

      21.7.2 Software Reengineering Process 551

      21.7.3 Software Reengineering: A Case Study551

      21.8 Patterns for Software Maintenance 553

      21.8.1 Simplifying Client Interface with Facade 553

      21.8.2 Simplifying Component Interaction with Mediator 553

      21.8.3 Other Pattems for Software Maintenance 555

      21.9 Applying Agile Prineiples 555

      21.10 Tool Support for Software Maintenance 557

      Summary 559

      Further Reading 560

      Chapter Review Questions 560

      Exercises 560

Chapter 22 Software Configuration Management 562

      22.1 The Baseline sofa Software Life Cycle 563

      22.2 What Is Software Configuration Management? 564

      22.3 Why Software Configuration Management? 565

      22.4 Software Configuration Management Functions 565

      22.4.1 Software Configuration ldentification 566

      22.4.2 Software Configuration Change Control 568

      22.4.3 Software Configuration Auditing 569

      22.4.4 Software Configuration Status Accounting 570

      22.5 Configuration Management in an Agile Project 570

      22.6 Software Configuration Management Tools 570

      Summary 572

      Further Reading 573

      Chapter Review Questions 573

      Exercises 573

Part VIII Project Management and Software Security 575

Chapter 23 Software Project Management 576

      23.1 Project Organization 577

      23.1.1 Project Format 578

      23.1.2 Team Structure 579

      23.2 Effort Estimation Methods 580

      23.2.1 The Function Point Method 581

      23.2.2 The COCOMO II Model 583

      23.2.3 The Delphi Estimation Method 588

      23.2.4 Agile Estimation 589

      23.3 Project Planning and Scheduling 591

      23.3.1 PERT Chart 591

      23.3.2 Gantt Chart and Staff Allocation 593

      23.3.3 Agile Planning 594

      23.4 Risk Management 595

      23.4.1 Risk Identification 596

      23.4.2 Risk Analysis and Prioritizing 597

      23.4.3 Risk Management Planning 599

      23.4.4 Risk Resolution and Monitoring 599

      23.5 Process Improvement 599

      23.6 Applying Agile Principles 601

      23.7 Tool Support for Project Management 602

      Summary 603

      Further Reading 603

      Chapter Review Questions 604

      Exercises 604

Chapter24 Software Security 606

      24.1 What Is Software Security? 607

      24.2 Security Requirements 608

      24.3 Secure Software Design Principles 609

      24.4 Secure Software Design Patterns 610

      24.5 Seven Best Practices of Software Security 612

      24.6 Risk Analysis with an Attack Tree 613

      24.7 Software Security in the Life Cycle 614

      24.7.1 Security in the Planning Phase 615

      24.7.2 Security in the Iterative Phase 623

      24.8 Applying Agile Principles 627

      24.9 Tool Support for Software Security 628

      Summary 629

      Further Reading 629

      Chapter Review Questions 630

      Exercises 630

Appendices

      A Personal Software Process: Estimation Planning, and Quality Assurance 631

      A.1 Effort Estimation in PSP 631

      A.2 Software Quality Assurance in PSP 632

      A.3 Design and Quality 633

      B Java Technologies 634

      B.1 Getting Started with Database Connectivity 634

      B.1.1 What Is Database Connectivity? 634

      B.1.2 Setting Up Data Sources 634

      B.1.3 Accessing Databases from a Program 635

      B.2 Getting Started with Swing 636

      B.2.1 Creating Main Window with JFrame 637

      B.2.2 Using Layout Managers to Arrange Components 638

      B.2.3 Processing Button Events with Action Listener 640

      B.2.4 Implementing Drawing Capabilities 640

      B.3 Getting Started with Java Server Pages 642

      B.3.1 What Are Java Server Pages? 642

      B.3.2 JSP Workflow 642

      B.3.3 Installing a Web Server with a JSP Container 643

      B.3.4 Using Java Server Pages 643

      C Software Tools 647

      C.1 NetBeans 647

      C.2 Using JUnit 648

      C.3 Running JUnit in NetBeans 652

      C.4 The Emma Coverage Tool 652

      C.5 The Cobertura Coverage Tool 653

      C.6 Web Application Testing with HttpUnit 655

      C.6.1 Configure an IDE to Use HttpUnit 655

      C.6.2 Implementing Test Cases in HttpUnit 655

      C.7 Using CVS and Subversion in NetBeans 656

      C.7.1 Creating a CVS Remote Repository 656

      C.7.2 Setting Up Subversion in NetBeans 658

      C.7.3 Checking Out Files from a Repository 659

      C.7.4 Editing Sources and Viewing Changes 661

      C.7.5 Viewing File Status 662

      C.7.6 Comparing File Revisions 662

      C.7.7 Merging Changes from Repository 662

      C.7.8 Resolving Conflicts 663

      C.7.9 Updating Local Copies 663

      C.7.10 Committing Local Files to a Repository 663

      C.7.11 Importing Files into a Repository 664

      D Project Descriptions 665

      D.1 Car Rental System 665

      D.2 National Trade Show Service System 666

      D.3 Study Abroad Management System 667

      D.4 UML Class Diagram Editor 669

      D.5 Radio Communication Simulator 670

      D.6 Object State Testing Environment 672

References 675

Index 682

查看更多

作者简介

David Kung is a full professor of the Department of Computer Science and Engineering at The University of Texas at Arlington. He is also the director of the Software Engineering Research Center, and director of the Software Engineering programs. He has more than 30 years software engineering experience working in academia and industry. He works with numerous companies in terms of training, consulting, and research collaboration. His research and teaching include agile methods, software design patterns, and testing OO software and Web applications. He has written/edited four books and published more than 100 technical articles. He and his students have designed and prototyped an agile development environment (IDE), and the OO software testing and maintenance environment, called OOTWorks, which was licensed to several leading IT, and telecommunications companies. The material presented in the book has been developed and taught during the last ten years. It is also used by the author to teach on-site training courses for several leading IT companies. Some companies adopt the methodology after the training courses.

查看更多

馆藏单位

中科院文献情报中心