SlideShare une entreprise Scribd logo
1  sur  48
Télécharger pour lire hors ligne
СОВРЕМЕННЫЕ
ПОДХОДЫ К РАЗРАБОТКЕ
ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
ХАРЬКОВСКИЙ НАЦИОНАЛЬНЫЙ УНИВЕРСИТЕТ ИМЕНИ В. Н. КАРАЗИНА
ФАКУЛЬТЕТ КОМПЬЮТЕРНЫХ НАУК
КАФ. ИСКУССТВЕННОГО ИНТЕЛЛЕКТА И ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
К.Ф.М.Н., ДОЦ. КАФ. ИСКУССТВЕННОГО ИНТЕЛЛЕКТА И ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
ГАХОВ АНДРЕЙ ВЛАДИМИРОВИЧ
ПРАКТИКИ РАЗРАБОТКИ
Software Development Methods
ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
Каскадная модель
Waterfall model
Первое формальное описание «модели
водопада» было дано в статье У. У.
Ройса (Winston W. Royce) 1970 года, в
которой он представил эту модель и
описал ее недостатки.
Принципы модели
модель состоит из набора фаз.
переход от одной фазы разработки к
другой происходит только после
полного и успешного завершения
предыдущей фазы.
переходов назад либо вперёд или
перекрытия фаз — не происходит.
Основные фазы
Определение требований.
Проектирование.
Реализация.
Верификация (тестирование и отладка).
Инсталляция и поддержка.
Существует множество модификаций данной модели.
Критика модели
Недостаточная гибкость.
Самоцель - формальное управление
проектом в ущерб срокам, стоимости
и качеству.
plan–do–check–act
Iterative model
Итеративная модель
Основные принципы
Программная система разделяется на
этапы (increments).
На каждом этапе каждая порция
функциональности продукта
проходит все фазы от разработки
требований до доставки (deployment).
Основные фазы
Исследование
Разработка.
На данной фазе оценивается масштаб проекта,
функциональные и нефункциональные требования, риски
и происходит оценка работы.
На данной фазе разрабатывается архитектура с учетов
уменьшения рисков и нефункциональных требований.
Основные фазы
Реализация
Переход.
На данной фазе пишется код и реализуются
архитектурные решение. Включаются стадии анализа,
проектирования, реализации и тестирования
функциональных требований.
На данной фазе система передается в промышленное
использование.
Основные фазы
Каждая фаза может быть разделена на 1 или
более итераций, которые скорее ограничены
временем, а не функциями продукта.
Архитекторы и аналитики обычно работают
на 1 шаг впереди, чем разработчики.
Сравнение с моделью водопада
В моделе водопада бизнес-ценность
появляется один раз и в самом конце
разработки проекта.
В итерационной модели возможна
обратная связь и коррекция процесса.
Agile Software Development
В феврале 2001 г. в штате Юта, США
был выпущен «Agile Manifesto» как
альтернатива управляемым
документацией, «тяжеловесным»
практикам разработки ПО.
Agile Manifesto
Люди и взаимодействие важнее
процессов и инструментов.
Работающий продукт важнее
исчерпыващей документации.
Сотрудничество с заказчиком важнее
согласований условий контракта.
Готовность к изменениям важнее
следования первоначальному плану.
Основные принципы
Найвысший приоритет –
удовлетворение потребностей
заказчика благодаря регулярной и
ранней поставке ценного ПО.
Изменение требований
приветствуется, даже на поздних
стадиях разработки.
Основные принципы
Agile-процессы позволяют
использовать изменения для
обеспечения заказчику
конкурентного преимущества.
Работающий продукт следует
выпускать как можно чаще, с
периодичностью от 2х недель до 2х
месяцев.
Основные принципы
На протяжении всего проекта
разработчики и представители бизнеса
должны ежедневно работать вместе.
Над проектом должны работать
мотивированные профессионалы.
Чтобы работа была сделана, создайте
условия, обеспечьте поддержку и
полностью доверьтесь им.
Основные принципы
Непосредственное общение является
наиболее практичным и эффективным
способом обмена информацией как с
самой командой, так и внутри команды.
Работающий продукт – основной
показатель прогресса.
Основные принципы
Инвесторы, разработчики и
пользователи должны иметь
возможность поддерживать
постоянный ритм бесконечно.
Постоянное внимание к техническому
совершенству и качеству
проектирования повышает гибкость
проекта.
Основные принципы
Простота – искусство минимизации
лишней работы – крайне необходима.
Самые лучшие требования,
архитектурные и технические
решения рождаются у само-
организующихся комманд.
Основные принципы
Команда должна систематически
анализировать возможные способы
улучшения эффективности и
соотвественно корректировать стиль
своей работы.
Методология Scrum
Scrum Methodology
Scrum
Спринт (Sprint).
Скрам-мастер (Scrum Master).
Жестко фиксированные и небольшие по времени итерации.
Возможности ПО к реализации на очередном спринте определяются в начале
спринта на этапе планирования и не могут изменяться на всем его
протяжении. При этом строго фиксированная небольшая длительность придает
процессу разработки предсказуемость и гибкость.
Проводит совещания (Scrum Meeting) и следит за соблюдением всех принципов
скрам, разрешает противоречия и защищает команду от отвлекающих
факторов.
Scrum
Владелец продукта (Product Owner).
Скрам-команда (Scrum Team).
Представляет интересы конечных пользователей и других заинтересованных
сторон.
Команда разработчиков проекта, состоящая из специалистов разных профилей:
тестировщиков, архитекторов, аналитиков, программистов и т.д. Размер
команды в идеале 5-9 человек. Команда является единственным полностью
вовлеченным в процесс участником и отвечает за результат как единое целое.
Никто, кроме команды не может вмешиваться в процесс разработки на
протяжении спринта.
Экстремальное программирование
XP Programming
Подход экстремального
программирования создал Кент Бек
(Kent Beck) и описал в своей книге
«Extreme Programming Explained -
Embrace Change» в 1999 году.
Короткий цикл обратной связи
Разработка через тестирование.
Игра в планирование.
Основное внимание уделяется тестированию модулей (unit testing) и
функциональному тестированию. Тесты позволяют быть уверенному в
правильности кода, понять назначение того или иного фрагмента кода, логику
работы. Наличие тестов являются неободимым условием рефакторинга.
Приоритетным является подход Test Driven Development (TDD, разработка через
тестирование) - сначала пишется тест, а потом реализуется логика.
Используются бумажные карточки с пожеланиями заказчика (stories) и
примерный план работы по выпуску следующих версий продукта.
Необходимым условием является разделение в принятии решений: заказчик
принимает бизнес-решения, команда разработчиков – технические решения.
Короткий цикл обратной связи
Заказчик всегда рядом.
Парное программирование.
Конечный пользователь программного продукта («заказчик») должен быть всё
время на связи и доступен для вопросов.
При парном программировании исходный код создаётся парами людей,
программирующих одну задачу, сидя за одним рабочим местом. Один
программист («driver») управляет компьютером и думает над кодированием в
деталях. Другой программист («navigator») сосредоточен на картине в целом и
непрерывно просматривает код, производимый первым программистом.
Обычно, каждые полчаса они меняются ролями. Как правило, такие пары не
фиксированы и могут меняться при решении разных задач.
Непрерывный процесс
Непрерывная интеграция.
Рефакторинг.
Интеграция должна выполнятся несколько раз в день после успешного
выполнения всех тестов.
Реорганизация кода (рефакторинг) – это процесс изменения внутренней
структуры программы, не затрагивающий её внешнего поведения и имеющий
целью облегчить понимание её работы.
Частые небольшие релизы.
Готовые версии продукта (release) должны поступать в эксплуатацию как
можно чаще. Каждая версия должна нести полезную бизнес-составляющую.
Понимание, разделяемое всеми
Простота дизайна.
В процессе работы условия задачи могут неоднократно измениться,
следовательно нет смысла проектировать заблаговременно полностью.
Проектирование должно выполнятся постоянно и небольшими этапами,
учитывая меняющиеся требования. На каждом этапе выбирается наиболее
простой дизайн и меняется при изменении требований на следующих этапах.
Метафора системы.
Метафора системы являтся аналогом архитектуры – представления о
компонентах системы и их взаимодействии. Выбор хорошей метафоры
облегчает понимание системы разработчиками.
Понимание, разделяемое всеми
Коллективное владение кодом.
Стандарты кодирования.
Каждый член команды несет отвественность за весь код. Действует правило:
«Испортил - исправь». Парное программирование и наличие хорошего набора
тестов, позволяет не беспокоиться при изменениях любого участка кода.
Команда должна сформировать набор правил и все члены команды должны
их соблюдать. Не нужно тратить много времени на первоначальный набор
правил – сделайте их простыми и усложняйте только при необходимости.
Благосостояние программиста
Без сверхурочных.
40-часовая рабочая неделя программиста. Необходимость в сверхурочной
работе означает неправильное планирование. Принята концепция, что задание
выполняется лучше и более творчески только хорошо отдохнувшими людьми.
Бережливая разработка
Lean Software Development
Принципы
Усиленное изучение.
Решай как можно позже.
Процесс разработки – это непрерывный процесс изучения. Вместо добавления
большего количества документации или более детального планирования
разные идеи должны быть опробованы в коде! Процесс изучения ускоряется
за счет коротких итераций (каждая из которых сопровождается рефакторингом
и интеграционными тестами). Благодаря коротким периодам заказчик и
разработчики лучше понимают как потребности пользователей, так и
особенности предметной области. Обязательны частые контакты с заказчиком.
Лучшие результаты получаются за счет подхода, основанного на разработке
продукта по опциям. Принимаем решение с задержкой до тех пор, пока новая
опция не будет основываться на реальных фактах, а не предположениях. Это
не означает отсутствие планирования!
Принципы
Доставляй как можно быстрее.
Доверие к команде и мотивация.
В современном мире выживает не большие, а быстрые. Чем быстрее продукт
будет доставлен без критических ошибок, тем быстрее будут получены отзывы
пользователей, а значит факты для следующей итерации.
Отлично работает стратегия «just-in-time», заключающаяся в определении
необходимого результата и предоставлении возможности команде
самоорганизоваться и выделить задачи, необходимые для достижения
результата.
Со статистической точки зрения люди – это ресурсы, но в разработке ПО это
совсем не так. Людям необходима мотивация. Разработчик должен иметь
доступ к заказчику, а Team Lead должен быть вовлечен в поддержку
пользователей в сложных ситуациях.
Find good people and let them do their job.
Принципы
Целостность видения.
Интегрирование.
Современная программная система это не просто сумма своих частей, это
продукт их взаимодействия. Важным является стандартизация процессов
разработки и разделение всем разработчиками принципов бережливости.
Think big, act small, fail fast; learn rapidly!
Заказчик получает целостный продукт, отдельные компоненты системы
работают хорошо друг с другом как единое целое. Целостность достигается
изучением предметной области и решением задачи в одно и тоже время (а не
последовательно).
Главным инструментом сохранения целостности системы выступает
рефакторинг (и тестирование).
ТЕХНИКИ РАЗРАБОТКИ
Software Development techniques
TDD
Test-Driven Development (TDD) —
техника разработки ПО, которая
основывается на повторении очень
коротких циклов разработки: тест ->
код -> рефакторинг.
Тест — это процедура, позволяющая
подтвердить либо опровергнуть
работоспособность кода.
Test-Driven Development
Создание теста.
Запук всех тестов: тесты не проходят.
Добавление каждой новой функциональности начинается с написания тестов.
Для успешного написания тестов необходимо понимать требования,
рассмотрев все возможные сценарии.
После написания новых тестов необходимо убедиться, что они не проходят –
иначе тест написан не верно или необходимая функциональность уже
присутствует в системе.
Test-Driven Development
Написание кода.
Запук всех тестов: тесты проходят.
Необходимая функциональность реализуется в коде, причем главной целью
является прохождение теста. Не следует добавлять лишней функциональности,
которая не покрыта тестом.
Если тесты проходят, следовательно разработанный код удовлетворяет всем
требованиям. Пришло время для улучшения кода.
Test-Driven Development
Рефакторинг.
Повторение цикла.
Когда функционально код готов, необходимо его «подчистить» - внести
изменения во внутреннюю структуру (не затрагивая функциональность, т.е. ее
внешнюю структуру) с целью облегчить понимание, улучшить дизайн и
устранить возможное дублирование кода.
Указанный цикл повторяется снова и снова, реализуя новую функциональность
небольшими шагами – 1-10 изменений между запусками тестов. Если новый
код не удовлетворяет новым тестам или старые тесты перестают проходить, то
необходимо вернуться к отладке.
BDD
Behavior-Driven development (BDD) -
процесс разработки ПО, основанный на
TDD, но использующий также идеи
дизайна на основе предметной области
(DDD) с целью разработки ПО
«имеющего смысл».
Behavior-Driven Development
User story (пользовательские истории).
В BDD пользовательские истории выступают в качестве основных документов,
описывающих поведение системы, над которым совместно работают
разработчики и бизнес-аналитики. Каждая user story должна иметь
определенную структуру.
Спецификация - Ubiquitous Language
Ubiquitous Language (общеупотребительный язык) - термин, использованный
Эриком Эвансом (Eric Evans, создатель Domain Driven Design) для описания
языка, одинаково понятного разработчикам, так и пользователям .
Инструментальная поддержка
Важное значение в BDD (как и в TDD) отдается наличию инструментов,
поддерживающих автоматизацию спецификаций и их проверку (JBehave,
Cucumber и др.).
User story
Title (название).
Каждая история должна иметь простое и понятное название.
Narrative (поветствование, содержание).
Краткое описание, дающее ответы на следующие вопросы:
Who? – Кто является заинтересованной стороной в данной истории?
Which? – Какой эффект заинтересованная сторона ожидает получит?
What? – Что за бизнес-ценность будет получена от данного эффекта?
Acceptance criteria (критерии приемки).
Описание сценариев приемки для каждого случая повествования в формате:
• Начальные условия (считающиеся выполнеными в начале сценария).
• Определение события, которое начинает выполнение сценария.
• Определение ожидаемого результата.
User story - пример
As a Scrum Master I want to see Lead/Cycle time progress.
As a Scrum Master
I want to see Lead/Cycle time progress
So that I know whether we are improving our development process or not.
Scenario #1
Given Reports section in project and Bug Tracking practice is disabled
When I navigate to Lead and Cycle Time Report
Then I see Lead Time chart
And chart contains 1 line for stories
Scenario #2
Given Reports section in project and Bug Tracking practice is disabled
When I navigate to Lead and Cycle Time Report
Then I see Cycle Time
And chart contains 1 line for stories
TDD vs BDD
BDD – это «правильное» TDD.
BDD делает упор на то, какой система должна быть, в то время как TDD
больше озабочено тем, как реализовать систему. Очень часто в TDD
разработчики настолько увлечены тем, «как» сделать тест, забывая «для чего»
необходимо его сделать, отрываясь от проблем и задач предметной области.
BDD понятно не только разработчикам.
Одной из целей BDD является преодоление разрыва между разработчиками,
тестировщиками и пользователями. Использование user story существенно
облегчает понимание.

