Chà ... đúng vậy , nếu mọi đường dẫn thông qua chương trình được thử nghiệm. Nhưng điều đó có nghĩa là, mọi con đường có thể đi qua toàn bộ không gian của tất cả các trạng thái có thể mà chương trình có thể có, bao gồm tất cả các biến. Ngay cả đối với một chương trình được biên dịch tĩnh rất đơn giản - giả sử, một cruncher số Fortran cũ - không khả thi, mặc dù ít nhất có thể tưởng tượng được: nếu bạn chỉ có hai biến số nguyên, về cơ bản bạn đang xử lý tất cả các cách có thể để kết nối các điểm trên lưới hai chiều; nó thực sự trông rất giống nhân viên bán hàng du lịch. Đối với n biến như vậy, bạn đang làm việc với một n không gian ba chiều, vì vậy đối với bất kỳ chương trình thực tế, nhiệm vụ là hoàn toàn untractable.
Tồi tệ hơn: đối với những thứ nghiêm trọng, bạn không chỉ có một số biến số nguyên thủy cố định mà còn tạo ra các biến số trong các lệnh gọi hàm hoặc có các biến có kích thước biến ... hoặc bất cứ thứ gì tương tự, bằng ngôn ngữ hoàn chỉnh Turing. Điều đó làm cho không gian nhà nước trở nên vô tận, phá tan mọi hy vọng về phạm vi bảo hiểm đầy đủ, thậm chí còn được cung cấp thiết bị thử nghiệm mạnh mẽ vô lý.
Điều đó nói rằng ... thực sự mọi thứ không quá ảm đạm. Nó là thể proove toàn bộ chương trình là đúng, nhưng bạn sẽ phải từ bỏ một vài ý tưởng.
Đầu tiên: rất nên chuyển sang một ngôn ngữ khai báo. Vì một số lý do, ngôn ngữ bắt buộc luôn luôn trở nên phổ biến nhất, nhưng cách chúng kết hợp các thuật toán với các tương tác trong thế giới thực khiến cho việc nói những gì bạn muốn nói là đúng là khó khăn .
Dễ dàng hơn nhiều trong các ngôn ngữ lập trình chức năng thuần túy : chúng có sự phân biệt rõ ràng giữa các tính chất thú vị thực sự của các hàm toán học và các tương tác trong thế giới thực mờ mà bạn không thể thực sự nói gì. Đối với các hàm, rất dễ dàng chỉ định hành vi đúng chính xác, nếu: đối với tất cả các đầu vào có thể (từ các loại đối số), kết quả mong muốn tương ứng xuất hiện, thì hàm sẽ hoạt động chính xác.
Bây giờ, bạn nói rằng điều đó vẫn còn khó hiểu ... xét cho cùng, không gian của tất cả các đối số có thể nói chung cũng là vô hạn. Đúng - mặc dù đối với một chức năng duy nhất, ngay cả thử nghiệm bảo hiểm ngây thơ dẫn bạn đi xa hơn bạn có thể hy vọng trong một chương trình bắt buộc! Tuy nhiên, có một công cụ mạnh mẽ đáng kinh ngạc làm thay đổi trò chơi: định lượng phổ / đa hình tham số . Về cơ bản, điều này cho phép bạn viết các hàm trên các loại dữ liệu rất chung chung, với đảm bảo rằng nếu nó hoạt động với một ví dụ đơn giản về dữ liệu, nó sẽ hoạt động cho mọi đầu vào có thể.
Ít nhất là về mặt lý thuyết. Thật không dễ để tìm đúng loại thực sự quá chung chung đến nỗi bạn hoàn toàn có thể đưa ra điều này - thông thường, bạn cần một ngôn ngữ được gõ phụ thuộc và chúng có xu hướng khá khó sử dụng. Nhưng viết theo kiểu chức năng chỉ với đa hình tham số đã tăng mức độ bảo mật của bạn rất cao - bạn không nhất thiết phải tìm thấy tất cả các lỗi, nhưng bạn sẽ phải che giấu chúng khá tốt để trình biên dịch không phát hiện ra chúng!