Gaperton - Software People 2012
-
Upload
- -
Category
Technology
-
view
1.179 -
download
1
description
Transcript of Gaperton - Software People 2012
Проектирование
Владислав Балин Инвестиционный холдинг «ФИНАМ» Зам. руководителя IT-департамента по R&D
как процесс решения проблем
Разработка ПО – это производство?
Проведем правильную аналогию
Разработка устройства
Фабрика
Конструкторское бюро
Проектирование Испытания и правки РКД
Испытания и правки РКД
Производство опытных образцов
Производство опытных образцов
Производство установочной
партии
РКД ИсправленнаяРКД
10образцов
10образцов
ИсправленнаяРКД
100изделий
месяц месяц месяц
• Производство – ответственный и затратный этап • Его не перепутать с проектированием
Hardware People
Проектирование
непрерывный процесспостановки и решения
проблем
Ключевые требования ихарактеристики
Готовностьк производству:
- Рабочие изделия- Прохождение испытаний- Комплект РКД (для производства)
• Логистика важна на этапе проектирования • Развита дисциплина работы с документацией • Явный фокус на решении проблем
• В ТЗ только ключевые требования и ТТХ • РКД - не более чем средство
Куда девалась фабрика?
• Наша технология производства – верх совершенства • Настолько, что мы не склонны его замечать
Компьютер разработчика ПО
Разработка Отладка Отладка
Компиляция и сборка
Компиляция и сборка
Компиляция и сборка
Исходныйкод
Исправленныйкод EXEEXE
Исправленныйкод
Дистрибутив
минуты минуты минуты
So-ware People
"Промышленная" разработка
процесс написанияи отладки кода
Техническиетребования
Программный код:
- Проходит тесты- Соответствует требованиям
• Главный результат – отлаженный код • «Заказчик никогда не знает, что он хочет» • Упорная аналогия с конвейерной сборкой
• нет Ватерфолу, да здравствует Канбан!
Разработка – непрерывный процесс проектирования
Проектирование – процесс решения проблем
Проблема имеет много решений
?
Проблема
Пространстворешений
Так?
Ага!
…которые ставят новые проблемы
?
Проблема
Пространстворешений
Так?
Ой!
?!
…и мы перебираем решения
?
Проблема
Пространстворешений
Так?
Или так?
Ой!
?!
?
…чтобы найти оптимальное.
?
Проблема
Пространстворешений
Так?
Или так?
А может,вообще вот-так?
Теплее!
Ой!
?!
?Э-э-э...
«Требования меняются» «Заказчик не знает, что он хочет»
А так-‐ли хорошо люди умеют разделять проблемы, и их
решения?
«Добавьте в эту табличку вот такое поле, считающееся вот-так».
«Брокерская комиссия должна рассчитываться секунда в секунду по всем клиентам!» «Необходимо слить ваши системы в одну, с единой базой!».
«Надо переписать риск-сервер!»
Решение Проблема
«Добавьте в эту табличку вот такое поле, считающееся вот-так».
Менеджеру надо знать актуальный остаток денег на счете, чтобы оформить клиенту выдачу наличных.
«Брокерская комиссия должна рассчитываться секунда в секунду по всем клиентам!»
Менеджеру надо знать актуальный остаток денег на счете, чтобы оформить клиенту выдачу наличных.
«Необходимо слить ваши системы в одну, с единой базой!».
Процесс выдачи наличных – неудобен, требует дублирования операций в разных системах.
«Надо переписать риск-сервер!»
В риск-сервере есть порядка 10 неприятных ошибок, которые давно пора исправить.
Пользователь прекрасно осознает свои проблемы.
Но почему-‐то не считает нужным о них говорить.
«Требования» – решение проблемы
Проблемапользователя
Функциисистемы
…которое ставит частные проблемы Проблема
пользователя
Функциисистемы
Как отобразятсяна систему?
Структура модулей,
классов, и пр.
Как будет работать?
Как будет выглядеть?
Алгоритмы и структуры данных
Внешний вид UI
…имеющие множество возможных решений
…которые можно по разному реализовать
Проблемапользователя
Функциисистемы
Как отобразятсяна систему?
Структура модулей,
классов, и пр.
Как будет работать?
Как будет выглядеть?
Алгоритмы и структуры данных
Внешний вид UI
Исходный код??? ? ?
…но кое-‐что ограничивает пространство решений
Проблемапользователя
Функциисистемы
Как отобразятсяна систему?
Структура модулей,
классов, и пр.
Как будет работать?
Как будет выглядеть?
Алгоритмы и структуры данных
Внешний вид UI
Исходный код
Как в целом устроена система?
??? ? ?
Базовые технологиии принципы
Каковы ключевые ТТХ?
«Наше С++ приложение будет мелко нарезано на изолированные COM-объекты» «Исходный код торговых роботов будут храниться в базе данных» «Будем все писать на Дельфи». «Необходимо все переписать на .NET!»
«Необходимо переписать этот кривой, как турецкая сабля, код!».
Решение Проблема «Наше С++ приложение будет мелко нарезано на изолированные COM-объекты»
Наше приложение должно уметь на чем-то скриптоваться. Лень думать, пусть это будет Visual Basic. И точка.
«Исходный код торговых роботов будут храниться в базе данных»
Я сходил на недельные курсы по MS SQL, и не могу держать это знание внутри себя.
«Будем все писать на Дельфи».
Ничего кроме Delphi не умеем, и изучать не хотим.
«Необходимо все переписать на .NET!»
Нам очень не нравится Дельфи, изучения которого надо избежать.
«Необходимо переписать этот кривой, как турецкая сабля, код!».
Этот код не мой. Я ничего в нем не понимаю, и панически боюсь его.
Разработчик прекрасно осознает свои проблемы
Но почему-‐то не считает нужным о них говорить.
Поэтому, мы выбираем решения наугад!
И да поможет нам Ag:)e.
Нам поможет Методология Х?
Или, может, стоит осмысленно выбирать решения?
«Чеклист детектива» • Выяснить проблему • Определить критерии успешного решения • Рассмотреть несколько «версий» (вариантов решения)
• Отработать все версии, собирая факты и «улики»
• «Отбросьте невозможное, и останется истина». ШХ.
Проектирование супер-‐ЭВМ
Глубокая проработка
Вариант 1 Вариант 2 Вариант 3 Вариант 4 Вариант 5
Эльбрус-2 БЭСМ-10
Отбор кандидатов
Детальное проектирование
Эльбрус-2
Цикл «гипотеза-‐эксперимент» • Умение выдвигать разумные гипотезы, и проверять их логически
• Умение ставить эксперименты, и делать из них правильные выводы
• Необходимо умение отделять: – Факты от предположений – Проблемы от решений – Цели от задач
Группа эффективнее одиночки в выработке и проверке гипотез
Группа должна быть организована, чтобы быть эффективнее
Сессия проектирования • Собираем проектную группу • Вводная:
– Проблема пользователя – Очевидные варианты решений – «Что нам мешает сделать это прямо сейчас?»
• Дополняем список вариантов решений • Составляем список открытых проблем
– Что мы не знаем, и должны узнать
Список открытых проблем • Главный предмет совещания • Виден всей группе на маркерной доске • Всегда актуален • Должен меняться со временем
– Количество проблем высшего порядка должно уменьшаться, сменяясь частными
Правила проверки решений • «Это неправильно» «Как ваше решение будет работать вот в такой ситуации?»
• Давление на авторитеты Ссылки на конкретный опыт с примерами
• Убеждения В инженерии все можно обосновать логически
• Это будет так! «В закон Ома верю. Все остальное надо проверять»
Хорошо известные вам вещи..
– Прототипы – Дизайн-‐ревью – Код-‐ревью – Тесты
…являются не «практиками», а средствами проверки «гипотез»
«-‐ Ты должен мне поверить! -‐ Ты кто -‐ Иисус Христос, чтобы
тебе верить?» А. М. Степанов. Главный
программист первого советского комплекса ПВО.
Роль руководителя • Организует и ведет совещание • Поддерживает список открытых проблем • Отвечает за логику и формат, разрешая конфликты, оставляя креатив подчиненным
• Направляет процесс, выдавая задания (схема «научного семинара»)
• Вникает в проблемы, которые не меняются
Для одного программиста • Периодически подходить к программисту
• Беседовать о текущих проблемах • Отмечать те, что не меняются • Вникать только в них, и разбираться, почему: – Человеку может быть нужна помощь – Выдумывать проблемы тяжело
Спасибо за внимание!
Владислав Балин hrp://gaperton.livejournal.com