J^T: John Thywissen's personal pages

Software Engineering

Why do we, as a profession, still not routinely practice many well-established best practices?

(Some engineers argue that software, in practice, is not a profession, but is a craft because of this.)

Thywissen, John A. Software Engineering [Web page]. Plano (TX): c2007 [revised 2007 Aug 05; cited 2023 Mar 22]. Available from: http://john.thywissen.org/software_engineering.html


Use Case Modeling

Be warned that use cases are a bit of a fad. There is a rush to the publisher of absolute garbage texts purporting to give you all the answers about use case modeling. A large number of them fail on page one—they don't even know the proper definition of a use case. So, don't trust a book just because it mentions "use case" on its cover. CAVEAT EMPTOR.

I searched every book published (as of 2001) that has use cases mentioned in its title or keywords. I have reviewed every one in print. All the books are listed below, with my recommendations.


Advanced Use Case Modeling: Software Systems
By Armour, Frank / Miller, Granville
Addison-Wesly; 01/2001
Softcover; 464 pages
ISBN 0-201-61592-4

Excellent book. Demonstrates proper use of use cases, emphasizes the importance of system boundary and scope, tells you how to incrementally develop use cases, and gives you many tips. However, you only need the first 100 pages or so of this book; it gets too sophisticated for all but the next space program. (Use this book with someone who has the experience to know how much of the book to use and how much to ignore.) Otherwise, the best use case book around. Pay particular attention to the discussion on how to stay out of UI design in your use case descriptions.

Writing Effective Use Cases
By Cockburn, Alistair
Addison-Wesley; 10/2000
Softcover; 270 pages
ISBN 0-201-70225-8

Cockburn does a good job of discussing many of the technique's pragmatics. The book is loaded with tips on how to phrase things, when to move on to the next activity, and so forth. This book's major fault, though, is that it introduces yet another notation. The notation crusades are over—UML is the victor, and is now an international industry standard. Also, Cockburn's sense of scenarios is wrong. So, if you get this book, take some of it with a grain of salt. This book is best used as a tip cookbook backup to another primary book.

Other References That May Be Useful

Object-Oriented Software Engineering: A Use Case Driven Approach
By Jacobson, Ivar
Addison-Wesley; 05/1992
Hardcover; 528 pages
ISBN 0-201-54435-0

This is the work that introduced the technique of use cases to the field. The book seems intended as a "software engineering" introductory course textbook, so use case modeling is one part of much other material. This book covers an early version of Jacobson's Objectory method, one that I recommend against. So, only get this if you are interested in the beginnings of use case modeling and are prepared to do a lot of "separating the wheat from the chaff".

Object-Oriented Software Engineering, Second Edition
By Jacobson, Ivar
Addison-Wesley; 06/2001
Hardcover; 480 pages; Not yet published
ISBN 0-201-40347-1
fatbrain.com price not set

The soon-to-be-published revision of Jacobson's classic work above.

Reprobated—Do Not Use These References (Danger, Danger!)

Use Cases: Requirements in Context
By Kulak, Daryl / Guiney, Eamonn
Addison-Wesley; 05/2000
Softcover; 329 pages
ISBN 0-201-65767-8

This one isn't completely bad, but there are better books available. Context is extremely important for requirements gathering, so the book starts off on a good foot. It introduces its own iterative structure, which you can disregard, but that structure plays pretty heavily throughout the text. The book has a good discussion of quality of requirements, and why traditional requirements ("shall statements") are untenable. One thing that may disappoint you about this book is that half of it is "filler" (two unnecessarily long "case studies").

Applying Use Cases: A Practical Guide
By Schneider, Geri / Winters, Jason P. / et al.
Addison-Wesley; 08/1998
ISBN 0-201-30981-5

Revised into the second edition, below.

Applying Use Cases: A Practical Guide, Second Edition
By Schneider, Geri
Addison-Wesley; 03/2001
Softcover; 240 pages
ISBN 0-201-70853-1

One of the most blatant cases of use case abuse I've seen. This book thinks use cases are a UI design tool (which they are not!), and even has screen mock ups in the use cases! Shocking! Schneider has a few tips scattered throughout the book which are good. For example, how does one model CRUD functions? (Answer: break them into separate use cases.) However, with its fundamental flaw, the book is more dangerous than useful.

Use Case Driven Object Modeling with UML: A Practical Approach
By Rosenberg, Doug / Scott, Kendall
Addison-Wesley; 03/1999
ISBN 0-201-43289-7

