antipatterns in software (ru)

32
Анти-паттерны Чего в ИТ следует боятся? Автор: Борис Лебеда

Upload: borys-lebeda

Post on 26-Jun-2015

996 views

Category:

Health & Medicine


5 download

DESCRIPTION

My presentation about antipatterns in summer 2007 accordingly to Scott Thomas and Co.

TRANSCRIPT

Page 1: Antipatterns in software (ru)

Анти-паттерны

Чего в ИТ следует боятся?

Автор: Борис Лебеда

Page 2: Antipatterns in software (ru)

Паттерны и антипаттерны

Паттерн – типовое архитектурное решение характерных задач.

Антипаттерн – часто принимаемое решение, которое приводит к негативным последствиям.

Page 3: Antipatterns in software (ru)

Классификация антипаттернов

Антипаттерны разработки Антипаттерны архитектуры Антипаттерны менеджмента

Page 4: Antipatterns in software (ru)

Описание антипаттерна

Характерные признаки

Причины

Решение

Профилактика

Исключения

Page 5: Antipatterns in software (ru)

Базовые причины неправильных решений в ИТ

Поспешность Узкий кругозор Лень

Недальновидность Профессиональное

самолюбие Стремление к

сложности

Page 6: Antipatterns in software (ru)

Факторы успеха ИТ-проектов Контроль функциональности Контроль

производительности

Контроль сложности Контроль модификаций

Управление ресурсами

Управление технологиями

Page 7: Antipatterns in software (ru)

Антипаттерны разработкиМакаронный код

Blob (God class)

Застывшая лава

Полтергейст

Copy-Paste programming

Серебряная пуля

Минное поле

Call super

Singletonitis

Error hiding

Exception handlingМагические числаHard code

Page 8: Antipatterns in software (ru)

Макаронный код (Spaghetti code)

Характерные признаки:Слабая архитектура: Методы

зависимы от процесса в котором они принимают участие, чаще всего вызываются только в единственном случае

Злоупотребление глобальными переменными, ограниченность сигнатур методов

Как следствие: слабая возможность повторного использования кода

Причины:Лень, Недальновидность

Решение:Зачистка кода, рефакторинг

Профилактика:Контроль сложности и изменений

Исключения: wrapping внешнего сложного интерфейса

Page 9: Antipatterns in software (ru)

Blob (God class)Характерные признаки:Реализация значительной

части функциональности в одном классе при наличии нефункциональных классов сателитов.

Раздутый интерфейс класса (нет ограничений в области видимости)

Причины:Лень, Спешка

Решение:делегирование функциональности сателитам. Защищённое программирование

Профилактика:Контроль функциональности,

производительности и сложности

Исключения: нет. Всегда плохо

Page 10: Antipatterns in software (ru)

Blob (God class)

Page 11: Antipatterns in software (ru)

Застывшая лава (Lava flow)Характерные признаки:Наличие значительного количества

недокументированного или рудиментарного кода.

Связан с таким понятием как постоянное устаревание

Причины:Профессиональное самолюбие, лень

Решение:улучшение процесса разработки

Профилактика:Контроль модификаций,

технологий

Исключения: разработка прототипов на выброс или временных утилит

Page 12: Antipatterns in software (ru)

Застывшая лава (Lava flow)

Page 13: Antipatterns in software (ru)

Полтергейст

Характерные признаки:Класс связанный с

соответствующим процессом.

Причины:лень

Решение:инкапсуляция «привидений»

Профилактика:Контроль функциональности,

сложности

Исключения: нет

ClassA ClassB

Page 14: Antipatterns in software (ru)

Copy-Paste programmingХарактерные признаки:Наличие дупликаций кодаОбнаружение похожих дефектовВозрастание числа строк кода

Причины:лень

Решение:практика использования кода как чёрного ящика

Профилактика:Контроль функциональности,

сложности

Исключения: повторное использование в независимых продуктах, бранчинг

Page 15: Antipatterns in software (ru)

Серебряная пуля(Golden hammer)

Характерные признаки:Склонность принимать одно и тоже

решение в разных ситуацияхПривязанность к инструменту, а не

технологии

Причины:профессиональное самолюбие, узкий кругозор

Решение:расширение кругозора

Профилактика:Управление технологиями

Исключения: нет

Page 16: Antipatterns in software (ru)

Call super Singletonitis

Характерные признаки Call super:

Вызов дочерними классами класса родителя, сосредоточение функциональности в родительском (super) классе.

Приводит к сложной логике в последнем

Характерные признаки Singletonitis:

Неоправданное применение паттерна Singleton.

