<?xml version="1.0" encoding="utf-8" ?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:tt="http://teletype.in/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"><title>Alex Compass</title><author><name>Alex Compass</name></author><id>https://teletype.in/atom/alexbrin</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/alexbrin?offset=0"></link><link rel="alternate" type="text/html" href="https://teletype.in/@alexbrin?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=alexbrin"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/alexbrin?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-04-30T00:35:51.028Z</updated><entry><id>alexbrin:B66f8eybMi0</id><link rel="alternate" type="text/html" href="https://teletype.in/@alexbrin/B66f8eybMi0?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=alexbrin"></link><title>Подготовка к собесу</title><published>2024-03-29T10:16:23.940Z</published><updated>2024-04-04T08:17:37.936Z</updated><summary type="html">Классификация по запуску кода на исполнение:</summary><content type="html">
  &lt;nav&gt;
    &lt;ul&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#J6P2&quot;&gt;ОСНОВНЫЕ ВИДЫ ТЕСТИРОВАНИЯ ПО&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#pgUU&quot;&gt;Все классификации тестирования:&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#zXou&quot;&gt;Классификация по запуску кода на исполнение:&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#MChp&quot;&gt;Классификация по доступу к коду и архитектуре:&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#VZBu&quot;&gt;Классификация по уровню детализации приложения (Пирамида тестирования):&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#IP8i&quot;&gt;Классификация по принципам работы с приложением&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#JUF6&quot;&gt;Классификация по целям тестирования&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#fGFp&quot;&gt;Функциональное тестирование&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#hbBn&quot;&gt;Нефункциональное тестирование&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#8MiB&quot;&gt;Классификация по цели тестирования&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#VHsg&quot;&gt;ТЕСТИРОВАНИЕ И QA/QC, ЖИЗНЕННЫЕ ЦИКЛЫ&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#XduG&quot;&gt;Что такое тестирование программного обеспечения?&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#5w1w&quot;&gt;Что такое контроль качества и обеспечение качества?&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#qP6f&quot;&gt;7 принципов тестирования&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#tf5H&quot;&gt;Что такое SDLC (Жизненный цикл разработки программного продукта)?&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#nMGO&quot;&gt;Что такое STLC Жизненный цикл тестирования программного продукта?&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#qNuH&quot;&gt;ВСЕ О ТЕСТ-ДИЗАЙНЕ&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#1bKC&quot;&gt;Что такое Тест-дизайн?&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#zELi&quot;&gt;Цели тест-дизайна:&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#cXjz&quot;&gt;Техники тест-дизайна:&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#UdkJ&quot;&gt;ДОКУМЕНТАЦИЯ (кейсы, листы, репорты)&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#F14V&quot;&gt;Чек-лист&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#Tf4q&quot;&gt;Тест-кейс&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#ppNO&quot;&gt;Тестовый набор&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#qt2i&quot;&gt;Баг-репорт&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#pUOL&quot;&gt;КЛИЕНТ - СЕРВЕРНАЯ АРХИТЕКТУРА&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#tbDn&quot;&gt;2 вида клиент-серверной архитектуры:&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#2HJg&quot;&gt;Что включает в себя КСА:&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#uBNK&quot;&gt;Существует 2 вида клиентов:&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#yGzA&quot;&gt;Плюсы и Минусы Монолитной Архитектуры:&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#Jdm6&quot;&gt;Плюсы и Минусы Микросервисной Архитектуры:&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#rbG1&quot;&gt;HTTP ПРОТОКОЛЫ&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#7cYE&quot;&gt;Метод HTTP&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#Oe12&quot;&gt;Коды состояния запроса&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#yS55&quot;&gt;Передача протокола осуществляется по Модели TCP/IP.&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#hG9v&quot;&gt;SOAP И REST&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#pKJZ&quot;&gt;SOAP&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#wpLy&quot;&gt;REST&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#7Qnf&quot;&gt;Что выбрать SOAP или REST?&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#KQCp&quot;&gt;POSTMAN И API&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#huwB&quot;&gt;МОБИЛЬНОЕ ТЕСТИРОВАНИЕ&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#ikK4&quot;&gt;Типы мобильных приложений:&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#AsBl&quot;&gt;Тестирование и особенности тестирования мобильных приложений&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#UnHC&quot;&gt;Зависимости мобильного тестирования:&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#262c&quot;&gt;ЛОКАЛИЗАЦИЯ БАГА&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#msVl&quot;&gt;DEVTOOLS&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#NaF9&quot;&gt;СНИФФЕРЫ&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#9B2P&quot;&gt;Charles&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#7jzb&quot;&gt;SQL&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#10ok&quot;&gt;Первичный и внешний ключи:&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#aZ9O&quot;&gt;Типы взаимосвязи таблиц SQL&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#t2ca&quot;&gt;Inner Join и Outer Join&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#h0ue&quot;&gt;Основные запросы:&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#D7DO&quot;&gt;KAFKA, СИНХРОННОЕ И АСИНХРОННОЕ ВЗАИМОДЕЙСТВИЕ&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#19jn&quot;&gt;Kafka&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#p6i6&quot;&gt;Синхронное взаимодействие:&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#mXjN&quot;&gt;Асинхронное взаимодействие:&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/nav&gt;
  &lt;h2 id=&quot;J6P2&quot;&gt;ОСНОВНЫЕ ВИДЫ ТЕСТИРОВАНИЯ ПО&lt;/h2&gt;
  &lt;h3 id=&quot;pgUU&quot;&gt;Все классификации тестирования:&lt;/h3&gt;
  &lt;p id=&quot;cCRU&quot;&gt;&lt;strong&gt;Классификация по запуску кода на исполнение:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;ASQV&quot;&gt;
    &lt;li id=&quot;lh8M&quot;&gt;Статическое тестирование&lt;/li&gt;
    &lt;li id=&quot;9N47&quot;&gt;Динамическое тестирование&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;xWe6&quot;&gt;&lt;strong&gt;Классификация по доступу к коду и архитектуре:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;zaNz&quot;&gt;
    &lt;li id=&quot;Frlz&quot;&gt;Тестирование белого ящика&lt;/li&gt;
    &lt;li id=&quot;FZWD&quot;&gt;Тестирование серого ящика&lt;/li&gt;
    &lt;li id=&quot;KW1A&quot;&gt;Тестирование чёрного ящика&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;Hoov&quot;&gt;&lt;strong&gt;Классификация по уровню детализации приложения (Пирамида тестирования):&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;bcfo&quot;&gt;
    &lt;li id=&quot;Lqru&quot;&gt;Модульное тестирование или юнит-тестирование (англ. unit testing)&lt;/li&gt;
    &lt;li id=&quot;R3R2&quot;&gt;Интеграционное тестирование (Integration testing)&lt;/li&gt;
    &lt;li id=&quot;ZfXv&quot;&gt;Системное тестирование (System testing)&lt;/li&gt;
    &lt;li id=&quot;qg5A&quot;&gt;Приёмочное тестирование (acceptance test):&lt;br /&gt;А) Пользовательское приемное тестирование&lt;br /&gt;Б) Эксплуатационное&lt;br /&gt;В) На соответствие контракту&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;eW1c&quot;&gt;&lt;strong&gt;Классификация по принципам работы с приложением&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;4fht&quot;&gt;
    &lt;li id=&quot;UUy4&quot;&gt;Позитивное тестирование&lt;/li&gt;
    &lt;li id=&quot;JosD&quot;&gt;Негативное тестирование&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;mjHD&quot;&gt;&lt;strong&gt;Классификация по целям тестирования&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;LeXH&quot;&gt;
    &lt;li id=&quot;aOHM&quot;&gt;Функциональное тестирование&lt;/li&gt;
    &lt;li id=&quot;cydH&quot;&gt;Нефункциональное тестирование&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;5jEn&quot;&gt;&lt;strong&gt;Функциональное тестирование&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;WQy6&quot;&gt;
    &lt;li id=&quot;fSMq&quot;&gt;Smoke test&lt;/li&gt;
    &lt;li id=&quot;3877&quot;&gt;Тестирование критического пути&lt;/li&gt;
    &lt;li id=&quot;P7I1&quot;&gt;Расширенное тестирование&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;yVSH&quot;&gt;&lt;strong&gt;Нефункциональное тестирование&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;FoHE&quot;&gt;
    &lt;li id=&quot;e6Hm&quot;&gt;Тестирование доступности&lt;/li&gt;
    &lt;li id=&quot;nEQN&quot;&gt;Тестирование локализации и интернетизации&lt;/li&gt;
    &lt;li id=&quot;xEyo&quot;&gt;Тестирование безопасности&lt;/li&gt;
    &lt;li id=&quot;VAQF&quot;&gt;Проверка удобства&lt;/li&gt;
    &lt;li id=&quot;yjD3&quot;&gt;Нагрузочное тестирование&lt;/li&gt;
    &lt;li id=&quot;b7CZ&quot;&gt;Стресс-тестирование&lt;/li&gt;
    &lt;li id=&quot;LElr&quot;&gt;Тестирование стабильности&lt;/li&gt;
    &lt;li id=&quot;lRSS&quot;&gt;Инсталляционное тестирование&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;TuXK&quot;&gt;&lt;strong&gt;Классификация по цели тестирования&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;VroH&quot;&gt;
    &lt;li id=&quot;3roT&quot;&gt;Тестирование новой функциональности&lt;/li&gt;
    &lt;li id=&quot;EGGv&quot;&gt;Re-test&lt;/li&gt;
    &lt;li id=&quot;QHuU&quot;&gt;Регрессионное тестирование&lt;br /&gt;&lt;strong&gt;Регрессионное тестирование проводится: &lt;br /&gt;&lt;/strong&gt;- после появления нового билда (новой версии нашего продукта)&lt;br /&gt;- тестирование того функционала в котором часто обнаруживаются дефекты&lt;br /&gt;- плановое тестирование&lt;br /&gt;- того функционала, который часто меняется в ходе разработки&lt;/li&gt;
  &lt;/ul&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;zXou&quot;&gt;&lt;strong&gt;Классификация по запуску кода на исполнение:&lt;/strong&gt;&lt;/h3&gt;
  &lt;ul id=&quot;airX&quot;&gt;
    &lt;li id=&quot;3lut&quot;&gt;&lt;strong&gt;Статическое тестирование&lt;/strong&gt; — тестирование без запуска кода на исполнение. Это процесс обнаружения и устранения ошибок и дефектов в документации: программного кода компонент, требований, системных спецификаций, функциональных спецификаций, документов проектирования и архитектуры программных систем и их компонентов.&lt;/li&gt;
    &lt;li id=&quot;FU14&quot;&gt;&lt;strong&gt;Динамическое тестирование&lt;/strong&gt; — тестирование проводится на работающей системе, не может быть осуществлено без запуска программного кода приложения.&lt;br /&gt;Запускаться на исполнение может как код всего приложения целиком (системное тестирование), так и код нескольких взаимосвязанных частей (интеграционное тестирование), отдельных частей и даже отдельные участки кода.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3 id=&quot;MChp&quot;&gt;&lt;strong&gt;Классификация по доступу к коду и архитектуре:&lt;/strong&gt;&lt;/h3&gt;
  &lt;ul id=&quot;zaNz&quot;&gt;
    &lt;li id=&quot;TPkW&quot;&gt;&lt;strong&gt;Тестирование белого ящика&lt;/strong&gt; — метод тестирования ПО, который предполагает полный доступ к коду проекта.&lt;/li&gt;
    &lt;li id=&quot;ODW4&quot;&gt;&lt;strong&gt;Тестирование серого ящика&lt;/strong&gt; — метод тестирования ПО, который предполагает частичный доступ к коду проекта (комбинация White Box и Black Box методов).&lt;/li&gt;
    &lt;li id=&quot;E69B&quot;&gt;&lt;strong&gt;Тестирование чёрного ящика&lt;/strong&gt; — метод тестирования ПО, который не предполагает доступа (полного или частичного) к системе. Основывается на работе исключительно с внешним интерфейсом тестируемой системы.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3 id=&quot;VZBu&quot;&gt;&lt;strong&gt;Классификация по уровню детализации приложения (Пирамида тестирования):&lt;/strong&gt;&lt;/h3&gt;
  &lt;ol id=&quot;ht7D&quot;&gt;
    &lt;li id=&quot;DQWg&quot;&gt;&lt;strong&gt;Модульное тестирование или юнит-тестирование (англ. unit testing)&lt;/strong&gt; — проводится для тестирования какого-либо одного логически выделенного и изолированного элемента (модуля) системы в коде. Проводится самими разработчиками, так как предполагает полный доступ к коду.&lt;br /&gt;&lt;strong&gt;Модульное тестирование производят сами разработчики, не тестировщики.&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;OmhB&quot;&gt;&lt;strong&gt;Интеграционное тестирование (Integration testing)&lt;/strong&gt; — тестирование, направленное на проверку корректности взаимодействия нескольких модулей, объединенных в единое целое.&lt;br /&gt;&lt;strong&gt;Взаимодействие компонентов, модулей и иных систем между собой. Тестирование части системы, состоящей из 2-х и более модулей.&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;rKlg&quot;&gt;&lt;strong&gt;Системное тестирование (System testing)&lt;/strong&gt; — тестирование взаимодействия между всеми компонентами системы или разных систем между собой или тестирование интерфейсов, между которыми взаимодействует система. Полная проверка приложения, всех модулей, можно ли пройти весь бизнес путь.&lt;/li&gt;
    &lt;li id=&quot;cJew&quot;&gt;&lt;strong&gt;Приёмочное тестирование&lt;/strong&gt; &lt;strong&gt;(acceptance test) — &lt;/strong&gt;тестирование на сдаче приемки всего программного продукта или его части Заказчику&lt;br /&gt;А) &lt;strong&gt;Пользовательское приемное тестирование (User Acceptance Testing)&lt;/strong&gt; – перед релизом собирается группа конечных пользователей, тестируется основной функционал, при наличии дефектов-устраняются.&lt;br /&gt;Б)&lt;strong&gt; Эксплуатационное (Operational acceptance testing) &lt;/strong&gt;– производится пользователем или администратором в среде, которая имитирует реальные условия эксплуатации ПО, производится тестирование резервного копирования, аварийное восстановление системы, безопасность ПО.&lt;br /&gt;В) &lt;strong&gt;На соответствие контракту&lt;/strong&gt; – на соответствие гостов, нормативных актов и т.д&lt;/li&gt;
  &lt;/ol&gt;
  &lt;h3 id=&quot;IP8i&quot;&gt;&lt;strong&gt;Классификация по принципам работы с приложением&lt;/strong&gt;&lt;/h3&gt;
  &lt;ul id=&quot;4fht&quot;&gt;
    &lt;li id=&quot;sRon&quot;&gt;&lt;strong&gt;Позитивное тестирование&lt;/strong&gt; — тестирование, при котором используются только корректные данные.&lt;/li&gt;
    &lt;li id=&quot;tRrK&quot;&gt;&lt;strong&gt;Негативное тестирование&lt;/strong&gt; — тестирование приложения, при котором используются некорректные данные и выполняются некорректные операции.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3 id=&quot;JUF6&quot;&gt;Классификация по целям тестирования&lt;/h3&gt;
  &lt;ol id=&quot;SDrt&quot;&gt;
    &lt;li id=&quot;irsE&quot;&gt;&lt;strong&gt;Функциональное тестирование&lt;/strong&gt; – тестирование которое направленно на проверку соответствия функциональных требований ПО к его реальным характеристикам. Подтверждение того, что наш продукт обладает всем функционалом, который требует заказчик.&lt;br /&gt;&lt;strong&gt;Функциональное тестирование отвечает на вопрос – что должен делать наш продукт?&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;HK25&quot;&gt;&lt;strong&gt;Нефункциональное тестирование&lt;/strong&gt; – направленно на проверку соответствия свойств ПО с его нефункциональными требованиями. Тестирование свойств, которые не относятся к функциональности системы – надежность, производительность и т.д.&lt;br /&gt;&lt;strong&gt;Нефункциональное тестирование отвечает на вопрос – как это должен делать наш продукт?&lt;/strong&gt;&lt;/li&gt;
  &lt;/ol&gt;
  &lt;h3 id=&quot;fGFp&quot;&gt;&lt;strong&gt;Функциональное тестирование&lt;/strong&gt;&lt;/h3&gt;
  &lt;ol id=&quot;qkDU&quot;&gt;
    &lt;li id=&quot;Ugoy&quot;&gt;&lt;strong&gt;Smoke test&lt;/strong&gt; — тестирование, которое проводится после появления нового билда . Направлено на проверку готовности разработанного продукта к проведению расширенного тестирования и определения общего качества продукта.&lt;br /&gt;&lt;strong&gt;Проверяет заявленную бизнес-логику ПО.&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;6Ofd&quot;&gt;&lt;strong&gt;Тестирование критического пути&lt;/strong&gt; (critical path) — направлено для проверки функциональности, используемой обычными пользователями во время их повседневной деятельности.&lt;br /&gt;&lt;strong&gt;Основной тип тестовых испытаний, во время которого значимые элементы и функции приложения проверяются на предмет правильности работы при их стандартном использовании.&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;IfOq&quot;&gt;&lt;strong&gt;Расширенное тестирование&lt;/strong&gt; (extended) — направлено на исследование всей заявленной в требованиях функциональности.&lt;br /&gt;&lt;strong&gt;Проверка нестандартного использования продукта (например, вводить не корректные логин и пароль в окне авторизации, работать на многих вкладках одновременно, подгрузка файлов недопустимых размеров или форматов. Максимально загружать нашу систему, проводить множество негативных тестов.&lt;/strong&gt;&lt;/li&gt;
  &lt;/ol&gt;
  &lt;h3 id=&quot;hbBn&quot;&gt;&lt;strong&gt;Нефункциональное тестирование&lt;/strong&gt;&lt;/h3&gt;
  &lt;ol id=&quot;yej0&quot;&gt;
    &lt;li id=&quot;BPBb&quot;&gt;&lt;strong&gt;Тестирование доступности&lt;/strong&gt; - доступно ли людям с ограниченными возможностями.&lt;br /&gt;&lt;em&gt;Пример: Может ли человек, получив голосовое, прослушать его из верхнего динамика.&lt;/em&gt;&lt;/li&gt;
    &lt;li id=&quot;x5S0&quot;&gt;&lt;strong&gt;Тестирование локализации и интернетизации&lt;/strong&gt; - тестирование с целью проверки адаптации ПО к любой культуре или особенностям языка другой страны.&lt;br /&gt;&lt;em&gt;Пример: Можно ли писать сообщения иероглифами (поддерживает ли кодировку)(локализация) или есть ли функция в мессенджере для оповещения о молитвенном времени (интернационализация).&lt;/em&gt;&lt;/li&gt;
    &lt;li id=&quot;mGEe&quot;&gt;&lt;strong&gt;Тестирование безопасности&lt;/strong&gt; - тестирование направленное на проверку безопасности конфиденциальных данных и защиту от хакерских атак, вирусов и тд.&lt;br /&gt;&lt;em&gt;Пример: Отправить файл, зараженный вирусом и проверить, пропустит ли его мессенджер. Или встроить в картинку инъекцию.&lt;/em&gt;&lt;/li&gt;
    &lt;li id=&quot;bC1I&quot;&gt;&lt;strong&gt;Проверка удобства&lt;/strong&gt; - тестирование направленное на удобство пользования и дизайна.&lt;br /&gt;&lt;em&gt;Пример: Проверить, удобно ли будет пользоваться одной рукой, не режет ли глаз цвета, не маленькая ли кнопка отправить и тд.&lt;/em&gt;&lt;/li&gt;
    &lt;li id=&quot;6hYL&quot;&gt;&lt;strong&gt;Нагрузочное тестирование&lt;/strong&gt; - проводимое тестирование использования в пределах нормы.&lt;br /&gt;&lt;em&gt;Пример: Сервер мессенджера рассчитан на 10 человек, и им пользуются 10 человек, отправляя сообщения и допустимые файлы допустимых размеров.&lt;/em&gt;&lt;/li&gt;
    &lt;li id=&quot;uEev&quot;&gt;&lt;strong&gt;Стресс-тестирование&lt;/strong&gt; - нагрузка, превышающая норму в несколько раз.&lt;br /&gt;&lt;em&gt;Пример: Сервер мессенджера рассчитан на 10 человек, а им одновременно пользуются 30 человек, активно отправляя сообщения, фото и файлы друг другу.&lt;/em&gt;&lt;/li&gt;
    &lt;li id=&quot;CAdC&quot;&gt;&lt;strong&gt;Тестирование стабильности&lt;/strong&gt; - тестирование, направленное на продолжительное испытание в пределах нормы.&lt;br /&gt;&lt;em&gt;Пример: Сервер мессенджера рассчитан на 10 человек, им пользуются 10 человек в рамках стандартного использования в течении месяца (переписываются, отправляют картинки и тд).&lt;/em&gt;&lt;/li&gt;
    &lt;li id=&quot;HRG1&quot;&gt;&lt;strong&gt;Инсталляционное тестирование&lt;/strong&gt; - тестирование, направленное на проверку установки, обновления и удаления приложения.&lt;br /&gt;&lt;em&gt;Пример: Скачать приложение, установить его, удалить, установить еще раз и после обновить.&lt;/em&gt;&lt;/li&gt;
  &lt;/ol&gt;
  &lt;h3 id=&quot;8MiB&quot;&gt;Классификация по цели тестирования&lt;/h3&gt;
  &lt;ol id=&quot;V2z7&quot;&gt;
    &lt;li id=&quot;35bC&quot;&gt;&lt;strong&gt;Тестирование новой функциональности (new feature test) – &lt;/strong&gt;производится, как только была разработана новая функциональность.&lt;br /&gt;То есть, как только разработчик выполнил свою часть работы, по созданию новой функциональности, он передает ее на тестирование.&lt;/li&gt;
    &lt;li id=&quot;8Lwo&quot;&gt;&lt;strong&gt;Re-test – &lt;/strong&gt;проверка правильности исправления дефекта. Повторное тестирование функционала, в котором был найден дефект, то есть баг.&lt;/li&gt;
    &lt;li id=&quot;Z3qx&quot;&gt;&lt;strong&gt;Регрессионное тестирование –&lt;/strong&gt; повторная проверка ранее разработанного функционала, после появления нового билда, то есть новой версии нашего программного продукта, для того, чтоб убедиться, что новый функционал билда никак ему не навредил.&lt;br /&gt;&lt;strong&gt;Регрессионное тестирование проводится: &lt;/strong&gt;- после появления нового билда (новой версии нашего продукта)&lt;br /&gt;- тестирование того функционала в котором часто обнаруживаются дефекты&lt;br /&gt;- плановое тестирование&lt;br /&gt;- того функционала, который часто меняется в ходе разработки&lt;/li&gt;
  &lt;/ol&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;VHsg&quot;&gt;ТЕСТИРОВАНИЕ И QA/QC, ЖИЗНЕННЫЕ ЦИКЛЫ&lt;/h2&gt;
  &lt;p id=&quot;tlf5&quot;&gt;&lt;strong&gt;Баг&lt;/strong&gt; – это дефект – это отклонение ожидаемого поведения работы программного продукта от фактического.&lt;/p&gt;
  &lt;h3 id=&quot;XduG&quot;&gt;Что такое тестирование программного обеспечения?&lt;/h3&gt;
  &lt;p id=&quot;yNgD&quot;&gt;&lt;strong&gt;Тестирование &lt;/strong&gt;- процесс, направленный на исследование, испытание программного продукта (ПП) на соответствие ожидаемого результата поведения программного продукта и фактического.&lt;/p&gt;
  &lt;h3 id=&quot;5w1w&quot;&gt;Что такое контроль качества и обеспечение качества?&lt;/h3&gt;
  &lt;p id=&quot;ndZU&quot;&gt;&lt;strong&gt;Контроль качества&lt;/strong&gt; &lt;strong&gt;QC (Quality Control)&lt;/strong&gt; — это тщательное тестирование программы на наличие дефектов, а также проверка того, что программное обеспечение соответствует всем требованиям, выдвинутым заказчиком.&lt;/p&gt;
  &lt;p id=&quot;wTVi&quot;&gt;&lt;strong&gt;Обеспечение качества QA (Quality assurance)&lt;/strong&gt; – это подход, который помогает убедиться, что методы, технологии и процессы, используемые для создания качественных результатов, применяются правильно.&lt;/p&gt;
  &lt;h3 id=&quot;qP6f&quot;&gt;7 принципов тестирования&lt;/h3&gt;
  &lt;p id=&quot;RKcV&quot;&gt;&lt;strong&gt;Принцип 1 — Тестирование демонстрирует наличие дефектов&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;rhyw&quot;&gt;&lt;strong&gt;Принцип 2 — Исчерпывающее тестирование невозможно&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;ijvp&quot;&gt;&lt;strong&gt;Принцип 3 — Раннее тестирование&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;14nR&quot;&gt;&lt;strong&gt;Принцип 4 — Скопление дефектов&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;r2Sj&quot;&gt;&lt;strong&gt;Принцип 5 — Парадокс пестицида&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;5bTL&quot;&gt;&lt;strong&gt;Принцип 6 — Тестирование зависит от контекста&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;vAdN&quot;&gt;&lt;strong&gt;Принцип 7 — Заблуждение об отсутствии ошибок&lt;/strong&gt;&lt;/p&gt;
  &lt;h3 id=&quot;tf5H&quot;&gt;Что такое SDLC (Жизненный цикл разработки программного продукта)?&lt;/h3&gt;
  &lt;p id=&quot;VGm9&quot;&gt;&lt;strong&gt;Жизненный цикл разработки программного продукта &lt;/strong&gt;- процесс, направленный на создание, поддержание работоспособности, качества и надежности ПП.&lt;/p&gt;
  &lt;p id=&quot;Ms65&quot;&gt;&lt;strong&gt;&lt;a href=&quot;/@alexbrin/17vvQqv6Crz&quot;&gt;Этапы SDLC:&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
  &lt;ol id=&quot;x4Ie&quot;&gt;
    &lt;li id=&quot;Pugv&quot;&gt;Требования&lt;/li&gt;
    &lt;li id=&quot;7fkI&quot;&gt;Проектирование&lt;/li&gt;
    &lt;li id=&quot;B8hN&quot;&gt;Разработка&lt;/li&gt;
    &lt;li id=&quot;5E29&quot;&gt;Тестирование&lt;/li&gt;
    &lt;li id=&quot;JbLe&quot;&gt;Релиз&lt;/li&gt;
    &lt;li id=&quot;3RHw&quot;&gt;Поддержка&lt;/li&gt;
  &lt;/ol&gt;
  &lt;h3 id=&quot;nMGO&quot;&gt;Что такое STLC Жизненный цикл тестирования программного продукта?&lt;/h3&gt;
  &lt;p id=&quot;kz6d&quot;&gt;&lt;strong&gt;Жизненный цикл тестирования программного продукта&lt;/strong&gt; (STLC – Software &lt;em&gt;testing lifecycle) - &lt;/em&gt;процесс, направленный на тестирование программного продукта.&lt;/p&gt;
  &lt;p id=&quot;Uc3Y&quot;&gt;&lt;strong&gt;&lt;a href=&quot;/@alexbrin/17vvQqv6Crz#gC6n&quot;&gt;Этапы STLC&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
  &lt;ol id=&quot;iSKC&quot;&gt;
    &lt;li id=&quot;K3P2&quot;&gt;Анализ требований&lt;/li&gt;
    &lt;li id=&quot;is0j&quot;&gt;Тестовое планирование&lt;/li&gt;
    &lt;li id=&quot;wY9U&quot;&gt;Написание тестовых сценариев&lt;/li&gt;
    &lt;li id=&quot;miwG&quot;&gt;Подготовка тестовой среды&lt;/li&gt;
    &lt;li id=&quot;EHPf&quot;&gt;Выполнение тестов&lt;/li&gt;
    &lt;li id=&quot;d1pC&quot;&gt;Завершающая фаза&lt;/li&gt;
  &lt;/ol&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;qNuH&quot;&gt;ВСЕ О ТЕСТ-ДИЗАЙНЕ&lt;/h2&gt;
  &lt;h3 id=&quot;1bKC&quot;&gt;Что такое Тест-дизайн?&lt;/h3&gt;
  &lt;p id=&quot;p8O8&quot;&gt;&lt;strong&gt;Тест-дизайн&lt;/strong&gt; — это этап тестирования ПО, на котором проектируются и создаются тестовые случаи (тест-кейсы).&lt;/p&gt;
  &lt;h3 id=&quot;zELi&quot;&gt;Цели тест-дизайна:&lt;/h3&gt;
  &lt;ol id=&quot;ZgE0&quot;&gt;
    &lt;li id=&quot;vWxs&quot;&gt;Придумать тесты которые смогли бы обнаружить наиболее серьезные ошибки для ПО&lt;/li&gt;
    &lt;li id=&quot;yQEL&quot;&gt;Минимизация количества тестов&lt;/li&gt;
  &lt;/ol&gt;
  &lt;h3 id=&quot;cXjz&quot;&gt;Техники тест-дизайна:&lt;/h3&gt;
  &lt;p id=&quot;xZDG&quot;&gt;&lt;strong&gt;Классы эквивалентности&lt;/strong&gt; - это группировка тестовых данных, в рамках которой все элементы ведут себя одинаково. То есть, если система корректно обработает одно значение из класса, то она корректно обработает и все остальные значения этого класса&lt;/p&gt;
  &lt;p id=&quot;ZKmm&quot;&gt;&lt;strong&gt;Граничные значения&lt;/strong&gt; - Это метод тестирования, в котором основное внимание уделяется значениям на границах допустимого диапазона. Ошибки часто проникают именно в этих &amp;quot;крайних&amp;quot; точках, и проверка их помогает быстро их находить.&lt;/p&gt;
  &lt;p id=&quot;YY9F&quot;&gt;&lt;strong&gt;Попарное тестирование&lt;/strong&gt; - это метод тестирования, при котором из множества возможных вариантов входных данных выбираются и проверяются только уникальные пары. Это позволяет сократить общее количество тестовых примеров, при этом охватывая наиболее критичные комбинации.&lt;/p&gt;
  &lt;p id=&quot;JQPm&quot;&gt;&lt;strong&gt;Таблица принятия решений&lt;/strong&gt; - это инструмент для визуализации и анализа различных комбинаций условий и их ожидаемых результатов. Она представляет собой таблицу, в которой столбцы представляют условия, а строки - действия или результаты на основе этих условий.&lt;/p&gt;
  &lt;p id=&quot;tmQr&quot;&gt;&lt;strong&gt;Сценарное тестирования&lt;/strong&gt; - инструмент, подразумевающий прохождение пути пользователя.&lt;/p&gt;
  &lt;p id=&quot;Pdr4&quot;&gt;&lt;strong&gt;ADHOC&lt;/strong&gt; - тестирование без документации, больше относится к исследовательскому тестированию. Но сценарий такого тестирования должен преследовать какую то цель.&lt;/p&gt;
  &lt;p id=&quot;jNLc&quot;&gt;&lt;strong&gt;Предугадывание ошибок&lt;/strong&gt; - сценарий, подразумевающий предугадывание уязвимых мест в программе.&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;UdkJ&quot;&gt;ДОКУМЕНТАЦИЯ (кейсы, листы, репорты)&lt;/h2&gt;
  &lt;p id=&quot;l0Ba&quot;&gt;&lt;strong&gt;Требования &lt;/strong&gt;— это документ, описание того, что должно быть реализовано. Требования описывают то, что необходимо реализовать, без детализации технической стороны решения.&lt;/p&gt;
  &lt;h3 id=&quot;F14V&quot;&gt;Чек-лист&lt;/h3&gt;
  &lt;p id=&quot;yFo1&quot;&gt;&lt;strong&gt;Чек-лист&lt;/strong&gt;- список проверок, в котором мы указываем, что мы будем тестировать, результат и статус проверок.&lt;/p&gt;
  &lt;p id=&quot;y25l&quot;&gt;&lt;strong&gt;Чек-лист включает в себя следующие атрибуты:&lt;/strong&gt;&lt;/p&gt;
  &lt;ol id=&quot;J0Qc&quot;&gt;
    &lt;li id=&quot;PgjA&quot;&gt;Проект&lt;/li&gt;
    &lt;li id=&quot;sCb8&quot;&gt;Цель проверки&lt;/li&gt;
    &lt;li id=&quot;ztop&quot;&gt;Идентификатор&lt;/li&gt;
    &lt;li id=&quot;XGn0&quot;&gt;Требования&lt;/li&gt;
    &lt;li id=&quot;u5Gv&quot;&gt;Дата проведения&lt;/li&gt;
    &lt;li id=&quot;2JET&quot;&gt;Исполнитель&lt;/li&gt;
    &lt;li id=&quot;XBya&quot;&gt;Среда тестирования&lt;/li&gt;
    &lt;li id=&quot;MxEJ&quot;&gt;Тип тестов&lt;/li&gt;
    &lt;li id=&quot;zpo7&quot;&gt;Название проверок&lt;/li&gt;
    &lt;li id=&quot;d0jK&quot;&gt;Результат проверки&lt;/li&gt;
  &lt;/ol&gt;
  &lt;h3 id=&quot;Tf4q&quot;&gt;Тест-кейс&lt;/h3&gt;
  &lt;p id=&quot;BCJY&quot;&gt;&lt;strong&gt;Тест-кейс – &lt;/strong&gt;пошаговый сценарий, описывающий как проводится тестирование, и включающий более детализированные проверки (шаги).&lt;/p&gt;
  &lt;p id=&quot;tNta&quot;&gt;То есть если в чек-листах мы указывали название самих проверок, не детализировали их, то в тест-кейсах необходимо расписать каждый шаг, то есть переход по ссылкам, заполнение полей, нажатие кнопок и т.д.&lt;/p&gt;
  &lt;p id=&quot;EGbp&quot;&gt;&lt;strong&gt;Обязательные атрибуты тест-кейсов&lt;/strong&gt;&lt;/p&gt;
  &lt;ol id=&quot;2rK2&quot;&gt;
    &lt;li id=&quot;aPtN&quot;&gt;Название проекта&lt;/li&gt;
    &lt;li id=&quot;sSt4&quot;&gt;ID&lt;/li&gt;
    &lt;li id=&quot;JO6a&quot;&gt;Требования&lt;/li&gt;
    &lt;li id=&quot;QrZj&quot;&gt;Модуль&lt;/li&gt;
    &lt;li id=&quot;qoxk&quot;&gt;Название&lt;/li&gt;
    &lt;li id=&quot;i6Lq&quot;&gt;Приоритет&lt;br /&gt;P1 Высокий (High)&lt;br /&gt;P2 Средний (Medium)&lt;br /&gt;P3 Низкий (Low)&lt;/li&gt;
    &lt;li id=&quot;bott&quot;&gt;Среда тестирования&lt;/li&gt;
    &lt;li id=&quot;9Yyh&quot;&gt;Шаги-теста&lt;/li&gt;
    &lt;li id=&quot;UkCN&quot;&gt;Ожидаемый результат&lt;/li&gt;
  &lt;/ol&gt;
  &lt;h3 id=&quot;ppNO&quot;&gt;Тестовый набор&lt;/h3&gt;
  &lt;p id=&quot;0gAf&quot;&gt;&lt;strong&gt;Тестовый набор (Testsuite) – &lt;/strong&gt;набор тест-кейсов, объединенный по одному модулю или цели проверки.&lt;/p&gt;
  &lt;p id=&quot;AdyO&quot;&gt;Включает в себя те же атрибуты, которые и включает в себя тест-кейс.&lt;/p&gt;
  &lt;h3 id=&quot;qt2i&quot;&gt;Баг-репорт&lt;/h3&gt;
  &lt;p id=&quot;MhnC&quot;&gt;&lt;strong&gt;Баг-репорт&lt;/strong&gt; – это отчет об ошибках&lt;/p&gt;
  &lt;p id=&quot;1uK4&quot;&gt;&lt;strong&gt;Атрибуты баг-репорта&lt;/strong&gt;&lt;/p&gt;
  &lt;ol id=&quot;PYOH&quot;&gt;
    &lt;li id=&quot;x8RO&quot;&gt;Проект&lt;/li&gt;
    &lt;li id=&quot;dxAP&quot;&gt;Название документа&lt;/li&gt;
    &lt;li id=&quot;KI8f&quot;&gt;Ссылка на требования&lt;/li&gt;
    &lt;li id=&quot;qzo6&quot;&gt;Цель проверки&lt;/li&gt;
    &lt;li id=&quot;J09U&quot;&gt;Дата проведения&lt;/li&gt;
    &lt;li id=&quot;pSMw&quot;&gt;Исполнитель&lt;/li&gt;
    &lt;li id=&quot;a2vD&quot;&gt;Среда тестирования&lt;/li&gt;
    &lt;li id=&quot;FoYP&quot;&gt;Шаги теста&lt;/li&gt;
    &lt;li id=&quot;qwYC&quot;&gt;Ожидаемый результат&lt;/li&gt;
    &lt;li id=&quot;8o1m&quot;&gt;Фактический результат&lt;/li&gt;
    &lt;li id=&quot;42rQ&quot;&gt;Статус бага&lt;/li&gt;
    &lt;li id=&quot;Tegi&quot;&gt;Серьезность бага&lt;/li&gt;
    &lt;li id=&quot;MEz2&quot;&gt;Приоритет устранения бага&lt;/li&gt;
    &lt;li id=&quot;ngkB&quot;&gt;Прикрепленный файл&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;MUM4&quot;&gt;&lt;strong&gt;Серьезность бага:&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;tVWd&quot;&gt;&lt;strong&gt;Серьезность (severity) – &lt;/strong&gt;показывает степень ущерба, который наносится проекту существованием дефекта. Severity выставляется тестировщиком.&lt;/p&gt;
  &lt;p id=&quot;IFZK&quot;&gt;&lt;strong&gt;У серьезности могут быть следующие статусы:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;UCqM&quot;&gt;
    &lt;li id=&quot;Tlkp&quot;&gt;&lt;strong&gt;Blocker – &lt;/strong&gt;блокировка, работа ПО невозможна&lt;/li&gt;
    &lt;li id=&quot;Mye6&quot;&gt;&lt;strong&gt;Critical –&lt;/strong&gt;критический, приводит наш функционал в нерабочее состояние&lt;/li&gt;
    &lt;li id=&quot;fd9B&quot;&gt;&lt;strong&gt;Major-&lt;/strong&gt;серьезные ошибки, которые свидетельствуют об отклонении работы от БЛ или нарушающие работу программы, но не имеют критическое воздействие на ПО&lt;/li&gt;
    &lt;li id=&quot;R0a2&quot;&gt;&lt;strong&gt;Minor – &lt;/strong&gt;незначительный дефект не нарушающий функционал нашего приложения, который является несоответствием ожидаемого результата (ошибка дизайна, пример)&lt;/li&gt;
    &lt;li id=&quot;zblv&quot;&gt;&lt;strong&gt;Trivial&lt;/strong&gt; –не имеет влияния на функционал и работу нашей программы, но может быть обнаружен визуально.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;lO7R&quot;&gt;&lt;strong&gt;Приоритет бага:&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;WBWm&quot;&gt;&lt;strong&gt;Приоритет -&lt;/strong&gt; показывает, как быстро дефект должен быть устранён. Priority выставляется менеджером, team-lead или заказчиком.&lt;/p&gt;
  &lt;ul id=&quot;OtUs&quot;&gt;
    &lt;li id=&quot;0Xb4&quot;&gt;&lt;strong&gt;P1 Высокий (High&lt;/strong&gt;)&lt;br /&gt;Критическая для проекта ошибка. Должна быть исправлена как можно быстрее.&lt;/li&gt;
    &lt;li id=&quot;x2fj&quot;&gt;&lt;strong&gt;P2 Средний (Medium)&lt;/strong&gt;&lt;br /&gt;Не критичная для проекта ошибка, однако требует обязательного решения.&lt;/li&gt;
    &lt;li id=&quot;mokX&quot;&gt;&lt;strong&gt;P3 Низкий (Low)&lt;/strong&gt;&lt;br /&gt;Наличие данной ошибки не является критичным и не требует срочного решения.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;pUOL&quot;&gt;КЛИЕНТ - СЕРВЕРНАЯ АРХИТЕКТУРА&lt;/h2&gt;
  &lt;p id=&quot;ak69&quot;&gt;&lt;strong&gt;Клиент-Серверная архитектура &lt;/strong&gt;– это структура, в которой нагрузка распределяется между поставщиками услуг и заказчиками услуг, а также промежуточными звеньями.&lt;/p&gt;
  &lt;h3 id=&quot;tbDn&quot;&gt;2 вида клиент-серверной архитектуры:&lt;/h3&gt;
  &lt;ol id=&quot;yH4I&quot;&gt;
    &lt;li id=&quot;jv2T&quot;&gt;С базами данных&lt;/li&gt;
    &lt;li id=&quot;nln6&quot;&gt;Без баз данных&lt;/li&gt;
  &lt;/ol&gt;
  &lt;h3 id=&quot;2HJg&quot;&gt;Что включает в себя КСА:&lt;/h3&gt;
  &lt;ol id=&quot;kUgY&quot;&gt;
    &lt;li id=&quot;cZ92&quot;&gt;Клиент&lt;/li&gt;
    &lt;li id=&quot;SLJl&quot;&gt;Сервер&lt;/li&gt;
    &lt;li id=&quot;7wwI&quot;&gt;Базы данных&lt;/li&gt;
    &lt;li id=&quot;iT93&quot;&gt;Промежуточное ПО - драйверы, набор протоколов, язык SQL&lt;/li&gt;
    &lt;li id=&quot;GR69&quot;&gt;Прикладной программный интерфейс (API) - набор функций и подпрограмм, обеспечивающих взаимодействие клиентов и серверов, набор методов, которые можно использовать для доступа функциональности к другой программе&lt;/li&gt;
  &lt;/ol&gt;
  &lt;h3 id=&quot;uBNK&quot;&gt;Существует 2 вида клиентов:&lt;/h3&gt;
  &lt;ol id=&quot;2xrS&quot;&gt;
    &lt;li id=&quot;aTsG&quot;&gt;Толстый клиент - приложение, которое обеспечивает расширенную функциональность независимо от центрального сервера. Сервер выступает в качестве хранилища данных&lt;/li&gt;
    &lt;li id=&quot;UpXp&quot;&gt;Тонкий клиент - большую часть нагрузки берет на себя сервер, а не пользователь.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;h3 id=&quot;yGzA&quot;&gt;Плюсы и Минусы Монолитной Архитектуры:&lt;/h3&gt;
  &lt;p id=&quot;GwOA&quot;&gt;&lt;strong&gt;Плюсы:&lt;/strong&gt;&lt;/p&gt;
  &lt;ol id=&quot;n5wi&quot;&gt;
    &lt;li id=&quot;bDs6&quot;&gt;&lt;strong&gt;Простота&lt;/strong&gt;: Проще создавать и тестировать, так как все функции в одном месте.&lt;/li&gt;
    &lt;li id=&quot;NgDU&quot;&gt;&lt;strong&gt;Меньше взаимодействий&lt;/strong&gt;: Нет необходимости в сетевых вызовах между компонентами.&lt;/li&gt;
    &lt;li id=&quot;sDrd&quot;&gt;&lt;strong&gt;Производительность&lt;/strong&gt;: Обычно быстрее из-за прямых вызовов функций.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;cQ7z&quot;&gt;&lt;strong&gt;Минусы:&lt;/strong&gt;&lt;/p&gt;
  &lt;ol id=&quot;tuLT&quot;&gt;
    &lt;li id=&quot;yYH2&quot;&gt;&lt;strong&gt;Масштабирование&lt;/strong&gt;: Затруднено горизонтальное масштабирование из-за требований к целостности данных.&lt;/li&gt;
    &lt;li id=&quot;lsFV&quot;&gt;&lt;strong&gt;Сложность обновлений&lt;/strong&gt;: Изменения в большом приложении могут быть сложными и опасными.&lt;/li&gt;
    &lt;li id=&quot;Gimu&quot;&gt;&lt;strong&gt;Гибкость&lt;/strong&gt;: Недостаточно гибкая для больших и комплексных проектов.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;h3 id=&quot;Jdm6&quot;&gt;Плюсы и Минусы Микросервисной Архитектуры:&lt;/h3&gt;
  &lt;p id=&quot;vBxK&quot;&gt;&lt;strong&gt;Плюсы:&lt;/strong&gt;&lt;/p&gt;
  &lt;ol id=&quot;J8ZL&quot;&gt;
    &lt;li id=&quot;uunX&quot;&gt;&lt;strong&gt;Гибкость&lt;/strong&gt;: Легко масштабировать и обновлять отдельные микросервисы.&lt;/li&gt;
    &lt;li id=&quot;4jRq&quot;&gt;&lt;strong&gt;Распределенная разработка&lt;/strong&gt;: Команды могут работать независимо друг от друга на разных сервисах.&lt;/li&gt;
    &lt;li id=&quot;FY16&quot;&gt;&lt;strong&gt;Отказоустойчивость&lt;/strong&gt;: Если один сервис падает, другие могут продолжать работу.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;9xEI&quot;&gt;&lt;strong&gt;Минусы:&lt;/strong&gt;&lt;/p&gt;
  &lt;ol id=&quot;W1IX&quot;&gt;
    &lt;li id=&quot;fP4u&quot;&gt;&lt;strong&gt;Сложность управления&lt;/strong&gt;: Необходимо учитывать большое количество сервисов и их взаимодействие.&lt;/li&gt;
    &lt;li id=&quot;RWOp&quot;&gt;&lt;strong&gt;Сложнее отлаживать&lt;/strong&gt;: Взаимодействие между микросервисами может быть сложным для отладки.&lt;/li&gt;
    &lt;li id=&quot;p87H&quot;&gt;&lt;strong&gt;Затраты на инфраструктуру&lt;/strong&gt;: Дополнительные расходы на поддержку и развертывание сервисов.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;rbG1&quot;&gt;HTTP ПРОТОКОЛЫ&lt;/h2&gt;
  &lt;p id=&quot;icnk&quot;&gt;&lt;strong&gt;HTTP&lt;/strong&gt;- «протокол передачи &lt;a href=&quot;https://ru.wikipedia.org/wiki/%D0%93%D0%B8%D0%BF%D0%B5%D1%80%D1%82%D0%B5%D0%BA%D1%81%D1%82&quot; target=&quot;_blank&quot;&gt;гипертекста&lt;/a&gt;») — &lt;a href=&quot;https://ru.wikipedia.org/wiki/%D0%A1%D0%B5%D1%82%D0%B5%D0%B2%D0%BE%D0%B9_%D0%BF%D1%80%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%BB&quot; target=&quot;_blank&quot;&gt;протокол&lt;/a&gt; &lt;a href=&quot;https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%BB%D1%8B_%D0%BF%D1%80%D0%B8%D0%BA%D0%BB%D0%B0%D0%B4%D0%BD%D0%BE%D0%B3%D0%BE_%D1%83%D1%80%D0%BE%D0%B2%D0%BD%D1%8F&quot; target=&quot;_blank&quot;&gt;прикладного уровня&lt;/a&gt; передачи данных, изначально — в виде гипертекстовых документов в формате &lt;a href=&quot;https://ru.wikipedia.org/wiki/HTML&quot; target=&quot;_blank&quot;&gt;HTML&lt;/a&gt;.&lt;/p&gt;
  &lt;p id=&quot;8Pz6&quot;&gt;&lt;strong&gt;Протокол&lt;/strong&gt; – набор правил передачи информации. Мы регламентируем то, как будет передаваться в сети интернет наша информация.&lt;/p&gt;
  &lt;h3 id=&quot;7cYE&quot;&gt;Метод HTTP&lt;/h3&gt;
  &lt;p id=&quot;v99M&quot;&gt;&lt;strong&gt;GET &lt;/strong&gt;- запрос для получения статуса, получение какой либо информации от сервера&lt;/p&gt;
  &lt;p id=&quot;7TTT&quot;&gt;&lt;strong&gt;POST&lt;/strong&gt; – отправка данных, файлов&lt;/p&gt;
  &lt;p id=&quot;SNJc&quot;&gt;&lt;strong&gt;PUT&lt;/strong&gt; – изменение данных&lt;/p&gt;
  &lt;p id=&quot;oIE1&quot;&gt;&lt;strong&gt;DELETE&lt;/strong&gt; – удаление данных&lt;/p&gt;
  &lt;h3 id=&quot;Oe12&quot;&gt;Коды состояния запроса&lt;/h3&gt;
  &lt;p id=&quot;jluf&quot;&gt;&lt;strong&gt;100-е &lt;/strong&gt;– это информационный код состояния, дает информационные сообщения.&lt;/p&gt;
  &lt;p id=&quot;O8qw&quot;&gt;&lt;strong&gt;200-е &lt;/strong&gt;– информируют нас об успешной отработке запроса&lt;/p&gt;
  &lt;p id=&quot;KVh1&quot;&gt;&lt;strong&gt;300-е &lt;/strong&gt;– это перенаправление, то есть, к примеру, когда был изменен url и нужно идти на другой. &lt;/p&gt;
  &lt;p id=&quot;7P10&quot;&gt;&lt;strong&gt;400-е&lt;/strong&gt; – обозначают что на стороне клиента есть ошибка.&lt;/p&gt;
  &lt;p id=&quot;RVfF&quot;&gt;&lt;strong&gt;500-е &lt;/strong&gt;– это ошибка на стороне сервера.&lt;/p&gt;
  &lt;h3 id=&quot;yS55&quot;&gt;&lt;strong&gt;Передача протокола осуществляется по Модели TCP/IP.&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;K5aj&quot;&gt;Уровни TCP/IP:&lt;/p&gt;
  &lt;ul id=&quot;qQ7Q&quot;&gt;
    &lt;li id=&quot;sBJw&quot;&gt;&lt;strong&gt;сетевые интерфейсы&lt;/strong&gt; – передаются физические импульсы (оптоволокно) (протокол Ethernet)&lt;/li&gt;
    &lt;li id=&quot;QqVD&quot;&gt;&lt;strong&gt;сетевой&lt;/strong&gt; – происходит передача физических сигналов, основной протокол –IP&lt;/li&gt;
    &lt;li id=&quot;U5RZ&quot;&gt;&lt;strong&gt;транспортный&lt;/strong&gt; – транспортные взаимодействия в нашей сети:&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;cxla&quot;&gt;&lt;strong&gt;TCP&lt;/strong&gt; - надежный транспортный протокол, в результате которого происходит гарантия того, что информация доходит до клиента, если нет подтверждения о получении информации, то происходит повторная отправка, например в почтовых сервисах, где очень важно чтоб письмо дошло до адресатов.&lt;/p&gt;
  &lt;p id=&quot;9JkN&quot;&gt;&lt;strong&gt;UDP&lt;/strong&gt; – нет гарантии того что информация дошла, она идет непрерывным потоком, нет обратной связи, то есть подтверждения получения, например в онлайн-играх.&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;hG9v&quot;&gt;SOAP И REST&lt;/h2&gt;
  &lt;p id=&quot;eNcW&quot;&gt;&lt;strong&gt;SOAP (Simple Object Access Protocol) &lt;/strong&gt;— стандартный протокол. Четко структурирован и задокументирован.&lt;/p&gt;
  &lt;p id=&quot;h5gw&quot;&gt;&lt;strong&gt;REST (Representational State Transfer)&lt;/strong&gt; — архитектурный стиль взаимодействия компьютерных систем в сети, основанный на методах протокола HTTP.&lt;/p&gt;
  &lt;h3 id=&quot;pKJZ&quot;&gt;SOAP&lt;/h3&gt;
  &lt;p id=&quot;um3f&quot;&gt;Любое сообщение в протоколе SOAP — это XML документ&lt;/p&gt;
  &lt;h3 id=&quot;wpLy&quot;&gt;REST&lt;/h3&gt;
  &lt;p id=&quot;myrb&quot;&gt;&lt;strong&gt;REST (Representational State Transfer)&lt;/strong&gt; — на самом деле архитектурный стиль, а не протокол.&lt;/p&gt;
  &lt;p id=&quot;PlMr&quot;&gt;Управление данными происходит с помощью методов HTTP: GET, POST, PUT, DELETE.&lt;/p&gt;
  &lt;p id=&quot;JJOg&quot;&gt;&lt;strong&gt;Разница между архитектурным стилем и протоколом в том что к АС не применяются какие-то жесткие правила&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;a4B0&quot;&gt;REST (Representational State Transfer) и SOAP (Simple Object Access Protocol) - это два различных способа построения архитектуры для веб-сервисов. Вот основные различия между ними:&lt;/p&gt;
  &lt;ol id=&quot;ww2Q&quot;&gt;
    &lt;li id=&quot;g5ht&quot;&gt;&lt;strong&gt;Принципы дизайна:&lt;br /&gt;&lt;/strong&gt;REST базируется на принципах архитектуры веб, таких как использование HTTP методов (GET, POST, PUT, DELETE), представление ресурсов через URL&lt;br /&gt;SOAP основывается на строгих стандартах и предполагает использование XML для обмена сообщениями&lt;/li&gt;
    &lt;li id=&quot;7xDY&quot;&gt;&lt;strong&gt;Формат сообщений:&lt;br /&gt;&lt;/strong&gt;REST использует различные форматы для обмена данными, такие как JSON, XML, HTML, и другие.&lt;br /&gt;SOAP использует только XML в качестве формата сообщений.&lt;/li&gt;
    &lt;li id=&quot;sm0R&quot;&gt;&lt;strong&gt;Простота и гибкость:&lt;br /&gt;&lt;/strong&gt;REST считается более простым и гибким для использования.&lt;br /&gt;SOAP предлагает большую степень стандартизации&lt;/li&gt;
    &lt;li id=&quot;64yf&quot;&gt;&lt;strong&gt;Производительность:&lt;br /&gt;&lt;/strong&gt;REST обычно обеспечивает более высокую производительность благодаря более легковесным форматам данных и возможности кэширования.&lt;br /&gt;SOAP зачастую требует большего объема данных из-за использования XML, что может негативно отразиться на производительности.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;h3 id=&quot;7Qnf&quot;&gt;Что выбрать SOAP или REST?&lt;/h3&gt;
  &lt;p id=&quot;Ix4w&quot;&gt;Обычно, SOAP используется в крупных корпоративных системах со сложной логикой, когда требуются четкие стандарты, подкрепленные временем.&lt;/p&gt;
  &lt;p id=&quot;8gHS&quot;&gt;Если же вы разрабатываете публичное API и логика взаимодействия во многом покрывается действиями: чтение, добавление, изменение и удаление данных (те самые наши 4 метода get, post, put, delete ) — смело выбирайте REST. Он наиболее популярен и быстр.&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;KQCp&quot;&gt;POSTMAN И API&lt;/h2&gt;
  &lt;p id=&quot;A1CQ&quot;&gt;&lt;strong&gt;API&lt;/strong&gt; – интерфейс, который определяет, как одна программа должна взаимодействовать с другой программой.&lt;/p&gt;
  &lt;p id=&quot;3NF8&quot;&gt;&lt;strong&gt;Типы API:&lt;/strong&gt;&lt;/p&gt;
  &lt;ol id=&quot;69pk&quot;&gt;
    &lt;li id=&quot;FTsm&quot;&gt;Локальные API - то, что позволяет компонентам одной системы взаимодействовать между собой (микросервисная архитектура)&lt;/li&gt;
    &lt;li id=&quot;TVQP&quot;&gt;Удаленные API - позволяет связывать между собой несколько систем (SOAP и REST).&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;xcys&quot;&gt;&lt;strong&gt;API появляется раньше GUI поэтому API тестируется раньше.&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;Z9oF&quot;&gt;&lt;strong&gt;Как работает API:&lt;/strong&gt;&lt;/p&gt;
  &lt;ol id=&quot;w3Ux&quot;&gt;
    &lt;li id=&quot;ijoK&quot;&gt;Вызов операции (GET, POST, PUT, DELETE)&lt;/li&gt;
    &lt;li id=&quot;bCNy&quot;&gt;Входные данные (HTTP Request)&lt;/li&gt;
    &lt;li id=&quot;o2tq&quot;&gt;Выходные данные (РЕЕЗ Response)&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;jKhs&quot;&gt;&lt;strong&gt;Способы вызова API:&lt;/strong&gt;&lt;/p&gt;
  &lt;ol id=&quot;Zq6j&quot;&gt;
    &lt;li id=&quot;G11I&quot;&gt;Вызов функции системой (прямой вызов)&lt;/li&gt;
    &lt;li id=&quot;aIA6&quot;&gt;Вызов метода другой системой (прямой вызов)&lt;/li&gt;
    &lt;li id=&quot;NG7C&quot;&gt;Вызов метода человеком (прямой вызов)&lt;/li&gt;
    &lt;li id=&quot;0tnv&quot;&gt;GUI -&amp;gt; API. (косвенный)&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;Aubu&quot;&gt;&lt;strong&gt;Коллекции в Postman&lt;/strong&gt; представляют собой группы запросов, скриптов и переменных, организованные вместе для удобного управления и использования&lt;/p&gt;
  &lt;p id=&quot;RL7k&quot;&gt;Вот несколько основных целей использования коллекций в Postman:&lt;/p&gt;
  &lt;ol id=&quot;rkuu&quot;&gt;
    &lt;li id=&quot;P304&quot;&gt;&lt;strong&gt;Организация запросов:&lt;/strong&gt;&lt;/li&gt;
    &lt;ul id=&quot;YNo7&quot;&gt;
      &lt;li id=&quot;zvQT&quot;&gt;Коллекции позволяют организовать ваши API-запросы по темам, проектам или любым другим категориям. Это облегчает навигацию и поиск конкретных запросов.&lt;/li&gt;
    &lt;/ul&gt;
    &lt;li id=&quot;rY21&quot;&gt;&lt;strong&gt;Совместная работа:&lt;/strong&gt;&lt;/li&gt;
    &lt;ul id=&quot;JDgU&quot;&gt;
      &lt;li id=&quot;iiUg&quot;&gt;Вы можете делиться коллекциями с другими участниками команды, что упрощает совместную работу над API и обмен знаниями.&lt;/li&gt;
    &lt;/ul&gt;
    &lt;li id=&quot;iNzL&quot;&gt;&lt;strong&gt;Использование переменных и сред:&lt;/strong&gt;&lt;/li&gt;
    &lt;ul id=&quot;3dPj&quot;&gt;
      &lt;li id=&quot;1lhn&quot;&gt;В коллекциях можно определять переменные и среды, что облегчает настройку запросов для различных сред или конфигураций.&lt;/li&gt;
    &lt;/ul&gt;
    &lt;li id=&quot;JE8A&quot;&gt;&lt;strong&gt;Управление тестами:&lt;/strong&gt;&lt;/li&gt;
    &lt;ul id=&quot;rS2Z&quot;&gt;
      &lt;li id=&quot;eapy&quot;&gt;Коллекции позволяют легко настраивать и управлять тестами для ваших API-запросов, что помогает обеспечить качество и надежность вашего API.&lt;/li&gt;
    &lt;/ul&gt;
    &lt;li id=&quot;HyoL&quot;&gt;&lt;strong&gt;Сценарии и потоки работы:&lt;/strong&gt;&lt;/li&gt;
    &lt;ul id=&quot;AaT6&quot;&gt;
      &lt;li id=&quot;GBvs&quot;&gt;Postman позволяет создавать сценарии и потоки работы с помощью коллекций, что полезно для тестирования API и взаимодействия с ними в различных сценариях использования.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;4Z2k&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;huwB&quot;&gt;МОБИЛЬНОЕ ТЕСТИРОВАНИЕ&lt;/h2&gt;
  &lt;h3 id=&quot;ikK4&quot;&gt;Типы мобильных приложений:&lt;/h3&gt;
  &lt;p id=&quot;iMxh&quot;&gt;&lt;strong&gt;Нативными - &lt;/strong&gt;написаны на родном (с англ. native – родной) для определённой платформы языке программирования.&lt;/p&gt;
  &lt;p id=&quot;cl83&quot;&gt;&lt;strong&gt;Web&lt;/strong&gt; – веб-сайт, адаптированный для нашего мобильного приложения.&lt;br /&gt;Веб-приложение, представляет собой сайт, который адаптирован и оптимизирован под любой смартфон.&lt;/p&gt;
  &lt;p id=&quot;DsTK&quot;&gt;&lt;strong&gt;Гибридные приложения&lt;/strong&gt; представляют собой сочетание веб и нативных приложений. Они могут быть загружены из маркетов вроде Google Play и App Store. Для их работы необходимо интернет-подключение.&lt;br /&gt;Так же часто гибридные приложения являются &lt;strong&gt;кроссплатформенными&lt;/strong&gt;, что ускоряет и облегчает процесс разработки.&lt;/p&gt;
  &lt;h3 id=&quot;AsBl&quot;&gt;Тестирование и особенности тестирования мобильных приложений&lt;/h3&gt;
  &lt;h3 id=&quot;UnHC&quot;&gt;Зависимости мобильного тестирования:&lt;/h3&gt;
  &lt;p id=&quot;3GgS&quot;&gt;&lt;strong&gt;1. Интернет:&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;9a40&quot;&gt;- тип соединения&lt;/p&gt;
  &lt;p id=&quot;9emG&quot;&gt;- изменение типа соединения&lt;/p&gt;
  &lt;p id=&quot;baGA&quot;&gt;- качество соединения&lt;/p&gt;
  &lt;p id=&quot;6t1h&quot;&gt;- потеря связи&lt;/p&gt;
  &lt;p id=&quot;KLf2&quot;&gt;&lt;strong&gt;2.Проверки на прерывание:&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;np2o&quot;&gt;- исходящие/входящие вызовы&lt;/p&gt;
  &lt;p id=&quot;7piw&quot;&gt;- всплывающие окна/уведомления&lt;/p&gt;
  &lt;p id=&quot;j6He&quot;&gt;- прерывания при разрядке/подзарядке&lt;/p&gt;
  &lt;p id=&quot;xf0o&quot;&gt;- сворачивание/разворачивание приложения&lt;/p&gt;
  &lt;p id=&quot;a0CV&quot;&gt;&lt;strong&gt;3.Тестирование установки&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;fFEM&quot;&gt;Установка.&lt;/p&gt;
  &lt;p id=&quot;a3bP&quot;&gt;Удаление и переустановка.&lt;/p&gt;
  &lt;p id=&quot;OPIy&quot;&gt;Обновление.&lt;/p&gt;
  &lt;p id=&quot;1lkj&quot;&gt;&lt;strong&gt;4.Работа с функциями телефона:&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;phBt&quot;&gt;- GPS&lt;/p&gt;
  &lt;p id=&quot;TIkZ&quot;&gt;- видео/фото&lt;/p&gt;
  &lt;p id=&quot;yrsK&quot;&gt;- размер экрана, разрешение, ориентация&lt;/p&gt;
  &lt;p id=&quot;96s5&quot;&gt;- работа с жестами&lt;/p&gt;
  &lt;p id=&quot;dUzh&quot;&gt;- отпечаток пальца, узнавание лица, пароль, графический ключ&lt;/p&gt;
  &lt;p id=&quot;XSZ4&quot;&gt;- клавиатура&lt;/p&gt;
  &lt;p id=&quot;qHHT&quot;&gt;- Bluetooеh&lt;/p&gt;
  &lt;p id=&quot;AC76&quot;&gt;- работа со съемными картами памяти&lt;/p&gt;
  &lt;p id=&quot;kTOo&quot;&gt;- нажатие&lt;/p&gt;
  &lt;p id=&quot;2MPG&quot;&gt;- комбинации кнопок&lt;/p&gt;
  &lt;p id=&quot;Zt6M&quot;&gt;- динамики, микрофоны, гнездо для гарнитуры&lt;/p&gt;
  &lt;p id=&quot;49hf&quot;&gt;&lt;strong&gt;5.Тестирование производительности:&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;EBKv&quot;&gt;- загрузка оперативной памяти&lt;/p&gt;
  &lt;p id=&quot;69VD&quot;&gt;- зависимость от заряда батареи&lt;/p&gt;
  &lt;p id=&quot;aNdl&quot;&gt;- запуск с внутренней памяти/ с накопителя&lt;/p&gt;
  &lt;p id=&quot;lCyJ&quot;&gt;&lt;strong&gt;6. Тестирование на соответствие гайдлайнам и мокапам&lt;/strong&gt;&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;262c&quot;&gt;ЛОКАЛИЗАЦИЯ БАГА&lt;/h2&gt;
  &lt;p id=&quot;YIgC&quot;&gt;&lt;strong&gt;Локализация бага&lt;/strong&gt; - процесс обнаружения бага и поиск условий, при которых баг повторяется. Найти конкретные условия и минимальные для воспроизведения шаги.&lt;/p&gt;
  &lt;p id=&quot;ZauS&quot;&gt;Локализация - это поиск первопричины возникновения ошибки.&lt;/p&gt;
  &lt;p id=&quot;Eo0o&quot;&gt;Нужно проверить себя еще раз: воспроизвести баг снова при тех же условиях. Если ошибка не повторилась при очередном тестировании, то нужно разобраться, точно ли были соблюдены все действия и шаги воспроизведения, приведшие к этому результату. Для того, чтобы более точно определить условия воспроизведения ошибки, необходимо эту ошибку локализовать.&lt;/p&gt;
  &lt;p id=&quot;ptGz&quot;&gt;&lt;strong&gt;Чтобы локализовать баг, необходимо собрать максимальное количество информации о его воспроизведении:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;7uwm&quot;&gt;
    &lt;li id=&quot;jVN0&quot;&gt;Выявить причины возникновения дефекта&lt;/li&gt;
    &lt;li id=&quot;fVSo&quot;&gt;Проанализировать возможность влияния найденного дефекта на другие области&lt;/li&gt;
    &lt;li id=&quot;hIto&quot;&gt;Отклонение от ожидаемого результата&lt;/li&gt;
    &lt;li id=&quot;skzw&quot;&gt;Исследовать окружение&lt;/li&gt;
    &lt;li id=&quot;Qgf7&quot;&gt;Проверить на разных устройствах&lt;/li&gt;
    &lt;li id=&quot;oSPp&quot;&gt;Проверить в разных версиях ПО&lt;/li&gt;
    &lt;li id=&quot;4Nsx&quot;&gt;Проанализировать ресурсы системы&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;FSqf&quot;&gt;&lt;strong&gt;Локализация бага на интеграционном уровне&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;YiCM&quot;&gt;Локализация бага (дефекта) включает в себя процесс анализа проблемы с целью выявления максимальной детализации причины ее возникновения. Чем больше информации о проблеме собрано, тем быстрее ее решит команда.&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;msVl&quot;&gt;DEVTOOLS&lt;/h2&gt;
  &lt;ol id=&quot;81xd&quot;&gt;
    &lt;li id=&quot;KlHK&quot;&gt;Консоль - прописываются действия и ошибка JS. Так же в этой консоли можно исполнять JS. Ошибки, предупреждения о возможных ошибках. Все эти ошибки копируются (текст из консоли) и отправляется в баг репорт. &lt;/li&gt;
    &lt;li id=&quot;CkgZ&quot;&gt;Источники - здесь содержится информация о серверах, к которым общается клиент. &lt;/li&gt;
    &lt;li id=&quot;m8Y2&quot;&gt;Сеть - информация об общении сервера и клиента. Показывает запросы, которые отправляет клиент и ответы, которые отправляет сервер. &lt;/li&gt;
    &lt;li id=&quot;KwXP&quot;&gt;Производительность - для оценки быстродействия сайта. &lt;/li&gt;
    &lt;li id=&quot;ppIk&quot;&gt;Защита - проверка на безопасность протоколов.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;NaF9&quot;&gt;СНИФФЕРЫ&lt;/h2&gt;
  &lt;p id=&quot;qPEP&quot;&gt;&lt;strong&gt;Снифферы&lt;/strong&gt; - инструменты, которые позволяют отслеживать запросы и ответы от сервера, и, при необходимости, их изменять. Используются для тестирования веб-приложений или мобильного тестирования.&lt;/p&gt;
  &lt;p id=&quot;Z2yy&quot;&gt;Самые популярные инструменты: Charles и Fiddler.&lt;/p&gt;
  &lt;h3 id=&quot;9B2P&quot;&gt;Charles&lt;/h3&gt;
  &lt;p id=&quot;bsif&quot;&gt;При работе в браузере все запросы и ответы будут отображаться в программе.&lt;/p&gt;
  &lt;p id=&quot;UOJI&quot;&gt;Можно выбирать запрос и нажать на Focus. И тогда можно отслеживать именно этот запрос. Так же, как и в devtools.&lt;/p&gt;
  &lt;p id=&quot;5czx&quot;&gt;Что можно посмотреть в запросах: header, body, служебную информацию, статус коды, методы (http).&lt;/p&gt;
  &lt;p id=&quot;T5Mg&quot;&gt;Так же можно с помощью Charles отслеживать трафик с телефона или эмулятора. Для этого в настройках WiFi нужно выбрать сеть, к которой подключен компьютер с Charles на борту и подключится к той же WiFi сети, а так же настроить прокси для этой сети. В прокси нужно вписать ip адрес компьютера. Порт - 8888. Так же на телефоне нужно установить сертификат чтобы перехватывать трафик.&lt;/p&gt;
  &lt;p id=&quot;nKkP&quot;&gt;&lt;strong&gt;Что можно тестировать в Charles:&lt;/strong&gt;&lt;/p&gt;
  &lt;ol id=&quot;WsSZ&quot;&gt;
    &lt;li id=&quot;JUwy&quot;&gt;Переадресация (Tools - Map Remote). Можно выставить поведение при переадресации. Например, чтобы с сайта google.com происходила переадресация на ya.ru. &lt;/li&gt;
    &lt;li id=&quot;kc34&quot;&gt;Подмена (Tools - Rewrite). Используется чаще всего. Можно подменить запросы, URL, ответы, отдельные параметры, отдельные header. &lt;/li&gt;
    &lt;li id=&quot;hDhR&quot;&gt;Подмена ответа сервера в целом (Tools - Map Local). Например, работаем на сайте и загружаем определенную картинку или заказчик что то загрузил на сайт и появилась ошибка. Нужно запросить у заказчика материал и попробовать повторить его путь. Берем эту картинку, добавляем ее в body и смотрим, что происходит. Тогда могут пригодится ответы сервера. &lt;/li&gt;
    &lt;li id=&quot;HTN1&quot;&gt;Занижать скорость интернета (Tools - Enable Trottling).&lt;/li&gt;
    &lt;li id=&quot;feE0&quot;&gt;Работа с breakpoint (Proxy - Breakpointing Settings). Можно ставить как для ответа, так и для запроса.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;7jzb&quot;&gt;SQL&lt;/h2&gt;
  &lt;h3 id=&quot;10ok&quot;&gt;Первичный и внешний ключи:&lt;/h3&gt;
  &lt;p id=&quot;zgNq&quot;&gt;Первичный ключ (PRIMARY KEY) - это уникальный идентификатор для каждой строки в таблице. Он используется для определения единственности данных и обеспечения быстрого доступа к ним. &lt;br /&gt;Код: &lt;code&gt;PRIMARY KEY&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;5pD9&quot;&gt;Внешний ключ (FOREIGN KEY) - это отношение между двумя таблицами, которое устанавливает связь между ними. Внешний ключ используется для ограничения взаимосвязи между таблицами и предотвращения несоответствий данных. Внешний ключ ссылается на первичный ключ другой таблицы.&lt;br /&gt;Код: &lt;code&gt;band_id INTEGER REFERENCES band(band_id)&lt;/code&gt;&lt;/p&gt;
  &lt;h3 id=&quot;aZ9O&quot;&gt;Типы взаимосвязи таблиц SQL&lt;/h3&gt;
  &lt;p id=&quot;7bIR&quot;&gt;&lt;strong&gt;1. Связь один ко многим (one-to-many):&lt;/strong&gt; Это тип взаимосвязи, когда одна запись в одной таблице может относиться к нескольким записям в другой таблице.&lt;/p&gt;
  &lt;p id=&quot;YX3m&quot;&gt;&lt;strong&gt;2. Связь многие ко одному (many-to-one):&lt;/strong&gt; Это тип взаимосвязи, когда несколько записей в одной таблице могут относиться только к одной записи в другой таблице.&lt;/p&gt;
  &lt;p id=&quot;ueeg&quot;&gt;&lt;strong&gt;3. Связь один к одному (one-to-one)&lt;/strong&gt; - это тип взаимосвязи между двумя таблицами в базе данных, когда каждая запись в одной таблице связана с только одной записью в другой таблице. &lt;/p&gt;
  &lt;p id=&quot;sGkC&quot;&gt;&lt;strong&gt;4. Связь многие ко многим (many-to-many)&lt;/strong&gt; - это тип взаимосвязи между двумя таблицами в базе данных, когда каждая запись в одной таблице может быть связана с несколькими записями в другой таблице, и наоборот. &lt;/p&gt;
  &lt;h3 id=&quot;t2ca&quot;&gt;&lt;strong&gt;Inner Join и Outer Join&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;50om&quot;&gt;&lt;strong&gt;INNER JOIN&lt;/strong&gt; - способ соединения таблиц, при котором остаются те строки, где значения ключа совпадают в обеих таблицах.&lt;/p&gt;
  &lt;p id=&quot;SVXT&quot;&gt;&lt;strong&gt;LEFT OUTER JOIN&lt;/strong&gt; - способ соединения таблиц, при котором возвращаются все строки из левой таблицы и соответствующие строки из правой таблицы. Если в правой таблице нет соответствующих строк, тогда возвращает NULL &lt;/p&gt;
  &lt;p id=&quot;47rQ&quot;&gt;&lt;strong&gt;FULL OUTER JOIN&lt;/strong&gt; - способ соединения таблиц, при котором возвращаются строки из обеих таблиц. Если в левой или правой таблице нет соответствующих данных для второй таблицы - тогда подставляется NULL &lt;/p&gt;
  &lt;h3 id=&quot;h0ue&quot;&gt;Основные запросы:&lt;/h3&gt;
  &lt;p id=&quot;R5DI&quot;&gt;CREATE - Создает новую таблицу, представление таблицы или другой объект в БД&lt;/p&gt;
  &lt;p id=&quot;DBDT&quot;&gt;DROP - Удаляет существующую таблицу&lt;/p&gt;
  &lt;p id=&quot;0Bsx&quot;&gt;SELECT - Извлекает записи из одной или нескольких таблиц&lt;/p&gt;
  &lt;p id=&quot;CQLk&quot;&gt;INSERT - Создает записи &lt;/p&gt;
  &lt;p id=&quot;0RQ2&quot;&gt;UPDATE - Модифицирует записи&lt;/p&gt;
  &lt;p id=&quot;I148&quot;&gt;DELETE - Удаляет записи&lt;/p&gt;
  &lt;p id=&quot;5Kh7&quot;&gt;AND - Объединяет условия&lt;/p&gt;
  &lt;p id=&quot;6P17&quot;&gt;BETWEEN - Проверяет вхождение значения в диапазон от минимального до максимального&lt;/p&gt;
  &lt;p id=&quot;WANe&quot;&gt;IN - Выполняет поиск значения в списке значений&lt;/p&gt;
  &lt;p id=&quot;IvKy&quot;&gt;LIKE - Сравнивает значение с похожими&lt;/p&gt;
  &lt;p id=&quot;nOHx&quot;&gt;NOT - Инвертирует (меняет на противоположное) смысл других логических операторов&lt;/p&gt;
  &lt;p id=&quot;ot8H&quot;&gt;OR - Комбинирует условия (одно из условий должно совпадать)&lt;/p&gt;
  &lt;p id=&quot;F4tH&quot;&gt;IS NULL - Определяет, является ли значение нулевым&lt;/p&gt;
  &lt;p id=&quot;FRG6&quot;&gt;UNIQUE - Определяет уникальность строки&lt;/p&gt;
  &lt;h2 id=&quot;D7DO&quot;&gt;KAFKA, СИНХРОННОЕ И АСИНХРОННОЕ ВЗАИМОДЕЙСТВИЕ&lt;/h2&gt;
  &lt;h3 id=&quot;19jn&quot;&gt;Kafka&lt;/h3&gt;
  &lt;p id=&quot;Lv73&quot;&gt;Кафка позволяет различным приложениям отправлять, получать и обрабатывать данные, такие как сообщения, логи и события, в режиме, близком к реальному времени. Это позволяет создавать масштабируемые и отказоустойчивые системы обработки данных.&lt;/p&gt;
  &lt;p id=&quot;wmrC&quot;&gt;Главное отличие Кафки от большинства брокеров в том, что Кафка добавляет сообщения в журнал (в топик), а консьюмер сам забирает из этого журнала данные. Кафку часто используют для сбора и агрегации из большого количества источников. &lt;/p&gt;
  &lt;p id=&quot;klqa&quot;&gt;Плюсы Кафки:&lt;/p&gt;
  &lt;ol id=&quot;oEUE&quot;&gt;
    &lt;li id=&quot;L7rl&quot;&gt;Более высокая производительность.&lt;/li&gt;
    &lt;li id=&quot;3fQq&quot;&gt;Все сообщения после прочтения не удаляются и могут быть прочитаны консьюмерами повторно. Удаление задается вручную.&lt;/li&gt;
    &lt;li id=&quot;s8k7&quot;&gt;Из Кафки нельзя удалить конкретное сообщение (партицию), а только удалить топик целиком.&lt;/li&gt;
    &lt;li id=&quot;W2l1&quot;&gt;При перезапуске консьюмера в брокере сохраняется коммит (снимок состояния), и тем самым происходит фиксация и консьюмер продолжает читать. &lt;/li&gt;
  &lt;/ol&gt;
  &lt;h3 id=&quot;p6i6&quot;&gt;Синхронное взаимодействие:&lt;/h3&gt;
  &lt;ul id=&quot;6PQo&quot;&gt;
    &lt;li id=&quot;JUlE&quot;&gt;&lt;strong&gt;Определение:&lt;/strong&gt; В синхронном взаимодействии одна часть программы ждет завершения другой части программы, прежде чем продолжить свое выполнение.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3 id=&quot;mXjN&quot;&gt;Асинхронное взаимодействие:&lt;/h3&gt;
  &lt;ul id=&quot;1ZPX&quot;&gt;
    &lt;li id=&quot;dGUB&quot;&gt;&lt;strong&gt;Определение:&lt;/strong&gt; В асинхронном взаимодействии части программы могут работать параллельно без ожидания завершения друг друга.&lt;/li&gt;
  &lt;/ul&gt;

</content></entry><entry><id>alexbrin:7aYUT-9OJpG</id><link rel="alternate" type="text/html" href="https://teletype.in/@alexbrin/7aYUT-9OJpG?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=alexbrin"></link><title>Шпаргалка для собеса тестировщика</title><published>2024-03-20T21:16:54.106Z</published><updated>2024-03-21T11:34:13.484Z</updated><summary type="html">Тестирование - процесс, направленный на исследование, испытание программного продукта (ПП) на соответствие ожидаемого результата поведения программного продукта и фактического.</summary><content type="html">
  &lt;nav&gt;
    &lt;ul&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#a1tp&quot;&gt;1. Что такое тестирование программного обеспечения?&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#5w1w&quot;&gt;2. Что такое контроль качества и обеспечение качества?&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#tf5H&quot;&gt;3. Что такое SDLC (Жизненный цикл разработки программного продукта)?&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#nMGO&quot;&gt;4. Что такое STLC Жизненный цикл тестирования программного продукта?&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#rmNK&quot;&gt;5. Что такое тест-кейс?&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#EGbp&quot;&gt;6. Атрибуты тест-кейсов, что в себя включает тест-кейс?&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#e3WA&quot;&gt;7. Что такое тестовый набор?&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#bYXI&quot;&gt;8. Атрибуты тестового набора, что в себя включает тестовый набор?&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#Ofvf&quot;&gt;9. Что такое чек-лист?&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#ILGn&quot;&gt;10. Атрибуты чек-листа, что включает в себя чек-лист?&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#DaGi&quot;&gt;11. Что такое план тестирования?&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#kcAY&quot;&gt;12. Для чего проводится тестирование ПО?&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#Bie7&quot;&gt;13. Принципы тестирования&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#2W8U&quot;&gt;14. В чем разница между верификацией и валидацией?&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#XrmS&quot;&gt;15. Что такое требования?&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#TYkL&quot;&gt;16. Что такое баг и баг-репорт?&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#0QJx&quot;&gt;17. Атрибуты баг-репорта&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#g9IT&quot;&gt;18. Приоритет устранения и серьезность бага&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#bzHz&quot;&gt;Основные виды тестирования ПО&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#zXou&quot;&gt;19. Классификация по запуску кода на исполнение:&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#MChp&quot;&gt;20. Классификация по доступу к коду и архитектуре:&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#VZBu&quot;&gt;21. Классификация по уровню детализации приложения (Пирамида тестирования):&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#IP8i&quot;&gt;22. Классификация по принципам работы с приложением&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#JUF6&quot;&gt;23. Классификация по целям тестирования&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#fGFp&quot;&gt;24. Функциональное тестирование&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#hbBn&quot;&gt;25. Нефункциональное тестирование&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#8MiB&quot;&gt;25.1. Классификация по цели тестирования&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#1bKC&quot;&gt;26. Что такое Тест-дизайн?&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#fCbG&quot;&gt;27. Техники тест-дизайна&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/nav&gt;
  &lt;h3 id=&quot;a1tp&quot;&gt;1. Что такое тестирование программного обеспечения?&lt;/h3&gt;
  &lt;p id=&quot;yNgD&quot;&gt;&lt;strong&gt;Тестирование &lt;/strong&gt;- процесс, направленный на исследование, испытание программного продукта (ПП) на соответствие ожидаемого результата поведения программного продукта и фактического.&lt;/p&gt;
  &lt;h3 id=&quot;5w1w&quot;&gt;2. Что такое контроль качества и обеспечение качества?&lt;/h3&gt;
  &lt;p id=&quot;ndZU&quot;&gt;&lt;strong&gt;Контроль качества&lt;/strong&gt; &lt;strong&gt;QC (Quality Control)&lt;/strong&gt; — это тщательное тестирование программы на наличие дефектов, а также проверка того, что программное обеспечение соответствует всем требованиям, выдвинутым заказчиком.&lt;/p&gt;
  &lt;p id=&quot;wTVi&quot;&gt;&lt;strong&gt;Обеспечение качества QA (Quality assurance)&lt;/strong&gt; – это подход, который помогает убедиться, что методы, технологии и процессы, используемые для создания качественных результатов, применяются правильно.&lt;/p&gt;
  &lt;h3 id=&quot;tf5H&quot;&gt;3. Что такое SDLC (Жизненный цикл разработки программного продукта)?&lt;/h3&gt;
  &lt;p id=&quot;VGm9&quot;&gt;&lt;strong&gt;Жизненный цикл разработки программного продукта &lt;/strong&gt;- процесс, направленный на создание, поддержание работоспособности, качества и надежности ПП.&lt;/p&gt;
  &lt;p id=&quot;Ms65&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://teletype.in/@alexbrin/17vvQqv6Crz&quot; target=&quot;_blank&quot;&gt;Этапы SDLC:&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
  &lt;ol id=&quot;x4Ie&quot;&gt;
    &lt;li id=&quot;Pugv&quot;&gt;Требования&lt;/li&gt;
    &lt;li id=&quot;7fkI&quot;&gt;Проектирование&lt;/li&gt;
    &lt;li id=&quot;B8hN&quot;&gt;Разработка&lt;/li&gt;
    &lt;li id=&quot;5E29&quot;&gt;Тестирование&lt;/li&gt;
    &lt;li id=&quot;JbLe&quot;&gt;Релиз&lt;/li&gt;
    &lt;li id=&quot;3RHw&quot;&gt;Поддержка&lt;/li&gt;
  &lt;/ol&gt;
  &lt;h3 id=&quot;nMGO&quot;&gt;4. Что такое STLC Жизненный цикл тестирования программного продукта?&lt;/h3&gt;
  &lt;p id=&quot;kz6d&quot;&gt;&lt;strong&gt;Жизненный цикл тестирования программного продукта&lt;/strong&gt; (STLC – Software &lt;em&gt;testing lifecycle) - &lt;/em&gt;процесс, направленный на тестирование программного продукта.&lt;/p&gt;
  &lt;p id=&quot;Uc3Y&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://teletype.in/@alexbrin/17vvQqv6Crz#gC6n&quot; target=&quot;_blank&quot;&gt;Этапы STLC&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
  &lt;ol id=&quot;iSKC&quot;&gt;
    &lt;li id=&quot;K3P2&quot;&gt;Анализ требований&lt;/li&gt;
    &lt;li id=&quot;is0j&quot;&gt;Тестовое планирование&lt;/li&gt;
    &lt;li id=&quot;wY9U&quot;&gt;Написание тестовых сценариев&lt;/li&gt;
    &lt;li id=&quot;miwG&quot;&gt;Подготовка тестовой среды&lt;/li&gt;
    &lt;li id=&quot;EHPf&quot;&gt;Выполнение тестов&lt;/li&gt;
    &lt;li id=&quot;d1pC&quot;&gt;Завершающая фаза&lt;/li&gt;
  &lt;/ol&gt;
  &lt;h3 id=&quot;rmNK&quot;&gt;5. Что такое тест-кейс?&lt;/h3&gt;
  &lt;p id=&quot;TYYR&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://teletype.in/@alexbrin/5DYHUp5ZBEu#He3t&quot; target=&quot;_blank&quot;&gt;Тест-кейс&lt;/a&gt; – &lt;/strong&gt;пошаговый сценарий, описывающий как проводится тестирование, и включающий более детализированные проверки (шаги).&lt;/p&gt;
  &lt;p id=&quot;vRbY&quot;&gt;То есть если в чек-листах мы указывали название самих проверок, не детализировали их, то в тест-кейсах необходимо расписать каждый шаг, то есть переход по ссылкам, заполнение полей, нажатие кнопок и т.д.&lt;/p&gt;
  &lt;h3 id=&quot;EGbp&quot;&gt;6. Атрибуты тест-кейсов, что в себя включает тест-кейс?&lt;/h3&gt;
  &lt;ol id=&quot;2rK2&quot;&gt;
    &lt;li id=&quot;aPtN&quot;&gt;&lt;strong&gt;Название проекта &lt;/strong&gt;– здесь указывается название проекта, для которого мы пишем сценарии проверки&lt;/li&gt;
    &lt;li id=&quot;sSt4&quot;&gt;&lt;strong&gt;ID&lt;/strong&gt; – это уникальный Идентификатор, уникальный номер тест-кейса, в нашей системе, на одном проекте не должно быть 2-х одинаковых тест-кейсов, это необходимо для того чтоб мы могли всегда корректно ссылаться на наш документ, при общении с другими коллегами, указанием в других системах и т.д.&lt;/li&gt;
    &lt;li id=&quot;JO6a&quot;&gt;&lt;strong&gt;Требования&lt;/strong&gt; – ссылка на документ, на основании которого составлен данный документ&lt;/li&gt;
    &lt;li id=&quot;QrZj&quot;&gt;&lt;strong&gt;Модуль &lt;/strong&gt;– название модуля к которому относится данный функционал&lt;/li&gt;
    &lt;li id=&quot;qoxk&quot;&gt;&lt;strong&gt;Название &lt;/strong&gt;- здесь идет название нашей проверки, отображающее то, что именно мы будет проверять в данном тесте&lt;/li&gt;
    &lt;li id=&quot;i6Lq&quot;&gt;&lt;strong&gt;Приоритет -&lt;/strong&gt; показывает, на сколько важно проведение данного теста&lt;br /&gt;P1 Высокий (High)&lt;br /&gt;P2 Средний (Medium)&lt;br /&gt;P3 Низкий (Low)&lt;br /&gt;&lt;strong&gt;Тестировщик самостоятельно выставляет данный приоритет, основываясь на своем опыте.&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;bott&quot;&gt;&lt;strong&gt;Среда тестирования&lt;/strong&gt; – здесь мы указываем окружение, на котором мы будем проводить тестирование – то есть наша платформа, версия браузера (если это веб-продукт) и т.д.&lt;/li&gt;
    &lt;li id=&quot;9Yyh&quot;&gt;&lt;strong&gt;Шаги-теста&lt;/strong&gt; – самый главный атрибут нашего документа, в котором мы подробно расписываем все шаги прохождения нашего теста&lt;/li&gt;
    &lt;li id=&quot;UkCN&quot;&gt;&lt;strong&gt;Ожидаемый результат&lt;/strong&gt; – в данном атрибуте мы указываем, а какой именно результат мы ожидаем получить, после того как мы выполним данный шаг, очень важно писать результат по каждому шагу, а не один для всех шагов. Это позволит любому члену команды повторить данный тест.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;h3 id=&quot;e3WA&quot;&gt;7. Что такое тестовый набор?&lt;/h3&gt;
  &lt;p id=&quot;VeCr&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://teletype.in/@alexbrin/5DYHUp5ZBEu#He3t&quot; target=&quot;_blank&quot;&gt;Тестовый набор (Testsuite)&lt;/a&gt; – &lt;/strong&gt;набор тест-кейсов, объединенный по одному модулю или цели проверки.&lt;/p&gt;
  &lt;h3 id=&quot;bYXI&quot;&gt;8. Атрибуты тестового набора, что в себя включает тестовый набор?&lt;/h3&gt;
  &lt;p id=&quot;2PMy&quot;&gt;Они дублируют с атрибутами тест-кейсов.&lt;/p&gt;
  &lt;ol id=&quot;U8tu&quot;&gt;
    &lt;li id=&quot;0MXG&quot;&gt;&lt;strong&gt;ID тест-кейса&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;IBrg&quot;&gt;&lt;strong&gt;Название проекта&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;z00L&quot;&gt;&lt;strong&gt;Модуль&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;8auL&quot;&gt;&lt;strong&gt;Описание теста&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;6Yuc&quot;&gt;&lt;strong&gt;Ожидаемый результат&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;67US&quot;&gt;&lt;strong&gt;Приоритет -&lt;/strong&gt; показывает, на сколько важно проведение данного теста:&lt;br /&gt;P1 Высокий (High)&lt;br /&gt;P2 Средний (Medium)&lt;br /&gt;P3 Низкий (Low)&lt;/li&gt;
    &lt;li id=&quot;wUqD&quot;&gt;&lt;strong&gt;Дата проведения теста&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;vsGV&quot;&gt;&lt;strong&gt;Исполнитель&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;vwV5&quot;&gt;&lt;strong&gt;Среда тестирования&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;6CtN&quot;&gt;&lt;strong&gt;Статус&lt;/strong&gt;&lt;/li&gt;
  &lt;/ol&gt;
  &lt;h3 id=&quot;Ofvf&quot;&gt;9. Что такое чек-лист?&lt;/h3&gt;
  &lt;p id=&quot;H0ah&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://teletype.in/@alexbrin/5DYHUp5ZBEu#He3t&quot; target=&quot;_blank&quot;&gt;Чек-лист&lt;/a&gt;&lt;/strong&gt;- список проверок, в котором мы указываем, что мы будем тестировать, результат и статус проверок.&lt;/p&gt;
  &lt;h3 id=&quot;ILGn&quot;&gt;10. Атрибуты чек-листа, что включает в себя чек-лист?&lt;/h3&gt;
  &lt;ol id=&quot;Yxug&quot;&gt;
    &lt;li id=&quot;PgjA&quot;&gt;&lt;strong&gt;Проект&lt;/strong&gt; – здесь указывается название проекта, для которого мы пишем сценарии проверки;&lt;/li&gt;
    &lt;li id=&quot;sCb8&quot;&gt;&lt;strong&gt;Цель проверки&lt;/strong&gt; - здесь идет название модуля который будет проверять в данном документе;&lt;/li&gt;
    &lt;li id=&quot;ztop&quot;&gt;&lt;strong&gt;Идентификатор&lt;/strong&gt; -это уникальный Идентификатор документа;&lt;/li&gt;
    &lt;li id=&quot;XGn0&quot;&gt;&lt;strong&gt;Требования&lt;/strong&gt; - ссылка на документ, на основании которого составлен данный документ;&lt;/li&gt;
    &lt;li id=&quot;u5Gv&quot;&gt;&lt;strong&gt;Дата проведения;&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;2JET&quot;&gt;&lt;strong&gt;Исполнитель;&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;XBya&quot;&gt;&lt;strong&gt;Среда тестирования &lt;/strong&gt;– здесь мы указываем окружение, на котором мы будем проводить тестирование – то есть наша платформа, версия браузера (если это веб-продукт) и т.д.&lt;/li&gt;
    &lt;li id=&quot;MxEJ&quot;&gt;&lt;strong&gt;Тип тестов;&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;zpo7&quot;&gt;&lt;strong&gt;Название проверок&lt;/strong&gt; - здесь идет название нашей проверки, отображающее то, что именно мы будет проверять в данном тесте;&lt;/li&gt;
    &lt;li id=&quot;d0jK&quot;&gt;&lt;strong&gt;Результат проверки&lt;/strong&gt;&lt;/li&gt;
  &lt;/ol&gt;
  &lt;h3 id=&quot;DaGi&quot;&gt;11. Что такое план тестирования?&lt;/h3&gt;
  &lt;p id=&quot;yUpJ&quot;&gt;&lt;strong&gt;План тестирования&lt;/strong&gt; – это официальный документ, определяющий объем тестирования, используемый метод, необходимые ресурсы и расчетное время для завершения процесса. Он составляется на основе спецификаций (требований к программному обеспечению).&lt;/p&gt;
  &lt;h3 id=&quot;kcAY&quot;&gt;12. &lt;strong&gt;Для чего проводится тестирование ПО?&lt;/strong&gt;&lt;/h3&gt;
  &lt;ol id=&quot;SOdW&quot;&gt;
    &lt;li id=&quot;kJE6&quot;&gt;Для проверки соответствия требованиям.&lt;/li&gt;
    &lt;li id=&quot;BsU9&quot;&gt;Для обнаружения проблем на более ранних этапах разработки и предотвращения повышения стоимости продукта.&lt;/li&gt;
    &lt;li id=&quot;4Qbk&quot;&gt;Обнаружения вариантов использования, которые не были предусмотрены при разработке. А также взгляд на продукт со стороны пользователя.&lt;/li&gt;
    &lt;li id=&quot;CqYp&quot;&gt;Повышения лояльности к компании и продукту, т.к. любой обнаруженный дефект негативно влияет на доверие пользователей.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;h3 id=&quot;Bie7&quot;&gt;13. Принципы тестирования&lt;/h3&gt;
  &lt;ul id=&quot;fUtV&quot;&gt;
    &lt;li id=&quot;YRu3&quot;&gt;&lt;strong&gt;Принцип 1 — Тестирование демонстрирует наличие дефектов&lt;/strong&gt;&lt;br /&gt;Тестирование только снижает вероятность наличия дефектов, которые находятся в программном обеспечении, но не гарантирует их отсутствия.&lt;/li&gt;
    &lt;li id=&quot;xVMv&quot;&gt;&lt;strong&gt;Принцип 2 — Исчерпывающее тестирование невозможно&lt;/strong&gt;&lt;br /&gt;Полное тестирование с использованием всех входных комбинаций данных, результатов и предусловий физически невыполнимо (исключение — тривиальные случаи).&lt;/li&gt;
    &lt;li id=&quot;G8eE&quot;&gt;&lt;strong&gt;Принцип 3 — Раннее тестирование&lt;/strong&gt;&lt;br /&gt;Следует начинать тестирование на ранних стадиях жизненного цикла разработки ПО, чтобы найти дефекты как можно раньше.&lt;/li&gt;
    &lt;li id=&quot;nAUZ&quot;&gt;&lt;strong&gt;Принцип 4 — Скопление дефектов&lt;/strong&gt;&lt;br /&gt;Большая часть дефектов находится в ограниченном количестве модулей.&lt;/li&gt;
    &lt;li id=&quot;ADmz&quot;&gt;&lt;strong&gt;Принцип 5 — Парадокс пестицида&lt;/strong&gt;&lt;br /&gt;Если повторять те же тестовые сценарии снова и снова, в какой-то момент этот набор тестов перестанет выявлять новые дефекты.&lt;/li&gt;
    &lt;li id=&quot;JAsx&quot;&gt;&lt;strong&gt;Принцип 6 — Тестирование зависит от контекста&lt;br /&gt;&lt;/strong&gt;Тестирование проводится по-разному в зависимости от контекста. Например, программное обеспечение, в котором критически важна безопасность, тестируется иначе, чем новостной портал.&lt;/li&gt;
    &lt;li id=&quot;hrqQ&quot;&gt;&lt;strong&gt;Принцип 7 — Заблуждение об отсутствии ошибок&lt;/strong&gt;&lt;br /&gt;Отсутствие найденных дефектов при тестировании не всегда означает готовность продукта к релизу. Система должна быть удобна пользователю в использовании и удовлетворять его ожиданиям и потребностям.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3 id=&quot;2W8U&quot;&gt;14. В чем разница между верификацией и валидацией?&lt;/h3&gt;
  &lt;p id=&quot;OuvC&quot;&gt;&lt;strong&gt;Верификация&lt;/strong&gt; оценивает программное обеспечение на этапе разработки, выясняя, соответствует ли продукт ожидаемым требованиям. &lt;br /&gt;&lt;strong&gt;Валидация&lt;/strong&gt; оценивает готовое ПО на соответствие требованиям заказчика и конечного пользователя.&lt;/p&gt;
  &lt;h3 id=&quot;XrmS&quot;&gt;&lt;strong&gt;15. Что такое требования?&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;n0Zb&quot;&gt;&lt;strong&gt;Требования&lt;/strong&gt; — это спецификация (описание) того, что должно быть реализовано.&lt;br /&gt;Требования описывают то, что необходимо реализовать, без детализации технической стороны решения.&lt;/p&gt;
  &lt;h3 id=&quot;TYkL&quot;&gt;16. Что такое баг и баг-репорт?&lt;/h3&gt;
  &lt;p id=&quot;Dcyn&quot;&gt;&lt;strong&gt;Баг&lt;/strong&gt; – это дефект – это отклонение ожидаемого поведения работы программного продукта от фактического.&lt;/p&gt;
  &lt;p id=&quot;YUQn&quot;&gt;&lt;strong&gt;Баг-репорт&lt;/strong&gt; – это отчет об ошибках.&lt;/p&gt;
  &lt;p id=&quot;mGt9&quot;&gt;&lt;strong&gt;Отчёт о дефекте (bug report)&lt;/strong&gt; — документ, который содержит отчет о любом недостатке в компоненте или системе, который потенциально может привести компонент или систему к невозможности выполнить требуемую функцию.&lt;/p&gt;
  &lt;h3 id=&quot;0QJx&quot;&gt;17. Атрибуты баг-репорта&lt;/h3&gt;
  &lt;ol id=&quot;PYOH&quot;&gt;
    &lt;li id=&quot;x8RO&quot;&gt;&lt;strong&gt;Проект&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;dxAP&quot;&gt;&lt;strong&gt;Название документа&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;KI8f&quot;&gt;&lt;strong&gt;Ссылка на требования&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;qzo6&quot;&gt;&lt;strong&gt;Цель проверки&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;J09U&quot;&gt;&lt;strong&gt;Дата проведения&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;pSMw&quot;&gt;&lt;strong&gt;Исполнитель&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;a2vD&quot;&gt;&lt;strong&gt;Среда тестирования&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;FoYP&quot;&gt;&lt;strong&gt;Шаги теста&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;qwYC&quot;&gt;&lt;strong&gt;Ожидаемый результат&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;8o1m&quot;&gt;&lt;strong&gt;Фактический результат&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;42rQ&quot;&gt;&lt;strong&gt;Статус бага&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;Tegi&quot;&gt;&lt;strong&gt;Серьезность бага&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;MEz2&quot;&gt;&lt;strong&gt;Приоритет устранения бага&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;ngkB&quot;&gt;&lt;strong&gt;Прикрепленный файл&lt;/strong&gt;&lt;/li&gt;
  &lt;/ol&gt;
  &lt;h3 id=&quot;g9IT&quot;&gt;18. Приоритет устранения и серьезность бага&lt;/h3&gt;
  &lt;p id=&quot;tVWd&quot;&gt;&lt;strong&gt;Серьезность (severity) – &lt;/strong&gt;показывает степень ущерба, который наносится проекту существованием дефекта. Severity выставляется тестировщиком.&lt;/p&gt;
  &lt;p id=&quot;IFZK&quot;&gt;&lt;strong&gt;У серьезности могут быть следующие статусы:&lt;/strong&gt;&lt;/p&gt;
  &lt;ul id=&quot;UCqM&quot;&gt;
    &lt;li id=&quot;Tlkp&quot;&gt;&lt;strong&gt;Blocker – &lt;/strong&gt;блокировка, работа ПО невозможна&lt;/li&gt;
    &lt;li id=&quot;Mye6&quot;&gt;&lt;strong&gt;Critical –&lt;/strong&gt;критический, приводит наш функционал в нерабочее состояние, отклонение от БЛ ПО, не реализация функций, потеря пользовательских данных&lt;/li&gt;
    &lt;li id=&quot;fd9B&quot;&gt;&lt;strong&gt;Major-&lt;/strong&gt;серьезные ошибки, которые свидетельствуют об отклонении работы от БЛ или нарушающие работу программы, но не имеют критическое воздействие на ПО&lt;/li&gt;
    &lt;li id=&quot;R0a2&quot;&gt;&lt;strong&gt;Minor – &lt;/strong&gt;незначительный дефект не нарушающий функционал нашего приложения, который является несоответствием ожидаемого результата (ошибка дизайна, пример)&lt;/li&gt;
    &lt;li id=&quot;zblv&quot;&gt;&lt;strong&gt;Trivial&lt;/strong&gt; –не имеет влияния на функционал и работу нашей программы, но может быть обнаружен визуально.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;WBWm&quot;&gt;&lt;strong&gt;Приоритет -&lt;/strong&gt; показывает, как быстро дефект должен быть устранён. Priority выставляется менеджером, team-lead или заказчиком.&lt;/p&gt;
  &lt;ul id=&quot;OtUs&quot;&gt;
    &lt;li id=&quot;0Xb4&quot;&gt;&lt;strong&gt;P1 Высокий (High&lt;/strong&gt;)&lt;br /&gt;Критическая для проекта ошибка. Должна быть исправлена как можно быстрее.&lt;/li&gt;
    &lt;li id=&quot;x2fj&quot;&gt;&lt;strong&gt;P2 Средний (Medium)&lt;/strong&gt;&lt;br /&gt;Не критичная для проекта ошибка, однако требует обязательного решения.&lt;/li&gt;
    &lt;li id=&quot;mokX&quot;&gt;&lt;strong&gt;P3 Низкий (Low)&lt;/strong&gt;&lt;br /&gt;Наличие данной ошибки не является критичным и не требует срочного решения. Может быть исправлена, когда у команды появится время на ее устранение.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2 id=&quot;bzHz&quot;&gt;&lt;strong&gt;Основные виды тестирования ПО&lt;/strong&gt;&lt;/h2&gt;
  &lt;h3 id=&quot;zXou&quot;&gt;&lt;strong&gt;19. Классификация по запуску кода на исполнение:&lt;/strong&gt;&lt;/h3&gt;
  &lt;ul id=&quot;airX&quot;&gt;
    &lt;li id=&quot;3lut&quot;&gt;&lt;strong&gt;Статическое тестирование&lt;/strong&gt; — тестирование без запуска кода на исполнение. Это процесс обнаружения и устранения ошибок и дефектов в документации: программного кода компонент, требований, системных спецификаций, функциональных спецификаций, документов проектирования и архитектуры программных систем и их компонентов.&lt;/li&gt;
    &lt;li id=&quot;FU14&quot;&gt;&lt;strong&gt;Динамическое тестирование&lt;/strong&gt; — тестирование проводится на работающей системе, не может быть осуществлено без запуска программного кода приложения.&lt;br /&gt;Запускаться на исполнение может как код всего приложения целиком (системное тестирование), так и код нескольких взаимосвязанных частей (интеграционное тестирование), отдельных частей и даже отдельные участки кода.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3 id=&quot;MChp&quot;&gt;20. &lt;strong&gt;Классификация по доступу к коду и архитектуре:&lt;/strong&gt;&lt;/h3&gt;
  &lt;ul id=&quot;zaNz&quot;&gt;
    &lt;li id=&quot;TPkW&quot;&gt;&lt;strong&gt;Тестирование белого ящика&lt;/strong&gt; — метод тестирования ПО, который предполагает полный доступ к коду проекта.&lt;/li&gt;
    &lt;li id=&quot;ODW4&quot;&gt;&lt;strong&gt;Тестирование серого ящика&lt;/strong&gt; — метод тестирования ПО, который предполагает частичный доступ к коду проекта (комбинация White Box и Black Box методов).&lt;/li&gt;
    &lt;li id=&quot;E69B&quot;&gt;&lt;strong&gt;Тестирование чёрного ящика&lt;/strong&gt; — метод тестирования ПО, который не предполагает доступа (полного или частичного) к системе. Основывается на работе исключительно с внешним интерфейсом тестируемой системы.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3 id=&quot;VZBu&quot;&gt;&lt;strong&gt;21. Классификация по уровню детализации приложения (Пирамида тестирования):&lt;/strong&gt;&lt;/h3&gt;
  &lt;ol id=&quot;ht7D&quot;&gt;
    &lt;li id=&quot;DQWg&quot;&gt;&lt;strong&gt;Модульное тестирование или юнит-тестирование (англ. unit testing)&lt;/strong&gt; — проводится для тестирования какого-либо одного логически выделенного и изолированного элемента (модуля) системы в коде. Проводится самими разработчиками, так как предполагает полный доступ к коду.&lt;br /&gt;&lt;strong&gt;Модульное тестирование производят сами разработчики, не тестировщики.&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;OmhB&quot;&gt;&lt;strong&gt;Интеграционное тестирование (Integration testing)&lt;/strong&gt; — тестирование, направленное на проверку корректности взаимодействия нескольких модулей, объединенных в единое целое.&lt;br /&gt;&lt;strong&gt;Взаимодействие компонентов, модулей и иных систем между собой. Тестирование части системы, состоящей из 2-х и более модулей.&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;rKlg&quot;&gt;&lt;strong&gt;Системное тестирование (System testing)&lt;/strong&gt; — тестирование взаимодействия между всеми компонентами системы или разных систем между собой или тестирование интерфейсов, между которыми взаимодействует система. Полная проверка приложения, всех модулей, можно ли пройти весь бизнес путь.&lt;/li&gt;
    &lt;li id=&quot;cJew&quot;&gt;&lt;strong&gt;Приёмочное тестирование&lt;/strong&gt; &lt;strong&gt;(acceptance test) — &lt;/strong&gt;тестирование на сдаче приемки всего программного продукта или его части Заказчику&lt;br /&gt;А) &lt;strong&gt;Пользовательское приемное тестирование (User Acceptance Testing)&lt;/strong&gt; – перед релизом собирается группа конечных пользователей, тестируется основной функционал, при наличии дефектов-устраняются.&lt;br /&gt;Б)&lt;strong&gt; Эксплуатационное (Operational acceptance testing) &lt;/strong&gt;– производится пользователем или администратором в среде, которая имитирует реальные условия эксплуатации ПО, производится тестирование резервного копирования, аварийное восстановление системы, безопасность ПО.&lt;br /&gt;В) &lt;strong&gt;На соответствие контракту&lt;/strong&gt; – на соответствие гостов, нормативных актов и т.д&lt;/li&gt;
  &lt;/ol&gt;
  &lt;h3 id=&quot;IP8i&quot;&gt;&lt;strong&gt;22. Классификация по принципам работы с приложением&lt;/strong&gt;&lt;/h3&gt;
  &lt;ul id=&quot;4fht&quot;&gt;
    &lt;li id=&quot;sRon&quot;&gt;&lt;strong&gt;Позитивное тестирование&lt;/strong&gt; — тестирование, при котором используются только корректные данные.&lt;/li&gt;
    &lt;li id=&quot;tRrK&quot;&gt;&lt;strong&gt;Негативное тестирование&lt;/strong&gt; — тестирование приложения, при котором используются некорректные данные и выполняются некорректные операции.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3 id=&quot;JUF6&quot;&gt;23. Классификация по целям тестирования&lt;/h3&gt;
  &lt;ol id=&quot;SDrt&quot;&gt;
    &lt;li id=&quot;irsE&quot;&gt;&lt;strong&gt;Функциональное тестирование&lt;/strong&gt; – тестирование которое направленно на проверку соответствия функциональных требований ПО к его реальным характеристикам. Подтверждение того, что наш продукт обладает всем функционалом, который требует заказчик.&lt;br /&gt;&lt;strong&gt;Функциональное тестирование отвечает на вопрос – что должен делать наш продукт?&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;HK25&quot;&gt;&lt;strong&gt;Нефункциональное тестирование&lt;/strong&gt; – направленно на проверку соответствия свойств ПО с его нефункциональными требованиями. Тестирование свойств, которые не относятся к функциональности системы – надежность, производительность и т.д.&lt;br /&gt;&lt;strong&gt;Нефункциональное тестирование отвечает на вопрос – как это должен делать наш продукт?&lt;/strong&gt;&lt;/li&gt;
  &lt;/ol&gt;
  &lt;h3 id=&quot;fGFp&quot;&gt;&lt;strong&gt;24. Функциональное тестирование&lt;/strong&gt;&lt;/h3&gt;
  &lt;ol id=&quot;qkDU&quot;&gt;
    &lt;li id=&quot;Ugoy&quot;&gt;&lt;strong&gt;Smoke test&lt;/strong&gt; — тестирование, которое проводится после появления нового билда . Направлено на проверку готовности разработанного продукта к проведению расширенного тестирования и определения общего качества продукта.&lt;br /&gt;&lt;strong&gt;Проверяет заявленную бизнес-логику ПО.&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;6Ofd&quot;&gt;&lt;strong&gt;Тестирование критического пути&lt;/strong&gt; (critical path) — направлено для проверки функциональности, используемой обычными пользователями во время их повседневной деятельности.&lt;br /&gt;&lt;strong&gt;Основной тип тестовых испытаний, во время которого значимые элементы и функции приложения проверяются на предмет правильности работы при их стандартном использовании.&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;IfOq&quot;&gt;&lt;strong&gt;Расширенное тестирование&lt;/strong&gt; (extended) — направлено на исследование всей заявленной в требованиях функциональности.&lt;br /&gt;&lt;strong&gt;Проверка нестандартного использования продукта (например, вводить не корректные логин и пароль в окне авторизации, работать на многих вкладках одновременно, подгрузка файлов недопустимых размеров или форматов. Максимально загружать нашу систему, проводить множество негативных тестов.&lt;/strong&gt;&lt;/li&gt;
  &lt;/ol&gt;
  &lt;h3 id=&quot;hbBn&quot;&gt;&lt;strong&gt;25. Нефункциональное тестирование&lt;/strong&gt;&lt;/h3&gt;
  &lt;ol id=&quot;yej0&quot;&gt;
    &lt;li id=&quot;BPBb&quot;&gt;&lt;strong&gt;Тестирование доступности&lt;/strong&gt; - доступно ли людям с ограниченными возможностями.&lt;br /&gt;&lt;em&gt;Пример: Может ли человек, получив голосовое, прослушать его из верхнего динамика.&lt;/em&gt;&lt;/li&gt;
    &lt;li id=&quot;x5S0&quot;&gt;&lt;strong&gt;Тестирование локализации и интернетизации&lt;/strong&gt; - тестирование с целью проверки адаптации ПО к любой культуре или особенностям языка другой страны.&lt;br /&gt;&lt;em&gt;Пример: Можно ли писать сообщения иероглифами (поддерживает ли кодировку)(локализация) или есть ли функция в мессенджере для оповещения о молитвенном времени (интернационализация).&lt;/em&gt;&lt;/li&gt;
    &lt;li id=&quot;mGEe&quot;&gt;&lt;strong&gt;Тестирование безопасности&lt;/strong&gt; - тестирование направленное на проверку безопасности конфиденциальных данных и защиту от хакерских атак, вирусов и тд.&lt;br /&gt;&lt;em&gt;Пример: Отправить файл, зараженный вирусом и проверить, пропустит ли его мессенджер. Или встроить в картинку инъекцию.&lt;/em&gt;&lt;/li&gt;
    &lt;li id=&quot;bC1I&quot;&gt;&lt;strong&gt;Проверка удобства&lt;/strong&gt; - тестирование направленное на удобство пользования и дизайна.&lt;br /&gt;&lt;em&gt;Пример: Проверить, удобно ли будет пользоваться одной рукой, не режет ли глаз цвета, не маленькая ли кнопка отправить и тд.&lt;/em&gt;&lt;/li&gt;
    &lt;li id=&quot;6hYL&quot;&gt;&lt;strong&gt;Нагрузочное тестирование&lt;/strong&gt; - проводимое тестирование использования в пределах нормы.&lt;br /&gt;&lt;em&gt;Пример: Сервер мессенджера рассчитан на 10 человек, и им пользуются 10 человек, отправляя сообщения и допустимые файлы допустимых размеров.&lt;/em&gt;&lt;/li&gt;
    &lt;li id=&quot;uEev&quot;&gt;&lt;strong&gt;Стресс-тестирование&lt;/strong&gt; - нагрузка, превышающая норму в несколько раз.&lt;br /&gt;&lt;em&gt;Пример: Сервер мессенджера рассчитан на 10 человек, а им одновременно пользуются 30 человек, активно отправляя сообщения, фото и файлы друг другу.&lt;/em&gt;&lt;/li&gt;
    &lt;li id=&quot;CAdC&quot;&gt;&lt;strong&gt;Тестирование стабильности&lt;/strong&gt; - тестирование, направленное на продолжительное испытание в пределах нормы.&lt;br /&gt;&lt;em&gt;Пример: Сервер мессенджера рассчитан на 10 человек, им пользуются 10 человек в рамках стандартного использования в течении месяца (переписываются, отправляют картинки и тд).&lt;/em&gt;&lt;/li&gt;
    &lt;li id=&quot;HRG1&quot;&gt;&lt;strong&gt;Инсталляционное тестирование&lt;/strong&gt; - тестирование, направленное на проверку установки, обновления и удаления приложения.&lt;br /&gt;&lt;em&gt;Пример: Скачать приложение, установить его, удалить, установить еще раз и после обновить.&lt;/em&gt;&lt;/li&gt;
  &lt;/ol&gt;
  &lt;h3 id=&quot;8MiB&quot;&gt;25.1. Классификация по цели тестирования&lt;/h3&gt;
  &lt;ol id=&quot;V2z7&quot;&gt;
    &lt;li id=&quot;35bC&quot;&gt;&lt;strong&gt;Тестирование новой функциональности (new feature test) – &lt;/strong&gt;производится, как только была разработана новая функциональность.&lt;br /&gt;То есть, как только разработчик выполнил свою часть работы, по созданию новой функциональности, он передает ее на тестирование.&lt;/li&gt;
    &lt;li id=&quot;8Lwo&quot;&gt;&lt;strong&gt;Re-test – &lt;/strong&gt;проверка правильности исправления дефекта. Повторное тестирование функционала, в котором был найден дефект, то есть баг.&lt;/li&gt;
    &lt;li id=&quot;Z3qx&quot;&gt;&lt;strong&gt;Регрессионное тестирование –&lt;/strong&gt; повторная проверка ранее разработанного функционала, после появления нового билда, то есть новой версии нашего программного продукта, для того, чтоб убедиться, что новый функционал билда никак ему не навредил.&lt;br /&gt;&lt;strong&gt;Регрессионное тестирование проводится:&lt;br /&gt;&lt;/strong&gt;- после появления нового билда (новой версии нашего продукта)&lt;br /&gt;- тестирование того функционала в котором часто обнаруживаются дефекты&lt;br /&gt;- плановое тестирование&lt;br /&gt;- того функционала, который часто меняется в ходе разработки&lt;/li&gt;
  &lt;/ol&gt;
  &lt;h3 id=&quot;1bKC&quot;&gt;26. Что такое Тест-дизайн?&lt;/h3&gt;
  &lt;p id=&quot;p8O8&quot;&gt;&lt;strong&gt;Тест-дизайн&lt;/strong&gt; — это этап тестирования ПО, на котором проектируются и создаются тестовые случаи (тест-кейсы).&lt;/p&gt;
  &lt;h3 id=&quot;fCbG&quot;&gt;&lt;strong&gt;27. Техники тест-дизайна&lt;/strong&gt;&lt;/h3&gt;
  &lt;ol id=&quot;k6FF&quot;&gt;
    &lt;li id=&quot;GnNy&quot;&gt;&lt;strong&gt;Тестирование на основе классов эквивалентности (equivalence partitioning)&lt;/strong&gt; — это техника, при которой мы разделяем диапазон возможных вводимых значений на группы эквивалентных по своему влиянию на систему значений.&lt;/li&gt;
    &lt;li id=&quot;Dddi&quot;&gt;&lt;strong&gt;Техника анализа граничных значений (boundary value testing)&lt;/strong&gt; — это техника проверки поведения продукта на граничных значениях входных данных.&lt;/li&gt;
    &lt;li id=&quot;5N0s&quot;&gt;&lt;strong&gt;Попарное тестирование (pairwise testing)&lt;/strong&gt; — это техника формирования наборов тестовых данных из полного набора входных данных в системе, которая позволяет существенно сократить количество тест-кейсов.&lt;/li&gt;
    &lt;li id=&quot;l2rg&quot;&gt;&lt;strong&gt;Тестирование на основе состояний и переходов (State-Transition Testing)&lt;/strong&gt; — применяется для фиксирования требований и описания дизайна приложения.&lt;/li&gt;
    &lt;li id=&quot;B5QJ&quot;&gt;&lt;strong&gt;Таблицы принятия решений (Decision Table Testing)&lt;/strong&gt; — техника тестирования, основанная на методе чёрного ящика, которая применяется для систем со сложной логикой.&lt;/li&gt;
    &lt;li id=&quot;Mznz&quot;&gt;&lt;strong&gt;Доменный анализ (Domain Analysis Testing)&lt;/strong&gt; — это техника основана на разбиении диапазона возможных значений переменной на поддиапазоны, с последующим выбором одного или нескольких значений из каждого домена для тестирования.&lt;/li&gt;
    &lt;li id=&quot;zOl9&quot;&gt;&lt;strong&gt;Сценарий использования (Use Case Testing)&lt;/strong&gt; — Use Case описывает сценарий взаимодействия двух и более участников (как правило — пользователя и системы).&lt;/li&gt;
  &lt;/ol&gt;

</content></entry><entry><id>alexbrin:EVWXQ0UDG9u</id><link rel="alternate" type="text/html" href="https://teletype.in/@alexbrin/EVWXQ0UDG9u?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=alexbrin"></link><title>f-строки (очень удобно)</title><published>2024-03-07T21:14:08.388Z</published><updated>2024-03-07T21:14:08.388Z</updated><category term="python-course-for-me" label="python course for me"></category><summary type="html">Когда вы указываете перед стройкой f python воспринимает её как необычную строку и каждое содержимое фигурных скобок он будет воспринимать как выражение на языке программирования. В фигурных скобках вы можете писать свои какие-либо выражения и никто не запрещает вам воспользоваться математическими операциями.</summary><content type="html">
  &lt;nav&gt;
    &lt;ul&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#dvl7&quot;&gt;Код внутри скобок&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#k5Pw&quot;&gt;Вывод переменных&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#aYZ3&quot;&gt;С обозначением переменных&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#I6n6&quot;&gt;Формат вывода дробной части числа&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#442D&quot;&gt;Формат вывода целых чисел&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#piVR&quot;&gt;Пробелы перед числом (выравнивание)&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#ZAgu&quot;&gt;Выравнивание с помощью нулей (добавление в начало нулей)&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#rJKQ&quot;&gt;Разделение разрядов числа (например, вместо 1000000 - 1_000_000)&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#OJc3&quot;&gt;Выравнивание&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#yA6k&quot;&gt;Практический пример выравнивания&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/nav&gt;
  &lt;h2 id=&quot;dvl7&quot;&gt;Код внутри скобок&lt;/h2&gt;
  &lt;p id=&quot;lrxM&quot;&gt;Когда вы указываете перед стройкой &lt;code&gt;f&lt;/code&gt; python воспринимает её как необычную строку и каждое содержимое фигурных скобок он будет воспринимать как выражение на языке программирования. В фигурных скобках вы можете писать свои какие-либо выражения и никто не запрещает вам воспользоваться математическими операциями.&lt;/p&gt;
  &lt;figure id=&quot;viqR&quot; class=&quot;m_full_width&quot;&gt;
    &lt;iframe src=&quot;https://trinket.io/embed/python3/9de41bb244?start=result&quot;&gt;&lt;/iframe&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;z4Fz&quot;&gt;Вы можете пользоваться всеми возможностями ваших объектов. В нашем случае переменная name является строкой и мы знаем что у каждой строки есть метод lower. Давайте мы применим метод lower делает все буквы строки маленькими.&lt;/p&gt;
  &lt;figure id=&quot;S7I6&quot; class=&quot;m_full_width&quot;&gt;
    &lt;iframe src=&quot;https://trinket.io/embed/python3/e3c39774ba?start=result&quot;&gt;&lt;/iframe&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;U207&quot;&gt;В скобках вы можете вообще не использовать переменные. То есть вы можете просто написать здесь какие-либо числа и это выражение также посчитается и будет выведен его результат.&lt;/p&gt;
  &lt;figure id=&quot;iuBR&quot; class=&quot;m_full_width&quot;&gt;
    &lt;iframe src=&quot;https://trinket.io/embed/python3/aaa892022a?start=result&quot;&gt;&lt;/iframe&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;ZDaj&quot;&gt;Внутри скобок вы можете также вызвать другие функции. Например, мы можем вызвать функцию abs() от отрицательного числа&lt;/p&gt;
  &lt;figure id=&quot;mPCC&quot; class=&quot;m_full_width&quot;&gt;
    &lt;iframe src=&quot;https://trinket.io/embed/python3/4adf2130d7?start=result&quot;&gt;&lt;/iframe&gt;
  &lt;/figure&gt;
  &lt;h2 id=&quot;k5Pw&quot;&gt;Вывод переменных&lt;/h2&gt;
  &lt;h3 id=&quot;aYZ3&quot;&gt;С обозначением переменных&lt;/h3&gt;
  &lt;p id=&quot;PHrU&quot;&gt;Начиная с версии &lt;code&gt;Python 3.8&lt;/code&gt; функционал &lt;code&gt;f-строк&lt;/code&gt; был дополнен новой возможностью по выводу имён переменных и их значений. Посмотрите как теперь это можно сделать:&lt;/p&gt;
  &lt;figure id=&quot;rkS4&quot; class=&quot;m_full_width&quot;&gt;
    &lt;iframe src=&quot;https://trinket.io/embed/python3/0ab823c015?start=result&quot;&gt;&lt;/iframe&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;pun5&quot;&gt;Вам достаточно указать название переменной и знак равно. Будет выведено автоматически и имя переменной и ее значение. При этом и знаки пробелов, если они указаны, будут учтены.&lt;/p&gt;
  &lt;h2 id=&quot;I6n6&quot;&gt;Формат вывода дробной части числа&lt;/h2&gt;
  &lt;p id=&quot;apqh&quot;&gt;Встречаются задачи, где нужно вывести только определенное количество знаков после запятой. Допустим, мы хотим вывести ровно три знака после запятой для любого числа. Но далеко не у всех чисел в представлении есть эти три знака после запятой. У некоторых чисел они есть, у других либо не хватает знаков, либо имеется больше чем хотелось бы&lt;/p&gt;
  &lt;p id=&quot;ldvG&quot;&gt;Ответ простой - форматировать. &lt;code&gt;F-строки&lt;/code&gt; поддерживают &lt;a href=&quot;https://docs.python.org/3/reference/lexical_analysis.html#f-strings&quot; target=&quot;_blank&quot;&gt;функционал форматирования&lt;/a&gt;. Мы указываем специальным образом после имени переменной сколько символов ожидаем увидеть.&lt;/p&gt;
  &lt;figure id=&quot;m93J&quot; class=&quot;m_full_width&quot;&gt;
    &lt;iframe src=&quot;https://trinket.io/embed/python3/2252d21fba?start=result&quot;&gt;&lt;/iframe&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;4X78&quot;&gt;Запись &lt;code&gt;c:.3f&lt;/code&gt; говорит, что переменную &lt;code&gt;c&lt;/code&gt; нужно представить в вещественном виде (это знак &lt;code&gt;f&lt;/code&gt;) и отобразить три символа после запятой. Если у переменной &lt;code&gt;c&lt;/code&gt; не хватает символов для трех знаков, проставятся нули. Если символов в избытке, произойдет округление до третьего символа после запятой.&lt;/p&gt;
  &lt;p id=&quot;m4TB&quot;&gt;Над целыми числами тоже можно так издеваться)&lt;/p&gt;
  &lt;figure id=&quot;hRhZ&quot; class=&quot;m_full_width&quot;&gt;
    &lt;iframe src=&quot;https://trinket.io/embed/python3/9387b32722?start=result&quot;&gt;&lt;/iframe&gt;
  &lt;/figure&gt;
  &lt;h2 id=&quot;442D&quot;&gt;Формат вывода целых чисел&lt;/h2&gt;
  &lt;h3 id=&quot;piVR&quot;&gt;Пробелы перед числом (выравнивание)&lt;/h3&gt;
  &lt;p id=&quot;cEwr&quot;&gt;При помощи &lt;code&gt;f-строк&lt;/code&gt; мы можем влиять и на отображение целых чисел.&lt;/p&gt;
  &lt;figure id=&quot;SHT0&quot; class=&quot;m_full_width&quot;&gt;
    &lt;iframe src=&quot;https://trinket.io/embed/python3/2b9a7a78c5?start=result&quot;&gt;&lt;/iframe&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;UuvY&quot;&gt;Запись &lt;code&gt;n:7d&lt;/code&gt; говорит, что переменную &lt;code&gt;n&lt;/code&gt; нужно представить в виде целого числа (это знак  d ) и на отображение всего числа выделить 7 знаков. Если у переменной &lt;code&gt;n&lt;/code&gt; не хватает разрядов до семи, то впереди отображения появятся знаки пробелов.&lt;/p&gt;
  &lt;h3 id=&quot;ZAgu&quot;&gt;Выравнивание с помощью нулей (добавление в начало нулей)&lt;/h3&gt;
  &lt;p id=&quot;SM74&quot;&gt;Можно вместо пробелов добавить незначащие нули, для этого нужно подписать 0 перед количеством разрядов&lt;/p&gt;
  &lt;figure id=&quot;wAIM&quot; class=&quot;m_full_width&quot;&gt;
    &lt;iframe src=&quot;https://trinket.io/embed/python3/18cbb779c1?start=result&quot;&gt;&lt;/iframe&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;rJKQ&quot;&gt;Разделение разрядов числа (например, вместо 1000000 - 1_000_000)&lt;/h3&gt;
  &lt;p id=&quot;lcFZ&quot;&gt;Можно также влиять на знак разделителя между группами чисел, посмотрите пример ниже&lt;/p&gt;
  &lt;figure id=&quot;sZxa&quot; class=&quot;m_full_width&quot;&gt;
    &lt;iframe src=&quot;https://trinket.io/embed/python3/f2aa2cf3ea?start=result&quot;&gt;&lt;/iframe&gt;
  &lt;/figure&gt;
  &lt;h2 id=&quot;OJc3&quot;&gt;Выравнивание&lt;/h2&gt;
  &lt;p id=&quot;uP98&quot;&gt;Существует несколько способов выравнивания переменных в &lt;code&gt;f-строках&lt;/code&gt;. Различные варианты выравнивания следует:&lt;/p&gt;
  &lt;p id=&quot;HrqT&quot;&gt;&lt;code&gt;&amp;lt;&lt;/code&gt; - Выравнивает выражение в фигурных скобках по левому краю. У строк такое поведение по умолчанию&lt;/p&gt;
  &lt;p id=&quot;KTq4&quot;&gt;&lt;code&gt;&amp;gt;&lt;/code&gt; - Выравнивает выражение в фигурных скобках по правому краю. У чисел такое поведение по умолчанию&lt;/p&gt;
  &lt;p id=&quot;ol1O&quot;&gt;&lt;code&gt;^&lt;/code&gt; - Выравнивает выражение в фигурных скобках по центру&lt;/p&gt;
  &lt;p id=&quot;P2QN&quot;&gt;Ниже приведен пример использования выравнивания как для чисел, так и для строк.&lt;/p&gt;
  &lt;figure id=&quot;vHRt&quot; class=&quot;m_full_width&quot;&gt;
    &lt;iframe src=&quot;https://trinket.io/embed/python3/02106a0e80?start=result&quot;&gt;&lt;/iframe&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;GraL&quot;&gt;Символы &amp;quot;|&amp;quot; используются в &lt;code&gt;f-строке&lt;/code&gt;, чтобы помочь очертить интервал. Число после «:» указывает на количество символов в ширину.&lt;/p&gt;
  &lt;p id=&quot;dbsd&quot;&gt;По умолчанию символом заполнителем является пробел, но можно его заменить на другое значение&lt;/p&gt;
  &lt;figure id=&quot;uvLc&quot; class=&quot;m_full_width&quot;&gt;
    &lt;iframe src=&quot;https://trinket.io/embed/python3/db51de6167?start=result&quot;&gt;&lt;/iframe&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;yA6k&quot;&gt;Практический пример выравнивания&lt;/h3&gt;
  &lt;p id=&quot;4Jhr&quot;&gt;Давайте с вами смоделируем чек покупки. Пример ниже&lt;/p&gt;
  &lt;figure id=&quot;rsRy&quot; class=&quot;m_full_width&quot;&gt;
    &lt;iframe src=&quot;https://trinket.io/embed/python3/d227ac6fa0?start=result&quot;&gt;&lt;/iframe&gt;
  &lt;/figure&gt;

