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 ?
Odpowiedzi:
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.
źródło
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
robustness
w Wikipedii: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,
źródło
Praktycznym przykładem jest XHTML vs. HTML .
Dlatego XHTML dąży do poprawności, a HTML do niezawodności. Obecnie HTML wydaje się bardziej popularny, ale obie strony mają dobre argumenty.
źródło