Need Robust Software? Make It Fragile

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

В любом программном проекте целью является создание чего-то стабильного. Мы не хотим, чтобы оно сломалось перед пользователем. Мы также не хотим, чтобы наш веб-сайт вместо веб-страницы показывал “внутреннюю ошибку приложения”. Мы хотим, чтобы наше программное обеспечение работало, а не выходило из строя. Это вполне допустимое и логичное желание, но чтобы добиться этого, мы должны сделать наше программное обеспечение как можно более хрупким. Это может показаться противоречивым, но такова реальность. Чем хрупче ваше приложение в разработке, тем надежнее оно будет в эксплуатации.

Под хрупкостью я имею в виду философию Fail Fast, которая является противоположностью Fail Safe. Я думаю, вы знаете разницу, но позвольте мне все равно напомнить вам на примере. Вот что означает Fail Safe:

Этот метод предназначен для расчета и возврата размера файла. Сначала он проверяет, существует ли файл. Если файл не существует, метод возвращает ноль. В действительности, файла нет, поэтому размера нет. Мы могли бы пожаловаться на отсутствие файла, но зачем? Зачем шуметь? Давайте сохранять тишину и возвращать ноль. Мы не сбоим, потому что стараемся поддерживать работу приложения. Это называется Fail Safe (надежный сбой).

В отличие от этого, Fail Fast (быстрый сбой) выглядит так:

Мы не можем найти файл? Мы не скрываем этот факт. Мы публично и явно делаем это известным. Мы кричим и плачем. Мы вызываем исключение. Мы хотим, чтобы приложение вылетело, сломалось и потерпело неудачу, потому что кто-то дал нам файл, который не существует. Мы жалуемся и протестуем. Это называется “Fail Fast”.

Какая философия, если мы придерживаемся ее повсюду, сделает наше программное обеспечение надежным и устойчивым к сбоям? Только вторая - “Fail Fast”.

Почему? Потому что чем быстрее и проще сбой произошел, тем быстрее его можно исправить. И исправление будет проще и более заметным. “Fail Fast” - гораздо лучший подход для поддержки. Код становится более чистым. Гораздо легче отследить сбой. Все методы готовы сломаться и вызвать исключение даже при малейшей проблеме.

В этом примере, если метод возвращает ноль, не ясно, существует ли файл и его размер действительно равен нулю, или его имя неправильное и он просто не найден. Подход “Fail Safe” скрывает проблемы и делает код менее поддерживаемым, и поэтому его сложно стабилизировать.

В начале, во время производства, у нас будет много сбоев и ошибок. Но все они будут видимы и понятны. Мы исправим их и покроем unit-тестами. Каждое исправление сделает наше программное обеспечение более стабильным и лучше покрытым тестами.

Программное обеспечение, разработанное с учетом подхода “Fail Safe”, будет выглядеть более стабильным в начале, но оно быстро разрушится и станет не поддерживаемым беспорядком.

Программное обеспечение, разработанное с учетом подхода “Fail Fast”, будет часто вылетать в начале, но с каждым исправлением оно будет становиться более стабильным и надежным.

Вот почему хрупкость является ключевым фактором успеха надежности.

Translated by ChatGPT gpt-3.5-turbo/42 on 2023-12-27 at 13:57

sixnines availability badge   GitHub stars