</content></entry><entry><id>alexbrin:84vyhNqmW6L</id><link rel="alternate" type="text/html" href="https://teletype.in/@alexbrin/84vyhNqmW6L?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=alexbrin"></link><title>14.5 Создание запросов в ручную</title><published>2024-02-21T16:15:56.723Z</published><updated>2024-02-21T16:15:56.723Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img2.teletype.in/files/d0/5d/d05dbab7-0f17-4ad9-a46e-4a13c57c5d39.png"></media:thumbnail><category term="aleks-smit-testirovanie-po-s-nulya-do-specialista" label="Алекс Смит: Тестирование ПО с Нуля до Специалиста"></category><summary type="html">&lt;img src=&quot;https://img2.teletype.in/files/57/b2/57b20406-6ecb-4ded-95ee-8d55155de06e.png&quot;&gt;1. Пользователь открыл Википедию для того, чтобы открыть какую либо статью.</summary><content type="html">
  &lt;nav&gt;
    &lt;ul&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#5PoJ&quot;&gt;Создаем первый тестовый сценарий&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#SHpy&quot;&gt;Сымитируем следующую деятельность пользователя:&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#sP3e&quot;&gt;Теперь запишем по запросам все шаги:&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/nav&gt;
  &lt;h2 id=&quot;5PoJ&quot;&gt;Создаем первый тестовый сценарий&lt;/h2&gt;
  &lt;h3 id=&quot;SHpy&quot;&gt;Сымитируем следующую деятельность пользователя:&lt;/h3&gt;
  &lt;p id=&quot;vnvr&quot;&gt;1. Пользователь открыл Википедию для того, чтобы открыть какую либо статью.&lt;/p&gt;
  &lt;p id=&quot;ePVu&quot;&gt;2. Далее ему нужно нажать кнопку поиска либо ввести какие то данные в поле &amp;quot;Искать в Википедии&amp;quot;. Но в нашей ситуации он нажал кнопку &amp;quot;Поиск&amp;quot;.&lt;/p&gt;
  &lt;p id=&quot;slFi&quot;&gt;3. Перешли на поисковую страницу с полем для запроса и фильтрами.&lt;/p&gt;
  &lt;figure id=&quot;HHm4&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/57/b2/57b20406-6ecb-4ded-95ee-8d55155de06e.png&quot; width=&quot;986&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;NFiw&quot;&gt;4. Пользователь вводит в поле поиска слово &amp;quot;Париж&amp;quot; и нажимает кнопку &amp;quot;Найти&amp;quot;. Ему выдаются результаты поиска.&lt;/p&gt;
  &lt;figure id=&quot;2ywE&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/16/5b/165bd195-db94-41aa-bd7b-54fa62fca03a.png&quot; width=&quot;1003&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;3xmn&quot;&gt;5. В результатах поиска ему нужно выбрать ту статью, которую он хочет почитать. Допустим, он хочет почитать про город Париж.&lt;/p&gt;
  &lt;figure id=&quot;CyOX&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/28/b9/28b9905f-a983-4ab8-964a-e1ed9e3bb00a.png&quot; width=&quot;1127&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;EEEd&quot;&gt;&lt;strong&gt;Мы обозначили тот тестовый сценарий, который мы выполнили.&lt;/strong&gt;&lt;/p&gt;
  &lt;h3 id=&quot;sP3e&quot;&gt;Теперь запишем по запросам все шаги:&lt;/h3&gt;
  &lt;figure id=&quot;QPQ1&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/af/92/af92e3c6-98e8-47b1-b05a-933eea3d50db.png&quot; width=&quot;613&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;SAjs&quot;&gt;Jmeter - это не браузер, не Selenium. В процессе работы мы не обращаемся к браузеру, а работаем только с конечными точками (с ссылками). А на основании расположения запросов создаем сценарий. &lt;/p&gt;
  &lt;p id=&quot;2PFn&quot;&gt;Если запустить тест с 5 пользователями, то нарушается порядок прохождения тестов&lt;/p&gt;
  &lt;figure id=&quot;f18w&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/03/09/0309c793-04ac-488a-ae0d-bc645bc79b24.png&quot; width=&quot;891&quot; /&gt;
  &lt;/figure&gt;