Contenu connexe

Tendances

Ответственность за качество в разных ИТ-проектах
Ответственность за качество в разных ИТ-проектахОтветственность за качество в разных ИТ-проектах
Ответственность за качество в разных ИТ-проектахMaxim Tsepkov
 
Системный анализ в процессе разработки ПО
Системный анализ в процессе разработки ПОСистемный анализ в процессе разработки ПО
Системный анализ в процессе разработки ПОMaxim Galimov
 
Игорь Лужанский “Потери в процессе разработки ПО”
Игорь Лужанский “Потери в процессе разработки ПО”Игорь Лужанский “Потери в процессе разработки ПО”
Игорь Лужанский “Потери в процессе разработки ПО”Agile Base Camp
 
Развитие управления проектами и критериев качества в ИТ
Развитие управления проектами и критериев качества в ИТРазвитие управления проектами и критериев качества в ИТ
Развитие управления проектами и критериев качества в ИТCUSTIS
 
Управление проектами по разработке в стиле Agile или Waterfall, чья доска круче?
Управление проектами по разработке в стиле Agile или Waterfall, чья доска круче?Управление проектами по разработке в стиле Agile или Waterfall, чья доска круче?
Управление проектами по разработке в стиле Agile или Waterfall, чья доска круче?SQALab
 
