Какие аргументы против пасхальных яиц? Есть ли аргументы, чтобы поддержать даже пасхальные яйца? [закрыто]

28

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

Теперь я немного параноидален в отношении производительности, поэтому мне нравится, когда это возможно, удалять излишки. Это сильно противоречит пасхальным яйцам, так как они на 100% лишний код.

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


источник
5
ИМХО, этот вопрос вообще не заслуживает отрицательного ответа, конечно же, немотивированного. Я сам очень заинтересован этой темой. Особенно зная, как это воспринимается конечными пользователями, настоящими боссами.
Это главное для классического @Mark Trapp: «Мы здесь, чтобы решать реальные проблемы, с которыми вы можете столкнуться».
Gratzy
1
@ChrisF Ничего себе, если мой вопрос programmers.stackexchange.com/questions/38810/… получит ответ "реальный вопрос", а вы ответите, что это не так, тогда я действительно запутался относительно цели этого сайта.
Gratzy
1
Отличный вопрос, ИМХО.
Ури
1
@ Марк C Да, я просто излишне параноидально трачу ресурсы.

Ответы:

11

Как всегда, ответ «это зависит».

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

Наличие пасхального яйца в приложении не должно отрицательно сказываться на производительности. Так что, если вы не анализируете ввод с клавиатуры для нормальной работы вашего приложения с триггером Ctrl+, FUэто плохая идея. Пока код выполняется только в том случае, если он найден, так что штраф за время выполнения отсутствует. Единственным штрафом является увеличение размера программы - что может быть или не быть проблемой. Если размер программы является проблемой, то обязательно оставьте это.

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

ChrisF
источник
«Наличие пасхального яйца в приложении не должно отрицательно сказываться на производительности. Оно будет выполнено только в том случае, если оно найдено, поэтому штраф за время выполнения отсутствует». В самом деле? Если это вызвано CTRL-FU как состояние OP, разве вы не захватываете все нажатия клавиш?
Gratzy
2
@Gratzy - На самом деле это хороший момент - если вы не ловите нажатия клавиш для нормальной работы, то это пример плохого пасхального яйца.
ChrisF
7

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

Имхо пасхальные яйца более вероятно будут приняты (или даже оценены) в играх, чем в деловом программном обеспечении. Даже Microsoft вложила в свои продукты несколько пасхальных яиц, но сейчас это почти полностью прекратилось. Причина, по которой Microsoft прекратила класть пасхальные яйца, тесно связана с возможными причинами против пасхальных яиц: проблемами безопасности. Как указано в соответствующей статье ВикипедииПасхальные яйца обычно (по крайней мере для пользователя / клиента) являются недокументированными частями кода, что может привести его к мысли, что продукт более открыт для атак или другими ненадежными способами. Кроме того, не весь код пасхального яйца проверяется и проверяется в той же степени, что и «критический» код. Это может привести к необнаруженным недостаткам или пробелам в базе кода, что может стать причиной более поздней атаки или использования вредоносного ПО.

Однако не все пасхальные яйца являются «плохими» и требуют подделки фактического кода продукта. Существует множество способов представления пасхальных яиц, особенно в играх, где код несколько отделен от контента (игровой / графический / скриптовый движок и реальные скрипты или файлы уровней). Эти способы варьируются от специальных текстур / объектов и звуковых комментариев главного героя (например, используемых в DN3D: Doom , Terminator , Indiana Jones , Star Trek ) до секретных уровней ( «нет уровня коровы» ) до диалогов, показывающих, когда определенный объект / местоположение в пользовательском интерфейсе нажимается, и многое другое. Конечно, не каждый из них подходит для каждого типа продукта.

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

Пасхальные яйца имхо хороши, но не обязательны. Реализация пасхального яйца никогда не должна отвлекать от реального продукта, и его представление должно соответствовать целевой аудитории конечного продукта. Пасхальное яйцо в «серьезном» приложении или продукт, предназначенный для не взрослых, никогда не должно включать юмор взрослого или сексуальное содержание, каким бы смешным или безобидным оно ни казалось. Это может не только привести к юридическим последствиям, но и повлиять на маркетинговый диапазон программного обеспечения ( например, рейтинги USK / PEGI / ESRB ).

Baelnorn
источник
1
Вам действительно нужно посмотреть, почему Microsoft перестала вставлять пасхальные яйца в свой код. Пасхальное яйцо - это путь кода, который еще не полностью протестирован (если у вас была возможность провести полный контроль качества пасхального яйца, почему вы не нашли время, чтобы включить другую полезную функцию вместо этого?), Что означает это потенциальный источник уязвимостей в безопасности.
Анон.
@Anon: Из статьи в Википедии, которую я упомянул в своем ответе: «Microsoft, которая в прошлом создала одни из самых крупных и сложных пасхальных яиц, например, в Microsoft Office, больше не позволяет использовать пасхальные яйца в своем программном обеспечении как часть их инициатива «Надежные вычисления». Источником этого утверждения является статья в блоге MSDN, на которую ссылается Чарльз Я не вижу никакого противоречия с моим утверждением. Не могли бы вы объяснить, где я ошибся? :)
Baelnorn
Первая часть ответа гласит: «Эй, Microsoft раньше это делала, разве это не круто», но затем фактические причины, по которым они больше не делают этого, скрыты в середине ответа. Случайный читатель этого не увидит, и он отключен от соответствующего контекста. В идеале, я бы хотел, чтобы перестановка абзацев была более заметной.
Анон.
@ Анон: Спасибо за головы. Я отредактировал свой ответ и изменил порядок абзацев, подробно описав причины против ЭЭ в первой части.
Baelnorn
5

