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:
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,