Apa perbedaan antara kasing tepi, kasing, kasing dan kasing?

86

Saya bukan penutur bahasa Inggris asli. Dalam bahasa ibu saya, saya mengetahui beberapa istilah yang digunakan untuk merujuk pada kondisi yang diperiksa untuk menghentikan rekursi, dan pada kondisi yang diperiksa untuk kasus yang ekstrem, tidak mungkin atau super sederhana. Dalam bahasa Inggris, saya telah menemukan istilah "tepi kasus", "sudut kasus", "batas kasus" dan "basis kasus", tetapi saya tidak bisa mengetahui perbedaan dan yang digunakan untuk merujuk pada apa; Saya ingin mendapatkan ringkasan perbedaan di antara mereka.

Secara khusus, saya akan sangat senang jika seseorang dapat memberikan anotasi untuk baris-baris dalam contoh kode berikut:

    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);
    }

Saya pikir itu:

  1. Cek kewarasan
  2. Pemeriksaan input
  3. Kasus batas? Kasing tepi? Kasus sudut?
  4. Kasing dasar? Kasus batas?
  5. Kasus sudut? Kasing tepi?
ek
sumber
4
Saya percaya tepi dan batas umumnya sama. Tetapi mereka mengacu pada pengujian, bukan untuk memeriksa kondisi dalam kode.
Richard
@Richard Testing bukan kode? Itu bukan pemahaman saya - apakah Anda memiliki referensi untuk mendukung fakta bahwa Anda yakin istilah ini tidak berlaku untuk kode?
Brad Thomas

Jawaban:

94

Saya juga bukan penutur bahasa Inggris asli. Tetapi menurut Wikipedia:

  • Kasing tepi terjadi pada parameter operasi ekstrim (maksimum atau minimum).
  • Kasus sudut terjadi di luar parameter operasi normal , khususnya ketika beberapa variabel atau kondisi lingkungan secara bersamaan berada pada level ekstrem, meskipun setiap parameter berada dalam kisaran yang ditentukan untuk parameter tersebut . ("Parameter operasi normal di luar" jelas berarti sesuatu seperti "kombinasi khas dari parameter operasi", tidak sepenuhnya "parameter operasi yang diizinkan di luar". Artinya, Anda masih berada dalam ruang parameter yang valid, tetapi di dekat sudutnya.)
  • Batas kasus terjadi ketika salah satu input berada pada atau hanya melampaui batas maksimum atau minimum.
  • Kasing dasar adalah tempat Rekursi berakhir.

Jadi, nomenklaturnya kelihatannya benar-benar bingung, meskipun case sudut tampaknya berarti sesuatu yang sedikit berbeda (kombinasi nilai) dari kasus edge dan boundary, yang pasti sinonim. Mungkin aman untuk mengatakan bahwa tepi, sudut, dan kasus batas adalah hal yang sama dalam pembicaraan umum. Seseorang bisa bermaksud mengatakan hal yang berbeda oleh masing-masing dari mereka, tetapi hampir tidak ada kesepakatan bersama.

1) dan 2) Anda adalah apa yang Anda tulis, 3) adalah kasus tepi / batas, 4) adalah kasus dasar, dan 5) adalah kasus khusus.

Joonas Pulakka
sumber
Ini adalah jawaban yang sangat berguna untuk memahami konsep di balik setiap kata teknis.
Jignesh Fadadu
25

Terlepas dari perbedaan antara kata-kata, apa yang Anda gunakan untuk menggambarkan tes tergantung pada semantik (makna) dari tes, bukan kode yang tepat - Dalam contoh asalkan tidak jelas apa yang dimaksud dari setiap tes. Selain itu, inilah cara saya memahaminya:

  • Sanity check = Apakah ini masuk akal? Misalnya, jika aplikasi Anda hanya menghasilkan bilangan bulat, sqrt(-1)dan log(-1)tidak ditentukan.
  • Input input = Menguji input pengguna, sebagai lawan dari beberapa struktur data internal atau output dari suatu fungsi. Misalnya, dalam Bash [ $# -gt 0 ]memeriksa bahwa Anda mendapatkan setidaknya satu parameter input, yang juga bisa menjadi cek kewarasan untuk perintah seperti findatau mail.
  • Pemeriksaan tepi / batas = Input maksimum atau minimum yang diharapkan menghasilkan output yang benar . Misalnya, fungsi yang hanya menambahkan satu ke nomor akan memiliki rentang operasi dari <MIN_INT> ke <MAX_INT> - 1, karena input lebih kecil dari <MIN_INT> tidak dapat disediakan oleh pengguna dan output lebih besar dari <MAX_INT> tidak akan berguna.
  • Pemeriksaan kasus sudut = Pemeriksaan batas yang lebih kompleks (sudut adalah batas dua dimensi), misalnya menggabungkan <MIN_INT> dan <MAX_INT> dalam perhitungan.
  • Cek khusus kasus = Non-jelas, non-batas nilai-nilai khusus , misalnya log(1 + the smallest floating point number).
l0b0
sumber
Nit: logₑ-1 yang tidak canggih adalah iπ. Dengan python,import cmath; assert(cmath.log(-1) == 3.141592653589793j)
Bob Stein