I'm doing a requirements analysis for a system and currently I try to write the business use cases (BUC) and make business use case diagram. I currently use the following guidelines:
When I have optional extra steps for a BUC I use an EXTEND-statement to point to the BUC where these optional steps can be found. Both the BUC that extends and the one that is extended can exist on it's own.
When I have duplicate functionality in multiple BUC's I try to extract the this and put it in a separate BUC. Then I use an INCLUDE-statement in the BUC where I extracted the functionality, to point to the BUC where this functionality can be found. The BUC in which you point to the external BUC with the INCLUDE-statement cannot work on it's own.
This all worked fine for until I arrived at the following situation:
- In the alternate flow of a BUC (let's call this one A) there's duplicate functionality that I already have specified in another BUC (let's call this one B).
- So naturally I want to use the INCLUDE-statement to point to B.
- If I do this I also have to show this in my business use case diagram.
- If I draw an INCLUDE arrow in the diagram (from A to B) it looks like A cannot exist without B.
- However this is not the case, as A only needs B when it's in the alternate flow.
I considered following options:
- I keep all the functionality in the the alternate flow, but this makes the alternate flow too long and creates duplicate functionality.
- I use extend instead, but this imposes that B is optional while if you are in the alternate flow of A, you have to go through B.
Any thoughts?
From your description you are not making a use case synthesis, but a functional decomposition. This is plain wrong. The point in use case synthesis is to focus on the added value a use case gives to its actor and not to decompose any functionality.
I strongly recommend to read Bittner/Spence and understand the basics before proceeding in the direction you are going - respectively to walk back and aim for the right target.