Home > technical, uml > Useless Cases

Useless Cases

Despite the blasphemous title of this blarticle, I think that “use cases” are a terrific tool for capturing a system’s functional requirements out of the ether; for the right class of applications. Nevertheless, I agree with requirements “expert” Karl Wiegers, who states the following in “More About Software Requirements: Thorny Issues And Practical Advice“:

However, use cases are less valuable for projects involving data warehouses, batch processes, hardware products with embedded control software, and computationally intensive applications. In these sorts of systems, the deep complexity doesn’t lie in the user-system interactions. It might be worthwhile to identify use cases for such a product, but use case analysis will fall short as a technique for defining all the system’s behavior.

I help to define, specify, design, code, and test embedded (but relatively “big”) software-intensive sensor systems for the people-transportation industry. The figure below shows a generic, pseudo-UML diagram of one of these systems. Every component in the string is software-intensive. In this class of systems, like Karl says, “the deep complexity doesn’t lie in the user-system interactions”. As you can see, there’s a lot of special and magical “stuff” going on behind the GUI that the user doesn’t know about, and doesn’t care to know about. He/she just cares that the objects he/she wants to monitor show up on the screen and that the surveillance picture dutifully provided by the system is an accurate representation of what’s going on in the real world outside.

Useless Cases

A list of typical functions for a product in this class may look like this:

  • Display targets
  • Configure system
  • Monitor system operation
  • Tag target
  • Control system operation
  • Perform RF signal filtering
  • Perform signal demodulation
  • Perform signal detection
  • Perform false signal (e.g. noise) rejection
  • Perform bit detection, extraction, and message generation
  • Perform signal attribute (e.g. position, velocity) estimation
  • Perform attribute tracking

Notice that only the top five functions involve direct user interaction with the product. Thus, I think that employing use cases to capture the functions required to provide those capabilities is a good idea. All the dirty and nasty”perform” stuff requires vertical, deep mathematical expertise and specification by sensor domain experts (some of whom, being “expert specialists”, think they are Gods). Thus, I think that the classical “old and unglamorous” Software Requirements Specification (SRS) method of defining the inputs/processing/output sequences (via UML activity diagrams and state machine diagrams) blows written use case descriptions out of the water in terms of Return On Investment (ROI) and value transferred to software developers.

Clueless Bozo Managers (BMs) and senior wannabe-a-BM developers who jump on the “use cases for everything” bandwagon (but may have never written a single use case description themselves) waste company time and money trying to bully “others” into ramming a square peg into a round hole. But they look hip, on the ball, and up to date doing it. And of course, they call it leadership.

  1. Ray's avatar
    Ray
    November 3, 2009 at 7:56 am

    Could you not have hardware as a “user” at different points in the design. A “user” does not necessary have to be a person.

    • November 3, 2009 at 8:15 am

      Yeah, you’re right Ray. Actors could be other systems/processors. However, since the behavior of external systems is not as variable or unpredictable as human behavior and the nature of system-to-system interaction is much more different that system-to-human, I still agree with Mr. Wiegers. Bypassing the use cases and focusing on activity, sequence and state machine diagrams is much more cost and time effective.

  1. No trackbacks yet.

Leave a reply to bulldozer00 Cancel reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.