Automated Tests Are the Safety Net that Saves You

The following text is a partial translation of the original English article, performed by ChatGPT (gpt-3.5-turbo) and this Jekyll plugin:

Автоматизированные тесты обычно называют модульными или интеграционными тестами, или просто тестами, которые выполняются автоматически. В этом заключается их отличие от ручных тестов. Какова цель автоматизированных тестов? Прежде всего, они сокращают количество рутинной работы: нам не нужно запоминать, как тестировать модуль, тесты это запоминают. Мы просто нажимаем кнопку, и набор тестов, который может состоять из сотен или тысяч, запускается и сообщает об ошибках, если они обнаружены. Экономия времени важна, но это не единственная и, по моему мнению, не самая важная цель автоматизированных тестов. Более важная цель - их роль как средства безопасности.

Вы знаете, что такое сетка безопасности? Википедия говорит, что это “сетка, предназначенная для защиты людей от травм при падении с высоты”. Скорее всего, вы видели ее на зданиях, которые строят или реконструируют. Красная сетка на картинке - это сетка безопасности.

Если строители случайно упадут или уронят свои инструменты, они не погибнут и не убьют никого на земле. Помогает ли это знание им работать более эффективно? Я верю, что да. Я не нашел никаких исследований по этой теме, сравнивающих производительность работников, которые знают, что под ними есть сетка безопасности, с производительностью работников, которые знают, что ошибка, скорее всего, обойдется им в жизни или жизни ребенка, играющего на земле. Однако результаты такого исследования, по-моему, очевидны.

То же самое верно и для нас, программистов. Изменение исходного кода и знание о том, что нет автоматизированных тестов, подобно работе на высоте без сетки безопасности: одна ошибка может привести к простою сервера, недовольному клиенту, потере денег и, возможно, потере работы. Какова была бы продуктивность программиста, работающего подобным образом? Нужно ли проводить исследование, чтобы выяснить это? Или ответ так же очевиден, как для строителей?

Для того чтобы дать вам достаточную уверенность, автоматизированные тесты должны быть написаны и зафиксированы в репозитории, а также должны автоматически выполняться перед каждым изменением, которое вы пытаетесь внести в основную ветку. Вы должны иметь возможность запускать их после каждого локального изменения, в процессе инкрементальной разработки кода. Затем вы должны знать, что даже если вы случайно забудете запустить их локально и отправите вашу ветку в основную ветку для слияния, автоматизированная система слияния поймает вас.

Чем больше времени и усилий вы вкладываете в создание надежной защитной сети, то есть в то, насколько хорошо ваши тесты охватывают ваш код, тем продуктивнее будет ваша работа, тем безопаснее вы будете чувствовать себя при внедрении новых функций или исправлении ошибок. Проще говоря, вы будете писать код быстрее и лучше. Просто потому, что вы знаете, что не можете сломать то, что сделали вчера.

Первое, что вы делаете, когда начинаете новый программный проект, — создаете систему безопасности: автоматизируете процесс сборки и создаете несколько простых автоматизированных тестов. Вы убеждаетесь, что они вас защищают. Только после этого вы начинаете писать код. Спросите строителей: разрешается ли им начинать рабочий день без сетки безопасности? Очевидно, нет. Я уверен, что это даже незаконно. То же самое должно быть и для нас, программистов: писать код без сетки безопасности автоматизированных тестов должно быть незаконно.

Когда клиенты сообщают вам о баге, это означает, что сетка безопасности имеет дыру. Она не достаточно прочная, поэтому баг попал на голову вашего клиента. Что вы делаете перед исправлением бага? Вы исправляете сетку безопасности. Вы добавляете больше автоматизированных тестов, которые будут ловить этот баг в будущем. Только после этого вы исправляете баг.

Я считаю, что обеспечение безопасности проекта по разработке программного обеспечения является его наиболее ценным активом.

Translated by ChatGPT gpt-3.5-turbo/35 on 2023-09-06 at 19:32

sixnines availability badge   GitHub stars