Являются ли условия стабильными и надежными взаимозаменяемыми?

20

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

gsakkis
источник
3
Кто-то может назвать систему стабильной, но ненадежной, если она всегда запущена и работает, но периодически дает неверные результаты или иногда теряет данные. Это вопрос мнения, что означают эти слова.
Joshp
На мой взгляд, они сводятся к одному и тому же, последовательность ...
Темная ночь
Почему ты спрашиваешь?
JᴀʏM16

Ответы:

37

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

Это на мой взгляд надежно, но не стабильно.

Я могу рассчитывать на то, что он не потеряет данные и будет работать правильно, несмотря на нестабильность.

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

CaffGeek
источник
2
Йен Сомервилл определяет надежность как «вероятность безотказной работы в течение определенного времени, в данной среде, для конкретной цели». в книге Программная инженерия. Таким образом, сбой вашей системы каждые 5 минут не так надежен (хотя зависит от ваших показателей).
m3th0dman
2
@ m3th0dman, зависит от того, как определить ошибку. Без потери данных, и 100% точность данных не была бы ошибкой в ​​моих книгах, даже если приложение продолжало аварийно завершать работу и перезапускать себя. Я хотел бы решить проблему, но это не было бы высоким приоритетом, если бы оно продолжало работать
CaffGeek
Если ваша система дает сбой, то, очевидно, где-то произошел сбой, и, следовательно, ваша работа не была безотказной (как это определено в определении); Таким образом, ваша система не так надежна. Обсуждение может быть подробно рассмотрено о доступности, ответе и времени перезапуска.
m3th0dman
Я серьезно не думаю, что этот пример приложения является надежным. Надежность и стабильность не обязательно две разные вещи.
Моше Рева
@ m3th0dman: Программы Erlang считаются надежными не потому, что они безошибочны, а потому, что они состоят из множества параллельных процессов (не процессов ОС), которые могут завершиться сбоем без ущерба для программы в целом, которая предназначена для обработки этих сбоев.
Андре Парамес
24

Эти определения взяты из Стандарта ISO 9126, который разделяет по характеристикам и под характеристикам: эта таблица , этот PDF или Википедия или статья

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

Надежность является основной характеристикой, которая содержит:

  • зрелость: эта под характеристика характеризует частоту сбоев программного обеспечения.
  • Отказоустойчивость: способность программного обеспечения противостоять (и восстанавливаться) после отказа компонента или окружающей среды.
  • возможность восстановления: возможность вернуть отказавшую систему к полноценной работе, включая данные и сетевые подключения.
KeesDijk
источник
6

Цель: написать программу для добавления двух чисел

Надежный, но нестабильный:

add(a,b):
    if randomInt mod 5 == 0: 
        throw exception
    else
        print a+b

Стабильный, но ненадежный:

add(a,b):
    if randomInt mod 5 == 0: 
        print a+a
    else
        print a+b
Горт Робот
источник
Это определение неверно. Это не то, как термины действительно используются в промышленности.
Федерико
2

В контексте оценки библиотек термины означают совершенно разные вещи.

Надежная библиотека - это библиотека, которая выполняет свою работу без периодических сбоев.

Стабильная библиотека - это библиотека, которая не сильно меняется.

Себастьян Редл
источник
Я удивлен, увидев так много ответов, которые интерпретируют стабильно как «не падает». Для меня первый смысл действительно «не сильно изменился за некоторое время», он больше не движется. То, что больше не дает сбоев, может быть чем-то, что приходит вместе с этим, но стабильность не в первую очередь связана с поведением программного обеспечения.
Мартин Маат
0

Стабильность и надежность - это разные вещи в разработке программного обеспечения, однако они оба используются как родственные термины :)

Я согласен с некоторыми упомянутыми предыдущими комментариями и хотел бы добавить свои 2 цента.

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

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

Дополнительные ссылки на эту тему предоставляются:

Юсубы
источник
0

На мой взгляд, «надежность» означает, что вы понимаете границы системы. Вы можете с уверенностью сказать, что «мы предоставляем время отклика X на X-м процентиле» (чем выше X, тем лучше, очевидно).

С другой стороны, стабильность - это всего лишь мера доступности. «Если вы попытаетесь подключиться к нашему сервису, он будет там хотя бы в X% случаев».

Vatine
источник
0

Надежный, но не стабильный :

add(a,b):
    if a == nil ||  b == nil: 
        throw exception
    else
        return (a+b)

Стабильный, но не надежный :

add(a,b):
    if a == nil ||  b == nil: 
        return 0
    else
        return (a+b)
Саззад Хисейн Хан
источник