Модуль 15. Лекция 59-60.
Модуль 15. Лекция 59-60. Модуль 15. Лекция 59-60.
Модуль 15. Лекция 59-60. Yana Brodetski
 
Слайдкаст. Stratoplan Kharkov. Методологический паззл.
Слайдкаст. Stratoplan Kharkov. Методологический паззл.Слайдкаст. Stratoplan Kharkov. Методологический паззл.
Слайдкаст. Stratoplan Kharkov. Методологический паззл.Sergiy Povolyashko
 
Путь тестировщика: Расту или деградирую?
Путь тестировщика: Расту или деградирую?Путь тестировщика: Расту или деградирую?
Путь тестировщика: Расту или деградирую?SQALab
 
Управление изменениями в сложных информационных системах
 Управление изменениями в сложных информационных системах  Управление изменениями в сложных информационных системах
Управление изменениями в сложных информационных системах Valery Bychkov
 
САПР и ГИС
САПР и ГИССАПР и ГИС
САПР и ГИСSoftline
 
Построение процесса безопасной разработки
Построение процесса безопасной разработкиПостроение процесса безопасной разработки
Построение процесса безопасной разработкиPositive Development User Group
 
Проектирование программных систем. Занятие 4
Проектирование программных систем. Занятие 4Проектирование программных систем. Занятие 4
Проектирование программных систем. Занятие 4Dima Dzuba
 
Как совместить лучшее из водопадных и аджайл подходов в ИТ проектах
Как совместить лучшее из водопадных и аджайл подходов в ИТ проектахКак совместить лучшее из водопадных и аджайл подходов в ИТ проектах
Как совместить лучшее из водопадных и аджайл подходов в ИТ проектахDanil Dintsis, Ph. D., PgMP
 
Безопасная разработка для руководителей
Безопасная разработка для руководителейБезопасная разработка для руководителей
Безопасная разработка для руководителейPositive Development User Group
 
Software craftsmanship 8
Software craftsmanship 8Software craftsmanship 8
Software craftsmanship 8Pavel Veinik
 
Andrey Petrov методология P D P, часть 1, цели вместо кейсов
Andrey Petrov методология P D P, часть 1, цели вместо кейсовAndrey Petrov методология P D P, часть 1, цели вместо кейсов
Andrey Petrov методология P D P, часть 1, цели вместо кейсовrit2010
 
Восьмая лекция курса "Введение в системную инженерию"
Восьмая лекция курса "Введение в системную инженерию"Восьмая лекция курса "Введение в системную инженерию"
Восьмая лекция курса "Введение в системную инженерию"Anatoly Levenchuk
 

Tendances (20)

Ответственность за качество в разных ИТ-проектах
Ответственность за качество в разных ИТ-проектахОтветственность за качество в разных ИТ-проектах
Ответственность за качество в разных ИТ-проектах
 
Quality assurance
Quality assuranceQuality assurance
Quality assurance
 
Системный анализ в процессе разработки ПО
Системный анализ в процессе разработки ПОСистемный анализ в процессе разработки ПО
Системный анализ в процессе разработки ПО
 
Игорь Лужанский “Потери в процессе разработки ПО”
Игорь Лужанский “Потери в процессе разработки ПО”Игорь Лужанский “Потери в процессе разработки ПО”
Игорь Лужанский “Потери в процессе разработки ПО”
 
Развитие управления проектами и критериев качества в ИТ
Развитие управления проектами и критериев качества в ИТРазвитие управления проектами и критериев качества в ИТ
Развитие управления проектами и критериев качества в ИТ
 
SEMAT Agile Kitchen
SEMAT Agile KitchenSEMAT Agile Kitchen
SEMAT Agile Kitchen
 
Управление проектами по разработке в стиле Agile или Waterfall, чья доска круче?
Управление проектами по разработке в стиле Agile или Waterfall, чья доска круче?Управление проектами по разработке в стиле Agile или Waterfall, чья доска круче?
Управление проектами по разработке в стиле Agile или Waterfall, чья доска круче?
 
Модуль 15. Лекция 59-60.
Модуль 15. Лекция 59-60. Модуль 15. Лекция 59-60.
Модуль 15. Лекция 59-60.
 
Слайдкаст. Stratoplan Kharkov. Методологический паззл.
Слайдкаст. Stratoplan Kharkov. Методологический паззл.Слайдкаст. Stratoplan Kharkov. Методологический паззл.
Слайдкаст. Stratoplan Kharkov. Методологический паззл.
 
Путь тестировщика: Расту или деградирую?
Путь тестировщика: Расту или деградирую?Путь тестировщика: Расту или деградирую?
Путь тестировщика: Расту или деградирую?
 
Scrum practic
Scrum practicScrum practic
Scrum practic
 
Управление изменениями в сложных информационных системах
 Управление изменениями в сложных информационных системах  Управление изменениями в сложных информационных системах
Управление изменениями в сложных информационных системах
 
