Kenar kasası, köşe kasası, taban kasası ve sınır kasası arasındaki fark nedir?


86

Ben anadili İngilizce değil. Anadilimde, özyinelemeyi durdurmak için kontrol edilen koşullara ve aşırı, muhtemel olmayan veya çok basit vakalar için kontrol edilen şartlara atıfta bulunmak için kullanılan bazı terimlerin farkındayım. İngilizce'de, "kenar durum", "köşe durum", "sınır durum" ve "temel durum" terimleriyle karşılaştım, ancak aradaki farklılıkları tam olarak anlayamıyorum; Aralarındaki farkların bir özetini almak isterim.

Özellikle, birisi aşağıdaki kod örneğindeki satırlar için ek açıklamalar sağlayabilirse çok mutlu olurum:

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

Ben düşünüyorum öyle:

  1. Aklı kontrol
  2. Giriş kontrolü
  3. Sınır davası? Kenar davası? Köşe davası?
  4. Temel durum? Sınır davası?
  5. Köşe davası? Kenar davası?

4
Kenar ve sınırın genellikle aynı olduğuna inanıyorum. Ancak koddaki koşulları kontrol etmek yerine teste başvuruyorlar.
Richard

@Richard Test kodu değil mi? Bu benim anlayışım değil - bu şartların koda uygulanmadığına inandığınız gerçeğini destekleyen bir referansınız var mı?
Brad Thomas

Yanıtlar:


94

Ben de anadili İngilizce değil. Ancak Wikipedia'ya göre:

  • Kenar durumda meydana gelir , bir aşırı (maksimum veya minimum) işletme parametresinde.
  • Köşe durumda ortaya , normal çalışma parametreleri dışında özel olarak ise, çok sayıda çevresel değişkenler ve şartlar her parametre bu parametre için belirtilen aralık içinde olsa da, aşırı düzeyde eş zamanlı zaman . ("Dış normal çalışma parametreleri" açıkça "dış kullanım izin verilen çalışma parametreleri" değil, "çalışma parametrelerinin tipik kombinasyonunun dışında" gibi bir şey anlamına gelir. Yani, hala geçerli parametre alanı içindesiniz, ancak köşesine yakınsınız.)
  • Sınır durumu , girdilerden biri maksimum veya minimum limitlerin altında veya hemen ötesinde olduğunda meydana gelir .
  • Temel durum , özyineleme bittiği yerdir .

Bu yüzden, isimlendirme tamamen karışmış gibi görünmektedir, ancak köşe durumu kesinlikle eş anlamlı olan kenar ve sınır durumlarından biraz farklı (değerlerin bir arada) anlamına gelse de. Ortak konuşmada, kenar, köşe ve sınır davalarının aynı şey olduğunu söylemek muhtemelen güvenlidir. Birisi her biri tarafından farklı bir şey söylemek isteyebilir, ancak ortak bir anlaşma yapılması pek mümkün değildir.

1) ve 2) sizin yazdıklarınızdır, 3) bir kenar / sınır durumudur, 4) bir temel durumdur ve 5) özel bir durumdur.


Her teknik kelimenin arkasındaki kavramları anlamak için bu çok yararlı bir cevap.
Jignesh Fadadu

25

Ne olursa olsun bir testi tarif etmek için kullandıkları yapardım deyişle, arasındaki farkların bağlıdır semantik testi değil, tam kodu (anlam) - örnek, testlerin her ne anlama geldiğini belli değil sağladı içinde. Bu bir yana, işte onları nasıl anladığım:

  • Sağlık kontrolü = Bu bir anlam ifade ediyor mu? Örneğin, uygulamanız yalnızca tamsayılar verir sqrt(-1)ve log(-1)tanımsızsa.
  • Giriş kontrolü = Bazı dahili veri yapıları veya fonksiyonların çıkışı yerine kullanıcı girişini test eder . Örneğin, Bash [ $# -gt 0 ]de böyle bir komut için bir aklı kontrol olabilir, en azından bir giriş parametresi, var olduğunu kontrol eder findya mail.
  • Kenar / Sınır kontrolü = Doğru çıktı vermesi beklenen maksimum veya minimum giriş . Örneğin, yalnızca bir sayıya ekleyen bir işlev <MIN_INT> ile <MAX_INT> - 1 arasındaki bir çalışma aralığına sahip olacaktır, çünkü <MIN_INT> 'den daha küçük giriş kullanıcı tarafından sağlanamaz ve <MAX_INT>' den daha büyük çıktı alınamaz. işe yaramayacak.
  • Köşe büyüklüğü kontrolü = Daha karmaşık bir sınır denetimi (bir köşe iki boyutlu bir sınırdır), örneğin bir hesaplamada <MIN_INT> ve <MAX_INT> öğelerini birleştirin.
  • Özel durum kontrolü = Örneğin, açık olmayan, sınırsız özel değerlerlog(1 + the smallest floating point number) .

Karmaşık olmayan bir nit: logₑ-1 iπ'dir. Python'daimport cmath; assert(cmath.log(-1) == 3.141592653589793j)
Bob Stein
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.