Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

Сбой быстро
Джим Шор
под редакцией Мартина Фаулера
http://www.martinfowler.com/ieeeSoftware/failFast.pdf

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

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

Непосредственный и видимый отказ

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

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


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

Ответ 2

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

Ответ 3

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

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

Ответ 4

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

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

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

Ответ 5

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

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

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