Home > Store

Fundamentals of Software Engineering, 2nd Edition

Register your product to gain access to bonus material or receive a coupon.

Fundamentals of Software Engineering, 2nd Edition


  • Your Price: $192.65
  • List Price: $226.65
  • Usually ships in 24 hours.



  • NEW - Deeper analysis and explanation of object-oriented techniques.
    • Teaches students about this established and widely adopted methodology.

  • NEW - Use of Unified Modeling Language (UML).
    • Encourages students to learn about graphical method of description that is widely used for requirements descriptions.

  • NEW - Coverage of requirements analysis and software architecture.
    • Teaches students about these two areas that have become better understood and more standard.

  • NEW - Revised and updated case studies.
    • Better demonstrate the principles discussed in the text.

  • NEW - Model checking—A technique that provides automatic support to the human activity of software verification.
    • Exposes students to this powerful new verification technique.

  • NEW - GQM—Used to evaluate software quality and help improve the software process.
    • Enables students to learn about this up-to-date and widely known technique.

  • NEW - Coverage of Z.
    • Exposes students to this fairly well-known and established formal specification language.

  • Principles and techniques are emphasized rather than specific tools.
    • Students learn why particular techniques should or should not be used. Understanding the principles and techniques on which tools are based makes mastering a variety of specific tools easier for students.

  • Case studies—Including several studies of real-life software engineering projects and their analyses.
    • Demonstrates the integration of different concepts, contrasts different approaches in realistic situations, and exposes students to the diversity of problems faced in industrial practice.

  • A variety of exercises—Short exercises interspersed throughout the chapters help students to extend or apply their knowledge; longer end-of-chapter exercises help students integrate the material in each chapter; term-projects provide team exercises for developing a software system.
    • Enables students to apply the principles presented in the text.


  • Copyright 2003
  • Dimensions: 7" x 9-1/4"
  • Pages: 624
  • Edition: 2nd
  • Book
  • ISBN-10: 0-13-305699-6
  • ISBN-13: 978-0-13-305699-0

The long-awaited second edition of Fundamentals of Software Engineering presents the fundamental principles of software engineering and illustrates the application of those principles in the different phases of software development. It stresses the importance of a rigorous approach to the practice of software engineering. Over 350 exercises are provided to aid in the comprehension of the material. Over 20 in-depth case studies show how to deal with the intricacies of real-world problems.

This second edition maintains the successful structure of the first edition and enhances the contents by adding treatment of recent developments in software engineering.

New coverage to this edition includes:

  • More thorough treatment of object orientation
  • Greater coverage of software architecture and components
  • Introduction to modeling languages Z and UML
  • Description and case study of requirements engineering
  • New validation techniques, including model checking
  • Quality improvement paradigms, including GQM and CMM
  • More material on software processes, including the unified process
  • Several new case studies on process, requirements, design, organization, and systems engineering
  • A comprehensive supplement package, including an Instructor's Resource CD and a Companion Website.

Sample Content

Table of Contents

1. Software Engineering: A Preview.

The Role of Software Engineering in System Design. A Shortened History of Software Engineering. The Role of the Software Engineer. The Software Life Cycle. The Relationship of Software Engineering to Other Areas of Computer Science. The Relationship of Software Engineering to Other Disciplines.

2. Software: Its Nature and Qualities.

Classification of Software Qualities. Representative Qualities. Quality Requirements in Different Application Areas. Measurement of Quality.

3. Software Engineering Principles.

Rigor and Formality. Separation of Concerns. Modularity. Abstraction. Anticipation of Change. Generality. Incrementality. Two Case Studies Illustrating Software Engineering Principles.

4. Software Design.

The Software Design Activity and its Objectives. Modularization Techniques. Handling Anomalies. A Case Study in Design. Concurrent Software. Object-Oriented Design. Architecture and Components.

5. Software Specification.

The Uses of Specifications. Specification Qualities. Classification of Specification Styles. Verification of Specifications. Operational Specifications. Descriptive Specifications. Building and Using Specifications in Practice.

6. Software Verification.

