Nó có thể không Turing hoàn tất hình thức, nhưng 99% sẽ là tuyệt vời cũng :).
Xin lỗi, nhưng tôi thà cung cấp giải pháp NP-đầy đủ :)
câu trả lời nhanh từ tôi sẽ Test-Driven Approach. Nhưng đọc thêm để biết thêm.
Vấn đề như tôi nhìn thấy nó mà chúng ta nên tưởng tượng rất nhiều kịch bản trên cùng một đối tượng , đó là khó khăn hơn nhiều so với một hệ quả hoạt động độc lập.
Trong trường hợp này các phân hủy (không chỉ ở computer science nghĩa nào đó, nhưng trong mathematical quá) là rất hữu ích. Bạn phân tách kịch bản phức tạp trong nhiều số đơn giản hơn, do đó có thể vẫn phức tạp và có thể bị phân tách thêm.
Do quá trình như vậy, bạn nên kết thúc với một số chức năng đơn giản (nhiệm vụ) chủ yếu là độc lập với từng chức năng. Điều này rất quan trọng vì sau đó bạn có thể UNIT TEST những tình huống đơn giản đó. Ngoài ra, việc theo dõi test-first approach dễ dàng hơn và tốt hơn, cho phép xem sự phân hủy ngay từ đầu của quá trình phát triển.
Bạn có sử dụng bất kỳ hình thức toán học và cách tiếp cận nào để quản lý nhà nước đối tượng phức tạp không?
Để tiếp tục những gì tôi đã nói, với tôi điều quan trọng nhất là phân tích tốt để tôi có thể đảm bảo chất lượng và có thể dễ dàng tái tạo lỗi một cách tự động.
Để cung cấp cho bạn một ví dụ trừu tượng:
Bạn có một kịch bản phức tạpA
. Bạn luôn cần phải viết ít nhất 3 bài kiểm tra cho mỗi trường hợp: đầu vào chính xác, trường hợp nhập liệu không đúng và góc.
Bắt đầu viết kiểm tra đầu tiên (đầu vào chính xác) Tôi nhận thấy rằng thử nghiệm trở nên quá phức tạp.
Kết quả là, tôi phân hủy kịch bảnA
vào ít phức tạp A1
, A2
, A3
. Sau đó, tôi bắt đầu viết các bài kiểm tra cho mỗi người một lần nữa (tôi nên kết thúc với ít nhất 3 * 3 = 9 bài kiểm tra).
Tôi nhận ra rằng A1
vẫn còn quá phức tạp để kiểm tra, vì vậy tôi phân hủy nó một lần nữa vào A1-1
, A1-2
. Bây giờ tôi có 4 kịch bản khác nhau (A1-2, A1-2, A2, A3) và 3 * 4 = 12 thử nghiệm tiềm năng. Tôi tiếp tục viết các bài kiểm tra.
Sau khi hoàn tất. Tôi bắt đầu triển khai, vì vậy tất cả các bài kiểm tra của tôi đều vượt qua. Sau đó bạn có 12 chứng minh rằng kịch bản A
(chính xác hơn các bộ phận của nó) hoạt động chính xác. Ngoài ra, bạn có thể viết 3 thử nghiệm khác cho kịch bản A
kết hợp tất cả các phần bị phân hủy của nó - loại thử nghiệm này là thường là (nhưng không phải lúc nào!) Có thể được xem là Integration testing.
Sau đó, giả sử lỗi được tìm thấy trong trường hợp A
. Bạn không chắc chắn phần nào thuộc về nó, nhưng bạn nghi ngờ rằng nó có liên quan đến A1-2
hoặc A3
. Vì vậy, bạn viết 2 bài kiểm tra khác cho mỗi trường hợp để tạo lại lỗi (viết bài kiểm tra không đáp ứng được kỳ vọng của bạn). Sau khi bạn đã sao chép các lỗi bạn sửa chữa nó và làm cho tất cả các bài kiểm tra vượt qua.
Bây giờ bạn có thêm 2 chứng minh về hệ thống làm việc chính xác để đảm bảo tất cả chức năng trước đó hoạt động theo cùng một cách.
Có 2 vấn đề chính chính với cách tiếp cận này IMO.
- Bạn cần viết nhiều bài kiểm tra và hỗ trợ chúng. Nhiều nhà phát triển chỉ cần không muốn làm điều đó.
- Ngoài ra, quá trình phân hủy mang tính nghệ thuật hơn khoa học. Phân hủy tốt sẽ dẫn đến một cấu trúc tốt, kiểm tra và hỗ trợ trong khi một xấu sẽ dẫn đến rất nhiều đau đớn và lãng phí thời gian. Và nó là khó để biết nếu phân hủy là tốt hay xấu lúc đầu.
Quá trình này được gọi là Test-Driven-Phát triển.Tôi thấy nó là gần nhất "chính thức hóa" quá trình phát triển đóng vai trò tốt đẹp giữa khoa học và thế giới thực.
Vì vậy, tôi không thực sự nói về trạng thái ở đây mà là hành vi và chứng minh nó hoạt động chính xác.
Từ trải nghiệm cá nhân, tôi nên đề cập đến ASP.NET WebForm về mặt kỹ thuật RẤT khó kiểm tra. Để khắc phục điều đó, tôi sẽ đề xuất apply MVP pattern for ASP.NET WebForms.
Ngược lại với WebForms, ASP.NET MVC dễ dàng hơn rất nhiều để kiểm tra. Nhưng vẫn còn, bạn nên có bộ gọi là "dịch vụ" (kịch bản của chúng tôi) và (đơn vị) kiểm tra chúng một cách riêng biệt, sau đó kiểm tra tích hợp giao diện người dùng trong môi trường gần kiểm thử Tích hợp.
Bạn có đang hỏi về việc sử dụng Tự động hữu hạn của tiểu bang để lên kế hoạch thay đổi trạng thái trong GUI không? Bạn đang tìm kiếm điều này? http://www.wisdom.weizmann.ac.il/~dharel/SCANNED.PAPERS/Statecharts.pdf Hoặc phiên bản UML của nó? –
vâng, tôi đã nghĩ về điều gì đó như thế này. nhưng tôi đã tìm cách sử dụng thực sự các hình thức như vậy cho các công việc thường ngày. cái bạn thấy quá trừu tượng và không thể áp dụng trực tiếp. tôi sẽ đọc nó sau này, nhưng từ lần xem đầu tiên, nó đòi hỏi nhiều nỗ lực hơn cho ít lợi nhuận thực sự. Tôi vẫn không biết nếu có bất kỳ câu trả lời nghiêm ngặt nào cho câu hỏi của tôi. – rudnev
@rudnev: Nếu bạn loại bỏ cách tiếp cận tiêu chuẩn là "không áp dụng trực tiếp" thì có thể bạn sẽ không tìm thấy bất kỳ câu trả lời nào. –