1. Проектирование
как процесс решения проблем
Владислав Балин
Инвестиционный холдинг «ФИНАМ»
Зам. руководителя IT-департамента по R&D
2. Разработка ПО – это
производство?
Проведем правильную аналогию
3. Разработка устройства
Конструкторское бюро
Испытания и Испытания и 100
Проектирование
правки РКД правки РКД изделий
10 Исправленная 10 Исправленная
РКД
образцов РКД образцов РКД
Фабрика
Производство Производство Производство
опытных опытных установочной
образцов образцов партии
месяц месяц месяц
• Производство – ответственный и затратный этап
• Его не перепутать с проектированием
4. Hardware
People
Готовность
к производству:
Проектирование
Ключевые - Рабочие изделия
требования и непрерывный процесс - Прохождение
характеристики испытаний
постановки и решения - Комплект РКД (для
проблем производства)
• Логистика важна на этапе проектирования
• Развита дисциплина работы с документацией
• Явный фокус на решении проблем
• В ТЗ только ключевые требования и ТТХ
• РКД - не более чем средство
5. Куда девалась фабрика?
Компьютер разработчика ПО
Разработка Отладка Отладка Дистрибутив
Исходный Исправленный Исправленный
код EXE код EXE код
Компиляция и Компиляция и Компиляция и
сборка сборка сборка
минуты минуты минуты
• Наша технология производства – верх совершенства
• Настолько, что мы не склонны его замечать
6. So-ware
People
"Промышленная" Программный код:
Технические разработка
- Проходит тесты
требования
процесс написания - Соответствует
и отладки кода требованиям
• Главный результат – отлаженный код
• «Заказчик никогда не знает, что он хочет»
• Упорная аналогия с конвейерной сборкой
• нет Ватерфолу, да здравствует Канбан!
13. «Добавьте в эту табличку
вот такое поле,
считающееся вот-так».
«Брокерская комиссия
должна рассчитываться
секунда в секунду по всем
клиентам!»
«Необходимо слить ваши
системы в одну, с единой
базой!».
«Надо переписать риск-
сервер!»
14. Решение Проблема
«Добавьте в эту табличку Менеджеру надо знать
вот такое поле, актуальный остаток денег на
считающееся вот-так». счете, чтобы оформить
клиенту выдачу наличных.
«Брокерская комиссия Менеджеру надо знать
должна рассчитываться актуальный остаток денег на
секунда в секунду по всем счете, чтобы оформить
клиентам!» клиенту выдачу наличных.
«Необходимо слить ваши Процесс выдачи наличных –
системы в одну, с единой неудобен, требует
базой!». дублирования операций в
разных системах.
«Надо переписать риск- В риск-сервере есть порядка 10
сервер!» неприятных ошибок, которые
давно пора исправить.
17. …которое
ставит
частные
проблемы
Проблема
пользователя
Функции
системы
Как
Как будет Как будет
отобразятся
выглядеть? работать?
на систему?
Алгоритмы и Структура
Внешний вид
структуры модулей,
UI
данных классов, и пр.
…имеющие множество возможных решений
18. …которые
можно
по
разному
реализовать
Проблема
пользователя
Функции
системы
Как
Как будет Как будет
отобразятся
выглядеть? работать?
на систему?
Алгоритмы и Структура
Внешний вид
структуры модулей,
UI
данных классов, и пр.
? ? Исходный код
? ? ?
19. …но
кое-‐что
ограничивает
пространство
решений
Каковы Как в целом
Проблема
ключевые устроена
пользователя
ТТХ? система?
Базовые
Функции
технологии
системы
и принципы
Как
Как будет Как будет
отобразятся
выглядеть? работать?
на систему?
Алгоритмы и Структура
Внешний вид
структуры модулей,
UI
данных классов, и пр.
? ? Исходный код
? ? ?
20. «Наше С++ приложение
будет мелко нарезано на
изолированные COM-
объекты»
«Исходный код торговых
роботов будут храниться в
базе данных»
«Будем все писать на
Дельфи».
«Необходимо все
переписать на .NET!»
«Необходимо переписать
этот кривой, как турецкая
сабля, код!».
21. Решение Проблема
«Наше С++ приложение Наше приложение должно уметь
будет мелко нарезано на на чем-то скриптоваться. Лень
изолированные COM- думать, пусть это будет Visual
объекты» Basic. И точка.
«Исходный код торговых Я сходил на недельные курсы по
роботов будут храниться в MS SQL, и не могу держать это
базе данных» знание внутри себя.
«Будем все писать на Ничего кроме Delphi не умеем, и
Дельфи». изучать не хотим.
«Необходимо все Нам очень не нравится Дельфи,
переписать на .NET!» изучения которого надо
избежать.
«Необходимо переписать Этот код не мой. Я ничего в нем
этот кривой, как турецкая не понимаю, и панически боюсь
сабля, код!». его.
25. «Чеклист
детектива»
• Выяснить
проблему
• Определить
критерии
успешного
решения
• Рассмотреть
несколько
«версий»
(вариантов
решения)
• Отработать
все
версии,
собирая
факты
и
«улики»
• «Отбросьте
невозможное,
и
останется
истина».
ШХ.
26. Проектирование
супер-‐ЭВМ
Отбор кандидатов
Вариант 1 Вариант 2 Вариант 3 Вариант 4 Вариант 5
Глубокая проработка
Эльбрус-2 БЭСМ-10
Детальное проектирование
Эльбрус-2
27. Цикл
«гипотеза-‐эксперимент»
• Умение
выдвигать
разумные
гипотезы,
и
проверять
их
логически
• Умение
ставить
эксперименты,
и
делать
из
них
правильные
выводы
• Необходимо
умение
отделять:
– Факты
от
предположений
– Проблемы
от
решений
– Цели
от
задач
28. Группа
эффективнее
одиночки
в
выработке
и
проверке
гипотез
Группа
должна
быть
организована,
чтобы
быть
эффективнее
29. Сессия
проектирования
• Собираем
проектную
группу
• Вводная:
– Проблема
пользователя
– Очевидные
варианты
решений
– «Что
нам
мешает
сделать
это
прямо
сейчас?»
• Дополняем
список
вариантов
решений
• Составляем
список
открытых
проблем
– Что
мы
не
знаем,
и
должны
узнать
30. Список
открытых
проблем
• Главный
предмет
совещания
• Виден
всей
группе
на
маркерной
доске
• Всегда
актуален
• Должен
меняться
со
временем
– Количество
проблем
высшего
порядка
должно
уменьшаться,
сменяясь
частными
31. Правила
проверки
решений
• «Это
неправильно»
«Как
ваше
решение
будет
работать
вот
в
такой
ситуации?»
• Давление
на
авторитеты
Ссылки
на
конкретный
опыт
с
примерами
• Убеждения
В
инженерии
все
можно
обосновать
логически
• Это
будет
так!
«В
закон
Ома
верю.
Все
остальное
надо
проверять»
32. Хорошо
известные
вам
вещи..
– Прототипы
– Дизайн-‐ревью
– Код-‐ревью
– Тесты
…являются не «практиками», а
средствами проверки «гипотез»
33. «-‐
Ты
должен
мне
поверить!
-‐
Ты
кто
-‐
Иисус
Христос,
чтобы
тебе
верить?»
Главный
А.
М.
Степанов.
программист
первого
советского
комплекса
ПВО.
34. Роль
руководителя
• Организует
и
ведет
совещание
• Поддерживает
список
открытых
проблем
• Отвечает
за
логику
и
формат,
разрешая
конфликты,
оставляя
креатив
подчиненным
• Направляет
процесс,
выдавая
задания
(схема
«научного
семинара»)
• Вникает
в
проблемы,
которые
не
меняются
35. Для
одного
программиста
• Периодически
подходить
к
программисту
• Беседовать
о
текущих
проблемах
• Отмечать
те,
что
не
меняются
• Вникать
только
в
них,
и
разбираться,
почему:
– Человеку
может
быть
нужна
помощь
– Выдумывать
проблемы
тяжело