Sự khác biệt giữa trường hợp cạnh, trường hợp góc, trường hợp cơ sở và trường hợp biên là gì?


86

Tôi không phải là người nói tiếng Anh bản ngữ. Trong ngôn ngữ mẹ đẻ của tôi, tôi biết một số thuật ngữ được sử dụng để chỉ điều kiện được kiểm tra để ngăn chặn đệ quy và điều kiện được kiểm tra cho các trường hợp cực kỳ, không thể hoặc siêu đơn giản. Trong tiếng Anh, tôi đã gặp các thuật ngữ "trường hợp cạnh", "trường hợp góc", "trường hợp ranh giới" và "trường hợp cơ sở", nhưng tôi không thể tìm ra sự khác biệt và được sử dụng để nói về điều gì; Tôi muốn nhận được một số tóm tắt về sự khác biệt giữa chúng.

Đặc biệt, tôi sẽ rất vui nếu ai đó có thể cung cấp chú thích cho các dòng trong mẫu mã sau:

    int transmogrify(int n) {
1.      assert(n <= 1000000);
2.      if (n < 0) return -1;
3.      if (n == 1000000) return PRE_CALC;
4.      if (n == 0) return n+1;            // For stopping the recursion
5.      if (n == 1251) return 3077;
        return transmogrify(n-1);
    }

Tôi nghĩ đó là:

  1. Kiểm tra sự tỉnh táo
  2. Kiểm tra đầu vào
  3. Trường hợp ranh giới? Trường hợp cạnh? Trường hợp góc?
  4. Trường hợp cơ sở? Trường hợp ranh giới?
  5. Trường hợp góc? Trường hợp cạnh?

4
Tôi tin rằng cạnh và ranh giới nói chung là như nhau. Nhưng họ đề cập đến thử nghiệm, không kiểm tra các điều kiện trong mã.
Richard

@Richard Kiểm tra không mã? Đó không phải là sự hiểu biết của tôi - bạn có tham khảo để hỗ trợ thực tế rằng bạn tin rằng các điều khoản này không áp dụng cho mã không?
Brad Thomas

Câu trả lời:


94

Tôi cũng không phải là người nói tiếng Anh bản ngữ. Nhưng theo Wikipedia:

  • Trường hợp cạnh xảy ra ở một tham số vận hành cực đoan (tối đa hoặc tối thiểu).
  • Trường hợp góc xảy ra bên ngoài các tham số hoạt động bình thường , cụ thể là khi nhiều biến môi trường hoặc điều kiện đồng thời ở mức cực đoan, mặc dù mỗi tham số nằm trong phạm vi chỉ định cho tham số đó . .
  • Trường hợp ranh giới xảy ra khi một trong các đầu vào ở hoặc vượt quá giới hạn tối đa hoặc tối thiểu.
  • Trường hợp cơ sở là nơi kết thúc đệ quy .

Vì vậy, danh pháp dường như hoàn toàn bị nhầm lẫn, mặc dù trường hợp góc dường như có nghĩa là một cái gì đó hơi khác (một sự kết hợp của các giá trị) so với các trường hợp cạnh và biên, chắc chắn là từ đồng nghĩa. Có lẽ an toàn để nói rằng các trường hợp cạnh, góc và ranh giới là điều tương tự trong lời nói chung. Ai đó có thể muốn nói những điều khác nhau bởi mỗi người trong số họ, nhưng hầu như không có bất kỳ thỏa thuận chung nào.

1) và 2) của bạn là những gì bạn đã viết, 3) là trường hợp cạnh / biên, 4) là trường hợp cơ sở và 5) là trường hợp đặc biệt.


Đây là câu trả lời rất hữu ích để hiểu các khái niệm đằng sau mỗi từ kỹ thuật.
Jignesh Fadadu

25

Bất kể sự khác biệt giữa các từ, những gì bạn sử dụng để mô tả một bài kiểm tra phụ thuộc vào ngữ nghĩa (ý nghĩa) của bài kiểm tra, không phải là mã chính xác - Trong ví dụ cung cấp không rõ ràng mỗi bài kiểm tra có ý nghĩa gì. Bỏ qua chuyện đó, đây là cách tôi hiểu họ:

  • Kiểm tra tinh thần = Điều này thậm chí có ý nghĩa? Ví dụ: nếu ứng dụng của bạn chỉ xuất ra số nguyên sqrt(-1)log(-1)không được xác định.
  • Kiểm tra đầu vào = Kiểm tra đầu vào của người dùng, trái với một số cấu trúc dữ liệu nội bộ hoặc đầu ra của một chức năng. Ví dụ, trong Bash [ $# -gt 0 ]kiểm tra rằng bạn có ít nhất một tham số đầu vào, cũng có thể là kiểm tra độ chính xác cho một lệnh như findhoặc mail.
  • Kiểm tra biên / biên = Đầu vào tối đa hoặc tối thiểu dự kiến ​​sẽ tạo ra đầu ra chính xác . Ví dụ: một hàm chỉ thêm một vào một số sẽ có phạm vi hoạt động từ <MIN_INT> đến <MAX_INT> - 1, do người dùng không thể cung cấp đầu vào nhỏ hơn <MIN_INT> và đầu ra lớn hơn <MAX_INT> sẽ không hữu ích
  • Kiểm tra trường hợp góc = Kiểm tra ranh giới phức tạp hơn (một góc là ranh giới hai chiều), ví dụ: kết hợp <MIN_INT> và <MAX_INT> trong một phép tính.
  • Ví dụ kiểm tra trường hợp đặc biệt = Các giá trị đặc biệt không rõ ràng, không biên giới log(1 + the smallest floating point number).

Một nit không phức tạp: logₑ-1 là iπ. Trong trăn,import cmath; assert(cmath.log(-1) == 3.141592653589793j)
Bob Stein
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.