</content></entry><entry><id>alexbrin:D3Ygp9zBdfN</id><link rel="alternate" type="text/html" href="https://teletype.in/@alexbrin/D3Ygp9zBdfN?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=alexbrin"></link><title>13.4 Методика нагрузочного тестирования</title><published>2024-02-21T14:55:56.911Z</published><updated>2024-02-21T14:55:56.911Z</updated><category term="aleks-smit-testirovanie-po-s-nulya-do-specialista" label="Алекс Смит: Тестирование ПО с Нуля до Специалиста"></category><summary type="html">Методика нагрузочного тестирования – это документ, который включает в себя: цели тестирования, объект тестирования, стратегию тестирования, описание тестового стенда, моделирование нагрузки описание заглушек, эмуляторов, баз данных средств. Данный документ обязательно должен согласоваться.</summary><content type="html">
  &lt;p id=&quot;I2wV&quot;&gt;Методика нагрузочного тестирования – это документ, который включает в себя: цели тестирования, объект тестирования, стратегию тестирования, описание тестового стенда, моделирование нагрузки описание заглушек, эмуляторов, баз данных средств. Данный документ обязательно должен согласоваться.&lt;/p&gt;
  &lt;p id=&quot;4ttR&quot;&gt;Давайте более подробней пройдемся по каждому пункту:&lt;/p&gt;
  &lt;p id=&quot;UN0S&quot;&gt;&lt;strong&gt;1. Цели тестирования, их разделяют:&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;h5zF&quot;&gt;&lt;strong&gt;Технические цели &lt;/strong&gt;– например, тестирование надежности, отказоустойчивости и т.д.&lt;/p&gt;
  &lt;p id=&quot;3PLU&quot;&gt;&lt;strong&gt;Бизнес цели&lt;/strong&gt; – к примеру, изменение информационной инфраструктуры или системы, то есть проверка нового ПО и его функционала.&lt;/p&gt;
  &lt;p id=&quot;O4oz&quot;&gt;&lt;strong&gt;2. Объект тестирования&lt;/strong&gt; – данный раздел включает в себя архитектуры системы, то есть ее характеристики, ее компоненты и взаимосвязь компонентов между собой.&lt;/p&gt;
  &lt;p id=&quot;yvyl&quot;&gt;&lt;strong&gt;3. Стратегия тестирования&lt;/strong&gt; - он включает в себя описание проводимых испытаний для каждой цели тестирования.&lt;/p&gt;
  &lt;p id=&quot;kTov&quot;&gt;Давайте рассмотрим пример:&lt;/p&gt;
  &lt;h3 id=&quot;Mv0D&quot;&gt;Тестирование надежности&lt;/h3&gt;
  &lt;p id=&quot;U4Ry&quot;&gt;Тест надежности выполняется на уровне нагрузки:&lt;/p&gt;
  &lt;p id=&quot;SPks&quot;&gt;1. Нагрузка системы в количестве 70-90 % от уровня найденной максимальной производительности.&lt;/p&gt;
  &lt;p id=&quot;pwdd&quot;&gt;2. При повторном тестировании и тестировании нового функционала нагружаем на 100-120% от пиковой производительности нашей системы. Что это значит, мы анализируем нагрузку, которая поступает на наш сервер в течении всей недели, отбираем к примеру день, когда у нас максимальная нагрузка, отбираем час, когда у нас максимальная нагрузка (например это 11 часов дня, в это время у нас самое большое количество пользователей на нашем сайте, они совершают максимальную нагрузку нашего сервера) мы берем либо этот час, либо среднее по всем часам, например, суммируем всю нагрузку с 11-12:00 и делим на 7. Это наш показатель, от которого мы отталкиваемся и нагружаем нашу систему на 100-120%, если система выдерживает данную нагрузку, значит и с остальной она справится.&lt;/p&gt;
  &lt;p id=&quot;ctQ7&quot;&gt;Длительность тестирования определяется требуемым интервалом доступности системы (в идеале 24х7). Но здесь надо анализировать, что есть так же привязанность к датам, например на сайте большая активность в конце месяца или в какое-то определенное число, например день отчетности, и именно в этот день у нас максимальная нагрузка нашего стенда, в идеале, чтоб именно этот день попадал в наш период.&lt;/p&gt;
  &lt;p id=&quot;3jD9&quot;&gt;И так по каждой цели тестирования, то есть данный раздел очень объемным.&lt;/p&gt;
  &lt;p id=&quot;htMr&quot;&gt;Мы обязательно должны указать в данном разделе критерии успешного завершения нагрузочного тестирования являются:&lt;/p&gt;
  &lt;p id=&quot;MWg3&quot;&gt;1)выполнение всех запланированных тестов&lt;/p&gt;
  &lt;p id=&quot;5Gsx&quot;&gt;2)получение данных с мониторинга&lt;/p&gt;
  &lt;p id=&quot;2twE&quot;&gt;&lt;strong&gt;4. Тестовый стенд&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;3ptY&quot;&gt;Здесь указывается:&lt;/p&gt;
  &lt;p id=&quot;XRr8&quot;&gt;1)архитектура тестового стенда – описание самого стенда, описание смежных систем&lt;/p&gt;
  &lt;p id=&quot;as6e&quot;&gt;2)требования к оборудованию тестового стенда, его характеристики&lt;/p&gt;
  &lt;p id=&quot;GR0F&quot;&gt;3)очень важны пункт – сравнение тестового и пользовательского, так как нам очень важно, чтобы они были равны&lt;/p&gt;
  &lt;p id=&quot;wVJn&quot;&gt;&lt;strong&gt;5. Моделирование нагрузки&lt;/strong&gt; - описанием процессов, операций, которые проводят пользователи в нашей системе.&lt;/p&gt;
  &lt;p id=&quot;Z7KB&quot;&gt;Здесь идет описание наших операций, например авторизация на сайте, подача каких-либо заявок в банковском софте, покупок в интернет магазине, поиск данных в поисковом сервисе и т.д. указывается количество дынных операций в пиковый час, среднее количество.&lt;/p&gt;
  &lt;p id=&quot;mNrG&quot;&gt;Так же здесь у нас указывается профиль нагрузки, где у нас идут данные за весь месяц 24 на 7.&lt;/p&gt;
  &lt;p id=&quot;Sg1T&quot;&gt;&lt;strong&gt;6. Описание заглушек и эмуляторов&lt;/strong&gt;, в которых мы описываем их характеристики и что они выполняют&lt;/p&gt;
  &lt;p id=&quot;taph&quot;&gt;&lt;strong&gt;7. Базы данных&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;XS7a&quot;&gt;В нем описываются характеристики БД, ее наполнение, то есть количество данных в ней&lt;/p&gt;
  &lt;p id=&quot;1vVw&quot;&gt;&lt;strong&gt;8. Мониторинг&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;caUh&quot;&gt;Мониторинг необходим для сбора характеристик производительности компонент системы. В данном разделе описывается вспомогательное ПО для проведения мониторинга&lt;/p&gt;
  &lt;p id=&quot;S7fV&quot;&gt;Как вы уже могли понять данный документ очень Важен и к его составлению необходимо подходить очень тщательно&lt;/p&gt;

