agile software engineering · agile software engineering ... Бизнес пользователи...

33
Agile Software Engineering (методология гибкой разработки) Андрей Панкратьев, Департамент разработки программного обеспечения, SAP Labs 22 Октября, 2014 года

Upload: others

Post on 21-May-2020

15 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Agile Software Engineering · Agile Software Engineering ... Бизнес пользователи не могут проверять или писать модульные ... По

Agile Software Engineering (методология гибкой разработки)

Андрей Панкратьев, Департамент разработки программного обеспечения, SAP Labs

22 Октября, 2014 года

Page 2: Agile Software Engineering · Agile Software Engineering ... Бизнес пользователи не могут проверять или писать модульные ... По

© 2014 SAP SE or an SAP affiliate company. All rights reserved. 2 Customer

Содержание

Скрам

Разработка Через Тестирование

Качество Программного Обеспечения

Спецификация на Примере

ABAP Unit

Page 3: Agile Software Engineering · Agile Software Engineering ... Бизнес пользователи не могут проверять или писать модульные ... По

© 2014 SAP SE or an SAP affiliate company. All rights reserved. 3 Customer

Скрам “Увеличение Продукта”

Page 4: Agile Software Engineering · Agile Software Engineering ... Бизнес пользователи не могут проверять или писать модульные ... По

© 2014 SAP SE or an SAP affiliate company. All rights reserved. 4 Customer

Одного Скрама Недостаточно!

Управление Проектами

Планирование Спринта (Sprint Planning)

Обзор Итогов Спринта (Sprint Review)

Ретроспективное Совещание (Sprint

Retrospective)

Ежедневное Совещание (Daily Scrum)

Владелец Продукта (Product Owner)

Скрам Мастер (Scrum Master)

Команда (Team)

Бэклог Продукта (Product Backlog)

Бэклог Спринта (Sprint Backlog)

Гибкая Методология Разработки

Разработка Через Тестирование (Test-Driven

Development)

Чистый Код (Clean Code)

Рефакторинг (Refactoring)

Парное Программирование (Pair Programming)

Простой Дизайн (Simple Design)

Коллективное Владение (Collective Ownership)

Непрерывная Интеграция (Continuous Integration)

Приемочные Тесты (Acceptance Tests)

Исследовательское Тестирование (Exploratory Testing)

Page 5: Agile Software Engineering · Agile Software Engineering ... Бизнес пользователи не могут проверять или писать модульные ... По

© 2014 SAP SE or an SAP affiliate company. All rights reserved. 5 Customer

Гибкие Проекты Более Успешные

Page 6: Agile Software Engineering · Agile Software Engineering ... Бизнес пользователи не могут проверять или писать модульные ... По

© 2014 SAP SE or an SAP affiliate company. All rights reserved. 6 Customer

Сравнение Waterfall и Agile Проектов

Waterfall

Все требования должны быть определены и

детально описаны до начала разработки;

Детально структурирован, что облегчает его

применение к малоопытным командам;

Проекты легко контролируются, отслеживаются

ресурсы, риски, время;

Качество имеет первоочередной приоритет по

сравнению со стоимостью и временем

Agile

Итеративная разработка;

Быстрое получение первой/пробной версии

продукта для тестирования

Легко воспринимаются корректировки и

изменения в процессе разработки

Конечный пользователь вовлечен в процесс с

самого начала

Page 7: Agile Software Engineering · Agile Software Engineering ... Бизнес пользователи не могут проверять или писать модульные ... По

Разработка Через Тестирование

Page 8: Agile Software Engineering · Agile Software Engineering ... Бизнес пользователи не могут проверять или писать модульные ... По

© 2014 SAP SE or an SAP affiliate company. All rights reserved. 8 Customer

Мотивация Тестирование: Раньше, Чаще и Автоматически

Чем позже обнаружена ошибка, тем она дороже

Мы должны тестировать код как можно чаще и раньше

Как мы можем делать регрессионное тестирование

эффективно и часто?

Автоматическое тестирование не оказывает стрессового

воздействия и обеспечивает корректность существующей

функциональности

Как будет замечательно обнаруживать ошибки

