====== Технологии разработки программного обеспечения ====== Вариант курса от ИГУ, кафедра ИТ: https://files.isu.ru/filearchive/edu_files/B1.V.07_Tekhnologii_razrabotki_programmnogo_obespechenija_4824.pdf **DevOps-вариант курса** ===== Содержание дисциплины ===== **Образовательная программа:** "Математическое обеспечение и администрирование информационных систем" **Курс:** 3, Бакалавриат **Акцент:** Интеграция современных практик DevOps и CI/CD === Тема 1. Современные тенденции разработки ИС. Введение в DevOps === * Понятие ИС: от монолита к сервисам и микросервисной архитектуре. * Эволюция подходов к разработке: от Waterfall к Agile и DevOps. * Основные современные тенденции: Cloud-Native, Infrastructure as Code (IaC), Shift-Left. * Определение DevOps: культура, практики, инструменты. Три пути DevOps (Flow, Feedback, Learning). * Факторы, влияющие на развитие технологий (скорость, качество, стоимость, сложность) и ответ DevOps на них. * Виды требований в DevOps-контексте: функциональные, нефункциональные, сквозные (reliability, performance, scalability). * Показатели эффективности проекта (DORA Four Key Metrics): Deployment Frequency, Lead Time, MTTR, Change Failure Rate. [[tech:dssd1|Лекция 1]]. == Лабораторная 1 == **Цель** - изучить/вспомнить процесс разработки программ с использованием тестов (test-driven development) **Задача** - разработать простую программу при помощи цикла "тест -> реализация теста" (как в экстремальном программировании). * На каждом шаге создавать коммит гит. * Использовать Gitverse от Сбера Или Github. * Программа мб старая, тогда на новом для вас языке программирования, либо новая программа. * Можно использовать все инструенты порождения кода, документации, поиска уязвимостей и т.п.: учимся не программировать а разрабатывать проект. * Коммит делать после реализации каждого теста и реализации тестируемой функциональности. Если забыли вдруг их разделить ничего страшного. * В проекте (лабы) сделать папку doc, где на markdown пишите садержательную часть отчета - требования к продукту, список тестов, реализованных функций, примеры и замечания какие-то. - Добавить раздел "Заключение" в отчет. === Тема 2. Жизненный цикл ПО в эпоху DevOps === * Этапы жизненного цикла: от классического каскада к бесконечному циклу DevOps (Plan, Code, Build, Test, Release, Deploy, Operate, Monitor). * Итеративная и инкрементальная модели как основа для Agile. * Гибкие методологии (Agile, Scrum, Kanban) как культурный фундамент DevOps. * Методология CI/CD (Continuous Integration / Continuous Delivery): принципы, преимущества, инструменты. * Конвейер поставки (Pipeline) как центральная метафора и артефакт разработки. === Тема 3. Планирование и управление проектами с учетом DevOps === * Структура затрат в DevOps: инвестиции в автоматизацию (CAPEX) vs операционные расходы (OPEX). * Управление сложностью: закон Конвея, микросервисы, стандартизация. * Метрики DevOps (DORA) и их использование для управления процессом. * Модель оценки трудоемкости COCOMO II: как практики DevOps влияют на факторы масштаба. * Автоматизация проектирования: от САПР ПО к Infrastructure as Code (Terraform, Ansible) и Configuration as Code. === Тема 4. Обеспечение качества и хранение данных в DevOps === * Сдвиг качества влево (Shift-Left Testing): интеграция тестирования на ранние этапы ЖЦ. * Автоматизированное тестирование: виды (unit, integration, e2e), инструменты, место в CI/CD-конвейере. * Системы отслеживания ошибок (Jira, GitLab Issues): интеграция с инструментами разработки. * Quality Assurance vs Quality Engineering: эволюция роли. * Эффективное хранение и обработка данных в микросервисной архитектуре: API, кэширование, управление состоянием. === Тема 5. Коллективная работа и контроль версий (как основа DevOps) === * Системы контроля версий (Git): Everything as Code (код, конфиги, инфраструктура). * Модели ветвления: GitFlow vs Trunk-Based Development для CI. * Интегрированные платформы (GitLab, GitHub): управление задачами, кодом и конвейерами. * Системы совместной работы с документацией (Confluence, Wiki): живая документация. * Средства общения и интеграции (Slack, Teams): оповещения о событиях в конвейере. === Тема 6. Организация труда в DevOps-культуре === * Типизация специалистов: стирание граней между Dev, Ops и QA. Роль DevOps-инженера. * Культура взаимной ответственности (You build it, you run it). * Проблема организационных silos (изолятов) и переход к кросс-функциональным командам. * Закон Конвея в DevOps: как архитектура системы отражает структуру коммуникации автоматизированных команд. * Обзор организационных моделей (матричная, главного хирурга). === Тема 7. Управление качеством и стандарты в непрерывной поставке === * Характеристики качества ПО: надежность (Reliability), сопровождаемость (Maintainability), удобство эксплуатации (Operability). * Методики повышения качества: автоматизированное тестирование, статический анализ (SAST), непрерывный код-ревью. * Главный закон контроля качества и его применение через автоматизацию. * Стандарты: эволюция от CMM к стандартам, описывающим DevOps-практики (ISO/IEC 27001, 25010). === Тема 8. Документирование и сопровождение в автоматизированном процессе === * Документирование как живой процесс: документация рядом с кодом (в репозитории). * Автоматизация документирования: генерация API-документации (Swagger/OpenAPI). * ЕСПД в условиях Agile/DevOps. * Основные задачи сопровождения: автоматизация обновлений и исправлений (патчи через CI/CD). * Условия прекращения сопровождения: архивация проекта вместе с его конвейерами. === Тема 9. Реинжиниринг и модернизация в контексте DevOps === * Реинжиниринг как основа для внедрения DevOps: модернизация legacy-систем для автоматизации. * Стратегии модернизации: Rehost (подъем и сдвиг), Refactor, Rearchitect, Rebuild. * Инструменты для контейнеризации (Docker) и оркестрации (Kubernetes) как ключевые технологии для переноса legacy-приложений. === Тема 10. Гибкие методологии и практики DevOps === * Методология гибкой разработки (Agile) как культурная основа DevOps. * Экстремальное программирование (XP): практики (TDD, рефакторинг, CI) как техническая основа DevOps. * Обзор практик DevOps: * **Continuous Integration (CI):** автоматическая сборка и тестирование. * **Continuous Delivery (CD):** готовность к релизу в любой момент. * **Infrastructure as Code (IaC):** управление инфраструктурой через код. * **Мониторинг и обратная связь (Monitoring & Logging):** использование метрик для принятия решений. * **Безопасность (DevSecOps):** интеграция безопасности в процесс. ===== Лекция 1. Обзор дисциплины с точки зрения DevOps ===== ===== Литература ===== Оформленный по ГОСТу список литературы для обновленного содержания курса. Список составлен в соответствии с **ГОСТ 7.1-2003 "Библиографическая запись. Библиографическое описание. Общие требования и правила составления"** и **ГОСТ Р 7.0.100-2018 "Библиографическая запись. Библиографическое описание"** (используются заглавия описания). ### **Список литературы** **Основная литература** 1. Бек, К. Экстремальное программирование: разработка через тестирование / К. Бек ; пер. с англ. С. А. Черник. – Санкт-Петербург : Питер, 2002. – 224 с. – ISBN 5-318-00295-9. 2. Ким, Д. Феникс. Проект по DevOps. Как помочь бизнесу побеждать : [роман] / Джин Ким, Джез Хамбл, Патрик Дебуа ; пер. с англ. А. А. Слинкина. – Москва : Альпина Паблишер, 2019. – 362 с. – ISBN 978-5-9614-2252-8. 3. Хамбл, Д. Непрерывное развертывание ПО. Автоматизация процессов сборки, тестирования и внедрения / Джез Хамбл, Дэвид Фарли ; пер. с англ. С. А. Черник, А. В. Краснощекова. – Москва : Диалектика, 2021. – 496 с. – ISBN 978-5-907203-84-8. 4. Ким, Д. Ускоряйтесь. Наука DevOps: как создавать и масштабировать высокопроизводительные цифровые организации / Джин Ким, Джез Хамбл, Николь Форсгрен ; пер. с англ. А. А. Слинкина. – Москва : Альпина Паблишер, 2020. – 348 с. – ISBN 978-5-9614-3416-3. 5. Лимончелли, Т. DevOps для императивных организаций / Томас Лимончелли, Дженнифер Дэвис, Кейтлин Нолан ; пер. с англ. А. В. Логуна. – Москва : Диалектика, 2022. – 384 с. – ISBN 978-5-907496-17-1. **Дополнительная литература** 6. Блэк, Р. Ключевые процессы тестирования. Планирование, подготовка, проведение, совершенствование / Р. Блэк ; пер. с англ. А. В. Логуна. – Москва : Лори, 2006. – 728 с. – ISBN 5-85582-287-2. 7. Брукс, Ф. Мифический человеко-месяц, или Как создаются программные системы / Ф. Брукс ; пер. с англ. С. А. Черник, Т. В. Логуновой. – Санкт-Петербург : Символ-Плюс, 2019. – 336 с. – ISBN 978-5-93286-208-9. 8. Ван Вугт, С. Основы Linux. Руководство для начинающих / С. ван Вугт ; пер. с англ. А. В. Журавлева. – Москва : ДМК Пресс, 2023. – 264 с. – ISBN 978-5-93700-169-1. 9. Дасмахапатра, К. Kubernetes для DevOps. Развертывание, запуск и масштабирование в облаке / К. Дасмахапатра ; пер. с англ. А. В. Логуна. – Москва : Диалектика, 2022. – 448 с. – ISBN 978-5-907496-01-0. 10. Копленд, Л. Экстремальное программирование: разработка через тестирование / Л. Копленд ; пер. с англ. С. А. Черник. – Москва : Вильямс, 2005. – 320 с. – ISBN 5-8459-0776-3. 11. Таненбаум, Э. Современные операционные системы / Э. Таненбаум, Х. Бос ; пер. с англ. А. В. Логуна, Т. В. Логуновой. – 4-е изд. – Санкт-Петербург : Питер, 2015. – 1120 с. – ISBN 978-5-496-01395-7. 12. Альтшуллер, Г. С. Найти идею. Введение в ТРИЗ – теорию решения изобретательских задач / Г. С. Альтшуллер. – 3-е изд. – Москва : Альпина Паблишер, 2021. – 402 с. – ISBN 978-5-9614-7350-6. **Онлайн-документация и стандарты** 13. GitLab CI/CD Documentation : [официальная документация] // GitLab. – URL: `https://docs.gitlab.com/ee/ci/` (дата обращения: 25.05.2024). 14. Kubernetes Documentation : [официальная документация] // The Kubernetes Authors. – URL: `https://kubernetes.io/docs/` (дата обращения: 25.05.2024). 15. Terraform by HashiCorp Documentation : [официальная документация] // HashiCorp. – URL: `https://developer.hashicorp.com/terraform/docs` (дата обращения: 25.05.2024). 16. Единая система программной документации (ЕСПД). Стандарты: ГОСТ 19.*, ГОСТ 34.* // Федеральное агентство по техническому регулированию и метрологии. – Москва : Стандартинформ. – (Серия стандартов). **Электронные образовательные и отраслевые ресурсы** 17. Хабрахабр : [отрасловой портал] // Habr.com. – Разделы: «DevOps», «Разработка ПО». – URL: `https://habr.com/ru/flows/develop/` (дата обращения: 25.05.2024). 18. Stepik : [образовательная платформа] // Stepik.org. – Курсы: «Введение в Linux», «Основы Git» и др. – URL: `https://stepik.org/catalog` (дата обращения: 25.05.2024).