Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Антишаблон является общим ответом на повторяющуюся проблему , которая, как правило , неэффективна и рискует быть крайне непродуктивными. [1] [2] Термин, придуманный в 1995 году компьютерным программистом Эндрю Кенигом , [3] [4] был вдохновлен книгой « Шаблоны проектирования» , в которой выделяется ряд шаблонов проектирования в разработке программного обеспечения, которые авторы считают очень надежными. и эффективно.

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

Определение [ править ]

По словам авторов Design Patterns , есть два ключевых элемента в анти-шаблоне, которые отличают его от плохой привычки, плохой практики или плохой идеи:

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

Примеры [ править ]

Социальные и деловые операции [ править ]

Организационная [ править ]

  • Аналитический паралич : проект, остановившийся на этапе анализа разработки и неспособный получить поддержку ни для одного из потенциальных планов его реализации.
  • Навес для велосипедов : придание непропорционально большого веса мелочам
  • Передовой край : использование передовых технологий, которые все еще не протестированы или нестабильны, что приводит к перерасходу средств, недостаточной производительности или задержке доставки продукта.
  • Апатия стороннего наблюдателя : явление, при котором люди с меньшей вероятностью предложат или не предложат помощь нуждающемуся человеку в присутствии других.
  • Дойная корова : прибыльный устаревший продукт, который часто приводит к самоуспокоенности по поводу новых продуктов.
  • Дизайн комитетом : результат наличия многих участников в дизайне, но не объединяющего видения.
  • Эскалация обязательств : неспособность отменить решение, когда оно оказывается неправильным.
  • Групповое мышление : коллективное состояние, при котором члены группы начинают, часто неосознанно, думать одинаково и отвергать разные точки зрения.
  • Управление по целям : Управление, работающее с исключительным вниманием к количественным критериям управления, таким как количество продаж, когда они не являются необходимыми или их приобретение обходится слишком дорого.
  • Микроменеджмент : неэффективные результаты, проистекающие из чрезмерного наблюдения, надзора или другого практического участия руководства.
  • Моральный риск : изоляция лица, принимающего решения, от последствий его решения.
  • Управление грибами : держать сотрудников «в темноте и кормить навозом» (также «оставлять тушиться и, наконец, консервировать») в отношении решений, принимаемых руководством.
  • Принцип Питера : постоянное продвижение в остальном хорошо работающих сотрудников до должности, для которой они не подходят, с обязанностями, которые они некомпетентны в выполнении, где они остаются на неопределенный срок [5]
  • Управление чайкой : управление, при котором менеджеры взаимодействуют с сотрудниками только тогда, когда возникает проблема, когда они «прилетают, создают много шума, обрушиваются на всех, не решают проблему, а затем улетают».
  • Stovepipe или Silos : организационная структура изолированных или полуизолированных команд, в которой слишком много коммуникаций происходит вверх и вниз по иерархии, а не напрямую с другими командами в организации.
  • Приведение типов : закрепление успешных сотрудников на слишком безопасных, узко определенных, предсказуемых ролях, основанных на их прошлых успехах, а не на их потенциале.
  • Привязка к поставщику : чрезмерная зависимость системы от компонента, поставляемого извне.

Управление проектом [ править ]

  • Телега впереди лошади : слишком много ресурсов сосредоточено на одной стадии проекта вне его последовательности.
  • Смертельный марш : проект, сотрудники которого, ожидая его провала, вынуждены продолжать, часто с большим переутомлением, менеджмент, отрицая возможный провал проекта [6].
  • Правило девяноста девяноста : тенденция недооценивать время, необходимое для завершения проекта, когда он «почти готов».
  • Излишняя инженерия : трата ресурсов делает проект более надежным и сложным, чем это необходимо.
  • Расползание объема: неконтролируемые изменения или непрерывный рост объема проекта, или добавление новых функций в проект после того, как исходные требования были составлены и приняты (также известное как постепенное изменение требований и расползание функций )
  • Дым и зеркала : демонстрация нереализованных функций, как если бы они уже были реализованы.
  • Закон Брукса : добавление дополнительных ресурсов в проект для увеличения скорости, когда проект уже замедлен из-за накладных расходов на координацию.
  • Позолота : продолжение работы над задачей или проектом после того момента, когда дополнительные усилия не добавляют ценности.