</content></entry><entry><id>alexbrin:KwteANVnACz</id><link rel="alternate" type="text/html" href="https://teletype.in/@alexbrin/KwteANVnACz?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=alexbrin"></link><title>13.3 Этапы нагрузочного тестирования</title><published>2024-02-21T14:36:49.345Z</published><updated>2024-02-21T14:36:49.345Z</updated><category term="aleks-smit-testirovanie-po-s-nulya-do-specialista" label="Алекс Смит: Тестирование ПО с Нуля до Специалиста"></category><summary type="html">Прежде чем приступать к самому процессу тестирования, нам необходимо к нему подготовиться, учесть все особенности системы, подготовить документацию и тестовые данные, инструменты, стенды и т.д.</summary><content type="html">
  &lt;p id=&quot;LBjM&quot;&gt;Прежде чем приступать к самому процессу тестирования, нам необходимо к нему подготовиться, учесть все особенности системы, подготовить документацию и тестовые данные, инструменты, стенды и т.д.&lt;/p&gt;
  &lt;nav&gt;
    &lt;ul&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#ouyf&quot;&gt;Основные этапы проведения нагрузочного тестирования:&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#hs42&quot;&gt;1.  Определение и постановка задачи&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#iqo1&quot;&gt;2. Подготовка тестового стенда и средств тестирования&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#1cD3&quot;&gt;3. Подготовка тестового плана или как его еще называют методики Нагрузочного Тестирования&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#qGO4&quot;&gt;4.  Настройка тестового стенда и вспомогательного ПО&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#YGrt&quot;&gt;5. Проведение нагрузочного тестирования&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#TGsf&quot;&gt;6.  Подготовка отчета и анализ результата тестирования&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/nav&gt;
  &lt;h2 id=&quot;ouyf&quot;&gt;Основные этапы проведения нагрузочного тестирования:&lt;/h2&gt;
  &lt;ol id=&quot;q46K&quot;&gt;
    &lt;li id=&quot;iRe3&quot;&gt;Определение и постановка задач.&lt;/li&gt;
    &lt;li id=&quot;g8hO&quot;&gt;Подготовка тестового стенда и средства тестирования.&lt;/li&gt;
    &lt;li id=&quot;6trn&quot;&gt;Подготовка тестового плана (методики НТ).&lt;/li&gt;
    &lt;li id=&quot;KGme&quot;&gt;Настройка тестового стенда и вспомогательного ПО.&lt;/li&gt;
    &lt;li id=&quot;BksX&quot;&gt;Проведение нагрузочных тестов.&lt;/li&gt;
    &lt;li id=&quot;NJNi&quot;&gt;Подготовка отчетов и анализ результатов тестирования.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;h3 id=&quot;hs42&quot;&gt;&lt;strong&gt;1.  Определение и постановка задачи&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;DQYa&quot;&gt;На данном этапе:&lt;/p&gt;
  &lt;ul id=&quot;Ishm&quot;&gt;
    &lt;li id=&quot;DLyo&quot;&gt;&lt;strong&gt;Сбор информации о продукте:&lt;/strong&gt; мы собираем всю информацию о продукте: требования к производительности продукта, какие операции совершают наши пользователи, для того, чтоб в дальнейшем составить тест-кейсы. Определяем цели тестирования.&lt;/li&gt;
    &lt;li id=&quot;R8Vp&quot;&gt;&lt;strong&gt;Определение состава группы по нагрузочному тестированию:&lt;/strong&gt; определяем состав группу, количество тестировщиков занятых в данном процессе, так же других участников, например аналитики, архитекторы, проджект менеджеры и т.д.&lt;/li&gt;
    &lt;li id=&quot;2xNX&quot;&gt;&lt;strong&gt;Определение и согласование целей тестирования:&lt;/strong&gt; определяем цели нашего тестирования и обязательно согласовываем их с вышестоящим руководством.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3 id=&quot;iqo1&quot;&gt;2. &lt;strong&gt;Подготовка тестового стенда и средств тестирования&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;vY1s&quot;&gt;На данном этапе:&lt;/p&gt;
  &lt;ul id=&quot;IGVE&quot;&gt;
    &lt;li id=&quot;oEGu&quot;&gt;&lt;strong&gt;Подготовка стендов для тестирования:&lt;/strong&gt; подготовка стенда, который по своим характеристикам максимально приближен к продакшену, сюда можно отнести, к примеру базу данных, которая должна быть загружена по объему максимально близко к базе данных продакшена, так как нам необходимо максимально точно воссоздать условия нашего тестирования.&lt;/li&gt;
    &lt;li id=&quot;gagY&quot;&gt;&lt;strong&gt;Подготовка ПО для тестировщиков&lt;/strong&gt;, то есть установка всех необходимых программ.&lt;/li&gt;
    &lt;li id=&quot;FHjs&quot;&gt;&lt;strong&gt;Получение доступов к стендам для тестировщиков.&lt;/strong&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3 id=&quot;1cD3&quot;&gt;3. &lt;strong&gt;Подготовка тестового плана или как его еще называют методики Нагрузочного Тестирования&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;eH5y&quot;&gt;На данном этапе:&lt;/p&gt;
  &lt;ul id=&quot;0qs6&quot;&gt;
    &lt;li id=&quot;sUsC&quot;&gt;&lt;strong&gt;Написание тест-кейсов.&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;EuVf&quot;&gt;&lt;strong&gt;Согласование сроков.&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;2Qq3&quot;&gt;&lt;strong&gt;Согласование участников тестирования.&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;7fj7&quot;&gt;&lt;strong&gt;Частота проведения тестов.&lt;/strong&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;s1ZL&quot;&gt;В данном документе описываются тест-кейсы, то есть тестовые сценарии процессов, шагов, которые мы будем проводить во время нашего тестирования, с целью сымитировать деятельность конечных пользователей, так же здесь описываются сроки, количество участников, частота проведения наших тестов и т.д.&lt;/p&gt;
  &lt;h3 id=&quot;qGO4&quot;&gt;4.  &lt;strong&gt;Настройка тестового стенда и вспомогательного ПО&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;lnJy&quot;&gt;Окончательная настройка нашего стенда, вспомогательного ПО, подготовка эмуляторов и заглушек для нашей системы.&lt;/p&gt;
  &lt;p id=&quot;VCTj&quot;&gt;&lt;strong&gt;Заглушка&lt;/strong&gt; – это часть нашей системы, которая всегда отвечает одинаково, то есть когда мы отправляем в нее запрос, она всегда отвечает однотипно.&lt;/p&gt;
  &lt;p id=&quot;2Gi8&quot;&gt;&lt;strong&gt;Эмулятор&lt;/strong&gt; же в свою очередь, обладает большей логикой и способен выдавать различные ответы.&lt;/p&gt;
  &lt;h3 id=&quot;YGrt&quot;&gt;5. &lt;strong&gt;Проведение нагрузочного тестирования&lt;/strong&gt;&lt;/h3&gt;
  &lt;ul id=&quot;MUC9&quot;&gt;
    &lt;li id=&quot;7eYX&quot;&gt;&lt;strong&gt;Дымовое тестирование:&lt;/strong&gt; В первую очередь мы проводим smoke тестирование, то есть прогоняем небольшие тесты, для того чтоб проверить что наша система вообще работает и выполняет свою основную бизнес-логику. Это обязательное условие перед полноценным тестированием, это можно сравнить с разведкой обстановки.&lt;/li&gt;
    &lt;li id=&quot;MBHg&quot;&gt;&lt;strong&gt;Определение максимальной производительности системы:&lt;/strong&gt; Определение максимальной производительности, то есть мы хотим узнать предельные способности нашей системы, этот показатель очень важен для нас и будет в дальнейшем использоваться и сравниваться с другими показателями нашей системы.&lt;/li&gt;
    &lt;li id=&quot;ZJEg&quot;&gt;&lt;strong&gt;90% от максимальной производительности системы:&lt;/strong&gt; Нам необходимо повторно произвести определение максимальной производительности, процентов 90 от предыдущего значения, для того, чтоб убедиться что мы получили верные данные.&lt;/li&gt;
    &lt;li id=&quot;WBDF&quot;&gt;&lt;strong&gt;Тестирование надежности.&lt;/strong&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3 id=&quot;TGsf&quot;&gt;&lt;strong&gt;6.  Подготовка отчета и анализ результата тестирования&lt;/strong&gt;&lt;/h3&gt;
  &lt;ul id=&quot;y0J9&quot;&gt;
    &lt;li id=&quot;qZwE&quot;&gt;&lt;strong&gt;Фиксирование процента успешных операций:&lt;/strong&gt; процент успешных операций, так называемая доступность.&lt;/li&gt;
    &lt;li id=&quot;dLP2&quot;&gt;&lt;strong&gt;Фиксирование отклика системы на нагрузку:&lt;/strong&gt; время отклика системы на нагрузку.&lt;/li&gt;
    &lt;li id=&quot;uyDM&quot;&gt;&lt;strong&gt;Фиксирование пропускной способности системы:&lt;/strong&gt; пропускная способность—количество операций в единицу времени, которое способна выполнять система.&lt;/li&gt;
  &lt;/ul&gt;

