Thư viện tri thức trực tuyến
Kho tài liệu với 50,000+ tài liệu học thuật
© 2023 Siêu thị PDF - Kho tài liệu học thuật hàng đầu Việt Nam

Introduction to Software Engineering
Nội dung xem thử
Mô tả chi tiết
K24760
www.crcpress.com
CHAPMAN & HALL/CRC INNOVATIONS IN
SOFTWARE ENGINEERING AND SOFTWARE DEVELOPMENT
Introduction to
Software
Engineering
Second Edition
Introduction to
Software
Engineering
Second Edition
Introduction to Software Engineering Leach
CHAPMAN & HALL/CRC INNOVATIONS IN
SOFTWARE ENGINEERING AND SOFTWARE DEVELOPMENT
Second Edition
Ronald J. Leach
Introduction to Software Engineering, Second Edition equips readers with the fundamentals to prepare them for satisfying careers as software engineers regardless of future
changes in the field, even if the changes are unpredictable or disruptive in nature. Retaining
the same organization as its predecessor, this second edition adds considerable material on
open source and agile development models.
The text helps readers understand software development techniques and processes at a
reasonably sophisticated level. Readers acquire practical experience through team software
projects. Throughout much of the book, a relatively large project is used to teach about the
requirements, design, and coding of software. In addition, a continuing case study of an agile software development project offers a complete picture of how a successful agile project
can work.
The book covers each major phase of the software development life cycle, from developing
software requirements to software maintenance. It also discusses project management and
explains how to read software engineering literature. Three appendices describe software
patents, command-line arguments, and flowcharts.
Features
• Gives readers the option of choosing which software development life cycle model to
focus on, including the classical waterfall model, rapid prototyping model, spiral model,
open source model, or agile method
• Uses many examples that illustrate the successes and pitfalls of software projects
• Encourages the reuse of existing software components in a systematic way
• Discusses the typical viewpoints of software managers on relevant technical activities,
giving readers additional perspectives on software engineering
• Presents state-of-the-art information on important software engineering trends
• Provides the basis for team software projects
• Includes a case study of an actual complex project created using an agile development
process
Information Technology
K24760_cover.indd 1 12/17/15 9:24 AM
Introduction to
Software
Engineering
Second Edition
Chapman & Hall/CRC Innovations in Software Engineering
and Software Development
Series Editor
Richard LeBlanc
Chair, Department of Computer Science and Software Engineering, Seattle University
AIMS AND SCOPE
This series covers all aspects of software engineering and software development. Books
in the series will be innovative reference books, research monographs, and textbooks at
the undergraduate and graduate level. Coverage will include traditional subject matter,
cutting-edge research, and current industry practice, such as agile software development
methods and service-oriented architectures. We also welcome proposals for books that
capture the latest results on the domains and conditions in which practices are most effective.
PUBLISHED TITLES
Building Enterprise Systems with ODP: An Introduction to Open
Distributed Processing
Peter F. Linington, Zoran Milosevic, Akira Tanaka, and Antonio Vallecillo
Computer Games and Software Engineering
Kendra M. L. Cooper and Walt Scacchi
Evidence-Based Software Engineering and Systematic Reviews
Barbara Ann Kitchenham, David Budgen, and Pearl Brereton
Fundamentals of Dependable Computing for Software Engineers
John Knight
Introduction to Combinatorial Testing
D. Richard Kuhn, Raghu N. Kacker, and Yu Lei
Introduction to Software Engineering, Second Edition
Ronald J. Leach
Software Designers in Action: A Human-Centric Look at Design Work
André van der Hoek and Marian Petre
Software Development: An Open Source Approach
Allen Tucker, Ralph Morelli, and Chamindra de Silva
Software Engineering: The Current Practice
Václav Rajlich
Software Essentials: Design and Construction
Adair Dingle
Software Metrics: A Rigorous and Practical Approach, Third Edition
Norman Fenton and James Bieman
Software Test Attacks to Break Mobile and Embedded Devices
Jon Duncan Hagar
CHAPMAN & HALL/CRC INNOVATIONS IN
SOFTWARE ENGINEERING AND SOFTWARE DEVELOPMENT
Introduction to
Software
Engineering
Second Edition
Ronald J. Leach
Howard University
Washington, DC, USA
CRC Press
Taylor & Francis Group
6000 Broken Sound Parkway NW, Suite 300
Boca Raton, FL 33487-2742
© 2016 by Taylor & Francis Group, LLC
CRC Press is an imprint of Taylor & Francis Group, an Informa business
No claim to original U.S. Government works
Version Date: 20150916
International Standard Book Number-13: 978-1-4987-0528-8 (eBook - PDF)
This book contains information obtained from authentic and highly regarded sources. Reasonable efforts have been
made to publish reliable data and information, but the author and publisher cannot assume responsibility for the validity of all materials or the consequences of their use. The authors and publishers have attempted to trace the copyright
holders of all material reproduced in this publication and apologize to copyright holders if permission to publish in this
form has not been obtained. If any copyright material has not been acknowledged please write and let us know so we may
rectify in any future reprint.
Except as permitted under U.S. Copyright Law, no part of this book may be reprinted, reproduced, transmitted, or utilized in any form by any electronic, mechanical, or other means, now known or hereafter invented, including photocopying, microfilming, and recording, or in any information storage or retrieval system, without written permission from the
publishers.
For permission to photocopy or use material electronically from this work, please access www.copyright.com (http://
www.copyright.com/) or contact the Copyright Clearance Center, Inc. (CCC), 222 Rosewood Drive, Danvers, MA 01923,
978-750-8400. CCC is a not-for-profit organization that provides licenses and registration for a variety of users. For
organizations that have been granted a photocopy license by the CCC, a separate system of payment has been arranged.
Trademark Notice: Product or corporate names may be trademarks or registered trademarks, and are used only for
identification and explanation without intent to infringe.
Visit the Taylor & Francis Web site at
http://www.taylorandfrancis.com
and the CRC Press Web site at
http://www.crcpress.com
v
Contents
Preface to the Second Edition, xiii
Preface to the First Edition, xxi
To the Instructor and the Reader, xxv
Chapter 1 ◾ Introduction 1
1.1 THE NEED FOR SOFTWARE ENGINEERING 1
1.2 ARE SOFTWARE TEAMS REALLY NECESSARY? 7
1.3 GOALS OF SOFTWARE ENGINEERING 10
1.4 TYPICAL SOFTWARE ENGINEERING TASKS 11
1.5 SOFTWARE LIFE CYCLES 13
1.5.1 Classical Waterfall Model 14
1.5.2 Rapid Prototyping Model 16
1.5.3 Spiral Model 21
1.5.4 Market-Driven Model of Software Development 24
1.5.5 Open Source Model of Software Development 25
1.5.6 Agile Programming Model of Software Development 27
1.5.7 Common Features of All Models of Software Development 28
1.5.8 Software Evolution and the Decision to Buy versus Build
versus Reuse versus Reengineer 28
1.6 DIFFERENT VIEWS OF SOFTWARE ENGINEERING ACTIVITIES 29
1.7 SOFTWARE ENGINEERING AS AN ENGINEERING DISCIPLINE 30
1.8 SOME TECHNIQUES OF SOFTWARE ENGINEERING 35
1.8.1 Reuse 36
1.8.2 Metrics 39
1.8.3 Computer-Aided Software Engineering (CASE) 41
1.8.4 Cost Estimation 45
1.8.5 Reviews and Inspections 46
vi ◾ Contents
1.9 STANDARDS COMMONLY USED FOR SOFTWARE DEVELOPMENT
PROCESSES 47
1.10 ORGANIZATION OF THE BOOK 49
SUMMARY 50
KEYWORDS AND PHRASES 51
FURTHER READING 52
Chapter 2 ◾ Project Management 55
2.1 SUBTEAMS NEEDED IN SOFTWARE ENGINEERING PROJECTS 57
2.2 NATURE OF PROJECT TEAMS 61
2.3 PROJECT MANAGEMENT 63
2.4 SOFTWARE PROJECT ESTIMATION 65
2.5 PROJECT SCHEDULING 74
2.6 PROJECT MEASUREMENT 77
2.7 PROJECT MANAGEMENT TOOLS 78
2.8 ROLE OF NETWORKS IN PROJECT MANAGEMENT 79
2.9 GROUPWARE 81
2.10 CASE STUDY IN PROJECT MANAGEMENT FOR AGILE PROCESSES 82
SUMMARY 85
KEYWORDS AND PHRASES 86
FURTHER READING 86
Chapter 3 ◾ Requirements 89
3.1 SOME PROBLEMS WITH REQUIREMENTS DETERMINATION 89
3.2 REQUIREMENTS ELICITATION 92
3.3 REQUIREMENTS TRACEABILITY 97
3.4 SOFTWARE ARCHITECTURES AND REQUIREMENTS 99
3.4.1 Use of Data Abstraction and Information Hiding in Requirements
Engineering 100
3.4.2 Regrouping Requirements in Requirements Engineering 102
3.4.3 Reuse of Requirements in Requirements Engineering 104
3.4.4 Automation of the Requirements Engineering Process 104
3.5 USE CASES IN REQUIREMENTS ENGINEERING 105
3.6 REENGINEERING SYSTEM REQUIREMENTS 106
3.7 ASSESSMENT OF FEASIBILITY OF SYSTEM REQUIREMENTS 108
3.8 USABILITY REQUIREMENTS 109
Contents ◾ vii
3.9 SPECIFYING REQUIREMENTS USING STATE DIAGRAMS
AND DECISION TABLES 115
3.10 SPECIFYING REQUIREMENTS USING PETRI NETS 119
3.11 ETHICAL ISSUES 119
3.12 SOME METRICS FOR REQUIREMENTS 124
3.13 THE REQUIREMENTS REVIEW 128
3.14 A MANAGEMENT VIEWPOINT 134
3.15 CASE STUDY OF A MANAGEMENT PERSPECTIVE
ON REQUIREMENTS IN AGILE DEVELOPMENT 136
3.16 THE MAJOR PROJECT: PROBLEM STATEMENT 139
3.17 THE MAJOR PROJECT: REQUIREMENTS ELICITATION 140
3.18 THE MAJOR SOFTWARE PROJECT: REQUIREMENTS ANALYSIS 146
SUMMARY 150
KEYWORDS AND PHRASES 151
FURTHER READING 151
Chapter 4 ◾ Software Design 157
4.1 INTRODUCTION 157
4.2 SOFTWARE DESIGN PATTERNS 159
4.3 INTRODUCTION TO SOFTWARE DESIGN REPRESENTATIONS 163
4.4 PROCEDURALLY ORIENTED DESIGN REPRESENTATIONS 169
4.5 SOFTWARE ARCHITECTURES 174
4.6 SOFTWARE DESIGN PRINCIPLES FOR PROCEDURALLY
ORIENTED PROGRAMS 177
4.7 WHAT IS AN OBJECT? 180
4.8 OBJECT-ORIENTED DESIGN REPRESENTATIONS 183
4.9 SOFTWARE DESIGN PRINCIPLES FOR OBJECT-ORIENTED
PROGRAMS 185
4.10 CLASS DESIGN ISSUES 189
4.11 USER INTERFACES 191
4.12 SOFTWARE INTERFACES 196
4.13 SOME METRICS FOR DESIGN 198
4.14 DESIGN REVIEWS 199
4.15 A MANAGER’S VIEWPOINT OF DESIGN 200
4.16 CASE STUDY OF DESIGN IN AGILE DEVELOPMENT 201
4.17 ARCHITECTURE OF THE MAJOR SOFTWARE ENGINEERING PROJECT 202
viii ◾ Contents
4.18 PRELIMINARY DESIGN OF THE MAJOR SOFTWARE PROJECT 206
4.19 SUBSYSTEM DESIGN FOR THE MAJOR SOFTWARE PROJECT 212
4.20 DETAILED DESIGN FOR THE MAJOR SOFTWARE PROJECT 217
SUMMARY 218
KEYWORDS AND PHRASES 221
FURTHER READING 221
Chapter 5 ◾ Coding 227
5.1 CHOICE OF PROGRAMMING LANGUAGE 227
5.2 CODING STYLES 230
5.3 CODING STANDARDS 237
5.4 CODING, DESIGN, REQUIREMENTS, AND CHANGE 239
5.5 COUPLING CAN BE DANGEROUS 240
5.6 SOME CODING METRICS 245
5.7 CODING REVIEWS AND INSPECTIONS 249
5.8 CONFIGURATION MANAGEMENT 249
5.9 A MANAGEMENT PERSPECTIVE ON CODING 254
5.10 CASE STUDY IN CODING IN AGILE DEVELOPMENT 255
5.11 CODING OF THE MAJOR SOFTWARE PROJECT 255
SUMMARY 260
KEYWORDS AND PHRASES 260
FURTHER READING 260
Chapter 6 ◾ Testing and Integration 267
6.1 TYPES OF SOFTWARE TESTING 269
6.2 BLACK-BOX MODULE TESTING 271
6.3 WHITE-BOX MODULE TESTING 274
6.4 REDUCING THE NUMBER OF TEST CASES BY EFFECTIVE
TEST STRATEGIES 278
6.5 TESTING OBJECTS FOR ENCAPSULATION AND COMPLETENESS 281
6.6 TESTING OBJECTS WITH INHERITANCE 284
6.7 GENERAL TESTING ISSUES FOR OBJECT-ORIENTED SOFTWARE 286
6.8 TEST SCRIPTS, TEST HARNESSES, AND TEST PLANS 288
6.9 SOFTWARE INTEGRATION 290
6.10 CLOUD COMPUTING AND SOFTWARE INTEGRATION:
SOFTWARE AS A SERVICE 297
Contents ◾ ix
6.11 MANAGING CHANGE IN THE INTEGRATION PROCESS 298
6.12 PERFORMANCE AND STRESS TESTING 300
6.13 QUALITY ASSURANCE 301
6.14 SOFTWARE RELIABILITY 302
6.15 A MANAGER’S VIEWPOINT ON TESTING AND INTEGRATION 305
6.16 CASE STUDY IN TESTING AND INTEGRATION IN AGILE
DEVELOPMENT 307
6.17 TESTING THE MAJOR SOFTWARE PROJECT 308
6.18 INTEGRATING THE MAJOR SOFTWARE PROJECT 309
SUMMARY 311
KEYWORDS AND PHRASES 312
FURTHER READING 312
Chapter 7 ◾ Delivery, Installation, and Documentation 315
7.1 DELIVERY 315
7.2 INSTALLATION 321
7.3 DOCUMENTATION 323
7.4 INTERNAL DOCUMENTATION 324
7.5 EXTERNAL DOCUMENTATION 325
7.6 DESIGN RATIONALES 326
7.7 INSTALLATION, USER, TRAINING, AND OPERATIONS MANUALS 327
7.8 ONLINE DOCUMENTATION 327
7.9 READING LEVELS 328
7.10 A MANAGER’S VIEW OF DELIVERY, INSTALLATION,
AND DOCUMENTATION 329
7.11 CASE STUDY OF DELIVERY IN AGILE DEVELOPMENT 329
7.12 DELIVERY, INSTALLATION, AND DOCUMENTATION
OF THE MAJOR SOFTWARE PROJECT 330
SUMMARY 331
KEYWORDS AND PHRASES 332
FURTHER READING 332
Chapter 8 ◾ Maintenance and Software Evolution 335
8.1 INTRODUCTION 335
8.2 CORRECTIVE SOFTWARE MAINTENANCE 338
8.3 ADAPTIVE SOFTWARE MAINTENANCE 343
x ◾ Contents
8.4 HOW TO READ REQUIREMENTS, DESIGNS, AND SOURCE CODE 346
8.5 A MANAGER’S PERSPECTIVE ON SOFTWARE MAINTENANCE 347
8.6 MAINTENANCE COSTS, SOFTWARE EVOLUTION,
AND THE DECISION TO BUY VERSUS BUILD
VERSUS REUSE VERSUS REENGINEER 347
8.7 MAINTENANCE IN AGILE DEVELOPMENT AND THE TOTAL LIFE
CYCLE COSTS 350
8.8 MAINTENANCE OF THE MAJOR SOFTWARE PROJECT 350
SUMMARY 350
KEYWORDS AND PHRASES 351
FURTHER READING 351
Chapter 9 ◾ Research Issues in Software Engineering 353
9.1 SOME IMPORTANT RESEARCH PROBLEMS IN SOFTWARE
ENGINEERING 354
9.1.1 The Fundamental Question 354
9.1.2 Requirements 354
9.1.3 Design 355
9.1.4 Coding 355
9.1.5 Testing 355
9.1.6 Integration 356
9.1.7 Maintenance 356
9.1.8 Cost Estimation 357
9.1.9 Software Reuse 357
9.1.10 Fault Tolerance 358
9.1.11 Metrics 359
9.1.12 Languages and Efficiency 359
9.1.13 Language Generators 360
9.1.14 Inspections and Reviews 360
9.1.15 Distributed Systems 361
9.1.16 Software Project Management 361
9.1.17 Formal Methods 361
9.1.18 Processes 361
9.1.19 Risk Management 362
9.1.20 Quality Assurance 362
Contents ◾ xi
9.1.21 Configuration Management 362
9.1.22 Crystal Ball 362
9.2 HOW TO READ THE SOFTWARE ENGINEERING RESEARCH
LITERATURE 362
FURTHER READING 365
APPENDIX A: AN INTERESTING SOFTWARE PATENT, 367
APPENDIX B: COMMAND-LINE ARGUMENTS, 369
APPENDIX C: FLOWCHARTS, 373
REFERENCES, 375
TRADEMARKS AND SERVICE MARKS, 389
xiii
Preface to the Second Edition
Since the first edition of this book was published, there have been enormous changes
to the computer software industry. The inventions of the smartphone and the tablet
have revolutionized our daily lives, and have transformed many industries. Online data is
ubiquitous. The pace of deployment of ever more advanced digital capabilities of modern
automobiles is breathtaking. Cloud computing has the potential to both greatly increase
productivity and greatly reduce the maintenance and upgrade costs for large organizations. A student studying software engineering might not even recall a time when these
devices and software systems had not been ubiquitous.
An experienced software professional probably would observe that there are problems
in this paradise, and that most of these problems had been around in one form or another
for many years, regardless of the advances in technology. Nearly all these problems are in
the area of software. Here are some examples.
The first problem is in the education of computer science students. In the mid-1990s, my
university was partnering with a major research university on educational issues in computer science. An unnamed faculty member at our partner university was quoted as saying
the following about the education of his students, although the same comment could have
been applied to almost any college or university at that time: “We teach our students to
write 300-line programs from scratch in a dead language.” This is a powerful statement
and had a major influence on the curriculum in my department. That influence continues
to this very day.
Unfortunately, this statement is still generally applicable to the way that software development is still taught, at least in the United States. The only difference is that the dead
language, which at the time was Pascal, generally is not taught anywhere.
The rest of the statement is true, because there is little systematic effort to reuse the large
body of existing code for applications and subsystems. Students are encouraged to use
any available software development toolkit (SDK) and to use an application programming
interface (API) in much of their software development. If they have been introduced to
cloud computing in their coursework, they probably have used interfaces such as HTTP,
SOAP, REST, or JSON. They generally are not encouraged to reuse code written by others
in any systematic way. This is somewhat surprising, because so much source code is available on the Internet, and because the effective, systematic reuse of large-scale source code
components to make prototypes that morph into complete working projects is at the heart
of the rapid development process known as “agile programming” or “agile development.”