Программная инженерия [ править ]

Разработка программного обеспечения [ править ]

  • Инверсия абстракции : не раскрытие реализованной функциональности, необходимой вызывающим функциям / методу / конструктору, так что вызывающий код неудобно повторно реализует ту же функциональность в терминах этих вызовов.
  • Неоднозначная точка зрения : представление модели (обычно объектно-ориентированный анализ и проектирование (OOAD)) без указания ее точки зрения.
  • Большой комок грязи : система без узнаваемой структуры
  • База данных как IPC : использование базы данных в качестве очереди сообщений для обычного межпроцессного взаимодействия, где подойдет гораздо более легкий механизм.
  • Эффект внутренней платформы : система настолько настраиваема, что становится плохой копией платформы разработки программного обеспечения.
  • Входной кладж : неспособность указать и реализовать обработку возможно недопустимого ввода
  • Раздутие интерфейса : сделать интерфейс настолько мощным, что его будет чрезвычайно сложно реализовать.
  • Волшебная кнопка : форма без динамической проверки или помощи при вводе, например раскрывающиеся списки
  • Опасность гонки : неспособность увидеть последствия событий, которые иногда могут мешать друг другу.
  • Система дымовых труб : сложно обслуживаемая совокупность плохо связанных компонентов.

Объектно-ориентированное программирование [ править ]

  • Анемичная модель предметной области : использование модели предметной области без какой-либо бизнес-логики . Объекты модели предметной области не могут гарантировать их правильность в любой момент, потому что их логика проверки и изменения находится где-то снаружи (скорее всего, в нескольких местах). Мартин Фаулер считает это антипаттерном, но некоторые не согласны с тем, что это всегда антипаттерн. [7]
  • Вызов super : Требование подклассов для вызова переопределенного метода суперкласса
  • Проблема Круга-эллипс : подтипирование значения_переменных типов на основе ценностного подтипа
  • Циклическая зависимость : введение ненужных прямых или косвенных взаимозависимостей между объектами или программными модулями.
  • Постоянный интерфейс : использование интерфейсов для определения констант
  • Божественный объект : сосредоточение слишком большого количества функций в одной части дизайна (классе).
  • Помойка Объекта : Многократные объекты, состояние которых не соответствует (возможно неявному) контракту для повторного использования
  • Объектная оргия : неспособность должным образом инкапсулировать объекты, разрешающие неограниченный доступ к их внутренним компонентам.
  • Полтергейсты : объекты, единственной целью которых является передача информации другому объекту.
  • Последовательная связь : класс, методы которого должны вызываться в определенном порядке.
  • Шаблон Singleton : этот шаблон проектирования обеспечивает взаимосвязь и считается плохим решением.
  • Проблема йо-йо : структура (например, наследования), которую трудно понять из-за чрезмерной фрагментации.

