Анти-паттерн ы Чего в ИТ следует боятся ? Автор: Борис Лебеда
Паттерн ы и антипаттерны Паттерн  – типовое архитектурное решение характерн ых задач. Антипаттерн  –  часто принимаемое решение, которое приводит к негативным последствиям .
Классификация антипаттернов Антипаттерны разработки Антипаттерны архитектуры Антипаттерны менеджмента
Описание антипаттерна Характерные признаки Причины Решение Профилактика Исключения
Базов ые причины неправильных решений в ИТ Поспешность Узкий кругозор Лень Недальновидность Профессиональное самолюбие Стремление к сложности
Факторы успеха ИТ-проектов Контроль функциональности Контроль производительности Контроль сложности Контроль модификаций Управление ресурсами Управление технологиями Разработчики Архитекторы Менеджеры Топ менеджеры
Антипаттерны разработки Макаронный код Blob  ( God class) Застывшая лава Полтергейст Copy-Paste programming Серебряная пуля Минное поле Call super Singletonitis Error hiding Exception handling Магические числа Hard code
Макаронный код ( Spaghetti code) Характерные признаки : Слабая архитектура: Методы зависимы от процесса в котором они принимают участие, чаще всего вызываются только в единственном случае Злоупотребление глобальными переменными, ограниченность сигнатур методов Как следствие: слабая возможность повторного использования кода Причины : Лень,  Недальновидность Решение : Зачистка кода, рефакторинг Профилактика : Контроль сложности и изменений Исключения :  wrapping  внешнего сложного интерфейса
Blob (God class) Характерные признаки : Реализация значительной части функциональности в одном классе при наличии нефункциональных классов сателитов. Раздутый интерфейс класса (нет ограничений в области видимости) Причины : Лень,  Спешка Решение : делегирование функциональности сателитам. Защищённое программирование Профилактика : Контроль функциональности, производительности и сложности Исключения : нет. Всегда плохо
Blob (God class)
Застывшая лава ( Lava flow) Характерные признаки : Наличие значительного количества недокументированного или рудиментарного кода. Связан с таким понятием как постоянное устаревание Причины : Профессиональное самолюбие, лень Решение : улучшение процесса разработки Профилактика : Контроль модификаций, технологий Исключения : разработка прототипов на выброс или временных утилит
Застывшая лава ( Lava flow)
Полтергейст Характерные признаки : Класс связанный с соответствующим процессом. Причины : лень Решение : инкапсуляция «привидений» Профилактика : Контроль функциональности, сложности Исключения : нет ClassA ClassB
Copy-Paste programming Характерные признаки : Наличие дупликаций кода Обнаружение похожих дефектов Возрастание числа строк кода Причины : лень Решение : практика использования кода как чёрного ящика Профилактика : Контроль функциональности, сложности Исключения : повторное использование в независимых продуктах, бранчинг
Серебряная пуля( Golden hammer) Характерные признаки : Склонность принимать одно и тоже решение в разных ситуациях Привязанность к инструменту, а не технологии Причины : профессиональное самолюбие, узкий кругозор Решение : расширение кругозора Профилактика : Управление технологиями Исключения : нет
Call super Singletonitis Характерные признаки  Call super : Вызов дочерними классами класса родителя, сосредоточение функциональности в родительском ( super)  классе. Приводит к сложной логике в последнем Характерные признаки  Singletonitis : Неоправданное применение паттерна  Singleton . Приводит к потере контроля над загрузкой/созданием отдельных объектов
Error hiding  / Exception handling Характерные признаки  Error Hiding : Скрытие ошибок посредством применения нулевых обработчиков событий. Последствия: функциональности системы падают молча, не оставляя шансов понять причины возникающих ошибок. Характерные признаки  Exception Handling : Использование исключительных ситуаций в логике программы. Последствия: снижение производительности, сложная и непонятная логика, неправильная обработка исключительных ситуаций
Магические числа/ Hard code Характерные признаки магических чисел : Применение недокументированных или непонятных числовых констант в коде Примеры: 0x4D546864 – так начинается  MIDI  файл Последствия: Непонятная логика кода Характерные признаки  Hard code : Жестко прописанный алгоритм, непредусматривающий кастомизацию. Последствия: Тяжело повторно использовать, требуется рефакторинг
Антипаттерны архитектуры Острова автоматизации Дымоход Vendor Lock-In Волчий билет Вторичная архитектура Design by Committee Швейцарский нож и Interface bloat Изобретение велосипеда Абстракционизм ( The Grand Old Duke of York ) Overengineering
Острова автоматизации Характерные признаки : Повторение функционала в разных модулях приложение Причины : лень Решение : Создание общей оснастки, обеспечение универсальных интерфейсов Профилактика : Контроль функциональности, управление технологиями
Острова автоматизации
Дымоход ( Stovepipe) Характерные признаки : Очень большая степень связности модулей  (N*N) Причины : профессиональное самолюбие, узкий кругозор Решение : расширение кругозора Профилактика : Управление модификациями
Vendor Lock-In Характерные признаки : Сильная зависимость от сторонних компонент Причины : узкий кругозор, недальновидность Решение : создание промежуточных слоёв  (wrapper) Профилактика : Управление технологиями Исключение : Долгосрочное стратегическое партнёрство
Волчий билет Характерные признаки : Приведение архитектуры к стандарту при неясности стратегических целей. Или стремление удовлетворять этим стандартам Причины : узкий кругозор, профессиональная влюблённость Решение : разработка архитектуры согласно целям проекта Профилактика : Управление технологиями
Design by Committee Характерные признаки : Архитектуру разрабатывает большой контингент специалистов Коллективная ответственность за архитектуру Причины : профессиональная влюблённость Решение : Выделение ответственностей в комитете Профилактика : Управление ресурсами Исключения : Комитет относительно небольшой и сплочённый
Антипаттерны менеджмента Минное поле Синдром морского корпуса Analysis Paralysis Дым и зеркала Графическое управление Смерть от планирования Трудный подросток  (Corncob) Снобизм ( Intellectual Violence ) Склочный коллектив (The Feud) Tester driven development
Путь камикадзе ( Death March Project) Нехватка времени более чем на 50% Нехватка ресурсов более чем на 50% Нехватка бюджета более чем на 50% Количество планируемого функционала больше чем на 50% (По Эду Йордану)
Минное поле Характерные признаки : Очень много дефектов в выпущенной версии продукта Причины : профессиональное самолюбие, спешка Решение : инвестирование в  QA Профилактика : контроль функциональности, производительности Исключения : нет
Синдром морского корпуса   ( Hero-mode) Характерные признаки : График проекта составляется с расчётам на сверхчеловеческие способности членов команды.  Причины : профессиональное самолюбие, спешка Решение : получение прагматических или даже пессимистических оценок, создание резервов Профилактика : Управление ресурсами Исключения : нет
Analysis Paralysis Характерные признаки : Излишний перфекционизм при обработке требований, разработки архитектуры и графика проекта.  Применение водопадной модели в мобильных (agile)  проектах Причины : профессиональное самолюбие, спешка Решение : разделение ролей при анализе требований и проектировании  Профилактика : Управление ресурсами, управление технологиями Исключения : нет
продолжение следует …
Полезные ссылки AntiPatterns (Refactoring Software, Architectures and Projects in Crisis) Scott J. Thomas, William J. Brown, Hays W. "Skip" McCormick, Raphael C. Malveau, Dr. Thomas J. Mowbray http://www.antipatterns.com/ http://en.wikipedia.org/wiki/AntiPatterns "Design Patterns : Elements of Reusable Object-Oriented Software" Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides Death March : The Complete Software Developer's Guide to Surviving 'Mission Impossible' Projects by Edward Yourdon, Paul D. Becker (Editor)

