Skip to content

Commit 3d2f420

Browse files
committed
Add chapter life soft
1 parent 05e4aa1 commit 3d2f420

2 files changed

Lines changed: 241 additions & 0 deletions

File tree

src/SUMMARY.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,10 @@
4242
- [Классы](./dev/python/classes.md)
4343
- [Итераторы, генераторы и корутины](./dev/python/async.md)
4444

45+
# Прикладное программирование
46+
47+
- [Жизненный цикл ПО](./dev/life.md)
48+
4549
# Учимся у других
4650

4751
- [Коды и скрипты](./examples/intro.md)

src/dev/life.md

Lines changed: 237 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,237 @@
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

Comments
 (0)