This book has many faults, and no redeeming qualities. It sells the authors' company's proprietary method. It fails to address the importance of the system boundary. It believes that use case models can peacefully coexist with the old "shall statements" requirements model. It introduces its "robustness diagram", which is not normal practice, and doesn't appear worth the distraction of drawing.

Use Cases Combined with Booch/OMT/UML: Process and Products
By Texel, Putnam P. / Williams, Charles B.
Prentice Hall; 06/1997
Hardcover; 512 pages; CD-ROM Included
ISBN 0-137-27405-X

This book seems to be written by authors who are trying to recycle an old pre-OO manuscript by sprinkling a bunch of OO buzzwords in the text (and title). Pretty much anything you see in here is wrong, so don't bother.

Not Reviewed

Prototyping: The Effective Use of Case Technology
By Vonk, Roland
Prentice Hall; 01/1990
Softcover; 475 pages; Out of print
ISBN 0-137-31589-9

Out of print, not reviewed.

Use Case Maps for Object-Oriented Systems
By Buhr, R. J. A./ Casselman, R. S.
Prentice Hall; 01/1995
Hardcover; 600 pages; Out of print
ISBN 0-134-56542-8

Out of print, not reviewed.

Object-Oriented (OO) Software Engineering

This is the beginning of my object-oriented software engineering book list. I've listed an introductory book that everyone who comes near object technology ought to read. Then, I've listed three books that form the basis that any technologist analyzing or designing OO software needs to master.

Strongly Recommended

Object Technology: A Manager's Guide, Second Edition
By Taylor, David A. Ph. D.
Addison-Wesley; 09/1997
ISBN 0-201-30994-7

Despite the reference to "manager" in the title, this is not a "dumbed-down" book. This is the best introduction to OO available. Taylor covers the whole subject of object-oriented software engineering concisely and clearly. He puts the technology in context, and helps the reader build a very good "mental model" of object technology. Mandatory reading for non-technologists and technologists. Read this before you read any other OO book.

Object-Oriented Analysis and Design with Applications, Second Edition
By Booch, Grady
Addison-Wesley; 02/1994
Hardcover; 589 pages
ISBN 0-805-35340-2

The classic. This book covers analysis and design object modeling in a pragmatic and balanced manner. Unlike most "OO" authors, Booch presents a real OO approach, not a legacy approach with OO buzzwords. Ignore Booch's notation introduced in this book, it was merged into and superseded by UML. An excellent primary OOA&D book. Supplement with Wirfs-Brock, Gamma, and a use case book. (Note that the next edition is scheduled for Oct 2001.)

Designing Object-Oriented Software
By Wirfs-Brock, Rebecca
Prentice Hall; 06/1990
Softcover; 341 pages
ISBN 0-136-29825-7

Wirfs-Brock et al. introduce the important technique of CRC cards, among other things. This book is rare in that it gives concrete techniques for making design decisions. Extremely valuable. Read this before you do any modeling or design work.

Design Patterns: Elements of Reusable Object-Oriented Software
By Gamma, Erich / Helm, Richard / et al.
Addison-Wesley; 09/1994
Hardcover; 395 pages
ISBN 0-201-63361-2

The classic patterns book. The book does two things: 1) explains design patterns, and 2) acts as a design pattern encyclopedia. Another fundamental book with which every OO designer should be well acquainted.

J^T Thoughts

Use Case Modeling

Use case modeling is a technique for capturing requirements. A use case model becomes a project's requirements model. This is a technique that development teams and client both find vastly superior to the conventional "mountain of 'shall' statements".

See my bibliography to the right.

Use case modeling is often thought of as a technique that's part of object-oriented software development, but it's not. It's a general-purpose requirements modeling approach, and is implementation-independent, so it can be the front end to object-oriented, conventional (imperative), functional, or any other programing paradigm.

Object-Oriented (OO) Software Engineering

Speaking of OO and best practices: Many (perhaps even most) programs in putative OO languages are really conventional programs. C++ experts refer to this as using C++ as "a better C", instead of its intent.

In any language, symptoms of the problem include: a flat inheritance hierarchy; no use of polymorphism; most classes have one instance, a few large methods, and tons of fields; and no carefully designed distribution of responsibilities to classes (see Wirfs-Brock).

See the OO bibliography to the right to learn more.