Технологии разработки ПО
-
Upload
anton-konushin -
Category
Education
-
view
955 -
download
4
description
Transcript of Технологии разработки ПО
![Page 1: Технологии разработки ПО](https://reader033.fdocuments.net/reader033/viewer/2022052823/55509409b4c905235b8b53a4/html5/thumbnails/1.jpg)
Технологии разработки ПО Кривовязь Глеб
1
![Page 2: Технологии разработки ПО](https://reader033.fdocuments.net/reader033/viewer/2022052823/55509409b4c905235b8b53a4/html5/thumbnails/2.jpg)
Мотивация
2
Профессиональная разработка ≠ просто написание кода
![Page 3: Технологии разработки ПО](https://reader033.fdocuments.net/reader033/viewer/2022052823/55509409b4c905235b8b53a4/html5/thumbnails/3.jpg)
Инфраструктура разработки
3
![Page 4: Технологии разработки ПО](https://reader033.fdocuments.net/reader033/viewer/2022052823/55509409b4c905235b8b53a4/html5/thumbnails/4.jpg)
Основные проблемы
4
Как организовать совместную работу с кодом?
Как систематизировать задачи?
Где и в каком виде хранить всю информацию по проекту?
Как оформлять код?
Как создавать документацию?
Как контролировать качество кода?
…
![Page 5: Технологии разработки ПО](https://reader033.fdocuments.net/reader033/viewer/2022052823/55509409b4c905235b8b53a4/html5/thumbnails/5.jpg)
Системы контроля версий (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: Технологии разработки ПО](https://reader033.fdocuments.net/reader033/viewer/2022052823/55509409b4c905235b8b53a4/html5/thumbnails/6.jpg)
Системы контроля версий (VCS, Version Control Systems)
6
![Page 7: Технологии разработки ПО](https://reader033.fdocuments.net/reader033/viewer/2022052823/55509409b4c905235b8b53a4/html5/thumbnails/7.jpg)
7
![Page 8: Технологии разработки ПО](https://reader033.fdocuments.net/reader033/viewer/2022052823/55509409b4c905235b8b53a4/html5/thumbnails/8.jpg)
8
Создан в 2005 г. для оптимизации разработки ядра Linux
Построен по принципу файловой системы
Большинство операций – локальные и очень быстрые («the
gods of speed have blessed Git with unworldly powers» )
Идеально подходит для активной работы с ветками
Обладает всеми преимуществами распределенных систем
![Page 9: Технологии разработки ПО](https://reader033.fdocuments.net/reader033/viewer/2022052823/55509409b4c905235b8b53a4/html5/thumbnails/9.jpg)
9
Каждый commit – «слепок» файловой системы (snapshot)
Актуальные версии файлов хранятся целиком (blobs)
![Page 10: Технологии разработки ПО](https://reader033.fdocuments.net/reader033/viewer/2022052823/55509409b4c905235b8b53a4/html5/thumbnails/10.jpg)
10
Вся история разработки – граф commit’ов
Ветка (branch) = указатель на commit (41 байт!). HEAD –
текущая ветка
![Page 11: Технологии разработки ПО](https://reader033.fdocuments.net/reader033/viewer/2022052823/55509409b4c905235b8b53a4/html5/thumbnails/11.jpg)
11
Находимся в ветке master
![Page 12: Технологии разработки ПО](https://reader033.fdocuments.net/reader033/viewer/2022052823/55509409b4c905235b8b53a4/html5/thumbnails/12.jpg)
12
Создаем ветку dev
![Page 13: Технологии разработки ПО](https://reader033.fdocuments.net/reader033/viewer/2022052823/55509409b4c905235b8b53a4/html5/thumbnails/13.jpg)
13
Делаем checkout ветки dev
![Page 14: Технологии разработки ПО](https://reader033.fdocuments.net/reader033/viewer/2022052823/55509409b4c905235b8b53a4/html5/thumbnails/14.jpg)
14
Делаем commit
![Page 15: Технологии разработки ПО](https://reader033.fdocuments.net/reader033/viewer/2022052823/55509409b4c905235b8b53a4/html5/thumbnails/15.jpg)
15
Возвращаемся в ветку master (делаем checkout)
![Page 16: Технологии разработки ПО](https://reader033.fdocuments.net/reader033/viewer/2022052823/55509409b4c905235b8b53a4/html5/thumbnails/16.jpg)
16
Делаем commit
![Page 17: Технологии разработки ПО](https://reader033.fdocuments.net/reader033/viewer/2022052823/55509409b4c905235b8b53a4/html5/thumbnails/17.jpg)
17
http://git-scm.com/book
![Page 18: Технологии разработки ПО](https://reader033.fdocuments.net/reader033/viewer/2022052823/55509409b4c905235b8b53a4/html5/thumbnails/18.jpg)
Системы трекинга задач и дефектов (Issue trackers)
18
Цель – организация задач, расстановка приоритетов
Issue – может быть task, bug, improvement и т.д.
Типичные характеристики issue: o Description
o Reporter
o Assignee
o Project
o Priority
o Due date
o …
![Page 19: Технологии разработки ПО](https://reader033.fdocuments.net/reader033/viewer/2022052823/55509409b4c905235b8b53a4/html5/thumbnails/19.jpg)
Системы хранения знаний
19
Цель – хранение полезной информации по проекту: o Документация
o Описания алгоритмов
o Отчеты
o Планы
Полезные возможности: o Поддержка версионности документов
o Рассылка уведомлений об изменениях
![Page 20: Технологии разработки ПО](https://reader033.fdocuments.net/reader033/viewer/2022052823/55509409b4c905235b8b53a4/html5/thumbnails/20.jpg)
Стандарты кодирования (Coding standards, style guildelines)
20
vs
![Page 21: Технологии разработки ПО](https://reader033.fdocuments.net/reader033/viewer/2022052823/55509409b4c905235b8b53a4/html5/thumbnails/21.jpg)
Стандарты кодирования (Coding standards, style guildelines)
21
Не важно какие, главное – чтобы были
Код 1 раз пишется, но 100 раз читается
Пример - Google C++ Style Guide
http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml
![Page 22: Технологии разработки ПО](https://reader033.fdocuments.net/reader033/viewer/2022052823/55509409b4c905235b8b53a4/html5/thumbnails/22.jpg)
Документирование кода
22
Ручное написание комментариев
Системы автоматической генерации документации, например, Doxygen http://www.stack.nl/~dimitri/doxygen/index.html
![Page 23: Технологии разработки ПО](https://reader033.fdocuments.net/reader033/viewer/2022052823/55509409b4c905235b8b53a4/html5/thumbnails/23.jpg)
Doxygen - пример
23
Код:
![Page 24: Технологии разработки ПО](https://reader033.fdocuments.net/reader033/viewer/2022052823/55509409b4c905235b8b53a4/html5/thumbnails/24.jpg)
Doxygen - пример
24
HTML-документация (фрагмент):
![Page 25: Технологии разработки ПО](https://reader033.fdocuments.net/reader033/viewer/2022052823/55509409b4c905235b8b53a4/html5/thumbnails/25.jpg)
Ревью кода (Code review)
25
Цель – выявление дефектов и потенциальных проблем на как можно более ранней стадии, улучшение процесса разработки, контроль качества кода
![Page 26: Технологии разработки ПО](https://reader033.fdocuments.net/reader033/viewer/2022052823/55509409b4c905235b8b53a4/html5/thumbnails/26.jpg)
Ревью кода (Code review)
26
Возможны разные формы: Формальные проверки
Неформальный контроль
Совместное программирование
![Page 27: Технологии разработки ПО](https://reader033.fdocuments.net/reader033/viewer/2022052823/55509409b4c905235b8b53a4/html5/thumbnails/27.jpg)
Формальные ревью кода
27
Пример – Review Board http://www.reviewboard.org/
Review Board Repository
Author
Reviewer
Initial commit Reviewed commit
![Page 28: Технологии разработки ПО](https://reader033.fdocuments.net/reader033/viewer/2022052823/55509409b4c905235b8b53a4/html5/thumbnails/28.jpg)
Тестирование и контроль качества ПО
28
![Page 29: Технологии разработки ПО](https://reader033.fdocuments.net/reader033/viewer/2022052823/55509409b4c905235b8b53a4/html5/thumbnails/29.jpg)
Основные проблемы
29
Как убедиться, что разрабатываемая система делает то, что должна?
Как проверить, что исправления известных дефектов не породили новые?
Как контролировать изменения характеристик работы системы в результате вносимых исправлений?
…
![Page 30: Технологии разработки ПО](https://reader033.fdocuments.net/reader033/viewer/2022052823/55509409b4c905235b8b53a4/html5/thumbnails/30.jpg)
Уровни тестирования
30
Тестирование в процессе написания кода
Модульное и интеграционное тестирование
Регрессионные тесты
Ручное тестирование
![Page 31: Технологии разработки ПО](https://reader033.fdocuments.net/reader033/viewer/2022052823/55509409b4c905235b8b53a4/html5/thumbnails/31.jpg)
Модульное тестирование (Unit tests)
31
Цель – тестирование отдельных функций и компонентов системы, а также их взаимодействия (интеграционные тесты)
Тесты пишутся разработчиками
Для C++ - Google Test: http://code.google.com/p/googletest/
Иногда поддерживается на уровне языка
![Page 32: Технологии разработки ПО](https://reader033.fdocuments.net/reader033/viewer/2022052823/55509409b4c905235b8b53a4/html5/thumbnails/32.jpg)
Модульное тестирование (Unit tests)
32
Вопрос - какой это язык программирования?
![Page 33: Технологии разработки ПО](https://reader033.fdocuments.net/reader033/viewer/2022052823/55509409b4c905235b8b53a4/html5/thumbnails/33.jpg)
Модульное тестирование (Unit tests)
33
Язык D! http://dlang.org
![Page 34: Технологии разработки ПО](https://reader033.fdocuments.net/reader033/viewer/2022052823/55509409b4c905235b8b53a4/html5/thumbnails/34.jpg)
Модульное тестирование (Unit tests)
34
Пример (C++)
![Page 35: Технологии разработки ПО](https://reader033.fdocuments.net/reader033/viewer/2022052823/55509409b4c905235b8b53a4/html5/thumbnails/35.jpg)
Test-Driven Development
35
Идея – сначала пишем тест, потом реализуем функциональность
![Page 36: Технологии разработки ПО](https://reader033.fdocuments.net/reader033/viewer/2022052823/55509409b4c905235b8b53a4/html5/thumbnails/36.jpg)
Test-Driven Development
36
Достоинства: o Требования прописываются заранее, а не «на ходу»
o Ошибки выявляются на самом раннем этапе
o Сильно упрощается рефакторинг
o Тесты служат полноценной документацией (например, в D это выведено на уровень языка)
Критика: o Написание теста не всегда тривиально
o При хорошем покрытии объем тестового кода сопоставим с объемом кода самой системы, а иногда и значительно превышает его
![Page 37: Технологии разработки ПО](https://reader033.fdocuments.net/reader033/viewer/2022052823/55509409b4c905235b8b53a4/html5/thumbnails/37.jpg)
Регрессионное тестирование (Regression tests)
37
Цели: o Убедиться, что то, что работало, не сломалось
o Убедиться, что результат работы системы соответствует спецификации
o Контроль результатов работы алгоритмов, батч-тесты
Тесты создаются как разработчиками, так и тестерами
Могут быть как автоматическими, так и ручными
![Page 38: Технологии разработки ПО](https://reader033.fdocuments.net/reader033/viewer/2022052823/55509409b4c905235b8b53a4/html5/thumbnails/38.jpg)
Непрерывная интеграция (Continuous integration)
38
Идея – регулярная (непрерывная) сборка актуальной версии продукта и контроль изменений
![Page 39: Технологии разработки ПО](https://reader033.fdocuments.net/reader033/viewer/2022052823/55509409b4c905235b8b53a4/html5/thumbnails/39.jpg)
Непрерывная интеграция (Continuous integration)
39
Основные принципы:
Наличие единого репозитория кода
Полная автоматизация сборки
Каждая сборка должна подвергаться набору тестов
Регулярные небольшие commit’ы, не «ломающие» сборку
Легкий доступ к результатам каждой сборки (инсталляторы, отчеты и т.п.)
Автоматическое развертывание
![Page 40: Технологии разработки ПО](https://reader033.fdocuments.net/reader033/viewer/2022052823/55509409b4c905235b8b53a4/html5/thumbnails/40.jpg)
Организация процесса разработки
40
![Page 41: Технологии разработки ПО](https://reader033.fdocuments.net/reader033/viewer/2022052823/55509409b4c905235b8b53a4/html5/thumbnails/41.jpg)
Основные проблемы
41
Какой методологии разработки придерживаться?
Как организовать процесс выпуска стабильного релиза?
Как обеспечить эффективную работу каждого члена команды и команды в целом?
…
![Page 42: Технологии разработки ПО](https://reader033.fdocuments.net/reader033/viewer/2022052823/55509409b4c905235b8b53a4/html5/thumbnails/42.jpg)
Методологии разработки ПО
42
Водопадная модель (waterfall model)
Спиральная модель (spiral model)
Итерационная модель (iterative model)
Гибкая разработка (agile development)
![Page 43: Технологии разработки ПО](https://reader033.fdocuments.net/reader033/viewer/2022052823/55509409b4c905235b8b53a4/html5/thumbnails/43.jpg)
Водопадная модель
43
Все спланировали – и реализовали
![Page 44: Технологии разработки ПО](https://reader033.fdocuments.net/reader033/viewer/2022052823/55509409b4c905235b8b53a4/html5/thumbnails/44.jpg)
Спиральная модель
44
Постепенное уточнение требований путем прототипирования, потом реализация
![Page 45: Технологии разработки ПО](https://reader033.fdocuments.net/reader033/viewer/2022052823/55509409b4c905235b8b53a4/html5/thumbnails/45.jpg)
Итерационная модель
45
Постепенное наращивание функциональности, итерация за итерацией
![Page 46: Технологии разработки ПО](https://reader033.fdocuments.net/reader033/viewer/2022052823/55509409b4c905235b8b53a4/html5/thumbnails/46.jpg)
Гибкая разработка
46
Целая философия, основанная на итерационной модели. Частые итерации (спринты), кросс-функциональные команды, работа в условиях постоянно меняющихся требований
![Page 47: Технологии разработки ПО](https://reader033.fdocuments.net/reader033/viewer/2022052823/55509409b4c905235b8b53a4/html5/thumbnails/47.jpg)
Гибкая разработка
47
Основные постулаты («Agile manifesto»): • Люди и взаимодействие важнее процессов и инструментов; • Работающий продукт важнее исчерпывающей
документации; • Сотрудничество с заказчиком важнее согласования условий
контракта; • Готовность к изменениям важнее следования
первоначальному плану. Примеры: • SCRUM • Kanban • Extreme programming
![Page 48: Технологии разработки ПО](https://reader033.fdocuments.net/reader033/viewer/2022052823/55509409b4c905235b8b53a4/html5/thumbnails/48.jpg)
Жизненный цикл релиза (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: Технологии разработки ПО](https://reader033.fdocuments.net/reader033/viewer/2022052823/55509409b4c905235b8b53a4/html5/thumbnails/49.jpg)
Напоследок
49
![Page 50: Технологии разработки ПО](https://reader033.fdocuments.net/reader033/viewer/2022052823/55509409b4c905235b8b53a4/html5/thumbnails/50.jpg)
Что отличает лучших разработчиков
50
Умение выдавать законченный результат
Кругозор o Знание различных языков, инструментов и технологий
o Умение находить правильные подходы к возникающим задачам, использовать подходящие инструменты
o Стремление постоянно поддерживать свои знания в актуальном состоянии
Понимание высокоуровневых целей и умение мыслить в терминах «business value»
Инициативность
Самостоятельность
Умение оценивать сроки и выдерживать их
Умение общаться с людьми (коллегами, заказчиками, пользователями)
Умение четко и структурированно рассказывать о своей работе
![Page 51: Технологии разработки ПО](https://reader033.fdocuments.net/reader033/viewer/2022052823/55509409b4c905235b8b53a4/html5/thumbnails/51.jpg)
51
Удачной разработки!