Программирование [ править ]

  • Случайная сложность : задачи программирования, которые можно решить с помощью более совершенных инструментов (в отличие от существенной сложности, присущей решаемой проблеме).
  • Действие на расстоянии : неожиданное взаимодействие между далеко разнесенными частями системы.
  • Якорь лодки : удержание части системы, которая больше не используется
  • Ожидание при занятости: потребление ресурсов ЦП в ожидании чего-либо, обычно путем повторной проверки вместо обмена сообщениями.
  • Ошибка кеширования : вы забыли очистить кеш, содержащий отрицательный результат (ошибку), после того, как условие ошибки было исправлено.
  • Культ карго : использование шаблонов и методов, не понимая, почему
  • Кодирование по исключению : добавление нового кода для обработки каждого особого случая по мере его распознавания.
  • Шаблон проектирования : использование шаблонов само по себе называется анти-шаблоном, что является признаком того, что система не использует достаточно абстракции [8]
  • Скрытие ошибки : перехват сообщения об ошибке до того, как его можно будет показать пользователю, при этом либо ничего не отображается, либо отображается бессмысленное сообщение. Этот анти-узор также называется рисунком подгузника . Также может относиться к стиранию трассировки стека во время обработки исключений, что может затруднить отладку.
  • Жесткий код : встраивание предположений о среде системы в ее реализацию
  • Код лазаньи : программы, структура которых состоит из слишком большого количества уровней наследования.
  • Поток лавы : сохранение нежелательного (избыточного или некачественного) кода, потому что его удаление слишком дорого или имеет непредсказуемые последствия [9] [10]
  • Последовательность переключения цикла : кодирование набора последовательных шагов с помощью переключателя в операторе цикла.
  • Магические числа : включение необъяснимых чисел в алгоритмы
  • Волшебные строки : реализация предположительно маловероятных сценариев ввода, таких как сравнение с очень конкретными строками, для маскировки функциональности.
  • Повторение : повторное написание кода, содержащего повторяющиеся шаблоны и подстроки; избегать с помощью один раз и только один раз (принцип абстракции)
  • Съемка мессенджера : выброс исключений из области действия плагина или подписчика в ответ на допустимый ввод, особенно когда это приводит к сбою внешней области.
  • Операция с дробовиком : разработчик добавляет функции в кодовую базу приложения, которые охватывают множество разработчиков или реализаций за одно изменение.
  • Программный код : хранение бизнес-логики в файлах конфигурации, а не в исходном коде [11]
  • Спагетти-код : программы, структура которых трудно понять, особенно из-за неправильного использования структур кода.

Методологические [ править ]

  • Копирование и вставка программирования : копирование (и изменение) существующего кода вместо создания общих решений.
  • Золотой молоток : если предположить, что любимое решение универсально (см .: Серебряная пуля )
  • Изобретено здесь : тенденция отвергать любые инновации или менее тривиальные решения, исходящие изнутри организации, обычно из-за отсутствия доверия к персоналу.
  • Синдром « Не изобретено здесь» (NIH): тенденция к изобретению колеса (неспособность принять существующее адекватное решение).
  • Преждевременная оптимизация : кодирование на ранней стадии ради кажущейся эффективности, жертвуя хорошим дизайном, ремонтопригодностью, а иногда даже реальной эффективностью.
  • Программирование путем перестановки (или «программирование случайно», или «программирование по совпадению»): попытка приблизиться к решению путем последовательного изменения кода, чтобы увидеть, работает ли оно.
  • Новое изобретение квадратного колеса : отказ принять существующее решение и вместо этого принять индивидуальное решение, которое работает намного хуже, чем существующее.
  • Серебряная пуля : предположение, что любимое техническое решение может решить более крупный процесс или проблему.
  • Разработка, управляемая тестерами : программные проекты, в которых новые требования указываются в отчетах об ошибках.

Управление конфигурацией [ править ]

  • Ад зависимостей : проблемы с версиями требуемых продуктов
  • Ад DLL : неадекватное управление библиотеками динамической компоновки (DLL), особенно в Microsoft Windows
  • Конфликт расширений : проблемы с разными расширениями классической Mac OS при попытке исправить одни и те же части операционной системы.
  • Ад JAR : чрезмерное использование нескольких файлов JAR , обычно вызывающее проблемы с версией и расположением из-за неправильного понимания модели загрузки классов Java.

