Czy warunki są stabilne i niezawodne wymienne?

20

Czy istnieje różnica między stabilnością a niezawodnością (przynajmniej w kontekście inżynierii oprogramowania), czy można je stosować zamiennie? Jeśli nie, to jakie byłyby przykłady niezawodnych, ale niekoniecznie stabilnych systemów i odwrotnie?

gsakkis
źródło
3
Ktoś może określać system jako stabilny, ale zawodny, jeśli zawsze działa, ale sporadycznie generuje nieprawidłowe wyniki lub czasami traci dane. To, co oznaczają te słowa, zależy od opinii.
joshp
Moim zdaniem sprowadzają się do tego samego, spójności ...
Darknight
Dlaczego pytasz?
JᴀʏMᴇᴇ

Odpowiedzi:

37

Załóżmy na przykład, że mamy aplikację, działa idealnie, poza tym, że ulega awarii co 5 minut, ale natychmiast wykonuje kopię zapasową bez utraty danych.

Moim zdaniem jest to wiarygodne, ale niestabilne.

Mogę polegać na tym, że nie traci danych i działa poprawnie, mimo że nie jest stabilny.

W rzeczywistości Internet jest w zasadzie taki. Jest daleki od stabilnego - połączenia spadają i pojawiają się ponownie, pakiety zderzają się i są tracone, i zdarzają się różnego rodzaju niestabilne rzeczy. Jest jednak dość zdumiewające, jak niezawodny jest z całą nieodłączną związaną z tym niestabilnością.

CaffGeek
źródło
2
Ian Somerville definiuje niezawodność jako „Prawdopodobieństwo bezawaryjnej pracy w określonym czasie, w określonym środowisku, w określonym celu”. w książce Inżynieria oprogramowania. Dlatego awaria systemu co 5 minut nie jest tak niezawodna (zależy to jednak od Twoich danych).
m3th0dman
2
@ m3th0dman, zależy od tego, jak wtedy zdefiniujesz awarię. Brak utraty danych, a 100% dokładność danych nie byłaby porażką w moich książkach, nawet jeśli aplikacja ciągle się zawiesza i uruchamia ponownie. Chciałbym rozwiązać problem, ale nie byłby to wysoki priorytet, gdyby nadal działał
CaffGeek,
Jeśli twój system ulega awarii, to najwyraźniej gdzieś wystąpiła awaria, a zatem operacja nie była bezawaryjna (jak sugeruje definicja); dlatego twój system nie jest tak niezawodny. W dyskusji można szczegółowo omówić dostępność, czas reakcji i restartu.
m3th0dman
Poważnie nie sądzę, że ta przykładowa aplikacja jest niezawodna. Niezawodność i stabilność niekoniecznie są dwiema odrębnymi rzeczami.
Moshe Revah,
@ m3th0dman: Programy Erlang są uważane za niezawodne, nie dlatego, że są nieomylne, ale dlatego, że składają się z wielu współbieżnych procesów (nie procesów systemu operacyjnego), które mogą zawieść bez narażania całego programu, który jest zaprojektowany do obsługi tych awarii.
André Paramés,
24

Te definicje pochodzą ze standardu ISO 9126, który dzieli cechy i cechy podrzędne: ta tabela , ten plik pdf lub wikipedia lub artykuł

Stabilność to: Charakteryzuje wrażliwość na zmiany w danym systemie, która jest negatywnym wpływem, który może być spowodowany zmianami w systemie.

Niezawodność to główna cecha, która zawiera:

  • dojrzałość: ta cecha podrzędna dotyczy częstotliwości awarii oprogramowania.
  • tolerancja na awarie: Zdolność oprogramowania do wytrzymania (i odzyskania) po awarii komponentu lub środowiska.
  • możliwość odzyskania: możliwość przywrócenia uszkodzonego systemu do pełnego działania, w tym danych i połączeń sieciowych.
KeesDijk
źródło
6

Cel: napisać program, aby dodać dwie liczby

Niezawodny, ale niestabilny:

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

Stabilny, ale zawodny:

add(a,b):
    if randomInt mod 5 == 0: 
        print a+a
    else
        print a+b
Gort the Robot
źródło
Ta definicja jest niepoprawna. To nie jest tak, jak te terminy są naprawdę używane w branży.
Federico
2

W kontekście oceny bibliotek terminy oznaczają zupełnie inne rzeczy.

Niezawodna biblioteka to taka, która wykonuje swoją pracę bez okresowych awarii.

Biblioteka stabilna to taka, która niewiele się zmienia.

Sebastian Redl
źródło
Jestem zaskoczony, widząc tak wiele odpowiedzi, które interpretują stabilne jako „nie ulega awarii”. Dla mnie pierwsze znaczenie to „niewiele się zmieniło przez jakiś czas”, już się nie porusza. Rzecz, która już się nie zawiesza, może być czymś, co się z tym wiąże, ale stabilność nie polega przede wszystkim na zachowaniu oprogramowania.
Martin Maat
0

Stabilność i niezawodność to różne rzeczy w rozwoju oprogramowania, jednak oba były używane jako siostrzane terminy :)

Zgadzam się z niektórymi wcześniejszymi komentarzami i chciałbym dodać moje 2 centy.

Wiarygodność to stopień, w jakim eksperyment, test lub dowolna procedura pomiarowa daje taki sam wynik w powtarzanych próbach.

Niezawodność stabilności (czasami nazywana testem, niezawodność ponownego testowania) jest zgodnością przyrządów pomiarowych w czasie. Aby określić stabilność, pomiar lub test powtarza się na tych samych osobach w przyszłości. Wyniki są porównywane i skorelowane z początkowym testem, aby dać miarę stabilności.

Udostępniono więcej referencji na ten temat:

Jusubow
źródło
0

Moim zdaniem „niezawodność” oznacza, że ​​rozumiesz granice systemu. Możesz z pewnością powiedzieć, że „zapewniamy czas reakcji X na X percentylu” (im wyższy X, tym lepiej, oczywiście).

Z drugiej strony stabilność jest jedynie miarą dostępności. „Jeśli spróbujesz połączyć się z naszą usługą, będzie tam co najmniej X% razy”.

Vatine
źródło
0

Niezawodny, ale niestabilny :

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

Stabilny, ale niewiarygodny :

add(a,b):
    if a == nil ||  b == nil: 
        return 0
    else
        return (a+b)
Sazzad Hissain Khan
źródło