SlideShare ist ein Scribd-Unternehmen logo
1 von 21
ПРОМЫШЛЕННАЯ РАЗРАБОТКА ПО
   Лекция 3. Особенности работы п рограммиста.
     Часть 1. Проектирование. Рефакторинг.
О ЧЁМ БУДЕМ ГОВОРИТЬ СЕГОДНЯ?
  Основные задачи программиста               Специфика крупного проекта



  Разработка
                               Написание
 «правильной»                                                Рефакторинг
                           «правильного» кода
  архитектуры



                  Наиболее ценные навыки программиста




                     Три ступени роста программиста
ЗАДАЧИ ПРОГРАММИСТА (ОБЩИЕ)
• Разработка
  архитектуры системы
• Написание кода
• Исправление
  дефектов
ЗАДАЧИ ПРОГРАММИСТА (С ТОЧКИ ЗРЕНИЯ
ЖИЗНЕННОГО ЦИКЛА ПО)
• Написание первой версии
  системы с нуля
   • Проектирование
   • Кодирование
   • Отладка
• Поддержка текущей версии
• Добавление новых функций
   • Проектирование
   • Кодирование
   • Отладка                       Диалог выбора шрифта в Windows
                             Vista, сохранившийся со времѐн Windows 3.1
ЭТО НУЖНО ЗАПОМНИТЬ!
Код, который пишет программист
• Может использоваться через
  десятки лет
• Может использоваться
  множеством других
  программистов
• Может быть изменѐн до
  неузнаваемости в новой
  версии
• Может быть выброшен уже в
  следующем релизе
ОСНОВНОЙ ПОДХОД ХОРОШЕГО ПРОГРАММИСТА


    Думать, прежде чем
         сделать!
         (но не впадать в бесконечные циклы)
ПРОЕКТИРОВАНИЕ




Очевидно, что 30 минут мало, чтобы рассказать об архитектуре что-нибудь практически полезное
АРХИТЕКТУРА
• Архитектура системы – это
  каркас, который обеспечивает
  еѐ прочность
• Архитектуру необходимо
  продумывать заранее, до того,
  как писать код
• Чем детальнее проработана
  архитектура, тем проще потом
  писать код
• Архитектура не вечна,
  изменения неизбежны
КАК ПРОЕКТИРОВАТЬ СИСТЕМУ
• Проектирование
  происходит «сверху вниз»
  – от крупных частей к
  мелким
• Для многих задач
  существуют готовые
  решения в виде
  паттернов
  проектирования
ПРИНЦИПЫ И ПРИЗНАКИ ПРАВИЛЬНОЙ
АРХИТЕКТУРЫ
• Слабая связность (Low
  coupling)
• Сильное зацепление (High
  cohesion)
• KISS (keep it short & simple)
• DRY (don’t repeat yourself)
• Работа на уровне абстракций
• Использование готовых
  решений
ПРИНЦИПЫ И ПРИЗНАКИ ПРАВИЛЬНОЙ
АРХИТЕКТУРЫ. S.O.L.I.D.
• Принцип единственной
  обязанности
• Принцип открытости-
  закрытости
• Принцип подстановки Барбары
  Лисков
• Принцип разделения
  интерфейсов
• Принцип инверсии
  зависимостей
НАИБОЛЕЕ ЧАСТЫЕ ЗАБЛУЖДЕНИЯ ПРИ
ПРОЕКТИРОВАНИИ ПРОГРАММНЫХ СИСТЕМ
• Проектировать надо только
  очень большие проекты
• Система должна
  проектироваться так, чтобы
  предусматривать любое
  будущее изменение
  требований
• Система проектируется один
  раз. Отдельно думать над
  архитектурой новых функций
  не имеет смысла
ЧТО ПОЧИТАТЬ?
• Э. Гамма, Р.Хелм, Р.Джонсон,
  Д.Влиссидес: Приѐмы объектно-
  ориентированного проектирования.
  Паттерны проектирования
