Подготовка к контрольной 30 октября. Git, Waterfall, Scrum, Kanban, СУЗ
Выжимка к контрольной на 12 баллов: поколения VCS и устройство Git, команды, ветки, откат и Git Flow, водопад, Scrum, Kanban, Agile и бережливое производство, системы управления знаниями, документация и трекинг задач.
Контрольная 30 октября по ИСРПО — на 12 баллов, темы: Git, Waterfall, Scrum, Kanban и системы управления знаниями (СУЗ). Это материал первых трёх лекций: Git, методологии и документация и управление знаниями. Здесь всё сжато до того, что стоит знать наизусть, плюс сравнения, на которых обычно ловят, и вопросы для самопроверки.
Факты взяты из слайдов лектора (репозиторий SDT_lectures) и наших конспектов лекций. Где лекция и первоисточник (Scrum Guide, документация Git) расходятся, указано оба варианта: на контрольной отвечайте как на лекции, но понимайте, как правильно. Формат заданий заранее не объявлен — готовьтесь и к тесту, и к открытым вопросам «сравните» и «перечислите».
| Что | Сколько |
|---|---|
| Дата | 30 октября |
| Максимум | 12 баллов |
| Темы | Git, Waterfall, Scrum, Kanban, СУЗ |
1. Системы контроля версий
Определение 1. Система контроля версий (VCS, version control system) хранит историю изменений файлов: кто, когда и что поменял, — и позволяет вернуться к любой прошлой версии, не теряя остальных изменений.
Зачем: файлов в проекте много, меняются они несколько раз в день и разными людьми. «финал.docx», «финал-финал.docx» перестают работать уже на втором человеке.
1.1. Три поколения
| Поколение | Системы | Что умели |
|---|---|---|
| Первое | SCCS (1972, Марк Рочкинд, Bell Labs, на C); RCS (1982, Уолтер Тихи, открытая альтернатива SCCS) | история отдельных файлов, локально, один пользователь за раз |
| Второе | CVS (1986, Дик Грун); SVN / Subversion (2000, CollabNet, сейчас Apache) | сеть и централизованный репозиторий с «официальной» версией; CVS впервые позволил нескольким людям одновременно работать с одними файлами |
| Третье | Git (2005, Линус Торвальдс, для ядра Linux, в основном на C) | распределённая модель: у каждого полная копия репозитория |
SCCS — 1972, первая. RCS — 1982. CVS — 1986, первая сетевая. SVN — 2000. Git — 2005, Торвальдс. Mercurial — тоже 2005, тоже распределённая, появилась по тому же поводу.
1.2. Централизованная и распределённая модели
| Централизованная (CVS, SVN) | Распределённая (Git, Mercurial) | |
|---|---|---|
| Где история | только на сервере | у каждого разработчика целиком |
| Работа без сети | почти невозможна | коммиты, ветки, история — локально |
| Скорость | каждая операция идёт через сервер | большинство операций локальные, быстрые |
| Точка отказа | сервер: сгорел — история потеряна | любой клон — полная резервная копия |
| Безопасность кода | разработчик видит только свой кусок | у каждого весь код: утечка ноутбука = утечка проекта |
| Контроль | одна точка администрирования, видно, кто что сделал | дисциплина ложится на команду: нужны ревью и CI |
| Бинарные файлы | SVN хранит спокойно | Git хранит плохо: каждый коммит кладёт файл целиком |
| Квалификация людей | можно набирать дешёвый аутсорс | нужны люди, понимающие проект целиком |
2. Как устроен Git
2.1. Хранилище объектов
- Всё, что знает Git, лежит в скрытой папке
.git, объекты — в.git/objects. - Каждый объект идентифицируется хэшем SHA-1 (40 шестнадцатеричных символов), содержимое сжато zlib. Имя файла объекта — его хэш.
- Одинаковое содержимое даёт одинаковый хэш, поэтому одинаковые файлы хранятся один раз, а любое изменение содержимого меняет хэш — историю незаметно подделать нельзя.
Дополнение. На слайде порядок такой: «сжимается zlib, результат хэшируется SHA-1». В действительности Git считает SHA-1 от несжатого содержимого с коротким заголовком, а уже потом сжимает. Для ответа на вопрос «какие алгоритмы» достаточно: сжатие — zlib, хэш — SHA-1. Новые версии Git умеют и SHA-256.
Дополнение. Четыре типа объектов:
| Объект | Что хранит |
|---|---|
| blob | содержимое одного файла (без имени) |
| tree | каталог: имена файлов и ссылки на blob и вложенные tree |
| commit | ссылка на tree (снимок проекта), родительские коммиты, автор, дата, сообщение |
| tag | именованная метка на коммит (обычно версия релиза) |
Коммит хранит снимок всего проекта, а не разницу. Неизменившиеся файлы просто ссылаются на тот же blob, поэтому снимки дёшевы. Сжатие разницами Git делает отдельно, при упаковке объектов в pack-файлы (при git push и git gc).
2.2. Три области и состояния файлов
| Область | Что это | Как попасть |
|---|---|---|
| Рабочий каталог (working directory) | файлы, которые вы правите | — |
| Индекс (staging area) | то, что войдёт в следующий коммит | git add |
Репозиторий (.git) | зафиксированная история | git commit |
Состояния файла: untracked (Git о нём не знает) → staged (добавлен в индекс) → committed (зафиксирован) → modified (изменён после коммита, снова нужен add).
git add кладёт изменения в индекс, git commit фиксирует индекс. IDE делает это одной кнопкой, но в консоли и на контрольной это два шага.
3. Основные команды Git
| Команда | Что делает |
|---|---|
git init | сделать текущую папку репозиторием (создаётся .git) |
git clone <url> | скачать копию удалённого репозитория со всей историей |
git config --global user.name "…" / user.email "…" | представиться; без этого первый коммит не создастся |
git status | состояние: ветка, изменённые, добавленные, неотслеживаемые файлы |
git add <файл> / git add . | добавить изменения в индекс |
git commit -m "сообщение" | зафиксировать индекс с сообщением |
git commit --amend | исправить последний коммит (сообщение или состав), пока он не отправлен |
git log | история коммитов текущей ветки |
git diff | разница между рабочим каталогом и индексом (--staged — между индексом и коммитом) |
git branch <имя> | создать ветку от текущего коммита |
git checkout <ветка> (git switch) | переключиться на ветку |
git checkout -b <ветка> | создать ветку и сразу переключиться |
git merge <ветка> | влить указанную ветку в текущую |
git pull | забрать изменения с удалённого репозитория и слить в текущую ветку (= fetch + merge) |
git push | отправить локальные коммиты ветки на удалённый репозиторий |
git remote -v | список удалённых репозиториев (обычно origin) |
Типичный цикл работы:
git clone https://github.com/user/project.git
cd project
git checkout -b feature/login # своя ветка под задачу
# …правим файлы…
git status
git add .
git commit -m "Добавить форму входа (TASK-42)"
git push -u origin feature/login # дальше — pull request3.1. Гигиена коммитов
- Сообщение коммита объясняет, что и зачем сделано: «Исправить падение при пустом списке», а не «fix», «asdf», «изменения».
- В корпоративной разработке в сообщение пишут номер задачи: по нему CI/CD подтягивает сценарий сборки, а трекер связывает задачу с кодом.
- Коммит подписан именем и email автора — по каждому багу можно найти, кто его внёс.
- Один коммит — одно логическое изменение.
3.2. .gitignore
Файл .gitignore перечисляет, что не должно попадать в репозиторий: артефакты сборки, бинарники, зависимости, локальные настройки IDE, секреты.
build/
*.o
*.exe
node_modules/
.idea/
.env4. Ветки, слияние и конфликты
Определение 2. Ветка — подвижный указатель на коммит. При новом коммите указатель текущей ветки сдвигается на него. HEAD — указатель на то, где вы сейчас (обычно на текущую ветку).
- Ветки нужны, чтобы вести несколько задач параллельно и не ломать основную ветку. Основная ветка —
main(раньше по умолчаниюmaster). - Удаление ветки (
git branch -d) удаляет только указатель: коммиты остаются, и по хэшу на них можно вернуться.
4.1. Слияние
git checkout main
git merge feature/loginДополнение. Два вида слияния:
| Вид | Когда | Что получается |
|---|---|---|
| fast-forward | в main не было новых коммитов после ответвления | указатель main просто сдвигается вперёд, коммита слияния нет |
| трёхстороннее (merge commit) | обе ветки ушли вперёд | новый коммит с двумя родителями |
4.2. Конфликт слияния
Возникает, когда в двух ветках по-разному изменили одно и то же место одного файла. Git останавливается и ставит в файле маркеры:
<<<<<<< HEAD
версия из текущей ветки
=======
версия из вливаемой ветки
>>>>>>> feature/loginПорядок разрешения: оставить нужный вариант (или объединить), удалить маркеры, затем git add и git commit. Коммит после разрешения сам не появится.
В командах слияние в основную ветку идёт через pull request (GitHub) / merge request (GitLab): вы предлагаете изменения, коллеги делают ревью, CI прогоняет проверки, потом ветку сливают.
5. Если что-то пошло не так
| Ситуация | Команда | Что делает |
|---|---|---|
| Опечатка в сообщении последнего коммита | git commit --amend | переписывает последний коммит |
| Отменить последний коммит вместе с изменениями | git reset --hard HEAD~1 | сдвигает ветку на коммит назад, рабочие файлы откатываются |
| Отменить коммит, но сохранить изменения | git reset --soft HEAD~1 (или --mixed, по умолчанию) | коммит убран, изменения остаются в индексе (--soft) или в рабочих файлах (--mixed) |
| Найти, где всё было хорошо | git reflog | журнал всех перемещений HEAD во всех ветках: записи HEAD@{n} |
| Вернуться к записи журнала | git reset HEAD@{n} | откат к состоянию из reflog |
| Отменить коммит, который был давно (или уже отправлен) | git log, затем git revert <хэш> | создаёт новый коммит, обратный указанному; история не переписывается |
reset переписывает историю — им пользуются только для коммитов, которые ещё не отправлены (push). revert добавляет отменяющий коммит и безопасен для общей истории. HEAD~1 — один коммит назад, HEAD~N — коммитов назад.
6. Git Flow
Git Flow — договорённость о ветках в команде (Винсент Дриссен, 2010).
| Ветка | Откуда | Куда сливается | Зачем |
|---|---|---|---|
main (master) | — | — | только выпущенные версии, каждая с тегом v1.0, v1.1… |
develop | main | — | основная ветка разработки, сюда собираются готовые фичи |
feature/* | develop | develop | одна фича или задача |
release/* | develop | main и develop | подготовка релиза: только исправления и номер версии |
hotfix/* | main (нужная версия) | main и develop | срочное исправление выпущенной версии |
На лекции было сказано, что в «основную» ветку попадают только финальные сборки по версиям, ошибку в конкретной сборке чинят в ветке hotfix от нужного коммита, а фичи и баги делают в отдельных ветках и сливают раз в релиз. Смысл тот же: заказчик видит чистую историю релизов. В каноническом Git Flow ветка релизов — main, а develop — ветка интеграции.
Зачем держать старые версии: заказчики редко ставят последнюю, и исправление или новую функцию иногда нужно сделать именно в их версии — тогда от её тега делают ветку.
7. Каскадная модель (Waterfall)
Определение 3. Каскадная модель (водопад, Waterfall) — разработка последовательными этапами; следующий начинается только после завершения предыдущего, возврат назад не предусмотрен.
Концепцию описал Уинстон Ройс в 1970 году в статье «Managing the Development of Large Software Systems» — и в той же статье разбирал её недостатки. Остальные методологии возникли во многом как ответ на проблемы водопада.
В нашем конспекте лекции 2 записан 1950 год, на слайдах лектора — 1970 (Ройс). Верный ответ — 1970.
Этапы по слайду: определение требований → проектирование → конструирование (реализация, кодирование) → воплощение (интеграция) → тестирование и отладка (верификация) → инсталляция (внедрение) → поддержка. На лекции их сжимали до шести: требования, проектирование, разработка, тестирование, внедрение, поддержка.
| Плюсы | Минусы |
|---|---|
| прозрачность: всегда понятно, на каком этапе проект | назад ходить нельзя: ошибка в требованиях всплывает на тестировании, когда исправлять дорого |
| у каждого этапа свой хозяин, ясные зоны ответственности | обратная связь от заказчика и рынка — только в конце, через годы |
| фиксированные сроки и бюджет, удобно для договоров и госзаказа | «дальше не моя проблема» — ответственность обрывается на границе этапа |
| подробная документация на каждом этапе | заказчик видит продукт только в самом конце |
Когда уместен: требования известны заранее и не поменяются, фиксированный бюджет, госзаказ, высокая цена ошибки (медицина, авиация, строительство).
8. Scrum
Определение 4. Scrum — фреймворк гибкой разработки: небольшая самоорганизующаяся кросс-функциональная команда выпускает продукт короткими итерациями — спринтами — и после каждой получает обратную связь.
Название — схватка из регби: вся команда вместе продавливает мяч к цели. Термин в разработку продуктов ввели Такеути и Нонака (1986), как фреймворк Scrum оформили Джефф Сазерленд и Кен Швабер (1995), правила описаны в Scrum Guide.
8.1. Базовые принципы со слайда
- Работа короткими циклами (спринтами) — проект делится на части и делается поэтапно.
- Гибкость — после каждого спринта проверка; при ошибках меняют стратегию или пересматривают бэклог.
- Заказчик участвует в разработке — через владельца продукта, который собирает обратную связь пользователей.
- Взаимодействие команды — несколько человек с общей целью.
Принципы работы команды: постоянное самосовершенствование, автономность (каждый отвечает и за общий результат, и за свою часть), кросс-функциональность (в команде есть все нужные навыки, она самодостаточна).
8.2. Роли
| Роль | Что делает |
|---|---|
| Владелец продукта (Product Owner) | голос заказчика; ведёт и упорядочивает бэклог продукта, решает, что делать дальше, принимает результат |
| Скрам-мастер (Scrum Master) | следит за соблюдением Scrum и таймингом встреч, убирает препятствия, сам продукт не делает |
| Разработчики (Developers, Delivery Team) | делают продукт: код, тесты, анализ, документацию |
Размер команды на лекции — 5–7 человек; по Scrum Guide 2020 — обычно не больше 10.
На лекции: скрам-мастер не член команды разработки и может быть общим на несколько команд. По Scrum Guide он входит в Scrum-команду (PO + SM + разработчики), но не в число разработчиков. Обе формулировки говорят одно: продукт он не делает.
8.3. События (ритуалы)
| Событие | Когда и сколько | Зачем |
|---|---|---|
| Спринт | 1–4 недели, фиксированной длины | контейнер для всех остальных событий; итог — инкремент |
| Планирование спринта | в начале | выбрать задачи из бэклога продукта, оценить, сформировать бэклог спринта |
| Ежедневный стендап (Daily Scrum) | каждый день, 15 минут | «вчера сделал, сегодня сделаю, мешает…» — без технических обсуждений |
| Обзор спринта (Review, демо) | в конце | показать сделанное владельцу продукта, получить обратную связь |
| Ретроспектива | после обзора | что в процессе работы улучшить в следующем спринте |
На ритуалы уходит примерно 2,5–3 часа из 40-часовой недели.
8.4. Артефакты
| Артефакт | Что это |
|---|---|
| Бэклог продукта (Product Backlog) | упорядоченный список всего, что может понадобиться в продукте; ведёт владелец продукта |
| Бэклог спринта (Sprint Backlog) | задачи, взятые в текущий спринт, и план их выполнения |
| Инкремент | работающий результат спринта, который можно показать и выпустить |
MVP (minimum viable product) — минимальный работающий продукт. Пример с лекции: калькулятор, который умеет только складывать, уже можно продать и получить обратную связь, а дальше развивать за деньги заказчика.
| Плюсы Scrum | Минусы Scrum |
|---|---|
| быстрая обратная связь, можно менять курс каждый спринт | финал заранее не виден, сроки и бюджет не зафиксированы |
| работающий продукт рано | зависимость от инвестора: деньги могут кончиться на любом спринте |
| заказчик участвует напрямую | страдает целостность и качество при постоянных изменениях |
| много встреч, нужны квалифицированные и общительные люди |
9. Kanban
Определение 5. Kanban (яп. «карточка», «вывеска») — метод управления потоком задач: работа визуализируется на доске, число задач в работе ограничивается, поток постоянно улучшается.
Происхождение — производственная система Toyota (Тайити Оно, конец 1940-х — 1950-е), часть бережливого производства. В разработку перенёс Дэвид Андерсон (2000-е).
Ключевые практики:
- Визуализация — доска с колонками этапов («Бэклог → В работе → Ревью → Готово»), каждая задача — карточка.
- Ограничение WIP (work in progress) — лимит задач в колонке: новую задачу берут, только когда закончили текущую («меньше начинай, больше заканчивай»).
- Управление потоком — следят за временем прохождения задачи (lead time — от появления до готовности, cycle time — от начала работы до готовности).
- Явные правила — всем понятно, когда карточка переходит в следующую колонку.
- Непрерывное улучшение — по доске видно узкие места и запас, процесс постепенно подстраивают.
Где особенно уместен: поддержка и эксплуатация, где задачи приходят непрерывно и есть SLA — соглашение об уровне сервиса, например «обращение обрабатывается за два часа». Карточка в трекере хранит ответственного, дедлайн, потраченное время и текст задачи.
9.1. Scrum и Kanban
| Scrum | Kanban | |
|---|---|---|
| Ритм | итерации-спринты фиксированной длины | непрерывный поток, итераций нет |
| Роли | владелец продукта, скрам-мастер, разработчики | обязательных ролей нет |
| Изменения посреди цикла | состав спринта не меняют | новую задачу можно взять в любой момент, если есть место по WIP |
| Ограничение работы | объёмом спринта | лимитом WIP в каждой колонке |
| Метрики | скорость команды (velocity) за спринт | lead time, cycle time, пропускная способность |
| Доска | очищается каждый спринт | живёт постоянно |
| Где чаще | разработка продукта | поддержка, эксплуатация, потоковые задачи |
Scrum организует команду и работу итерациями, Kanban визуализирует и улучшает поток. Kanban-доску часто вешают поверх Scrum-процесса (так называемый Scrumban), но одно другое не заменяет.
10. Agile, Lean и инкрементальная модель
10.1. Agile-манифест
Agile — не методология, а манифест, набор ценностей и принципов (2001, 17 авторов, среди них Швабер и Сазерленд). Scrum и Kanban — конкретные подходы, построенные на этих ценностях.
Четыре ценности:
- Люди и взаимодействие важнее процессов и инструментов.
- Работающий продукт важнее исчерпывающей документации.
- Сотрудничество с заказчиком важнее согласования условий контракта.
- Готовность к изменениям важнее следования первоначальному плану.
«Не отрицая важности того, что справа, мы всё-таки больше ценим то, что слева». К ценностям прилагаются 12 принципов.
10.2. Бережливое производство (Lean)
Бережливое производство — концепция управления, основанная на постоянном устранении всех видов потерь: всего, что не создаёт ценности для потребителя. Каждый сотрудник участвует в оптимизации, максимальная ориентация на потребителя. Пример с лекции: станочник тратил время на ходьбу за деталями — ящик поставили рядом, и производительность выросла без доплаты. Kanban — инструмент из Lean.
10.3. Инкрементальная модель
Продукт делается по частям (инкрементам): каждая часть проходит свой маленький цикл требования → проектирование → реализация → тестирование и добавляет функциональность к уже работающей версии. Компромисс между водопадом (план и этапы) и гибкими подходами (ранний работающий продукт). Живуча в корпоративном секторе, часто в виде гибридов.
10.4. Сводное сравнение
| Waterfall | Инкрементальная | Scrum | Kanban | |
|---|---|---|---|---|
| Требования | фиксированы в начале | в основном в начале, уточняются по инкрементам | меняются, живут в бэклоге | меняются в любой момент |
| Результат | один раз в конце | после каждого инкремента | после каждого спринта | непрерывно, по мере готовности задач |
| Обратная связь | в конце | после инкремента | каждый спринт | постоянно |
| Сроки и бюджет | фиксированы | частично фиксированы | гибкие | гибкие |
| Подходит | ясные стабильные требования, госзаказ | большие системы с поставкой частями | новый продукт, неясный рынок | поддержка, потоковые задачи с SLA |
11. Системы управления знаниями
11.1. Определение и задачи
Определение 6. Система управления знаниями (СУЗ) — совокупность технологических и организационных инструментов, методов и решений, обеспечивающих процесс генерации, поиска, отбора, систематизации и распространения знаний в организации.
СУЗ — это не только программа: без процессов (кто пишет, кто обновляет, где искать) вики быстро превращается в свалку устаревших страниц.
Шесть задач СУЗ (со слайда):
- Организация и обеспечение генерации новых знаний внутри организации.
- Поиск новых знаний и мониторинг эволюции существующих.
- Идентификация, систематизация и хранение текущих знаний.
- Целенаправленное распространение знаний внутри организации.
- Создание инфраструктуры для генерации, хранения и распространения.
- Утилизация знаний — удаление устаревшего.
Зачем компании: bus factor (сколько людей должно выпасть, чтобы проект встал — при единице всё держится на одном человеке) и быстрый онбординг новичков.
11.2. Виды знаний и модель SECI
| Вид | Что это | Пример |
|---|---|---|
| Явное (explicit) | записано, передаётся текстом | README, схема архитектуры, регламент |
| Неявное (tacit) | опыт и навыки в голове, словами передаётся плохо | чутьё, где искать баг |
Модель SECI (Нонака и Такеути, 1995) — четыре перехода знания:
| Переход | Откуда → куда | Пример |
|---|---|---|
| Socialization — социализация | неявное → неявное | наставничество, парное программирование, работа рядом с сеньором |
| Externalization — экстернализация | неявное → явное | записать шаги отладки в вики, нарисовать схему |
| Combination — комбинация | явное → явное | собрать из десяти заметок одно руководство |
| Internalization — интернализация | явное → неявное | прочитать инструкцию и научиться делать на практике |
11.3. Поиск, генерация, хранение, распространение
| Вопрос | Ответы с лекции |
|---|---|
| Где искать | официальная документация; коммуникация с коллегами; код, комментарии и история коммитов; задачи и баг-трекеры |
| Как генерировать | мозговой штурм, ретроспективы, парное программирование, технические доклады и митапы, сообщества практик, ротация между командами |
| Где хранить | вики, файлы, Git (docs as code), чат, бумага |
| Как распространять | экспертные сообщества; плюс онбординг, наставничество, ревью кода, рассылки |
Хранение в чате — худший вариант: через месяц ничего не найти. В Git документация версионируется и проходит ревью вместе с кодом.
11.4. Виды документации
| Вид | Для кого | Что внутри |
|---|---|---|
| Пользовательская | пользователи | как пользоваться: руководство, справка, FAQ |
| Администраторская | те, кто разворачивает и сопровождает | зависимости, архитектура, установка, настройка |
| Разработческая | разработчики, в том числе заказчика | устройство кода, API, сборка |
| Государственная | госзаказчик | по ГОСТ: серия 19 (ЕСПД) для программ, серия 34 для автоматизированных систем |
11.5. Инструменты и языки разметки
Базы знаний и вики: Confluence (Atlassian, в паре с Jira), DokuWiki (открытая, страницы в текстовых файлах без БД), MadCap Flare (инструмент техписателей: из одного источника — справка, PDF, сайт), Yonote (российская), а также Notion, GitHub Wiki, Markdown в репозитории.
Языки разметки текста со слайда:
| Язык | Где |
|---|---|
| HTML | веб-страницы |
| XML / XHTML | структурированные данные; HTML по строгим правилам XML |
| Markdown | README, документация в репозиториях; внутри — диаграммы PlantUML и Mermaid |
| AsciiDoc | большие технические документы и книги |
| MediaWiki | Википедия и вики на этом движке |
| LaTeX | научные тексты и формулы |
PlantUML и Mermaid — не языки разметки текста, а языки описания диаграмм текстом: схема хранится в репозитории и меняется в одном коммите с кодом.
11.6. Системы трекинга задач
Трекер задач — система, где задачи заводят, назначают, ведут по статусам и обсуждают. Тоже хранилище знаний: история задачи показывает, кто, что, когда и почему делал.
Примеры: Jira, YouTrack, Redmine, Яндекс Трекер, GitHub Issues / Projects, GitLab Issues, Trello.
Типичные поля задачи: название и описание, исполнитель, автор, статус (колонка доски), приоритет, дедлайн, оценка и потраченное время, метки, связи с другими задачами, ссылки на коммиты и pull request. Если в коммите или PR на GitHub написать Closes #12, задача 12 закроется после слияния.
Частые ошибки
- «Git — централизованная система». Распределённая: у каждого полная копия с историей. Централизованные — CVS и SVN.
- Путать поколения. SCCS и RCS — локальные, по файлам; CVS и SVN — сетевые централизованные; Git — распределённый.
- Считать
addиcommitодним действием. Сначала индекс, потом фиксация. - Делать
resetпослеpush. Отправленную историю не переписывают — для неё естьrevert. - Забыть коммит после разрешения конфликта. Убрать маркеры мало: нужны
git addиgit commit. - Класть бинарники и сборку в Git. Для них
.gitignore. - Считать Agile методологией. Это манифест: 4 ценности и 12 принципов.
- Путать Scrum и Kanban. Спринты и роли против непрерывного потока и лимитов WIP.
- Обсуждать на стендапе технические детали. 15 минут, только статус задач.
- Путать обзор и ретроспективу. Обзор — о продукте с владельцем продукта, ретроспектива — о процессе внутри команды.
- Думать, что в водопаде можно вернуться на этап назад. Нельзя, поэтому ошибка в требованиях так дорога.
- Путать направления в SECI. Экстернализация — записать (неявное → явное), интернализация — научиться по записанному (явное → неявное).
- Считать СУЗ просто программой. Это инструменты плюс организационные процессы.
Мини-тренажёр
- Назовите системы контроля версий трёх поколений и чем поколения различаются.
- Кто и когда создал Git и для чего?
- Какие алгоритмы Git использует для хэширования и сжатия объектов? Где лежат объекты?
- Назовите три области Git и команды перехода между ними.
- Чем
git pullотличается отgit push? Из каких двух команд состоитpull? - В чём разница между
git reset --hard HEAD~1иgit revert <хэш>? Что выбрать, если коммит уже отправлен? - Что показывает
git reflogи когда он спасает? - Как разрешить конфликт слияния по шагам?
- Какие ветки есть в Git Flow и откуда создаётся hotfix?
- Перечислите этапы каскадной модели. Кто и когда её описал?
- Назовите роли Scrum и чем занимается каждая.
- Перечислите события Scrum и их назначение. Сколько длится стендап?
- Назовите три артефакта Scrum.
- Что такое WIP-лимит и зачем он нужен?
- Назовите три отличия Scrum от Kanban.
- Перечислите четыре ценности Agile-манифеста.
- Дайте определение СУЗ и назовите её задачи.
- Назовите переходы SECI с примерами.
- Какие виды документации бывают и для кого каждый?
- Какие поля обычно есть у задачи в трекере? Назовите три трекера.
Ответы
- Первое — SCCS, RCS: локально, отдельные файлы, один пользователь. Второе — CVS, SVN: сеть и центральный сервер. Третье — Git (и Mercurial): распределённые, у каждого полная копия.
- Линус Торвальдс в 2005 году для разработки ядра Linux.
- Хэш — SHA-1, сжатие — zlib. Объекты — в
.git/objects, имя файла — хэш. - Рабочий каталог → (
git add) → индекс → (git commit) → репозиторий. pullзабирает изменения с удалённого репозитория и сливает их в текущую ветку (fetch+merge),pushотправляет локальные коммиты на удалённый.reset --hard HEAD~1удаляет последний коммит из истории ветки и откатывает файлы;revertсоздаёт новый коммит, обратный указанному, история сохраняется. Для отправленного —revert.- Журнал всех перемещений
HEADво всех ветках (HEAD@{n}). Спасает после неудачногоreset, удаления ветки и прочих «всё сломал»: находите запись до поломки и делаетеgit reset HEAD@{n}. - Открыть файл, выбрать нужный вариант между
<<<<<<<,=======,>>>>>>>, удалить маркеры,git add,git commit. main(релизы с тегами),develop(интеграция),feature/*,release/*,hotfix/*. Hotfix создаётся отmain(от нужной выпущенной версии) и сливается вmainиdevelop.- Требования → проектирование → реализация → интеграция → тестирование → внедрение → поддержка. Уинстон Ройс, 1970.
- Владелец продукта — голос заказчика, бэклог и приоритеты. Скрам-мастер — соблюдение Scrum, тайминг, препятствия. Разработчики — делают продукт.
- Спринт (контейнер, 1–4 недели), планирование (что берём), ежедневный стендап (15 минут, синхронизация), обзор (демо и обратная связь по продукту), ретроспектива (улучшение процесса).
- Бэклог продукта, бэклог спринта, инкремент.
- Ограничение числа задач в колонке доски. Не даёт хвататься за всё сразу, ускоряет завершение задач и показывает узкие места.
- Например: итерации против непрерывного потока; обязательные роли против их отсутствия; состав спринта фиксирован, а в Kanban задачу можно взять в любой момент; ограничение объёмом спринта против WIP-лимитов.
- Люди и взаимодействие важнее процессов и инструментов; работающий продукт важнее исчерпывающей документации; сотрудничество с заказчиком важнее согласования контракта; готовность к изменениям важнее следования плану.
- Совокупность технологических и организационных инструментов, методов и решений для генерации, поиска, отбора, систематизации и распространения знаний в организации. Задачи: генерация, поиск и мониторинг, систематизация и хранение, распространение, инфраструктура, утилизация.
- Социализация (неявное → неявное, наставничество), экстернализация (неявное → явное, записать в вики), комбинация (явное → явное, свести заметки в руководство), интернализация (явное → неявное, научиться по инструкции).
- Пользовательская — пользователям; администраторская — тем, кто устанавливает и сопровождает; разработческая — разработчикам; государственная — госзаказчику, по ГОСТ.
- Название, описание, исполнитель, статус, приоритет, дедлайн, потраченное время, метки, связи, ссылки на код. Jira, YouTrack, Redmine (а также Яндекс Трекер, GitHub Issues, Trello).
Шпаргалка
| Понятие | Суть |
|---|---|
| VCS | история изменений файлов с возможностью вернуться к любой версии |
| Поколения VCS | 1 — SCCS (1972), RCS (1982); 2 — CVS (1986), SVN (2000); 3 — Git (2005, Торвальдс) |
| Централизованная | история на сервере, одна точка отказа и администрирования |
| Распределённая | у каждого полная копия, работа без сети, нужна дисциплина и ревью |
| Объекты Git | .git/objects, хэш SHA-1, сжатие zlib; blob, tree, commit, tag |
| Три области | рабочий каталог → add → индекс → commit → репозиторий |
| Начало | git init, git clone <url>, git config user.name / user.email |
| Цикл | status, add, commit -m, log, push, pull |
| Ветка | подвижный указатель на коммит; HEAD — где вы сейчас |
| Ветки | branch, checkout, checkout -b, merge |
| Конфликт | правка одного места в двух ветках; убрать маркеры → add → commit |
| Откат | commit --amend, reset --hard HEAD~1, reflog, revert <хэш> |
| reset / revert | reset переписывает историю (до push), revert добавляет отменяющий коммит |
.gitignore | что не хранить: сборку, бинарники, зависимости, секреты |
| Git Flow | main — релизы, develop — интеграция, feature, release, hotfix от main |
| Waterfall | последовательные этапы без возврата; Ройс, 1970 |
| Этапы водопада | требования → проектирование → реализация → интеграция → тестирование → внедрение → поддержка |
| Scrum | итерации-спринты, кросс-функциональная команда; «схватка» из регби |
| Роли Scrum | владелец продукта, скрам-мастер, разработчики |
| События Scrum | спринт, планирование, стендап 15 минут, обзор, ретроспектива |
| Артефакты Scrum | бэклог продукта, бэклог спринта, инкремент |
| MVP | минимальный работающий продукт для ранней обратной связи |
| Kanban | доска, лимит WIP, управление потоком, непрерывное улучшение; Toyota |
| SLA | соглашение об уровне сервиса, например «ответ за 2 часа» |
| Agile | манифест 2001 года: 4 ценности, 12 принципов |
| Lean | устранение потерь — всего, что не создаёт ценности |
| Инкрементальная модель | продукт частями, каждая — мини-цикл |
| СУЗ | инструменты и методы генерации, поиска, отбора, систематизации и распространения знаний |
| Задачи СУЗ | генерация, поиск, систематизация и хранение, распространение, инфраструктура, утилизация |
| SECI | социализация, экстернализация, комбинация, интернализация |
| Виды документации | пользовательская, администраторская, разработческая, государственная (ГОСТ) |
| Базы знаний | Confluence, DokuWiki, MadCap Flare, Yonote |
| Разметка | HTML, XML/XHTML, Markdown (+ PlantUML, Mermaid), AsciiDoc, MediaWiki, LaTeX |
| Трекеры | Jira, YouTrack, Redmine, Яндекс Трекер, GitHub Issues, Trello |
Актуальная версия: https://m3105.ru/notes/instrumentalnye-sredstva-razrabotki-po/podgotovka-k-kontrolnoy-30-oktyabrya-git-waterfall-scrum-kanban-suz
Проверь себя
23 вопроса по материалу лекции. Результаты хранятся только в вашем браузере.
Пробная проверка перед контрольной: история VCS, устройство и команды Git, откат и Git Flow, методологии разработки, системы управления знаниями
- 23 вопроса
- Результат виден сразу после каждого ответа
- Порядок вопросов случайный

Комментарии0
Пока никто ничего не написал.
Войдите, чтобы оставить комментарий