Khẳng định không tồn tại thực tế
Thông thường các xác nhận không tồn tại liên hệ với dữ liệu trong thế giới thực. Đó là một phần của quy trình công nghệ phần mềm để quyết định, với dữ liệu nào bạn muốn xử lý và dữ liệu nào nằm ngoài phạm vi.
Đồ thị gia đình tuần hoàn
Về "cây" gia đình (thực tế nó là đồ thị đầy đủ, bao gồm cả chu kỳ), có một giai thoại hay:
Tôi kết hôn với một góa phụ có một cô con gái lớn. Cha tôi, người thường đến thăm chúng tôi, đã yêu con gái riêng của tôi và cưới cô ấy. Kết quả là cha tôi trở thành con trai tôi và con gái tôi trở thành mẹ tôi. Một thời gian sau, tôi cho vợ một đứa con trai, là anh trai của bố tôi và chú tôi. Vợ của bố tôi (cũng là con gái tôi và mẹ tôi) có một đứa con trai. Kết quả là tôi có một anh trai và một cháu trai trong cùng một người. Vợ tôi bây giờ là bà tôi, vì cô ấy là mẹ của mẹ tôi. Vì vậy, tôi là chồng của vợ tôi, đồng thời là cháu nội của vợ tôi. Nói cách khác, tôi là ông của chính tôi.
Mọi thứ trở nên kỳ lạ hơn nữa, khi bạn tính đến những người thay thế hoặc "làm cha mờ nhạt".
Làm thế nào để đối phó với điều đó
Xác định chu kỳ là ngoài phạm vi
Bạn có thể quyết định rằng phần mềm của bạn không nên xử lý các trường hợp hiếm gặp như vậy. Nếu trường hợp như vậy xảy ra, người dùng nên sử dụng một sản phẩm khác. Điều này làm cho việc xử lý các trường hợp phổ biến mạnh mẽ hơn nhiều, bởi vì bạn có thể giữ nhiều xác nhận hơn và một mô hình dữ liệu đơn giản hơn.
Trong trường hợp này, hãy thêm một số tính năng nhập và xuất tốt vào phần mềm của bạn để người dùng có thể dễ dàng di chuyển sang một sản phẩm khác khi cần thiết.
Cho phép quan hệ thủ công
Bạn có thể cho phép người dùng thêm quan hệ thủ công. Các mối quan hệ này không phải là "công dân hạng nhất", tức là phần mềm đưa họ theo nguyên trạng, không kiểm tra chúng và không xử lý chúng trong mô hình dữ liệu chính.
Người dùng sau đó có thể xử lý các trường hợp hiếm bằng tay. Mô hình dữ liệu của bạn sẽ vẫn khá đơn giản và các xác nhận của bạn sẽ tồn tại.
Hãy cẩn thận với các quan hệ thủ công. Có một sự cám dỗ để làm cho chúng có thể cấu hình hoàn toàn và do đó tạo ra một mô hình dữ liệu có thể cấu hình đầy đủ. Điều này sẽ không hoạt động: Phần mềm của bạn sẽ không mở rộng quy mô, bạn sẽ gặp các lỗi lạ và cuối cùng giao diện người dùng sẽ trở nên không sử dụng được. Mô hình chống này được gọi là "mã hóa mềm" và "WTF hàng ngày" có đầy đủ các ví dụ cho điều đó.
Làm cho mô hình dữ liệu của bạn linh hoạt hơn, bỏ qua các xác nhận, kiểm tra bất biến
Phương sách cuối cùng sẽ làm cho mô hình dữ liệu của bạn linh hoạt hơn. Bạn sẽ phải bỏ qua gần như tất cả các xác nhận và dựa trên mô hình dữ liệu của mình trên một biểu đồ đầy đủ. Như ví dụ trên cho thấy, có thể dễ dàng trở thành ông của chính bạn, vì vậy bạn thậm chí có thể có chu kỳ.
Trong trường hợp này, bạn nên kiểm tra rộng rãi phần mềm của bạn. Bạn đã phải bỏ qua gần như tất cả các xác nhận, vì vậy có một cơ hội tốt cho các lỗi bổ sung.
Sử dụng một trình tạo dữ liệu thử nghiệm để kiểm tra các trường hợp thử nghiệm bất thường. Có thư viện kiểm tra nhanh chóng cho Haskell , Erlang hoặc C . Đối với Java / Scala có ScalaCheck và Nyaya . Một ý tưởng thử nghiệm sẽ là mô phỏng một quần thể ngẫu nhiên, để nó giao thoa ngẫu nhiên, sau đó cho phần mềm của bạn nhập trước rồi xuất kết quả. Kỳ vọng sẽ là, tất cả các kết nối trong đầu ra cũng nằm trong đầu vào và ngược lại.
Một trường hợp, trong đó một tài sản giữ nguyên được gọi là bất biến. Trong trường hợp này, bất biến là tập hợp "quan hệ lãng mạn" giữa các cá nhân trong dân số mô phỏng. Cố gắng tìm ra càng nhiều bất biến càng tốt và kiểm tra chúng với dữ liệu được tạo ngẫu nhiên. Bất biến có thể là chức năng, ví dụ:
- một người chú ở lại một người chú, ngay cả khi bạn thêm "quan hệ lãng mạn"
- mỗi đứa trẻ đều có cha mẹ
- một dân số có hai thế hệ có ít nhất một ông bà
Hoặc họ có thể là kỹ thuật:
- Phần mềm của bạn sẽ không gặp sự cố trên biểu đồ lên tới 10 tỷ thành viên (cho dù có bao nhiêu kết nối)
- Phần mềm của bạn chia tỷ lệ với O (số nút) và O (số cạnh ^ 2)
- Phần mềm của bạn có thể lưu và tải lại mỗi biểu đồ gia đình lên tới 10 tỷ thành viên
Bằng cách chạy các bài kiểm tra mô phỏng, bạn sẽ tìm thấy rất nhiều trường hợp góc lạ. Sửa chúng sẽ mất rất nhiều thời gian. Ngoài ra, bạn sẽ mất rất nhiều tối ưu hóa, phần mềm của bạn sẽ chạy chậm hơn nhiều. Bạn phải quyết định, nếu nó có giá trị và nếu điều này nằm trong phạm vi phần mềm của bạn.