мгновенно (в режиме реального времени)?

Page 9: Agile Software Engineering · Agile Software Engineering ... Бизнес пользователи не могут проверять или писать модульные ... По

© 2014 SAP SE or an SAP affiliate company. All rights reserved. 9 Customer

Объяснение Разработки Через Тестирование Цикл

Page 10: Agile Software Engineering · Agile Software Engineering ... Бизнес пользователи не могут проверять или писать модульные ... По

© 2014 SAP SE or an SAP affiliate company. All rights reserved. 10 Customer

Объяснение Разработки Через Тестирование Три Правила

Три основных правила от Роберта Мартина (дядюшки Боба).

Пишите только тот код, который протестирован.

Начинайте писать тесты с малого, а затем наращивайте их.

Пишите ровно столько кода, сколько необходимо для прохождения теста.

После того как все тесты пройдены очистите код и дизайн (рефакторинг).

Page 11: Agile Software Engineering · Agile Software Engineering ... Бизнес пользователи не могут проверять или писать модульные ... По

© 2014 SAP SE or an SAP affiliate company. All rights reserved. 11 Customer

Выгода I

Сосредоточьтесь на главном, так как

Тесты кодифицируют требования

Тесты управляют разработкой функциональности

Вы делаете только то, что необходимо в данный

момент

Уверенность

Подстраховка

Поощряет изменения

Отталкивает ошибки

Page 12: Agile Software Engineering · Agile Software Engineering ... Бизнес пользователи не могут проверять или писать модульные ... По

© 2014 SAP SE or an SAP affiliate company. All rights reserved. 12 Customer

Выгода II

Улучшается качество кода

API годный к использованию

Декаплинг и тестируемость

Живая Техническая Документация

Тесты как исполняемый список

требований

Тесты объясняют использование

API

Page 13: Agile Software Engineering · Agile Software Engineering ... Бизнес пользователи не могут проверять или писать модульные ... По

© 2014 SAP SE or an SAP affiliate company. All rights reserved. 13 Customer

Написание “F.I.R.S.T. Class” Модульных Тестов Характеристики Хороших Модульных Тестов

Fast тесты работают быстро

Isolated тесты полностью изолированы

Repeatable неизменное поведение в любом окружении

Self-Validating два состояния (есть ошибка / нет ошибки)

Timely тесты пишутся до написания продуктивного кода

Page 14: Agile Software Engineering · Agile Software Engineering ... Бизнес пользователи не могут проверять или писать модульные ... По

Качество Программного Обеспечения

Page 15: Agile Software Engineering · Agile Software Engineering ... Бизнес пользователи не могут проверять или писать модульные ... По

© 2014 SAP SE or an SAP affiliate company. All rights reserved. 15 Customer

Качество Программного Обеспечения

Внешнее Качество (взгляд пользователя)

Корректность (Correctness)

Производительность (Performance)

Удобство (Usability)

Безопасность (Security)

Внутреннее Качество (взгляд разработчика)

Читаемость (Readability)

Возможность поддержки (Maintainability)

Возможность расширения (Expandability)

Повторное использование (Reusability)

Тестируемость (Testability)

Page 16: Agile Software Engineering · Agile Software Engineering ... Бизнес пользователи не могут проверять или писать модульные ... По

© 2014 SAP SE or an SAP affiliate company. All rights reserved. 16 Customer

Симптомы/Следствия Низкого Внутреннего Качества

Внутреннее качество имеет тенденцию к снижению

Каждое новое изменение встраивается в существующий низкокачественный код и тем самым создает

новые проблемы

Эффект “Разбитых Окон”

Архитектура разрушается

Производительность снижается

Новые изменения (требования) трудно реализовать

Все больше и больше затрат приходится на исправление ошибок

Исправленные ошибки появляются вновь

Затраты на тестирование возрастают

Внешнее качество страдает

Изменения приводят к непредвиденным последствиям, ведущим к ошибкам

Page 17: Agile Software Engineering · Agile Software Engineering ... Бизнес пользователи не могут проверять или писать модульные ... По

© 2014 SAP SE or an SAP affiliate company. All rights reserved. 17 Customer