Пасхальные яйца были распространены даже в крупных коммерческих выпусках программного обеспечения в 80-х и 90-х годах. По большей части они были милыми, и относительно немногие люди были обеспокоены ими. Я думаю, что они менее распространены сегодня по трем причинам:

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

  2. Юмор очень, очень, трудно сделать правильно, и если вы сделаете это неправильно, вы оскорбите платящих клиентов, которые затем перестанут платить за ваше программное обеспечение и которые напишут много неприятных писем в прессу о том, какой ужасной, незрелой компанией вы работаете для. Пример пасхального яйца, вызванного Ctrl-FU, является прекрасным примером. Это, вероятно, истерически забавно для ваших 17-летних друзей, но это 0-е правило маркетинга - никогда не говорить своим клиентам «FU», даже в шутку. Обратите внимание, что пасхальные яйца в большом коммерческом программном обеспечении НИКОГДА не высмеивают пользователя, только конкурентов.

  3. По бессмертным словам Питера Торка «Обезьяны» в фильме « Голова» : «Никто не одалживает деньги человеку с чувством юмора». Если вы покупаете критически важный компонент программной инфраструктуры, чувство юмора в авторе не обнадеживает. Кроме того, почему они тратили время на написание пасхальных яиц, когда могли исправить свои многочисленные ошибки безопасности?

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

Чарльз Э. Грант
источник
1
Даже сегодня у Google есть пасхальное яйцо - это означает, что они проверяют ввод, чтобы вызвать пасхальное яйцо при каждом поиске. Возможно, это не так много, но учитывая сотни миллионов запросов, которые они обрабатывают каждый день ... Я не знаю.
Чарльз Сальвия
Я должен признаться, что я читаю CTRL-FU как своего рода KUNG-FU.
Кристофер Кройциг
@ Кристофер, это совершенно разумная интерпретация. Юмор часто подвергается множественным интерпретациям, и это является частью того, почему сложно вставить свое программное обеспечение без риска обидеть кого-либо.
Чарльз Грант
@CharlesSalvia В зависимости от того, как они обрабатывают поиски для определения результатов «Вы имели в виду», он может вообще не добавлять никаких накладных расходов поверх того, что уже есть для такого поведения.
JAB
4

Пасхальные яйца - маленькие секреты, оставленные строителями. Вредит ли это конечным пользователям? Нет .

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

Что касается оптимизации кода, то, пока пасхальные яйца не слишком интенсивны (привет симулятор полета ), это не должно существенно снижать производительность.

Джош К
источник
Я не согласен. Пасхальное яйцо увеличивает риск возникновения события, которое может навредить пользователям. В лучшем случае эти «дополнительные функции» тестируются и просто используют время как разработчиков, так и QA. В худшем случае никто, кроме разработчика, не знает об этом. Позже разработчик покидает компанию, а затем обновление программного обеспечения непреднамеренно приводит к тому, что пасхальное яйцо становится злым при таких действиях, как отключение событий клавиатуры, поглощение всей доступной оперативной памяти или в крайнем случае ... стирание содержимого пользователя. жесткий диск. Более-топ? Может быть. Однако я видел, что каждый из них встречается как нормальные ошибки.
мамочка
@ Mummey: Я думаю, что это очень маловероятно.
Джош К
Разве вы не сделаете все возможное, чтобы уменьшить эти риски?
StuperUser
@Stuper: Вы когда-нибудь слышали о пасхальном яйце, разбивающем программу?
Джош К
Ни о каких не слышал, но сбои во время пасхальных яиц не настолько критичны, чтобы по большей части гарантировать публикацию проблем. Пользователи часто не отправляют информацию назад для большинства сбоев программы MS во время нормальной работы.
StuperUser
2

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

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

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

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

Uri
источник
0

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

JeffO
источник
-2

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

Дейв
источник
Что именно вы подразумеваете под «пасхальным яйцом» в своем употреблении? Можете ли вы дать мне пример?
Это не пасхальное яйцо, а черный ход. Мы делаем что-то особенное для тестирования GUI, когда инструмент дважды щелкает среднюю кнопку мыши в позиции экрана (0,0), а затем вводит правильный пароль. Это сделано для того, чтобы инструменты автоматизации GUI могли справиться с этим. Пользователи могут делать это и в теории, но на практике они туда не доберутся. Плюс повсюду предупреждающие знаки.
Работа
1
@ Гленн, хороший пример будет ... если вы отправляете приложение с графическим интерфейсом для настольного компьютера. Когда пользователь нажимает кнопку, он получает новый диалог. Когда пользователь нажимает эту кнопку, удерживая клавишу Shift, он получает старую. Это было бы хорошим способом сравнить старые и новые функциональные возможности при попытке исправить ошибки, вызванные новым виджетом. Если вы осторожны, вы можете оставить двойной код, но закомментировать бэкдор. Затем, когда вам нужно отладить вещи, раскомментировать, перестроить, и теперь вы можете сравнить две вещи бок о бок. Дэйв, прости за попытку украсть твой гром.
Работа