51
Технологии разработки ПО Кривовязь Глеб 1

Технологии разработки ПО

Embed Size (px)

DESCRIPTION

Обзор инструментов и технологий промышленной разработки программного обеспечения

Citation preview

Page 1: Технологии разработки ПО

Технологии разработки ПО Кривовязь Глеб

1

Page 2: Технологии разработки ПО

Мотивация

2

Профессиональная разработка ≠ просто написание кода

Page 3: Технологии разработки ПО

Инфраструктура разработки

3

Page 4: Технологии разработки ПО

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

4

Как организовать совместную работу с кодом?

Как систематизировать задачи?

Где и в каком виде хранить всю информацию по проекту?

Как оформлять код?

Как создавать документацию?

Как контролировать качество кода?

Page 5: Технологии разработки ПО

Системы контроля версий (VCS, Version Control Systems)

5

Централизованные o CVS

o StarTeam

o Subversion (SVN)

o Perforce

o MS Team Foundation

Распределенные o Git

o Mercurial

o Bazaar

Page 6: Технологии разработки ПО

Системы контроля версий (VCS, Version Control Systems)

6

Page 7: Технологии разработки ПО

7

Page 8: Технологии разработки ПО

8

Создан в 2005 г. для оптимизации разработки ядра Linux

Построен по принципу файловой системы

Большинство операций – локальные и очень быстрые («the

gods of speed have blessed Git with unworldly powers» )

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

Обладает всеми преимуществами распределенных систем

Page 9: Технологии разработки ПО

9

Каждый commit – «слепок» файловой системы (snapshot)

Актуальные версии файлов хранятся целиком (blobs)

Page 10: Технологии разработки ПО

10

Вся история разработки – граф commit’ов

Ветка (branch) = указатель на commit (41 байт!). HEAD –

текущая ветка

Page 11: Технологии разработки ПО

11

Находимся в ветке master

Page 12: Технологии разработки ПО

12

Создаем ветку dev

Page 13: Технологии разработки ПО

13

Делаем checkout ветки dev

Page 14: Технологии разработки ПО

14

Делаем commit

Page 15: Технологии разработки ПО

15

Возвращаемся в ветку master (делаем checkout)

Page 16: Технологии разработки ПО

16

Делаем commit

Page 17: Технологии разработки ПО

17

http://git-scm.com/book

Page 18: Технологии разработки ПО

Системы трекинга задач и дефектов (Issue trackers)

18

Цель – организация задач, расстановка приоритетов

Issue – может быть task, bug, improvement и т.д.

Типичные характеристики issue: o Description

o Reporter

o Assignee

o Project

o Priority

o Due date

o …

Page 19: Технологии разработки ПО

Системы хранения знаний

19

Цель – хранение полезной информации по проекту: o Документация

o Описания алгоритмов

o Отчеты

o Планы

Полезные возможности: o Поддержка версионности документов

o Рассылка уведомлений об изменениях

Page 20: Технологии разработки ПО

Стандарты кодирования (Coding standards, style guildelines)

20

vs

Page 21: Технологии разработки ПО

Стандарты кодирования (Coding standards, style guildelines)

21

Не важно какие, главное – чтобы были

Код 1 раз пишется, но 100 раз читается

Пример - Google C++ Style Guide

http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml

Page 22: Технологии разработки ПО

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

22

Ручное написание комментариев

Системы автоматической генерации документации, например, Doxygen http://www.stack.nl/~dimitri/doxygen/index.html

Page 23: Технологии разработки ПО

Doxygen - пример

23

Код:

Page 24: Технологии разработки ПО

Doxygen - пример

24

HTML-документация (фрагмент):

Page 25: Технологии разработки ПО

Ревью кода (Code review)

25

Цель – выявление дефектов и потенциальных проблем на как можно более ранней стадии, улучшение процесса разработки, контроль качества кода

Page 26: Технологии разработки ПО

Ревью кода (Code review)

26

Возможны разные формы: Формальные проверки

Неформальный контроль

Совместное программирование

Page 27: Технологии разработки ПО

Формальные ревью кода

27

Пример – Review Board http://www.reviewboard.org/

Review Board Repository

Author

Reviewer

Initial commit Reviewed commit

Page 28: Технологии разработки ПО

Тестирование и контроль качества ПО

28

Page 29: Технологии разработки ПО

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

29

Как убедиться, что разрабатываемая система делает то, что должна?

Как проверить, что исправления известных дефектов не породили новые?

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

Page 30: Технологии разработки ПО

Уровни тестирования

30

Тестирование в процессе написания кода

Модульное и интеграционное тестирование

Регрессионные тесты

Ручное тестирование

Page 31: Технологии разработки ПО

