A lot of good software engineering textbooks exist that are suitable for either classroom or practitioner use. This work is not one of them.
The book is divided into 24 chapters:
Software Engineering Taxonomy
Software Development Processes
Software Life-cycle Paradigms
Software Engineering Standards
Software Development Approaches Concepts
Software Engineering Methodology Concepts
Structured Analysis, Design, and Implementation of Information Systems
Structured Analysis Methods
Structured Design Methods
Structured Methodology
Real-time Systems Methods
Software Engineering Methods
Data/entity-oriented Methodologies
Data-based Methods
Technology for the Automated Generation of Systems
Language-dependent Methods
Object-oriented Design Methods
More Object-oriented Design Methods
Object-oriented Software Methodologies
Object-oriented Methodology
CASE Technology
Existing CASE Tools
Emerging CASE Tools
CASE Future Trends
The bulk of this book is about specific methodologies and CASE tools for use during the process of constructing software. The choice of such topics is fairly reasonable, given that a book written using this approach has problems of creeping obsolescence. A major flaw of the book shows up even in this material--the author presents no criteria for deciding when to use a particular methodology or type of CASE tool. It is not enough to publish a laundry list of choices; the reader must be given ways of deciding when each approach is most useful. That omission is not the worst of the book’s flaws. Long before getting far enough into the material to see this problem, I saw several flaws. The book has a peculiar topical organization, with only a few pages on fourth-generation languages, but four chapters on object-oriented approaches and a whole section (four chapters) on CASE tools. The author provides a strange taxonomy of application domains:
batch systems
reactive systems
concurrent systems
The material is ponderously worded. For example, Sodhi says that “Software development processes consist of components characterized by differences in their purpose and in the nature of constituent activities used to achieve these purposes.” Some coverage is platitudinous rather than rigorous. For instance, with no prior or subsequent definition of terms or discussion of approaches, we read that “Good software engineering should gear toward developing zero defect software.” The book contains technological confusions. For example, in discussing the nature of reuse, Sodhi presents it in the context of “software retirement,” as if parts cannot be reused until the software in which they reside is retired from use. The author gives hopeless semi-references like “H. Partsch and R. Steinbrueggen say…,” without telling us when and where they said it. He states off-the-wall biases, such as “The characteristics of CASE tools should meet the requirements of various phases of software development and be in accordance with DOD-STD-2167A.” The book includes virtually no coverage of software maintenance.
With so many different kinds of flaws, many of them fatal by themselves, it is difficult to recommend this book to any audience--students, teachers, or practitioners.