Goals and Requirements of Verification. Approaches to Verification. Testing. Analysis. Symbolic Execution. Model Checking. Putting it All Together. Debugging. Verifying Other Software Properties.

7. The Software Production Process.

What is a Software Process Model? Why Are Software Process Models Important? The Main Activities of Software Production. An Overview of Software Process Modes. Dealing with Legacy Software. Case Studies. Organizing the Process. Organizing Artifacts: Configuration Management. Software Standards.

8. Management of Software Engineering.

Management Functions. Project Planning. Project Control. Organization. Risk Management. Capability Maturity Model.

9. Software Engineering Tools and Environments.

Historical Evolution of Tools and Environments. Dimensions for Comparing Software Tools. Representative Tools. Tool Integration. Forces Influencing the Evolution of Tools.

10. Epilogue.

The Future. Ethics and Social Responsibility. Software Engineering Code of Ethics.

Case Studies.


Preface to the Second Edition

The first edition of this book was published in 1991. Since then, there has been a lot of progress in computing technology and also in software engineering. Certainly the proliferation of the Internet has had a profound influence on education, research, development, business, and commerce. We decided to produce this second edition in order to bring the book up to date with respect to the advances in software engineering in the last 10 years.

We were pleased to find that the basic premise of the book—the durability and importance of principles—has been borne out by the passage of time: Even though the technology has improved, principles of software engineering have remained the same. We have therefore been able to update every chapter without changing the original structure of the book. The following is still the structure:

  • Introduction: Chapters 1-3;
  • The product: Chapters 4 -6;
  • Process and management: Chapters 7 -8;
  • Tools and environments: Chapter 9.

The product-related chapters follow the sequence consisting of design (4), specification (5), and verification (6). This is different from the approach taken by other books, which cover specification before design. The reason for our choice follows from the principles-based approach of the book. All of these activities—design, specification, and verification—are basic activities that must be learned and applied throughout the software life cycle. For example, design is something we do not only with software architecture, but also with software specifications. The modular design approach helps us structure software and also the specification documents. Other books present specification first and then design, allegedly because—according to the traditional software processes—first we specify a software and then we design it. By contrast, we believe that learning about the design activity and approaches first, creates the needed motivation for the study of specification and provides the skills and techniques for structuring those specifications.

While all areas of software engineering have evolved since the first edition of the book was written, the area of tools and environments has changed substantially. Chapter 9, therefore, is revised considerably. Our approach in this chapter also is to present primarily principles rather than specific tools. We have seen over the years that tools change as technology evolves, and the choice of what particular tools to study depends on the student's environment and focus. We therefore cover a framework for studying and evaluating software tools without a detailed look at any particular tools.

Besides many minor improvements and changes, we have made the following major additions:

In Chapter 3, we have added two new case studies, one of a simple compiler and the other of the elevator system that we use throughout much of the book. The two case studies are complementary in that they deal with different application areas and pose different design challenges. They are presented in this chapter in a simple and intuitive way to get the student oriented towards thinking of system issues. They are intended to illustrate the use of general principles with concrete examples.

In Chapter 4, we have extended the treatment of object orientation, software architecture, components, and distributed systems.

In Chapter 5, we have added a treatment of Z and UML. A new section gives a more systematic treatment of requirements engineering.

In Chapter 6, we have added model checking and GQM as evaluation and verification techniques.

In Chapter 7, we have included a treatment of the unified process, the open-source process, and the synchronize-and-stabilize process. We have also added a new case study on requirements engineering.

In Chapter 8, we have added the capability maturity model and a description of the Nokia software factories.

In Chapter 9, we have added a treatment of the concurrent versioning system (CVS).

In Chapter 10, we have provided coverage of the Software Engineering Code of Ethics.

In the appendix, we have added a new case study on the use of formal methods in industry.


The book covers the principles of object orientation in a balanced way, rather than as the only way to do software engineering. Object-oriented analysis, design, and programming have certainly evolved and become a dominant approach to software engineering. We believe, however, that the principles underlying software engineering are deeper than objects. What the student should learn are principles and methods that can be used in different approaches. The student should learn how to choose between approaches and should be able to apply object orientation when it is the right choice. For example, the student should learn about information hiding before learning about objects and inheritance.