</content></entry><entry><id>alexbrin:otQJ1Mlh7gF</id><link rel="alternate" type="text/html" href="https://teletype.in/@alexbrin/otQJ1Mlh7gF?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=alexbrin"></link><title>13.2 Когда необходимо проводить нагрузочное тестирование</title><published>2024-02-21T13:01:07.864Z</published><updated>2024-02-21T13:01:07.864Z</updated><category term="aleks-smit-testirovanie-po-s-nulya-do-specialista" label="Алекс Смит: Тестирование ПО с Нуля до Специалиста"></category><summary type="html">Когда проводится нагрузочное тестирование:</summary><content type="html">
  &lt;p id=&quot;KI8V&quot;&gt;Когда проводится нагрузочное тестирование:&lt;/p&gt;
  &lt;p id=&quot;IXql&quot;&gt;1.  &lt;strong&gt;Выпуск нового ПО&lt;/strong&gt; - мы только выпустили наше программное обеспечение и мы хотим выяснить, соответствует ли оно заявленным требованиям или нет, проводим определение максимальной производительности, выявляем узкие места, стресс тестирование и осуществляем проверку отказоустойчивости;&lt;/p&gt;
  &lt;p id=&quot;FpQj&quot;&gt;2.  &lt;strong&gt;Появление нового функционала &lt;/strong&gt;– в нем мы нагружаем именно новый функционал, например почтовый сервис решил добавить новую функцию, в виде поисковой системы. Если ранее мы тестировали только то, что связано отправкой сообщений, то теперь нам необходимо так же протестировать и саму поисковую систему на ту нагрузку которая она способна выдержать;&lt;/p&gt;
  &lt;p id=&quot;P1QV&quot;&gt;3.  &lt;strong&gt;Регрессионное тестирование&lt;/strong&gt; &lt;strong&gt;или плановое&lt;/strong&gt; &lt;strong&gt;тестирование&lt;/strong&gt; - то есть тестирование, которое производится после разработки нового функционала или по плану( у вас есть определённое расписание, когда вы производите нагрузочное тестирование Вашего продукта);&lt;/p&gt;
  &lt;p id=&quot;CHXH&quot;&gt;4.  &lt;strong&gt;Исследовательское&lt;/strong&gt; - это тестирование когда мы хотим выяснить максимальные возможности нашей системы, то есть мы проводим определение максимальной производительности, нагружаем нашу систему в течении длительного времени, производим стрессовое тестирование и т.д.;&lt;/p&gt;
  &lt;p id=&quot;vsbx&quot;&gt;5.  &lt;strong&gt;Смена технологий&lt;/strong&gt; - когда наша система переходит с одной базы данных на другую, меняется оборудование и мощности. Мы нагружаем нашу систему и смотрим, чтоб она работала в соответствии с требованиями, предъявленными к ней;&lt;/p&gt;
  &lt;p id=&quot;jKDO&quot;&gt;6.  &lt;strong&gt;При поступлении багов с продакшен сервера&lt;/strong&gt; - нам необходимо воспроизвести те же самые условия на тестовом стенде максимально близко к реальным, выяснить, почему наша система не справилась.&lt;/p&gt;

