Search code examples
ooparchitecturesoftware-designobject-oriented-analysisooad

Features and Use Case Diagrams Vs Requirements and Use Cases


According to "Head First Object-Oriented Analysis and Design", Complex projects involves first finding a feature list -> drawing use case diagrams -> breaking into smaller modules before implementing object oriented design (requirements gathering -> use cases -> OO -> design patterns etc.)

I want to understand, what is the criteria for the size of project when feature lists and use case diagrams should be implemented before finding requirements and writing use cases?

I am particularly interested in how can this knowledge be applied to my real wold problems

Example, I am working on a UI that send instrument commands to the server and displays the response back from the server. I know from customer feedback that the UI should have the following things:

  • It should be able to let the user select an instrument from available list and send any custom command and display the result

  • It should be able to let the user select an instrument and a command from available list and display the result (create commands using drag and drops from given lists)

  • It should be able to have capability of creating macros

Is this UI project small enough to not have steps for gathering features and drawing use case diagrams? Do we go straight to categorizing the asks as requirements and start gathering requirements and writing use cases?

How would one go about breaking down project of this nature to deduce it to its appropriate class diagrams?

I have tried considering the above mentioned asks as features and then tried creating requirements, mainly on the different states that one could have during the life cycle of the UI application but I am still not sure and unable to comprehend the teachings of the books on this project.


Solution

  • I haven't read the book, so I'm not sure what the author(s) of the book really wanted to emphasize here. But I assume that you misinterpreted it.

    Without knowing the requirements there is no feature list. If you don't know what is needed then you can't say anything about the system's capabilities.

    Gathering requirements is an iterative process. First you gather the high-level requirements in order to be able to start building a mental model about the system. This can help you to start think about the supported features. By sharing your mental model and the exposed feature set of the system with the stakeholder, it initiates the next iteration.

    Here you can start talking about actors, user journeys, use cases, etc. These are mainly focusing on the happy paths. As you have more and more iterations you will reach a point where you can start talking about edge and corner cases: What suboptimal cases can we foreseen? What can we do (prevention, detection, mitigation)? How does it affect the system/actors/journeys?...

    The better you understand the needs and circumstances, the better the design and implementation of the system could be.


    UPDATE #1

    Will we always have high-level and low-level (edge cases and detailed use cases) requirements i.e. we will first need to make use case diagrams and then write individual detailed use cases?

    There are a lot of factors which can influence this. Just to name a few:

    • Is it a system, submodule, or component design?
    • Is it a green or a brownfield project?
    • Is the stakeholder experienced enough to know which information matters and which doesn't from the IT project perspecitive?
    • Does the architect / system designer have previous experience with the same domain?
    • Does wireframe or mockup exist at project kick-off?
    • Should the project satisfy special security, legal or governmental regulations?
    • etc...

    In short, yes there can be circumstances where you don't need several iterations, but based on my experiences that's quite rare.