antipatterns in software (ru)

Post on 26-Jun-2015

996 Views

Category:

Health & Medicine

5 Downloads

Preview:

Click to see full reader

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)

top related