Câu trả lời của DW rất hay , nhưng tôi muốn mở rộng ở một điểm. Một đặc tả không chỉ là một tham chiếu mà mã được xác minh. Một trong những lý do để có một đặc điểm kỹ thuật chính thức là xác nhận nó bằng cách chứng minh một số thuộc tính cơ bản. Tất nhiên, đặc tả kỹ thuật không thể được xác nhận hoàn toàn - việc xác thực sẽ phức tạp như chính đặc điểm kỹ thuật, vì vậy nó sẽ là một quá trình vô tận. Nhưng xác nhận cho phép chúng tôi có được một bảo đảm mạnh mẽ hơn trên một số thuộc tính quan trọng.
Ví dụ: giả sử bạn đang thiết kế xe tự lái. Đây là một điều khá phức tạp liên quan đến rất nhiều thông số. Các đặc tính chính xác của hệ thống lái tự động bao gồm những thứ như Xe hơi sẽ không đâm vào tường và Xe sẽ lái ở nơi mà nó được yêu cầu đi tới. Một tài sản như thế thì chiếc xe sẽ không đâm vào tường mà thực sự rất quan trọng, vì vậy chúng tôi muốn chứng minh điều đó. Vì hệ thống hoạt động trong thế giới vật lý, bạn sẽ cần thêm một số ràng buộc vật lý; tài sản thực tế của hệ thống tính toán sẽ giống như những điều giả định về khoa học vật liệu và những giả định này liên quan đến nhận thức về chướng ngại vật của cảm biến ô tô, chiếc xe sẽ không đâm vào tường. Nhưng ngay cả như vậy, kết quả là một tài sản tương đối đơn giản rõ ràng là mong muốn.
Bạn có thể chứng minh tài sản này từ mã? Cuối cùng, đó là những gì đang diễn ra, nếu bạn đang theo một cách tiếp cận hoàn toàn chính thức¹. Nhưng mã có rất nhiều phần khác nhau; hệ thống phanh, máy ảnh, động cơ, v.v ... đều được điều khiển tự động. Một đặc tính chính xác của hệ thống phanh sẽ là một cái gì đó giống như nếu có tín hiệu 'áp dụng phanh' thì hệ thống phanh được áp dụng. Một đặc tính chính xác của động cơ sẽ là thành công nếu tín hiệu ly hợp tắt thì động cơ không truyền động cho các bánh xe. Phải có một cái nhìn rất cao cấp để đặt tất cả chúng lại với nhau. Một đặc tả tạo ra một lớp trung gian trong đó các thành phần khác nhau của hệ thống có thể được khớp nối với nhau.
Trên thực tế, một hệ thống phức tạp như xe tự lái sẽ có một số cấp độ thông số kỹ thuật với số lượng tinh chỉnh khác nhau. Một cách tiếp cận tinh tế thường được sử dụng trong thiết kế: bắt đầu với một số thuộc tính cao cấp như chiếc xe sẽ không đâm vào tường, sau đó tìm ra rằng điều này đòi hỏi phải có cảm biến và phanh và đưa ra một số yêu cầu cơ bản cho cảm biến, phanh và phần mềm thử nghiệm, sau đó tinh chỉnh lại các yêu cầu cơ bản đó thành thiết kế thành phần (đối với cảm biến, tôi sẽ cần một radar, DSP, thư viện xử lý hình ảnh, trộm), v.v. Trong quy trình phát triển chính thức, mỗi cấp độ đặc tả được chứng minh là đáp ứng các yêu cầu được đặt ra bởi cấp độ trên nó, tất cả các cách từ các thuộc tính cấp cao nhất cho đến mã.
Không thể chắc chắn rằng đặc điểm kỹ thuật là chính xác. Ví dụ, nếu bạn sai vật lý, hệ thống phanh có thể không hiệu quả mặc dù toán học liên quan đến mã phanh với các yêu cầu chính thức là chính xác. Thật không tốt khi chứng minh rằng việc nghỉ có hiệu quả với 500kg tải nếu bạn thực sự có 5000kg. Nhưng thật dễ dàng để thấy rằng 500kg là sai so với việc nhìn vào bên trong mã phanh rằng chúng sẽ không đủ tốt cho các thông số vật lý của xe.
¹ Điều ngược lại một cách tiếp cận hoàn toàn chính thức là “Tôi đoán công trình này, nhưng tôi không thể chắc chắn”. Khi bạn đặt cược cuộc sống của mình vào nó, điều đó dường như không tuyệt vời lắm.