The case studies presented throughout the book and also in the appendix have two purposes. One is to present the issues discussed in a larger context, in order to give the student a broader view of why the principles or techniques are important. The second reason is to give those students who have not seen real projects a picture of realistic projects. The case studies are necessarily simplified to focus on important issues, but we have found that they are useful especially to less experienced students. The study of software engineering poses a challenge in a university setting because the typical student has not been exposed to the problems that software engineers face daily. These case studies attempt to overcome this challenge.


A companion CD, including solutions and sample course sylllabi is available to instructors. A companion Web site is available through the publisher to both students and instructors. You may contact the authors through the Web site. We welcome your feedback, comments, and suggestions.

Milan, Italy

Palo Alto, California

Lugano, Switzerland

Preface to the First Edition

This is a textbook on software engineering. The theme underlying the book is the importance of rigor in the practice of software engineering. Traditional textbooks on the subject are based on the lifecycle model of software development—that is, requirements, specification, design, coding, maintenance—examining each phase in turn. In contrast, our presentation is based on important principles that can be applied independently of the lifecycle model and often in several phases of the lifecycle. Our emphasis is on identifying and applying fundamental principles that are applicable throughout the software lifecycle.

The general characteristics of the book are the following:

  • It deals with software engineering as opposed to programming. Thus, we do not discuss any programming issues. For example, we omit any discussion of programming language constructs such as goto, loops, etc. We believe that the student of software engineering should have prior familiarity with these issues, which are more properly covered in textbooks on programming languages. On the other hand, we do discuss the issue of mapping software design constructs into specific programming languages. We concentrate on intermodule issues and assume as prerequisite the ability to program individual modules.
  • It emphasizes principles and techniques as opposed to specific tools (which may be used in examples). Many companies are actively developing software engineering tools and environments today and we expect that better and more sophisticated tools will be invented as our knowledge of software engineering increases. Once the student understands the principles and techniques that the tool is based on, mastery of the tool will be easy. The principles and techniques are applicable across tools while mastering the use of any particular tool does not better prepare the student for the use of other tools. Further, use of tools without understanding their underlying principles is dangerous.
  • It presents engineering principles; it is not an engineering handbook. Principles are general and are likely to remain applicable for many years while particular techniques will change due to technology, increased knowledge, etc. An engineering handbook may be consulted to learn how to apply a particular technique: it contains a set of prescriptions. This book, on the other hand, aims to enable the reader to understand why a particular technique should be used and, just as important, why it should not be. Even though we do show how a particular technique can be used to implement a given principle, our primary emphasis is on the understanding of the why question.

This book embodies our beliefs in the use of fundamental principles and the importance of theory in the practice of engineering. We have used the material in this book in both university and professional courses on various aspects of software engineering.


This book is designed to be used as a textbook by students of software engineering either in a classroom or for self-study. Professional engineers and managers will find material here to convince them of the usefulness of modern practices of software engineering and the need to adopt them. It may be used by professionals who are willing to invest the time for serious study; it is not really appropriate for a cursory reading. In particular, wherever necessary, we have sacrificed breadth for depth. For the professional, the notes on further references will be especially helpful. An Instructor's Manual is available with ideas for course organizations and solutions to some of the exercises.


The book is designed for junior, senior, or beginning-graduate level students in computer science. The reader must have had a course in data structures and should be fluent in one or more programming languages. We assume that the reader is already proficient in programming. Analytical reasoning, although not strictly necessary, will greatly enhance the ability of the reader to appreciate the deeper concepts of the book. This skill is developed by mathematics courses such as calculus, discrete mathematics, or-even better-theoretical computer science. "Mathematical maturity" is necessary for the student of any engineering discipline.


