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

редактировать
Не путать с Магическим числом (программирование) или Волшебной струной (терапевтическое средство).

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

СОДЕРЖАНИЕ
  • 1 Предпосылки
  • 2 Разрешение
    • 2.1 Ситуации / причины возникновения
    • 2.2 Строгое форматирование
  • 3 Целенаправленная реализация
  • 4 См. Также
  • 5 ссылки
Задний план

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

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

разрешение

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

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

  • Null! = Null или любой вариант, в котором тип данных не сравнивается поразрядно с предположительно идентичным типом. Это проблема, которая может возникнуть даже в одной и той же среде разработки (тот же язык программирования и компилятор). Эта проблема имеет долгую историю для числовых и логических типов, и большинство компиляторов справляются с этим хорошо (с соответствующими предупреждениями и ошибками, разрешением по умолчанию и т. Д.). Обнуляемые типы, такие как строки, имеют сложность исторически разных определений NULL. Выдаваемые ошибки / предупреждения часто являются общими или ошибочными по умолчанию, сообщение которых на самом деле не описывает, что происходит. Если разработчик не может получить достаточно подсказок, чтобы отследить проблему с помощью отладки, короткого пути и кодирования в строке «по умолчанию», это может быть единственным способом сохранить проект в соответствии с графиком. Одним из решений этого может быть применение шаблона « Нулевой объект».
  • Запрограммирован в угол. Иногда дизайн кажется простым и даже простым, но оказывается, что в нем есть логическая ошибка, зависящая от возможных действий пользователя, из-за часто непредвиденных обстоятельств в конце запланированной разработки. Таким образом, разработчик может почувствовать необходимость реализовать пользовательский ввод со специальными разрешениями безопасности / эксплуатации, чтобы справиться с такими обстоятельствами. Это может быть особенно иронично, поскольку иногда становится очевидным, что более надежный дизайн с самого начала, вероятно, оставил бы место для устранения недостатка. Однако это, возможно, заняло бы слишком много времени, и это могло бы противоречить фундаментальной инженерной концепции KISS, сохраняя простой дизайн и реализацию и отвечая только начальным необходимым требованиям.
  • Разрешение внешнего доступа к глобальному флагу. Чрезмерная уверенность в том, что глобальный флаг никогда не может быть установлен случайно или злонамеренно (часто вполне разумное предположение), оправдывает такую ​​реализацию для целей тестирования и отладки, особенно для небольших приложений с простыми интерфейсами. Однако, если распространение программы является значительным, обычно это просто вопрос времени, когда кто-нибудь установит флаг. Очевидное решение - никогда не использовать глобальную переменную таким образом. Разработчик может также сделать флаг обстоятельнее доступным. Таким образом, волшебная строка сама по себе будет обрабатываться программой как любой другой ввод. Затем пользователь должен воспроизвести настройку, а также создать некоторую коллекцию других событий, которые пользовательский интерфейс незаметно позволяет, чтобы флаг принял настройку; гораздо более маловероятный, но все же возможный сценарий.

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

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

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

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

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

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