Промышленная разработка ПО. Лекция 3. Особенности...

21
Лекция 3. Особенности работы программиста. Часть 1. Проектирование. Рефакторинг. ПРОМЫШЛЕННАЯ РАЗРАБОТКА ПО

description

Третья лекция спецкурса по промышленной разработке ПО

Transcript of Промышленная разработка ПО. Лекция 3. Особенности...

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. Проектирование. Рефакторинг.

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