Software engineering is a large, multi-dimensional discipline. Organizing a textbook on the subject poses a challenge because a textbook should present material sequentially, but the many facets of software engineering are so interrelated that there is no optimal sequence of topics. We have organized this textbook based on the view that in software engineering:

  • We are building a product: the software;
  • We use a process to build that product; and
  • We use tools in support of that process.

The book thus has three technical sections dealing in turn with the software product (Chapters 4 through 6), the software engineering process and management (Chapters 7 and 8), and the software engineering environment (Chapter 9). Chapters 1 through 3 form a general introduction to the field and the subsequent more technical sections of the book.

In Chapter 2, we discuss the many facets of software and common desirable characteristics for software. These characteristics impose constraints on the software builder and the process to be used. In Chapter 3, we present principles for building high-quality software. By studying principles rather than specific tools, the student gains knowledge that is independent of a particular technology and application environment. Because technology changes and environments evolve, the student should be armed with principles and techniques that can be utilized in different application areas. Chapters 4 through 8 present and discuss techniques for applying the principles of Chapter 3 to, respectively, design, specification, verification, engineering process, and engineering management. In Chapter 9, we discuss the use of computers themselves to help in the building of software. We postpone the discussion of any specific tools to this chapter.

While the material in the first two sections should withstand the passage of time, it is likely that the material in the third section will become outdated (we hope) because newer and better tools are being developed. Since programming languages are a fundamental tool of the software engineer, we use Chapter 9 as a bridge between the design issues of Chapter 4 and specific programming language constructs.


The book contains many exercises of three types:

  • short, paper exercises, aimed at extending the knowledge gained from the book or applying the knowledge more deeply; these exercises are interspersed throughout the chapters.
  • longer paper exercises at the end of each chapter, requiring integration of the material in the chapter.
  • term-projects requiring the development of some substantial software system by a small team.

Solutions to some of the exercises are provided at the end of each chapter. More exercise solutions are given in the Instructor's Manual.


Several case studies are used in the text to demonstrate the integration of different concepts and to contrast different approaches in realistic situations. In addition, three case studies of real-life software engineering projects and their analyses are presented at the end of the book. These case studies may be read and studied at different times and for different purposes. From these case studies, the new student with little industrial experience can gain a quick view of the diversity of problems faced in industrial practice. The student with some experience perhaps will identify with certain aspects of these case studies and learn from others. The case studies may be read concurrently with the main text. Several exercises in the book refer to these case studies.


Many software engineering courses combine lectures and a laboratory project. To do this in a single semester is rather difficult. The teacher will find himself discussing organizational issues while the students are concentrating on their daily forays into debugging. We believe that software engineering must be taught as all other engineering disciplines by first providing the student with a solid foundation in the "theory." Only after this has been achieved will laboratory experience enhance the student's knowledge. This implies that the student project must start closer to the middle of the semester rather than at the beginning. In our view, a better approach is to spend one semester on the theory and a second semester on the laboratory. The Instructor's Manual offers several ideas for organizing a laboratory course based on this text.


The book may be read in different sequences and at different levels. Each of Chapters 4 through 7 contains material that may be skipped on the first reading or for a less detailed study. Chapters 1 through 3 are required reading for the subsequent chapters. The graph shows the dependencies among the chapters and the various paths through the book. The notation nP refers to a partial reading of Chapter n, skipping some sections; nC stands for a complete reading.

The Instructor's Manual discusses different course organizations based on the book. The conventional one-semester project software engineering course may follow the sequence: 1, 2, 3, 7P, SP, 4P, 6P, 8, 9,10. We ourselves prefer the sequence 1, 2, 3, 4P, 5P, 6P, 7P, 8, 9,10. In either case, the students should start on the project after 5P


We gratefully acknowledge reviews of earlier drafts provided by Reda A. Ammar of the University of Connecticut, Larry C. Christensen of Brigham Young University, William E Decker of the University of Iowa, David A. Gustafson of Kansas State University, Richard A. Kemmerer of the University of California at Santa Barbara, John C. Knight of the University of Virginia, Seymour V Pollack of Washington University, and K. C. Tai of North Carolina State University.