• Г.Буч: Объектно-ориентированный
  анализ и проектирование (с примерами
  приложений на C++)
• М. Фаулер: Архитектура корпоративных
  программных систем
РЕФАКТОРИНГ




Очевидно, что 30 минут мало, чтобы рассказать о рефакторинге что-нибудь практически полезное
ОПРЕДЕЛЕНИЕ
Рефакторинг:
Процесс изменения внутренней структуры программы
без изменения еѐ поведения.




                                              Это я
                                          обязательно
                                           спрошу на
                                            экзамене
ПРЕДПОСЫЛКИ РЕФАКТОРИНГА
• Πάντα ῥεῖ καὶ οὐδὲν μένει
• Изменения в функциональных или
  нефункциональных требованиях
• «Потеря фокуса» в архитектуре со
  временем
• Возникшие ошибки
• Изначально низкое качество кода
• Потеря «читабельности» кода



                                       Рефакторинг не устраняет эти
                                     причины, а «готовит почву» для их
                                                устранения!
ПРИМЕРЫ РЕФАКТОРИНГА
• Переименование метода, класса,
  пакета
• Выделение метода, класса,
  интерфейса
• Замена конкретного класса
  абстракцией
• Замена условного оператора
  полиморфизмом
• Замена наследования
  делегированием
• …


         Мартин Фаулер, Рефакторинг: улучшение существующего кода
РЕФАКТОРИНГ ЭТО НЕ…
• …устранение ошибок
• …добавление новых функций
• …оптимизация производительности
• …переписывание кода с нуля


Необходимость рефакторинга должна
быть чѐтко обоснована. Иначе это не
рефакторинг, а перфекционизм.

    Рефакторинг – это не самоцель!
РЕФАКТОРИНГ И МОДУЛЬНОЕ ТЕСТИРОВАНИЕ
• Необходимо убедиться, чтобы до и
  после всѐ было одинаково
• Желательно автоматически
• Желательно быстро


Нормально осуществлять рефакторинг
можно только в коде, покрытом Unit-
тестами.




         Мартин Фаулер, Рефакторинг: улучшение существующего кода
ЧТО ПОЧИТАТЬ?
• М. Фаулер: Рефакторинг. Улучшение
  существующего кода
• http://www.refactoring.com/catalog/index.h
  tml
ВРЕМЯ ЗАДАВАТЬ ВОПРОСЫ

Weitere ähnliche Inhalte

Was ist angesagt?

Тестирование требований
Тестирование требованийТестирование требований
Тестирование требованийNickola14
 
QA Fes 2016. Василий Сливка. 10 лучших практик для тестирования мобильных при...
QA Fes 2016. Василий Сливка. 10 лучших практик для тестирования мобильных при...QA Fes 2016. Василий Сливка. 10 лучших практик для тестирования мобильных при...
QA Fes 2016. Василий Сливка. 10 лучших практик для тестирования мобильных при...QAFest
 
Документирование дефектов
Документирование дефектовДокументирование дефектов
Документирование дефектовNickola14
 
Automation from the trenches
Automation from the trenchesAutomation from the trenches
Automation from the trenchesGleb Rybalko
 
Usability ppt-last-140313103534-phpapp01
Usability ppt-last-140313103534-phpapp01Usability ppt-last-140313103534-phpapp01
Usability ppt-last-140313103534-phpapp01Nickola14
 
Технологии разработки ПО
Технологии разработки ПОТехнологии разработки ПО
Технологии разработки ПОAnton Konushin
 
Severity и Priority для неначинающих: очевидное и невероятное
Severity и Priority для неначинающих: очевидное и невероятноеSeverity и Priority для неначинающих: очевидное и невероятное
Severity и Priority для неначинающих: очевидное и невероятноеDeutsche Post
 
Ui testing how intel does this
Ui testing   how intel does thisUi testing   how intel does this
Ui testing how intel does thisAlexei Lupan
 
Лучшие практики на практике
Лучшие практики на практикеЛучшие практики на практике
Лучшие практики на практикеDenis Tuchin
 