САПР и ГИС
САПР и ГИССАПР и ГИС
САПР и ГИС
 
Построение процесса безопасной разработки
Построение процесса безопасной разработкиПостроение процесса безопасной разработки
Построение процесса безопасной разработки
 
Проектирование программных систем. Занятие 4
Проектирование программных систем. Занятие 4Проектирование программных систем. Занятие 4
Проектирование программных систем. Занятие 4
 
Как совместить лучшее из водопадных и аджайл подходов в ИТ проектах
Как совместить лучшее из водопадных и аджайл подходов в ИТ проектахКак совместить лучшее из водопадных и аджайл подходов в ИТ проектах
Как совместить лучшее из водопадных и аджайл подходов в ИТ проектах
 
Безопасная разработка для руководителей
Безопасная разработка для руководителейБезопасная разработка для руководителей
Безопасная разработка для руководителей
 
Software craftsmanship 8
Software craftsmanship 8Software craftsmanship 8
Software craftsmanship 8
 
Andrey Petrov методология P D P, часть 1, цели вместо кейсов
Andrey Petrov методология P D P, часть 1, цели вместо кейсовAndrey Petrov методология P D P, часть 1, цели вместо кейсов
Andrey Petrov методология P D P, часть 1, цели вместо кейсов
 
Восьмая лекция курса "Введение в системную инженерию"
Восьмая лекция курса "Введение в системную инженерию"Восьмая лекция курса "Введение в системную инженерию"
Восьмая лекция курса "Введение в системную инженерию"
 

En vedette

гибкая методология разработки по
гибкая методология разработки погибкая методология разработки по
гибкая методология разработки поpoverhnost
 
Гибкая разработка ПО
Гибкая разработка ПОГибкая разработка ПО
Гибкая разработка ПОpoverhnost
 
Доверие и эффективность
Доверие и эффективностьДоверие и эффективность
Доверие и эффективностьAndrey Pletenev
 
2013.08.24 Антон Киселёв семинар "Agile (Scrum)"
2013.08.24 Антон Киселёв семинар "Agile (Scrum)"2013.08.24 Антон Киселёв семинар "Agile (Scrum)"
2013.08.24 Антон Киселёв семинар "Agile (Scrum)"Alexey Fedorov
 
Истории Пользователей (User Stories) - семинар на AgileUkraine 7, 2009-04-25
Истории Пользователей (User Stories) - семинар на AgileUkraine 7, 2009-04-25Истории Пользователей (User Stories) - семинар на AgileUkraine 7, 2009-04-25
Истории Пользователей (User Stories) - семинар на AgileUkraine 7, 2009-04-25Timofey (Tim) Yevgrashyn
 
PR Advanced 2015: Content Creation & Viral Marketing
PR Advanced 2015: Content Creation & Viral MarketingPR Advanced 2015: Content Creation & Viral Marketing
PR Advanced 2015: Content Creation & Viral MarketingBrianna Vieira
 
Use cases на практике
Use cases на практикеUse cases на практике
Use cases на практикеSoftline
 
Разработка сценариев использования (use cases)
Разработка сценариев использования (use cases)Разработка сценариев использования (use cases)
Разработка сценариев использования (use cases)Dmitry Strunkin
 

En vedette (11)

Lean Software Development
Lean Software DevelopmentLean Software Development
Lean Software Development
 
гибкая методология разработки по
гибкая методология разработки погибкая методология разработки по
гибкая методология разработки по
 
BSc(Eng)
BSc(Eng)BSc(Eng)
BSc(Eng)
 
Гибкая разработка ПО
Гибкая разработка ПОГибкая разработка ПО
Гибкая разработка ПО
 
Доверие и эффективность
Доверие и эффективностьДоверие и эффективность
Доверие и эффективность
 
2013.08.24 Антон Киселёв семинар "Agile (Scrum)"
2013.08.24 Антон Киселёв семинар "Agile (Scrum)"2013.08.24 Антон Киселёв семинар "Agile (Scrum)"
2013.08.24 Антон Киселёв семинар "Agile (Scrum)"
 
User stories and use cases - Клаудия Заика
User stories and use cases - Клаудия ЗаикаUser stories and use cases - Клаудия Заика
User stories and use cases - Клаудия Заика
 
Истории Пользователей (User Stories) - семинар на AgileUkraine 7, 2009-04-25
Истории Пользователей (User Stories) - семинар на AgileUkraine 7, 2009-04-25Истории Пользователей (User Stories) - семинар на AgileUkraine 7, 2009-04-25
Истории Пользователей (User Stories) - семинар на AgileUkraine 7, 2009-04-25
 
PR Advanced 2015: Content Creation & Viral Marketing
PR Advanced 2015: Content Creation & Viral MarketingPR Advanced 2015: Content Creation & Viral Marketing
PR Advanced 2015: Content Creation & Viral Marketing
 
Use cases на практике
Use cases на практикеUse cases на практике
Use cases на практике
 
Разработка сценариев использования (use cases)
Разработка сценариев использования (use cases)Разработка сценариев использования (use cases)
Разработка сценариев использования (use cases)
 

Similaire à Семинар ФКН: современные подходы к разработке ПО - часть 1

Методологии разработки ПО
Методологии разработки ПОМетодологии разработки ПО
Методологии разработки ПОVadim Lyakhovets
 
РИТ-2008: Взаимодействие отдела проектирования интерфейсов и разработчиков в ...
РИТ-2008: Взаимодействие отдела проектирования интерфейсов и разработчиков в ...РИТ-2008: Взаимодействие отдела проектирования интерфейсов и разработчиков в ...
РИТ-2008: Взаимодействие отдела проектирования интерфейсов и разработчиков в ...Yury Vetrov
 
Как сделать наши проекты немного более управляемыми с Agile
Как сделать наши проекты немного более управляемыми с AgileКак сделать наши проекты немного более управляемыми с Agile
Как сделать наши проекты немного более управляемыми с AgileAlexey Krivitsky
 
Developmentmanage1.0
Developmentmanage1.0Developmentmanage1.0
Developmentmanage1.0HighLoad2009
 
Developmentmanage3.0
Developmentmanage3.0Developmentmanage3.0
Developmentmanage3.0WRider
 
Методологии разработки по
Методологии разработки поМетодологии разработки по
Методологии разработки поJaneKozmina
 
2012 andieva e_ju_innovative_management_of_complex_software_projects
2012 andieva e_ju_innovative_management_of_complex_software_projects2012 andieva e_ju_innovative_management_of_complex_software_projects
2012 andieva e_ju_innovative_management_of_complex_software_projectsdataomsk
 
Современна Программная инженерия. Системная инженерия
Современна Программная инженерия. Системная инженерияСовременна Программная инженерия. Системная инженерия
Современна Программная инженерия. Системная инженерияMarcus Akoev
 
Практические аспекты разработки ПО #2
Практические аспекты разработки ПО #2Практические аспекты разработки ПО #2
Практические аспекты разработки ПО #2Denis Umnov
 
Ответственность за качество в разных ИТ-проектах
Ответственность за качество в разных ИТ-проектахОтветственность за качество в разных ИТ-проектах
Ответственность за качество в разных ИТ-проектахSQALab
 
