Как указать ограничение OCL в диаграмме активности с помощью Eclipse Papyrus?

подробности

У меня есть диаграмма активности для секции входа в систему, разработанная в Eclipse Papyrus. Теперь я должен написать ограничения OCL для следующих условий:

  1. имя пользователя должно быть строкой и < 8 символов
  2. пароль должен быть числовым + специальные символы и> 10 символов
  3. пользователь может сделать максимум 5 попыток, иначе система заблокирует логин

Мои усилия

Я уже сделал это в диаграмме классов, как это, но не знаю, как применить ограничения в диаграмме деятельности. Я прочитал много статей, посмотрел видео и исследовательские работы и проверил такие вопросы, как этот, этот, этот и этот, но ни одна из них не дает правильного ответа.

Образец моей диаграммы активности

1 ответ

Решение

Похоже, это не имеет ничего общего с диаграммами деятельности. Ваша новая формулировка ясна: 5 попыток в одной форме или одна попытка в каждой из пяти форм плохая, поэтому User_Account::failedAttempts (а не login:: попытки) является разумной функцией модели.

Ограничение наиболее легко определяется как верхняя граница 5 для User_Account::failedAttempts. Обратите внимание, что ограничение определяет, что действительно, а не как реагировать на недействительность. Вы могли бы больше использовать инвариант к верхнему пределу по отношению к вычисляемому значению MaximumAttempts(). Вы можете случайно использовать предварительные / постусловия в операциях или просто связать свои операции управления.

Вы могли бы разумно иметь операцию User_Account:: isLocked (), тело которой не выполнено Attempts> = maximumAttempts().

Деятельность обеспечивает контроль для модели. Предположительно у него есть спасательный круг, связанный с созданием / уничтожением логина. Предположительно он использует операцию DataBase::checkPassword (userName, password), которая возвращает User_Account и увеличивает User_Account:: failedAttempts в качестве побочного эффекта. Поэтому применение максимума осуществляется в User_Account::checkPassword. (Обратите внимание, что вы не должны делать двухэтапный доступ для поиска User_Account, а затем для проверки пароля, чтобы гарантировать, что хакеры не смогут различить, возможно, просто по времени ответа, произошел ли сбой из-за неверного имени пользователя или неверного пароля.)

Вы должны четко определить, что находится в модели; что сохраняется в течение всей вашей системы, возможно, восстанавливается из резервной копии после перезагрузки системы. Следовательно, User_Account должен иметь свойства username и password и failedAttempts для определения постоянного состояния.

И наоборот, то, что является частью View/Control, может быть потеряно и воссоздано, когда инициируется другое взаимодействие с пользователем. Форма входа, таким образом, также имеет свойства имени пользователя и пароля, чтобы представлять то, что вводится в форму и которое будет связано с базой данных модели, возможно, DataBase::getUserAccount и UserAccount::checkPassword.

Я не стал бы загрязнять постоянную модель базы данных временным содержимым входа в систему. Если вам требуется воссоздание попыток входа в систему при сбое сервера, у меня будет отдельная ViewDataBase переходного состояния просмотра. В противном случае вы бы восстановили сбой сервера, повторно активировав постоянную базу данных, прежде чем активировать переходные действия.

Другие вопросы по тегам