Оптимизируем тест кейсы
Оптимизируем тест кейсыОптимизируем тест кейсы
Оптимизируем тест кейсыSQALab
 
Метод No-Tests-Cases: избавьтесь от тест-кейсов в тестировании
Метод No-Tests-Cases: избавьтесь от тест-кейсов в тестированииМетод No-Tests-Cases: избавьтесь от тест-кейсов в тестировании
Метод No-Tests-Cases: избавьтесь от тест-кейсов в тестированииDeutsche Post
 
Tpo 05111(1)
Tpo 05111(1)Tpo 05111(1)
Tpo 05111(1)Nickola14
 
Фокус тест
Фокус тестФокус тест
Фокус тестSQALab
 
IT-шная история игрушек или feature-driven тестирование в действии
IT-шная история игрушек или feature-driven тестирование в действииIT-шная история игрушек или feature-driven тестирование в действии
IT-шная история игрушек или feature-driven тестирование в действииGleb Rybalko
 
Расширяемая платформа для создания и управления автоматизированными тестами н...
Расширяемая платформа для создания и управления автоматизированными тестами н...Расширяемая платформа для создания и управления автоматизированными тестами н...
Расширяемая платформа для создания и управления автоматизированными тестами н...jazzteam
 
Эволюция автотестирования на Selenium
Эволюция автотестирования на SeleniumЭволюция автотестирования на Selenium
Эволюция автотестирования на SeleniumSQALab
 
Как перестать бояться и начать автоматизировать
Как перестать бояться и начать автоматизироватьКак перестать бояться и начать автоматизировать
Как перестать бояться и начать автоматизироватьSQALab
 

Was ist angesagt? (20)

Тестирование требований
Тестирование требованийТестирование требований
Тестирование требований
 
Team workflow
Team workflowTeam workflow
Team workflow
 
QA Fes 2016. Василий Сливка. 10 лучших практик для тестирования мобильных при...
QA Fes 2016. Василий Сливка. 10 лучших практик для тестирования мобильных при...QA Fes 2016. Василий Сливка. 10 лучших практик для тестирования мобильных при...
QA Fes 2016. Василий Сливка. 10 лучших практик для тестирования мобильных при...
 
Документирование дефектов
Документирование дефектовДокументирование дефектов
Документирование дефектов
 
Automation from the trenches
Automation from the trenchesAutomation from the trenches
Automation from the trenches
 
Usability ppt-last-140313103534-phpapp01
Usability ppt-last-140313103534-phpapp01Usability ppt-last-140313103534-phpapp01
Usability ppt-last-140313103534-phpapp01
 
Технологии разработки ПО
Технологии разработки ПОТехнологии разработки ПО
Технологии разработки ПО
 
Automation from the trenches
Automation from the trenchesAutomation from the trenches
Automation from the trenches
 
Severity и Priority для неначинающих: очевидное и невероятное
Severity и Priority для неначинающих: очевидное и невероятноеSeverity и Priority для неначинающих: очевидное и невероятное
Severity и Priority для неначинающих: очевидное и невероятное
 
Ui testing how intel does this
Ui testing   how intel does thisUi testing   how intel does this
Ui testing how intel does this
 
Лучшие практики на практике
Лучшие практики на практикеЛучшие практики на практике
Лучшие практики на практике
 
Оптимизируем тест кейсы
Оптимизируем тест кейсыОптимизируем тест кейсы
Оптимизируем тест кейсы
 
Метод No-Tests-Cases: избавьтесь от тест-кейсов в тестировании
Метод No-Tests-Cases: избавьтесь от тест-кейсов в тестированииМетод No-Tests-Cases: избавьтесь от тест-кейсов в тестировании
Метод No-Tests-Cases: избавьтесь от тест-кейсов в тестировании
 
Tpo 05111(1)
Tpo 05111(1)Tpo 05111(1)
Tpo 05111(1)
 