Результаты Хорошего Внутреннего Качества

Хорошо для конечного пользователя и владельца продукта

Разработки не останавливаются со временем

Ошибки легко исправляются

Новые требования легче добавлять

Хорошо для разработчиков

Разработки завершаются в срок

Меньше давление

Больше уверенности и удовлетворенности

Page 18: Agile Software Engineering · Agile Software Engineering ... Бизнес пользователи не могут проверять или писать модульные ... По

© 2014 SAP SE or an SAP affiliate company. All rights reserved. 18 Customer

Как достичь Высокого Внутреннего Качества Нет Технических Долгов

Не накапливайте технических долгов . . .

Код должен очищаться как можно чаще

Архитектура и дизайн должны быть

адаптированы во время разработки

Page 19: Agile Software Engineering · Agile Software Engineering ... Бизнес пользователи не могут проверять или писать модульные ... По

© 2014 SAP SE or an SAP affiliate company. All rights reserved. 19 Customer

Как достичь Высокого Внутреннего Качества Общее Понимание

Нужно иметь общее понимание качества и дизайна внутри команды

Обсуждение дизайна и архитектурных

решений

Обсуждение соглашения по коду, качеству

Согласование общих правил

Page 20: Agile Software Engineering · Agile Software Engineering ... Бизнес пользователи не могут проверять или писать модульные ... По

© 2014 SAP SE or an SAP affiliate company. All rights reserved. 20 Customer

Как достичь Высокого Внутреннего Качества Критерии Готовности

Определите в команде (включая владельца продукта) адекватный набор критериев готовности

повышающих внутреннее качество.

В дополнение к функциональным критериям

готовности можно добавить:

Модульное тестирование должно покрывать по

крайней мере x % кода

Увеличение продукта не должно требовать

регрессионных тестов

Тесты должны выполняться в системе

интеграции

Page 21: Agile Software Engineering · Agile Software Engineering ... Бизнес пользователи не могут проверять или писать модульные ... По

Спецификация на примере

Page 22: Agile Software Engineering · Agile Software Engineering ... Бизнес пользователи не могут проверять или писать модульные ... По

© 2014 SAP SE or an SAP affiliate company. All rights reserved. 22 Customer

Спецификация на Примере Выполняемая Спецификация, Живая Документация, Приемочные Тесты

Проблемы

Спецификации туманны и неоднозначны

Бизнес пользователи и разработчики говорят на разных языках

Бизнес пользователи не могут проверять или писать модульные тесты

Документация не обновляется

Решения

Спецификация на примере:

Используйте конкретные примеры чтобы специфицировать требуемое поведение

Автоматические приемочные тесты:

Перенесите примеры в исполняемую форму

Page 23: Agile Software Engineering · Agile Software Engineering ... Бизнес пользователи не могут проверять или писать модульные ... По

© 2014 SAP SE or an SAP affiliate company. All rights reserved. 23 Customer

Приемочное Тестирование Выполняемая Спецификация

Коллективно пишутся бизнес пользователями (экспертами), разработчиками и тестерами

Тестирование черного ящика, написанные на языке бизнес пользователей (экспертов)

Однозначные, Поддающиеся проверке

Легко понимаются

Определяет закончена ли разработка требований

Документируют поведение

Page 24: Agile Software Engineering · Agile Software Engineering ... Бизнес пользователи не могут проверять или писать модульные ... По

© 2014 SAP SE or an SAP affiliate company. All rights reserved. 24 Customer

Приемочное Тестирование vs. Модульное Тестирование

Проверочное Тестирование:

Проверяет что система удовлетворяет

требованиям

Пишутся для бизнес-пользователей

Ориентированы на бизнес

Модульное Тестирование:

Проверяет что модуль построен правильно

Пишутся для разработчиков

Технически ориентированы

Page 25: Agile Software Engineering · Agile Software Engineering ... Бизнес пользователи не могут проверять или писать модульные ... По

© 2014 SAP SE or an SAP affiliate company. All rights reserved. 25 Customer

Разработка Через Приемочное Тестирование (ATDD)