Приводит к потере контроля над загрузкой/созданием отдельных объектов

Page 17: Antipatterns in software (ru)

Error hiding /Exception handling

Характерные признаки Error Hiding:

Скрытие ошибок посредством применения нулевых обработчиков событий.

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

Характерные признаки Exception Handling:

Использование исключительных ситуаций в логике программы.

Последствия:

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

Page 18: Antipatterns in software (ru)

Магические числа/Hard code

Характерные признаки магических чисел:

Применение недокументированных или непонятных числовых констант в коде

Примеры:

0x4D546864 – так начинается MIDI файл

Последствия:

Непонятная логика кода

Характерные признаки Hard code:

Жестко прописанный алгоритм, непредусматривающий кастомизацию.

Последствия:

Тяжело повторно использовать, требуется рефакторинг

Page 19: Antipatterns in software (ru)

Антипаттерны архитектуры

Острова автоматизации

Дымоход

Vendor Lock-In

Волчий билет

Вторичная архитектура

Design by Committee

Швейцарский нож и Interface bloat

Изобретение велосипеда

Абстракционизм (The Grand Old Duke of York)

Overengineering

Page 20: Antipatterns in software (ru)

Острова автоматизацииХарактерные признаки:Повторение функционала в разных

модулях приложение

Причины:лень

Решение:Создание общей оснастки, обеспечение универсальных интерфейсов

Профилактика:Контроль функциональности, управление

технологиями

Page 21: Antipatterns in software (ru)

Острова автоматизации

Page 22: Antipatterns in software (ru)

Дымоход (Stovepipe)

Характерные признаки:

Очень большая степень связности модулей (N*N)

Причины:

профессиональное самолюбие, узкий кругозор

Решение:

расширение кругозора

Профилактика:

Управление модификациями

Page 23: Antipatterns in software (ru)

Vendor Lock-In

Характерные признаки:Сильная зависимость от

сторонних компонент

Причины:узкий кругозор, недальновидность

Решение:создание промежуточных слоёв (wrapper)

Профилактика:Управление технологиями

Исключение:Долгосрочное стратегическое партнёрство

Page 24: Antipatterns in software (ru)

Волчий билет

Характерные признаки:

Приведение архитектуры к стандарту при неясности стратегических целей.

Или стремление удовлетворять этим стандартам

Причины:

узкий кругозор, профессиональная влюблённость

Решение:

разработка архитектуры согласно целям проекта

Профилактика:

Управление технологиями

Page 25: Antipatterns in software (ru)

Design by Committee

Характерные признаки:Архитектуру разрабатывает

большой контингент специалистов

Коллективная ответственность за архитектуру

Причины:профессиональная влюблённость

Решение:Выделение ответственностей в комитете

Профилактика:Управление ресурсами

Исключения:Комитет относительно небольшой и сплочённый

Page 26: Antipatterns in software (ru)

Антипаттерны менеджмента

Минное поле

Синдром морского корпуса

Analysis Paralysis

Дым и зеркала

Графическое управление

Смерть от планирования

Трудный подросток (Corncob)

Снобизм (Intellectual Violence)

Склочный коллектив (The Feud)

Tester driven development

Page 27: Antipatterns in software (ru)

Путь камикадзе (Death March Project)

Нехватка времени более чем на 50% Нехватка ресурсов более чем на 50% Нехватка бюджета более чем на 50% Количество планируемого функционала

больше чем на 50%

(По Эду Йордану)

Page 28: Antipatterns in software (ru)

Минное полеХарактерные признаки:Очень много дефектов в

выпущенной версии продукта

Причины:профессиональное самолюбие, спешка

Решение:инвестирование в QA

Профилактика:контроль функциональности, производительности

Исключения: нет

Page 29: Antipatterns in software (ru)

Синдром морского корпуса (Hero-mode)

Характерные признаки:График проекта

составляется с расчётам на сверхчеловеческие способности членов команды.

Причины:профессиональное самолюбие, спешка

Решение:получение прагматических или даже пессимистических оценок, создание резервов

Профилактика:Управление ресурсами

Исключения: нет

Page 30: Antipatterns in software (ru)

Analysis Paralysis

Характерные признаки:Излишний перфекционизм

при обработке требований, разработки архитектуры и графика проекта.

Применение водопадной модели в мобильных(agile) проектах

Причины:профессиональное самолюбие, спешка

Решение:разделение ролей при анализе требований и проектировании

Профилактика:Управление ресурсами,

управление технологиями

Исключения: нет

Page 31: Antipatterns in software (ru)

продолжение следует …

Page 32: Antipatterns in software (ru)

Полезные ссылки 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)