Волшебная струна - Magic string

В компьютерное программирование, а волшебная строка - это вход, который, по мнению программиста, никогда не поступит извне и активирует скрытые в противном случае функции. Пользователь этой программы, скорее всего, предоставит ввод, который даст ожидаемый ответ в большинстве ситуаций. Однако, если пользователь на самом деле невинно предоставляет заранее определенный ввод, вызывая внутренние функции, реакция программы часто оказывается совершенно неожиданной для пользователя (таким образом, кажется «волшебной»).[1]

Фон

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

Например, при тестировании программы, которая берет личные данные пользователя и проверяет номер их кредитной карты, разработчик может решить добавить ярлык волшебной строки, посредством которого ввод маловероятного ввода «***» в качестве номера кредитной карты приведет к тому, что программа для автоматического выполнения действий, как если бы карта была действительной, без необходимости тратить время на ее проверку. Если разработчик забудет удалить волшебную строку, и пользователь последней программы введет «***» в качестве номера кредитной карты-заполнителя при заполнении формы, пользователь случайно запустит скрытую функцию.

Разрешение

Ситуации / причины возникновения

Часто с самого начала участия в проекте разработчик не может контролировать значительные временные ограничения. Общие проблемы, которые могут в результате привести к этому антишаблону:

  • Null! = Null[2][3] или любой вариант, в котором тип данных не сравнивается поразрядно с предположительно идентичным типом. Это проблема, которая может возникнуть даже в одной среде разработки (тот же язык программирования и компилятор). Эта проблема имеет долгую историю для числовых и логических типов, и большинство компиляторов справляются с этим хорошо (с соответствующими предупреждениями и ошибками, разрешением по умолчанию и т. Д.). Обнуляемый типы, такие как строки, имеют сложность исторически разных определений для НОЛЬ. Выдаваемые ошибки / предупреждения часто являются общими или ошибочными по умолчанию, сообщение которых на самом деле не описывает, что происходит. Если разработчик не может получить достаточно подсказок, чтобы отследить проблему с помощью отладки, короткого пути и кодирования в строке «по умолчанию», это может быть единственным способом сохранить проект в соответствии с графиком. Одним из решений этого может быть применение Шаблон нулевого объекта.[4]
  • Запрограммирован в угол. Иногда дизайн кажется простым и даже простым, но оказывается, что в нем есть логический недостаток, зависящий от возможных действий пользователя, из-за часто непредвиденных обстоятельств ближе к концу запланированной разработки. Таким образом, разработчик может почувствовать необходимость реализовать пользовательский ввод со специальными разрешениями безопасности / эксплуатации, чтобы справиться с такими обстоятельствами. Это может быть особенно иронично, поскольку иногда становится очевидным, что более надежная конструкция с самого начала, вероятно, оставила бы место для устранения недостатка. Однако это, возможно, заняло бы слишком много времени, и это могло бы противоречить фундаментальной инженерной концепции ЦЕЛОВАТЬ, сохраняя простой дизайн и реализацию и отвечая только начальным необходимым требованиям.
  • Разрешение внешнего доступа к Глобальный флаг.[5] Чрезмерная уверенность в том, что глобальный флаг никогда не может быть установлен случайно или злонамеренно (часто вполне разумное предположение), оправдывает такую ​​реализацию для целей тестирования и отладки, особенно для небольших приложений с простыми интерфейсами. Однако, если распространение программы является значительным, обычно это просто вопрос времени, когда кто-то установит флаг. Очевидное решение - никогда не использовать глобальную переменную таким образом. Разработчик также может сделать флаг косвенно доступный. Таким образом, волшебная строка сама по себе будет обрабатываться программой как любой другой ввод.[6] Затем пользователь должен воспроизвести настройку, а также создать некоторую коллекцию других событий, которые пользовательский интерфейс незаметно позволяет, чтобы флаг принял настройку; гораздо более маловероятный сценарий, но все же возможный.[нужна цитата ]

Строгое форматирование

