Questi due sono solo esempi come hai detto tu. In effetti, tutti i requisiti non funzionali di questo tipo possono potenzialmente entrare in conflitto l'uno con l'altro. Nel libro "Building Evolutionary Architectures" c'è una tabella di circa un centinaio di queste "abilità" (come spesso vengono anche chiamate).
È una specie di esercizio per gli architetti del software considerare il potenziale conflitto tra due di questi. Puoi sostanzialmente decidere quali di questi sono importanti per i tuoi progetti, quindi tieni traccia di questi conflitti.
Per tornare al tuo esempio preciso e dare un'occhiata alla definizione del termine robustness
in Wikipedia:
In computer science, robustness is the ability of a computer system to cope with errors during execution[1][2] and cope with erroneous input.
Come puoi vedere dalla definizione, la robustezza implica errori . D'altra parte, vuoi avere la correttezza, che in pratica significa l'assenza di errori.
Per rendere il conflitto più evidente, consideriamo un semplice campo di input. Dal requisito di correttezza è più facile che qualsiasi input errato da parte dell'utente venga rifiutato. Ma la robustezza richiede di essere in grado di lavorare con questo input, che potrebbe non essere del tutto corretto.
Per attirare l'attenzione sul tuo libro: qual è il compromesso accettabile adesso? Diciamo che scrivi un'applicazione scientifica in cui l'utente può inserire una quantità di tensione, inclusa la magnitudine. Quindi gli ingressi corretti sarebbero qualcosa come "10 kV" o "200 mV". I trade-off accettabili possono includere input come "10kV", "10kVolt", o anche solo "10" e per correttezza mapparli ad un valore di tensione valido. Si noti che questo è ancora un trade-off e non un "best-of-both-worlds" cosa. Considerare maiuscole e minuscole: "10 kV" e "10 KV" potrebbero andare bene, ma "10 mV" e "10 MV" potrebbero non esserlo. La correttezza diventa discutibile in quanto non si è sicuri che sia milli o mega ora, ma se insisti sul riquadro superiore / inferiore destro perdi di nuovo in robustezza, perché alcuni input errati non funzioneranno.