</content></entry><entry><id>alexbrin:IOy5y4F2PQP</id><link rel="alternate" type="text/html" href="https://teletype.in/@alexbrin/IOy5y4F2PQP?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=alexbrin"></link><title>13.1 Введение в Нагрузочное тестирование. Цели нагрузочного тестирова</title><published>2024-02-21T12:44:58.700Z</published><updated>2024-02-21T12:44:58.700Z</updated><category term="aleks-smit-testirovanie-po-s-nulya-do-specialista" label="Алекс Смит: Тестирование ПО с Нуля до Специалиста"></category><summary type="html">От любой системы требуется быстро и правильно отвечать на запросы пользователей, то есть выполнять те команды и задачи, которые требует от нее пользователь. Например, выдавать результат поиска на поисковых сайтах, например Яндекс или Google, или отправка сообщения в социальных сетях и т.д.</summary><content type="html">
  &lt;nav&gt;
    &lt;ul&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#LAce&quot;&gt;Для чего нужно нагрузочное тестирование?&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#VUMj&quot;&gt;Нагрузочное тестирование&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#RfPV&quot;&gt;Цели нагрузочного тестирования&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/nav&gt;
  &lt;p id=&quot;Tpsz&quot;&gt;От любой системы требуется быстро и правильно отвечать на запросы пользователей, то есть выполнять те команды и задачи, которые требует от нее пользователь. Например, выдавать результат поиска на поисковых сайтах, например Яндекс или Google, или отправка сообщения в социальных сетях и т.д.&lt;/p&gt;
  &lt;h2 id=&quot;LAce&quot;&gt;Для чего нужно нагрузочное тестирование?&lt;/h2&gt;
  &lt;p id=&quot;LPD7&quot;&gt;За правильность - отвечают функциональные свойства продукта, а вот за скорость подачи запроса, отработки и возвращения ответа отвечают нефункциональные свойства нашего продукта.&lt;/p&gt;
  &lt;p id=&quot;ePIR&quot;&gt;Среди тестировщиков и тестирования в целом, есть распределение на функциональных тестировщиков, как раз тех, которые проверяют функциональные свойства продукта, так и нефункциональных тестировщиков, часть из которых как раз занимается нагрузочным тестированием, то есть тестированием производительности.&lt;/p&gt;
  &lt;p id=&quot;JaZH&quot;&gt;Для чего же необходимо производить нагрузочное тестирование, давайте разберем пример:&lt;/p&gt;
  &lt;blockquote id=&quot;aVzj&quot;&gt;Все мы знаем про черную пятницу, это день скидок, когда мы можем купить товар с большой скидкой. Представим, что у нас есть интернет-магазин по продаже электроники, и для него норма производительности, скажем 1000 пользователей, одновременно находящихся на сайте и выполняющие определенные действия -регистрация, поиск товара, оформление товара, покупка.&lt;br /&gt;Наступает черная пятница, и вместо 1000 человек, на нашем сайте одновременно находится 10000 человек, что же произойдет? Норма превышена в 10 раз и в лучшем случае сайт будет работать медленней, часть операций не будет проходить, а в худшем случае наш сервер вовсе выйдет из строя и хозяева данного ресурса понесут большие убытки.&lt;/blockquote&gt;
  &lt;p id=&quot;FI4e&quot;&gt;Так вот чтоб это предотвратить, необходимо производить нагрузочное тестирование, смотреть на его пропускную способность, то есть количество операций в единицу времени, которое способна выполнять Система, улучшать свои мощности. Так же примером может послужить онлайн игры, ведь не зря там идет разбивка на различные сервера, и не только по причине разделения по территории, языку, но и в том числе, чтоб распределить нагрузку равномерно и пользователи получили комфортную игру.&lt;/p&gt;
  &lt;h3 id=&quot;VUMj&quot;&gt;Нагрузочное тестирование&lt;/h3&gt;
  &lt;p id=&quot;GUyd&quot;&gt;&lt;strong&gt;Нагрузочное тестирование&lt;/strong&gt; – это получение и анализ показателей производительности программного продукта (системы), в ответ на полученную нагрузку извне, с целью установления соответствия ожидаемого результата поведения программного продукта и фактического.&lt;/p&gt;
  &lt;p id=&quot;KKqI&quot;&gt;Под ожидаемым результатом, здесь понимаются показатели, которые указаны в требованиях, которые предъявляются к нашему продукту, а фактические – это те, которые мы получаем в ходе проверки. Проще говоря – это проверка того, как ведет себя система под нагрузкой.&lt;/p&gt;
  &lt;h2 id=&quot;RfPV&quot;&gt;Цели нагрузочного тестирования&lt;/h2&gt;
  &lt;p id=&quot;3Llv&quot;&gt;1.  &lt;strong&gt;Определение максимальной производительности системы&lt;/strong&gt; - в ходе данного тестирования, мы максимально нагружаем нашу систему запросами и смотрим на время отклика системы и количество ошибок (сбоев) системы.&lt;/p&gt;
  &lt;p id=&quot;tE0d&quot;&gt;2.  &lt;strong&gt;Выявление проблемных участков &lt;/strong&gt;или как их еще называют- «узких мест»;&lt;/p&gt;
  &lt;p id=&quot;1dbO&quot;&gt;3.  &lt;strong&gt;Проверка стабильности (&lt;/strong&gt;в некоторых источниках вы можете встретить название надежности) – длительная нагрузка нашей системы при нормальных условиях 70-80 % от максимума(который указан в требованиях и который должна выдерживать наша система);&lt;/p&gt;
  &lt;blockquote id=&quot;hY7o&quot;&gt;Предположим что у нас есть интернет магазин. Заказчик закладывает что &lt;strong&gt;норма&lt;/strong&gt; посещения сайта 500 пользователей одновременно. То есть по статистике больше не сидит. Прописывает &lt;strong&gt;максимум&lt;/strong&gt; системы, то есть максимальное количество пользователей, который сайт должен выдерживать, например 1000, вдруг праздники, распродажи и т.д&lt;/blockquote&gt;
  &lt;p id=&quot;n61D&quot;&gt;4.  &lt;strong&gt;Проверка системы под действием стресс-нагрузки&lt;/strong&gt; – это тестирование, когда мы нагружаем нашу систему нагрузкой, которая в несколько раз превышает норму. Это как раз тот сценарий с черной пятницей в интернет-магазине, о котором я говорил;&lt;/p&gt;
  &lt;p id=&quot;10vH&quot;&gt;5.  &lt;strong&gt;Re-test&lt;/strong&gt;, то есть проверка исправления ошибки - когда мы обнаружили проблемный участок в нашей системе, разработчики его поправили и мы производим повторную проверку;&lt;/p&gt;
  &lt;p id=&quot;9DJB&quot;&gt;6.  &lt;strong&gt;Проверка отказоустойчивости&lt;/strong&gt; - отключаем часть сервисов в нашей системе, у нас копится нагрузка, очереди запросов. Потом мы их включаем и смотрим как быстро система восстановится. Включаем и отключаем компоненты системы, смотрим как система будет на это реагировать.&lt;/p&gt;
  &lt;blockquote id=&quot;NcXI&quot;&gt;Приведу простой пример: у нас есть ванна, в которой мы моемся, мы включаем воду, вода уходит в отверстие и наша ванна постоянно пуста. Теперь представьте, что мы закрыли данное отверстие пробкой и вода начала скапливаться, достигла определенного объема, ванна полная и мы вытащили нашу пробку, вода начала уходить, освобождая нашу ванну. Так вот время пока вода полностью не уйдет, это как раз время, за которое наша система восстановится.&lt;/blockquote&gt;
  &lt;p id=&quot;Eub7&quot;&gt;7.  &lt;strong&gt;Воспроизведение проблем промышленной среды&lt;/strong&gt; - представим что на Проде, на нашем боевом сервере, обнаружилась ошибка и мы пытаемся ее воспроизвести на нашем тестовом стенде. Тестовый стенд всегда отличается от Прода, даже если установлена одна версия ПО. Если мы на Проде получили проблему, ее нужно постараться воспроизвести на тестовом стенде максимально похоже.&lt;/p&gt;

