Fundamentals of Software Engineering
This book provides selective, in-depth coverage of the fundamentals of software engineering by stressing principles and methods through rigorous formal and informal approaches. In contrast to other books which are based on the lifecycle model of software development, the authors emphasize identifying and applying fundamental principles that are applicable throughout the software lifecycle.
This emphasis enables readers to respond to the rapid changes in technology that are common today. Principles and techniques are emphasized rather than specific tools—users 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. The authors discuss principles such as design, specification, verification, production, management and tools.
Book coverage includes: more detailed analysis and explanation of object-oriented techniques; the use of Unified Modeling Language (UML); requirements analysis and software architecture; Model checking—a technique that provides automatic support to the human activity of software verification; GQM—used to evaluate software quality and help improve the software process; Z specification language. For software engineers.
Review By: Tony Alabi
04/28/2003
This is a ten-chapter hardcover book full of substantial information about the future, which is then followed by an appendix section that is full of useful scenario examples. It is safe to refer to the book, Fundamentals of Software Engineering, as the bible of software engineering if you are involved in any phase of software development. Broken up into a four-part structure, like the first edition, the integrity of the information from the prior edition is maintained. New information is added in a cumulative fashion.
The chapters in the first half of the book are an introduction to the basics of software engineering They provide an in-depth coverage of the various principles, qualities, and certain quality requirements in certain application areas. These areas include distributed, embedded, information, and real-time systems, accompanied with certain case-studies illustrating the principles thus described. Also included in the first half of the book, is a comprehensive discussion on software design and architecture. There are references to modularization techniques, object-oriented design, architecture and components, concurrent software development, and how-to deal with design anomalies.
The first half of the book is wrapped up with concise descriptions of several styles of software specifications, how-to verify specifications, coupled with dataflow diagrams, and UML diagrams used for specifying behaviors. Included is a complete and comprehensive look at verification, testing, analysis, and model checking, with strong emphasis on verification of everything.
The second half of the book concentrates on software production processes, with a detailed look at various software process models that are used in the industry today. The latter part of the second section of the book continues with the management of software engineering, and how it is applied in a development environment.
I found the book especially refreshing, as it validates and adds meaningful value to the latest trends and sound testing practices in the industry. The section on testing contains an elaborate description of methods and processes to adopt in the verification of software products.
Introduced with appropriate testing terminology and definitions, this section accurately conveys the drawbacks and limitations of certain testing approaches. It also draws comparisons of different testing styles that are common in the industry today. Good examples and useful insights are introduced to illustrate the philosophy and techniques that follow any style of testing, be it syntax-driven testing, testing driven by logic specification, black-box testing, or decision table-based testing. Some sections do provide adequate material as a guide to use in what some may describe as a Test Architecture, or specifications.
A good coverage of best practices to ensure software quality is included in the pages that cover Testing and Analysis. Exercises are provided to give a hands-on practical experience to the reader, as well as a guide in understanding the concepts, concerns, and benefits of certain testing activities. In my opinion, this book is an excellent resource for a test designer, test engineer, and other QA personnel, as well as anyone interested in trying to improve the quality of the software product.