Page 26: Agile Software Engineering · Agile Software Engineering ... Бизнес пользователи не могут проверять или писать модульные ... По

© 2014 SAP SE or an SAP affiliate company. All rights reserved. 26 Customer

Различные Виды Приемочных Тестов

Проверить чистую бизнес логику до уровня отдельных классов

Пройти по всему пользовательскому интерфейсу и проверить изменения в базе данных

Приемочные тесты обычно являются интеграционными тестами

Нужно иметь твердую основу модульных тестов чтобы легко обнаруживать ошибки и

дополнить их интеграционными тестами

Page 27: Agile Software Engineering · Agile Software Engineering ... Бизнес пользователи не могут проверять или писать модульные ... По

© 2014 SAP SE or an SAP affiliate company. All rights reserved. 27 Customer

Автоматизация

Тесты автоматически выполняются

Тесты выполняются без ручного вмешательства

Тесты выполняются в системе интеграции

Тесты создают набор регрессионных тестов

Тест представляют собой живую документацию которая автоматически проверяется

Page 28: Agile Software Engineering · Agile Software Engineering ... Бизнес пользователи не могут проверять или писать модульные ... По

ABAP Unit

Page 29: Agile Software Engineering · Agile Software Engineering ... Бизнес пользователи не могут проверять или писать модульные ... По

© 2014 SAP SE or an SAP affiliate company. All rights reserved. 29 Customer

ABAP Unit

ABAP Unit это официальная библиотека модульного тестирования ABAP

Обеспечивает окружение для выполнения модульных тестов в изоляции

Полностью интегрирован в язык программирования ABAP

Обеспечивает assertion-методы для тестирования ожидаемых результатов

Продуктивный код и код модульных тестов связаны и поставляются вместе

По умолчанию продуктивный код не может быть выполнен в продуктивной системе

Доступно с версии 6.40

Сфера Действия

Разработана для модульного тестирования, но используется также и для интеграционных

тестов

Page 30: Agile Software Engineering · Agile Software Engineering ... Бизнес пользователи не могут проверять или писать модульные ... По

© 2014 SAP SE or an SAP affiliate company. All rights reserved. 30 Customer

Синтаксис Релиз 702 и Выше

ABAP классы для модульных тестов обычно реализуются в виде локальных ABAP объектов

(классов) в главной программе, которая содержит тестируемую функциональность.

CLASS ltc_wallet DEFINITION FINAL FOR TESTING

RISK LEVEL HARMLESS DURATION SHORT.

PRIVATE SECTION.

METHODS: add_one_banknote FOR TESTING.

ENDCLASS.

Page 31: Agile Software Engineering · Agile Software Engineering ... Бизнес пользователи не могут проверять или писать модульные ... По

© 2014 SAP SE or an SAP affiliate company. All rights reserved. 31 Customer

ABAP Unit во Время Выполнения

Все тесты выполняются независимо друг от друга

Выполняются в неопределенном порядке

Одна инстанция тестового класса для тестового метода

Один rollback в конце каждого тестового класса

Page 32: Agile Software Engineering · Agile Software Engineering ... Бизнес пользователи не могут проверять или писать модульные ... По

© 2014 SAP SE or an SAP affiliate company. All rights reserved. 32 Customer

Проверка Тестов Класс CL_ABAP_UNIT_ASSERT (Версия 7.0 EhP 2 и выше)

Статический

метод

Описание

ASSERT_EQUALS Обеспечивает равенство двух объектов данных

ASSERT_DIFFERS Обеспечивает неравенство между 2 (элементарными) объектами данных

ASSERT_BOUND Обеспечивает что ссылка на переменную существует

ASSERT_NOT_BOUND Обеспечивает что ссылка на переменную не существует

ASSERT_INITIAL Обеспечивает что объект данных имеет начальное значение

ASSERT_NOT_INITIAL Обеспечивает что объект данных имеет НЕ начальное значение

… …

Page 33: Agile Software Engineering · Agile Software Engineering ... Бизнес пользователи не могут проверять или писать модульные ... По

© 2014 SAP SE or an SAP affiliate company. All rights reserved.

Спасибо

Контактная информация:

Андрей Панкратьев