Keduanya hanyalah contoh seperti yang Anda katakan. Bahkan, semua persyaratan non-fungsional semacam itu berpotensi dapat saling bertentangan. Dalam buku "Membangun Arsitektur Evolusi" ada tabel kira-kira seratus "fungsi" ini (sebagaimana mereka juga sering disebut).
Ini adalah semacam latihan bagi arsitek perangkat lunak untuk mempertimbangkan potensi konflik di antara keduanya. Anda pada dasarnya dapat memutuskan mana yang penting untuk proyek Anda, kemudian melacak konflik ini.
Untuk kembali ke contoh persis Anda dan lihat definisi istilah robustness
di Wikipedia:
Dalam ilmu komputer, ketahanan adalah kemampuan sistem komputer untuk mengatasi kesalahan selama eksekusi [1] [2] dan mengatasi input yang salah.
Seperti yang Anda lihat dari definisi, ketahanan melibatkan kesalahan . Di sisi lain, Anda ingin memiliki kebenaran, yang pada dasarnya berarti tidak adanya kesalahan.
Untuk membuat konflik lebih jelas, mari pertimbangkan bidang input sederhana. Dari persyaratan kebenaran itu termudah untuk setiap input yang salah yang dibuat oleh pengguna untuk ditolak. Tetapi ketahanan membutuhkan Anda untuk dapat bekerja dengan input ini, yang mungkin tidak sepenuhnya benar.
Untuk membawanya ke buku Anda: apa trade-off yang dapat diterima sekarang? Katakanlah Anda menulis aplikasi ilmiah di mana pengguna dapat memasukkan jumlah tegangan, termasuk besarnya. Jadi input yang benar akan menjadi sesuatu seperti "10 kV" atau "200 mV". Pertukaran yang dapat diterima mungkin termasuk mengizinkan input seperti "10kV", "10kVolt", atau bahkan hanya "10" dan demi kebenaran, petakan ini ke nilai tegangan yang valid. Perhatikan bahwa ini masih merupakan trade-off dan bukan hal "terbaik-dari-dua-dunia". Pertimbangkan huruf besar vs huruf kecil: "10 kV" dan "10 KV" mungkin baik-baik saja, tetapi "10 mV" dan "10 MV" mungkin tidak. Kebenaran menjadi dipertanyakan karena Anda tidak yakin apakah itu mili atau mega sekarang,