Модульное тестирование (Unit tests)

31

Цель – тестирование отдельных функций и компонентов системы, а также их взаимодействия (интеграционные тесты)

Тесты пишутся разработчиками

Для C++ - Google Test: http://code.google.com/p/googletest/

Иногда поддерживается на уровне языка

Page 32: Технологии разработки ПО

Модульное тестирование (Unit tests)

32

Вопрос - какой это язык программирования?

Page 33: Технологии разработки ПО

Модульное тестирование (Unit tests)

33

Язык D! http://dlang.org

Page 34: Технологии разработки ПО

Модульное тестирование (Unit tests)

34

Пример (C++)

Page 35: Технологии разработки ПО

Test-Driven Development

35

Идея – сначала пишем тест, потом реализуем функциональность

Page 36: Технологии разработки ПО

Test-Driven Development

36

Достоинства: o Требования прописываются заранее, а не «на ходу»

o Ошибки выявляются на самом раннем этапе

o Сильно упрощается рефакторинг

o Тесты служат полноценной документацией (например, в D это выведено на уровень языка)

Критика: o Написание теста не всегда тривиально

o При хорошем покрытии объем тестового кода сопоставим с объемом кода самой системы, а иногда и значительно превышает его

Page 37: Технологии разработки ПО

Регрессионное тестирование (Regression tests)

37

Цели: o Убедиться, что то, что работало, не сломалось

o Убедиться, что результат работы системы соответствует спецификации

o Контроль результатов работы алгоритмов, батч-тесты

Тесты создаются как разработчиками, так и тестерами

Могут быть как автоматическими, так и ручными

Page 38: Технологии разработки ПО

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

38

Идея – регулярная (непрерывная) сборка актуальной версии продукта и контроль изменений

Page 39: Технологии разработки ПО

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

39

Основные принципы:

Наличие единого репозитория кода

Полная автоматизация сборки

Каждая сборка должна подвергаться набору тестов

Регулярные небольшие commit’ы, не «ломающие» сборку

Легкий доступ к результатам каждой сборки (инсталляторы, отчеты и т.п.)

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

Page 40: Технологии разработки ПО

Организация процесса разработки

40

Page 41: Технологии разработки ПО

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

41

Какой методологии разработки придерживаться?

Как организовать процесс выпуска стабильного релиза?

Как обеспечить эффективную работу каждого члена команды и команды в целом?

Page 42: Технологии разработки ПО

Методологии разработки ПО

42

Водопадная модель (waterfall model)

Спиральная модель (spiral model)

Итерационная модель (iterative model)

Гибкая разработка (agile development)

Page 43: Технологии разработки ПО

Водопадная модель

43

Все спланировали – и реализовали

Page 44: Технологии разработки ПО

Спиральная модель

44

Постепенное уточнение требований путем прототипирования, потом реализация

Page 45: Технологии разработки ПО

Итерационная модель

45

Постепенное наращивание функциональности, итерация за итерацией

Page 46: Технологии разработки ПО

Гибкая разработка

46

Целая философия, основанная на итерационной модели. Частые итерации (спринты), кросс-функциональные команды, работа в условиях постоянно меняющихся требований

Page 47: Технологии разработки ПО

Гибкая разработка

47

Основные постулаты («Agile manifesto»): • Люди и взаимодействие важнее процессов и инструментов; • Работающий продукт важнее исчерпывающей

документации; • Сотрудничество с заказчиком важнее согласования условий

контракта; • Готовность к изменениям важнее следования

первоначальному плану. Примеры: • SCRUM • Kanban • Extreme programming

Page 48: Технологии разработки ПО

Жизненный цикл релиза (Release life cycle)

48

Release manager – специальный человек, отвечающий за процесс выпуска релиза

time

Release 1.7

active development bug fixing,

code stabilization emergency fixes only

feature freeze

code freeze

Nightly bui ld 1

Nightly bui ld N

Feature complete

Release candidate

Release 1.8

development branch

release branch

Page 49: Технологии разработки ПО

Напоследок

49

Page 50: Технологии разработки ПО

Что отличает лучших разработчиков

50

Умение выдавать законченный результат

Кругозор o Знание различных языков, инструментов и технологий

o Умение находить правильные подходы к возникающим задачам, использовать подходящие инструменты

o Стремление постоянно поддерживать свои знания в актуальном состоянии

Понимание высокоуровневых целей и умение мыслить в терминах «business value»

Инициативность

Самостоятельность

Умение оценивать сроки и выдерживать их

Умение общаться с людьми (коллегами, заказчиками, пользователями)

Умение четко и структурированно рассказывать о своей работе

Page 51: Технологии разработки ПО

51

Удачной разработки!