Любая программа должна соответствовать всем требованиям, которые мы предъявляем к ней — явным и неявным, функциональным и нефункциональным. В сложных проектах список требований может быть огромным — а на каждое требование нужны какие-то тесты.
Чтобы тестировщику было удобнее работать с таким количеством требований, ему нужны инструменты — чеклисты и тест-кейсы. По своей сути, это разные форматы документации. Записав всю необходимую информацию в чеклист или тест-кейс, тестировщик упрощает себе работу — ему не нужно запоминать все требования и держать в голове другие важные детали.
Чек-листы и тест-кейсы снижают вероятность ошибок, связанных с человеческим фактором — причем это работает даже в проектах с неидеальной документацией. В этом уроке мы ближе познакомимся с чеклистами и тест-кейсами. Вы узнаете разницу между ними и научитесь подбирать инструмент под свой проект.
Чеклисты
Чеклист — это документация, в которой тестировщик описывает процесс по шагам. По своей сути, это список всех необходимых проверок, который помогает ничего не забыть:
Самое важное, что отличает чек-лист от тест-кейсов – здесь нет подробной детализации. Чеклист не описывает подробно все шаги, а просто перечисляет их. В нем не уточняется, какие тестовые данные нужно использовать, как проводить проверки.
В простом случае чеклист выглядит примерно так:
Тест-кейсы
Тест-кейс — это более подробная документация, в которой описано все необходимое: набор входных значений, предусловия выполнения, ожидаемые результаты и постусловия выполнения. У каждого тест-кейса есть определенная цель или тестовое условие — например, проверить выполнение определенного пути программы или соответствие продукта определенному требованию.
В отличие от чеклиста, тест-кейсы не так просты в составлении. Чтобы составить кейс, нужно четко описать необходимые действия, поля для ввода, кнопки и так далее.
Обычно тест-кейс содержит:
-
Предусловия. Они описывают, что нужно сделать до начала проверки
-
Шаги. Это действия, которые надо выполнить во время проверки
-
Ожидаемый результат. Здесь тестировщик описывает, что должно произойти после выполнения действий для проверки
Так это выглядит на практике:
Плюсы и минусы
У обоих инструментов есть свои преимущества:
Чеклисты проще читать. Представим, что мы хотим быстро объяснить разработчику или менеджеру, как прошло тестирование и в каких тестах обнаружены проблемы. В этом случае чеклист намного удобнее тест-кейса. В нем конкретные проблемы описываются одной строчкой: например, «Не работает регистрация по электронной почте в Google Chrome». Это короткая формулировка, к которой не нужны дополнительные объяснения.
Чеклисты проще писать. Чек-лист — это очень простой инструмент. Его можно свести к простому списку из нескольких строк, который можно составить за несколько минут. А вот написание тест-кейсов — это более трудоемкий процесс, потому что нужно составлять длинные таблицы с подробным описанием каждого шага. Более того, если функциональность приложения изменится, придется переделывать тест-кейсы — а это тоже сложный и ресурсоемкий процесс.
Тест-кейсы помогают тестировать качественнее. Тест-кейсы подробнее чеклистов, поэтому они обеспечивают более тщательное тестирование. С ними тестировщик точно не упустит ни одну важную деталь.
По тест-кейсам проще работать. Тест-кейсы предоставляют четкое описание шагов и ожидаемых результатов, поэтому они проще в использовании. Особенно это заметно в работе с негативными сценариями, потому что тест-кейсы содержат конкретные тестовые данные и описание ожидаемых результатов. В той же ситуации с чек-листом возникли бы сложности, потому что тестировщику пришлось бы самому определять тестовые данные и конкретные действия, которые нужно проверить. Если чек-лист содержит негативные и позитивные сценарии, то их тоже придется придумать самостоятельно.
В каждом подходе есть свои плюсы и минусы — выбор зависит от конкретного случая и целей тестирования.
Сочетание чеклиста и тест-кейса
Выбор между чек-листом и тест-кейсом зависит от проекта, команды и количества тестировщиков — здесь не существует универсального решения.
Часто в реальной жизни имеет смысл использовать комбинацию из этих двух инструментов. Для всего проекта имеет смысл составлять чек-листы, а при проверке сложных и неочевидных требований — брать отдельные пункты из чеклистов и детализировать их тест-кейсами.
Еще можно ориентироваться на такие факторы:
Размер команды. Представим, что в команде есть несколько тестировщиков, которые постоянно проводят проверки разных частей системы. В таком случае подойдут тест-кейсы — так удобнее работать в команде. А вот если в проекте есть всего один тестировщик, который хорошо знает систему, тогда можно обойтись только чеклистами и сэкономить время.
Сложность проекта. Тест-кейсы не стоит писать, если речь идет о простом проекте с часто меняющейся функциональностью. Здесь больше подойдет чеклист со всеми основными функциями. Но чеклиста не хватит, чтобы проверить сложный проект с множеством неочевидных требований. В таком случае лучше тщательно проработать тест-кейсы и довериться им.
Как писать чеклисты и тест-кейсы
Лучше составить чеклист и тест-кейсы до начала тестирования, так как это две разные деятельности. При написании чеклиста и тест-кейса фокус внимания должен быть на требованиях, в то время как при тестировании должен быть на продукте. Если эти деятельности выполняются одновременно, то это может отрицательно сказаться на качестве тестирования. Составление тест-кейсов - сложная часть тестирования, однако это не означает, что для этого нужно быть гением. Тест-кейсы могут содержать позитивные и негативные сценарии, и часто одному требованию соответствует несколько тест-кейсов. Чеклисты и тест-кейсы не являются требованиями на то, как должен работать продукт, но для их написания нужны определенные знания и опыт. Важно понимать, что эти деятельности разные, и не стоит выполнять их одновременно.
Рассмотрим на примере, как комбинировать чеклисты и тест-кейсы. Этими двумя инструментами можно провести полное тестирование проекта. Процесс может выглядеть так:
- Начинаем тестирование по общему чеклисту проекта
- Идем по чеклисту, пока не столкнемся с проблемами
- Как только мы обнаружили проблему, обращаемся к соответствующему ей тест-кейсу
Этот подход объединяет плюсы обоих инструментов. С одной стороны, мы экономим время — не тестируем во всех подробностях те пункты чеклиста, с которыми все в порядке. С другой стороны, мы тщательно тестируем проблемные места. За счет тест-кейса мы не просто находим ошибку, но и тщательно описываем ее природу. По этому подробному описанию команда разработки сможет быстро разобраться в проблеме и все исправить.
<!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 17:12:15 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="-zOBh3MOXccaRhqC4FRu4-bWjd4CeaBstEhF3wQQLToU4kqwgXDwp6wFPhrsW56UJt-gdApOXs4JqN-LVhfKVA";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>Тест-кейсы и чеклисты | Рабочий процесс тестировщика</title>
<meta name="description" content="Тест-кейсы и чеклисты / Рабочий процесс тестировщика: Учимся составлять чеклисты и тест-кейсы">
<link rel="canonical" href="https://ru.hexlet.io/courses/qa-engineer-workflow/lessons/test-cases-checklists/theory_unit">
<meta name="robots" content="noarchive">
<meta property="og:title" content="Тест-кейсы и чеклисты">
<meta property="og:title" content="Рабочий процесс тестировщика">
<meta property="og:description" content="Тест-кейсы и чеклисты / Рабочий процесс тестировщика: Учимся составлять чеклисты и тест-кейсы">
<meta property="og:url" content="https://ru.hexlet.io/courses/qa-engineer-workflow/lessons/test-cases-checklists/theory_unit">
<meta name="csrf-param" content="authenticity_token" />
<meta name="csrf-token" content="RdVSE17nLF0syuqPx9vAa4drI58bv86YAy1ba3Rk_JuqBJkkrJmBPZqJzhfL1DAcR2IONROIMDq-zcE_JmMb9Q" />
<script src="/vite/assets/inertia-INZxX8jp.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-nkZBEvfU.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-6pOtQ3OW.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-26T17:12:15.786Z","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":"H-JU2Jf5UGTJ9srGDsLH3ZWZAX0E4QGOa4PoLoqwpljwM5_vZYf9BH-17l4CzTeqVZAs1wzW_yzWY3J62LdBNg","topics":[{"id":97545,"title":"Здравствуйте, почему при прохождении регистрации никакой пароль не подходит, появляется ошибка \"Password is invalid\" что бы я не написал ","plain_title":"Здравствуйте, почему при прохождении регистрации никакой пароль не подходит, появляется ошибка \"Password is invalid\" что бы я не написал ","creator":{"public_name":"Ислам Хутиев","id":765906,"is_tutor":false},"comments":[{"creator":{"public_name":"Ivan Gagarinov","id":75907,"is_tutor":true},"id":188709,"body":"**Ислам Хутиев**, здравствуйте. Только что проверил на пароле из примера, и все работает. Можете скинуть примеры паролей, которые вы используете?","topic_id":97545}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Тест-кейсы и чеклисты","entity_url":null,"active":true}},{"id":83489,"title":"Здравствуйте! Не знаю, как у остальных, но у меня, как у новичка, были трудности с предыдущим упражнением с позитивными и негативными сценариями, поскольку объяснений, что такое конкретно тест-кейс и как его обрабатывать, не было. А они мне так были нужны.","plain_title":"Здравствуйте! Не знаю, как у остальных, но у меня, как у новичка, были трудности с предыдущим упражнением с позитивными и негативными сценариями, поскольку объяснений, что такое конкретно тест-кейс и как его обрабатывать, не было. А они мне так были нужны. ","creator":{"public_name":"Anastasia Glazova","id":587471,"is_tutor":false},"comments":[{"creator":{"public_name":"Nikolai Gagarinov","id":104929,"is_tutor":true},"id":169629,"body":"Анастасия, добрый день.\n\nСпасибо большое за обратную связь. Вы правы, в предыдущем задании мы еще не знаем, что такое тест-кейсы. \nНа самом деле в задании имелись ввиду сценарии использования.\nТо задание я обновил, необходимо в нем нажать кнопку \"Сброс\", чтобы загрузилась новая версия.\n","topic_id":83489}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Тест-кейсы и чеклисты","entity_url":null,"active":true}},{"id":81177,"title":"Согласно требований к паролю, это могут быть любые символы, но не меньше 6 шт, включать хотя бы один символ: +-*$, а также хотя бы одну заглавную букву. Тогда почему, если в тест-кейсе на позитивный сценарий указать пароль с русскими буквами (удовлетворяющий требованиям), один из тестов падает? Не нужно ли тогда указать в требованиях, что нужно использовать буквы латинского алфавита или исправить тест?","plain_title":"Согласно требований к паролю, это могут быть любые символы, но не меньше 6 шт, включать хотя бы один символ: +-*$, а также хотя бы одну заглавную букву. Тогда почему, если в тест-кейсе на позитивный сценарий указать пароль с русскими буквами (удовлетворяющий требованиям), один из тестов падает? Не нужно ли тогда указать в требованиях, что нужно использовать буквы латинского алфавита или исправить тест? ","creator":{"public_name":"Мария Скворцова","id":537285,"is_tutor":false},"comments":[{"creator":{"public_name":"Ivan Gagarinov","id":75907,"is_tutor":true},"id":166131,"body":"**Мария Скворцова**, здравствуйте! Спасибо за замечание! Поправил приложение, чтобы работало и с русскими буквами","topic_id":81177}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Тест-кейсы и чеклисты","entity_url":null,"active":true}},{"id":81791,"title":"Добрый день!\n\nНемножко фидбека по упражнению: пришлось покопаться в тестах и поэкспериментировать, чтобы понять, что после команды тоже надо ставить \":\". \nВначале писала тест-кейсы по примеру, там двоеточие стоит только после \"Значение\".\nНе уверена, что в рамках упражнения мы должны погружаться в то, как тесты парсят текст.","plain_title":"Добрый день! Немножко фидбека по упражнению: пришлось покопаться в тестах и поэкспериментировать, чтобы понять, что после команды тоже надо ставить \":\". Вначале писала тест-кейсы по примеру, там двоеточие стоит только после \"Значение\". Не уверена, что в рамках упражнения мы должны погружаться в то, как тесты парсят текст. ","creator":{"public_name":"Nadya Pod","id":338891,"is_tutor":false},"comments":[{"creator":{"public_name":"Ivan Gagarinov","id":75907,"is_tutor":true},"id":166902,"body":"**Nadya Pod**, здравствуйте. Спасибо! Добавил об этом информацию","topic_id":81791},{"creator":{"public_name":"Никита Сидельников","id":537003,"is_tutor":false},"id":167338,"body":"**Ivan Gagarinov**, Добрый день. Не совсем понятно где и какую информацию вы добавили. Пришлось так же рыться в тестах как и девушке выше, что бы выяснить проблему.\n\nВы привели пример набора тест-кейсов и ниже указали, что МОИ тест-кейсы должны быть написаны в строгом соответствии с примером. Но сам пример с ошибкой. Исправте пожалуйста пример. Он буквально ломает упражнение. Без знания программирования ошибку не найти никак.","topic_id":81791}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Тест-кейсы и чеклисты","entity_url":null,"active":true}},{"id":85724,"title":"Подскажите, а почему решение упражнения принимается, только если скопировать шаблон из Read Me и дальше уже самостоятельно туда подставлять варианты данных. А если полностью вручную вводить тот же шаблон, то решение не принимается.","plain_title":"Подскажите, а почему решение упражнения принимается, только если скопировать шаблон из Read Me и дальше уже самостоятельно туда подставлять варианты данных. А если полностью вручную вводить тот же шаблон, то решение не принимается. ","creator":{"public_name":"Сергей Мартынов","id":383972,"is_tutor":false},"comments":[{"creator":{"public_name":"Ivan Gagarinov","id":75907,"is_tutor":true},"id":172804,"body":"**Сергей Мартынов**, возможно что-то не правильно вводите. Вы можете сохранить решение и скинуть ссылку на него. Я посмотрю в чем ошибка.","topic_id":85724}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Тест-кейсы и чеклисты","entity_url":null,"active":true}},{"id":89487,"title":"> Даже самая программа должна\n\nЛучшая?)","plain_title":"Даже самая программа должна Лучшая?) ","creator":{"public_name":"Елизавета Коновалова","id":257048,"is_tutor":false},"comments":[{"creator":{"public_name":"Ivan Gagarinov","id":75907,"is_tutor":true},"id":178210,"body":"**Елизавета Коновалова**, спасибо! Поправил","topic_id":89487}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Тест-кейсы и чеклисты","entity_url":null,"active":true}},{"id":89488,"title":"Было бы здорово, если в упражнении можно будет заполнять поля пустым значением. Сейчас при попытке заполнить поле пустой строкой \"\" проверки падают. \n\n> TypeError: Cannot read properties of null (reading '0')","plain_title":"Было бы здорово, если в упражнении можно будет заполнять поля пустым значением. Сейчас при попытке заполнить поле пустой строкой \"\" проверки падают. TypeError: Cannot read properties of null (reading '0') ","creator":{"public_name":"Елизавета Коновалова","id":257048,"is_tutor":false},"comments":[{"creator":{"public_name":"Ivan Gagarinov","id":75907,"is_tutor":true},"id":178212,"body":"**Елизавета Коновалова**, здравствуйте! Обновил упражнение. Теперь можно указать пустое значение для полей.","topic_id":89488}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Тест-кейсы и чеклисты","entity_url":null,"active":true}},{"id":91124,"title":"Добрый день!\nПри заполнении поля: «E-mail пользователя» пишу значение «ivan@ivanovcom» что подразумевает под собой не корректный E MAIL. но при этом фактический результат \" успешно зарегистрировано\" как мне эту ошибку указать в тест-кейсе?","plain_title":"Добрый день! При заполнении поля: «E-mail пользователя» пишу значение «ivan@ivanovcom» что подразумевает под собой не корректный E MAIL. но при этом фактический результат \" успешно зарегистрировано\" как мне эту ошибку указать в тест-кейсе? ","creator":{"public_name":"Александр Самороков","id":674099,"is_tutor":false},"comments":[{"creator":{"public_name":"Ivan Gagarinov","id":75907,"is_tutor":true},"id":180407,"body":"**Александр Самороков**, здравствуйте. Можно указать без символа @","topic_id":91124}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Тест-кейсы и чеклисты","entity_url":null,"active":true}},{"id":91142,"title":"Добрый день! В тексте небольшая ошибка.\n\"Любая программа должна соответствовать всех требованиям, которые мы предъявляем к ней...\". Возможно, что \"всем требованиям\", а не \"всех требованиям\".","plain_title":"Добрый день! В тексте небольшая ошибка. \"Любая программа должна соответствовать всех требованиям, которые мы предъявляем к ней...\". Возможно, что \"всем требованиям\", а не \"всех требованиям\". ","creator":{"public_name":"Татьяна Кожарина","id":664888,"is_tutor":false},"comments":[{"creator":{"public_name":"Maksim Litvinov","id":198906,"is_tutor":true},"id":180408,"body":"Спасибо, поправил опечатку. Еще можно отправить нам сообщение об опечатке, выделив текст и нажав Ctrl+Enter","topic_id":91142}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Тест-кейсы и чеклисты","entity_url":null,"active":true}},{"id":93711,"title":"Добрый день. Нашел баг в этом задании - реакция поля \"пароль\" и \"подтверждение пароля\" на пробел разная. Поле пароля принимает его за символ, а подтверждение пароля - нет. Итог - решение с двумя пробелами у меня принято. А при тестировании формы - я этого сделать не могу. ","plain_title":"Добрый день. Нашел баг в этом задании - реакция поля \"пароль\" и \"подтверждение пароля\" на пробел разная. Поле пароля принимает его за символ, а подтверждение пароля - нет. Итог - решение с двумя пробелами у меня принято. А при тестировании формы - я этого сделать не могу. https://drive.google.com/file/d/1iHNo1pGi8OJQ3ZYAg9VNq7MDFzv48ev4/view?usp=sharing ","creator":{"public_name":"Vitali Rapeika","id":484626,"is_tutor":false},"comments":[{"creator":{"public_name":"Ivan Gagarinov","id":75907,"is_tutor":true},"id":183851,"body":"**Vitali Rapeika**, здравствуйте! Проверил в веб-доступе, если пароль из пробелов, то пишет сообщение об ошибке. Можете скинуть ссылку на свое решение? Я проверю в чем проблема.","topic_id":93711},{"creator":{"public_name":"Vitali Rapeika","id":484626,"is_tutor":false},"id":183868,"body":"Ivan Gagarinov, Доброе утро.\n\nЭто вариант решения, который был принят:\n\nЗаполнить поле: «Имя Фамилия». Значение: «Ivan Ivanov»\n\nЗаполнить поле: «E-mail пользователя». Значение: «ivan@ivanov.com»\n\nЗаполнить поле: «Пароль». Значение: 'edX*12 '\n\nЗаполнить поле: «Подтвердите пароль». Значение: 'edX*12 '\n\nНажать кнопку: «Зарегистрироваться»\n\nПроверить результат: «Успешно зарегистрировано»\n\nВ конце пароля два пробела. Поле \"пароль\" - не считает пробелы за символы(игнорирует), \"подтвердить пароль\" - считает как символы.\n\nСсылка на сохраненное решение - https://ru.hexlet.io/code_reviews/1191254","topic_id":93711},{"creator":{"public_name":"Vitali Rapeika","id":484626,"is_tutor":false},"id":183869,"body":"Пароль - 'edX*12 '\nСсылка на сохраненное решение - https://ru.hexlet.io/code_reviews/1191254","topic_id":93711},{"creator":{"public_name":"Ivan Gagarinov","id":75907,"is_tutor":true},"id":183881,"body":"**Vitali Rapeika**, спасибо! Поправил. Теперь пароль не должен содержать пробелы.","topic_id":93711}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Тест-кейсы и чеклисты","entity_url":null,"active":true}}],"lesson":{"exercise":{"id":2167,"slug":"testing_workflow_test_cases_checklists_exercise","name":null,"state":"active","kind":"exercise","language":"javascript","locale":"ru","has_web_view":true,"has_test_view":false,"reviewable":true,"readme":"В этом упражнении вам предстоит попрактиковаться в наборе тест-кейсов для валидации формы регистрации. В форме заполняется имя и фамилия (в одном поле), e-mail и пароль с подтверждением.\n\nФорма должна соответствовать нескольким требованиям:\n\n* Проверяется e-mail на корректность\n* Пароль должен быть не меньше шести символов\n* Пароль должен содержать хотя бы одну заглавную букву (английская или русская)\n* Пароль должен содержать хотя бы один символ из `+-*$`\n* Пароль не должен содержать пробелы\n* Поле \"Имя Фамилия\" должно состоять из двух слов, разделенных пробелом\n* Имя должно начинаться с заглавной буквы\n* Имя не должно содержать цифр\n* Фамилия должна начинаться с заглавной буквы\n* Фамилия не должна содержать цифры\n\nВам нужно составить тест-кейсы для проверки формы из доступных действий и данных. Доступны следующие действия:\n\n* Заполнить поле\n* Нажать кнопку\n* Проверить результат\n\nДоступны следующие результаты действий:\n\n* Успешно зарегистрировано\n* Регистрация отклонена\n\nСоставьте и запишите тест-кейсы из нескольких действий и проверки результата. Разделите тест-кейсы тремя дефисами `---` на отдельной строке.\n\nНапример, так выглядит набор из двух тест-кейсов:\n\n```text\nЗаполнить поле: \"Имя Фамилия\". Значение: \"Ivan Ivanov\"\nЗаполнить поле: \"E-mail пользователя\". Значение: \"ivan@ivanov.com\"\nЗаполнить поле: \"Пароль\". Значение: \"edX*12\"\nЗаполнить поле: \"Подтвердите пароль\". Значение: \"edX*12\"\nНажать кнопку: \"Зарегистрироваться\"\nПроверить результат: \"Успешно зарегистрировано\"\n---\nНажать кнопку: \"Зарегистрироваться\"\nПроверить результат: \"Регистрация отклонена\"\n```\n\nВ первом заполняются поля, нажимается кнопка \"Зарегистрироваться\" и проверяется результат. Во втором тест-кейсе нажимается кнопка \"Зарегистрироваться\" и проверяется результат без заполнения полей. Имена полей должны совпадать с отображаемыми метками на странице. Любой тест-кейс должен завершаться проверкой результата.\n\nТест-кейсы должны быть составлены строго по той схеме, что представлена выше. При действии заполнения поля, сначала идет текст с указанием какое поле заполнить. Далее идет значение, которое нужно ввести:\n\n```text\nЗаполнить поле: \"Пароль\". Значение: \"edX*12\"\n```\n\nВсе символы, например двоеточие и кавычки, должны быть в тексте как выше.\n\n### solution\n\nЗапишите в файл **solution** получившиеся тест-кейсы. Составьте как минимум пять тест-кейсов. Каждый тест-кейс должен состоять из нескольких действий и проверки результата. Каждый тест-кейс выполняется изолированно друг от друга на форме с пустыми полями.\n","prepared_readme":"В этом упражнении вам предстоит попрактиковаться в наборе тест-кейсов для валидации формы регистрации. В форме заполняется имя и фамилия (в одном поле), e-mail и пароль с подтверждением.\n\nФорма должна соответствовать нескольким требованиям:\n\n* Проверяется e-mail на корректность\n* Пароль должен быть не меньше шести символов\n* Пароль должен содержать хотя бы одну заглавную букву (английская или русская)\n* Пароль должен содержать хотя бы один символ из `+-*$`\n* Пароль не должен содержать пробелы\n* Поле \"Имя Фамилия\" должно состоять из двух слов, разделенных пробелом\n* Имя должно начинаться с заглавной буквы\n* Имя не должно содержать цифр\n* Фамилия должна начинаться с заглавной буквы\n* Фамилия не должна содержать цифры\n\nВам нужно составить тест-кейсы для проверки формы из доступных действий и данных. Доступны следующие действия:\n\n* Заполнить поле\n* Нажать кнопку\n* Проверить результат\n\nДоступны следующие результаты действий:\n\n* Успешно зарегистрировано\n* Регистрация отклонена\n\nСоставьте и запишите тест-кейсы из нескольких действий и проверки результата. Разделите тест-кейсы тремя дефисами `---` на отдельной строке.\n\nНапример, так выглядит набор из двух тест-кейсов:\n\n```text\nЗаполнить поле: \"Имя Фамилия\". Значение: \"Ivan Ivanov\"\nЗаполнить поле: \"E-mail пользователя\". Значение: \"ivan@ivanov.com\"\nЗаполнить поле: \"Пароль\". Значение: \"edX*12\"\nЗаполнить поле: \"Подтвердите пароль\". Значение: \"edX*12\"\nНажать кнопку: \"Зарегистрироваться\"\nПроверить результат: \"Успешно зарегистрировано\"\n---\nНажать кнопку: \"Зарегистрироваться\"\nПроверить результат: \"Регистрация отклонена\"\n```\n\nВ первом заполняются поля, нажимается кнопка \"Зарегистрироваться\" и проверяется результат. Во втором тест-кейсе нажимается кнопка \"Зарегистрироваться\" и проверяется результат без заполнения полей. Имена полей должны совпадать с отображаемыми метками на странице. Любой тест-кейс должен завершаться проверкой результата.\n\nТест-кейсы должны быть составлены строго по той схеме, что представлена выше. При действии заполнения поля, сначала идет текст с указанием какое поле заполнить. Далее идет значение, которое нужно ввести:\n\n```text\nЗаполнить поле: \"Пароль\". Значение: \"edX*12\"\n```\n\nВсе символы, например двоеточие и кавычки, должны быть в тексте как выше.\n\n### solution\n\nЗапишите в файл **solution** получившиеся тест-кейсы. Составьте как минимум пять тест-кейсов. Каждый тест-кейс должен состоять из нескольких действий и проверки результата. Каждый тест-кейс выполняется изолированно друг от друга на форме с пустыми полями.\n","has_solution":true,"entity_name":"Тест-кейсы и чеклисты"},"units":[{"id":7319,"name":"theory","url":"/courses/qa-engineer-workflow/lessons/test-cases-checklists/theory_unit"},{"id":9662,"name":"quiz","url":"/courses/qa-engineer-workflow/lessons/test-cases-checklists/quiz_unit"},{"id":7428,"name":"exercise","url":"/courses/qa-engineer-workflow/lessons/test-cases-checklists/exercise_unit"}],"links":[],"ordered_units":[{"id":7319,"name":"theory","url":"/courses/qa-engineer-workflow/lessons/test-cases-checklists/theory_unit"},{"id":9662,"name":"quiz","url":"/courses/qa-engineer-workflow/lessons/test-cases-checklists/quiz_unit"},{"id":7428,"name":"exercise","url":"/courses/qa-engineer-workflow/lessons/test-cases-checklists/exercise_unit"}],"id":3295,"slug":"test-cases-checklists","state":"approved","name":"Тест-кейсы и чеклисты","course_order":400,"goal":"Учимся составлять чеклисты и тест-кейсы","self_study":null,"theory_video_provider":"vimeo","theory_video_uid":"776225945","theory":"Любая программа должна соответствовать всем требованиям, которые мы предъявляем к ней — явным и неявным, функциональным и нефункциональным. В сложных проектах список требований может быть огромным — а на каждое требование нужны какие-то тесты.\n\nЧтобы тестировщику было удобнее работать с таким количеством требований, ему нужны инструменты — чеклисты и тест-кейсы. По своей сути, это разные форматы документации. Записав всю необходимую информацию в чеклист или тест-кейс, тестировщик упрощает себе работу — ему не нужно запоминать все требования и держать в голове другие важные детали.\n\nЧек-листы и тест-кейсы снижают вероятность ошибок, связанных с человеческим фактором — причем это работает даже в проектах с неидеальной документацией. В этом уроке мы ближе познакомимся с чеклистами и тест-кейсами. Вы узнаете разницу между ними и научитесь подбирать инструмент под свой проект.\n\n## Чеклисты\n\n**Чеклист** — это документация, в которой тестировщик описывает процесс по шагам. По своей сути, это список всех необходимых проверок, который помогает ничего не забыть:\n\n\n\nСамое важное, что отличает чек-лист от тест-кейсов – здесь нет подробной детализации. Чеклист не описывает подробно все шаги, а просто перечисляет их. В нем не уточняется, какие тестовые данные нужно использовать, как проводить проверки.\n\nВ простом случае чеклист выглядит примерно так:\n\n```md\n - Проверить фильтр «Поиск» в Программах\n - Проверить фильтры в Программах\n - Проверить «Программы»\n```\n\n## Тест-кейсы\n\n**Тест-кейс** — это более подробная документация, в которой описано все необходимое: набор входных значений, предусловия выполнения, ожидаемые результаты и постусловия выполнения. У каждого тест-кейса есть определенная цель или тестовое условие — например, проверить выполнение определенного пути программы или соответствие продукта определенному требованию.\n\nВ отличие от чеклиста, тест-кейсы не так просты в составлении. Чтобы составить кейс, нужно четко описать необходимые действия, поля для ввода, кнопки и так далее.\n\nОбычно тест-кейс содержит:\n\n* **Предусловия**. Они описывают, что нужно сделать до начала проверки\n* **Шаги**. Это действия, которые надо выполнить во время проверки\n* **Ожидаемый результат**. Здесь тестировщик описывает, что должно произойти после выполнения действий для проверки\n\nТак это выглядит на практике:\n\n```md\n* Предусловие:\n * В браузере открыта страница https://ru.hexlet.io/programs\n* Шаги:\n * Ввести в поле «Поиск» значение «фронтенд»\n* Ожидаемый результат:\n * В списке программ отображаются только программы, которые содержат слово «фронтенд» в названии или кратком описании\n```\n\n\n\n## Плюсы и минусы\n\nУ обоих инструментов есть свои преимущества:\n\n**Чеклисты проще читать**. Представим, что мы хотим быстро объяснить разработчику или менеджеру, как прошло тестирование и в каких тестах обнаружены проблемы. В этом случае чеклист намного удобнее тест-кейса. В нем конкретные проблемы описываются одной строчкой: например, «Не работает регистрация по электронной почте в Google Chrome». Это короткая формулировка, к которой не нужны дополнительные объяснения.\n\n**Чеклисты проще писать**. Чек-лист — это очень простой инструмент. Его можно свести к простому списку из нескольких строк, который можно составить за несколько минут. А вот написание тест-кейсов — это более трудоемкий процесс, потому что нужно составлять длинные таблицы с подробным описанием каждого шага. Более того, если функциональность приложения изменится, придется переделывать тест-кейсы — а это тоже сложный и ресурсоемкий процесс.\n\n**Тест-кейсы помогают тестировать качественнее**. Тест-кейсы подробнее чеклистов, поэтому они обеспечивают более тщательное тестирование. С ними тестировщик точно не упустит ни одну важную деталь.\n\n**По тест-кейсам проще работать**. Тест-кейсы предоставляют четкое описание шагов и ожидаемых результатов, поэтому они проще в использовании. Особенно это заметно в работе с негативными сценариями, потому что тест-кейсы содержат конкретные тестовые данные и описание ожидаемых результатов. В той же ситуации с чек-листом возникли бы сложности, потому что тестировщику пришлось бы самому определять тестовые данные и конкретные действия, которые нужно проверить. Если чек-лист содержит негативные и позитивные сценарии, то их тоже придется придумать самостоятельно.\n\nВ каждом подходе есть свои плюсы и минусы — выбор зависит от конкретного случая и целей тестирования.\n\n\n\n## Сочетание чеклиста и тест-кейса\n\nВыбор между чек-листом и тест-кейсом зависит от проекта, команды и количества тестировщиков — здесь не существует универсального решения.\n\nЧасто в реальной жизни имеет смысл использовать комбинацию из этих двух инструментов. Для всего проекта имеет смысл составлять чек-листы, а при проверке сложных и неочевидных требований — брать отдельные пункты из чеклистов и детализировать их тест-кейсами.\n\nЕще можно ориентироваться на такие факторы:\n\n**Размер команды**. Представим, что в команде есть несколько тестировщиков, которые постоянно проводят проверки разных частей системы. В таком случае подойдут тест-кейсы — так удобнее работать в команде. А вот если в проекте есть всего один тестировщик, который хорошо знает систему, тогда можно обойтись только чеклистами и сэкономить время.\n\n**Сложность проекта**. Тест-кейсы не стоит писать, если речь идет о простом проекте с часто меняющейся функциональностью. Здесь больше подойдет чеклист со всеми основными функциями. Но чеклиста не хватит, чтобы проверить сложный проект с множеством неочевидных требований. В таком случае лучше тщательно проработать тест-кейсы и довериться им.\n\n## Как писать чеклисты и тест-кейсы\n\nЛучше составить чеклист и тест-кейсы до начала тестирования, так как это две разные деятельности. При написании чеклиста и тест-кейса фокус внимания должен быть на требованиях, в то время как при тестировании должен быть на продукте. Если эти деятельности выполняются одновременно, то это может отрицательно сказаться на качестве тестирования. Составление тест-кейсов - сложная часть тестирования, однако это не означает, что для этого нужно быть гением. Тест-кейсы могут содержать позитивные и негативные сценарии, и часто одному требованию соответствует несколько тест-кейсов. Чеклисты и тест-кейсы не являются требованиями на то, как должен работать продукт, но для их написания нужны определенные знания и опыт. Важно понимать, что эти деятельности разные, и не стоит выполнять их одновременно.\n\nРассмотрим на примере, как комбинировать чеклисты и тест-кейсы. Этими двумя инструментами можно провести полное тестирование проекта. Процесс может выглядеть так:\n\n* Начинаем тестирование по общему чеклисту проекта\n* Идем по чеклисту, пока не столкнемся с проблемами\n* Как только мы обнаружили проблему, обращаемся к соответствующему ей тест-кейсу\n\nЭтот подход объединяет плюсы обоих инструментов. С одной стороны, мы экономим время — не тестируем во всех подробностях те пункты чеклиста, с которыми все в порядке. С другой стороны, мы тщательно тестируем проблемные места. За счет тест-кейса мы не просто находим ошибку, но и тщательно описываем ее природу. По этому подробному описанию команда разработки сможет быстро разобраться в проблеме и все исправить.\n"},"lessonMember":null,"courseMember":null,"course":{"start_lesson":{"exercise":null,"units":[{"id":7309,"name":"theory","url":"/courses/qa-engineer-workflow/lessons/intro/theory_unit"}],"links":[],"ordered_units":[{"id":7309,"name":"theory","url":"/courses/qa-engineer-workflow/lessons/intro/theory_unit"}],"id":3286,"slug":"intro","state":"approved","name":"Введение","course_order":100,"goal":"Знакомимся с темой курса","self_study":null,"theory_video_provider":null,"theory_video_uid":null,"theory":"Как и всем остальным новичкам в IT, начинающим тестировщикам не просто освоиться на первом месте работы. Им приходится разбираться с множеством новых терминов, осваивать инструменты, учиться вести документацию.\n\nВ этой ситуации намного комфортнее чувствуют себя те, кто заранее изучил эти темы в теории и подготовился использовать эти знания на практике. Именно такой подготовкой мы будем заниматься на этом курсе.\n\n## Цели курса\n\nЗдесь вы изучите рабочий процесс тестировщика. Вы познакомитесь со всеми важными терминами и узнаете все, из чего состоит каждый рабочий день специалиста по тестированию.\n\nВы ближе познакомитесь с багами и дефектами, научитесь писать баг-репорты, тест-кейсы и чеклисты. Мы рассмотрим разные типы тестирования и пройдем по шагам по всему циклу работы. Знания из этого курса помогут вам полностью подготовиться к рабочему процессу тестировщика, взаимодействовать с другими членами команды и быстрее влиться в процессы на рабочем месте.\n\nМы рассмотрим такие темы:\n\n* Какие бывают требования к программе и зачем они нужны тестировщику\n* Как работать с позитивными и негативными сценариями\n* Что такое баг-репорты, тест-кейсы и чеклисты, по каким принципам они составляются\n* Как устроены техники тест-дизайна\n* Какими инструментами пользуются тестировщики: Test Management Systems, Jira, Trello\n* Из чего состоит цикл работы с багами и дефектами\n* Что такое регрессионное и нефункциональное тестирование\n* Как работать с дефектами с продакшена\n* Как использовать явные и неявные требования\n"},"id":321,"slug":"qa-engineer-workflow","challenges_count":3,"name":"Рабочий процесс тестировщика","allow_indexing":true,"state":"approved","course_state":"finished","pricing_type":"paid","description":"На этом курсе вы изучите рабочий процесс тестировщика. Вы узнаете, как составляются баг-репорты и чем отличаются чеклисты от тест-кейсов. В итоге вы научитесь обнаруживать дефекты, проводить тест-анализ, создавать понятные баг-репорты, пользоваться сервисами TMS.","kind":"additional","updated_at":"2026-01-20T11:50:21.713Z","language":"other","duration_cache":54900,"skills":["Проводить тест-анализ и использовать техники тест-дизайна","Отличать чеклисты от тест-кейсов и использовать их на практике","Проводить регрессионное тестирование"],"keywords":[],"lessons_count":14,"cover":"https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6ODExNiwicHVyIjoiYmxvYl9pZCJ9fQ==--cb74af7628f51dafe9cfa64ba1356ffc5c454073/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/qa-engineer-workflow/lessons/test-cases-checklists/theory_unit","version":"0b0c6d4ebbd40fd58630a0dd89cc25544ccdf24e","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">Теория: Тест-кейсы и чеклисты</h1><script type="application/ld+json">{"@context":"https://schema.org","@type":"LearningResource","name":"Тест-кейсы и чеклисты","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>Любая программа должна соответствовать всем требованиям, которые мы предъявляем к ней — явным и неявным, функциональным и нефункциональным. В сложных проектах список требований может быть огромным — а на каждое требование нужны какие-то тесты.</p>
<p>Чтобы тестировщику было удобнее работать с таким количеством требований, ему нужны инструменты — чеклисты и тест-кейсы. По своей сути, это разные форматы документации. Записав всю необходимую информацию в чеклист или тест-кейс, тестировщик упрощает себе работу — ему не нужно запоминать все требования и держать в голове другие важные детали.</p>
<p>Чек-листы и тест-кейсы снижают вероятность ошибок, связанных с человеческим фактором — причем это работает даже в проектах с неидеальной документацией. В этом уроке мы ближе познакомимся с чеклистами и тест-кейсами. Вы узнаете разницу между ними и научитесь подбирать инструмент под свой проект.</p>
<h2 id="heading-2-1">Чеклисты</h2>
<p><strong>Чеклист</strong> — это документация, в которой тестировщик описывает процесс по шагам. По своей сути, это список всех необходимых проверок, который помогает ничего не забыть:</p>
<p><img style="--image-object-fit:contain;width:auto" class="m_9e117634 mantine-Image-root" src="/rails/active_storage/blobs/proxy/eyJfcmFpbHMiOnsiZGF0YSI6ODE0NiwicHVyIjoiYmxvYl9pZCJ9fQ==--1bb886844d9406e86cba1454bb20674174742d30/01.png" alt="01" loading="lazy"/></p>
<p>Самое важное, что отличает чек-лист от тест-кейсов – здесь нет подробной детализации. Чеклист не описывает подробно все шаги, а просто перечисляет их. В нем не уточняется, какие тестовые данные нужно использовать, как проводить проверки.</p>
<p>В простом случае чеклист выглядит примерно так:</p>
<div style="margin-bottom:var(--mantine-spacing-lg)" class="m_e597c321 mantine-CodeHighlight-codeHighlight" dir="ltr"><div class="m_be7e9c9c mantine-CodeHighlight-controls"><button style="--ai-bg:transparent;--ai-hover:transparent;--ai-color:inherit;--ai-bd:none" class="mantine-focus-auto mantine-active m_d498bab7 mantine-CodeHighlight-control m_8d3f4000 mantine-ActionIcon-root m_87cf2631 mantine-UnstyledButton-root" data-variant="none" type="button" aria-label="Copy code"><span class="m_8d3afb97 mantine-ActionIcon-icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M8 8m0 2a2 2 0 0 1 2 -2h8a2 2 0 0 1 2 2v8a2 2 0 0 1 -2 2h-8a2 2 0 0 1 -2 -2z"></path><path d="M16 8v-2a2 2 0 0 0 -2 -2h-8a2 2 0 0 0 -2 2v8a2 2 0 0 0 2 2h2"></path></svg></span></button></div><div style="--scrollarea-scrollbar-size:calc(0.25rem * var(--mantine-scale));--sa-corner-width:0px;--sa-corner-height:0px" class="m_f744fd40 mantine-CodeHighlight-scrollarea m_d57069b5 mantine-ScrollArea-root" dir="ltr"><div style="overflow-x:hidden;overflow-y:hidden;overscroll-behavior-inline:none" class="m_c0783ff9 mantine-ScrollArea-viewport" data-scrollbars="xy"><div class="m_b1336c6 mantine-ScrollArea-content"><pre class="m_2c47c4fd mantine-CodeHighlight-pre" style="padding:0"><code class="m_5caae6d3 mantine-CodeHighlight-code">- Проверить фильтр «Поиск» в Программах
- Проверить фильтры в Программах
- Проверить «Программы»</code></pre></div></div></div><button class="mantine-focus-auto m_c9378bc2 mantine-CodeHighlight-showCodeButton m_87cf2631 mantine-UnstyledButton-root" data-hidden="true" type="button">Expand code</button></div>
<h2 id="heading-2-2">Тест-кейсы</h2>
<p><strong>Тест-кейс</strong> — это более подробная документация, в которой описано все необходимое: набор входных значений, предусловия выполнения, ожидаемые результаты и постусловия выполнения. У каждого тест-кейса есть определенная цель или тестовое условие — например, проверить выполнение определенного пути программы или соответствие продукта определенному требованию.</p>
<p>В отличие от чеклиста, тест-кейсы не так просты в составлении. Чтобы составить кейс, нужно четко описать необходимые действия, поля для ввода, кнопки и так далее.</p>
<p>Обычно тест-кейс содержит:</p>
<ul>
<li><strong>Предусловия</strong>. Они описывают, что нужно сделать до начала проверки</li>
<li><strong>Шаги</strong>. Это действия, которые надо выполнить во время проверки</li>
<li><strong>Ожидаемый результат</strong>. Здесь тестировщик описывает, что должно произойти после выполнения действий для проверки</li>
</ul>
<p>Так это выглядит на практике:</p>
<div style="margin-bottom:var(--mantine-spacing-lg)" class="m_e597c321 mantine-CodeHighlight-codeHighlight" dir="ltr"><div class="m_be7e9c9c mantine-CodeHighlight-controls"><button style="--ai-bg:transparent;--ai-hover:transparent;--ai-color:inherit;--ai-bd:none" class="mantine-focus-auto mantine-active m_d498bab7 mantine-CodeHighlight-control m_8d3f4000 mantine-ActionIcon-root m_87cf2631 mantine-UnstyledButton-root" data-variant="none" type="button" aria-label="Copy code"><span class="m_8d3afb97 mantine-ActionIcon-icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M8 8m0 2a2 2 0 0 1 2 -2h8a2 2 0 0 1 2 2v8a2 2 0 0 1 -2 2h-8a2 2 0 0 1 -2 -2z"></path><path d="M16 8v-2a2 2 0 0 0 -2 -2h-8a2 2 0 0 0 -2 2v8a2 2 0 0 0 2 2h2"></path></svg></span></button></div><div style="--scrollarea-scrollbar-size:calc(0.25rem * var(--mantine-scale));--sa-corner-width:0px;--sa-corner-height:0px" class="m_f744fd40 mantine-CodeHighlight-scrollarea m_d57069b5 mantine-ScrollArea-root" dir="ltr"><div style="overflow-x:hidden;overflow-y:hidden;overscroll-behavior-inline:none" class="m_c0783ff9 mantine-ScrollArea-viewport" data-scrollbars="xy"><div class="m_b1336c6 mantine-ScrollArea-content"><pre class="m_2c47c4fd mantine-CodeHighlight-pre" style="padding:0"><code class="m_5caae6d3 mantine-CodeHighlight-code">* Предусловие:
* В браузере открыта страница https://ru.hexlet.io/programs
* Шаги:
* Ввести в поле «Поиск» значение «фронтенд»
* Ожидаемый результат:
* В списке программ отображаются только программы, которые содержат слово «фронтенд» в названии или кратком описании</code></pre></div></div></div><button class="mantine-focus-auto m_c9378bc2 mantine-CodeHighlight-showCodeButton m_87cf2631 mantine-UnstyledButton-root" data-hidden="true" type="button">Expand code</button></div>
<p><img style="--image-object-fit:contain;width:auto" class="m_9e117634 mantine-Image-root" src="/rails/active_storage/blobs/proxy/eyJfcmFpbHMiOnsiZGF0YSI6ODE0NywicHVyIjoiYmxvYl9pZCJ9fQ==--b38f61d7d9f187870b780e1cb2cc6055e34ea434/03.png" alt="03" loading="lazy"/></p>
<h2 id="heading-2-3">Плюсы и минусы</h2>
<p>У обоих инструментов есть свои преимущества:</p>
<p><strong>Чеклисты проще читать</strong>. Представим, что мы хотим быстро объяснить разработчику или менеджеру, как прошло тестирование и в каких тестах обнаружены проблемы. В этом случае чеклист намного удобнее тест-кейса. В нем конкретные проблемы описываются одной строчкой: например, «Не работает регистрация по электронной почте в Google Chrome». Это короткая формулировка, к которой не нужны дополнительные объяснения.</p>
<p><strong>Чеклисты проще писать</strong>. Чек-лист — это очень простой инструмент. Его можно свести к простому списку из нескольких строк, который можно составить за несколько минут. А вот написание тест-кейсов — это более трудоемкий процесс, потому что нужно составлять длинные таблицы с подробным описанием каждого шага. Более того, если функциональность приложения изменится, придется переделывать тест-кейсы — а это тоже сложный и ресурсоемкий процесс.</p>
<p><strong>Тест-кейсы помогают тестировать качественнее</strong>. Тест-кейсы подробнее чеклистов, поэтому они обеспечивают более тщательное тестирование. С ними тестировщик точно не упустит ни одну важную деталь.</p>
<p><strong>По тест-кейсам проще работать</strong>. Тест-кейсы предоставляют четкое описание шагов и ожидаемых результатов, поэтому они проще в использовании. Особенно это заметно в работе с негативными сценариями, потому что тест-кейсы содержат конкретные тестовые данные и описание ожидаемых результатов. В той же ситуации с чек-листом возникли бы сложности, потому что тестировщику пришлось бы самому определять тестовые данные и конкретные действия, которые нужно проверить. Если чек-лист содержит негативные и позитивные сценарии, то их тоже придется придумать самостоятельно.</p>
<p>В каждом подходе есть свои плюсы и минусы — выбор зависит от конкретного случая и целей тестирования.</p>
<p><img style="--image-object-fit:contain;width:auto" class="m_9e117634 mantine-Image-root" src="/rails/active_storage/blobs/proxy/eyJfcmFpbHMiOnsiZGF0YSI6ODE0OSwicHVyIjoiYmxvYl9pZCJ9fQ==--eaa56c927d291a00b3bc2d70cc63406729f21182/02.png" alt="02" loading="lazy"/></p>
<h2 id="heading-2-4">Сочетание чеклиста и тест-кейса</h2>
<p>Выбор между чек-листом и тест-кейсом зависит от проекта, команды и количества тестировщиков — здесь не существует универсального решения.</p>
<p>Часто в реальной жизни имеет смысл использовать комбинацию из этих двух инструментов. Для всего проекта имеет смысл составлять чек-листы, а при проверке сложных и неочевидных требований — брать отдельные пункты из чеклистов и детализировать их тест-кейсами.</p>
<p>Еще можно ориентироваться на такие факторы:</p>
<p><strong>Размер команды</strong>. Представим, что в команде есть несколько тестировщиков, которые постоянно проводят проверки разных частей системы. В таком случае подойдут тест-кейсы — так удобнее работать в команде. А вот если в проекте есть всего один тестировщик, который хорошо знает систему, тогда можно обойтись только чеклистами и сэкономить время.</p>
<p><strong>Сложность проекта</strong>. Тест-кейсы не стоит писать, если речь идет о простом проекте с часто меняющейся функциональностью. Здесь больше подойдет чеклист со всеми основными функциями. Но чеклиста не хватит, чтобы проверить сложный проект с множеством неочевидных требований. В таком случае лучше тщательно проработать тест-кейсы и довериться им.</p>
<h2 id="heading-2-5">Как писать чеклисты и тест-кейсы</h2>
<p>Лучше составить чеклист и тест-кейсы до начала тестирования, так как это две разные деятельности. При написании чеклиста и тест-кейса фокус внимания должен быть на требованиях, в то время как при тестировании должен быть на продукте. Если эти деятельности выполняются одновременно, то это может отрицательно сказаться на качестве тестирования. Составление тест-кейсов - сложная часть тестирования, однако это не означает, что для этого нужно быть гением. Тест-кейсы могут содержать позитивные и негативные сценарии, и часто одному требованию соответствует несколько тест-кейсов. Чеклисты и тест-кейсы не являются требованиями на то, как должен работать продукт, но для их написания нужны определенные знания и опыт. Важно понимать, что эти деятельности разные, и не стоит выполнять их одновременно.</p>
<p>Рассмотрим на примере, как комбинировать чеклисты и тест-кейсы. Этими двумя инструментами можно провести полное тестирование проекта. Процесс может выглядеть так:</p>
<ul>
<li>Начинаем тестирование по общему чеклисту проекта</li>
<li>Идем по чеклисту, пока не столкнемся с проблемами</li>
<li>Как только мы обнаружили проблему, обращаемся к соответствующему ей тест-кейсу</li>
</ul>
<p>Этот подход объединяет плюсы обоих инструментов. С одной стороны, мы экономим время — не тестируем во всех подробностях те пункты чеклиста, с которыми все в порядке. С другой стороны, мы тщательно тестируем проблемные места. За счет тест-кейса мы не просто находим ошибку, но и тщательно описываем ее природу. По этому подробному описанию команда разработки сможет быстро разобраться в проблеме и все исправить.</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/qa-engineer-workflow/lessons/test-cases-checklists/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 / 14</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/qa-engineer-workflow/lessons/test-cases-checklists/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-CdBlNCiQ.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-nkZBEvfU.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>