Java one presentation
Java one presentationJava one presentation
Java one presentation
 
Фокус тест
Фокус тестФокус тест
Фокус тест
 
IT-шная история игрушек или feature-driven тестирование в действии
IT-шная история игрушек или feature-driven тестирование в действииIT-шная история игрушек или feature-driven тестирование в действии
IT-шная история игрушек или feature-driven тестирование в действии
 
Расширяемая платформа для создания и управления автоматизированными тестами н...
Расширяемая платформа для создания и управления автоматизированными тестами н...Расширяемая платформа для создания и управления автоматизированными тестами н...
Расширяемая платформа для создания и управления автоматизированными тестами н...
 
Эволюция автотестирования на Selenium
Эволюция автотестирования на SeleniumЭволюция автотестирования на Selenium
Эволюция автотестирования на Selenium
 
Как перестать бояться и начать автоматизировать
Как перестать бояться и начать автоматизироватьКак перестать бояться и начать автоматизировать
Как перестать бояться и начать автоматизировать
 

Ähnlich wie Промышленная разработка ПО. Лекция 3. Особенности работы программиста. Часть 1. Проектирование. Рефакторинг.

Программистский подход в дизайне
Программистский подход в дизайнеПрограммистский подход в дизайне
Программистский подход в дизайнеПрофсоUX
 
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)Ontico
 
Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинJavascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинSergey Xek
 
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только одинHappyDev
 
разработка бизнес приложений (7)
разработка бизнес приложений (7)разработка бизнес приложений (7)
разработка бизнес приложений (7)Alexander Gornik
 
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0AlexeyParhomenko
 
рентабельный код
рентабельный кодрентабельный код
рентабельный кодMax Arshinov
 
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)Ontico
 
Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...
Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...
Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...Tech Talks @NSU
 
Профессии в IT
Профессии в ITПрофессии в IT
Профессии в ITSam Faktorovich
 
Практические аспекты разработки ПО #2
Практические аспекты разработки ПО #2Практические аспекты разработки ПО #2
Практические аспекты разработки ПО #2Denis Umnov
 
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только одинSECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только одинSECON
 
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только одинSECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только одинSECON
 
Как мы делаем Banki.ru
Как мы делаем Banki.ruКак мы делаем Banki.ru
Как мы делаем Banki.ruRoman Ivliev
 
Практические аспекты разработки ПО #3
Практические аспекты разработки ПО #3Практические аспекты разработки ПО #3
Практические аспекты разработки ПО #3Denis Umnov
 
Workflow: работа над проектом в Яндексе
Workflow: работа над проектом в ЯндексеWorkflow: работа над проектом в Яндексе
Workflow: работа над проектом в ЯндексеDenis Chistyakov
 
Денис Чистяков: Workflow. Работа над проектом в Яндексе
Денис Чистяков: Workflow. Работа над проектом в ЯндексеДенис Чистяков: Workflow. Работа над проектом в Яндексе
Денис Чистяков: Workflow. Работа над проектом в ЯндексеYandex
 
Test Driven Development in .NET Applications
Test Driven Development in .NET ApplicationsTest Driven Development in .NET Applications
Test Driven Development in .NET ApplicationsAnton Vidishchev
 
TК°Conf. Организация разработки Frontend. Виталий Слободин.
TК°Conf. Организация разработки Frontend. Виталий Слободин.TК°Conf. Организация разработки Frontend. Виталий Слободин.
TК°Conf. Организация разработки Frontend. Виталий Слободин.TKConf
 

Ähnlich wie Промышленная разработка ПО. Лекция 3. Особенности работы программиста. Часть 1. Проектирование. Рефакторинг. (20)

Программистский подход в дизайне
Программистский подход в дизайнеПрограммистский подход в дизайне
Программистский подход в дизайне
 
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
 
Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинJavascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только один
 
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
 
разработка бизнес приложений (7)
разработка бизнес приложений (7)разработка бизнес приложений (7)
разработка бизнес приложений (7)
 
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
 
