<!DOCTYPE html>
<html class="h-100" data-bs-theme="light" data-mantine-color-scheme="light" lang="ru" prefix="og: https://ogp.me/ns#">
<head>
<meta content="width=device-width, initial-scale=1.0" name="viewport">
<meta content="IE=Edge" http-equiv="X-UA-Compatible">
<link crossorigin="true" href="https://cdn.hexlet.io" rel="preconnect">
<link href="https://mc.yandex.ru" rel="preconnect">
<meta content="aa2vrdtq64dub8knuf83lwywit311w" name="facebook-domain-verification">
<link href="/favicon.ico" rel="icon" sizes="any">
<link href="/favicon.svg" rel="icon" type="image/svg+xml">
<link href="/apple-touch-icon.png" rel="apple-touch-icon">
<link href="/manifest.webmanifest" rel="manifest">
<script>
//<![CDATA[
window.gon={};gon.ym_counter="25559621";gon.is_bot=true;gon.applications={};gon.current_user={"id":null,"last_viewed_notification_id":null,"email":null,"state":null,"first_name":"","last_name":"","created_at":"2026-02-26 20:30:50 UTC","current_program":null,"current_team":null,"full_name":"","guest":true,"can_use_paid_features":false,"is_hexlet_employee":false,"sanitized_phone_number":"","can_subscribe":true,"can_renew_education":false};gon.token="Ngt6AH2nG_ClkZ4T9Hf6vaOjg0WkiyxJsfvUROq-3FXZ2rE3j9m2kBPSuov4eArKY6qu76y80usMG04QuLk7Ow";gon.locale="ru";gon.language="ru";gon.theme="light";gon.rails_env="production";gon.mobile=false;gon.google={"analytics_key":"UA-1360700-51","optimize_key":"GTM-5QDVFPF"};gon.captcha={"google_v3_site_key":"6LenGbgZAAAAAM7HbrDbn5JlizCSzPcS767c9vaY","yandex_site_key":"ysc1_Vyob5ZPPUdPBsu0ykt8bVFdzsfpoVjQChLGl2b4g19647a89","verification_failed":null};gon.social_signin=false;gon.typoreporter_google_form_id="1FAIpQLSeibfGq-KvWQ2Fyru-zkFFRVTLBuzXAHAoEyN1p49FtDmNoNA";
//]]>
</script>
<meta charset="utf-8">
<title>Agile, Scrum и Kanban | Жизненный цикл ПО</title>
<meta name="description" content="Agile, Scrum и Kanban / Жизненный цикл ПО: Знакомимся с гибкой методологией разработки">
<link rel="canonical" href="https://ru.hexlet.io/courses/software-testing-lifecycle/lessons/scrum/theory_unit">
<meta name="robots" content="noarchive">
<meta property="og:title" content="Agile, Scrum и Kanban">
<meta property="og:title" content="Жизненный цикл ПО">
<meta property="og:description" content="Agile, Scrum и Kanban / Жизненный цикл ПО: Знакомимся с гибкой методологией разработки">
<meta property="og:url" content="https://ru.hexlet.io/courses/software-testing-lifecycle/lessons/scrum/theory_unit">
<meta name="csrf-param" content="authenticity_token" />
<meta name="csrf-token" content="H4zaT3_mxF404rRaxTMxZLxTmMY0YLPXTVfKj02PKefwXRF4jZhpPoKhkMLJPMETfFq1bDxXTXXwt1DbH4jOiQ" />
<script src="/vite/assets/inertia-DfXos102.js" crossorigin="anonymous" type="module"></script><link rel="modulepreload" href="/vite/assets/chunk-DsPFFUou.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/preload-helper-BJ4cLWpC.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/init-BrRXra1y.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/ahoy-DrlRQ-1D.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/analytics-cb8xch9l.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/ErrorFallbackBlock-naDSYSy9.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Surface-DL2bpZA-.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/gon-D3e4yh1x.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/mantine-CGMYrt2Y.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/utils-DRqSHbQE.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/routes-CCH8ilKF.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/extends-C-EagtpE.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/inheritsLoose-BBd-DCVI.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/objectWithoutPropertiesLoose-DRHXDhjp.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/index.esm-DAqKOkZ0.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Button-CGPUux8l.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/CloseButton-D1euiPao.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Group-BX48WcuU.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Loader-BQEY8g6v.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Modal-Cy3HByv7.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/OptionalPortal-1Hza5P2w.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Stack-CtjJzfw4.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Textarea-Ck64llAy.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Box-B5-OOzBf.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/DirectionProvider-Dc9zdUke.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/events-DJQOhap0.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/use-reduced-motion-D2owz4wa.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/use-disclosure-zKtK5W1r.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/use-hotkeys-Cnc_Rwkb.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/random-id-DOQyszCZ.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/notifications.store-C-3AFSMn.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/exports-C_MrNx_T.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/axios-BEvgo0ym.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/dayjs.min-BkKovM-s.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/i18next-BlSq9s7B.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/client-U9M77rxp.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/react-dom-DaLxUz_h.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/useTranslation-Bx1Cdrkz.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/compiler-runtime-6XxiPFnt.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/jsx-runtime-CwjcCKJi.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/react-CkL4ZRHB.js" as="script" crossorigin="anonymous">
<link rel="stylesheet" href="/vite/assets/application-BqhCP46M.js" />
<script src="/vite/assets/application-Df9RExpe.js" crossorigin="anonymous" type="module"></script><link rel="modulepreload" href="/vite/assets/chunk-DsPFFUou.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/autocomplete-VMNbxKGl.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/routes-CCH8ilKF.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/createPopper-C3aM9r1M.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/js.cookie-D1-O8zkX.js" as="script" crossorigin="anonymous"><link rel="stylesheet" href="/vite/assets/application-C8HjmMaq.css" media="screen" />
<script>
window.ym = function(){(ym.a=ym.a||[]).push(arguments)};
window.addEventListener('load', function() {
setTimeout(function() {
ym.l = 1*new Date();
ym(window.gon.ym_counter, "init", {
clickmap: true,
trackLinks: true,
accurateTrackBounce: true,
webvisor: true
});
// Загружаем скрипт
var k = document.createElement('script');
k.async = 1;
k.src = 'https://mc.yandex.ru/metrika/tag.js';
document.head.appendChild(k);
ym(window.gon.ym_counter, 'getClientID', function(clientID) {
window.ymClientId = clientID;
});
}, 1500);
});
</script>
<!-- Google Tag Manager - deferred -->
<script>
// dataLayer stub сразу — пуши работают до загрузки скрипта
window.dataLayer = window.dataLayer || [];
// Сам скрипт — отложенно после load
window.addEventListener('load', function() {
setTimeout(function() {
dataLayer.push({'gtm.start': new Date().getTime(), event: 'gtm.js'});
var j = document.createElement('script');
j.async = true;
j.src = 'https://www.googletagmanager.com/gtm.js?id=GTM-WK88TH';
document.head.appendChild(j);
}, 1500);
});
</script>
<!-- End Google Tag Manager -->
</head>
<body>
<noscript>
<div>
<img alt="" src="https://mc.yandex.ru/watch/25559621" style="position:absolute; left:-9999px;">
</div>
</noscript>
<header class="sticky-top bg-body">
<nav class="navbar navbar-expand-lg">
<div class="container-xxl">
<a class="navbar-brand" href="/"><img alt="Логотип Хекслета" height="24" src="https://ru.hexlet.io/vite/assets/logo_ru_light-BpiEA1LT.svg" width="96">
</a><button aria-controls="collapsable" aria-expanded="false" aria-label="Меню" class="navbar-toggler border-0 mb-0 mt-1" data-bs-target="#collapsable" data-bs-toggle="collapse">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="collapsable">
<ul class="navbar-nav mb-lg-0 mt-lg-1">
<li class="nav-item dropdown">
<button aria-haspopup class="btn nav-link" data-bs-toggle="dropdown" type="button">
Все курсы
<span class="bi bi-chevron-down align-middle ms-1"></span>
</button>
<ul class="dropdown-menu">
<li>
<a class="dropdown-item d-flex py-2" href="/courses"><div class="fw-bold me-auto">Все что есть</div>
<div class="text-muted">117</div>
</a></li>
<li>
<hr class="dropdown-divider">
</li>
<li class="dropdown-item">
<b>Популярные категории</b>
</li>
<li>
<a class="dropdown-item py-2" href="/courses_devops">Курсы по DevOps
</a></li>
<li>
<a class="dropdown-item py-2" href="/courses_data_analytics">Курсы по аналитике данных
</a></li>
<li>
<a class="dropdown-item py-2" href="/courses_programming">Курсы по программированию
</a></li>
<li>
<a class="dropdown-item py-2" href="/courses_testing">Курсы по тестированию
</a></li>
<li>
<hr class="dropdown-divider">
</li>
<li class="dropdown-item">
<b>Популярные курсы</b>
</li>
<li>
<a class="dropdown-item py-2" href="/programs/devops-engineer-from-scratch">DevOps-инженер с нуля
</a></li>
<li>
<a class="dropdown-item py-2" href="/programs/go">Go-разработчик
</a></li>
<li>
<a class="dropdown-item py-2" href="/programs/java">Java-разработчик
</a></li>
<li>
<a class="dropdown-item py-2" href="/programs/python">Python-разработчик
</a></li>
<li>
<a class="dropdown-item py-2" href="/programs/qa-auto-engineer-java">Автоматизатор тестирования на Java
</a></li>
<li>
<a class="dropdown-item py-2" href="/programs/data-analytics">Аналитик данных
</a></li>
<li>
<a class="dropdown-item py-2" href="/programs/frontend">Фронтенд-разработчик
</a></li>
</ul>
</li>
<li class="nav-item dropdown">
<button aria-haspopup class="btn nav-link" data-bs-toggle="dropdown" type="button">
О Хекслете
<span class="bi bi-chevron-down align-middle"></span>
</button>
<ul class="dropdown-menu bg-body">
<li>
<a class="dropdown-item py-2" href="/pages/about">О нас
</a></li>
<li>
<a class="dropdown-item py-2" href="/blog">Блог
</a></li>
<li>
<span class="dropdown-item py-2 external-link" data-href="https://special.hexlet.io/hse-research" role="button">Результаты (Исследование)
</span></li>
<li>
<span class="dropdown-item py-2 external-link" data-href="https://career.hexlet.io" role="button">Хекслет Карьера
</span></li>
<li>
<a class="dropdown-item py-2" href="/testimonials">Отзывы студентов
</a></li>
<li>
<span class="dropdown-item py-2 external-link" data-href="https://t.me/hexlet_help_bot" role="button">Поддержка (В ТГ)
</span></li>
<li>
<span class="dropdown-item py-2 external-link" data-href="https://special.hexlet.io/referal-program/?promo_creative=priglasite-druzei&promo_name=referal-program&promo_position=promo_position&promo_start=010724&promo_type=link" role="button">Реферальная программа
</span></li>
<li>
<span class="dropdown-item py-2 external-link" data-href="https://special.hexlet.io/certificate" role="button">Подарочные сертификаты
</span></li>
<li>
<span class="dropdown-item py-2 external-link" data-href="https://hh.ru/employer/4307094" role="button">Вакансии
</span></li>
<li>
<span class="dropdown-item d-flex external-link" rel="noopener noreferrer nofollow" data-href="https://b2b.hexlet.io" data-target="_blank" role="button">Компаниям
</span></li>
<li>
<span class="dropdown-item d-flex external-link" rel="noopener noreferrer nofollow" data-href="https://hexly.ru/" data-target="_blank" role="button">Колледж
</span></li>
<li>
<span class="dropdown-item d-flex external-link" rel="noopener noreferrer nofollow" data-href="https://hexlyschool.ru/" data-target="_blank" role="button">Частная школа
</span></li>
</ul>
</li>
<li><a class="nav-link" href="/subscription/new">Подписка</a></li>
</ul>
<ul class="navbar-nav flex-lg-row align-items-lg-center gap-2 ms-auto">
<li>
<a class="nav-link" aria-label="Переключить тему" href="/theme/switch?new_theme=dark"><span aria-hidden="true" class="bi bi-moon"></span>
</a></li>
<li>
<span data-target="_self" class="nav-link external-link" data-href="/u/new" role="button"><span>Регистрация</span>
</span></li>
<li>
<span data-target="_self" class="nav-link external-link" data-href="https://ru.hexlet.io/session/new" role="button"><span>Вход</span>
</span></li>
</ul>
</div>
</div>
</nav>
</header>
<div class="x-container-xxxl">
</div>
<main class="mb-6 min-vh-100 h-100">
<link rel="preload" as="image" href="https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6Mzk1MCwicHVyIjoiYmxvYl9pZCJ9fQ==--4a16fe638654fb8d5ae09d7e8ab8e16ff228214f/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Bug%20fixing-amico.png"/><link rel="preload" as="image" href="/vite/assets/development-BVihs_d5.png"/><div id="app" data-page="{"component":"web/courses/lessons/theory_unit","props":{"errors":{},"locale":"ru","language":"ru","httpsHost":"https://ru.hexlet.io","host":"ru.hexlet.io","colorScheme":"light","auth":{"user":{"id":null,"last_viewed_notification_id":null,"email":null,"state":null,"first_name":"","last_name":"","created_at":"2026-02-26T20:30:50.228Z","current_program":null,"current_team":null,"full_name":"","guest":true,"can_use_paid_features":false,"is_hexlet_employee":false,"sanitized_phone_number":"","can_subscribe":true,"can_renew_education":false}},"cloudflareTurnstileSiteKey":"0x4AAAAAAA15KmeFXzd2H0Xo","vkIdClientId":"51586979","yandexIdClientId":"88d071f1d3384eb4bd1deb37910235c7","formAuthToken":"RNICeXNYIl9IYOODz6vwRX1GXZ1VxUfaR8NoVYtc9_yrA8lOgSaPP_4jxxvDpAAyvU9wN13yuXj6I_IB2VsQkg","topics":[{"id":82374,"title":"Почему 9ый не считается верным, если запятую ввести нельзя? Получается эта задача тоже выполнена и должна входить в правильный ответ","plain_title":"Почему 9ый не считается верным, если запятую ввести нельзя? Получается эта задача тоже выполнена и должна входить в правильный ответ ","creator":{"public_name":"Стас Воробьёв","id":538177,"is_tutor":false},"comments":[{"creator":{"public_name":"Ivan Gagarinov","id":75907,"is_tutor":true},"id":167799,"body":"**Стас Воробьёв**, проблема как раз в том, что должна быть возможность ввести запятую. Немного подравил текст тикета, чтобы это было более очевидно","topic_id":82374}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Agile, Scrum и Kanban","entity_url":null,"active":true}},{"id":84886,"title":"Trello в России отключили...","plain_title":"Trello в России отключили... ","creator":{"public_name":"Илья Уваров","id":468528,"is_tutor":false},"comments":[{"creator":{"public_name":"Aleksandr Litvinov","id":117182,"is_tutor":true},"id":171627,"body":"Спасибо за внимательность, действительно, сейчас, чтобы зарегистрироваться необходимо использовать VPN: https://help.hexlet.io/ru/articles/111140-ispolzovanie-vpn","topic_id":84886}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Agile, Scrum и Kanban","entity_url":null,"active":true}},{"id":81401,"title":"Приветствую!\n\nСчитаю, что в условиях не понятны конкретные требования.\nЗадачи можно понимать и КАК ОШИБКУ и КАК ИСПРАВЛЕНИЕ.\nПоэтому снова использую перебор вариантов с надеждой завершить упражнение.","plain_title":"Приветствую! Считаю, что в условиях не понятны конкретные требования. Задачи можно понимать и КАК ОШИБКУ и КАК ИСПРАВЛЕНИЕ. Поэтому снова использую перебор вариантов с надеждой завершить упражнение. ","creator":{"public_name":"Петр Филимонов","id":465205,"is_tutor":false},"comments":[{"creator":{"public_name":"Петр Филимонов","id":465205,"is_tutor":false},"id":166597,"body":"Приветствую!\nЗадание решено!!!\nПришлось пару раз внимательно перечитать тикеты trello","topic_id":81401},{"creator":{"public_name":"Roman Ashikov","id":226258,"is_tutor":true},"id":166598,"body":"Отлично! Рад, что всё получилось!","topic_id":81401},{"creator":{"public_name":"Петр Филимонов","id":465205,"is_tutor":false},"id":166423,"body":"Приветствую!\n\nНе дочитал доску trello - увидел только 2 тикета )))\nТолько сейчас пролистал вниз )))\n\nБуду пробовать решить самостоятельно.\n\nНужно внимательнее читать задание.\n\"Для того чтобы верно найти решение — необходимо обратиться к доске Трелло, где вы сможете найти подробные задачи с описанием.\"","topic_id":81401},{"creator":{"public_name":"Roman Ashikov","id":226258,"is_tutor":true},"id":166411,"body":"Приветствую!\n\nСкажите, пожалуйста, какие именно задачи вызывали у вас вопросы? Если это необходимо, я изменю формулировки.","topic_id":81401}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Agile, Scrum и Kanban","entity_url":null,"active":true}},{"id":81654,"title":"Задачи со 2 по 6 включительно точно выполнены. Почему этот ответ оценивается как неверный?","plain_title":"Задачи со 2 по 6 включительно точно выполнены. Почему этот ответ оценивается как неверный? ","creator":{"public_name":"Дмитрий Бражников","id":560112,"is_tutor":false},"comments":[{"creator":{"public_name":"Nikolai Gagarinov","id":104929,"is_tutor":true},"id":166774,"body":"Дмитрий, добрый день.\n\nО каких заданиях/вопросах идет речь?","topic_id":81654}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Agile, Scrum и Kanban","entity_url":null,"active":true}},{"id":91715,"title":"Для чего в описании задачи приведены эти значения (цитата: Ниже приведены таблицы значений, в зависимости от срока страхования и мощности двигателя соответственно:)? Просто, чтобы было? p.S.не могу приложить скрин( поэтому вопрос текстом\n","plain_title":"Для чего в описании задачи приведены эти значения (цитата: Ниже приведены таблицы значений, в зависимости от срока страхования и мощности двигателя соответственно:)? Просто, чтобы было? p.S.не могу приложить скрин( поэтому вопрос текстом ","creator":{"public_name":"Анастасия Балышканова","id":635480,"is_tutor":false},"comments":[{"creator":{"public_name":"Ivan Gagarinov","id":75907,"is_tutor":true},"id":181250,"body":"**Анастасия Балышканова**, эти же значения есть в приложении, которое открывается в веб-доступе. Это сделано, что бы у вас было представление о работе тестируемого приложения, что в нем есть.","topic_id":91715}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Agile, Scrum и Kanban","entity_url":null,"active":true}},{"id":92513,"title":"Всем привет)\nС этим заданием пришлось повозиться хахаха, вы бы видели мои эмоции\nСоветую внимательно почитать задание и понять что он нас хотят\nУ нас всё получится, успехов)","plain_title":"Всем привет) С этим заданием пришлось повозиться хахаха, вы бы видели мои эмоции Советую внимательно почитать задание и понять что он нас хотят У нас всё получится, успехов) ","creator":{"public_name":"Сергей Касмынин","id":458021,"is_tutor":false},"comments":[{"creator":{"public_name":"Nikolai Gagarinov","id":104929,"is_tutor":true},"id":182284,"body":"Сергей, добрый день.\n\nРады, что у вас получилось =)","topic_id":92513}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Agile, Scrum и Kanban","entity_url":null,"active":true}},{"id":95824,"title":"Объясните пожалуйста почему не выполняется 8й пункт **\"Есть возможность ввести любые символы в поле, в котором ожидается только число\"**?\nВ четырех полях доступных для ввода символов при введении символов появляется сообщение о непрохождении валидации, как собственно и указано в задании в Трелло.","plain_title":"Объясните пожалуйста почему не выполняется 8й пункт \"Есть возможность ввести любые символы в поле, в котором ожидается только число\"? В четырех полях доступных для ввода символов при введении символов появляется сообщение о непрохождении валидации, как собственно и указано в задании в Трелло. ","creator":{"public_name":"Ilya Novikov","id":46545,"is_tutor":false},"comments":[{"creator":{"public_name":"Ivan Gagarinov","id":75907,"is_tutor":true},"id":186601,"body":"**Ilya Novikov**, здравствуйте. В задаче в трелло указано другое, и сообщение не должно появляться.","topic_id":95824}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Agile, Scrum и Kanban","entity_url":null,"active":true}},{"id":102406,"title":"были выбраны ответы 1 8 9 10, откуда вообще в правильном ответе 2 3 4 5 ВООБЩЕ не понимаю. поясните?","plain_title":"были выбраны ответы 1 8 9 10, откуда вообще в правильном ответе 2 3 4 5 ВООБЩЕ не понимаю. поясните? ","creator":{"public_name":"Andrew Gorelov","id":832713,"is_tutor":false},"comments":[{"creator":{"public_name":"Ivan Gagarinov","id":75907,"is_tutor":true},"id":194600,"body":"**Andrew**, здравствуйте! Вы проверяли задачи на доске? Например, первая задача не выполнена, так как коэффициент не должен вводиться вручную, а должен рассчитываться автоматически. Так же не забывайте про помощь наставника. С ним можно обсуждать любые вопросы.","topic_id":102406}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Agile, Scrum и Kanban","entity_url":null,"active":true}},{"id":102076,"title":"В тестовом упражении есть неточность в описании, указно:\n\n> Мощность двигателя — минимальная 101, максимальная 150 и выше\n\nНо в web приложении мощность можно выбрать любую, градация от \"до 50\" и до \"свыше 150\".","plain_title":"В тестовом упражении есть неточность в описании, указно: Мощность двигателя — минимальная 101, максимальная 150 и выше Но в web приложении мощность можно выбрать любую, градация от \"до 50\" и до \"свыше 150\". ","creator":{"public_name":"Игорь Черкасов","id":265748,"is_tutor":false},"comments":[{"creator":{"public_name":"Ivan Gagarinov","id":75907,"is_tutor":true},"id":194272,"body":"**Игорь Черкасов**, здравствуйте. Спасибо! Поправил.","topic_id":102076}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Agile, Scrum и Kanban","entity_url":null,"active":true}},{"id":106252,"title":"Привет. Как понять, что задание выполнено. Что должно произойти? Проверил, переставил. Что дальше? Касаемо самостоятельной работы.","plain_title":"Привет. Как понять, что задание выполнено. Что должно произойти? Проверил, переставил. Что дальше? Касаемо самостоятельной работы. ","creator":{"public_name":"Дмитрий Бугаев","id":936831,"is_tutor":false},"comments":[{"creator":{"public_name":"Ivan Gagarinov","id":75907,"is_tutor":true},"id":199108,"body":"**Дмитрий Бугаев**, здравствуйте. Цель таких заданий — это попрактиковаться в работе инструмента. Если это получилось, то результат есть. Тут действительно достаточно просто сделать перестановки. ","topic_id":106252}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Agile, Scrum и Kanban","entity_url":null,"active":true}}],"lesson":{"exercise":{"id":2241,"slug":"software_testing_lifecycle_scrum_exercise","name":null,"state":"active","kind":"exercise","language":"javascript","locale":"ru","has_web_view":true,"has_test_view":false,"reviewable":true,"readme":"Протестируйте приложение «Калькулятор страховки ОСАГО». Откройте веб-доступ и проверьте работу приложения.\n\nСтраховка высчитывается по следующей формуле:\n\n> _Базовая ставка_ * _Территориальный коэффициент_ * _Мощность двигателя_ * _КБМ_ * _Коэффициент стажа водителей_ * _Срок страхования_ * _Без ограничения количества водителей_\n\nРассмотрим подробнее каждое значение в формуле:\n\n* Базовая ставка — может быть от 1646 до 7535 включительно\n* Территориальный коэффициент — минимальный 0,68 и максимальный 1,88\n* Мощность двигателя — минимальная 50, максимальная 150 и выше\n* КБМ (коэффициент бонус-малус, зависящий от числа аварий) — варьируется в интервале от 0,46 до 3,92\n* Коэффициент стажа водителей — минимальный коэффициент составляет 0,83. Максимальный коэффициент 2,45\n* Срок страхования — от 5 дней до 1 года\n* Без ограничения количества водителей — если не указано, то 1,0. Если указано, то 2,32\n\nНиже приведены таблицы значений, в зависимости от срока страхования и мощности двигателя соответственно:\n\n|Срок страхования|Значение|\n|----------------|--------|\n|1 год|1|\n|9 месяцев|0,95|\n|6 месяцев|0,7|\n|3 месяцев|0,5|\n|От 16 дней до 30 дней|0,3|\n|От 5 до 15 дней|0,2|\n\n|Мощность двигателя авто, л/с|Коэффициент мощности|\n|----------------|--------|\n|До 50|0,6|\n|50 – 70|1|\n|70 – 100|1,1|\n|100 – 120|1,2|\n|120 – 150|1,4|\n|Свыше 150|1,6|\n\nРассмотрим список задач, которые находились в работе. Вам нужно выбрать из этих задач те, которые были выполнены и записать их в файл решения:\n\n1. Территориальный коэффициент можно вводить вручную\n2. В «Срок страхования» можно ввести строку\n3. Можно выбрать срок страхования более 1 года, но в этом нет смысла\n4. Не работает флаг «Без ограничения количества водителей»\n5. Выводится пустой результат вычисления, когда еще не была нажата кнопка\n6. Изменить текст валидации для числовых значений, которые вводятся вручную\n7. Добавить кнопку в админку, в которой устанавливаются коэффициенты\n8. Есть возможность ввести любые символы в поле, в котором ожидается только число\n9. Десятичные дроби нельзя ввести с запятой, можно только с точкой\n10. Сделать округление десятичных дробей до сотых\n\nЧтобы верно найти решение, необходимо обратиться к доске на Github Projects, где вы сможете найти подробные задачи с описанием. [Ссылка на доску](https://github.com/orgs/hexlet-components/projects/1/views/1). \n\n## solution\n\nЗапишите в файл **solution** номера тех задач, которые были выполнены. Пишите каждое значение на новой строке, например:\n\n```\n2\n3\n6\n```\n\nДополнительно: скопируйте доску в Github Projects и добавьте в нее новые баги или другие задачи, которые найдете. Добавьте в новые задачи соответствующие метки: Bug, Features.\n","prepared_readme":"Протестируйте приложение «Калькулятор страховки ОСАГО». Откройте веб-доступ и проверьте работу приложения.\n\nСтраховка высчитывается по следующей формуле:\n\n> _Базовая ставка_ * _Территориальный коэффициент_ * _Мощность двигателя_ * _КБМ_ * _Коэффициент стажа водителей_ * _Срок страхования_ * _Без ограничения количества водителей_\n\nРассмотрим подробнее каждое значение в формуле:\n\n* Базовая ставка — может быть от 1646 до 7535 включительно\n* Территориальный коэффициент — минимальный 0,68 и максимальный 1,88\n* Мощность двигателя — минимальная 50, максимальная 150 и выше\n* КБМ (коэффициент бонус-малус, зависящий от числа аварий) — варьируется в интервале от 0,46 до 3,92\n* Коэффициент стажа водителей — минимальный коэффициент составляет 0,83. Максимальный коэффициент 2,45\n* Срок страхования — от 5 дней до 1 года\n* Без ограничения количества водителей — если не указано, то 1,0. Если указано, то 2,32\n\nНиже приведены таблицы значений, в зависимости от срока страхования и мощности двигателя соответственно:\n\n|Срок страхования|Значение|\n|----------------|--------|\n|1 год|1|\n|9 месяцев|0,95|\n|6 месяцев|0,7|\n|3 месяцев|0,5|\n|От 16 дней до 30 дней|0,3|\n|От 5 до 15 дней|0,2|\n\n|Мощность двигателя авто, л/с|Коэффициент мощности|\n|----------------|--------|\n|До 50|0,6|\n|50 – 70|1|\n|70 – 100|1,1|\n|100 – 120|1,2|\n|120 – 150|1,4|\n|Свыше 150|1,6|\n\nРассмотрим список задач, которые находились в работе. Вам нужно выбрать из этих задач те, которые были выполнены и записать их в файл решения:\n\n1. Территориальный коэффициент можно вводить вручную\n2. В «Срок страхования» можно ввести строку\n3. Можно выбрать срок страхования более 1 года, но в этом нет смысла\n4. Не работает флаг «Без ограничения количества водителей»\n5. Выводится пустой результат вычисления, когда еще не была нажата кнопка\n6. Изменить текст валидации для числовых значений, которые вводятся вручную\n7. Добавить кнопку в админку, в которой устанавливаются коэффициенты\n8. Есть возможность ввести любые символы в поле, в котором ожидается только число\n9. Десятичные дроби нельзя ввести с запятой, можно только с точкой\n10. Сделать округление десятичных дробей до сотых\n\nЧтобы верно найти решение, необходимо обратиться к доске на Github Projects, где вы сможете найти подробные задачи с описанием. [Ссылка на доску](https://github.com/orgs/hexlet-components/projects/1/views/1). \n\n## solution\n\nЗапишите в файл **solution** номера тех задач, которые были выполнены. Пишите каждое значение на новой строке, например:\n\n```\n2\n3\n6\n```\n\nДополнительно: скопируйте доску в Github Projects и добавьте в нее новые баги или другие задачи, которые найдете. Добавьте в новые задачи соответствующие метки: Bug, Features.\n","has_solution":true,"entity_name":"Agile, Scrum и Kanban"},"units":[{"id":7333,"name":"theory","url":"/courses/software-testing-lifecycle/lessons/scrum/theory_unit"},{"id":7631,"name":"quiz","url":"/courses/software-testing-lifecycle/lessons/scrum/quiz_unit"},{"id":7682,"name":"exercise","url":"/courses/software-testing-lifecycle/lessons/scrum/exercise_unit"}],"links":[],"ordered_units":[{"id":7333,"name":"theory","url":"/courses/software-testing-lifecycle/lessons/scrum/theory_unit"},{"id":7631,"name":"quiz","url":"/courses/software-testing-lifecycle/lessons/scrum/quiz_unit"},{"id":7682,"name":"exercise","url":"/courses/software-testing-lifecycle/lessons/scrum/exercise_unit"}],"id":3308,"slug":"scrum","state":"approved","name":"Agile, Scrum и Kanban","course_order":700,"goal":"Знакомимся с гибкой методологией разработки","self_study":"Если у вас нет аккаунта на GitHub, то зарегистрируйтесь.\n\nGitHub предлагает функционал по созданию канбан-досок в разделе Projects.\n\nЗайдите на GitHub и выполните следующие шаги:\n\n* Создайте новый проект в разделе Projects вашего репозитория. Это можно сделать через вкладку \"Projects\" → кнопку \"New project\".\n* Настройте свой проект, используя шаблон \"Team planning\", который автоматически добавит колонки To do, In progress и Done.\n* В этом [шаблоне](https://github.com/orgs/hexlet-components/projects/6/views/1) вы найдете карточки с описанием багов. В колонке To do в своем проекте повторите карточки.\n* Проверьте, какие из них уже исправлены и переместите карточки в столбец Done.\n","theory_video_provider":"vimeo","theory_video_uid":"781455483","theory":"Agile (гибкая методология разработки) — это крайне популярный подход не только в IT, но и в других сферах жизни, где нужно управлять процессами.\n\nДля управления Agile-проектами можно использовать разные фреймворки, с которыми мы познакомимся в этом уроке.\n\n## Что такое Agile\n\nОсновная особенность Agile состоит в том, что заказчик, проектировщик, тестировщик и разработчик постоянно общаются друг с другом во время всего цикла. Это позволяет свести к минимуму недопонимания, ошибки и дефекты.\n\nAgile-команда может очень быстро изменять план разработки в случае изменения приоритетов у заказчика. Она быстрее чинит найденные дефекты и дает более точный отчет о прогрессе.\n\nНо к сожалению, сам по себе Agile не дает конкретных шагов. Он не говорит, что делать. Сам подход не учит строить гибкие процессы так, чтобы реально повысить продуктивность в команде. Сам Agile дает только [принципы работы](https://agilemanifesto.org/iso/ru/principles.html) и [манифест](https://agilemanifesto.org/iso/ru/manifesto.html), c которыми вы можете ознакомиться в официальных руководствах.\n\nНо для достижения желаемого принципов недостаточно — нужно использовать разные фреймворки. К самым популярным относятся Scrum и Kanban.\n\n## Что такое спринты\n\nВ Agile рабочий процесс делится на **спринты** — это равные отрезки времени, в течение которых команда создает и совершенствует отдельную часть продукта.\n\nКаждый спринт построен одинаково. В начале команда планирует задачи и проводит оценку предстоящей работы, и только после этого приступает к работе.\n\nОбычно спринт длится от одной до трех недель. Такое деление на короткие отрезки сохраняет гибкость в процессах — команда всегда готова к изменениям условий и не слишком погружается в глобальную доработку. Еще соблюдение сроков спринта организует рабочий процесс, задает ритм и помогает разработчикам распределять время.\n\nПо итогам спринта должен получится или мини-продукт или отдельная часть системы, которая содержит самостоятельную функциональность, готовую к использованию.\n\nС помощью спринтов можно уменьшить Time to Market. В идеальном случае, мы отправляем новую версию продукта в продакшен в конце каждого спринта.\n\n## Что такое Scrum\n\nScrum — методика организации совместного рабочего процесса. В ее основе лежит поэтапная разработка и совершенствование продукта. Причем над продуктом работает небольшая команда специалистов разного профиля.\n\nМетодика Scrum относится к семейству Agile. Часто эти два понятия используются как синонимы, но это некорректно:\n\n* Agile — это набор определенных ценностей и философия работы в команде\n* Scrum — это производственная методика, которая воплощает Agile-подход и на практике применяет принципы Agile\n\nScrum — это базовая структура, в которую входят:\n\n* Регулярные собрания\n* Создание артефактов\n* Четкое распределение обязанностей между участниками\n* Добавление в команду двух новых ролей — Product owner и Scrum-master\n\nИменно эти особенности позволяют использовать Scrum и таким образом добиваться того, чтобы принципы Agile заработали в конкретной команде.\n\nОсновная цель методики Scrum — это дать заказчику желаемый продукт вовремя и с минимально возможными затратами. Чтобы прийти к такому результату, Scrum настраивает команду на выполнение следующих Agile-принципов:\n\n* **Постоянное совершенствование** — вся команда совершенствует свои навыки, поэтому продукт постепенно улучшается\n* **Автономность** — каждый участник команды несет ответственность и за свою часть работы, и за общий результат\n* **Кроссфункциональность** — команда состоит из людей с разными навыками, что делает ее самодостаточной\n\nПодробнее о Scrum можно почитать в официальном руководстве [на английском](https://scrumguides.org/) и [русском языке](https://scrumguides.org/docs/scrumguide/v2020/2020-Scrum-Guide-Russian.pdf).\n\n## Как происходят собрания\n\nМетодика Scrum устанавливает четкий формат собраний команды и заказчиков:\n\n**Планирование спринта**. В начале каждого спринта команда смотрит на **бэклог** — список имеющихся задач с приоритетами. Затем она оценивает трудозатраты на выполнение задач. Исходя из оценки, члены команды все вместе определяют **скоуп** — объем задач, который они успеют сделать за спринт. Эта встреча длится примерно час, на ней должна присутствовать вся команда.\n\n**Ежедневный стэндап**. Это собрание обычно проходит каждое утро рабочего дня. Каждый член команды рассказывает о прогрессе за предыдущий день, о планах на сегодня и возникающих проблемах. Собрание длится не более 15 минут. Его даже советуют проводить стоя, чтобы людям хотелось быстро обсудить важное и не тратить время на ненужную болтовню.\n\n**Обзор итогов спринта**. Это собрание проводится или в конце спринта, или по достижению контрольной точки — например, когда закончен какой-то функционал. Члены команды показывают результаты работы и рассказывают о них. Обычно это собрание проходит в виде **демо** — демонстраций. На это собрание приходит не только команда: также могут присутствовать заказчик и другие внешние для команды участники процесса.\n\n**Ретроспектива**. Это собрание тоже проходит в конце спринта, но на нем присутствует только команда. На ретроспективе все участники команды могут поделиться своими успехами и неудачами, а также поразмышлять над их причинами. По итогам этого собрания можно предпринять шаги, чтобы сделать командную работу лучше.\n\n**Бэклог рефайнмент**. Бэклог содержит в себе все запросы заказчика, и обычно они превышают возможности команды. Поэтому со временем задач в бэклоге становится слишком много. Тогда команда проводит уборку и пересматривает задачи: убирает устаревшие, пересматривает приоритеты, рассматривает условия для начала выполнения задачи, оценивает время и трудозатраты. Этот процесс курирует product owner — представитель заказчика. Актуализация бэклога помогает оптимизировать планирование спринтов.\n\n## Что такое Kanban\n\nKanban — это методика постоянного обсуждения производительности. Самый важный принцип этого подхода можно сформулировать так: «Есть некий ограниченный набор задач, который может выполниться в единицу времени». Члены команды осознают это ограничение и не берут больше заданий, чем могут сделать.\n\nЗдесь не нужны спринты, потому что команда расставляет приоритеты по задачам и в реальном времени отслеживает статус их выполнения. Отслеживать прогресс по задачам помогают специальные **канбан-доски**, на которых всегда отражена актуальная информация.\n\nКоманды используют физические или программные доски. Пространство на доске разделяется на части, отражающие стадии работы над продуктом. Количество стадий может быть разным, но обязательно должны быть три этапа (слева направо):\n\n* Запланированные задачи\n* Задачи в активной работе\n* Выполненные задачи\n\nДоска — это визуальное отображение рабочего процесса на разных стадиях. С ее помощью каждый член команды может контролировать свою работу и следить за проектом:\n\n\n"},"lessonMember":null,"courseMember":null,"course":{"start_lesson":{"exercise":null,"units":[{"id":7327,"name":"theory","url":"/courses/software-testing-lifecycle/lessons/intro/theory_unit"}],"links":[],"ordered_units":[{"id":7327,"name":"theory","url":"/courses/software-testing-lifecycle/lessons/intro/theory_unit"}],"id":3302,"slug":"intro","state":"approved","name":"Введение","course_order":100,"goal":"Знакомимся с темой курса","self_study":null,"theory_video_provider":null,"theory_video_uid":null,"theory":"\n\nВ современном мире информационные технологии плотно вошли во все сферы жизни. Они применяются даже в таких традиционно ручных сферах, как сельское хозяйство: дроны-беспилотники ухаживают за полями, а коровы виртуально гуляют по альпийским лугам. Разнообразие выполняемых задач отражается на сложности программного обеспечения (ПО) — программ, обслуживающих эти технологии.\n\nНо еще сложнее все обстоит с тем, как программы создаются. У пользователей постоянно появляются новые потребности, поэтому программисты разрабатывают новые стандарты и технологии, которые делают программы лучше: удобнее, комфортнее, красивее, быстрее.\n\nВсе мы знаем, сколько новых моделей смартфонов выходит каждый год. В них появляется постоянно что-то новое, и это новое надо включать в операционную систему, в приложения. А еще разработчики регулярно получают предложения и жалобы пользователей, придумывают новые идеи, устраняют найденные дефекты. Все это создает огромную базу для постоянного роста и изменения программ.\n\nПоэтому современное программное обеспечение сейчас — это что-то постоянно изменяющееся. Оно идет в ногу со временем, подстраивается под потребности компании, эволюционирует как живое существо. Именно из-за этого сравнения весь путь программы от создания до обслуживания и утилизации назвали **жизненным циклом программного обеспечения**. Именно его мы и будем изучать в этом курсе.\n\n## Цели курса\n\nЗдесь вы изучите жизненный цикл программного обеспечения. Вы узнаете о этапах разработки приложений и жизненных моделях. В итоге вы научитесь различать этапы разработки и выбирать подходящую модель жизненного цикла. Знания из этого курса помогают тестировщикам взаимодействовать с другими участниками команды, понимать свою роль на каждом этапе разработки и поддержки продукта.\n\nМы рассмотрим такие темы:\n\n* Жизненный цикл ПО\n* Модели жизненного цикла, их плюсы и минусы\n* Место тестирования в жизненном цикле ПО\n* Time to market — время, которое проходит между стартом работы над программой и ее выходом на рынок\n"},"id":322,"slug":"software-testing-lifecycle","challenges_count":3,"name":"Жизненный цикл ПО","allow_indexing":true,"state":"approved","course_state":"finished","pricing_type":"paid","description":"На этом курсе вы изучите жизненный цикл программного обеспечения. Вы узнаете о этапах разработки приложений, жизненных моделях. В итоге вы научитесь различать каждый этап разработки. Знания из этого курса помогают тестировщикам взаимодействовать с другими участниками команды и понимать свою роль на каждом этапе разработки и поддержки продукта.","kind":"additional","updated_at":"2026-01-20T11:50:33.337Z","language":"other","duration_cache":18480,"skills":["Понимать, из каких этапов строится разработка ПО","Различать проектные структуры компании","Отличать Scrum от других гибких методологий и понимать, зачем он нужен"],"keywords":[],"lessons_count":7,"cover":"https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6ODE2MSwicHVyIjoiYmxvYl9pZCJ9fQ==--8d3d3ae053821e424c1173501dbfd487e5e53ec5/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJwbmciLCJyZXNpemVfdG9fZmlsbCI6WzYwMCw0MDBdfSwicHVyIjoidmFyaWF0aW9uIn19--6067466c2912ca31a17eddee04b8cf2a38c6ad17/image.png"},"recommendedLandings":[{"stack":{"id":56,"slug":"qa-engineer","title":"Инженер по тестированию","audience":"for_beginners","start_type":"weekly","pricing_model":"purchase","priority":"high","kind":"profession","state":"published","stack_state":"finished","order":40,"duration_in_months":4},"id":100,"slug":"qa-engineer","title":"Инженер по ручному тестированию","subtitle":"Изучите виды тестирования, тест-кейсы, DevTools, Postman, SQL, Git и HTTP/HTTPS.","subtitle_for_lists":"Изучите виды тестирования, тест-кейсы, DevTools, Postman, SQL, Git и HTTP/HTTPS.","locale":"ru","current":true,"duration_in_months_text":"4 месяца","stack_slug":"qa-engineer","price_text":"от 3 368 ₽","duration_text":"4 месяца","cover_list_variant":"https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6Mzk1MCwicHVyIjoiYmxvYl9pZCJ9fQ==--4a16fe638654fb8d5ae09d7e8ab8e16ff228214f/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Bug%20fixing-amico.png"}],"lessonMemberUnit":null,"accessToLearnUnitExists":false,"accessToCourseExists":false},"url":"/courses/software-testing-lifecycle/lessons/scrum/theory_unit","version":"8f286f6358a90a7bef2263b3a6edf5a90a94fa42","encryptHistory":false,"clearHistory":false}"><style data-mantine-styles="true">:root, :host{--mantine-font-family: Arial, sans-serif;--mantine-font-family-headings: Arial, sans-serif;--mantine-heading-font-weight: normal;--mantine-radius-default: 0rem;--mantine-primary-color-filled: var(--mantine-color-indigo-filled);--mantine-primary-color-filled-hover: var(--mantine-color-indigo-filled-hover);--mantine-primary-color-light: var(--mantine-color-indigo-light);--mantine-primary-color-light-hover: var(--mantine-color-indigo-light-hover);--mantine-primary-color-light-color: var(--mantine-color-indigo-light-color);--mantine-spacing-xxl: calc(4rem * var(--mantine-scale));--mantine-font-size-xs: 12px;--mantine-font-size-sm: 14px;--mantine-font-size-md: 16px;--mantine-font-size-lg: clamp(16.0000px, calc(15.2727px + 0.2273vw), 18.0000px);--mantine-font-size-xl: clamp(16.0000px, calc(14.5455px + 0.4545vw), 20.0000px);--mantine-font-size-display-3: clamp(32.0000px, calc(26.1818px + 1.8182vw), 48.0000px);--mantine-font-size-display-2: clamp(36.0000px, calc(25.8182px + 3.1818vw), 64.0000px);--mantine-font-size-display-1: clamp(40.0000px, calc(25.4545px + 4.5455vw), 80.0000px);--mantine-font-size-h1: clamp(28.0000px, calc(23.6364px + 1.3636vw), 40.0000px);--mantine-font-size-h2: clamp(24.0000px, calc(21.0909px + 0.9091vw), 32.0000px);--mantine-font-size-h3: clamp(20.0000px, calc(17.0909px + 0.9091vw), 28.0000px);--mantine-font-size-h4: clamp(16.0000px, calc(13.0909px + 0.9091vw), 24.0000px);--mantine-font-size-h5: clamp(16.0000px, calc(14.5455px + 0.4545vw), 20.0000px);--mantine-font-size-h6: 1rem;--mantine-primary-color-0: var(--mantine-color-indigo-0);--mantine-primary-color-1: var(--mantine-color-indigo-1);--mantine-primary-color-2: var(--mantine-color-indigo-2);--mantine-primary-color-3: var(--mantine-color-indigo-3);--mantine-primary-color-4: var(--mantine-color-indigo-4);--mantine-primary-color-5: var(--mantine-color-indigo-5);--mantine-primary-color-6: var(--mantine-color-indigo-6);--mantine-primary-color-7: var(--mantine-color-indigo-7);--mantine-primary-color-8: var(--mantine-color-indigo-8);--mantine-primary-color-9: var(--mantine-color-indigo-9);--mantine-color-red-0: #ffeaea;--mantine-color-red-1: #fed4d4;--mantine-color-red-2: #f4a7a8;--mantine-color-red-3: #ec7878;--mantine-color-red-4: #e55050;--mantine-color-red-5: #e03131;--mantine-color-red-6: #e02829;--mantine-color-red-7: #c71a1c;--mantine-color-red-8: #b21218;--mantine-color-red-9: #9c0411;--mantine-color-violet-0: #fce9ff;--mantine-color-violet-1: #f1cfff;--mantine-color-violet-2: #e09bff;--mantine-color-violet-3: #d16fff;--mantine-color-violet-4: #be37fe;--mantine-color-violet-5: #b51afe;--mantine-color-violet-6: #b009ff;--mantine-color-violet-7: #9b00e4;--mantine-color-violet-8: #8a00cc;--mantine-color-violet-9: #7800b3;--mantine-color-indigo-0: #edecff;--mantine-color-indigo-1: #d6d5fe;--mantine-color-indigo-2: #aaa9f4;--mantine-color-indigo-3: #7b79eb;--mantine-color-indigo-4: #5451e4;--mantine-color-indigo-5: #3b37e0;--mantine-color-indigo-6: #2d2adf;--mantine-color-indigo-7: #1f1ec7;--mantine-color-indigo-8: #1819b2;--mantine-color-indigo-9: #0c149e;--mantine-color-cyan-0: #dffdff;--mantine-color-cyan-1: #caf5ff;--mantine-color-cyan-2: #99e8ff;--mantine-color-cyan-3: #64daff;--mantine-color-cyan-4: #3ccffe;--mantine-color-cyan-5: #24c8fe;--mantine-color-cyan-6: #00c2ff;--mantine-color-cyan-7: #00ade4;--mantine-color-cyan-8: #009acd;--mantine-color-cyan-9: #0085b5;--mantine-color-green-0: #e9fdec;--mantine-color-green-1: #d7f6dc;--mantine-color-green-2: #b0eab9;--mantine-color-green-3: #86df94;--mantine-color-green-4: #62d574;--mantine-color-green-5: #4ccf5f;--mantine-color-green-6: #3fcc54;--mantine-color-green-7: #2fb344;--mantine-color-green-8: #25a03b;--mantine-color-green-9: #138a2e;--mantine-color-yellow-0: #fff7e2;--mantine-color-yellow-1: #ffeecd;--mantine-color-yellow-2: #ffdc9c;--mantine-color-yellow-3: #ffc966;--mantine-color-yellow-4: #feb93a;--mantine-color-yellow-5: #feae1e;--mantine-color-yellow-6: #ffa90f;--mantine-color-yellow-8: #ca8200;--mantine-color-yellow-9: #af7000;--mantine-h1-font-size: clamp(28.0000px, calc(23.6364px + 1.3636vw), 40.0000px);--mantine-h1-font-weight: normal;--mantine-h2-font-size: clamp(24.0000px, calc(21.0909px + 0.9091vw), 32.0000px);--mantine-h2-font-weight: normal;--mantine-h3-font-size: clamp(20.0000px, calc(17.0909px + 0.9091vw), 28.0000px);--mantine-h3-font-weight: normal;--mantine-h4-font-size: clamp(16.0000px, calc(13.0909px + 0.9091vw), 24.0000px);--mantine-h4-font-weight: normal;--mantine-h5-font-size: clamp(16.0000px, calc(14.5455px + 0.4545vw), 20.0000px);--mantine-h5-font-weight: normal;--mantine-h6-font-size: 1rem;--mantine-h6-font-weight: normal;}
:root[data-mantine-color-scheme="dark"], :host([data-mantine-color-scheme="dark"]){--mantine-color-anchor: var(--mantine-color-text);--mantine-color-dimmed: #495057;--mantine-color-dark-filled: var(--mantine-color-dark-5);--mantine-color-dark-filled-hover: var(--mantine-color-dark-6);--mantine-color-dark-light: rgba(105, 105, 105, 0.15);--mantine-color-dark-light-hover: rgba(105, 105, 105, 0.2);--mantine-color-dark-light-color: var(--mantine-color-dark-0);--mantine-color-dark-outline: var(--mantine-color-dark-1);--mantine-color-dark-outline-hover: rgba(184, 184, 184, 0.05);--mantine-color-gray-filled: var(--mantine-color-gray-5);--mantine-color-gray-filled-hover: var(--mantine-color-gray-6);--mantine-color-gray-light: rgba(222, 226, 230, 0.15);--mantine-color-gray-light-hover: rgba(222, 226, 230, 0.2);--mantine-color-gray-light-color: var(--mantine-color-gray-0);--mantine-color-gray-outline: var(--mantine-color-gray-1);--mantine-color-gray-outline-hover: rgba(241, 243, 245, 0.05);--mantine-color-red-filled: var(--mantine-color-red-5);--mantine-color-red-filled-hover: var(--mantine-color-red-6);--mantine-color-red-light: rgba(236, 120, 120, 0.15);--mantine-color-red-light-hover: rgba(236, 120, 120, 0.2);--mantine-color-red-light-color: var(--mantine-color-red-0);--mantine-color-red-outline: var(--mantine-color-red-1);--mantine-color-red-outline-hover: rgba(254, 212, 212, 0.05);--mantine-color-pink-filled: var(--mantine-color-pink-5);--mantine-color-pink-filled-hover: var(--mantine-color-pink-6);--mantine-color-pink-light: rgba(250, 162, 193, 0.15);--mantine-color-pink-light-hover: rgba(250, 162, 193, 0.2);--mantine-color-pink-light-color: var(--mantine-color-pink-0);--mantine-color-pink-outline: var(--mantine-color-pink-1);--mantine-color-pink-outline-hover: rgba(255, 222, 235, 0.05);--mantine-color-grape-filled: var(--mantine-color-grape-5);--mantine-color-grape-filled-hover: var(--mantine-color-grape-6);--mantine-color-grape-light: rgba(229, 153, 247, 0.15);--mantine-color-grape-light-hover: rgba(229, 153, 247, 0.2);--mantine-color-grape-light-color: var(--mantine-color-grape-0);--mantine-color-grape-outline: var(--mantine-color-grape-1);--mantine-color-grape-outline-hover: rgba(243, 217, 250, 0.05);--mantine-color-violet-filled: var(--mantine-color-violet-5);--mantine-color-violet-filled-hover: var(--mantine-color-violet-6);--mantine-color-violet-light: rgba(209, 111, 255, 0.15);--mantine-color-violet-light-hover: rgba(209, 111, 255, 0.2);--mantine-color-violet-light-color: var(--mantine-color-violet-0);--mantine-color-violet-outline: var(--mantine-color-violet-1);--mantine-color-violet-outline-hover: rgba(241, 207, 255, 0.05);--mantine-color-indigo-filled: var(--mantine-color-indigo-5);--mantine-color-indigo-filled-hover: var(--mantine-color-indigo-6);--mantine-color-indigo-light: rgba(123, 121, 235, 0.15);--mantine-color-indigo-light-hover: rgba(123, 121, 235, 0.2);--mantine-color-indigo-light-color: var(--mantine-color-indigo-0);--mantine-color-indigo-outline: var(--mantine-color-indigo-1);--mantine-color-indigo-outline-hover: rgba(214, 213, 254, 0.05);--mantine-color-blue-filled: var(--mantine-color-blue-5);--mantine-color-blue-filled-hover: var(--mantine-color-blue-6);--mantine-color-blue-light: rgba(116, 192, 252, 0.15);--mantine-color-blue-light-hover: rgba(116, 192, 252, 0.2);--mantine-color-blue-light-color: var(--mantine-color-blue-0);--mantine-color-blue-outline: var(--mantine-color-blue-1);--mantine-color-blue-outline-hover: rgba(208, 235, 255, 0.05);--mantine-color-cyan-filled: var(--mantine-color-cyan-5);--mantine-color-cyan-filled-hover: var(--mantine-color-cyan-6);--mantine-color-cyan-light: rgba(100, 218, 255, 0.15);--mantine-color-cyan-light-hover: rgba(100, 218, 255, 0.2);--mantine-color-cyan-light-color: var(--mantine-color-cyan-0);--mantine-color-cyan-outline: var(--mantine-color-cyan-1);--mantine-color-cyan-outline-hover: rgba(202, 245, 255, 0.05);--mantine-color-teal-filled: var(--mantine-color-teal-5);--mantine-color-teal-filled-hover: var(--mantine-color-teal-6);--mantine-color-teal-light: rgba(99, 230, 190, 0.15);--mantine-color-teal-light-hover: rgba(99, 230, 190, 0.2);--mantine-color-teal-light-color: var(--mantine-color-teal-0);--mantine-color-teal-outline: var(--mantine-color-teal-1);--mantine-color-teal-outline-hover: rgba(195, 250, 232, 0.05);--mantine-color-green-filled: var(--mantine-color-green-5);--mantine-color-green-filled-hover: var(--mantine-color-green-6);--mantine-color-green-light: rgba(134, 223, 148, 0.15);--mantine-color-green-light-hover: rgba(134, 223, 148, 0.2);--mantine-color-green-light-color: var(--mantine-color-green-0);--mantine-color-green-outline: var(--mantine-color-green-1);--mantine-color-green-outline-hover: rgba(215, 246, 220, 0.05);--mantine-color-lime-filled: var(--mantine-color-lime-5);--mantine-color-lime-filled-hover: var(--mantine-color-lime-6);--mantine-color-lime-light: rgba(192, 235, 117, 0.15);--mantine-color-lime-light-hover: rgba(192, 235, 117, 0.2);--mantine-color-lime-light-color: var(--mantine-color-lime-0);--mantine-color-lime-outline: var(--mantine-color-lime-1);--mantine-color-lime-outline-hover: rgba(233, 250, 200, 0.05);--mantine-color-yellow-filled: var(--mantine-color-yellow-5);--mantine-color-yellow-filled-hover: var(--mantine-color-yellow-6);--mantine-color-yellow-light: rgba(255, 201, 102, 0.15);--mantine-color-yellow-light-hover: rgba(255, 201, 102, 0.2);--mantine-color-yellow-light-color: var(--mantine-color-yellow-0);--mantine-color-yellow-outline: var(--mantine-color-yellow-1);--mantine-color-yellow-outline-hover: rgba(255, 238, 205, 0.05);--mantine-color-orange-filled: var(--mantine-color-orange-5);--mantine-color-orange-filled-hover: var(--mantine-color-orange-6);--mantine-color-orange-light: rgba(255, 192, 120, 0.15);--mantine-color-orange-light-hover: rgba(255, 192, 120, 0.2);--mantine-color-orange-light-color: var(--mantine-color-orange-0);--mantine-color-orange-outline: var(--mantine-color-orange-1);--mantine-color-orange-outline-hover: rgba(255, 232, 204, 0.05);--app-cta-gradient: linear-gradient(90deg, var(--mantine-color-blue-9) 0%, var(--mantine-color-cyan-7) 100%);--app-color-surface: #2e2e2e;}
:root[data-mantine-color-scheme="light"], :host([data-mantine-color-scheme="light"]){--mantine-color-anchor: var(--mantine-color-text);--mantine-color-dimmed: #495057;--mantine-color-red-light: rgba(224, 40, 41, 0.1);--mantine-color-red-light-hover: rgba(224, 40, 41, 0.12);--mantine-color-red-outline-hover: rgba(224, 40, 41, 0.05);--mantine-color-violet-light: rgba(176, 9, 255, 0.1);--mantine-color-violet-light-hover: rgba(176, 9, 255, 0.12);--mantine-color-violet-outline-hover: rgba(176, 9, 255, 0.05);--mantine-color-indigo-light: rgba(45, 42, 223, 0.1);--mantine-color-indigo-light-hover: rgba(45, 42, 223, 0.12);--mantine-color-indigo-outline-hover: rgba(45, 42, 223, 0.05);--mantine-color-cyan-light: rgba(0, 194, 255, 0.1);--mantine-color-cyan-light-hover: rgba(0, 194, 255, 0.12);--mantine-color-cyan-outline-hover: rgba(0, 194, 255, 0.05);--mantine-color-green-light: rgba(63, 204, 84, 0.1);--mantine-color-green-light-hover: rgba(63, 204, 84, 0.12);--mantine-color-green-outline-hover: rgba(63, 204, 84, 0.05);--mantine-color-yellow-light: rgba(255, 169, 15, 0.1);--mantine-color-yellow-light-hover: rgba(255, 169, 15, 0.12);--mantine-color-yellow-outline-hover: rgba(255, 169, 15, 0.05);--app-color-surface: #f1f3f5;--app-cta-gradient: linear-gradient(90deg, var(--mantine-color-blue-filled) 0%, var(--mantine-color-cyan-5) 100%);}</style><style data-mantine-styles="classes">@media (max-width: 35.99375em) {.mantine-visible-from-xs {display: none !important;}}@media (min-width: 36em) {.mantine-hidden-from-xs {display: none !important;}}@media (max-width: 47.99375em) {.mantine-visible-from-sm {display: none !important;}}@media (min-width: 48em) {.mantine-hidden-from-sm {display: none !important;}}@media (max-width: 61.99375em) {.mantine-visible-from-md {display: none !important;}}@media (min-width: 62em) {.mantine-hidden-from-md {display: none !important;}}@media (max-width: 74.99375em) {.mantine-visible-from-lg {display: none !important;}}@media (min-width: 75em) {.mantine-hidden-from-lg {display: none !important;}}@media (max-width: 87.99375em) {.mantine-visible-from-xl {display: none !important;}}@media (min-width: 88em) {.mantine-hidden-from-xl {display: none !important;}}</style><div style="position:absolute;top:0rem" class=""></div><div style="max-width:var(--container-size-xl);height:100%;min-height:0rem" class=""><style data-mantine-styles="inline">.__m__-_R_5ub_{--grid-gutter:0rem;}</style><div style="height:100%;min-height:0rem" class="m_410352e9 mantine-Grid-root __m__-_R_5ub_"><div class="m_dee7bd2f mantine-Grid-inner" style="height:100%"><style data-mantine-styles="inline">.__m__-_R_rdub_{--col-flex-grow:auto;--col-flex-basis:91.66666666666667%;--col-max-width:91.66666666666667%;}@media(min-width: 48em){.__m__-_R_rdub_{--col-flex-grow:auto;--col-flex-basis:83.33333333333334%;--col-max-width:83.33333333333334%;}}</style><div style="min-width:0rem;height:100%;min-height:0rem;display:flex" class="m_96bdd299 mantine-Grid-col __m__-_R_rdub_"><style data-mantine-styles="inline">.__m__-_R_6qrdub_{margin-top:0rem;padding-inline:var(--mantine-spacing-xs);width:100%;}@media(min-width: 48em){.__m__-_R_6qrdub_{margin-top:var(--mantine-spacing-xl);width:80%;}}@media(min-width: 62em){.__m__-_R_6qrdub_{padding-inline:var(--mantine-spacing-xl);}}</style><div style="margin-inline:auto;max-width:var(--mantine-breakpoint-xl)" class="__m__-_R_6qrdub_"><div style="color:var(--mantine-color-dimmed)" class="m_4451eb3a mantine-Center-root" data-inline="true"><div style="--ti-size:var(--ti-size-xs);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;margin-inline-end:calc(0.125rem * var(--mantine-scale));color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="xs"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-lock "><path d="M5 13a2 2 0 0 1 2 -2h10a2 2 0 0 1 2 2v6a2 2 0 0 1 -2 2h-10a2 2 0 0 1 -2 -2v-6"></path><path d="M11 16a1 1 0 1 0 2 0a1 1 0 0 0 -2 0"></path><path d="M8 11v-4a4 4 0 1 1 8 0v4"></path></svg></div><p style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Жизненный цикл ПО</p></div><h1 style="--title-fw:var(--mantine-h1-font-weight);--title-lh:var(--mantine-h1-line-height);--title-fz:var(--mantine-h1-font-size);margin-bottom:var(--mantine-spacing-xl)" class="m_8a5d1357 mantine-Title-root" data-order="1">Теория: Agile, Scrum и Kanban</h1><script type="application/ld+json">{"@context":"https://schema.org","@type":"LearningResource","name":"Agile, Scrum и Kanban","inLanguage":"ru","isPartOf":{"@type":"LearningResource","name":"Жизненный цикл ПО"},"isAccessibleForFree":"False","hasPart":{"@type":"WebPageElement","isAccessibleForFree":"False","cssSelector":".paywalled"}}</script><div class=""><div style="--alert-color:var(--mantine-color-indigo-light-color);margin-bottom:var(--mantine-spacing-lg);font-size:var(--mantine-font-size-lg)" class="m_66836ed3 mantine-Alert-root" id="mantine-_R_remqrdub_" role="alert" aria-describedby="mantine-_R_remqrdub_-body" aria-labelledby="mantine-_R_remqrdub_-title"><div class="m_a5d60502 mantine-Alert-wrapper"><div class="m_667f2a6a mantine-Alert-icon"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-rocket "><path d="M4 13a8 8 0 0 1 7 7a6 6 0 0 0 3 -5a9 9 0 0 0 6 -8a3 3 0 0 0 -3 -3a9 9 0 0 0 -8 6a6 6 0 0 0 -5 3"></path><path d="M7 14a6 6 0 0 0 -3 6a6 6 0 0 0 6 -3"></path><path d="M14 9a1 1 0 1 0 2 0a1 1 0 1 0 -2 0"></path></svg></div><div class="m_667c2793 mantine-Alert-body"><div class="m_6a03f287 mantine-Alert-title"><span id="mantine-_R_remqrdub_-title" class="m_698f4f23 mantine-Alert-label">Полный доступ к материалам</span></div><div id="mantine-_R_remqrdub_-body" class="m_7fa78076 mantine-Alert-message"><div style="--group-gap:var(--mantine-spacing-md);--group-align:center;--group-justify:space-between;--group-wrap:wrap" class="m_4081bf90 mantine-Group-root"><p class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Зарегистрируйтесь и получите доступ к этому и десяткам других курсов</p><a style="--button-height:var(--button-height-xs);--button-padding-x:var(--button-padding-x-xs);--button-fz:var(--mantine-font-size-xs);--button-bg:linear-gradient(45deg, var(--mantine-color-blue-filled) 0%, var(--mantine-color-cyan-filled) 100%);--button-hover:linear-gradient(45deg, var(--mantine-color-blue-filled) 0%, var(--mantine-color-cyan-filled) 100%);--button-color:var(--mantine-color-white);--button-bd:none" class="mantine-focus-auto mantine-active m_77c9d27d mantine-Button-root m_87cf2631 mantine-UnstyledButton-root" data-variant="gradient" data-size="xs" href="/u/new"><span class="m_80f1301b mantine-Button-inner"><span class="m_811560b9 mantine-Button-label">Зарегистрироваться</span></span></a></div></div></div></div></div><div class="paywalled m_d08caa0 mantine-Typography-root"><p>Agile (гибкая методология разработки) — это крайне популярный подход не только в IT, но и в других сферах жизни, где нужно управлять процессами.</p>
<p>Для управления Agile-проектами можно использовать разные фреймворки, с которыми мы познакомимся в этом уроке.</p>
<h2 id="heading-2-1">Что такое Agile</h2>
<p>Основная особенность Agile состоит в том, что заказчик, проектировщик, тестировщик и разработчик постоянно общаются друг с другом во время всего цикла. Это позволяет свести к минимуму недопонимания, ошибки и дефекты.</p>
<p>Agile-команда может очень быстро изменять план разработки в случае изменения приоритетов у заказчика. Она быстрее чинит найденные дефекты и дает более точный отчет о прогрессе.</p>
<p>Но к сожалению, сам по себе Agile не дает конкретных шагов. Он не говорит, что делать. Сам подход не учит строить гибкие процессы так, чтобы реально повысить продуктивность в команде. Сам Agile дает только <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://agilemanifesto.org/iso/ru/principles.html" rel="noopener noreferrer" target="_blank">принципы работы</a> и <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://agilemanifesto.org/iso/ru/manifesto.html" rel="noopener noreferrer" target="_blank">манифест</a>, c которыми вы можете ознакомиться в официальных руководствах.</p>
<p>Но для достижения желаемого принципов недостаточно — нужно использовать разные фреймворки. К самым популярным относятся Scrum и Kanban.</p>
<h2 id="heading-2-2">Что такое спринты</h2>
<p>В Agile рабочий процесс делится на <strong>спринты</strong> — это равные отрезки времени, в течение которых команда создает и совершенствует отдельную часть продукта.</p>
<p>Каждый спринт построен одинаково. В начале команда планирует задачи и проводит оценку предстоящей работы, и только после этого приступает к работе.</p>
<p>Обычно спринт длится от одной до трех недель. Такое деление на короткие отрезки сохраняет гибкость в процессах — команда всегда готова к изменениям условий и не слишком погружается в глобальную доработку. Еще соблюдение сроков спринта организует рабочий процесс, задает ритм и помогает разработчикам распределять время.</p>
<p>По итогам спринта должен получится или мини-продукт или отдельная часть системы, которая содержит самостоятельную функциональность, готовую к использованию.</p>
<p>С помощью спринтов можно уменьшить Time to Market. В идеальном случае, мы отправляем новую версию продукта в продакшен в конце каждого спринта.</p>
<h2 id="heading-2-3">Что такое Scrum</h2>
<p>Scrum — методика организации совместного рабочего процесса. В ее основе лежит поэтапная разработка и совершенствование продукта. Причем над продуктом работает небольшая команда специалистов разного профиля.</p>
<p>Методика Scrum относится к семейству Agile. Часто эти два понятия используются как синонимы, но это некорректно:</p>
<ul>
<li>Agile — это набор определенных ценностей и философия работы в команде</li>
<li>Scrum — это производственная методика, которая воплощает Agile-подход и на практике применяет принципы Agile</li>
</ul>
<p>Scrum — это базовая структура, в которую входят:</p>
<ul>
<li>Регулярные собрания</li>
<li>Создание артефактов</li>
<li>Четкое распределение обязанностей между участниками</li>
<li>Добавление в команду двух новых ролей — Product owner и Scrum-master</li>
</ul>
<p>Именно эти особенности позволяют использовать Scrum и таким образом добиваться того, чтобы принципы Agile заработали в конкретной команде.</p>
<p>Основная цель методики Scrum — это дать заказчику желаемый продукт вовремя и с минимально возможными затратами. Чтобы прийти к такому результату, Scrum настраивает команду на выполнение следующих Agile-принципов:</p>
<ul>
<li><strong>Постоянное совершенствование</strong> — вся команда совершенствует свои навыки, поэтому продукт постепенно улучшается</li>
<li><strong>Автономность</strong> — каждый участник команды несет ответственность и за свою часть работы, и за общий результат</li>
<li><strong>Кроссфункциональность</strong> — команда состоит из людей с разными навыками, что делает ее самодостаточной</li>
</ul>
<p>Подробнее о Scrum можно почитать в официальном руководстве <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://scrumguides.org/" rel="noopener noreferrer" target="_blank">на английском</a> и <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://scrumguides.org/docs/scrumguide/v2020/2020-Scrum-Guide-Russian.pdf" rel="noopener noreferrer" target="_blank">русском языке</a>.</p>
<h2 id="heading-2-4">Как происходят собрания</h2>
<p>Методика Scrum устанавливает четкий формат собраний команды и заказчиков:</p>
<p><strong>Планирование спринта</strong>. В начале каждого спринта команда смотрит на <strong>бэклог</strong> — список имеющихся задач с приоритетами. Затем она оценивает трудозатраты на выполнение задач. Исходя из оценки, члены команды все вместе определяют <strong>скоуп</strong> — объем задач, который они успеют сделать за спринт. Эта встреча длится примерно час, на ней должна присутствовать вся команда.</p>
<p><strong>Ежедневный стэндап</strong>. Это собрание обычно проходит каждое утро рабочего дня. Каждый член команды рассказывает о прогрессе за предыдущий день, о планах на сегодня и возникающих проблемах. Собрание длится не более 15 минут. Его даже советуют проводить стоя, чтобы людям хотелось быстро обсудить важное и не тратить время на ненужную болтовню.</p>
<p><strong>Обзор итогов спринта</strong>. Это собрание проводится или в конце спринта, или по достижению контрольной точки — например, когда закончен какой-то функционал. Члены команды показывают результаты работы и рассказывают о них. Обычно это собрание проходит в виде <strong>демо</strong> — демонстраций. На это собрание приходит не только команда: также могут присутствовать заказчик и другие внешние для команды участники процесса.</p>
<p><strong>Ретроспектива</strong>. Это собрание тоже проходит в конце спринта, но на нем присутствует только команда. На ретроспективе все участники команды могут поделиться своими успехами и неудачами, а также поразмышлять над их причинами. По итогам этого собрания можно предпринять шаги, чтобы сделать командную работу лучше.</p>
<p><strong>Бэклог рефайнмент</strong>. Бэклог содержит в себе все запросы заказчика, и обычно они превышают возможности команды. Поэтому со временем задач в бэклоге становится слишком много. Тогда команда проводит уборку и пересматривает задачи: убирает устаревшие, пересматривает приоритеты, рассматривает условия для начала выполнения задачи, оценивает время и трудозатраты. Этот процесс курирует product owner — представитель заказчика. Актуализация бэклога помогает оптимизировать планирование спринтов.</p>
<h2 id="heading-2-5">Что такое Kanban</h2>
<p>Kanban — это методика постоянного обсуждения производительности. Самый важный принцип этого подхода можно сформулировать так: «Есть некий ограниченный набор задач, который может выполниться в единицу времени». Члены команды осознают это ограничение и не берут больше заданий, чем могут сделать.</p>
<p>Здесь не нужны спринты, потому что команда расставляет приоритеты по задачам и в реальном времени отслеживает статус их выполнения. Отслеживать прогресс по задачам помогают специальные <strong>канбан-доски</strong>, на которых всегда отражена актуальная информация.</p>
<p>Команды используют физические или программные доски. Пространство на доске разделяется на части, отражающие стадии работы над продуктом. Количество стадий может быть разным, но обязательно должны быть три этапа (слева направо):</p>
<ul>
<li>Запланированные задачи</li>
<li>Задачи в активной работе</li>
<li>Выполненные задачи</li>
</ul>
<p>Доска — это визуальное отображение рабочего процесса на разных стадиях. С ее помощью каждый член команды может контролировать свою работу и следить за проектом:</p>
<p><img style="--image-object-fit:contain;width:auto" class="m_9e117634 mantine-Image-root" src="/rails/active_storage/blobs/proxy/eyJfcmFpbHMiOnsiZGF0YSI6ODIyMywicHVyIjoiYmxvYl9pZCJ9fQ==--69102bf538e727315a7fab5e18eb8e796c4f3b06/09.png" alt="Доска" loading="lazy"/></p></div><div style="margin-block:var(--mantine-spacing-xl)" class=""><h2 style="--title-fw:var(--mantine-h2-font-weight);--title-lh:var(--mantine-h2-line-height);--title-fz:var(--mantine-h2-font-size);margin-bottom:var(--mantine-spacing-md)" class="m_8a5d1357 mantine-Title-root" data-order="2">Рекомендуемые программы</h2><style data-mantine-styles="inline">.__m__-_R_2mremqrdub_{--carousel-slide-gap:var(--mantine-spacing-xs);--carousel-slide-size:70%;}@media(min-width: 36em){.__m__-_R_2mremqrdub_{--carousel-slide-gap:var(--mantine-spacing-xl);--carousel-slide-size:50%;}}</style><div style="--carousel-control-size:calc(2.5rem * var(--mantine-scale));--carousel-controls-offset:var(--mantine-spacing-sm);margin-bottom:var(--mantine-spacing-lg);padding-block:var(--mantine-spacing-sm);background:var(--app-color-surface)" class="m_17884d0f mantine-Carousel-root responsiveClassName" data-orientation="horizontal" data-include-gap-in-size="true"><div class="m_39bc3463 mantine-Carousel-controls" data-orientation="horizontal"><button class="mantine-focus-auto m_64f58e10 mantine-Carousel-control m_87cf2631 mantine-UnstyledButton-root" type="button" data-inactive="true" data-type="previous" tabindex="-1"><svg viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg" style="transform:rotate(90deg);width:calc(1rem * var(--mantine-scale));height:calc(1rem * var(--mantine-scale));display:block"><path d="M3.13523 6.15803C3.3241 5.95657 3.64052 5.94637 3.84197 6.13523L7.5 9.56464L11.158 6.13523C11.3595 5.94637 11.6759 5.95657 11.8648 6.15803C12.0536 6.35949 12.0434 6.67591 11.842 6.86477L7.84197 10.6148C7.64964 10.7951 7.35036 10.7951 7.15803 10.6148L3.15803 6.86477C2.95657 6.67591 2.94637 6.35949 3.13523 6.15803Z" fill="currentColor" fill-rule="evenodd" clip-rule="evenodd"></path></svg></button><button class="mantine-focus-auto m_64f58e10 mantine-Carousel-control m_87cf2631 mantine-UnstyledButton-root" type="button" data-inactive="true" data-type="next" tabindex="-1"><svg viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg" style="transform:rotate(-90deg);width:calc(1rem * var(--mantine-scale));height:calc(1rem * var(--mantine-scale));display:block"><path d="M3.13523 6.15803C3.3241 5.95657 3.64052 5.94637 3.84197 6.13523L7.5 9.56464L11.158 6.13523C11.3595 5.94637 11.6759 5.95657 11.8648 6.15803C12.0536 6.35949 12.0434 6.67591 11.842 6.86477L7.84197 10.6148C7.64964 10.7951 7.35036 10.7951 7.15803 10.6148L3.15803 6.86477C2.95657 6.67591 2.94637 6.35949 3.13523 6.15803Z" fill="currentColor" fill-rule="evenodd" clip-rule="evenodd"></path></svg></button></div><div class="m_a2dae653 mantine-Carousel-viewport" data-type="media"><div class="m_fcd81474 mantine-Carousel-container __m__-_R_2mremqrdub_" data-orientation="horizontal"><div class="m_d98df724 mantine-Carousel-slide" data-orientation="horizontal"><div tabindex="0" style="cursor:pointer;height:100%"><a style="text-decoration:none" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/programs/qa-engineer?promo_name=programs_list&promo_position=course&promo_creative=catalog_card&promo_type=card" target="_blank"><div style="height:100%" class="m_e615b15f mantine-Card-root m_1b7284a3 mantine-Paper-root" data-with-border="true"><div style="--group-gap:calc(0.25rem * var(--mantine-scale));--group-align:center;--group-justify:flex-start;--group-wrap:nowrap" class="m_4081bf90 mantine-Group-root"><span style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">4 месяца</span><span class="mantine-focus-auto m_b6d8b162 mantine-Text-root">·</span><span style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">С нуля</span></div><p style="margin-bottom:var(--mantine-spacing-sm);font-size:var(--mantine-font-size-h5);font-weight:bold" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Инженер по ручному тестированию</p><p class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Изучите виды тестирования, тест-кейсы, DevTools, Postman, SQL, Git и HTTP/HTTPS.</p><div style="margin-top:auto" class=""><div class="m_4451eb3a mantine-Center-root"><img style="opacity:0.8;width:70%" class="m_9e117634 mantine-Image-root mantine-visible-from-xs" src="https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6Mzk1MCwicHVyIjoiYmxvYl9pZCJ9fQ==--4a16fe638654fb8d5ae09d7e8ab8e16ff228214f/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbNDAwLDQwMF0sInNhdmVyIjp7InF1YWxpdHkiOjg1fX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--5b6f46dacd1af664f27558553a58076185091823/Bug%20fixing-amico.png" alt="Инженер по ручному тестированию" loading="eager"/></div><div style="--group-gap:var(--mantine-spacing-md);--group-align:end;--group-justify:space-between;--group-wrap:wrap;margin-top:var(--mantine-spacing-xs)" class="m_4081bf90 mantine-Group-root"><p style="font-size:var(--mantine-font-size-xl)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">от 3 368 ₽</p><p style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Посмотреть →</p></div></div></div></a></div></div><div class="m_d98df724 mantine-Carousel-slide" data-orientation="horizontal"><div tabindex="0" style="cursor:pointer;height:100%"><a style="text-decoration:none" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/courses?promo_name=programs_list&promo_position=course&promo_creative=catalog_card&promo_type=card"><div style="height:100%" class="m_e615b15f mantine-Card-root m_1b7284a3 mantine-Paper-root" data-with-border="true"><h2 style="--title-fw:var(--mantine-h2-font-weight);--title-lh:var(--mantine-h2-line-height);--title-fz:var(--mantine-h2-font-size);margin-bottom:var(--mantine-spacing-md);font-size:var(--mantine-font-size-h3)" class="m_8a5d1357 mantine-Title-root" data-order="2" data-responsive="true">Каталог</h2><p style="margin-bottom:auto" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Полный список доступных курсов по разным направлениям</p><div style="margin-top:auto" class=""><div class="m_4451eb3a mantine-Center-root"><img style="opacity:0.8;width:70%" class="m_9e117634 mantine-Image-root mantine-visible-from-xs" src="/vite/assets/development-BVihs_d5.png" alt="Orientation"/></div></div></div></a></div></div></div></div></div></div></div></div></div><style data-mantine-styles="inline">.__m__-_R_1bdub_{--col-flex-grow:auto;--col-flex-basis:8.333333333333334%;--col-max-width:8.333333333333334%;}@media(min-width: 48em){.__m__-_R_1bdub_{--col-flex-grow:auto;--col-flex-basis:16.666666666666668%;--col-max-width:16.666666666666668%;}}</style><div style="min-width:0rem;height:100%;min-height:0rem" class="m_96bdd299 mantine-Grid-col __m__-_R_1bdub_"><div style="margin-inline:var(--mantine-spacing-xs)" class="mantine-visible-from-sm"><a style="--button-color:var(--mantine-color-white);margin-bottom:var(--mantine-spacing-lg);text-decoration:none" class="mantine-focus-auto m_849cf0da mantine-focus-auto m_77c9d27d mantine-Button-root m_87cf2631 mantine-UnstyledButton-root m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/courses/software-testing-lifecycle/lessons/scrum/finish_unit?unit=theory" data-disabled="true" data-block="true" disabled=""><span class="m_80f1301b mantine-Button-inner"><span class="m_811560b9 mantine-Button-label"><span style="margin-inline-end:var(--mantine-spacing-xs)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Дальше</span>→</span></span></a><a style="padding-inline:0rem" class="mantine-focus-auto m_f0824112 mantine-NavLink-root m_87cf2631 mantine-UnstyledButton-root"><span class="m_690090b5 mantine-NavLink-section" data-position="left"><div style="--ti-size:var(--ti-size-sm);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="sm"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-list-numbers "><path d="M11 6h9"></path><path d="M11 12h9"></path><path d="M12 18h8"></path><path d="M4 16a2 2 0 1 1 4 0c0 .591 -.5 1 -1 1.5l-3 2.5h4"></path><path d="M6 10v-6l-2 2"></path></svg></div></span><div class="m_f07af9d2 mantine-NavLink-body"><span class="m_1f6ac4c4 mantine-NavLink-label">Навигация по теме</span><span class="m_57492dcc mantine-NavLink-description">Теория</span></div><span class="m_690090b5 mantine-NavLink-section" data-position="right"></span></a><div style="margin-block:var(--mantine-spacing-lg)" class="m_3eebeb36 mantine-Divider-root" data-orientation="horizontal" role="separator"></div><div style="margin-block:var(--mantine-spacing-lg)" class=""><div style="justify-content:space-between;margin-bottom:calc(0.1875rem * var(--mantine-scale));color:var(--mantine-color-dimmed);font-size:var(--mantine-font-size-xs)" class="m_8bffd616 mantine-Flex-root __m__-_R_qimrbdub_"><p style="font-size:var(--mantine-font-size-xs)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Завершено</p><p style="font-size:var(--mantine-font-size-xs)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">0 / 7</p></div><div style="--progress-size:var(--progress-size-sm)" class="m_db6d6462 mantine-Progress-root" data-size="sm"><div style="--progress-section-size:0%;--progress-section-color:var(--mantine-color-gray-filled)" class="m_2242eb65 mantine-Progress-section" role="progressbar" aria-valuemax="100" aria-valuemin="0" aria-valuenow="0" aria-valuetext="0%"></div></div></div><button style="padding-inline:0rem" class="mantine-focus-auto m_f0824112 mantine-NavLink-root m_87cf2631 mantine-UnstyledButton-root" type="button"><span class="m_690090b5 mantine-NavLink-section" data-position="left"><div style="--ti-size:var(--ti-size-sm);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="sm"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-message "><path d="M8 9h8"></path><path d="M8 13h6"></path><path d="M18 4a3 3 0 0 1 3 3v8a3 3 0 0 1 -3 3h-5l-5 3v-3h-2a3 3 0 0 1 -3 -3v-8a3 3 0 0 1 3 -3h12"></path></svg></div></span><div class="m_f07af9d2 mantine-NavLink-body"><span class="m_1f6ac4c4 mantine-NavLink-label">Обсуждения (архив)</span><span class="m_57492dcc mantine-NavLink-description"></span></div></button><div style="--toc-bg:var(--mantine-color-blue-light);--toc-color:var(--mantine-color-blue-light-color);--toc-size:var(--mantine-font-size-sm);--toc-radius:var(--mantine-radius-sm);margin-top:var(--mantine-spacing-xl)" class="m_bcaa9990 mantine-TableOfContents-root" data-variant="light" data-size="sm"></div></div><div class="mantine-hidden-from-sm"><div style="--stack-gap:0rem;--stack-align:stretch;--stack-justify:flex-start" class="m_6d731127 mantine-Stack-root"><a style="--button-color:var(--mantine-color-white);margin-bottom:var(--mantine-spacing-xs);padding:0rem;text-decoration:none" class="mantine-focus-auto m_849cf0da mantine-focus-auto m_77c9d27d mantine-Button-root m_87cf2631 mantine-UnstyledButton-root m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/courses/software-testing-lifecycle/lessons/scrum/finish_unit?unit=theory" data-disabled="true" data-block="true" disabled=""><span class="m_80f1301b mantine-Button-inner"><span class="m_811560b9 mantine-Button-label">→</span></span></a><button style="--ai-size:var(--ai-size-sm);--ai-bg:transparent;--ai-hover:var(--mantine-color-indigo-light-hover);--ai-color:var(--mantine-color-indigo-light-color);--ai-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;padding-block:var(--mantine-spacing-lg);color:inherit;width:100%" class="mantine-focus-auto m_8d3f4000 mantine-ActionIcon-root m_87cf2631 mantine-UnstyledButton-root" data-variant="subtle" data-size="sm" data-disabled="true" type="button" disabled=""><span class="m_8d3afb97 mantine-ActionIcon-icon"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-list-numbers "><path d="M11 6h9"></path><path d="M11 12h9"></path><path d="M12 18h8"></path><path d="M4 16a2 2 0 1 1 4 0c0 .591 -.5 1 -1 1.5l-3 2.5h4"></path><path d="M6 10v-6l-2 2"></path></svg></span></button><button style="--ai-size:var(--ai-size-sm);--ai-bg:transparent;--ai-hover:var(--mantine-color-indigo-light-hover);--ai-color:var(--mantine-color-indigo-light-color);--ai-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;padding-block:var(--mantine-spacing-lg);color:inherit;width:100%" class="mantine-focus-auto mantine-active m_8d3f4000 mantine-ActionIcon-root m_87cf2631 mantine-UnstyledButton-root" data-variant="subtle" data-size="sm" type="button"><span class="m_8d3afb97 mantine-ActionIcon-icon"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-message "><path d="M8 9h8"></path><path d="M8 13h6"></path><path d="M18 4a3 3 0 0 1 3 3v8a3 3 0 0 1 -3 3h-5l-5 3v-3h-2a3 3 0 0 1 -3 -3v-8a3 3 0 0 1 3 -3h12"></path></svg></span></button></div></div></div></div></div></div></div>
</main>
<footer class="bg-dark fw-light text-light px-3 py-5">
<div class="row small">
<div class="col-12 col-sm-6 col-md-3">
<div class="h5 mb-3">Хекслет</div>
<ul class="list-unstyled">
<li>
<a class="nav-link link-light py-1 ps-0" href="/pages/about">О нас</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/testimonials">Отзывы</a>
</li>
<li>
<span class="nav-link link-light py-1 ps-0 external-link" data-href="https://b2b.hexlet.io" role="button">Корпоративное обучение</span>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/blog">Блог</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/qna">Вопросы и ответы</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/glossary">Глоссарий</a>
</li>
<li>
<span class="nav-link link-light py-1 ps-0 external-link" data-href="https://help.hexlet.io" data-target="_blank" role="button">Справка</span>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" target="_blank" rel="noopener noreferrer" href="/map">Карта сайта</a>
</li>
</ul>
</div>
<div class="col-12 col-sm-6 col-md-3">
<div class="h5 fw-normal mb-3">Направления</div>
<ul class="list-unstyled">
<li>
<a class="nav-link link-light py-1 ps-0" href="/courses_devops">DevOps
</a></li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/courses_data_analytics">Аналитика
</a></li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/courses_backend_development">Бэкенд
</a></li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/courses_programming">Программирование
</a></li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/courses_testing">Тестирование
</a></li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/courses_front_end_dev">Фронтенд
</a></li>
</ul>
</div>
<div class="col-12 col-sm-6 col-md-3">
<div class="h5">Профессии</div>
<ul class="list-unstyled">
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/devops-engineer-from-scratch">DevOps-инженер с нуля</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/go">Go-разработчик</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/java">Java-разработчик</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/python">Python-разработчик </a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/data-analytics">Аналитик данных</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/qa-engineer">Инженер по ручному тестированию</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/php">РНР-разработчик</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/frontend">Фронтенд-разработчик</a>
</li>
</ul>
</div>
<div class="col-12 col-sm-6 col-md-3">
<div class="h5">Навыки</div>
<ul class="list-unstyled">
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/python-django-developer">Django</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/docker">Docker</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/php-laravel-developer">Laravel</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/postman">Postman</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/js-react-developer">React</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/js-rest-api">REST API в Node.js</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/spring-boot">Spring Boot</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/typescript">Typescript</a>
</li>
</ul>
</div>
</div>
<hr>
<div class="row">
<div class="col-12 col-sm-4 col-md-2">
<div class="fs-4">
<ul class="list-unstyled d-flex">
<li class="me-3">
<a aria-label="Telegram" target="_blank" class="link-light" rel="noopener noreferrer nofollow" href="https://t.me/hexlet_ru"><span class="bi bi-telegram"></span>
</a></li>
<li>
<a aria-label="Youtube" target="_blank" class="link-light" rel="noopener noreferrer nofollow" href="https://www.youtube.com/user/HexletUniversity"><span class="bi bi-youtube"></span>
</a></li>
</ul>
</div>
<div class="mb-2 d-flex flex-column">
<a class="link-light text-decoration-none" rel="nofollow" href="mailto:support@hexlet.io">support@hexlet.io</a>
<a class="link-light text-decoration-none py-2" target="_blank" href="https://t.me/hexlet_help_bot">t.me/hexlet_help_bot</a>
</div>
<ul class="list-unstyled d-flex">
<li class="me-3">
<span class="link-light text-decoration-none opacity-50 x-font-size-18 external-link" rel="nofollow" data-href="https://hexlet.io/locale/switch?new_locale=en" data-target="_self" role="button"><span class="my-auto">EN</span>
</span></li>
<li class="me-3">
<span class="link-light text-decoration-none opacity-50 x-font-size-18 opacity-100 external-link" rel="nofollow" data-href="https://ru.hexlet.io/locale/switch?new_locale=ru" data-target="_self" role="button"><span class="my-auto">RU</span>
</span></li>
<li class="me-3">
<span class="link-light text-decoration-none opacity-50 x-font-size-18 external-link" rel="nofollow" data-href="https://kz.hexlet.io/locale/switch?new_locale=kz" data-target="_self" role="button"><span class="my-auto">KZ</span>
</span></li>
</ul>
</div>
<div class="col-12 col-sm-4 col-md-3">
<ul class="list-unstyled fs-4">
<li class="mb-3">
<a class="link-light text-decoration-none" href="tel:8%20800%20100%2022%2047">8 800 100 22 47</a>
<span class="d-block opacity-50 small">бесплатно по РФ</span>
</li>
<li>
<a class="link-light text-decoration-none" href="tel:%2B7%20495%20085%2021%2062">+7 495 085 21 62</a>
<span class="d-block opacity-50 small">бесплатно по Москве</span>
</li>
</ul>
</div>
<div class="col-12 col-sm-4 col-md-3">
<div class="small mb-3">Образовательные услуги оказываются на основании Л035-01298-77/01989008 от 14.03.2025</div>
<ul class="list-unstyled small">
<li>
<a class="nav-link link-light py-1 ps-0" href="/pages/legal">Правовая информация</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/pages/offer">Оферта</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/pages/license">Лицензия</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/pages/contacts">Контакты</a>
</li>
</ul>
</div>
<div class="col-12 col-sm-12 col-md-4 small">
<div class="mb-2">
<div>ООО «<a href="/" class="text-decoration-none link-light">Хекслет Рус</a>»</div>
<div>108813 г. Москва, вн.тер.г. поселение Московский,</div>
<div>г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3</div>
<div>ОГРН 1217300010476</div>
<div>ИНН 7325174845</div>
</div>
<hr>
<div>АНО ДПО «<a href="/" class="text-decoration-none link-light">Учебный центр «Хекслет</a>»</div>
<div>119331 г. Москва, вн. тер. г. муниципальный округ</div>
<div>Ломоносовский, пр-кт Вернадского, д. 29</div>
<div>ОГРН 1247700712390</div>
<div>ИНН 7736364948</div>
</div>
</div>
</footer>
<div id="root-assistant-offcanvas"></div>
<script src="/vite/assets/assistant-Bukl1lYy.js" crossorigin="anonymous" type="module"></script><link rel="modulepreload" href="/vite/assets/chunk-DsPFFUou.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/init-BrRXra1y.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/ErrorFallbackBlock-naDSYSy9.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/MarkdownBlock-DbyKWoR_.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/gon-D3e4yh1x.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/mantine-CGMYrt2Y.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/shiki-V011pkdv.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/utils-DRqSHbQE.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/routes-CCH8ilKF.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/lib-XR8Qr8kR.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/dist-GCHh59xr.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Box-B5-OOzBf.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/notifications.store-C-3AFSMn.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/useIsomorphicEffect-HJ6VK0D3.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/lib-KSp6QbZ0.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/axios-BEvgo0ym.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/classnames-l6ipYlLR.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/dayjs.min-BkKovM-s.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/debounce-jMQ_Cf4f.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/i18next-BlSq9s7B.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/client-U9M77rxp.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/react-dom-DaLxUz_h.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/useTranslation-Bx1Cdrkz.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/compiler-runtime-6XxiPFnt.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/jsx-runtime-CwjcCKJi.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/react-CkL4ZRHB.js" as="script" crossorigin="anonymous">
<script defer src="https://static.cloudflareinsights.com/beacon.min.js/v67327c56f0bb4ef8b305cae61679db8f1769101564043" integrity="sha512-rdcWY47ByXd76cbCFzznIcEaCN71jqkWBBqlwhF1SY7KubdLKZiEGeP7AyieKZlGP9hbY/MhGrwXzJC/HulNyg==" data-cf-beacon='{"version":"2024.11.0","token":"d11015b65d11429ea6b4a2ef37dd7e0b","server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}' crossorigin="anonymous"></script>
</body>
</html>