Форум Технологий Mail.Ru 2011: Юрий Ветров — Как создаются интерфейсы в Mail.Ru
Форум Технологий Mail.Ru 2011: Юрий Ветров — Как создаются интерфейсы в Mail.RuФорум Технологий Mail.Ru 2011: Юрий Ветров — Как создаются интерфейсы в Mail.Ru
Форум Технологий Mail.Ru 2011: Юрий Ветров — Как создаются интерфейсы в Mail.RuYury Vetrov
 
Виктор Волков "Всё, что Вы хотели знать об Agile, но боялись спросить"
Виктор Волков "Всё, что Вы хотели знать об Agile, но боялись спросить"Виктор Волков "Всё, что Вы хотели знать об Agile, но боялись спросить"
Виктор Волков "Всё, что Вы хотели знать об Agile, но боялись спросить"EPAM Systems
 
2013-04-06 01 Максим Юнусов. Архитектура в agile-проекте
2013-04-06 01 Максим Юнусов. Архитектура в agile-проекте2013-04-06 01 Максим Юнусов. Архитектура в agile-проекте
2013-04-06 01 Максим Юнусов. Архитектура в agile-проектеОмские ИТ-субботники
 
Юрий Ветров "Как планируется работа команды проектирования и дизайна интерфей...
Юрий Ветров "Как планируется работа команды проектирования и дизайна интерфей...Юрий Ветров "Как планируется работа команды проектирования и дизайна интерфей...
Юрий Ветров "Как планируется работа команды проектирования и дизайна интерфей...Yandex
 
Tech Talks @NSU: Методологии разработки ПО. Что на самом деле скрывается за с...
Tech Talks @NSU: Методологии разработки ПО. Что на самом деле скрывается за с...Tech Talks @NSU: Методологии разработки ПО. Что на самом деле скрывается за с...
Tech Talks @NSU: Методологии разработки ПО. Что на самом деле скрывается за с...Tech Talks @NSU
 

Similaire à Семинар ФКН: современные подходы к разработке ПО - часть 1 (20)

Методоллогии Agile
Методоллогии AgileМетодоллогии Agile
Методоллогии Agile
 
Методологии разработки ПО
Методологии разработки ПОМетодологии разработки ПО
Методологии разработки ПО
 
РИТ-2008: Взаимодействие отдела проектирования интерфейсов и разработчиков в ...
РИТ-2008: Взаимодействие отдела проектирования интерфейсов и разработчиков в ...РИТ-2008: Взаимодействие отдела проектирования интерфейсов и разработчиков в ...
РИТ-2008: Взаимодействие отдела проектирования интерфейсов и разработчиков в ...
 
Lection 3 4_pm
Lection 3 4_pmLection 3 4_pm
Lection 3 4_pm
 
Как сделать наши проекты немного более управляемыми с Agile
Как сделать наши проекты немного более управляемыми с AgileКак сделать наши проекты немного более управляемыми с Agile
Как сделать наши проекты немного более управляемыми с Agile
 
Agile & .net
Agile & .netAgile & .net
Agile & .net
 
Developmentmanage1.0
Developmentmanage1.0Developmentmanage1.0
Developmentmanage1.0
 
Developmentmanage3.0
Developmentmanage3.0Developmentmanage3.0
Developmentmanage3.0
 
Методологии разработки по
Методологии разработки поМетодологии разработки по
Методологии разработки по
 
Agile testing
Agile testingAgile testing
Agile testing
 
2012 andieva e_ju_innovative_management_of_complex_software_projects
2012 andieva e_ju_innovative_management_of_complex_software_projects2012 andieva e_ju_innovative_management_of_complex_software_projects
2012 andieva e_ju_innovative_management_of_complex_software_projects
 
Современна Программная инженерия. Системная инженерия
Современна Программная инженерия. Системная инженерияСовременна Программная инженерия. Системная инженерия
Современна Программная инженерия. Системная инженерия
 
Scrum framework
Scrum frameworkScrum framework
Scrum framework
 
Практические аспекты разработки ПО #2
Практические аспекты разработки ПО #2Практические аспекты разработки ПО #2
Практические аспекты разработки ПО #2
 
Ответственность за качество в разных ИТ-проектах
Ответственность за качество в разных ИТ-проектахОтветственность за качество в разных ИТ-проектах
Ответственность за качество в разных ИТ-проектах
 
Форум Технологий Mail.Ru 2011: Юрий Ветров — Как создаются интерфейсы в Mail.Ru
Форум Технологий Mail.Ru 2011: Юрий Ветров — Как создаются интерфейсы в Mail.RuФорум Технологий Mail.Ru 2011: Юрий Ветров — Как создаются интерфейсы в Mail.Ru
Форум Технологий Mail.Ru 2011: Юрий Ветров — Как создаются интерфейсы в Mail.Ru
 
Виктор Волков "Всё, что Вы хотели знать об Agile, но боялись спросить"
Виктор Волков "Всё, что Вы хотели знать об Agile, но боялись спросить"Виктор Волков "Всё, что Вы хотели знать об Agile, но боялись спросить"
Виктор Волков "Всё, что Вы хотели знать об Agile, но боялись спросить"
 
2013-04-06 01 Максим Юнусов. Архитектура в agile-проекте
2013-04-06 01 Максим Юнусов. Архитектура в agile-проекте2013-04-06 01 Максим Юнусов. Архитектура в agile-проекте
2013-04-06 01 Максим Юнусов. Архитектура в agile-проекте
 
Юрий Ветров "Как планируется работа команды проектирования и дизайна интерфей...
Юрий Ветров "Как планируется работа команды проектирования и дизайна интерфей...Юрий Ветров "Как планируется работа команды проектирования и дизайна интерфей...
Юрий Ветров "Как планируется работа команды проектирования и дизайна интерфей...
 
Tech Talks @NSU: Методологии разработки ПО. Что на самом деле скрывается за с...
Tech Talks @NSU: Методологии разработки ПО. Что на самом деле скрывается за с...Tech Talks @NSU: Методологии разработки ПО. Что на самом деле скрывается за с...
Tech Talks @NSU: Методологии разработки ПО. Что на самом деле скрывается за с...
 

Plus de Andrii Gakhov

Let's start GraphQL: structure, behavior, and architecture
Let's start GraphQL: structure, behavior, and architectureLet's start GraphQL: structure, behavior, and architecture
Let's start GraphQL: structure, behavior, and architectureAndrii Gakhov
 
Exceeding Classical: Probabilistic Data Structures in Data Intensive Applicat...
Exceeding Classical: Probabilistic Data Structures in Data Intensive Applicat...Exceeding Classical: Probabilistic Data Structures in Data Intensive Applicat...
Exceeding Classical: Probabilistic Data Structures in Data Intensive Applicat...Andrii Gakhov
 
Too Much Data? - Just Sample, Just Hash, ...
Too Much Data? - Just Sample, Just Hash, ...Too Much Data? - Just Sample, Just Hash, ...
Too Much Data? - Just Sample, Just Hash, ...Andrii Gakhov
 
