Konkurs Wytrzymałość vs Poprawność [zamknięte]

17

Czytając „Code Complete 2” w akapicie dotyczącym jakości wymagań znalazłem to:

Czy określono dopuszczalne kompromisy między konkurującymi atrybutami - na przykład między wytrzymałością a poprawnością?

(powyżej jest to punkt dużej listy pól wyboru w celu sprawdzenia jakości wymagań)

Znalazłem więc wiele definicji odporności i poprawności w Internecie, książkach akademickich itp.

np .:

W książce „Object Oriented Software Construction, 2nd Edition, Bertrand Meyer, Prentice-Hall, 1997”:

  • Prawidłowość: stopień, w jakim system jest wolny od [wad] w zakresie specyfikacji, projektu i implementacji.
  • Solidność: stopień, w jakim system nadal działa w obecności nieprawidłowych danych wejściowych lub stresujących warunków środowiskowych.

Mimo to nie jest jasne, dlaczego iw jakich sytuacjach ci dwaj mogą być w konflikcie.

Moje pytanie brzmi: dlaczego te dwa atrybuty są konkurencyjne ?

zwycięzca
źródło
11
Różne książki podają różne definicje tych terminów. (Zazwyczaj książki napisane dla zwykłych programistów nie używają tych samych definicji, co publikacje akademickie.) Być może możesz rzucić okiem na to, jak definiuje je ta książka, jeśli w ogóle. (Czasami te terminy są używane przez książki bez definicji.)
rwong,
Nie znam żadnej definicji „solidnej” innej niż „z wdziękiem obsługuje wszelkiego rodzaju nieoczekiwane dane wejściowe” (oprócz danych wymaganych funkcjonalnie).
Kaz
Zredagowałem moje pytanie, starając się być tak jasne, jak to możliwe, aby można je było ponownie otworzyć.
zwycięzca

Odpowiedzi:

36

Istnieje wiele sytuacji, w których te dwa mogą być w konflikcie. Na przykład wytrzymałość może obejmować odporność pod dużym obciążeniem. Jeśli przybliżoną (tj. Niepoprawną) odpowiedź na żądanie można obliczyć znacznie szybciej niż dokładną (poprawną) odpowiedź, ważne jest, aby wiedzieć, czy system powinien dostarczyć przybliżony wynik, czy też nie.

Kilian Foth
źródło
17

Te dwa są tylko przykładami, jak powiedziałeś. W rzeczywistości wszystkie niefunkcjonalne wymagania tego rodzaju mogą potencjalnie powodować konflikty. W książce „Building Evolutionary Architectures” znajduje się tablica około stu tych „zdolności” (jak się je często nazywa).

Jest to rodzaj ćwiczenia dla architektów oprogramowania, aby rozważyć potencjalny konflikt między dowolnymi dwoma z nich. Możesz w zasadzie zdecydować, które z nich są ważne dla twoich projektów, a następnie śledzić te konflikty.

Aby wrócić do dokładnego przykładu i rzucić okiem na definicję tego terminu robustnessw Wikipedii:

W informatyce solidność to zdolność systemu komputerowego do radzenia sobie z błędami podczas wykonywania [1] [2] i radzenia sobie z błędnymi danymi wejściowymi.

Jak widać z definicji, odporność wiąże się z błędami . Z drugiej strony chcesz mieć poprawność, co w zasadzie oznacza brak błędów.

Aby konflikt był bardziej widoczny, rozważmy proste pole wprowadzania. Z wymogu poprawności najłatwiej jest odrzucić wszelkie błędne dane wprowadzone przez użytkownika. Ale solidność wymaga umiejętności pracy z tymi danymi wejściowymi, co może nie być całkowicie poprawne.

Aby przybliżyć to do swojej książki: jaki jest teraz akceptowalny kompromis ? Załóżmy, że piszesz aplikację naukową, w której użytkownik może wprowadzić wartość napięcia, w tym wielkość. Tak więc prawidłowe dane wejściowe byłyby takie jak „10 kV” lub „200 mV”. Dopuszczalne kompromisy mogą obejmować zezwalanie na wejścia takie jak „10kV”, „10kVolt”, a nawet po prostu „10” i dla poprawności odwzorować je na prawidłową wartość napięcia. Zauważ, że wciąż jest to kompromis, a nie „najlepsza z obu światów”. Rozważ duże i małe litery: „10 kV” i „10 KV” mogą być w porządku, ale „10 mV” i „10 MV” mogą nie być w porządku. Prawidłowość staje się wątpliwa, ponieważ nie jesteś pewien, czy jest to teraz milion, czy mega,

Szczery
źródło
5

Praktycznym przykładem jest XHTML vs. HTML .

  • Przeglądarki (w trybie ścisłym) odrzucają XHTML, który ma błędy składniowe. Zapewnia to, że nieprawidłowe wyniki nie są wyświetlane użytkownikowi, i pomaga w znalezieniu błędów.
  • Przeglądarki próbują kontynuować parsowanie kodu HTML, nawet jeśli występują bardzo oczywiste problemy. To często pozwala użytkownikowi przeglądać stronę, nawet jeśli zawartość jest nieco zniekształcona.

Dlatego XHTML dąży do poprawności, a HTML do niezawodności. Obecnie HTML wydaje się bardziej popularny, ale obie strony mają dobre argumenty.

jpa
źródło