We would also like to thank the following people who have provided valuable feedback on various drafts of the manuscript: Vincenzo Ambriola, Paola Bertaina, David Jacobson, and Milon Mackey.

Hewlett-Packard Laboratories and Politecnico di Milano made it possible to conceive this book by supporting a course offered by Mehdi Jazayeri at the Politecnico di Milano during the spring of 1988. Alfredo Scarfone and HP Italiana provided us with support in Italy. We would like to acknowledge the support of management at Hewlett-Packard Laboratories, especially John Wilkes, Dick Lampman, Bob Ritchie, and Frank Carrubba in Palo Alto, and Peter Porzer in Pisa. We would like to thank Bart Sears for his help with various systems, and John Wilkes for the use of his data base for managing references. We have also received support from Consiglio Nazionale delle Ricerche.

Milan, Italy

Palo Alto, California

Pisa, Italy


Submit Errata

More Information

InformIT Promotional Mailings & Special Offers

I would like to receive exclusive offers and hear about products from InformIT and its family of brands. I can unsubscribe at any time.


Pearson Education, Inc., 221 River Street, Hoboken, New Jersey 07030, (Pearson) presents this site to provide information about products and services that can be purchased through this site.

This privacy notice provides an overview of our commitment to privacy and describes how we collect, protect, use and share personal information collected through this site. Please note that other Pearson websites and online products and services have their own separate privacy policies.

Collection and Use of Information

To conduct business and deliver products and services, Pearson collects and uses personal information in several ways in connection with this site, including:

Questions and Inquiries

For inquiries and questions, we collect the inquiry or question, together with name, contact details (email address, phone number and mailing address) and any other additional information voluntarily submitted to us through a Contact Us form or an email. We use this information to address the inquiry and respond to the question.

Online Store

For orders and purchases placed through our online store on this site, we collect order details, name, institution name and address (if applicable), email address, phone number, shipping and billing addresses, credit/debit card information, shipping options and any instructions. We use this information to complete transactions, fulfill orders, communicate with individuals placing orders or visiting the online store, and for related purposes.


Pearson may offer opportunities to provide feedback or participate in surveys, including surveys evaluating Pearson products, services or sites. Participation is voluntary. Pearson collects information requested in the survey questions and uses the information to evaluate, support, maintain and improve products, services or sites, develop new products and services, conduct educational research and for other purposes specified in the survey.

Contests and Drawings

Occasionally, we may sponsor a contest or drawing. Participation is optional. Pearson collects name, contact information and other information specified on the entry form for the contest or drawing to conduct the contest or drawing. Pearson may collect additional personal information from the winners of a contest or drawing in order to award the prize and for tax reporting purposes, as required by law.


If you have elected to receive email newsletters or promotional mailings and special offers but want to unsubscribe, simply email information@informit.com.

Service Announcements

On rare occasions it is necessary to send out a strictly service related announcement. For instance, if our service is temporarily suspended for maintenance we might send users an email. Generally, users may not opt-out of these communications, though they can deactivate their account information. However, these communications are not promotional in nature.

Customer Service

We communicate with users on a regular basis to provide requested services and in regard to issues relating to their account we reply via email or phone in accordance with the users' wishes when a user submits their information through our Contact Us form.

Other Collection and Use of Information

Application and System Logs

Pearson automatically collects log data to help ensure the delivery, availability and security of this site. Log data may include technical information about how a user or visitor connected to this site, such as browser type, type of computer/device, operating system, internet service provider and IP address. We use this information for support purposes and to monitor the health of the site, identify problems, improve service, detect unauthorized access and fraudulent activity, prevent and respond to security incidents and appropriately scale computing resources.

Web Analytics

Pearson may use third party web trend analytical services, including Google Analytics, to collect visitor information, such as IP addresses, browser types, referring pages, pages visited and time spent on a particular site. While these analytical services collect and report information on an anonymous basis, they may use cookies to gather web trend information. The information gathered may enable Pearson (but not the third party web trend services) to link information with application and system log data. Pearson uses this information for system administration and to identify problems, improve service, detect unauthorized access and fraudulent activity, prevent and respond to security incidents, appropriately scale computing resources and otherwise support and deliver this site and its services.