Ограничение формата ввода - возможное решение для обслуживания (исправления ошибок).[требуется разъяснение ] По сути, это означает проверку входной информации, чтобы убедиться, что она имеет правильный формат, чтобы уменьшить вероятность обнаружения магической строки пользователем. Примеры включают проверку телефонного номера, чтобы убедиться, что он содержит только цифры (и, возможно, в ограниченной степени, пробелы и знаки препинания), или проверку того, что имя человека имеет имя и фамилию (и имеет соответствующий заглавный шрифт). Исключение делается для волшебной строки в коде проверки, чтобы она не была отклонена проверкой. Ожидается, что, поскольку пользователь, скорее всего, быстро заметит строгое соблюдение форматирования, ему, скорее всего, не придет в голову попытаться ввести строку, не соответствующую формату. Поэтому маловероятно, что пользователь попробует волшебную строку.

Как и в случае любого процесса проверки ввода, важно убедиться, что формат не является ограничивающим способом, который непреднамеренно ограничивает использование приложения некоторыми пользователями. Примером этого является ограничение номер телефона или же Почтовый индекс[7] ввод, основанный на системе одной страны (например, требуя от каждого пользователя ввести пятизначный почтовый индекс ), вызывая проблемы у законных пользователей, находящихся в других странах.

Целенаправленная реализация

Как это часто бывает с анти-шаблонами, существуют определенные сценарии, в которых магические строки являются правильным решением для реализации. Примеры включают чит коды[8] и пасхальные яйца. Более того, бывают случаи, когда пользователи изобретают волшебные строки, и системы, не закодированные для их принятия, могут давать неожиданные результаты, такие как отсутствие номерных знаков.[9]

Смотрите также

Рекомендации

  1. ^ Крис Фалтер (2008-03-06), Хорошее решение для данных Magic String, "Egghead Cafe Tuturiols" в Egghead Cafe, получено 2009-05-11 Внешняя ссылка в | publisher = (помощь)
  2. ^ Фрэнк Нод (2008-12-06), НОЛЬ, "Oracle Wiki" на Oracle вики, получено 2009-05-13 Внешняя ссылка в | publisher = (помощь)
  3. ^ Ван Лам (21.05.2003), Поведение NULL в SQL, "Стэнфордский университет" Stanford InfoLab, получено 2009-05-13 Внешняя ссылка в | publisher = (помощь)
  4. ^ Эрик Фриман, Элизабет Фриман, Кэти Сьерра, Берт Бейтс; 2004 г., Шаблоны проектирования Head First, 1-е изд., О'Рейли, Глава 6, стр. 214, г. Командный шаблон, ISBN  0-596-00712-4, ISBN  978-0-596-00712-6
  5. ^ Джеймс МакКэффри (2009), Автоматизация тестирования для веб-приложений ASP.NET с SSL, "Microsoft" в MSDN, получено 2009-05-13 Внешняя ссылка в | publisher = (помощь)
  6. ^ Эндрю Камминг; 2007 г., SQL-хаки, 1-е изд., О'Рейли, стр. 174, г. Предотвратить атаку с использованием SQL-инъекции, ISBN  0-596-52799-3, ISBN  978-0-596-52799-0
  7. ^ Брайан Найт, Аллан Митчелл, Даррен Грин, Дуглас Хинсон, Кэти Келленбергер; 2005 г., Услуги интеграции Professional SQL Server 2005, 1-е изд., Джон Уайли и сыновья, Глава 5, стр. 129, Обработка грязных данных, ISBN  0-7645-8435-9, ISBN  978-0-7645-8435-0
  8. ^ Сезен, Тонгук Ибрагим; Исикоглу, Дигдем (27 апреля 2007 г.). «ОТ ОЗАНОВ К БОЖИМ РЕЖИМАМ: ОБМЕН В ИНТЕРАКТИВНЫХ РАЗВЛЕЧЕНИЯХ РАЗНЫХ КУЛЬТУР» (PDF): 8. Получено 2009-01-24. Цитировать журнал требует | журнал = (помощь)
  9. ^ https://www.snopes.com/autos/law/noplate.asp