рентабельный код
рентабельный кодрентабельный код
рентабельный код
 
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
 
Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...
Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...
Tech Talks @NSU: Рассказ о разных профессиях в IT-индустрии, или почему не вс...
 
Профессии в IT
Профессии в ITПрофессии в IT
Профессии в IT
 
Практические аспекты разработки ПО #2
Практические аспекты разработки ПО #2Практические аспекты разработки ПО #2
Практические аспекты разработки ПО #2
 
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только одинSECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
 
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только одинSECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
 
Как мы делаем Banki.ru
Как мы делаем Banki.ruКак мы делаем Banki.ru
Как мы делаем Banki.ru
 
Практические аспекты разработки ПО #3
Практические аспекты разработки ПО #3Практические аспекты разработки ПО #3
Практические аспекты разработки ПО #3
 
Workflow: работа над проектом в Яндексе
Workflow: работа над проектом в ЯндексеWorkflow: работа над проектом в Яндексе
Workflow: работа над проектом в Яндексе
 
Денис Чистяков: Workflow. Работа над проектом в Яндексе
Денис Чистяков: Workflow. Работа над проектом в ЯндексеДенис Чистяков: Workflow. Работа над проектом в Яндексе
Денис Чистяков: Workflow. Работа над проектом в Яндексе
 
Test Driven Development in .NET Applications
Test Driven Development in .NET ApplicationsTest Driven Development in .NET Applications
Test Driven Development in .NET Applications
 
ОПК № 1 – Вводная
ОПК № 1 – ВводнаяОПК № 1 – Вводная
ОПК № 1 – Вводная
 
TК°Conf. Организация разработки Frontend. Виталий Слободин.
TК°Conf. Организация разработки Frontend. Виталий Слободин.TК°Conf. Организация разработки Frontend. Виталий Слободин.
TК°Conf. Организация разработки Frontend. Виталий Слободин.
 

Mehr von Mikhail Payson

Промышленная разработка ПО. Лекция 8. Особенности работы руководителя проекто...
Промышленная разработка ПО. Лекция 8. Особенности работы руководителя проекто...Промышленная разработка ПО. Лекция 8. Особенности работы руководителя проекто...
Промышленная разработка ПО. Лекция 8. Особенности работы руководителя проекто...Mikhail Payson
 
Промышленная разработка ПО. Лекция 7. Особенности работы руководителя проектов
Промышленная разработка ПО. Лекция 7. Особенности работы руководителя проектовПромышленная разработка ПО. Лекция 7. Особенности работы руководителя проектов
Промышленная разработка ПО. Лекция 7. Особенности работы руководителя проектовMikhail Payson
 
Пара слов о рисках
Пара слов о рискахПара слов о рисках
Пара слов о рискахMikhail Payson
 
Руководитель - это про людей (CIOConf 2013, Барнаул)
Руководитель - это про людей (CIOConf 2013, Барнаул)Руководитель - это про людей (CIOConf 2013, Барнаул)
Руководитель - это про людей (CIOConf 2013, Барнаул)Mikhail Payson
 
Why you should think twice before giving your programmer to design the UI
Why you should think twice before giving your programmer to design the UIWhy you should think twice before giving your programmer to design the UI
Why you should think twice before giving your programmer to design the UIMikhail Payson
 
Как отучить программиста колбасить (Прагматик 2012)
Как отучить программиста колбасить (Прагматик 2012)Как отучить программиста колбасить (Прагматик 2012)
Как отучить программиста колбасить (Прагматик 2012)Mikhail Payson
 
как воспитать программиста (Выступление в Sibirix)
как воспитать программиста (Выступление в Sibirix)как воспитать программиста (Выступление в Sibirix)
как воспитать программиста (Выступление в Sibirix)Mikhail Payson
 
Эффективная работа команды: поток
Эффективная работа команды: потокЭффективная работа команды: поток
Эффективная работа команды: потокMikhail Payson
 