Antipatterns in software (ru)

  • 1.
    Анти-паттерн ы Чегов ИТ следует боятся ? Автор: Борис Лебеда
  • 2.
    Паттерн ы иантипаттерны Паттерн – типовое архитектурное решение характерн ых задач. Антипаттерн – часто принимаемое решение, которое приводит к негативным последствиям .
  • 3.
    Классификация антипаттернов Антипаттерныразработки Антипаттерны архитектуры Антипаттерны менеджмента
  • 4.
    Описание антипаттерна Характерныепризнаки Причины Решение Профилактика Исключения
  • 5.
    Базов ые причинынеправильных решений в ИТ Поспешность Узкий кругозор Лень Недальновидность Профессиональное самолюбие Стремление к сложности
  • 6.
    Факторы успеха ИТ-проектовКонтроль функциональности Контроль производительности Контроль сложности Контроль модификаций Управление ресурсами Управление технологиями Разработчики Архитекторы Менеджеры Топ менеджеры
  • 7.
    Антипаттерны разработки Макаронныйкод Blob ( God class) Застывшая лава Полтергейст Copy-Paste programming Серебряная пуля Минное поле Call super Singletonitis Error hiding Exception handling Магические числа Hard code
  • 8.
    Макаронный код (Spaghetti code) Характерные признаки : Слабая архитектура: Методы зависимы от процесса в котором они принимают участие, чаще всего вызываются только в единственном случае Злоупотребление глобальными переменными, ограниченность сигнатур методов Как следствие: слабая возможность повторного использования кода Причины : Лень, Недальновидность Решение : Зачистка кода, рефакторинг Профилактика : Контроль сложности и изменений Исключения : wrapping внешнего сложного интерфейса
  • 9.
    Blob (God class)Характерные признаки : Реализация значительной части функциональности в одном классе при наличии нефункциональных классов сателитов. Раздутый интерфейс класса (нет ограничений в области видимости) Причины : Лень, Спешка Решение : делегирование функциональности сателитам. Защищённое программирование Профилактика : Контроль функциональности, производительности и сложности Исключения : нет. Всегда плохо
  • 10.
  • 11.
    Застывшая лава (Lava flow) Характерные признаки : Наличие значительного количества недокументированного или рудиментарного кода. Связан с таким понятием как постоянное устаревание Причины : Профессиональное самолюбие, лень Решение : улучшение процесса разработки Профилактика : Контроль модификаций, технологий Исключения : разработка прототипов на выброс или временных утилит
  • 12.
  • 13.
    Полтергейст Характерные признаки: Класс связанный с соответствующим процессом. Причины : лень Решение : инкапсуляция «привидений» Профилактика : Контроль функциональности, сложности Исключения : нет ClassA ClassB
  • 14.
    Copy-Paste programming Характерныепризнаки : Наличие дупликаций кода Обнаружение похожих дефектов Возрастание числа строк кода Причины : лень Решение : практика использования кода как чёрного ящика Профилактика : Контроль функциональности, сложности Исключения : повторное использование в независимых продуктах, бранчинг
  • 15.
    Серебряная пуля( Goldenhammer) Характерные признаки : Склонность принимать одно и тоже решение в разных ситуациях Привязанность к инструменту, а не технологии Причины : профессиональное самолюбие, узкий кругозор Решение : расширение кругозора Профилактика : Управление технологиями Исключения : нет
  • 16.
    Call super SingletonitisХарактерные признаки Call super : Вызов дочерними классами класса родителя, сосредоточение функциональности в родительском ( super) классе. Приводит к сложной логике в последнем Характерные признаки Singletonitis : Неоправданное применение паттерна Singleton . Приводит к потере контроля над загрузкой/созданием отдельных объектов
  • 17.
    Error hiding / Exception handling Характерные признаки Error Hiding : Скрытие ошибок посредством применения нулевых обработчиков событий. Последствия: функциональности системы падают молча, не оставляя шансов понять причины возникающих ошибок. Характерные признаки Exception Handling : Использование исключительных ситуаций в логике программы. Последствия: снижение производительности, сложная и непонятная логика, неправильная обработка исключительных ситуаций
  • 18.
    Магические числа/ Hardcode Характерные признаки магических чисел : Применение недокументированных или непонятных числовых констант в коде Примеры: 0x4D546864 – так начинается MIDI файл Последствия: Непонятная логика кода Характерные признаки Hard code : Жестко прописанный алгоритм, непредусматривающий кастомизацию. Последствия: Тяжело повторно использовать, требуется рефакторинг
  • 19.
    Антипаттерны архитектуры Островаавтоматизации Дымоход Vendor Lock-In Волчий билет Вторичная архитектура Design by Committee Швейцарский нож и Interface bloat Изобретение велосипеда Абстракционизм ( The Grand Old Duke of York ) Overengineering
  • 20.
    Острова автоматизации Характерныепризнаки : Повторение функционала в разных модулях приложение Причины : лень Решение : Создание общей оснастки, обеспечение универсальных интерфейсов Профилактика : Контроль функциональности, управление технологиями
  • 21.
  • 22.
    Дымоход ( Stovepipe)Характерные признаки : Очень большая степень связности модулей (N*N) Причины : профессиональное самолюбие, узкий кругозор Решение : расширение кругозора Профилактика : Управление модификациями
  • 23.
    Vendor Lock-In Характерныепризнаки : Сильная зависимость от сторонних компонент Причины : узкий кругозор, недальновидность Решение : создание промежуточных слоёв (wrapper) Профилактика : Управление технологиями Исключение : Долгосрочное стратегическое партнёрство
  • 24.
    Волчий билет Характерныепризнаки : Приведение архитектуры к стандарту при неясности стратегических целей. Или стремление удовлетворять этим стандартам Причины : узкий кругозор, профессиональная влюблённость Решение : разработка архитектуры согласно целям проекта Профилактика : Управление технологиями
  • 25.
    Design by CommitteeХарактерные признаки : Архитектуру разрабатывает большой контингент специалистов Коллективная ответственность за архитектуру Причины : профессиональная влюблённость Решение : Выделение ответственностей в комитете Профилактика : Управление ресурсами Исключения : Комитет относительно небольшой и сплочённый
  • 26.
    Антипаттерны менеджмента Минноеполе Синдром морского корпуса Analysis Paralysis Дым и зеркала Графическое управление Смерть от планирования Трудный подросток (Corncob) Снобизм ( Intellectual Violence ) Склочный коллектив (The Feud) Tester driven development
  • 27.
    Путь камикадзе (Death March Project) Нехватка времени более чем на 50% Нехватка ресурсов более чем на 50% Нехватка бюджета более чем на 50% Количество планируемого функционала больше чем на 50% (По Эду Йордану)
  • 28.
    Минное поле Характерныепризнаки : Очень много дефектов в выпущенной версии продукта Причины : профессиональное самолюбие, спешка Решение : инвестирование в QA Профилактика : контроль функциональности, производительности Исключения : нет
  • 29.
    Синдром морского корпуса ( Hero-mode) Характерные признаки : График проекта составляется с расчётам на сверхчеловеческие способности членов команды. Причины : профессиональное самолюбие, спешка Решение : получение прагматических или даже пессимистических оценок, создание резервов Профилактика : Управление ресурсами Исключения : нет
  • 30.
    Analysis Paralysis Характерныепризнаки : Излишний перфекционизм при обработке требований, разработки архитектуры и графика проекта. Применение водопадной модели в мобильных (agile) проектах Причины : профессиональное самолюбие, спешка Решение : разделение ролей при анализе требований и проектировании Профилактика : Управление ресурсами, управление технологиями Исключения : нет
  • 31.
  • 32.
    Полезные ссылки AntiPatterns(Refactoring Software, Architectures and Projects in Crisis) Scott J. Thomas, William J. Brown, Hays W. "Skip" McCormick, Raphael C. Malveau, Dr. Thomas J. Mowbray http://www.antipatterns.com/ http://en.wikipedia.org/wiki/AntiPatterns "Design Patterns : Elements of Reusable Object-Oriented Software" Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides Death March : The Complete Software Developer's Guide to Surviving 'Mission Impossible' Projects by Edward Yourdon, Paul D. Becker (Editor)