Estes dois são apenas exemplos, como você disse. De fato, todos os requisitos não funcionais desse tipo podem potencialmente entrar em conflito. No livro "Construindo arquiteturas evolucionárias", há uma tabela de aproximadamente cem dessas "habilidades" (como também são frequentemente chamadas).
É uma espécie de exercício para arquitetos de software considerar o possível conflito entre dois deles. Basicamente, você pode decidir quais são importantes para seus projetos e acompanhar esses conflitos.
Para voltar ao seu exemplo preciso e dar uma olhada na definição do termo robustness
na Wikipedia:
Na ciência da computação, robustez é a capacidade de um sistema de computador lidar com erros durante a execução [1] [2] e lidar com informações erradas.
Como você pode ver na definição, a robustez envolve erros . Por outro lado, você deseja ter correção, o que basicamente significa a ausência de erros.
Para tornar o conflito mais aparente, vamos considerar um campo de entrada simples. A partir do requisito de correção, é mais fácil rejeitar qualquer entrada incorreta feita pelo usuário. Mas a robustez exige que você possa trabalhar com essa entrada, o que pode não estar totalmente correto.
Para trazer tudo ao seu livro: qual é o compromisso aceitável agora? Digamos que você escreva um aplicativo científico no qual o usuário possa inserir uma quantidade de tensão, incluindo a magnitude. Portanto, entradas corretas seriam algo como "10 kV" ou "200 mV". Os trade-offs aceitáveis podem incluir a permissão de entradas como "10kV", "10kVolt" ou mesmo apenas "10" e, para fins de correção, mapeie-as para um valor de tensão válido. Observe que isso ainda é uma troca e não uma coisa dos "melhores dos dois mundos". Considere letras maiúsculas e minúsculas: "10 kV" e "10 KV" podem estar bem, mas "10 mV" e "10 MV" podem não estar. A correção se torna questionável, pois você não tem certeza se agora é mil ou mega,