﻿# Shift\-left testing

Shift\-left testing — один из подходов в разработке программного обеспечения, при котором тестирование выполняется на как можно более ранних этапах его жизненного цикла\. 

В [традиционных моделях разработки программного обеспечения](https://en.wikipedia.org/wiki/Systems_development_life_cycle) тестирование системы осуществляется на поздних этапах разработки и после её завершения\. Если представить возможный жизненный цикл на временной шкале, то обычно этап тестирования находится правее этапа разработки: 

![shiftleft_term_ru/image1.png](https://import.viva64.com/docx/blog/shiftleft_term_ru/image1.png)

В такой модели при обнаружении проблем на этапе тестирования система отправляется на доработку, то есть обратно, на более ранние этапы\. Это приводит к увеличению временных и, как следствие, финансовых затрат на разработку ПО\. 

Суть принципа Shift\-left заключается в обеспечении качества системы на более ранних этапах её разработки, то есть на временной шкале этап тестирования смещается левее:

![shiftleft_term_ru/image2.png](https://import.viva64.com/docx/blog/shiftleft_term_ru/image2.png)

Преимущество такого подхода связано со скоростью и стоимостью исправления ошибок в разработанном программном обеспечении\. Ведь тестирование на ранних этапах позволяет искать ошибки сразу и оперативно исправлять их до начала других этапов\. 

Подход Shift\-left может быть реализован следующими способами:

* оценка противоречивости или недостаточной полноты требований или сценариев использования системы; 
* [конструктивная информационная безопасность \(КИБ\)](https://pvs-studio.ru/ru/webinar/rbpo/content/#SecureByDesign) — подход, при котором защищённость закладывается в архитектуру на этапе проектирования, а не добавляется после разработки;
* использование принципа [TDD](https://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0_%D1%87%D0%B5%D1%80%D0%B5%D0%B7_%D1%82%D0%B5%D1%81%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5) \(test\-driven development\);
* использование принципов [BDD](https://ru.wikipedia.org/wiki/BDD_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)) \(behavior\-driven development\);
* анализ разрабатываемого кода \([код\-ревью](https://pvs-studio.ru/ru/blog/terms/0073/), использование линтеров, [статических](https://pvs-studio.ru/ru/blog/terms/0046/) и [динамических анализаторов кода](https://pvs-studio.ru/ru/blog/terms/0070/)\);
* автоматизация тестирования в CI/CD\-решениях\.