antipatterns in software (ru)
DESCRIPTION
My presentation about antipatterns in summer 2007 accordingly to Scott Thomas and Co.TRANSCRIPT
Анти-паттерны
Чего в ИТ следует боятся?
Автор: Борис Лебеда
Паттерны и антипаттерны
Паттерн – типовое архитектурное решение характерных задач.
Антипаттерн – часто принимаемое решение, которое приводит к негативным последствиям.
Классификация антипаттернов
Антипаттерны разработки Антипаттерны архитектуры Антипаттерны менеджмента
Описание антипаттерна
Характерные признаки
Причины
Решение
Профилактика
Исключения
Базовые причины неправильных решений в ИТ
Поспешность Узкий кругозор Лень
Недальновидность Профессиональное
самолюбие Стремление к
сложности
Факторы успеха ИТ-проектов Контроль функциональности Контроль
производительности
Контроль сложности Контроль модификаций
Управление ресурсами
Управление технологиями
Антипаттерны разработкиМакаронный код
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)