Use Cases — все ли Actors одинаково полезны?

 

Внеочередной вопрос из практики работы с Use Case'ами (UC):

Все ли внешние системы, пользователи и другие объекты, которые взаимодействуют с создаваемой системой (aka System Under Development, aka SUD), должны отображаться на UC диаграмме?

 

Я не зря подчеркнул слово «взаимодействуют». В английской терминологии это звучит как «interact». И именно с этим словом и было дано определение Actor'а в Wiegers'е:
«An actor is a person, another software system, or a hardware device that interacts with the system to achieve a useful goal (Cockburn 2001).» (Karl E. Wiegers, «Software Requirements, Second Edition»)

Так вот, взаимодействовать можно по-разному:

  1. инициировать действия по отношению к SUD
  2. НЕ инициировать действий по отношению к системе, но быть подверженным действиям со стороны SUD

Как-то в моей практике раньше всегда встречался только первый вариант. И я, наверное, так к этому привык, что когда во внеочередном проекте мне указали на ошибку и сказали, что я забыл добавить еще одного актера, я какое-то время был уверен, что это замечание несправедливо.

Покопавшись в своих проектах я не нашел ответа. Я обратился к Вигерсу, но и там тоже четкого ответа не получил. Я задал вопрос в LinkedIn... и вот там я среди разнообразных ответов, увидел тот, который был мне нужен. Найдя после этого у себя в библиотеке книжку «Use Cases: Requirements in Context, Second Edition» (Daryl Kulak, Eamonn Guiney), я окончательно закрасил своё белое пятнышко.

Ниже я привожу последовательно несколько цитат из этой книги, которые говорят сами за себя:

«Actors shown on the use case diagram should be those that interact directly with the system or are influenced directly by the system.»

«It is often hard to decide which actors to show on a use case diagram. For example, when a supplier provides an invoice to a company clerk and the clerk enters the invoice into the system, should the supplier be included in the diagram? If the supplier is shown, it is called a secondary actor. Our rule is that the supplier should be shown in the diagram if the supplier's behavior impacts the system in any way. For example, if a supplier sends a shipment late and that changes how the system reacts, then the supplier should be in the diagram.»

«Other computer systems can also be actors. For example, when your system feeds postings to a general ledger system, that general ledger system becomes an actor in your use case diagram. Similarly, if other systems feed your system, they should also appear in your diagrams

И, наконец,

«You should show secondary actors on use case diagrams when the specific actions of the secondary actor have an effect on the responses the application provides. Another rule of thumb is to make early judgments about whether the data regarding this secondary actor will be stored in the system in any way.»

Вот UC диаграмма (пример я решил продолжить из предыдущего поста на тему UC про alternative и exceptional Use Case flows) в качестве иллюстрации:

UC диаграмма с Primary и Secondary Actors

UC диаграмма с Primary и Secondary Actors

Я думаю, кто на ней кто, вы легко догадаетесь сами :).

 

Таким образом, вот и ответ на изначальный вопрос:

На UC диаграммах должны обязательно отображаться Primary Actors (инициаторы действий), и опционально (если это помогает пониманию) могут отображаться Secondary Actors (влияющие на SUD косвенно).

 

Выводы:

  1. Actors делятся на Primary (те, которые инициируют действия по отношению к SUD) и Secondary (те, которые косвенно влияют на систему или подвержены влиянию SUD)
  2. Primary Actors стоит всегда отображать на UC диаграммах
  3. Secondary Actors можно отображать на UC диаграммах, если это повысит понимание SUD stakeholder'ами, а не затруднит читабельность диаграммы, и, как следствие, понимание SUD
  4. А еще взаимодействовать можно без прямых действий между друг другом, а через косвенное влияние
  5. Надо больше читать :)... всем...
This entry was posted in анализ and tagged , , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>