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/42 on 2023-11-17 at 17:17