Implementing a Fileserver with Nginx and Lua
Implementing a Fileserver with Nginx and LuaImplementing a Fileserver with Nginx and Lua
Implementing a Fileserver with Nginx and LuaAndrii Gakhov
 
Pecha Kucha: Ukrainian Food Traditions
Pecha Kucha: Ukrainian Food TraditionsPecha Kucha: Ukrainian Food Traditions
Pecha Kucha: Ukrainian Food TraditionsAndrii Gakhov
 
Probabilistic data structures. Part 4. Similarity
Probabilistic data structures. Part 4. SimilarityProbabilistic data structures. Part 4. Similarity
Probabilistic data structures. Part 4. SimilarityAndrii Gakhov
 
Probabilistic data structures. Part 3. Frequency
Probabilistic data structures. Part 3. FrequencyProbabilistic data structures. Part 3. Frequency
Probabilistic data structures. Part 3. FrequencyAndrii Gakhov
 
Probabilistic data structures. Part 2. Cardinality
Probabilistic data structures. Part 2. CardinalityProbabilistic data structures. Part 2. Cardinality
Probabilistic data structures. Part 2. CardinalityAndrii Gakhov
 
Вероятностные структуры данных
Вероятностные структуры данныхВероятностные структуры данных
Вероятностные структуры данныхAndrii Gakhov
 
Recurrent Neural Networks. Part 1: Theory
Recurrent Neural Networks. Part 1: TheoryRecurrent Neural Networks. Part 1: Theory
Recurrent Neural Networks. Part 1: TheoryAndrii Gakhov
 
Apache Big Data Europe 2015: Selected Talks
Apache Big Data Europe 2015: Selected TalksApache Big Data Europe 2015: Selected Talks
Apache Big Data Europe 2015: Selected TalksAndrii Gakhov
 
Swagger / Quick Start Guide
Swagger / Quick Start GuideSwagger / Quick Start Guide
Swagger / Quick Start GuideAndrii Gakhov
 
API Days Berlin highlights
API Days Berlin highlightsAPI Days Berlin highlights
API Days Berlin highlightsAndrii Gakhov
 
ELK - What's new and showcases
ELK - What's new and showcasesELK - What's new and showcases
ELK - What's new and showcasesAndrii Gakhov
 
Apache Spark Overview @ ferret
Apache Spark Overview @ ferretApache Spark Overview @ ferret
Apache Spark Overview @ ferretAndrii Gakhov
 
Data Mining - lecture 8 - 2014
Data Mining - lecture 8 - 2014Data Mining - lecture 8 - 2014
Data Mining - lecture 8 - 2014Andrii Gakhov
 
Data Mining - lecture 7 - 2014
Data Mining - lecture 7 - 2014Data Mining - lecture 7 - 2014
Data Mining - lecture 7 - 2014Andrii Gakhov
 
Data Mining - lecture 6 - 2014
Data Mining - lecture 6 - 2014Data Mining - lecture 6 - 2014
Data Mining - lecture 6 - 2014Andrii Gakhov
 
Data Mining - lecture 5 - 2014
Data Mining - lecture 5 - 2014Data Mining - lecture 5 - 2014
Data Mining - lecture 5 - 2014Andrii Gakhov
 

Plus de Andrii Gakhov (20)

Let's start GraphQL: structure, behavior, and architecture
Let's start GraphQL: structure, behavior, and architectureLet's start GraphQL: structure, behavior, and architecture
Let's start GraphQL: structure, behavior, and architecture
 
Exceeding Classical: Probabilistic Data Structures in Data Intensive Applicat...
Exceeding Classical: Probabilistic Data Structures in Data Intensive Applicat...Exceeding Classical: Probabilistic Data Structures in Data Intensive Applicat...
Exceeding Classical: Probabilistic Data Structures in Data Intensive Applicat...
 
Too Much Data? - Just Sample, Just Hash, ...
Too Much Data? - Just Sample, Just Hash, ...Too Much Data? - Just Sample, Just Hash, ...
Too Much Data? - Just Sample, Just Hash, ...
 
DNS Delegation
DNS DelegationDNS Delegation
DNS Delegation
 
Implementing a Fileserver with Nginx and Lua
Implementing a Fileserver with Nginx and LuaImplementing a Fileserver with Nginx and Lua
Implementing a Fileserver with Nginx and Lua
 
Pecha Kucha: Ukrainian Food Traditions
Pecha Kucha: Ukrainian Food TraditionsPecha Kucha: Ukrainian Food Traditions
Pecha Kucha: Ukrainian Food Traditions
 
Probabilistic data structures. Part 4. Similarity
Probabilistic data structures. Part 4. SimilarityProbabilistic data structures. Part 4. Similarity
Probabilistic data structures. Part 4. Similarity
 
Probabilistic data structures. Part 3. Frequency
Probabilistic data structures. Part 3. FrequencyProbabilistic data structures. Part 3. Frequency
Probabilistic data structures. Part 3. Frequency
 
Probabilistic data structures. Part 2. Cardinality
Probabilistic data structures. Part 2. CardinalityProbabilistic data structures. Part 2. Cardinality
Probabilistic data structures. Part 2. Cardinality
 
Вероятностные структуры данных
Вероятностные структуры данныхВероятностные структуры данных
Вероятностные структуры данных
 
Recurrent Neural Networks. Part 1: Theory
Recurrent Neural Networks. Part 1: TheoryRecurrent Neural Networks. Part 1: Theory
Recurrent Neural Networks. Part 1: Theory
 
Apache Big Data Europe 2015: Selected Talks
Apache Big Data Europe 2015: Selected TalksApache Big Data Europe 2015: Selected Talks
Apache Big Data Europe 2015: Selected Talks
 
Swagger / Quick Start Guide
Swagger / Quick Start GuideSwagger / Quick Start Guide
Swagger / Quick Start Guide
 
API Days Berlin highlights
API Days Berlin highlightsAPI Days Berlin highlights
API Days Berlin highlights
 
ELK - What's new and showcases
ELK - What's new and showcasesELK - What's new and showcases
ELK - What's new and showcases
 
Apache Spark Overview @ ferret
Apache Spark Overview @ ferretApache Spark Overview @ ferret
Apache Spark Overview @ ferret
 
Data Mining - lecture 8 - 2014
Data Mining - lecture 8 - 2014Data Mining - lecture 8 - 2014
Data Mining - lecture 8 - 2014
 
Data Mining - lecture 7 - 2014
Data Mining - lecture 7 - 2014Data Mining - lecture 7 - 2014
Data Mining - lecture 7 - 2014
 
Data Mining - lecture 6 - 2014
Data Mining - lecture 6 - 2014Data Mining - lecture 6 - 2014
Data Mining - lecture 6 - 2014
 
Data Mining - lecture 5 - 2014
Data Mining - lecture 5 - 2014Data Mining - lecture 5 - 2014
Data Mining - lecture 5 - 2014
 