Cookies and Related Technologies

This site uses cookies and similar technologies to personalize content, measure traffic patterns, control security, track use and access of information on this site, and provide interest-based messages and advertising. Users can manage and block the use of cookies through their browser. Disabling or blocking certain cookies may limit the functionality of this site.

Do Not Track

This site currently does not respond to Do Not Track signals.


Pearson uses appropriate physical, administrative and technical security measures to protect personal information from unauthorized access, use and disclosure.


This site is not directed to children under the age of 13.


Pearson may send or direct marketing communications to users, provided that

  • Pearson will not use personal information collected or processed as a K-12 school service provider for the purpose of directed or targeted advertising.
  • Such marketing is consistent with applicable law and Pearson's legal obligations.
  • Pearson will not knowingly direct or send marketing communications to an individual who has expressed a preference not to receive marketing.
  • Where required by applicable law, express or implied consent to marketing exists and has not been withdrawn.

Pearson may provide personal information to a third party service provider on a restricted basis to provide marketing solely on behalf of Pearson or an affiliate or customer for whom Pearson is a service provider. Marketing preferences may be changed at any time.

Correcting/Updating Personal Information

If a user's personally identifiable information changes (such as your postal address or email address), we provide a way to correct or update that user's personal data provided to us. This can be done on the Account page. If a user no longer desires our service and desires to delete his or her account, please contact us at customer-service@informit.com and we will process the deletion of a user's account.


Users can always make an informed choice as to whether they should proceed with certain services offered by InformIT. If you choose to remove yourself from our mailing list(s) simply visit the following page and uncheck any communication you no longer want to receive: www.informit.com/u.aspx.

Sale of Personal Information

Pearson does not rent or sell personal information in exchange for any payment of money.

While Pearson does not sell personal information, as defined in Nevada law, Nevada residents may email a request for no sale of their personal information to NevadaDesignatedRequest@pearson.com.

Supplemental Privacy Statement for California Residents

California residents should read our Supplemental privacy statement for California residents in conjunction with this Privacy Notice. The Supplemental privacy statement for California residents explains Pearson's commitment to comply with California law and applies to personal information of California residents collected in connection with this site and the Services.

Sharing and Disclosure

Pearson may disclose personal information, as follows:

  • As required by law.
  • With the consent of the individual (or their parent, if the individual is a minor)
  • In response to a subpoena, court order or legal process, to the extent permitted or required by law
  • To protect the security and safety of individuals, data, assets and systems, consistent with applicable law
  • In connection the sale, joint venture or other transfer of some or all of its company or assets, subject to the provisions of this Privacy Notice
  • To investigate or address actual or suspected fraud or other illegal activities
  • To exercise its legal rights, including enforcement of the Terms of Use for this site or another contract
  • To affiliated Pearson companies and other companies and organizations who perform work for Pearson and are obligated to protect the privacy of personal information consistent with this Privacy Notice
  • To a school, organization, company or government agency, where Pearson collects or processes the personal information in a school setting or on behalf of such organization, company or government agency.


This web site contains links to other sites. Please be aware that we are not responsible for the privacy practices of such other sites. We encourage our users to be aware when they leave our site and to read the privacy statements of each and every web site that collects Personal Information. This privacy statement applies solely to information collected by this web site.

Requests and Contact

Please contact us about this Privacy Notice or if you have any requests or questions relating to the privacy of your personal information.

Changes to this Privacy Notice

We may revise this Privacy Notice through an updated posting. We will identify the effective date of the revision in the posting. Often, updates are made to provide greater clarity or to comply with changes in regulatory requirements. If the updates involve material changes to the collection, protection, use or disclosure of Personal Information, Pearson will provide notice of the change through a conspicuous notice on this site or other appropriate way. Continued use of the site after the effective date of a posted revision evidences acceptance. Please contact us if you have questions or concerns about the Privacy Notice or any objection to any revisions.

Last Update: November 17, 2020