</content></entry><entry><id>alexbrin:kcKuxSh6jQl</id><link rel="alternate" type="text/html" href="https://teletype.in/@alexbrin/kcKuxSh6jQl?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=alexbrin"></link><title>Работа над ошибками в коммитах</title><published>2024-02-19T14:38:52.862Z</published><updated>2024-02-19T14:39:15.357Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img1.teletype.in/files/4d/fa/4dfac0b5-5c19-49a2-b62c-789221a2792c.png"></media:thumbnail><category term="git-yandeks-praktikum" label="Git Яндекс Практикум"></category><summary type="html">&lt;img src=&quot;https://img4.teletype.in/files/3f/3a/3f3a5aaa-4797-48a8-ae21-038e8bc20a28.png&quot;&gt;То, как написаны сообщения коммитов, тоже может подчиняться определённым правилам. Иногда эти правила продиктованы культурой команды, а иногда техническими ограничениями.</summary><content type="html">
  &lt;nav&gt;
    &lt;ul&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#aNX3&quot;&gt;Зачем вообще писать сообщения&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#Zcwk&quot;&gt;Стили оформления&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#rhpo&quot;&gt;Корпоративный&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#ZoWY&quot;&gt;Conventional Commits&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#mUbh&quot;&gt;GitHub-стиль&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#Fgmt&quot;&gt;Как исправить коммит&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#28pY&quot;&gt;Подготавливаем репозиторий&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#p7bk&quot;&gt;Дополнить коммит новыми файлами — git commit --amend --no-edit&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#Arqp&quot;&gt;Изменить сообщение коммита — git commit --amend -m &quot;Новое сообщение&quot;&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#na8h&quot;&gt;Как откатиться назад, если «всё сломалось»&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#YMem&quot;&gt;Выполнить unstage изменений — git restore --staged &lt;file&gt;&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#uX7S&quot;&gt;«Откатить» коммит — git reset --hard &lt;commit hash&gt;&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#6KTO&quot;&gt;«Откатить» изменения, которые не попали ни в staging, ни в коммит, — git restore &lt;file&gt;&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/nav&gt;
  &lt;p id=&quot;zHev&quot;&gt;То, как написаны сообщения коммитов, тоже может подчиняться определённым правилам. Иногда эти правила продиктованы культурой команды, а иногда техническими ограничениями.&lt;/p&gt;
  &lt;p id=&quot;mCbg&quot;&gt;Например, в выводе команды &lt;code&gt;git log --oneline&lt;/code&gt; умещается максимум 7272 первых символа сообщения, поэтому многие правила включают пункт: «Сообщение не должно быть длиннее 7272 символов».&lt;/p&gt;
  &lt;p id=&quot;8bAq&quot;&gt;В этом уроке рассмотрим несколько популярных подходов к оформлению сообщений коммитов. Но сначала разберём, почему такие сообщения важны и зачем соблюдать правила их оформления.&lt;/p&gt;
  &lt;h3 id=&quot;aNX3&quot;&gt;Зачем вообще писать сообщения&lt;/h3&gt;
  &lt;p id=&quot;WnvY&quot;&gt;У каждого коммита в Git есть сообщение — то, что передаётся после параметра &lt;code&gt;-m&lt;/code&gt;. Например: &lt;code&gt;git commit -m &amp;quot;Добавить урок про оформление сообщений коммитов&amp;quot;&lt;/code&gt;.&lt;/p&gt;
  &lt;p id=&quot;UgUd&quot;&gt;Сообщения коммитов можно сравнить с надписями на коробках в кладовке. Если надписей нет, то нужную коробку будет сложно найти: придётся заглянуть в каждую, чтобы понять, что там. А если надписи есть, то нужная найдётся сразу.&lt;/p&gt;
  &lt;p id=&quot;32ps&quot;&gt;Как и надпись на коробке, сообщение коммита должно помочь определить, что внутри. Например, надпись на коробке «всякое разное» не очень полезная. Сообщение коммита «небольшие исправления» тоже: непонятно, что было исправлено в таком коммите и зачем.&lt;/p&gt;
  &lt;p id=&quot;F8MM&quot;&gt;Есть общие рекомендации по тому, как правильно составить сообщение. Оно должно быть:&lt;/p&gt;
  &lt;ul id=&quot;w3Xi&quot;&gt;
    &lt;li id=&quot;BHFg&quot;&gt;относительно коротким, чтобы его было легко прочитать;&lt;/li&gt;
    &lt;li id=&quot;DINB&quot;&gt;информативным.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;i9n9&quot;&gt;Вот пример полезного сообщения в репозитории новостного сайта: &lt;code&gt;Исправление опечатки в заголовке главной страницы на хорватском&lt;/code&gt;. Такое сообщение даёт много информации:&lt;/p&gt;
  &lt;ul id=&quot;4EgV&quot;&gt;
    &lt;li id=&quot;VDgi&quot;&gt;&lt;code&gt;Исправление опечатки&lt;/code&gt; значит, что исправлена ошибка, которая была допущена при наборе. Такое исправление не меняет смысл. То есть, например, главному редактору не нужно перепроверять этот заголовок.&lt;/li&gt;
    &lt;li id=&quot;E6vM&quot;&gt;&lt;code&gt;На хорватском&lt;/code&gt; говорит о том, что переводчикам на другие языки этот коммит можно смело пропускать.&lt;/li&gt;
    &lt;li id=&quot;YYbK&quot;&gt;&lt;code&gt;В заголовке главной страницы&lt;/code&gt; указывает, где произошли изменения. Если, например, кто-то зайдёт на сайт и ему не понравится новый заголовок, он легко найдёт по истории (&lt;code&gt;git log&lt;/code&gt;) автора этого коммита и спросит у него, почему заголовок теперь такой.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;oiie&quot;&gt;Пример плохого сообщения для того же коммита: &lt;code&gt;Исправлена опечатка&lt;/code&gt;. Это сообщение даёт мало информации. В такой коммит придётся «заглядывать» — разбираться, что именно поменялось и зачем.&lt;/p&gt;
  &lt;h2 id=&quot;Zcwk&quot;&gt;Стили оформления&lt;/h2&gt;
  &lt;p id=&quot;9ZNL&quot;&gt;Все люди разные и у всех есть предпочтения — в том числе, как формулировать сообщения коммитов. Кто-то использует инфинитивы: &lt;code&gt;Исправить сообщение об ошибке E123&lt;/code&gt;, кто-то — глаголы в прошедшем времени: &lt;code&gt;Исправил…&lt;/code&gt;, кто-то — существительные: &lt;code&gt;Исправление…&lt;/code&gt;.&lt;/p&gt;
  &lt;p id=&quot;ttJy&quot;&gt;Без единообразия коммитов нет и эффективной работы в Git. Это может показаться мелочью, но когда коммиты с сообщениями в разных стилях идут друг за другом, их может быть сложно читать.&lt;/p&gt;
  &lt;p id=&quot;inAO&quot;&gt;Чтобы упростить работу, команды или даже целые компании часто договариваются об определённом стиле (то есть о правилах) оформления сообщений коммитов.&lt;/p&gt;
  &lt;p id=&quot;eaxS&quot;&gt;Например, правила могут быть такие:&lt;/p&gt;
  &lt;ul id=&quot;mNDS&quot;&gt;
    &lt;li id=&quot;uN5X&quot;&gt;длина сообщения от 3030 до 7272 символов;&lt;/li&gt;
    &lt;li id=&quot;fhoo&quot;&gt;первое слово — глагол в инфинитиве («исправить», «дополнить», «добавить» и другие);&lt;/li&gt;
    &lt;li id=&quot;FDYQ&quot;&gt;и так далее.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;dg3S&quot;&gt;Есть много подходов к оформлению сообщений коммитов, но мы расскажем о нескольких популярных. Их используют как отдельные команды, так и целые проекты.&lt;/p&gt;
  &lt;h3 id=&quot;rhpo&quot;&gt;Корпоративный&lt;/h3&gt;
  &lt;p id=&quot;3Tkh&quot;&gt;Во многих компаниях применяется Jira — система для организации проектов и задач. У каждой задачи в Jira есть идентификатор из нескольких заглавных латинских букв и номера. Например, &lt;code&gt;LGS-239&lt;/code&gt; значит, что это 239239-я задача в проекте &lt;strong&gt;LGS&lt;/strong&gt; (сокращение от англ. &lt;em&gt;&lt;strong&gt;l&lt;/strong&gt;o&lt;strong&gt;g&lt;/strong&gt;istic&lt;strong&gt;s&lt;/strong&gt;&lt;/em&gt; — «логистика»).&lt;/p&gt;
  &lt;p id=&quot;TnU4&quot;&gt;В корпоративном стиле в начале сообщения обычно указывают Jira-ID, а после — текст сообщения.&lt;/p&gt;
  &lt;pre id=&quot;89QK&quot;&gt;$ git commit -m &amp;quot;LGS-239: Дополнить список пасхалок новыми числами&amp;quot;&lt;/pre&gt;
  &lt;p id=&quot;msad&quot;&gt;Какие-то команды могут договариваться, с какой части речи начинать сообщение и какой длины оно должно быть, какие-то — нет. Но требование о наличии Jira-ID обычно строгое: оно позволяет автоматически связывать коммиты с задачами и проектами.&lt;/p&gt;
  &lt;h3 id=&quot;ZoWY&quot;&gt;Conventional Commits&lt;/h3&gt;
  &lt;p id=&quot;BNwH&quot;&gt;Стандарт &lt;strong&gt;Conventional Commits&lt;/strong&gt; (англ. «соглашение о коммитах») отличается качественной документацией и подробной проработкой. Он подходит для репозиториев с исходным кодом программ. Использовать его для других типов проектов (например, для перевода книги) было бы неудобно.Conventional Commits предлагает такой формат коммита: &lt;code&gt;&amp;lt;type&amp;gt;: &amp;lt;сообщение&amp;gt;&lt;/code&gt;. Первая часть &lt;code&gt;type&lt;/code&gt; — это тип изменений. Таких типов достаточно много. Вот два примера:&lt;/p&gt;
  &lt;ul id=&quot;MkFT&quot;&gt;
    &lt;li id=&quot;KLfr&quot;&gt;&lt;code&gt;feat&lt;/code&gt; (сокращение от англ. &lt;em&gt;feature&lt;/em&gt;) — для новой функциональности;&lt;/li&gt;
    &lt;li id=&quot;ljKc&quot;&gt;&lt;code&gt;fix&lt;/code&gt; (от англ. «исправить», «устранить») — для исправленных ошибок.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;OMEQ&quot;&gt;Более подробный список можно увидеть &lt;a href=&quot;https://www.conventionalcommits.org/ru/v1.0.0-beta.4/#%D1%81%D0%BF%D0%B5%D1%86%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F&quot; target=&quot;_blank&quot;&gt;на сайте с описанием этого стиля&lt;/a&gt;.&lt;/p&gt;
  &lt;p id=&quot;YM68&quot;&gt;Например, сообщение может быть таким.&lt;/p&gt;
  &lt;pre id=&quot;V9yN&quot;&gt;git commit -m &amp;quot;feat: добавить подсчёт суммы заказов за неделю&amp;quot;&lt;/pre&gt;
  &lt;h3 id=&quot;mUbh&quot;&gt;GitHub-стиль&lt;/h3&gt;
  &lt;p id=&quot;xVUG&quot;&gt;GitHub можно использовать не только для хранения файлов проекта, но и для ведения списка &lt;strong&gt;задач&lt;/strong&gt; (англ. &lt;em&gt;issue&lt;/em&gt;) этого проекта. Если коммит «закрывает» или «решает» какую-то задачу, то в его сообщении удобно указывать ссылку на неё. Для этого в любом месте сообщения нужно указать &lt;code&gt;#&amp;lt;номер задачи&amp;gt;&lt;/code&gt;. Например, вот так.&lt;/p&gt;
  &lt;pre id=&quot;CQCe&quot;&gt;$ git commit -m &amp;quot;Исправить #334, добавить график температуры&amp;quot; &lt;/pre&gt;
  &lt;p id=&quot;gtG9&quot;&gt;В таком случае GitHub свяжет коммит и задачу.&lt;/p&gt;
  &lt;h2 id=&quot;Fgmt&quot;&gt;Как исправить коммит&lt;/h2&gt;
  &lt;p id=&quot;biSo&quot;&gt;Иногда в только что выполненном коммите нужно что-то поменять: например, добавить ещё пару файлов или заменить сообщение на более информативное.&lt;/p&gt;
  &lt;p id=&quot;AGWG&quot;&gt;В таком случае можно внести правки в уже сделанный коммит с помощью опции &lt;code&gt;--amend&lt;/code&gt; (от англ. &lt;em&gt;amend —&lt;/em&gt; «исправить», «дополнить») у команды &lt;code&gt;commit&lt;/code&gt;: &lt;code&gt;git commit --amend&lt;/code&gt;. Разберём, как она работает.&lt;/p&gt;
  &lt;blockquote id=&quot;v2cD&quot;&gt;💡 Важно: опция &lt;code&gt;--amend&lt;/code&gt; работает только с последним коммитом (&lt;code&gt;HEAD&lt;/code&gt;). Для исправления более ранних коммитов есть другие команды. Мы рассмотрим их в следующих модулях курса.&lt;/blockquote&gt;
  &lt;h3 id=&quot;28pY&quot;&gt;Подготавливаем репозиторий&lt;/h3&gt;
  &lt;p id=&quot;qF7r&quot;&gt;Создайте тренировочный репозиторий для отработки команды.&lt;/p&gt;
  &lt;pre id=&quot;bSxN&quot;&gt;$ mkdir ~/dev/commit-amend-fun
$ cd ~/dev/commit-amend-fun
$ git init
# пропустим вывод git init &lt;/pre&gt;
  &lt;h3 id=&quot;p7bk&quot;&gt;Дополнить коммит новыми файлами — &lt;code&gt;git commit --amend --no-edit&lt;/code&gt;&lt;/h3&gt;
  &lt;p id=&quot;4KpG&quot;&gt;Представьте, что делаете небольшой сайт и для этого создали файл-страницу &lt;code&gt;main.html&lt;/code&gt;, а также файл со стилями &lt;code&gt;common.css&lt;/code&gt;.&lt;/p&gt;
  &lt;pre id=&quot;a9Hg&quot;&gt;$ touch main.html 
$ touch common.css 
# дальше отредактировали оба файла&lt;/pre&gt;
  &lt;p id=&quot;08wQ&quot;&gt;В какой-то момент вы забыли о файле &lt;code&gt;common.css&lt;/code&gt; и добавили в коммит только &lt;code&gt;main.html&lt;/code&gt;.&lt;/p&gt;
  &lt;pre id=&quot;BIRH&quot;&gt;$ git add main.html 
$ git commit -m &amp;quot;Добавить главную страницу&amp;quot; 
$ git log --oneline 
777fec3 Добавить главную страницу&lt;/pre&gt;
  &lt;p id=&quot;LVJG&quot;&gt;Файл &lt;code&gt;common.css&lt;/code&gt; так и остался «висеть» в &lt;code&gt;untracked&lt;/code&gt;. В этом легко убедиться, если вызвать &lt;code&gt;git status&lt;/code&gt;.&lt;/p&gt;
  &lt;figure id=&quot;Khwy&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/3f/3a/3f3a5aaa-4797-48a8-ae21-038e8bc20a28.png&quot; width=&quot;652&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;OeLG&quot;&gt;Дополните последний коммит забытым файлом &lt;code&gt;common.css&lt;/code&gt; с помощью опции &lt;code&gt;--amend&lt;/code&gt;.&lt;/p&gt;
  &lt;pre id=&quot;xOfb&quot;&gt;$ git add common.css 
# добавили файл common.css в список на коммит как обычно 

# но вместо команды commit -m &amp;#x27;...&amp;#x27; 
# будет: 
$ git commit --amend --no-edit 

$ git log --oneline 
8340eb2 Добавить главную страницу 
# коммит в истории всё ещё один (но у него новый хеш)&lt;/pre&gt;
  &lt;figure id=&quot;4B7U&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/31/f4/31f4c652-7fe4-4b35-a2a5-70009bdbda32.png&quot; width=&quot;819&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;9fWy&quot;&gt;С опцией &lt;code&gt;--amend&lt;/code&gt; команда &lt;code&gt;commit&lt;/code&gt; не создаст новый коммит, а дополнит последний, просто добавив в него файл &lt;code&gt;common.css&lt;/code&gt;. При этом хеш последнего коммита изменится, потому что изменился список файлов в коммите.Обратите внимание на опцию &lt;code&gt;--no-edit&lt;/code&gt;. Она сообщает команде &lt;code&gt;commit&lt;/code&gt;, что сообщение коммита нужно оставить как было.&lt;/p&gt;
  &lt;p id=&quot;w3MD&quot;&gt;Точно так же можно добавить не новый файл, а дополнительные изменения в уже добавленном в коммит файле.&lt;/p&gt;
  &lt;pre id=&quot;LD39&quot;&gt;# ещё раз отредактировали main.html

$ git add main.html # добавили в список на коммит
$ git commit --amend --no-edit &lt;/pre&gt;
  &lt;blockquote id=&quot;ONaX&quot;&gt;💡 &lt;strong&gt;Что же выбрать: новый коммит или &lt;code&gt;--amend&lt;/code&gt;?&lt;/strong&gt; &lt;br /&gt;В нашем примере вместо изменения последнего коммита можно было также выполнить новый коммит с одним файлом &lt;code&gt;common.css&lt;/code&gt;. Кажется, что так проще, но добавить изменения в уже существующий коммит может быть правильнее.&lt;br /&gt;Например, через месяц кто-то захочет просмотреть историю изменений. Намного проще понять, что изменилось, если оба файла находятся в одном коммите. Иначе коммит со второй порцией изменений придётся искать.&lt;/blockquote&gt;
  &lt;h3 id=&quot;Arqp&quot;&gt;Изменить сообщение коммита — &lt;code&gt;git commit --amend -m &amp;quot;Новое сообщение&amp;quot;&lt;/code&gt;&lt;/h3&gt;
  &lt;p id=&quot;MkYz&quot;&gt;Может быть и так, что добавлять новые файлы в коммит не нужно, зато понадобилось изменить сообщение.&lt;/p&gt;
  &lt;p id=&quot;jToR&quot;&gt;Допустим, хочется заменить сообщение &lt;code&gt;Добавить главную страницу&lt;/code&gt; на &lt;code&gt;Добавить главную страницу и стили&lt;/code&gt;. Сделать это можно через &lt;code&gt;commit --amend&lt;/code&gt; с флагом &lt;code&gt;-m&lt;/code&gt;.&lt;/p&gt;
  &lt;pre id=&quot;jSOX&quot;&gt;$ git commit --amend -m &amp;quot;Добавить главную страницу и стили&amp;quot;
$ git log --oneline
a31fa24 Добавить главную страницу и стили &lt;/pre&gt;
  &lt;figure id=&quot;Tl0O&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/77/26/7726cc23-ed0c-4241-85c5-57bbfa861cd0.png&quot; width=&quot;635&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;wOD3&quot;&gt;Хеш коммита снова поменялся, потому что изменились сообщение и время коммита. При этом файлы в коммите остались те же: &lt;code&gt;main.html&lt;/code&gt; и &lt;code&gt;common.css&lt;/code&gt;.&lt;/p&gt;
  &lt;h2 id=&quot;na8h&quot;&gt;Как откатиться назад, если «всё сломалось»&lt;/h2&gt;
  &lt;p id=&quot;iXJ7&quot;&gt;На разных этапах работы с Git могут происходить похожие ситуации:&lt;/p&gt;
  &lt;ul id=&quot;9Dgw&quot;&gt;
    &lt;li id=&quot;nFb5&quot;&gt;В список на коммит попал лишний файл (например, временный). Нужно «вынуть» его из списка.&lt;/li&gt;
    &lt;li id=&quot;U8uP&quot;&gt;Последние несколько коммитов ошибочные: например, сделали не то, что было нужно, или нарушили логику. Хочется «откатить» сразу несколько коммитов, вернуть «как было вчера».&lt;/li&gt;
    &lt;li id=&quot;0Fhi&quot;&gt;Случайно изменился файл, который вообще не должен был меняться. Например, вы открыли не тот файл в редакторе и начали его исправлять.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;8WPw&quot;&gt;В этом уроке рассмотрим такие случаи и научим вас «откатывать» нежелательные изменения.&lt;/p&gt;
  &lt;h3 id=&quot;YMem&quot;&gt;Выполнить unstage изменений — &lt;code&gt;git restore --staged &amp;lt;file&amp;gt;&lt;/code&gt;&lt;/h3&gt;
  &lt;p id=&quot;nT6B&quot;&gt;Допустим, вы создали или изменили какой-то файл и добавили его в список «на коммит» (staging area) с помощью &lt;code&gt;git add&lt;/code&gt;, но потом передумали включать его туда. Убрать файл из staging поможет команда &lt;code&gt;git restore --staged &amp;lt;file&amp;gt;&lt;/code&gt; (от англ. &lt;em&gt;restore&lt;/em&gt; — «восстановить»).&lt;/p&gt;
  &lt;p id=&quot;nzAf&quot;&gt;В терминале это будет выглядеть примерно так.&lt;/p&gt;
  &lt;pre id=&quot;vu6S&quot;&gt;$ touch example.txt # создали ненужный файл
$ git add example.txt # добавили его в staged

$ git status # проверили статус
Changes to be committed:
  (use &amp;quot;git restore --staged &amp;lt;file&amp;gt;...&amp;quot; to unstage)
        new file:   example.txt

$ git restore --staged example.txt
$ git status # проверили статус

Untracked files:
  (use &amp;quot;git add &amp;lt;file&amp;gt;...&amp;quot; to include in what will be committed)
        example.txt

no changes added to commit (use &amp;quot;git add&amp;quot; and/or &amp;quot;git commit -a&amp;quot;)
# файл example.txt из staged вернулся обратно в untracked &lt;/pre&gt;
  &lt;figure id=&quot;ZQTo&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/85/24/8524fab6-a441-41ec-9d90-9e7ff8482c61.png&quot; width=&quot;647&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;RD57&quot;&gt;Вызов &lt;code&gt;git restore --staged example.txt&lt;/code&gt; перевёл &lt;code&gt;example.txt&lt;/code&gt; из &lt;code&gt;staged&lt;/code&gt; обратно в &lt;code&gt;untracked&lt;/code&gt;.&lt;/p&gt;
  &lt;p id=&quot;v2rK&quot;&gt;Чтобы «сбросить» все файлы из &lt;code&gt;staged&lt;/code&gt; обратно в &lt;code&gt;untracked&lt;/code&gt;/&lt;code&gt;modified&lt;/code&gt;, можно воспользоваться командой &lt;code&gt;git restore --staged .&lt;/code&gt;: она сбросит всю текущую папку (&lt;code&gt;.&lt;/code&gt;).&lt;/p&gt;
  &lt;h3 id=&quot;uX7S&quot;&gt;«Откатить» коммит — &lt;code&gt;git reset --hard &amp;lt;commit hash&amp;gt;&lt;/code&gt;&lt;/h3&gt;
  &lt;p id=&quot;BiD0&quot;&gt;Иногда нужно «откатить» то, что уже было закоммичено, то есть вернуть состояние репозитория к более раннему. Для этого используют команду &lt;code&gt;git reset --hard &amp;lt;commit hash&amp;gt;&lt;/code&gt; (от англ. &lt;em&gt;reset&lt;/em&gt; — «сброс», «обнуление» и &lt;em&gt;hard&lt;/em&gt; — «суровый»).&lt;/p&gt;
  &lt;pre id=&quot;fndm&quot;&gt;$ git log --oneline # хеш можно найти в истории
7b972f5 (HEAD -&amp;gt; master) style: добавить комментарии, расставить отступы
b576d89 feat: добавить массив Expenses и цикл для добавления трат # вот сюда и вернёмся
4b58962 refactor: разделить analyzeExpenses() на countSum() и saveExpenses()

$ git reset --hard b576d89
# теперь мы на этом коммите
HEAD is now at b576d89 feat: добавить массив Expenses и цикл для добавления трат &lt;/pre&gt;
  &lt;p id=&quot;uiCZ&quot;&gt;Теперь коммит &lt;code&gt;b576d89&lt;/code&gt; стал последним: вся дальнейшая разработка будет вестись от него. Файл также вернулся к тому состоянию, в котором был в момент этого коммита. А коммит &lt;code&gt;7b972f5&lt;/code&gt; Git просто удалил. Это можно проверить, снова запросив лог. Он покажет следующее.&lt;/p&gt;
  &lt;pre id=&quot;U7j2&quot;&gt;$ git log --oneline
b576d89 (HEAD -&amp;gt; master) feat: добавить массив Expenses и цикл для добавления трат
4b58962 refactor: разделить analyzeExpenses() на countSum() и saveExpenses() &lt;/pre&gt;
  &lt;p id=&quot;rWGP&quot;&gt;Вот так схематично выглядит весь процесс «отката» с помощью &lt;code&gt;git reset --hard &amp;lt;hash&amp;gt;&lt;/code&gt;.&lt;/p&gt;
  &lt;figure id=&quot;kg4j&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/03/ca/03ca3933-c9bb-4714-9c93-114fedc81d5d.png&quot; width=&quot;2902&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;6KTO&quot;&gt;«Откатить» изменения, которые не попали ни в staging, ни в коммит, — &lt;code&gt;git restore &amp;lt;file&amp;gt;&lt;/code&gt;&lt;/h3&gt;
  &lt;p id=&quot;As7z&quot;&gt;Может быть так, что вы случайно изменили файл, который не планировали. Теперь он отображается в &lt;code&gt;Changes not staged for commit&lt;/code&gt; (&lt;code&gt;modified&lt;/code&gt;). Чтобы вернуть всё «как было», можно выполнить команду &lt;code&gt;git restore &amp;lt;file&amp;gt;&lt;/code&gt;.&lt;/p&gt;
  &lt;pre id=&quot;xMV4&quot;&gt;# случайно изменили файл example.txt
$ git status
On branch main
Changes not staged for commit:
  (use &amp;quot;git add &amp;lt;file&amp;gt;...&amp;quot; to update what will be committed)
  (use &amp;quot;git restore &amp;lt;file&amp;gt;...&amp;quot; to discard changes in working directory)
          modified:   example.txt

$ git restore example.txt
$ git status
On branch main
nothing to commit, working tree clean &lt;/pre&gt;
  &lt;p id=&quot;uAR7&quot;&gt;Изменения в файле «откатятся» до последней версии, которая была сохранена через &lt;code&gt;git commit&lt;/code&gt; или &lt;code&gt;git add&lt;/code&gt;.&lt;/p&gt;
  &lt;p id=&quot;ZqlL&quot;&gt;Вот о чём мы рассказали:&lt;/p&gt;
  &lt;ul id=&quot;fKFi&quot;&gt;
    &lt;li id=&quot;pbwQ&quot;&gt;Команда &lt;code&gt;git restore --staged &amp;lt;file&amp;gt;&lt;/code&gt; переведёт файл из &lt;code&gt;staged&lt;/code&gt; обратно в &lt;code&gt;modified&lt;/code&gt; или &lt;code&gt;untracked&lt;/code&gt;.&lt;/li&gt;
    &lt;li id=&quot;dtBm&quot;&gt;Команда &lt;code&gt;git reset --hard &amp;lt;commit hash&amp;gt;&lt;/code&gt; «откатит» историю до коммита с хешем &lt;code&gt;&amp;lt;hash&amp;gt;&lt;/code&gt;. Более поздние коммиты потеряются!&lt;/li&gt;
    &lt;li id=&quot;mm4K&quot;&gt;Команда &lt;code&gt;git restore &amp;lt;file&amp;gt;&lt;/code&gt; «откатит» изменения в файле до последней сохранённой (в коммите или в staging) версии.&lt;/li&gt;
  &lt;/ul&gt;