Как воспитать программиста
Как воспитать программистаКак воспитать программиста
Как воспитать программистаMikhail Payson
 

Mehr von Mikhail Payson (9)

Промышленная разработка ПО. Лекция 8. Особенности работы руководителя проекто...
Промышленная разработка ПО. Лекция 8. Особенности работы руководителя проекто...Промышленная разработка ПО. Лекция 8. Особенности работы руководителя проекто...
Промышленная разработка ПО. Лекция 8. Особенности работы руководителя проекто...
 
Промышленная разработка ПО. Лекция 7. Особенности работы руководителя проектов
Промышленная разработка ПО. Лекция 7. Особенности работы руководителя проектовПромышленная разработка ПО. Лекция 7. Особенности работы руководителя проектов
Промышленная разработка ПО. Лекция 7. Особенности работы руководителя проектов
 
Пара слов о рисках
Пара слов о рискахПара слов о рисках
Пара слов о рисках
 
Руководитель - это про людей (CIOConf 2013, Барнаул)
Руководитель - это про людей (CIOConf 2013, Барнаул)Руководитель - это про людей (CIOConf 2013, Барнаул)
Руководитель - это про людей (CIOConf 2013, Барнаул)
 
Why you should think twice before giving your programmer to design the UI
Why you should think twice before giving your programmer to design the UIWhy you should think twice before giving your programmer to design the UI
Why you should think twice before giving your programmer to design the UI
 
Как отучить программиста колбасить (Прагматик 2012)
Как отучить программиста колбасить (Прагматик 2012)Как отучить программиста колбасить (Прагматик 2012)
Как отучить программиста колбасить (Прагматик 2012)
 
как воспитать программиста (Выступление в Sibirix)
как воспитать программиста (Выступление в Sibirix)как воспитать программиста (Выступление в Sibirix)
как воспитать программиста (Выступление в Sibirix)
 
Эффективная работа команды: поток
Эффективная работа команды: потокЭффективная работа команды: поток
Эффективная работа команды: поток
 
Как воспитать программиста
Как воспитать программистаКак воспитать программиста
Как воспитать программиста
 

