Что означает выражение "Fail Early" и когда вы хотите это сделать?

Что означает выражение "Неудачный ранний", и при каких обстоятельствах этот подход наиболее полезен, и когда бы вы избежали такого подхода?

5 ответов

Решение

По сути, быстрый сбой (иначе провал на ранней стадии) - это кодирование вашего программного обеспечения таким образом, чтобы при возникновении проблемы программное обеспечение отказывало как можно скорее и как можно более наглядно, а не пыталось перейти в возможно нестабильное состояние.

Fail Fast
Джим Шор
отредактированный Мартином Фаулером
http://www.martinfowler.com/ieeeSoftware/failFast.pdf

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

Техника состоит в том, чтобы создать ваше программное обеспечение так, чтобы оно "быстро проваливалось".

Немедленный и видимый отказ

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

Система, которая быстро выходит из строя, делает с точностью до наоборот: при возникновении проблемы она сразу и заметно выходит из строя. Быстрый провал - неинтуитивный метод: "мгновенный и видимый сбой" звучит так, как будто это сделает ваше программное обеспечение более хрупким, но на самом деле это сделает его более надежным. Ошибки легче находить и исправлять, поэтому меньшее количество идет в производство.
...


Также обратите внимание на связанную с этим концепцию отказоустойчивого итератора - итератора, который после определенных изменений в коллекции вне итератора выбрасывает как можно скорее, вместо того чтобы переходить в потенциально нестабильное или недетерминированное состояние.

"Fail Early" означает, что программа должна вызвать исключение и прекратить работу, если что-то пойдет не так. (Он описан в списке советов Прагматического Программиста как Crash Early)

В своей работе по биоинформатике я склоняюсь к использованию подхода "Ранний провал", потому что моей главной заботой является обеспечение правильности. В отличие от Rails позволяет скрывать сбои. Например, Rails try позволяет вам вызывать что-то для объекта, и это не вызовет исключения, если этот объект nil, Я полагаю, это потому, что для веб-сайтов обеспечение правильной работы программы важнее, чем правильность.

Ранний провал воплощает идею, что при создании программного обеспечения чем раньше вы провалите тест или не пройдете тест, либо обнаружите ошибку, тем легче ее исправить (и дешевле). Это также относится к вашей бизнес-модели. Лучше узнать раньше (в бета-версии, например), чем после запуска.

Однажды у меня работал младший программист оракула, который поместил блок исключений "игнорировать все" вокруг всего своего кода, чтобы ошибки никогда не были видны. Из-за этого его код выглядел впечатляюще, но: A) Поиск ошибок занял гораздо больше времени; и Б) я потерял всю (ну, 80% своей) веру в его способности после этого.

С тех пор я учил людей, что это очень плохо, так как скрывает ошибки.

Не путайте это с модулем кода, способным справляться с некачественными входными данными (такими как HTML, который также не является допустимым XHTML в браузере) - это вообще не должно приводить к сбою. Скорее всего, они действительно вызвали сбой много лет назад, но путь к его устранению состоял в том, чтобы заставить систему принять разумные предположения о способах восстановления.

Это означает: "Лови багов как можно раньше". Если возможно, вы хотите знать, что они там, как только они там =).

Чем раньше вы поймаете ошибку, тем дешевле ее устранить. Если бы вы могли знать об ошибке прямо во время написания строки с ошибками, это было бы замечательно. Вы бы точно знали, что вы намеревались сделать, и имели бы больше возможностей быстро удалить эту ошибку.

С другой стороны, если вы поймаете ошибку через месяц или после ее выпуска, урон будет намного больше. Пользователи уже должны иметь дело с этим, вы не помните, что вы так хорошо думали (или, может быть, вы даже не будете больше работать в компании, поэтому кому-то нужно будет узнать, что вы думаете).

Другие вопросы по тегам