См. Также [ править ]

  • Запах кода - признак неправильного программирования
  • Запах дизайна
  • Список философий разработки программного обеспечения - подходы, стили, максимы и философии для разработки программного обеспечения
  • Список инструментов для статического анализа кода
  • Программная гниль
  • Программное обеспечение принцип Питера
  • Модель незрелости возможностей
  • ISO / IEC 29110 : Профили жизненного цикла программного обеспечения и рекомендации для очень малых предприятий (VSE)
  • Дилемма новатора

Ссылки [ править ]

  1. ^ Budgen, D. (2003). Разработка программного обеспечения . Харлоу, англ .: Addison-Wesley. п. 225. ISBN 0-201-72219-4. Как описано в Long (2001), антипаттерны проектирования - это «очевидные, но неправильные решения повторяющихся проблем».
  2. ^ Скотт В. Эмблер (1998). Шаблоны процессов: построение крупномасштабных систем с использованием объектных технологий . Кембридж, Великобритания: Издательство Кембриджского университета. п. 4. ISBN 0-521-64568-9. ... общие подходы к решению повторяющихся проблем, которые оказываются неэффективными. Эти подходы называются антипаттернами.
  3. Кениг, Эндрю (март – апрель 1995 г.). «Паттерны и антипаттерны». Журнал объектно-ориентированного программирования . 8 (1): 46–48.
  4. Позднее перепечатано в: Rising, Linda (1998). Справочник по шаблонам: методы, стратегии и приложения . Кембридж, Великобритания: Издательство Кембриджского университета. п. 387. ISBN. 0-521-64818-1. Антипаттерн похож на образец, за исключением того, что вместо решения он дает нечто, внешне похожее на решение, но не таковое.
  5. ^ Питер, Лоуренс Дж. (1969), Принцип Питера: Почему дела всегда идут не так ; Книги 1969 Buccaneer, ISBN 9781568491615 
  6. ^ Йордан, Эдвард (1997), март смерти ; ISBN 978-0137483105 
  7. ^ «Модель анемичного домена - это не антипаттерн, это ТВЕРДЫЙ дизайн» . SAPM: Блог курса . 4 февраля 2014 . Проверено 3 января 2015 года .
  8. ^ «Месть ботаников» . В мире объектно-ориентированных приложений вы часто слышите о «шаблонах». Интересно, не являются ли эти шаблоны иногда свидетельством того, что работает человеческий компилятор case (c). Когда я вижу закономерности в своих программах, я считаю это признаком проблемы. Форма программы должна отражать только ту проблему, которую необходимо решить. Любая другая регулярность в коде является признаком, по крайней мере для меня, того, что я использую недостаточно мощные абстракции - часто то, что я создаю вручную расширения некоторых макросов, которые мне нужно написать.
  9. ^ "Поток лавы" . antipatterns.com . 2 апреля 2017.
  10. ^ "Недокументированные антипаттерны" потока лавы "усложняют процесс" . Icmgworld.com. 14 января 2002 года Архивировано из оригинала 11 марта 2011 года . Проверено 3 мая 2010 года .
  11. ^ Пападимулис, Alex (10 апреля 2007). «Мягкое кодирование» . thedailywtf.com . Проверено 27 июня 2011 года .

Дальнейшее чтение [ править ]

  1. Laplante, Phillip A .; Нил, Колин Дж. (2005). Антипаттерны: идентификация, рефакторинг и управление . Публикации Ауэрбаха. ISBN 0-8493-2994-9.
  2. Браун, Уильям Дж .; Malveau, Raphael C .; McCormick, Hays W .; Томас, Скотт В. (2000). Хадсон, Тереза ​​Хадсон (ред.). Антипаттерны в управлении проектами . Джон Вили и сыновья . ISBN 0-471-36366-9.

Внешние ссылки [ править ]

  • Антипаттерн на WikiWikiWeb
  • Каталог антипаттернов
  • AntiPatterns.com Веб-сайт книги AntiPatterns
  • Модели токсичного поведения
  • C Указатель Антипаттерн
  • Электронная книга Anti-Patterns
  • Модели социального доминирования