Как указать ограничение OCL в диаграмме активности с помощью Eclipse Papyrus? - PullRequest
0 голосов
/ 18 мая 2018

Подробности

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

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

Мои усилия

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

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

1 Ответ

0 голосов
/ 20 мая 2018

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

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

Вы могли бы иметь разумно иметь операцию User_Account :: isLocked (), тело которой не удалось.Деятельность обеспечивает контроль для модели.Предположительно у него есть спасательный круг, связанный с созданием / уничтожением логина.Предположительно он использует операцию 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 переходного состояния просмотра.В противном случае вы бы восстановили сбой сервера, повторно активировав постоянную базу данных, прежде чем активировать переходные действия.

...