Software Engineering 2nd Edition David C. Kung Instant Download
Software Engineering 2nd Edition David C. Kung Instant Download
Kung
pdf download
https://ebookname.com/product/software-engineering-2nd-edition-
david-c-kung/
https://ebookname.com/product/software-engineering-for-game-
developers-software-engineering-series-1st-edition-ph-d/
https://ebookname.com/product/component-software-beyond-object-
oriented-programming-2nd-edition-szyperski-c/
https://ebookname.com/product/software-engineering-effective-
teaching-and-learning-approaches-and-practices-1st-edition-heidi-
j-c-ellis/
https://ebookname.com/product/practical-analog-and-digital-
filter-design-les-thede/
Doing Time on the Outside Deconstructing the Benevolent
Community 1st Edition Madonna R. Maidment
https://ebookname.com/product/doing-time-on-the-outside-
deconstructing-the-benevolent-community-1st-edition-madonna-r-
maidment/
https://ebookname.com/product/sites-of-european-antisemitism-in-
the-age-of-mass-politics-1880-1918-robert-nemes/
https://ebookname.com/product/student-s-guide-to-landmark-
congressional-laws-on-civil-rights-marcus-d-pohlmann/
https://ebookname.com/product/leisure-pleasure-and-healing-1st-
edition-dvorjetski/
https://ebookname.com/product/substance-abuse-prevention-the-
intersection-of-science-and-practice-1st-edition-julie-hogan/
The Art of SEO Mastering Search Engine Optimization
Theory in Practice 1st Edition Eric Enge
https://ebookname.com/product/the-art-of-seo-mastering-search-
engine-optimization-theory-in-practice-1st-edition-eric-enge/
Software Engineering
Second Edition
David C. Kung
SOFTWARE ENGINEERING
Published by McGraw Hill LLC, 1325 Avenue of the Americas, New York, NY 10019. Copyright ©2024 by McGraw Hill LLC. All
rights reserved. Printed in the United States of America. No part of this publication may be reproduced or distributed in any form or
by any means, or stored in a database or retrieval system, without the prior written consent of McGraw Hill LLC, including, but not
limited to, in any network or other electronic storage or transmission, or broadcast for distance learning.
Some ancillaries, including electronic and print components, may not be available to customers outside the United States.
1 2 3 4 5 6 7 8 9 LCR 28 27 26 25 24 23
ISBN 978-1-265-24243-5
MHID 1-265-24243-7
All credits appearing on page or at the end of the book are considered to be an extension of the copyright page.
The Internet addresses listed in the text were accurate at the time of publication. The inclusion of a website does not indicate an
endorsement by the authors or McGraw Hill LLC, and McGraw Hill LLC does not guarantee the accuracy of the information presented
at these sites.
mheducation.com/highered
Dedication
To My Father
Brief Contents
Preface xv
Pa r t IV
Pa r t I Modeling and Design of Other Types
Introduction and System of Systems 281
Engineering 1 13 Modeling and Design of Event-Driven
Systems 282
1 Introduction 2
14 Activity Modeling for Transformational
2 Software Process and Methodology 10 Systems 314
3 System Engineering 43 15 Modeling and Design of Rule-Based
Pa r t II Systems 330
iv
Brief Contents v
Pa r t VII Appendices
A Personal Software Process: Estimation,
Maintenance and Configuration Planning, and Quality Assurance 608
Management 511 B Java Technologies 611
21 Software Maintenance 512
C Software Tools 623
22 Software Configuration Management 541
D Project Descriptions 638
Pa r t VIII E Object Constraint Language 644
Project Management and Index 649
Software Security 553
23 Software Project Management 554
24 Software Security 584
Contents
vi
Contents vii
Pa r t II 5.5
5.4.5 Domain Model Review Checklist 115
Putting It Together 115
Analysis and Architectural Design 67 5.6 Guidelines for Domain Modeling 118
5.7 Applying Agile Principles 120
Chapter 4 5.8 Tool Support for Domain Modeling 121
5.9 Summary 121
Software Requirements Elicitation 68 5.10 Chapter Review Questions 122
4.1 What Is Requirements Elicitation? 68 5.11 Exercises 122
4.2 Importance of Requirements Elicitation 70
4.3 Types of Requirement 71 Chapter 6
4.4 Challenges of Requirements Elicitation 72
4.5 Steps for Requirements Elicitation 74 Architectural Design 123
4.5.1 Collecting Information 75 6.1 What
Is Architectural Design? 124
4.5.2 Constructing Analysis Models 78 6.2 The Importance of Architectural Design 124
4.5.3 Deriving Requirements and Constraints 79 6.3 Software Design Principles 125
4.5.4 Requirements Specification Standards 84 6.3.1 What Are Software Design Principles? 126
4.5.5 Conducting Feasibility Study 86 6.3.2 Design for Change 126
4.5.6 Reviewing Requirements Specification 86 6.3.3 Separation of Concerns 127
4.6 Applying Agile Principles 87 6.3.4 Information Hiding 128
4.7 Requirements Management and Tools 89 6.3.5 High Cohesion 129
4.8 Summary 90 6.3.6 Low Coupling 130
4.9 Chapter Review Questions 90 6.3.7 Keep It Simple and Stupid 131
4.10 Exercises 90 6.4 Types of System 131
6.4.1 Interactive Systems 132
Chapter 5 6.4.2 Event-Driven Systems 133
6.4.3 Transformational Systems 134
Domain Modeling 92 6.4.4 Rule-Based Systems 135
6.4.5 Object-Persistence Subsystems 135
5.1 What
Is Domain Modeling? 92
6.4.6 System and Subsystem 135
5.2 Why Domain Modeling? 93
6.5 Architectural Styles 136
5.3 Object-Orientation and Class Diagram 94
6.5.1 N-Tier Architectural Style 137
5.3.1 Extensional and Intentional Definitions 94
6.5.2 Client-Server Architectural Style 139
5.3.2 Class and Object 95
6.5.3 Main Program and Subroutine Architectural
5.3.3 Object and Attribute 96
Style 140
5.3.4 Association 97
6.5.4 Event-Driven System Architecture 142
5.3.5 Multiplicity and Role 98
6.5.5 Persistence Framework Architectural Style 144
5.3.6 Aggregation 99
6.5.6 Other Architectural Styles 145
5.3.7 Inheritance 100
6.6 Architectural Design Process 146
5.3.8 Inheritance and Polymorphism 101
6.6.1 Determine Architectural Design
5.3.9 Association Class 102
Objectives 147
5.4 Steps for Domain Modeling 103
6.6.2 Perform Custom Architectural Design 148
5.4.1 Collecting Application Domain 6.6.3 Specify Subsystem Functions and
Information 104 Interfaces 148
5.4.2 Brainstorming 105 6.6.4 Review the Architectural Design 149
5.4.3 Classifying Brainstorming Results 106
6.7 Architectural Style and Package Diagram 149
5.4.4 Visualizing the Domain Model 110
viii Contents
6.8
Guidelines for Architectural Design 151 8.6 Not Show Exception Handling 190
Do
6.9 Architectural Design and Design Patterns 152 8.7 Including Other Use Cases 191
6.10 Applying Agile Principles 152 8.8 Continuing with Other Use Cases 191
6.11 Summary 153 8.9 Commonly Seen Problems 192
6.12 Chapter Review Questions 153 8.10 Guidelines for Expanded Use Cases 193
6.13 Exercises 154 8.11 Summary 195
8.12 Chapter Review Questions 195
Pa r t III 8.13 Exercises 195
10.5 The
Controller Pattern 227
10.5.1 A Motivating Example 228
Chapter 12
10.5.2 What Is a Controller? 230
10.5.3 Applying the Controller Pattern 231
User Interface Design 259
10.5.4 Controller and Software Design 12.1 W hat Is User Interface Design? 260
Principles 231 12.2 Why Is User Interface Design Important? 261
10.5.5 Types of Controller 233 12.3 Graphical User Interface Widgets 262
10.5.6 Keeping Track of Use Case State 234 12.3.1 Container Widgets 262
10.5.7 Bloated Controller 235 12.3.2 Input, Output, and Information
10.5.8 When to Apply the Controller Presentation Widgets 263
Pattern? 237 12.3.3 Guidelines for Using GUI Widgets 265
10.5.9 Guidelines for Applying Controller 237 12.4 User Interface Design Process 266
10.6 The Expert Pattern 238 12.4.1 Case Study: User Interface Design for a
10.6.1 Expert and Antiexpert 239 Diagram Editor 266
10.6.2 Expert Pattern Involving More Than One 12.4.2 Identify Major System Displays 267
Object 240 12.4.3 Producing a Draft Layout Design 268
10.6.3 When to Apply the Expert Pattern? 240 12.4.4 Specifying Interaction Behavior 270
10.6.4 Guidelines for Applying Expert 240 12.4.5 Constructing a Prototype 272
10.7 The Creator Pattern 241 12.4.6 Evaluating the User Interface Design
with Users 273
10.7.1 What Is a Creator? 242
12.4.7 User Interface Design Review
10.7.2 Benefits of the Creator Pattern 243
Checklist 274
10.7.3 When to Apply the Creator Pattern? 243
12.5 Designing User Support Capabilities 275
10.8 Summary 243
12.6 Guidelines for User Interface Design 276
10.9 Chapter Review Questions 244
12.7 Applying Agile Principles 278
10.10 References 245
12.8 Tool Support for User Interface Design 279
10.11 Exercises 245
12.9 Summary 279
Chapter 11 12.10 Chapter Review Questions 280
12.11 Exercises 280
Deriving a Design Class Diagram 246
11.1 W hat Is a Design Class Diagram? 248
Pa r t IV
11.2 Usefulness of a Design Class Diagram 248 Modeling and Design of Other Types
11.3 Steps for Deriving a Design Class Diagram 249 of Systems 281
11.3.1 Identifying Classes 249
11.3.2 Identifying Methods 250 Chapter 13
11.3.3 Identifying Attributes 251
11.3.4 Identifying Relationships 253 Modeling and Design of Event-Driven Systems 282
11.3.5 Design Class Diagram Review 13.1 hat Is Object State Modeling? 283
W
Checklist 255 13.2 Why Object State Modeling? 284
11.4 Organize Classes with Package Diagram 255 13.3 Basic Definitions 284
11.5 Applying Agile Principles 256 13.4 Steps for Object State Modeling 285
11.6 Tool Support for Design Class Diagram 257 13.4.1 Collecting and Classifying State Behavior
11.7 Summary 257 Information 285
11.8 Chapter Review Questions 257 13.4.2 Constructing a Domain Model to Show
the Context 288
11.9 Exercises 258
x Contents
16.1.1 P rogram to an Interface 354 17.6 R etrieving Different Objects with Factory
16.1.2 Use Polymorphism to Provide Behavioral Method 414
Variations 354 17.7 Reducing Number of Classes with Prototype 416
16.1.3 Favor Composition over Inheritance 355 17.8 Applying Agile Principles 421
16.1.4 Use Delegation to Support Composition 356 17.9 Summary 421
16.2 Process for Applying Patterns 356 17.10 Chapter Review Questions 422
16.3 Case Study: State Diagram Editor 358 17.11 Exercises 422
16.4 Working with Complex Structures 359
16.4.1 Representing Recursive Whole-Part Pa r t VI
Structures 360
16.4.2 Accessing Different Data Structures with
Implementation and Quality
Iterator 363 Assurance 423
16.4.3 Choosing Algorithms with Strategy 366
16.4.4 Applying Type-Dependent Operations Chapter 18
with Visitor 368
16.4.5 Storing and Restoring Object State with Implementation Considerations 424
Memento 372
18.1 C oding Standards 424
16.5 Object Creation for Different Design Objectives 375
18.1.1 What Are Coding Standards? 425
16.5.1 Creating Families of Products 375
18.1.2 Why Coding Standards? 429
16.5.2 Varying Process and Process Steps 377
18.1.3 Guidelines for Practicing Coding
16.5.3 Reusing Objects with Flyweight 380 Standards 429
16.6 Designing Graphical User Interface and Display 384 18.2 Organizing the Implementation Artifacts 431
16.6.1 Keeping Track of Editing States 384 18.3 Generating Code from Design 433
16.6.2 Responding to Editing Events 386
18.3.1 Implementing Classes and Interfaces 433
16.6.3 Converting One Interface to Another 389
18.3.2 From Sequence Diagram to Method
16.6.4 Request Handler Is Unknow in Advance 391 Code Skeleton 433
16.6.5 Enhancing Display Capability with 18.3.3 Implementing Association Relationships 434
Decorator 395
18.4 Assigning Implementation Work to Team
16.7 Applying Agile Principles 398 Members 435
16.8 Summary 398 18.5 Pair Programming 435
16.9 Chapter Review Questions 399 18.6 Test-Driven Development 436
16.10 Exercises 399 18.6.1 Test-Driven Development Workflow 436
16.11 References 399 18.6.2 Merits of Test-Driven Development 439
18.6.3 Potential Problems 439
Chapter 17 18.7 Applying Agile Principles 439
18.8 Tool Support for Implementation 440
Applying Patterns to Design a Persistence 18.9 Summary 440
Framework 400 18.10 Chapter Review Questions 441
17.1 roblems with Direct Database Access 401
P 18.11 Exercises 441
17.2 Hiding Persistence Storage with Bridge 401
17.3 Encapsulating Database Requests as Commands 404 Chapter 19
17.4 Hiding Network Communication with Remote
Proxy 408 Software Quality Assurance 442
17.5 Sharing Common Code with Template Method 411 19.1 Benefits of Software Quality Assurance 442
xii Contents
19.2 S oftware Quality Attributes 443 20.6 A Generic Software Testing Process 490
19.3 Quality Measurements and Metrics 445 20.7 Object-Oriented Software Testing 492
19.3.1 Usefulness of Quality Measurements and 20.7.1 Use Case–Based Testing 492
Metrics 446 20.7.2 Object State Testing with ClassBench 494
19.3.2 Conventional Quality Metrics 447 20.7.3 Testing Class Hierarchy 497
19.3.3 Reusing Conventional Metrics 20.7.4 Testing Exception-Handling Capabilities 497
for Object-Oriented Software 453 20.8 Testing Web Applications 498
19.3.4 Object-Oriented Quality Metrics 453 20.8.1 Object-Oriented Model for Web
19.4 Software Verification and Validation Application Testing 498
Techniques 457 20.8.2 Static Analysis Using the Object-Oriented
19.4.1 Inspection 458 Model 499
19.4.2 Walkthrough 459 20.8.3 Test Case Generation Using the Object-
19.4.3 Peer Review 459 Oriented Model 500
19.5 Verification and Validation in the Life Cycle 461 20.8.4 Web Application Testing with HttpUnit 500
19.6 Software Quality Assurance Functions 464 20.9 Testing for Nonfunctional Requirements 500
19.6.1 Definition of Processes and 20.9.1 Performance and Stress Testings 500
Standards 465 20.9.2 Testing for Security 501
19.6.2 Quality Management 468 20.9.3 Testing User Interface 502
19.6.3 Process Improvement 469 20.10 Software Testing in the Life Cycle 503
19.7 Applying Agile Principles 471 20.11 Regression Testing 506
19.8 Tool Support for SQA 472 20.12 When to Stop Testing? 506
19.9 Summary 473 20.13 Applying Agile Principles 507
19.10 Chapter Review Questions 473 20.14 Tool Support for Testing 507
19.11 Exercises 473 20.15 Summary 508
20.16 Chapter Review Questions 508
Chapter 20 20.17 Exercises 508
20.18 References 509
Software Testing 474
20.1 W hat Is Software Testing? 475 Pa r t VII
20.2 Why Software Testing? 476 Maintenance and Configuration
20.3 Conventional Black-Box Testing 477 Management 511
20.3.1 Functional Testing: An Example 477
20.3.2 Equivalence Partitioning 478
20.3.3 Boundary Value Analysis 480
Chapter 21
20.3.4 Cause-Effect Analysis 482
Software Maintenance 512
20.4 Conventional White-Box Testing 483
21.1 hat Is Software Maintenance? 513
W
20.4.1 Basis Path Testing 483
21.2 Factors That Mandate Change 513
20.4.2 Cyclomatic Complexity 485
20.4.3 Flow Graph Test Coverage Criteria 485 21.3 Lehman’s Laws of System Evolution 514
20.4.4 Testing Loops 486 21.4 Types of Software Maintenance 515
20.4.5 Data Flow Testing 487 21.5 Software Maintenance Process and Activities 516
20.4.6 Coverage Criteria for Data Flow 21.5.1 Maintenance Process Models 516
Testing 488 21.5.2 Program Understanding 517
20.4.7 Interprocedural Data Flow Testing 489 21.5.3 Change Identification and Analysis 518
20.5 Test Coverage 489 21.5.4 Configuration Change Control 520
Contents xiii
BACKGROUND
Computers are widely used in all sectors of our society, performing a variety of func-
tions with the application software running on them. As a result, the market for soft-
ware engineers is booming. There is a significant gap between the demand and supply,
especially for graduates with software engineering education.
Many people do not know the scope and usefulness of software engineering, and
the discipline is often misunderstood. Many media outlets deem software engineering
as writing Java programs. Some students think that software engineering includes
everything related to software. Others think that software engineering is drawing
UML diagrams, as the following story illustrates. Years ago, after the first class of a
software engineering course, a student told me, “professor, you know that this will be
an 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.” So what is software engineering? As a discipline, it encompasses
research, education, and application of engineering processes, methodologies, quality
assurance, and project management to significantly increase software productivity
and software quality while reducing software cost and time to market. A software pro-
cess describes the phases and what should be done in each phase. It does not specify
(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 docu-
menting analysis and design ideas. UML and the Unified Process (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 gap mentioned above, 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
carry out the activities to the extent that a beginner can follow to produce and deploy
the desired software system. Without a methodology, a beginning software engineer
would have to spend years of on-the-job training to learn design, implementation, and
testing skills.
This book is also motivated by emerging interests in agile processes, design pat-
terns, and test-driven development (TDD). Agile processes emphasize teamwork, de-
sign for change, rapid deployment of small increments of the software system, and
joint development with the customer and users. Design patterns are effective design
xvi Preface
solutions to common design problems. They promote software reuse and improve
team communication. Patterns also empower less-experienced software engineers to
produce high-quality software because patterns encode software design principles.
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, fi-
nancing, construction drawings, construction, procurement of equipment, installation of
equipment, preopening, and grand opening. However, knowing the overall process is not
enough. The development team must know how to perform the activities 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 “requirements acquisition” from stake-
holders, 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 cannot 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 pro-
duced, 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 architec-
tural design patterns improves quality and ability of the park to adapt to changing
needs— that is, design for change. Teamwork is emphasized because effective col-
laboration 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 inte-
grates UML, design patterns, 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
Preface xvii
AUDIENCES
This book is for students majoring in computer science, software engineering or
information systems, as well as 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 software industry.
This book’s material evolved over the last two decades from courses taught at universi-
ties and companies 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 allowed the author to observe how students and software engi-
neers applied UP, UML, design patterns, and TDD, and the difficulties they faced. Their
feedback led to the development of the Agile Unified Methodology (AUM) presented in
this book and the continual improvement of the material.
The book describes AUM in detail to facilitate students to learn and develop anal-
ysis and design abilities. In particular, each analysis or design activity is decomposed
into a number of steps, and how to perform each step is described in detail. This treat-
ment is intended to facilitate students learning how to perform analysis and design.
Once acquired the abilities, one may skip some or most of the steps.
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 activ-
ities. It includes requirements elicitation, domain modeling, and architectural 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 ap-
ply responsibility assignment patterns, how to 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 system.
In particular, Chapter 13 presents the modeling and design of event-driven sys-
tems. Chapter 14 presents the modeling and design of transformational systems.
Chapter 15 presents the modeling and design of business rule-based systems.
Part V. Applying Situation-Specific Patterns. This part consists of two chapters
and presents how 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 chap-
ters. They present implementation considerations, software quality assurance
concepts and activities, and software testing.
xviii Preface
ACKNOWLEDGMENTS
I would like to thank my numerous students who constantly stimulate me with their
questions, feedback, enthusiasm, and effort to apply AUM to real-world projects. They
provided valuable improvement suggestions. Many continue to practice AUM in in-
dustry after graduation and share with me their valuable experiences. I also want to
thank the reviewers and numerous instructors for their comments and suggestions.
These have significantly improved the organization, presentation, and many other as-
pects of the book. I am thankful for the opportunities to teach on-site training courses
and for-credit courses for various companies. These allow me to interact with many
software developers and learn from them. Some companies let the developers apply
AUM and patterns to in-house or product-development projects. All of these proj-
ects generated very positive feedback including high-quality design documentation
and drastic reduction in defect rates. I want to thank the managements of various
companies for their constant support to industry-university collaboration and the
opportunity for me to learn from practice.
This page intentionally left blank
part I
Introduction and System
Engineering
Chapter 1 Introduction 2
Chapter 2 Software Process and Methodology 10
Chapter 3 System Engineering 43
1 Chapter
Introduction
2
Chapter 1 Introduction 3
Computer programmers write and test code that allows computer applications and
software programs to function properly. The BLS survey also showed that the median
pay for a computer programmer in May 2019 was $89,190, which was lower than the
median pay for computer and IT occupations and much lower than the median pay for
an application software developer.
Unlike a computer programmer, an application software developer is required to
identify and formulate feasible and cost-effective solutions to solve large, complex re-
al-world problems and design software to implement such solutions. The solutions and
the software must take into account potential impact to public health, safety, security,
and welfare as well as cultural, social, and environmental aspects (abet.org). To be
able to perform the work required of an application software developer, an education
in software engineering is highly desired.
This definition includes several important points. First, the overall objective of
software engineering is significantly increasing software productivity (P) and quality
(Q) while reducing software production and operating costs (C) as well as time to
market (T). These are abbreviated as PQCT in this book. In other words, significantly
improving PQCT means producing higher-quality software more quickly, efficiently,
and cost-effectively. These will eventually contribute to the improvement of our lives.
Second, research, education, and practice of software engineering processes, meth-
ods, and techniques are the means to significantly improve PQCT.
Software development involves three tracks of interweaving activities, as Figure 1.1
exhibits. These activities take place simultaneously throughout the software life cycle:
1. Software development activities.
2. Software quality assurance activities.
3. Software project management activities.
Software development activities are a set of activities performed to transform
an initial system concept into a software system running in the target environment.
Like many engineering projects, software development activities include software
4 Part I Introduction and System Engineering
Our website is not just a platform for buying books, but a bridge
connecting readers to the timeless values of culture and wisdom. With
an elegant, user-friendly interface and an intelligent search system,
we are committed to providing a quick and convenient shopping
experience. Additionally, our special promotions and home delivery
services ensure that you save time and fully enjoy the joy of reading.
ebookname.com