</content></entry><entry><id>alexbrin:Jv3rFL9qZf5</id><link rel="alternate" type="text/html" href="https://teletype.in/@alexbrin/Jv3rFL9qZf5?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=alexbrin"></link><title>Навигация по коммитам. Статусы файлов</title><published>2024-02-18T23:02:43.823Z</published><updated>2024-02-18T23:02:43.823Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img2.teletype.in/files/58/e5/58e508c8-cc48-49f3-8dd5-0b0ac51bc2b7.png"></media:thumbnail><category term="git-yandeks-praktikum" label="Git Яндекс Практикум"></category><summary type="html">&lt;img src=&quot;https://img4.teletype.in/files/f5/54/f5542cb8-d51a-4e06-bb8a-cec9bc939893.png&quot;&gt;В процессе работы с Git вам будет часто встречаться понятие «хеш коммита». Эти странные строчки с бессмысленным (на первый взгляд) набором букв и цифр вы могли видеть, когда вызывали команду git log и выводили историю коммитов.</summary><content type="html">
  &lt;nav&gt;
    &lt;ul&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#LpiD&quot;&gt;Хеш — идентификатор коммита&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#SZ6Y&quot;&gt;Что такое хеш. Хеширование коммитов&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#aDO7&quot;&gt;Хеш — основной идентификатор коммита&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#Zqf2&quot;&gt;Исследуем лог&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#SIp3&quot;&gt;Элементы описания коммита&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#KfUZ&quot;&gt;Получить сокращённый лог — git log --oneline&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#aP4W&quot;&gt;HEAD — всему голова&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#03vD&quot;&gt;Файл HEAD&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#OduN&quot;&gt;Статусы файлов в Git&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_3&quot;&gt;&lt;a href=&quot;#ECZf&quot;&gt;Статусы untracked/tracked, staged и modified&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_3&quot;&gt;&lt;a href=&quot;#a5KH&quot;&gt;Про staged и modified&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_3&quot;&gt;&lt;a href=&quot;#jkcZ&quot;&gt;Типичный жизненный цикл файла в Git&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#6A3R&quot;&gt;Как читать git status&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_3&quot;&gt;&lt;a href=&quot;#K5vC&quot;&gt;Какие состояния показывает git status&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_3&quot;&gt;&lt;a href=&quot;#P3He&quot;&gt;Подготавливаем репозиторий&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_3&quot;&gt;&lt;a href=&quot;#4QWm&quot;&gt;Типичные варианты вывода git status&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/nav&gt;
  &lt;h2 id=&quot;LpiD&quot;&gt;Хеш — идентификатор коммита&lt;/h2&gt;
  &lt;p id=&quot;C5Mi&quot;&gt;В процессе работы с Git вам будет часто встречаться понятие «хеш коммита». Эти странные строчки с бессмысленным (на первый взгляд) набором букв и цифр вы могли видеть, когда вызывали команду &lt;code&gt;git log&lt;/code&gt; и выводили историю коммитов.&lt;/p&gt;
  &lt;figure id=&quot;DyQc&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/f5/54/f5542cb8-d51a-4e06-bb8a-cec9bc939893.png&quot; width=&quot;655&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;SZ6Y&quot;&gt;Что такое хеш. Хеширование коммитов&lt;/h3&gt;
  &lt;p id=&quot;kiCo&quot;&gt;&lt;strong&gt;Хеширование&lt;/strong&gt; (от англ. &lt;em&gt;hash&lt;/em&gt;, «рубить», «крошить», «мешанина») — это способ преобразовать набор данных и получить их «отпечаток» (англ. &lt;em&gt;fingerprint&lt;/em&gt;).&lt;/p&gt;
  &lt;p id=&quot;CA9y&quot;&gt;Информация о коммите — это набор данных: когда был сделан коммит, содержимое файлов в репозитории на момент коммита и ссылка на предыдущий, или &lt;strong&gt;родительский&lt;/strong&gt; (англ. &lt;em&gt;parent&lt;/em&gt;), коммит.&lt;/p&gt;
  &lt;p id=&quot;Nlmq&quot;&gt;Git хеширует (преобразует) информацию о коммите с помощью алгоритма &lt;strong&gt;SHA-1&lt;/strong&gt; (от англ. &lt;em&gt;&lt;strong&gt;S&lt;/strong&gt;ecure &lt;strong&gt;H&lt;/strong&gt;ash &lt;strong&gt;A&lt;/strong&gt;lgorithm&lt;/em&gt; — «безопасный алгоритм хеширования») и получает для каждого коммита свой уникальный &lt;strong&gt;хеш&lt;/strong&gt; — результат хеширования.&lt;/p&gt;
  &lt;p id=&quot;0Ds4&quot;&gt;Обычно хеш — это короткая (4040 символов в случае SHA-1) строка, которая состоит из цифр 0—90—9 и латинских букв —A—F (неважно, заглавных или строчных). Она обладает следующими важными свойствами:&lt;/p&gt;
  &lt;ul id=&quot;xB4P&quot;&gt;
    &lt;li id=&quot;usiF&quot;&gt;если хеш получить дважды для одного и того же набора входных данных, то результат будет гарантированно одинаковый;&lt;/li&gt;
    &lt;li id=&quot;M3Hp&quot;&gt;если хоть что-то в исходных данных поменяется (хотя бы один символ), то хеш тоже изменится (причём сильно).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;ne4G&quot;&gt;Чтобы убедиться в этом, можно поэкспериментировать с SHA-1 &lt;a href=&quot;https://emn178.github.io/online-tools/sha1.html&quot; target=&quot;_blank&quot;&gt;на этом сайте&lt;/a&gt; — попробуйте ввести в поле &lt;strong&gt;input&lt;/strong&gt; (англ. «ввод») разные символы, слова или предложения и понаблюдайте, как меняется хеш в поле &lt;strong&gt;output&lt;/strong&gt; (англ. «вывод»).&lt;/p&gt;
  &lt;h3 id=&quot;aDO7&quot;&gt;Хеш — основной идентификатор коммита&lt;/h3&gt;
  &lt;p id=&quot;7xHQ&quot;&gt;Git хранит таблицу соответствий &lt;code&gt;хеш → информация о коммите&lt;/code&gt;. Если вы знаете хеш, вы можете узнать всё остальное: автора и дату коммита и содержимое закоммиченных файлов. Можно сказать, что хеш — основной идентификатор коммита.&lt;/p&gt;
  &lt;p id=&quot;1uzv&quot;&gt;При работе с Git хеши будут встречаться вам регулярно. Их можно будет передавать в качестве параметра разным Git-командам, чтобы указать, с каким коммитом нужно произвести то или иное действие.&lt;/p&gt;
  &lt;p id=&quot;btTK&quot;&gt;Все хеши и таблицу &lt;code&gt;хеш → информация о коммите&lt;/code&gt; Git сохраняет в служебные файлы. Они находятся в скрытой папке &lt;code&gt;.git&lt;/code&gt; в репозитории проекта.&lt;/p&gt;
  &lt;h2 id=&quot;Zqf2&quot;&gt;Исследуем лог&lt;/h2&gt;
  &lt;p id=&quot;PaZ0&quot;&gt;В этом уроке рассмотрим подробнее, из каких элементов состоит описание коммита, а также как вывести сокращённый &lt;strong&gt;лог&lt;/strong&gt; (от англ. &lt;em&gt;log&lt;/em&gt; — «журнал [записей]»). Сокращённый лог полезен, если нужно быстро найти нужный коммит среди сотни других.&lt;/p&gt;
  &lt;h3 id=&quot;SIp3&quot;&gt;Элементы описания коммита&lt;/h3&gt;
  &lt;p id=&quot;LdzH&quot;&gt;После вызова &lt;code&gt;git log&lt;/code&gt; появляется список коммитов.&lt;/p&gt;
  &lt;figure id=&quot;KAXm&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/60/8e/608e7484-a0c8-439a-b33c-b7858bb3863a.png&quot; width=&quot;2880&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;7fLE&quot;&gt;Разберём элементы, из которых состоит описание:&lt;/p&gt;
  &lt;ul id=&quot;ar36&quot;&gt;
    &lt;li id=&quot;4xzP&quot;&gt;строка из цифр и латинских букв после слова &lt;strong&gt;commit&lt;/strong&gt; — это хеш коммита;&lt;/li&gt;
    &lt;li id=&quot;OirZ&quot;&gt;&lt;strong&gt;Author&lt;/strong&gt; — имя автора и его электронная почта;&lt;/li&gt;
    &lt;li id=&quot;1eyq&quot;&gt;&lt;strong&gt;Date&lt;/strong&gt; — дата и время создания коммита;&lt;/li&gt;
    &lt;li id=&quot;YH5w&quot;&gt;в конце находится сообщение коммита.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3 id=&quot;KfUZ&quot;&gt;Получить сокращённый лог — &lt;code&gt;git log --oneline&lt;/code&gt;&lt;/h3&gt;
  &lt;p id=&quot;JuTE&quot;&gt;Получить сокращённый лог можно с помощью команды &lt;code&gt;git log&lt;/code&gt; с флагом &lt;code&gt;--oneline&lt;/code&gt; (англ. «одной строкой»). В терминале появятся только первые несколько символов хеша каждого коммита и их комментарии.&lt;/p&gt;
  &lt;figure id=&quot;VuRx&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/65/76/6576ac56-a9a5-4256-bee3-617fe1ec8761.png&quot; width=&quot;750&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;ke4h&quot;&gt;Сокращённый лог полезен, если в репозитории уже много коммитов — например, сотни или тысячи. В этом случае можно быстро найти нужный по описанию.Сокращённый хеш (то есть первые несколько символов полного) можно использовать точно так же, как и полный. Для этого команда &lt;code&gt;git log --oneline&lt;/code&gt; автоматически подбирает такую длину сокращённых хешей, чтобы они были уникальными в пределах репозитория и Git всегда мог понять, о каком коммите идёт речь.&lt;/p&gt;
  &lt;h2 id=&quot;aP4W&quot;&gt;HEAD — всему голова&lt;/h2&gt;
  &lt;p id=&quot;YrLo&quot;&gt;При вызове команды &lt;code&gt;git log&lt;/code&gt; вы также могли заметить надпись &lt;code&gt;(HEAD -&amp;gt; master)&lt;/code&gt; после хеша одного из коммитов. В этом уроке расскажем, что она означает.&lt;/p&gt;
  &lt;figure id=&quot;RGWf&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/a2/0d/a20d26d2-2053-4889-a898-e4846ef4296b.png&quot; width=&quot;652&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;03vD&quot;&gt;Файл &lt;code&gt;HEAD&lt;/code&gt;&lt;/h3&gt;
  &lt;p id=&quot;2H7h&quot;&gt;Файл &lt;code&gt;HEAD&lt;/code&gt; (англ. «голова», «головной») — один из служебных файлов папки &lt;code&gt;.git&lt;/code&gt;. Он указывает на коммит, который сделан последним (то есть на самый новый).&lt;/p&gt;
  &lt;p id=&quot;FZgw&quot;&gt;В этом можно убедиться с помощью терминала. Перейдите в папку &lt;code&gt;.git&lt;/code&gt; командой &lt;code&gt;cd&lt;/code&gt;. Посмотрите содержимое файла &lt;code&gt;HEAD&lt;/code&gt; командой &lt;code&gt;cat&lt;/code&gt;.&lt;/p&gt;
  &lt;pre id=&quot;mte2&quot;&gt;$ pwd 
# посмотрели, где мы /Users/user/dev/first-project 

$ cd .git/ 
$ ls 
# посмотрели, какие есть файлы 
COMMIT_EDITMSG ORIG_HEAD description index logs/ refs/ 
HEAD config hooks/ info/ objects/ 

$ cat HEAD 
# команда cat показывает содержимое файла 
ref: refs/heads/master # в файле вот такая ссылка&lt;/pre&gt;
  &lt;figure id=&quot;oyaL&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/75/20/752090aa-35ac-4fc3-97a6-49fa966989d9.png&quot; width=&quot;957&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;sAMg&quot;&gt;Внутри &lt;code&gt;HEAD&lt;/code&gt; — ссылка на служебный файл: &lt;code&gt;refs/heads/master&lt;/code&gt; (или &lt;code&gt;refs/heads/main&lt;/code&gt; в зависимости от названия ветки). Если заглянуть в этот файл, можно увидеть хеш последнего коммита.&lt;/p&gt;
  &lt;pre id=&quot;BQ7z&quot;&gt;$ cat refs/heads/master # взяли ссылку из файла HEAD
# внутри хеш
e007f5035f113f9abca78fe2149c593959da5eb7&lt;/pre&gt;
  &lt;figure id=&quot;9sWP&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/61/ac/61accedb-c9ff-4245-8b4d-bf395f7bb11a.png&quot; width=&quot;768&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;LJQw&quot;&gt;Когда вы делаете коммит, Git обновляет &lt;code&gt;refs/heads/master&lt;/code&gt; — записывает в него хеш последнего коммита. Получается, что &lt;code&gt;HEAD&lt;/code&gt; тоже обновляется, так как ссылается на &lt;code&gt;refs/heads/master&lt;/code&gt;.&lt;/p&gt;
  &lt;p id=&quot;WjmR&quot;&gt;При работе с Git указатель &lt;code&gt;HEAD&lt;/code&gt; используется довольно часто. Мы уже упоминали, что многие команды Git принимают в качестве параметра хеш коммита. Если нужно передать последний коммит, то вместо его хеша можно просто написать слово &lt;code&gt;HEAD&lt;/code&gt; — Git поймёт, что вы имели в виду последний коммит.&lt;/p&gt;
  &lt;h1 id=&quot;OduN&quot;&gt;Статусы файлов в Git&lt;/h1&gt;
  &lt;p id=&quot;epKy&quot;&gt;До появления Git системы контроля версий выделяли только два статуса у файлов: «уже закоммичен» и «ещё не закоммичен». Например, в Subversion (самой популярной VCS до эпохи Git) не нужно было выполнять команду — аналог &lt;code&gt;git add&lt;/code&gt;, а можно было просто сделать коммит (&lt;code&gt;svn commit&lt;/code&gt;). Эта команда по умолчанию добавляла в коммит все новые и изменённые файлы.Такое поведение интуитивно более понятно. Зато Git даёт больше контроля за состоянием файлов. Хотя сначала это может показаться сложным, со временем вы оцените удобство более явного подхода.В этом уроке разберём подробнее, в каких состояниях (или статусах) могут находиться файлы в репозитории. А ещё проследим типичный жизненный цикл файла в Git.&lt;/p&gt;
  &lt;h3 id=&quot;ECZf&quot;&gt;Статусы &lt;code&gt;untracked&lt;/code&gt;/&lt;code&gt;tracked&lt;/code&gt;, &lt;code&gt;staged&lt;/code&gt; и &lt;code&gt;modified&lt;/code&gt;&lt;/h3&gt;
  &lt;p id=&quot;MldQ&quot;&gt;Одна из ключевых задач Git — отслеживать изменения файлов в репозитории. Для этого каждый файл помечается каким-либо статусом. Рассмотрим основные.&lt;/p&gt;
  &lt;ul id=&quot;x6US&quot;&gt;
    &lt;li id=&quot;guEL&quot;&gt;&lt;strong&gt;&lt;code&gt;untracked&lt;/code&gt;&lt;/strong&gt; (англ. «неотслеживаемый») &lt;br /&gt;Мы говорили, что новые файлы в Git-репозитории помечаются как &lt;code&gt;untracked&lt;/code&gt;, то есть неотслеживаемые. Git «видит», что такой файл существует, но не следит за изменениями в нём. У &lt;code&gt;untracked&lt;/code&gt;-файла нет предыдущих версий, зафиксированных в коммитах или через команду &lt;code&gt;git add&lt;/code&gt;.&lt;/li&gt;
    &lt;li id=&quot;uc2z&quot;&gt;&lt;strong&gt;&lt;code&gt;staged&lt;/code&gt;&lt;/strong&gt; (англ. «подготовленный») &lt;br /&gt;После выполнения команды &lt;code&gt;git add&lt;/code&gt; файл попадает в &lt;strong&gt;staging area&lt;/strong&gt; (от англ. &lt;em&gt;stage&lt;/em&gt; — «сцена», «этап [процесса]» и &lt;em&gt;area&lt;/em&gt; — «область»), то есть в список файлов, которые войдут в коммит. В этот момент файл находится в состоянии &lt;code&gt;staged&lt;/code&gt;.&lt;/li&gt;
    &lt;li id=&quot;jwHs&quot;&gt;&lt;strong&gt;&lt;code&gt;tracked&lt;/code&gt;&lt;/strong&gt; (англ. «отслеживаемый») &lt;br /&gt;Состояние &lt;code&gt;tracked&lt;/code&gt; — это противоположность &lt;code&gt;untracked&lt;/code&gt;. Оно довольно широкое по смыслу: в него попадают файлы, которые уже были зафиксированы с помощью &lt;code&gt;git commit&lt;/code&gt;, а также файлы, которые были добавлены в staging area командой &lt;code&gt;git add&lt;/code&gt;. То есть все файлы, в которых Git так или иначе отслеживает изменения.&lt;/li&gt;
    &lt;li id=&quot;cbiO&quot;&gt;&lt;strong&gt;&lt;code&gt;modified&lt;/code&gt;&lt;/strong&gt; (англ. «изменённый») &lt;br /&gt;Состояние &lt;code&gt;modified&lt;/code&gt; означает, что Git сравнил содержимое файла с последней сохранённой версией и нашёл отличия. Например, файл был закоммичен и после этого изменён.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3 id=&quot;a5KH&quot;&gt;Про &lt;code&gt;staged&lt;/code&gt; и &lt;code&gt;modified&lt;/code&gt;&lt;/h3&gt;
  &lt;p id=&quot;Q8Zq&quot;&gt;Команда &lt;code&gt;git add&lt;/code&gt; добавляет в staging area только текущее содержимое файла. Если вы, например, сделаете &lt;code&gt;git add file.txt&lt;/code&gt;, а затем измените &lt;code&gt;file.txt&lt;/code&gt;, то новое содержимое файла не будет находиться в staging.&lt;/p&gt;
  &lt;p id=&quot;eQ4Y&quot;&gt;Git сообщит об этом с помощью статуса &lt;code&gt;modified&lt;/code&gt;: файл изменён относительно той версии, которая уже в staging. Чтобы добавить в staging последнюю версию, нужно выполнить &lt;code&gt;git add file.txt&lt;/code&gt; ещё раз.&lt;/p&gt;
  &lt;h3 id=&quot;jkcZ&quot;&gt;Типичный жизненный цикл файла в Git&lt;/h3&gt;
  &lt;p id=&quot;U8y7&quot;&gt;Может показаться, что файлы в репозитории попадают в разные состояния хаотично. На практике это не так, и у большинства файлов вполне предсказуемый путь.&lt;/p&gt;
  &lt;figure id=&quot;qxLi&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/e1/a3/e1a30514-3ba4-4ad3-a069-4b24443f1fa7.png&quot; width=&quot;2880&quot; /&gt;
  &lt;/figure&gt;
  &lt;ol id=&quot;P74F&quot;&gt;
    &lt;li id=&quot;GpJZ&quot;&gt;Файл только что создали. Git ещё не отслеживает содержимое этого файла. Состояние: &lt;code&gt;untracked&lt;/code&gt;.&lt;/li&gt;
    &lt;li id=&quot;hk0v&quot;&gt;Файл добавили в staging area с помощью &lt;code&gt;git add&lt;/code&gt;. Состояние: &lt;code&gt;staged&lt;/code&gt; (+ &lt;code&gt;tracked&lt;/code&gt;).&lt;/li&gt;
    &lt;ul id=&quot;aKV4&quot;&gt;
      &lt;li id=&quot;N0jG&quot;&gt;Возможно, изменили файл ещё раз. Состояния: &lt;code&gt;staged&lt;/code&gt;, &lt;code&gt;modified&lt;/code&gt; (+ &lt;code&gt;tracked&lt;/code&gt;). Обратите внимание: &lt;code&gt;staged&lt;/code&gt; и &lt;code&gt;modified&lt;/code&gt; у одного файла, но у разных его версий.&lt;/li&gt;
      &lt;li id=&quot;i3OM&quot;&gt;Ещё раз выполнили &lt;code&gt;git add&lt;/code&gt;. Состояние: &lt;code&gt;staged&lt;/code&gt; (+ &lt;code&gt;tracked&lt;/code&gt;).&lt;/li&gt;
    &lt;/ul&gt;
    &lt;li id=&quot;BAon&quot;&gt;Сделали коммит с помощью &lt;code&gt;git commit&lt;/code&gt;. Состояние: &lt;code&gt;tracked&lt;/code&gt;.&lt;/li&gt;
    &lt;li id=&quot;WEjm&quot;&gt;Изменили файл. Состояние: &lt;code&gt;modified&lt;/code&gt; (+ &lt;code&gt;tracked&lt;/code&gt;).&lt;/li&gt;
    &lt;li id=&quot;7V1r&quot;&gt;Снова добавили в staging area с помощью &lt;code&gt;git add&lt;/code&gt;. Состояния: &lt;code&gt;staged&lt;/code&gt; (+ &lt;code&gt;tracked&lt;/code&gt;).&lt;/li&gt;
    &lt;li id=&quot;RV6G&quot;&gt;Сделали коммит. Состояния: &lt;code&gt;tracked&lt;/code&gt;.&lt;/li&gt;
    &lt;li id=&quot;WQHn&quot;&gt;Повторили пункты 4−74−7 много-много раз.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;2Cln&quot;&gt;Важное:&lt;/p&gt;
  &lt;ul id=&quot;WAyJ&quot;&gt;
    &lt;li id=&quot;xEpq&quot;&gt;Статусом &lt;code&gt;untracked&lt;/code&gt; помечается файл, о существовании которого Git знает, но не следит за изменениями в нём. Этот статус — противоположность &lt;code&gt;tracked&lt;/code&gt;, в который попадают все файлы, отслеживаемые Git.&lt;/li&gt;
    &lt;li id=&quot;asgW&quot;&gt;Файл переходит в статус &lt;code&gt;staged&lt;/code&gt; после выполнения &lt;code&gt;git add&lt;/code&gt;.&lt;/li&gt;
    &lt;li id=&quot;Q1oY&quot;&gt;Статус &lt;code&gt;modified&lt;/code&gt; означает, что файл был изменён.&lt;/li&gt;
    &lt;li id=&quot;w7Jx&quot;&gt;Большинство файлов в проектах «шагает» по следующему циклу: «изменён» → «добавлен в список на коммит» → «закоммичен» → «изменён» → и так далее.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2 id=&quot;6A3R&quot;&gt;Как читать git status&lt;/h2&gt;
  &lt;p id=&quot;wtua&quot;&gt;Частая ошибка при использовании Git — закоммитить лишнее или, наоборот, забыть добавить важный файл в коммит. Этого легко избежать, если не забывать проверять статусы файлов с помощью команды &lt;code&gt;git status&lt;/code&gt;. Как читать её вывод, покажем в этом уроке.&lt;/p&gt;
  &lt;h3 id=&quot;K5vC&quot;&gt;Какие состояния показывает &lt;code&gt;git status&lt;/code&gt;&lt;/h3&gt;
  &lt;p id=&quot;ye2S&quot;&gt;Большинство файлов в типичном проекте будут находиться в состоянии &lt;code&gt;tracked&lt;/code&gt; (то есть закоммичены и не изменены после коммита). Вы не увидите это состояние в выводе команды &lt;code&gt;git status&lt;/code&gt; — иначе она бы каждый раз выводила список вообще всех файлов проекта.&lt;/p&gt;
  &lt;p id=&quot;5QmI&quot;&gt;В итоге &lt;code&gt;git status&lt;/code&gt; показывает только следующие состояния файлов:&lt;/p&gt;
  &lt;ul id=&quot;2hV5&quot;&gt;
    &lt;li id=&quot;wt1a&quot;&gt;&lt;code&gt;staged&lt;/code&gt; (&lt;code&gt;Changes to be committed&lt;/code&gt; в выводе &lt;code&gt;git status&lt;/code&gt;);&lt;/li&gt;
    &lt;li id=&quot;6vwA&quot;&gt;&lt;code&gt;modified&lt;/code&gt; (&lt;code&gt;Changes not staged for commit&lt;/code&gt;);&lt;/li&gt;
    &lt;li id=&quot;iIUZ&quot;&gt;&lt;code&gt;untracked&lt;/code&gt; (&lt;code&gt;Untracked files&lt;/code&gt;).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3 id=&quot;P3He&quot;&gt;Подготавливаем репозиторий&lt;/h3&gt;
  &lt;p id=&quot;uFpH&quot;&gt;Чтобы попрактиковаться, инициализируйте новый репозиторий &lt;code&gt;~/dev/git-status-lesson&lt;/code&gt;. Создайте в нём файл &lt;code&gt;README.md&lt;/code&gt; и закоммитьте его.&lt;/p&gt;
  &lt;pre id=&quot;TqFe&quot;&gt;$ cd ~/dev 
$ mkdir git-status-lesson 
$ cd git-status-lesson 
$ git init 
# тут Git выведет что-нибудь, но мы это пропустим 
$ touch README.md 
$ git add README.md 
$ git commit -m &amp;#x27;Добавить README&amp;#x27; 
~~~~# по традиции первым создадим и закоммитим файл README.md&lt;/pre&gt;
  &lt;figure id=&quot;HNUC&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/80/f4/80f4fc76-893a-4b00-8391-40fd31be5b99.png&quot; width=&quot;736&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;4QWm&quot;&gt;Типичные варианты вывода &lt;code&gt;git status&lt;/code&gt;&lt;/h3&gt;
  &lt;p id=&quot;mzOm&quot;&gt;Рассмотрим четыре примера состояний, в которых может находиться ваш репозиторий.&lt;/p&gt;
  &lt;p id=&quot;wAWL&quot;&gt;&lt;strong&gt;1. Нет ни &lt;code&gt;staged&lt;/code&gt;-, ни &lt;code&gt;modified&lt;/code&gt;-, ни &lt;code&gt;untracked&lt;/code&gt;-файлов.&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;WSlb&quot;&gt;Если ничего не менять в &lt;code&gt;git-status-lesson&lt;/code&gt; после первого коммита, то в нём не должно быть ни изменённых файлов (&lt;code&gt;modified&lt;/code&gt;), ни новых (&lt;code&gt;untracked&lt;/code&gt;), ни добавленных в список на коммит (&lt;code&gt;staged&lt;/code&gt;). Вызовите команду &lt;code&gt;git status&lt;/code&gt;. Её вывод будет примерно таким.&lt;/p&gt;
  &lt;pre id=&quot;cGJ5&quot;&gt;$ git status
On branch master
nothing to commit, working tree clean  &lt;/pre&gt;
  &lt;p id=&quot;6FMm&quot;&gt;Это означает, что в репозитории нет новых или изменённых файлов. Последняя строка &lt;code&gt;nothing to commit, working tree clean&lt;/code&gt; буквально переводится как «нечего коммитить, рабочая директория чиста».&lt;/p&gt;
  &lt;p id=&quot;gaPS&quot;&gt;Первая строка &lt;code&gt;On branch master&lt;/code&gt; сообщает, что текущая ветка — &lt;code&gt;master&lt;/code&gt;.&lt;/p&gt;
  &lt;figure id=&quot;3UR6&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/6e/14/6e1491a0-3489-41af-84c1-e2ae6e706785.png&quot; width=&quot;746&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;fUMp&quot;&gt;&lt;strong&gt;2. Найдены неотслеживаемые файлы.&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;yQXP&quot;&gt;Создайте в папке &lt;code&gt;~/dev/git-status-lesson&lt;/code&gt; файл &lt;code&gt;fileA.txt&lt;/code&gt;. Теперь в репозитории есть новый файл в состоянии &lt;code&gt;untracked&lt;/code&gt;. Снова вызовите команду &lt;code&gt;git status&lt;/code&gt;. Результат будет таким.&lt;/p&gt;
  &lt;figure id=&quot;USWa&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/c1/ef/c1ef5931-3125-4021-a1a9-91c7c42ba789.png&quot; width=&quot;683&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;z2gP&quot;&gt;Файл &lt;code&gt;fileA.txt&lt;/code&gt; отображается в секции неотслеживаемых файлов — &lt;code&gt;Untracked files&lt;/code&gt;. Это значит, что он не был добавлен в репозиторий через &lt;code&gt;git add&lt;/code&gt;.&lt;/p&gt;
  &lt;p id=&quot;c6dk&quot;&gt;Добавьте &lt;code&gt;fileA.txt&lt;/code&gt; в staging area с помощью &lt;code&gt;git add&lt;/code&gt; и снова запросите &lt;code&gt;git status&lt;/code&gt;.&lt;/p&gt;
  &lt;figure id=&quot;sufC&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/09/9f/099ff5e9-1188-4637-a574-e390839e7129.png&quot; width=&quot;601&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;UJ7S&quot;&gt;Теперь &lt;code&gt;fileA.txt&lt;/code&gt; находится в секции &lt;code&gt;Changes to be committed&lt;/code&gt; (англ. «изменения, которые попадут в коммит»). Если сейчас выполнить коммит, то в репозитории будет зафиксирована текущая версия этого файла. Закоммитьте его.&lt;/p&gt;
  &lt;p id=&quot;dJI8&quot;&gt;Вывод команды &lt;code&gt;git status&lt;/code&gt; такой же, какой был после первого коммита: «Директория чиста».&lt;/p&gt;
  &lt;figure id=&quot;NtBc&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/a3/93/a3930239-68fa-43e3-a6f5-45dc590000d3.png&quot; width=&quot;587&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;oLMC&quot;&gt;&lt;strong&gt;3. Найдены изменения, которые не войдут в коммит&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;lI4F&quot;&gt;Теперь откройте файл &lt;code&gt;fileA.txt&lt;/code&gt; и добавьте в него несколько слов — например, &lt;code&gt;Это файл A!&lt;/code&gt;. Сохраните &lt;code&gt;fileA.txt&lt;/code&gt; и вызовите команду &lt;code&gt;git status&lt;/code&gt;. Её результат будет такой.&lt;/p&gt;
  &lt;figure id=&quot;nWgi&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/18/85/188575c0-ac71-47c7-8434-f6af97a14a61.png&quot; width=&quot;626&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;4Rhn&quot;&gt;Файл &lt;code&gt;fileA.txt&lt;/code&gt; был изменён, но ещё не добавлен в staging area после этого. Так он оказался в секции &lt;code&gt;Changes not staged for commit&lt;/code&gt; (англ. «изменения, которые не подготовлены к коммиту»). Эта секция соответствует статусу &lt;code&gt;modified&lt;/code&gt;.Подготовьте правки к коммиту с помощью &lt;code&gt;git add&lt;/code&gt;.&lt;/p&gt;
  &lt;figure id=&quot;N0Q9&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/07/0f/070fb751-0583-4d5e-a38e-0e5eecfe919a.png&quot; width=&quot;552&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;VdMW&quot;&gt;Теперь в коммит попадёт уже новая версия файла &lt;code&gt;fileA.txt&lt;/code&gt;.&lt;/p&gt;
  &lt;p id=&quot;Fxs1&quot;&gt;&lt;strong&gt;4. Файл добавлен в staging area, но после этого изменён&lt;/strong&gt;&lt;/p&gt;
  &lt;p id=&quot;ENnu&quot;&gt;Вы добавили файл в staging area, но перед самым коммитом вспомнили важную мелочь. Например, вместо одного восклицательного знака в конце строки &lt;code&gt;Это файл A!&lt;/code&gt; нужно поставить три.&lt;/p&gt;
  &lt;p id=&quot;31hx&quot;&gt;Откройте текстовый редактор и добавьте нужные правки. Теперь можно выполнить коммит, но в любой непонятной ситуации сначала стоит вызвать &lt;code&gt;git status&lt;/code&gt;. Он покажет следующее.&lt;/p&gt;
  &lt;figure id=&quot;wLF7&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/83/56/83565196-e525-4418-b077-c9fb0f3f68bc.png&quot; width=&quot;648&quot; /&gt;
  &lt;/figure&gt;
  &lt;pre id=&quot;3A1g&quot;&gt;# изменили fileA.txt 

$ git status 
On branch master Changes to be committed: 
(use &amp;quot;git restore --staged &amp;lt;file&amp;gt;...&amp;quot; to unstage) 
modified: fileA.txt 

Changes not staged for commit: 
(use &amp;quot;git add &amp;lt;file&amp;gt;...&amp;quot; to update what will be committed) 
(use &amp;quot;git restore &amp;lt;file&amp;gt;...&amp;quot; to discard changes in working directory) 
modified: fileA.txt&lt;/pre&gt;
  &lt;p id=&quot;geUi&quot;&gt;Файл попал и в &lt;code&gt;staged&lt;/code&gt; (&lt;code&gt;Changes to be committed&lt;/code&gt;), и в &lt;code&gt;modified&lt;/code&gt; (&lt;code&gt;Changes not staged for commit&lt;/code&gt;). В staging area находится версия файла с одним восклицательным знаком, а в &lt;code&gt;Changes not staged for commit&lt;/code&gt; — уже изменённая версия, с тремя.&lt;/p&gt;
  &lt;p id=&quot;a8o6&quot;&gt;Чтобы закоммитить самую свежую версию файла, нужно снова выполнить &lt;code&gt;git add&lt;/code&gt; перед коммитом.&lt;/p&gt;

</content></entry></feed>