|
| 1 | +# Жизненный цикл программного обеспечения |
| 2 | + |
| 3 | +## Введение |
| 4 | + |
| 5 | +Жизненный цикл программного обеспечения (ПО) — это процесс, который охватывает все этапы разработки, от возникновения идеи до завершения поддержки продукта. Понимание этих этапов помогает создавать качественное, надежное и востребованное программное обеспечение. |
| 6 | + |
| 7 | +## Основные стадии жизненного цикла |
| 8 | + |
| 9 | +Жизненный цикл ПО состоит из шести основных стадий: |
| 10 | + |
| 11 | +1. **Анализ** |
| 12 | +2. **Проектирование** |
| 13 | +3. **Разработка** |
| 14 | +4. **Тестирование** |
| 15 | +5. **Релиз** |
| 16 | +6. **Поддержка** |
| 17 | + |
| 18 | +## Анализ и планирование |
| 19 | + |
| 20 | +На этапе анализа происходит сбор и анализ требований к будущему продукту. Результатом этого этапа является документ **Software Requirements Specification (SRS)**. |
| 21 | + |
| 22 | +### IEEE 830-1998 |
| 23 | + |
| 24 | +Это стандарт, который рекомендует структуру для документирования требований к ПО. Примерная структура SRS: |
| 25 | + |
| 26 | +1. Назначение |
| 27 | +2. Общее описание |
| 28 | +3. Конкретные требования |
| 29 | +4. Интерфейсы |
| 30 | +5. Ограничения |
| 31 | +6. Атрибуты качества |
| 32 | + |
| 33 | +### Ключевые задачи этапа анализа: |
| 34 | + |
| 35 | +- Планирование |
| 36 | +- Определение требований |
| 37 | +- Установка целей |
| 38 | +- Планирование ресурсов |
| 39 | +- Утверждение сроков и бюджетов |
| 40 | + |
| 41 | +## Проектирование |
| 42 | + |
| 43 | +На этапе проектирования разрабатывается архитектура системы и интерфейсы на основе технического задания. |
| 44 | + |
| 45 | +### Design-review |
| 46 | + |
| 47 | +Проводится для оценки целесообразности реализации системы и качества её проектирования. Обсуждаются: |
| 48 | + |
| 49 | +- Что планируется сделать |
| 50 | +- Мотивация (цели, заказчики, пользователи) |
| 51 | +- Сравнение с аналогами |
| 52 | +- Roadmap |
| 53 | + |
| 54 | +### Security-review |
| 55 | + |
| 56 | +Проводится всегда, но особенно важен в случаях: |
| 57 | + |
| 58 | +- Создания нового сервиса |
| 59 | +- Работы с финансовыми функциями |
| 60 | +- Передачи конфиденциальных данных |
| 61 | +- Реализации аутентификации/авторизации |
| 62 | + |
| 63 | +### MVP (Minimum Viable Product) |
| 64 | + |
| 65 | +Минимально жизнеспособный продукт — версия продукта с минимальными, но достаточными функциями для удовлетворения первых потребителей. |
| 66 | + |
| 67 | +## Разработка |
| 68 | + |
| 69 | +### Системы контроля версий (VCS) |
| 70 | + |
| 71 | +VCS — программное обеспечение для управления изменениями в документах и коде. |
| 72 | + |
| 73 | +**Преимущества VCS:** |
| 74 | + |
| 75 | +- Хранение нескольких версий |
| 76 | +- Возврат к предыдущим версиям |
| 77 | +- Отслеживание авторов изменений |
| 78 | +- Совместная работа |
| 79 | + |
| 80 | +#### История VCS: |
| 81 | + |
| 82 | +- 1960-е: IEBUPDATE |
| 83 | +- 1970-е: SCCS |
| 84 | +- 1980-е: RCS, CVS |
| 85 | +- 1990-е: SVN, Git |
| 86 | + |
| 87 | +#### CVCS vs DVCS |
| 88 | + |
| 89 | +- **CVCS** (Centralized): централизованное хранилище, требуется подключение к серверу |
| 90 | +- **DVCS** (Distributed): каждый разработчик имеет полную копию репозитория |
| 91 | + |
| 92 | +### Git |
| 93 | + |
| 94 | +Создан Линусом Торвальдсом в 2005 году для разработки ядра Linux. |
| 95 | + |
| 96 | +#### Изучение Git |
| 97 | + |
| 98 | +Рекомендуется изучить Git с помощью ресурсов: |
| 99 | + |
| 100 | +- Официальная документация |
| 101 | +- Интерактивные tutorials |
| 102 | +- Практика работы с ветками |
| 103 | + |
| 104 | +#### Ветвление в Git |
| 105 | + |
| 106 | +- Легковесное |
| 107 | +- Мгновенное |
| 108 | +- Поощряется частое ветвление и слияние |
| 109 | + |
| 110 | +#### Методики ветвления: |
| 111 | + |
| 112 | +- Git Flow |
| 113 | +- GitHub Flow |
| 114 | +- GitLab Flow |
| 115 | + |
| 116 | +### Code-review |
| 117 | + |
| 118 | +**Pull Request (PR)** — запрос на слияние изменений. Позволяет: |
| 119 | + |
| 120 | +- Обеспечить видимость изменений |
| 121 | +- Проводить обсуждение до слияния |
| 122 | +- Автоматизировать проверки |
| 123 | + |
| 124 | +### Монорепозиторий |
| 125 | + |
| 126 | +Хранение кода нескольких проектов в одном репозитории с единой системой сборки, тестирования и развертывания. |
| 127 | + |
| 128 | +**Преимущества:** |
| 129 | + |
| 130 | +- Упрощение управления зависимостями |
| 131 | +- Упрощение межкомандного взаимодействия |
| 132 | +- Централизованное управление версиями |
| 133 | + |
| 134 | +## Тестирование |
| 135 | + |
| 136 | +После разработки важно убедиться, что приложение соответствует требованиям. |
| 137 | + |
| 138 | +### Виды тестирования: |
| 139 | + |
| 140 | +- Статический анализ кода |
| 141 | +- Модульное тестирование (Unit testing) |
| 142 | +- Интеграционное тестирование |
| 143 | +- Функциональное тестирование |
| 144 | +- Нагрузочное тестирование |
| 145 | +- Тестирование безопасности |
| 146 | + |
| 147 | +### Статический анализ кода |
| 148 | + |
| 149 | +Автоматизированная проверка кода на: |
| 150 | + |
| 151 | +- Соответствие стандартам |
| 152 | +- Наличие ошибок и уязвимостей |
| 153 | +- Метрики качества (покрытие тестами, цикломатическая сложность, дублирование кода) |
| 154 | + |
| 155 | +> *"Самое важное, что я сделал как программист за последние годы — это начал агрессивно применять статический анализ кода"* — Джон Кармак |
| 156 | +
|
| 157 | +### Модульное тестирование |
| 158 | + |
| 159 | +Проверка корректности отдельных модулей кода. Позволяет быстро выявлять ошибки при изменениях. |
| 160 | + |
| 161 | +### Интеграционное тестирование |
| 162 | + |
| 163 | +Проверка взаимодействия между модулями и внешними системами. |
| 164 | + |
| 165 | +### Нагрузочное тестирование |
| 166 | + |
| 167 | +**Профили нагрузки:** |
| 168 | + |
| 169 | +- **Performance testing** — постепенное увеличение нагрузки |
| 170 | +- **Load testing** — длительная штатная нагрузка |
| 171 | +- **Stress testing** — нагрузки выше граничных значений |
| 172 | +- **Spike testing** — резкие повышения нагрузки |
| 173 | +- **Warm-up testing** — прогрев перед рабочей нагрузкой |
| 174 | + |
| 175 | +## Релиз |
| 176 | + |
| 177 | +### Стратегии развертывания: |
| 178 | + |
| 179 | +- **Blue-green deployment** — две идентичные среды, переключение между ними |
| 180 | +- **Canary deployment** — постепенный rollout на небольшую группу пользователей |
| 181 | +- **Rolling update** — постепенная замена экземпляров приложения |
| 182 | +- **A/B testing** — тестирование разных версий на разных группах пользователей |
| 183 | + |
| 184 | +### Feature-флаги |
| 185 | + |
| 186 | +Включение/выключение функциональности без изменения кода. Позволяют: |
| 187 | + |
| 188 | +- Скрывать неготовые функции |
| 189 | +- Тестировать на подмножествах пользователей |
| 190 | +- Быстро откатывать изменения |
| 191 | + |
| 192 | +### Feature freeze |
| 193 | + |
| 194 | +Период запрета выкаток для повышения надежности системы (например, во время высоконагруженных периодов). |
| 195 | + |
| 196 | +### Релизные окна |
| 197 | + |
| 198 | +Определенные временные промежутки, когда разрешены выкатки в продакшен. |
| 199 | + |
| 200 | +## CI/CD |
| 201 | + |
| 202 | +### Непрерывная интеграция (Continuous Integration) |
| 203 | + |
| 204 | +- Хранение кода в VCS |
| 205 | +- Code review |
| 206 | +- Автоматизированные сборки |
| 207 | +- Модульное тестирование |
| 208 | +- Статический анализ кода |
| 209 | + |
| 210 | +### Непрерывная поставка (Continuous Delivery) |
| 211 | + |
| 212 | +- Хранение дистрибутивов |
| 213 | +- Автоматизация развертывания на тестовые среды |
| 214 | +- Готовность к развертыванию в любой момент |
| 215 | + |
| 216 | +### Непрерывное развертывание (Continuous Deployment) |
| 217 | + |
| 218 | +Автоматическая выкатка в продакшен после прохождения всех проверок. |
| 219 | + |
| 220 | +## Сопровождение |
| 221 | + |
| 222 | +### Ключевые аспекты поддержки: |
| 223 | + |
| 224 | +- Непрерывный мониторинг |
| 225 | +- Сбор и анализ логов |
| 226 | +- Дежурства и реагирование на инциденты |
| 227 | +- Использование feature-флагов |
| 228 | +- Chaos engineering |
| 229 | +- Регулярные учения |
| 230 | + |
| 231 | +## Завершение жизненного цикла (End of Life) |
| 232 | + |
| 233 | +Рано или поздно каждый сервис завершает свой жизненный цикл. Важно планировать заранее, обеспечивая плавный переход пользователей на альтернативные решения. |
| 234 | + |
| 235 | +## Заключение |
| 236 | + |
| 237 | +Понимание и правильное применение принципов жизненного цикла ПО позволяет создавать качественные, надежные и востребованные продукты. Каждый этап важен и вносит свой вклад в успех проекта. |
0 commit comments