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

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

Лекция 3. Особенности работы программиста.

Часть 1. Проектирование. Рефакторинг.

ПРОМЫШЛЕННАЯ РАЗРАБОТКА ПО

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

О ЧЁМ БУДЕМ ГОВОРИТЬ СЕГОДНЯ?

Основные задачи программиста Специфика крупного проекта

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

Написание «правильного» кода Рефакторинг

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

Три ступени роста программиста

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

ЗАДАЧИ ПРОГРАММИСТА (ОБЩИЕ)

• Разработка архитектуры системы

• Написание кода

• Исправление дефектов

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

ЗАДАЧИ ПРОГРАММИСТА (С ТОЧКИ ЗРЕНИЯ ЖИЗНЕННОГО ЦИКЛА ПО)

• Написание первой версии системы с нуля

• Проектирование

• Кодирование

• Отладка

• Поддержка текущей версии

• Добавление новых функций

• Проектирование

• Кодирование

• ОтладкаДиалог выбора шрифта в Windows Vista, сохранившийся со времён Windows 3.1

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

Код, который пишет программист

• Может использоваться через десятки лет

• Может использоваться множеством других программистов

• Может быть изменён до неузнаваемости в новой версии

• Может быть выброшен уже в следующем релизе

ЭТО НУЖНО ЗАПОМНИТЬ!

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

ОСНОВНОЙ ПОДХОД ХОРОШЕГО ПРОГРАММИСТА

Думать, прежде чем сделать!

(но не впадать в бесконечные циклы)

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

ПРОЕКТИРОВАНИЕ

Очевидно, что 30 минут мало, чтобы рассказать об архитектуре что-нибудь практически полезное

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

• Архитектура системы – это каркас, который обеспечивает её прочность

• Архитектуру необходимо продумывать заранее, до того, как писать код

• Чем детальнее проработана архитектура, тем проще потом писать код

• Архитектура не вечна, изменения неизбежны

АРХИТЕКТУРА

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

• Проектирование происходит «сверху вниз» – от крупных частей к мелким

• Для многих задач существуют готовые решения в виде паттернов проектирования

КАК ПРОЕКТИРОВАТЬ СИСТЕМУ

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

• Слабая связность (Low coupling)

• Сильное зацепление (High cohesion)

• KISS (keep it short & simple)

• DRY (don’t repeat yourself)

• Работа на уровне абстракций

• Использование готовых решений

ПРИНЦИПЫ И ПРИЗНАКИ ПРАВИЛЬНОЙ АРХИТЕКТУРЫ

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

• Принцип единственной обязанности

• Принцип открытости-закрытости

• Принцип подстановки Барбары Лисков

• Принцип разделения интерфейсов

• Принцип инверсии зависимостей

ПРИНЦИПЫ И ПРИЗНАКИ ПРАВИЛЬНОЙ АРХИТЕКТУРЫ. S.O.L.I.D.

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

• Проектировать надо только очень большие проекты

• Система должна проектироваться так, чтобы предусматривать любое будущее изменение требований

• Система проектируется один раз. Отдельно думать над архитектурой новых функций не имеет смысла

НАИБОЛЕЕ ЧАСТЫЕ ЗАБЛУЖДЕНИЯ ПРИ ПРОЕКТИРОВАНИИ ПРОГРАММНЫХ СИСТЕМ

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

• Э. Гамма, Р.Хелм, Р.Джонсон, Д.Влиссидес: Приёмы объектно-ориентированного проектирования. Паттерны проектирования

• Г.Буч: Объектно-ориентированный анализ и проектирование (с примерами приложений на C++)

• М. Фаулер: Архитектура корпоративных программных систем

ЧТО ПОЧИТАТЬ?

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

РЕФАКТОРИНГ

Очевидно, что 30 минут мало, чтобы рассказать о рефакторинге что-нибудь практически полезное

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

ОПРЕДЕЛЕНИЕ

Рефакторинг:

Процесс изменения внутренней структуры программы без изменения её поведения.

Это я обязательно спрошу на экзамене

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

• Πάντα ε κα ο δ ν μένειῥ ῖ ὶ ὐ ὲ

• Изменения в функциональных или нефункциональных требованиях

• «Потеря фокуса» в архитектуре со временем

• Возникшие ошибки

• Изначально низкое качество кода

• Потеря «читабельности» кода

ПРЕДПОСЫЛКИ РЕФАКТОРИНГА

Рефакторинг не устраняет эти причины, а «готовит почву» для их устранения!

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

• Переименование метода, класса, пакета

• Выделение метода, класса, интерфейса

• Замена конкретного класса абстракцией

• Замена условного оператора полиморфизмом

• Замена наследования делегированием

• …

ПРИМЕРЫ РЕФАКТОРИНГА

Мартин Фаулер, Рефакторинг: улучшение существующего кода

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

• …устранение ошибок

• …добавление новых функций

• …оптимизация производительности

• …переписывание кода с нуля

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

РЕФАКТОРИНГ ЭТО НЕ…

Рефакторинг – это не самоцель!

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

• Необходимо убедиться, чтобы до и после всё было одинаково

• Желательно автоматически

• Желательно быстро

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

РЕФАКТОРИНГ И МОДУЛЬНОЕ ТЕСТИРОВАНИЕ

Мартин Фаулер, Рефакторинг: улучшение существующего кода

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

• М. Фаулер: Рефакторинг. Улучшение существующего кода

• http://www.refactoring.com/catalog/index.html

ЧТО ПОЧИТАТЬ?

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

ВРЕМЯ ЗАДАВАТЬ ВОПРОСЫ