Семинар ФКН: современные подходы к разработке ПО - часть 1

  • 1. СОВРЕМЕННЫЕ ПОДХОДЫ К РАЗРАБОТКЕ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ХАРЬКОВСКИЙ НАЦИОНАЛЬНЫЙ УНИВЕРСИТЕТ ИМЕНИ В. Н. КАРАЗИНА ФАКУЛЬТЕТ КОМПЬЮТЕРНЫХ НАУК КАФ. ИСКУССТВЕННОГО ИНТЕЛЛЕКТА И ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ К.Ф.М.Н., ДОЦ. КАФ. ИСКУССТВЕННОГО ИНТЕЛЛЕКТА И ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ГАХОВ АНДРЕЙ ВЛАДИМИРОВИЧ
  • 2. ПРАКТИКИ РАЗРАБОТКИ Software Development Methods ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
  • 4. Первое формальное описание «модели водопада» было дано в статье У. У. Ройса (Winston W. Royce) 1970 года, в которой он представил эту модель и описал ее недостатки.
  • 5. Принципы модели модель состоит из набора фаз. переход от одной фазы разработки к другой происходит только после полного и успешного завершения предыдущей фазы. переходов назад либо вперёд или перекрытия фаз — не происходит.
  • 6. Основные фазы Определение требований. Проектирование. Реализация. Верификация (тестирование и отладка). Инсталляция и поддержка. Существует множество модификаций данной модели.
  • 7. Критика модели Недостаточная гибкость. Самоцель - формальное управление проектом в ущерб срокам, стоимости и качеству.
  • 9. Основные принципы Программная система разделяется на этапы (increments). На каждом этапе каждая порция функциональности продукта проходит все фазы от разработки требований до доставки (deployment).
  • 10. Основные фазы Исследование Разработка. На данной фазе оценивается масштаб проекта, функциональные и нефункциональные требования, риски и происходит оценка работы. На данной фазе разрабатывается архитектура с учетов уменьшения рисков и нефункциональных требований.
  • 11. Основные фазы Реализация Переход. На данной фазе пишется код и реализуются архитектурные решение. Включаются стадии анализа, проектирования, реализации и тестирования функциональных требований. На данной фазе система передается в промышленное использование.
  • 12. Основные фазы Каждая фаза может быть разделена на 1 или более итераций, которые скорее ограничены временем, а не функциями продукта. Архитекторы и аналитики обычно работают на 1 шаг впереди, чем разработчики.
  • 13. Сравнение с моделью водопада В моделе водопада бизнес-ценность появляется один раз и в самом конце разработки проекта. В итерационной модели возможна обратная связь и коррекция процесса.
  • 15. В феврале 2001 г. в штате Юта, США был выпущен «Agile Manifesto» как альтернатива управляемым документацией, «тяжеловесным» практикам разработки ПО.
  • 16. Agile Manifesto Люди и взаимодействие важнее процессов и инструментов. Работающий продукт важнее исчерпыващей документации. Сотрудничество с заказчиком важнее согласований условий контракта. Готовность к изменениям важнее следования первоначальному плану.
  • 17. Основные принципы Найвысший приоритет – удовлетворение потребностей заказчика благодаря регулярной и ранней поставке ценного ПО. Изменение требований приветствуется, даже на поздних стадиях разработки.
  • 18. Основные принципы Agile-процессы позволяют использовать изменения для обеспечения заказчику конкурентного преимущества. Работающий продукт следует выпускать как можно чаще, с периодичностью от 2х недель до 2х месяцев.
  • 19. Основные принципы На протяжении всего проекта разработчики и представители бизнеса должны ежедневно работать вместе. Над проектом должны работать мотивированные профессионалы. Чтобы работа была сделана, создайте условия, обеспечьте поддержку и полностью доверьтесь им.
  • 20. Основные принципы Непосредственное общение является наиболее практичным и эффективным способом обмена информацией как с самой командой, так и внутри команды. Работающий продукт – основной показатель прогресса.
  • 21. Основные принципы Инвесторы, разработчики и пользователи должны иметь возможность поддерживать постоянный ритм бесконечно. Постоянное внимание к техническому совершенству и качеству проектирования повышает гибкость проекта.
  • 22. Основные принципы Простота – искусство минимизации лишней работы – крайне необходима. Самые лучшие требования, архитектурные и технические решения рождаются у само- организующихся комманд.
  • 23. Основные принципы Команда должна систематически анализировать возможные способы улучшения эффективности и соотвественно корректировать стиль своей работы.
  • 25. Scrum Спринт (Sprint). Скрам-мастер (Scrum Master). Жестко фиксированные и небольшие по времени итерации. Возможности ПО к реализации на очередном спринте определяются в начале спринта на этапе планирования и не могут изменяться на всем его протяжении. При этом строго фиксированная небольшая длительность придает процессу разработки предсказуемость и гибкость. Проводит совещания (Scrum Meeting) и следит за соблюдением всех принципов скрам, разрешает противоречия и защищает команду от отвлекающих факторов.
  • 26. Scrum Владелец продукта (Product Owner). Скрам-команда (Scrum Team). Представляет интересы конечных пользователей и других заинтересованных сторон. Команда разработчиков проекта, состоящая из специалистов разных профилей: тестировщиков, архитекторов, аналитиков, программистов и т.д. Размер команды в идеале 5-9 человек. Команда является единственным полностью вовлеченным в процесс участником и отвечает за результат как единое целое. Никто, кроме команды не может вмешиваться в процесс разработки на протяжении спринта.
  • 28. Подход экстремального программирования создал Кент Бек (Kent Beck) и описал в своей книге «Extreme Programming Explained - Embrace Change» в 1999 году.
  • 29. Короткий цикл обратной связи Разработка через тестирование. Игра в планирование. Основное внимание уделяется тестированию модулей (unit testing) и функциональному тестированию. Тесты позволяют быть уверенному в правильности кода, понять назначение того или иного фрагмента кода, логику работы. Наличие тестов являются неободимым условием рефакторинга. Приоритетным является подход Test Driven Development (TDD, разработка через тестирование) - сначала пишется тест, а потом реализуется логика. Используются бумажные карточки с пожеланиями заказчика (stories) и примерный план работы по выпуску следующих версий продукта. Необходимым условием является разделение в принятии решений: заказчик принимает бизнес-решения, команда разработчиков – технические решения.
  • 30. Короткий цикл обратной связи Заказчик всегда рядом. Парное программирование. Конечный пользователь программного продукта («заказчик») должен быть всё время на связи и доступен для вопросов. При парном программировании исходный код создаётся парами людей, программирующих одну задачу, сидя за одним рабочим местом. Один программист («driver») управляет компьютером и думает над кодированием в деталях. Другой программист («navigator») сосредоточен на картине в целом и непрерывно просматривает код, производимый первым программистом. Обычно, каждые полчаса они меняются ролями. Как правило, такие пары не фиксированы и могут меняться при решении разных задач.
  • 31. Непрерывный процесс Непрерывная интеграция. Рефакторинг. Интеграция должна выполнятся несколько раз в день после успешного выполнения всех тестов. Реорганизация кода (рефакторинг) – это процесс изменения внутренней структуры программы, не затрагивающий её внешнего поведения и имеющий целью облегчить понимание её работы. Частые небольшие релизы. Готовые версии продукта (release) должны поступать в эксплуатацию как можно чаще. Каждая версия должна нести полезную бизнес-составляющую.
  • 32. Понимание, разделяемое всеми Простота дизайна. В процессе работы условия задачи могут неоднократно измениться, следовательно нет смысла проектировать заблаговременно полностью. Проектирование должно выполнятся постоянно и небольшими этапами, учитывая меняющиеся требования. На каждом этапе выбирается наиболее простой дизайн и меняется при изменении требований на следующих этапах. Метафора системы. Метафора системы являтся аналогом архитектуры – представления о компонентах системы и их взаимодействии. Выбор хорошей метафоры облегчает понимание системы разработчиками.
  • 33. Понимание, разделяемое всеми Коллективное владение кодом. Стандарты кодирования. Каждый член команды несет отвественность за весь код. Действует правило: «Испортил - исправь». Парное программирование и наличие хорошего набора тестов, позволяет не беспокоиться при изменениях любого участка кода. Команда должна сформировать набор правил и все члены команды должны их соблюдать. Не нужно тратить много времени на первоначальный набор правил – сделайте их простыми и усложняйте только при необходимости.
  • 34. Благосостояние программиста Без сверхурочных. 40-часовая рабочая неделя программиста. Необходимость в сверхурочной работе означает неправильное планирование. Принята концепция, что задание выполняется лучше и более творчески только хорошо отдохнувшими людьми.
  • 36. Принципы Усиленное изучение. Решай как можно позже. Процесс разработки – это непрерывный процесс изучения. Вместо добавления большего количества документации или более детального планирования разные идеи должны быть опробованы в коде! Процесс изучения ускоряется за счет коротких итераций (каждая из которых сопровождается рефакторингом и интеграционными тестами). Благодаря коротким периодам заказчик и разработчики лучше понимают как потребности пользователей, так и особенности предметной области. Обязательны частые контакты с заказчиком. Лучшие результаты получаются за счет подхода, основанного на разработке продукта по опциям. Принимаем решение с задержкой до тех пор, пока новая опция не будет основываться на реальных фактах, а не предположениях. Это не означает отсутствие планирования!
  • 37. Принципы Доставляй как можно быстрее. Доверие к команде и мотивация. В современном мире выживает не большие, а быстрые. Чем быстрее продукт будет доставлен без критических ошибок, тем быстрее будут получены отзывы пользователей, а значит факты для следующей итерации. Отлично работает стратегия «just-in-time», заключающаяся в определении необходимого результата и предоставлении возможности команде самоорганизоваться и выделить задачи, необходимые для достижения результата. Со статистической точки зрения люди – это ресурсы, но в разработке ПО это совсем не так. Людям необходима мотивация. Разработчик должен иметь доступ к заказчику, а Team Lead должен быть вовлечен в поддержку пользователей в сложных ситуациях. Find good people and let them do their job.
  • 38. Принципы Целостность видения. Интегрирование. Современная программная система это не просто сумма своих частей, это продукт их взаимодействия. Важным является стандартизация процессов разработки и разделение всем разработчиками принципов бережливости. Think big, act small, fail fast; learn rapidly! Заказчик получает целостный продукт, отдельные компоненты системы работают хорошо друг с другом как единое целое. Целостность достигается изучением предметной области и решением задачи в одно и тоже время (а не последовательно). Главным инструментом сохранения целостности системы выступает рефакторинг (и тестирование).
  • 40. TDD Test-Driven Development (TDD) — техника разработки ПО, которая основывается на повторении очень коротких циклов разработки: тест -> код -> рефакторинг. Тест — это процедура, позволяющая подтвердить либо опровергнуть работоспособность кода.
  • 41. Test-Driven Development Создание теста. Запук всех тестов: тесты не проходят. Добавление каждой новой функциональности начинается с написания тестов. Для успешного написания тестов необходимо понимать требования, рассмотрев все возможные сценарии. После написания новых тестов необходимо убедиться, что они не проходят – иначе тест написан не верно или необходимая функциональность уже присутствует в системе.
  • 42. Test-Driven Development Написание кода. Запук всех тестов: тесты проходят. Необходимая функциональность реализуется в коде, причем главной целью является прохождение теста. Не следует добавлять лишней функциональности, которая не покрыта тестом. Если тесты проходят, следовательно разработанный код удовлетворяет всем требованиям. Пришло время для улучшения кода.
  • 43. Test-Driven Development Рефакторинг. Повторение цикла. Когда функционально код готов, необходимо его «подчистить» - внести изменения во внутреннюю структуру (не затрагивая функциональность, т.е. ее внешнюю структуру) с целью облегчить понимание, улучшить дизайн и устранить возможное дублирование кода. Указанный цикл повторяется снова и снова, реализуя новую функциональность небольшими шагами – 1-10 изменений между запусками тестов. Если новый код не удовлетворяет новым тестам или старые тесты перестают проходить, то необходимо вернуться к отладке.
  • 44. BDD Behavior-Driven development (BDD) - процесс разработки ПО, основанный на TDD, но использующий также идеи дизайна на основе предметной области (DDD) с целью разработки ПО «имеющего смысл».
  • 45. Behavior-Driven Development User story (пользовательские истории). В BDD пользовательские истории выступают в качестве основных документов, описывающих поведение системы, над которым совместно работают разработчики и бизнес-аналитики. Каждая user story должна иметь определенную структуру. Спецификация - Ubiquitous Language Ubiquitous Language (общеупотребительный язык) - термин, использованный Эриком Эвансом (Eric Evans, создатель Domain Driven Design) для описания языка, одинаково понятного разработчикам, так и пользователям . Инструментальная поддержка Важное значение в BDD (как и в TDD) отдается наличию инструментов, поддерживающих автоматизацию спецификаций и их проверку (JBehave, Cucumber и др.).
  • 46. User story Title (название). Каждая история должна иметь простое и понятное название. Narrative (поветствование, содержание). Краткое описание, дающее ответы на следующие вопросы: Who? – Кто является заинтересованной стороной в данной истории? Which? – Какой эффект заинтересованная сторона ожидает получит? What? – Что за бизнес-ценность будет получена от данного эффекта? Acceptance criteria (критерии приемки). Описание сценариев приемки для каждого случая повествования в формате: • Начальные условия (считающиеся выполнеными в начале сценария). • Определение события, которое начинает выполнение сценария. • Определение ожидаемого результата.
  • 47. User story - пример As a Scrum Master I want to see Lead/Cycle time progress. As a Scrum Master I want to see Lead/Cycle time progress So that I know whether we are improving our development process or not. Scenario #1 Given Reports section in project and Bug Tracking practice is disabled When I navigate to Lead and Cycle Time Report Then I see Lead Time chart And chart contains 1 line for stories Scenario #2 Given Reports section in project and Bug Tracking practice is disabled When I navigate to Lead and Cycle Time Report Then I see Cycle Time And chart contains 1 line for stories
  • 48. TDD vs BDD BDD – это «правильное» TDD. BDD делает упор на то, какой система должна быть, в то время как TDD больше озабочено тем, как реализовать систему. Очень часто в TDD разработчики настолько увлечены тем, «как» сделать тест, забывая «для чего» необходимо его сделать, отрываясь от проблем и задач предметной области. BDD понятно не только разработчикам. Одной из целей BDD является преодоление разрыва между разработчиками, тестировщиками и пользователями. Использование user story существенно облегчает понимание.