Antipatterns in software (ru)

1,361 views

Published on

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

Published in: Health & Medicine, Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,361
On SlideShare
0
From Embeds
0
Number of Embeds
58
Actions
Shares
0
Downloads
23
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • Antipatterns in software (ru)

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

    ×