Hai chỉ là ví dụ như bạn nói. Trong thực tế, tất cả các yêu cầu phi chức năng thuộc loại đó có thể có khả năng xung đột với nhau. Trong cuốn sách "Xây dựng kiến trúc tiến hóa", có một bảng gồm khoảng một trăm "năng lực" này (vì chúng thường được gọi là).
Đây là một bài tập để các kiến trúc sư phần mềm xem xét xung đột tiềm năng giữa bất kỳ hai trong số này. Về cơ bản, bạn có thể quyết định xem cái nào trong số này là quan trọng đối với các dự án của bạn, sau đó theo dõi các xung đột này.
Để quay lại ví dụ chính xác của bạn và hãy xem định nghĩa của thuật ngữ robustness
trong Wikipedia:
Trong khoa học máy tính, sự mạnh mẽ là khả năng của một hệ thống máy tính để đối phó với các lỗi trong quá trình thực thi [1] [2] và đối phó với đầu vào sai lầm.
Như bạn có thể thấy từ định nghĩa, sự mạnh mẽ liên quan đến lỗi . Mặt khác, bạn muốn có sự chính xác, về cơ bản có nghĩa là không có lỗi.
Để làm cho xung đột rõ ràng hơn, hãy xem xét một trường đầu vào đơn giản. Từ yêu cầu chính xác, dễ dàng nhất cho bất kỳ đầu vào sai lầm nào được thực hiện bởi người dùng sẽ bị từ chối. Nhưng sự mạnh mẽ đòi hỏi bạn phải có khả năng làm việc với đầu vào này, điều này có thể không hoàn toàn chính xác.
Để mang tất cả xung quanh vào cuốn sách của bạn: sự đánh đổi chấp nhận được bây giờ là gì? Giả sử bạn viết một ứng dụng khoa học trong đó người dùng có thể nhập một lượng điện áp, bao gồm cả cường độ. Vì vậy, đầu vào chính xác sẽ là một cái gì đó như "10 kV" hoặc "200 mV". Sự đánh đổi có thể chấp nhận có thể bao gồm cho phép các đầu vào như "10kV", "10kVolt" hoặc thậm chí chỉ là "10" và vì mục đích chính xác, ánh xạ các giá trị này đến giá trị điện áp hợp lệ. Lưu ý rằng đây vẫn là một sự đánh đổi và không phải là một điều "tốt nhất của cả hai thế giới". Xem xét chữ hoa và chữ thường: "10 kV" và "10 KV" có thể tốt, nhưng "10 mV" và "10 MV" có thể không. Tính chính xác trở thành nghi vấn vì bạn không chắc bây giờ là milli hay mega,