it-swarm-tr.com

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

Ben ana dili İngilizce olan biri değilim. Ana dilimde, bir özyinelemeyi durdurmak için kontrol edilen koşula ve aşırı, olası veya çok basit durumlar için kontrol edilen koşula atıfta bulunmak için kullanılan bazı terimlerin farkındayım. İngilizce olarak, "Edge case", "corner case", "sınır case" ve "base case" terimleriyle karşılaştım, ancak aradaki farkları anlayamıyorum ve hangisine başvurmak için kullanılıyor; Aralarındaki farkların bir özetini almak isterim.

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

    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 bu:

  1. Aklı kontrol
  2. Giriş kontrolü
  3. Sınır durumu? Kenar çantası? Köşe kılıfı?
  4. Temel dava? Sınır durumu?
  5. Köşe kılıfı? Kenar çantası?
95
Oak

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

  • Kenar durum oluşur aşırı (maksimum veya minimum) çalışma parametresinde.
  • Köşe durum oluşur normal çalışma parametrelerinin dışında, özellikle her bir parametre belirtilen aralıkta olsa bile, birden fazla çevresel değişken veya koşul aynı anda aşırı seviyelerde olduğunda bu parametre için aralık. ("Normal çalışma parametreleri dışında" açıkçası "çalışma parametrelerinin tipik kombinasyonu dışında", kesinlikle "izin verilen çalışma parametreleri dışında" anlamına gelmez. Yani, hala geçerli parametre alanı içindesiniz, ancak köşesine yakınsınız.)
  • Sınır durum oluşur girişlerden biri maksimum veya minimum sınırlardayken veya hemen üzerindeyse.
  • Temel durum burada Özyineleme biter.

Köşe kasası, kesinlikle eşanlamlı olan Edge ve sınır durumlarından biraz farklı (değerlerin bir kombinasyonu) anlamına gelse de, isimlendirme tamamen karışık görünüyor. Edge, köşe ve sınır vakalarının ortak konuşmada aynı şey olduğunu söylemek muhtemelen güvenlidir. Birisi her biri tarafından farklı bir şey söylemek anlamına gelebilir, ancak ortak bir anlaşma neredeyse hiç yoktur.

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

100
Joonas Pulakka

Sözcükler arasındaki farklar ne olursa olsun, bir testi tanımlamak için kullanacağınız şey, tam kodu değil, testin anlambilim (anlam) 'sına bağlıdır. testlerin her biri demek. Bu bir yana, onları nasıl anlıyorum:

  • Sağlık kontrolü = Bu bile mantıklı mı? Örneğin, uygulamanız yalnızca tamsayılar çıkarıyorsa, sqrt(-1) ve log(-1) tanımsız.
  • Giriş kontrolü = Kullanıcı girişini, aksine bazı dahili veri yapısını veya bir fonksiyonun çıkışını test eder. Örneğin, Bash'te [ $# -gt 0 ], find veya mail gibi bir komut için bir sağlık kontrolü olabilen en az bir giriş parametreniz olup olmadığını kontrol eder.
  • Kenar/Sınır kontrolü = doğru çıktı üretmesi beklenen maksimum veya minimum giriş. Örneğin, bir sayıya yalnızca bir tane ekleyen bir işlev, <MIN_INT> ile <MAX_INT> - 1 arasında bir çalışma aralığına sahip olacaktır, çünkü <MIN_INT> değerinden daha küçük girdi kullanıcı tarafından sağlanamaz ve <MAX_INT> değerinden daha büyük çıktı verilemez yararlı olmayacak.
  • Köşe durumu denetimi = Daha karmaşık bir sınır denetimi (köşe iki boyutlu bir sınırdır), örneğin bir hesaplamada <MIN_INT> ve <MAX_INT> öğelerini birleştirir.
  • Özel durum kontrolü = Açık değil, sınırsız özel değerler, örneğin log(1 + the smallest floating point number).
26
l0b0