Промышленная разработка ПО. Лекция 3. Особенности работы программиста. Часть 1. Проектирование. Рефакторинг.

  • 1. ПРОМЫШЛЕННАЯ РАЗРАБОТКА ПО Лекция 3. Особенности работы п рограммиста. Часть 1. Проектирование. Рефакторинг.
  • 2. О ЧЁМ БУДЕМ ГОВОРИТЬ СЕГОДНЯ? Основные задачи программиста Специфика крупного проекта Разработка Написание «правильной» Рефакторинг «правильного» кода архитектуры Наиболее ценные навыки программиста Три ступени роста программиста
  • 3. ЗАДАЧИ ПРОГРАММИСТА (ОБЩИЕ) • Разработка архитектуры системы • Написание кода • Исправление дефектов
  • 4. ЗАДАЧИ ПРОГРАММИСТА (С ТОЧКИ ЗРЕНИЯ ЖИЗНЕННОГО ЦИКЛА ПО) • Написание первой версии системы с нуля • Проектирование • Кодирование • Отладка • Поддержка текущей версии • Добавление новых функций • Проектирование • Кодирование • Отладка Диалог выбора шрифта в Windows Vista, сохранившийся со времѐн Windows 3.1
  • 5. ЭТО НУЖНО ЗАПОМНИТЬ! Код, который пишет программист • Может использоваться через десятки лет • Может использоваться множеством других программистов • Может быть изменѐн до неузнаваемости в новой версии • Может быть выброшен уже в следующем релизе
  • 6. ОСНОВНОЙ ПОДХОД ХОРОШЕГО ПРОГРАММИСТА Думать, прежде чем сделать! (но не впадать в бесконечные циклы)
  • 7. ПРОЕКТИРОВАНИЕ Очевидно, что 30 минут мало, чтобы рассказать об архитектуре что-нибудь практически полезное
  • 8. АРХИТЕКТУРА • Архитектура системы – это каркас, который обеспечивает еѐ прочность • Архитектуру необходимо продумывать заранее, до того, как писать код • Чем детальнее проработана архитектура, тем проще потом писать код • Архитектура не вечна, изменения неизбежны
  • 9. КАК ПРОЕКТИРОВАТЬ СИСТЕМУ • Проектирование происходит «сверху вниз» – от крупных частей к мелким • Для многих задач существуют готовые решения в виде паттернов проектирования
  • 10. ПРИНЦИПЫ И ПРИЗНАКИ ПРАВИЛЬНОЙ АРХИТЕКТУРЫ • Слабая связность (Low coupling) • Сильное зацепление (High cohesion) • KISS (keep it short & simple) • DRY (don’t repeat yourself) • Работа на уровне абстракций • Использование готовых решений
  • 11. ПРИНЦИПЫ И ПРИЗНАКИ ПРАВИЛЬНОЙ АРХИТЕКТУРЫ. S.O.L.I.D. • Принцип единственной обязанности • Принцип открытости- закрытости • Принцип подстановки Барбары Лисков • Принцип разделения интерфейсов • Принцип инверсии зависимостей
  • 12. НАИБОЛЕЕ ЧАСТЫЕ ЗАБЛУЖДЕНИЯ ПРИ ПРОЕКТИРОВАНИИ ПРОГРАММНЫХ СИСТЕМ • Проектировать надо только очень большие проекты • Система должна проектироваться так, чтобы предусматривать любое будущее изменение требований • Система проектируется один раз. Отдельно думать над архитектурой новых функций не имеет смысла
  • 13. ЧТО ПОЧИТАТЬ? • Э. Гамма, Р.Хелм, Р.Джонсон, Д.Влиссидес: Приѐмы объектно- ориентированного проектирования. Паттерны проектирования • Г.Буч: Объектно-ориентированный анализ и проектирование (с примерами приложений на C++) • М. Фаулер: Архитектура корпоративных программных систем
  • 14. РЕФАКТОРИНГ Очевидно, что 30 минут мало, чтобы рассказать о рефакторинге что-нибудь практически полезное
  • 15. ОПРЕДЕЛЕНИЕ Рефакторинг: Процесс изменения внутренней структуры программы без изменения еѐ поведения. Это я обязательно спрошу на экзамене
  • 16. ПРЕДПОСЫЛКИ РЕФАКТОРИНГА • Πάντα ῥεῖ καὶ οὐδὲν μένει • Изменения в функциональных или нефункциональных требованиях • «Потеря фокуса» в архитектуре со временем • Возникшие ошибки • Изначально низкое качество кода • Потеря «читабельности» кода Рефакторинг не устраняет эти причины, а «готовит почву» для их устранения!
  • 17. ПРИМЕРЫ РЕФАКТОРИНГА • Переименование метода, класса, пакета • Выделение метода, класса, интерфейса • Замена конкретного класса абстракцией • Замена условного оператора полиморфизмом • Замена наследования делегированием • … Мартин Фаулер, Рефакторинг: улучшение существующего кода
  • 18. РЕФАКТОРИНГ ЭТО НЕ… • …устранение ошибок • …добавление новых функций • …оптимизация производительности • …переписывание кода с нуля Необходимость рефакторинга должна быть чѐтко обоснована. Иначе это не рефакторинг, а перфекционизм. Рефакторинг – это не самоцель!
  • 19. РЕФАКТОРИНГ И МОДУЛЬНОЕ ТЕСТИРОВАНИЕ • Необходимо убедиться, чтобы до и после всѐ было одинаково • Желательно автоматически • Желательно быстро Нормально осуществлять рефакторинг можно только в коде, покрытом Unit- тестами. Мартин Фаулер, Рефакторинг: улучшение существующего кода
  • 20. ЧТО ПОЧИТАТЬ? • М. Фаулер: Рефакторинг. Улучшение существующего кода • http://www.refactoring.com/catalog/index.h tml