Test verisi olarak setlerinin kombinasyonlarını nasıl kullanılır

oy
18

Ben saçak durumlarda ve normal değerler kümesinden bir demet sahip bir işlev test etmek istiyorum. Döndüren bir işlev test Örneğin, trueher bir geçerli bir üçgen oluşturan üç uzunlukları göz önüne alındığında, özel durumlarda, negatif / küçük / büyük sayılar, vb taştı olan yakın değerler olurdu .; daha ne olduğunu, temel amacı, bu değerlerin kombinasyonları üretmektir ile veya olmadan deney veri kümesi elde etmek için, tekrarlama.

(inf,0,-1), (5,10,1000), (10,5,5), (0,-1,5), (1000,inf,inf),
...

Bir not olarak: Aslında bu cevabı biliyorum, ama bu diğerleri için yararlı olabilir ve burada insanlar için bir meydan okuma! Daha sonra benim yanıt sonrası --will.

Oluştur 02/08/2008 saat 22:34
kaynak kullanıcı
Diğer dillerde...                            


5 cevaplar

oy
14

Kesinlikle, özellikle bu permütasyon dolu uğraşan / kombinasyonlar Kesinlikle ilk geçiş sorunu olacağını görebilirsiniz.

Ben "Algoritma 515" dayalı C ve ocaml güzel bir tane yazdım gerçi piton İlginç uygulanması, (aşağıya bakınız). geri sonra tüm "Algoritma XX" gazeteler için, iyi, montaj veya c yaygın olarak o Fortranda onun yazdı. Ben diziler değil sayı aralıkları ile çalışacak şekilde yeniden yazmak ve bazı küçük iyileştirmeler yapmak zorunda kaldı. Bu bir rasgele erişim yapar, hala Knuth 4 hacim fasikülün 2'de bahsedilen olanlar bazı güzel uygulamaları alma üzerinde çalışıyorum ben olacak bu okuyucuya nasıl çalıştığına ilişkin bir açıklama. Birisi meraklı ise de, bir şey yukarı yazmaya itiraz etmem.

/** [combination c n p x]
 * get the [x]th lexicographically ordered set of [p] elements in [n]
 * output is in [c], and should be sizeof(int)*[p] */
void combination(int* c,int n,int p, int x){
    int i,r,k = 0;
    for(i=0;i<p-1;i++){
        c[i] = (i != 0) ? c[i-1] : 0;
        do {
            c[i]++;
            r = choose(n-c[i],p-(i+1));
            k = k + r;
        } while(k < x);
        k = k - r;
    }
    c[p-1] = c[p-2] + x - k;
}

~ "Algoritma 515: kıyaslanmasında Endeksinde bir Vector oluşturulması"; Toka, BP ve Lybanon, Matematiksel Software, Vol M. ACM İşlemler. 3, No. 2, Haziran 1977.

Cevap 03/08/2008 saat 20:06
kaynak kullanıcı

oy
4

Yepyeni Python 2.6 ile, Iterables Kartezyen çarpımı döndürür itertools modülü ile standart bir çözüm vardır:

import itertools

print list(itertools.product([1,2,3], [4,5,6]))
   [(1, 4), (1, 5), (1, 6),
   (2, 4), (2, 5), (2, 6),
   (3, 4), (3, 5), (3, 6)]

Sen bir iterable ve kendisi ile ürünü gerçekleştirmek için bir "tekrar" argüman sağlayabilir:

print list(itertools.product([1,2], repeat=3))
[(1, 1, 1), (1, 1, 2), (1, 2, 1), (1, 2, 2),
(2, 1, 1), (2, 1, 2), (2, 2, 1), (2, 2, 2)]

Ayrıca hem kombinasyonları ile bir şeyler çimdik:

print list(itertools.combinations('123', 2))
[('1', '2'), ('1', '3'), ('2', '3')]

Ve emir konularda eğer permütasyon vardır:

print list(itertools.permutations([1,2,3,4], 2))
[(1, 2), (1, 3), (1, 4),
   (2, 1), (2, 3), (2, 4),
   (3, 1), (3, 2), (3, 4),
   (4, 1), (4, 2), (4, 3)]

Tabii şeyler serin hepsi aynı şeyi yapmazlar, ancak bir şekilde bunları kullanabilir veya başka size sorunu çözmek için.

Sadece listesi (), tuple () ve set () kullanarak tersi bir dizi bir demet veya bir liste dönüştürmek ve unutmayın.

Cevap 04/10/2008 saat 09:52
kaynak kullanıcı

oy
4

İlginç soru!

Ben kombinasyonları, Python Aşağıdaki gibi bir şey seçerek bu yapardı. En zor kısmı, yani muhtemelen ilk geçiş doğrulama olduğunu if f(1,2,3) returns true, doğru bir sonuç olduğunu? Bunu doğruladıktan sonra, o zaman bu regresyon testleri için iyi bir temel oluşturur.

Muhtemelen tüm sahte (örneğin 0,1 olacak biliyorum hepsi gerçek (bu üçgen durum için örneğin 3,4,5) olacağını biliyorum test durumlarda bir dizi ve test durumlarda bir dizi yapmak için iyi bir fikir var ,) inf. Sonra daha kolay testler doğru doğrulayabilir.

http://code.activestate.com/recipes/190465 dan # xpermutations
xpermutations gelen * içe

uzunlukları = [- 1,0,1,5,10,0,1000 'inf']
# Veya xuniqueselections: xselections (uzunlukları, 3) içinde c
    baskı c
(-1, -1, -1);
(-1, -1,0);
(-1, -1,1);
(-1, -1,5);
(-1, -1,10);
(-1, -1,0);
(-1, -1,1000);
(-1, -1, sonsuz);
(-1,0, -1);
(-1,0,0);
...
Cevap 03/08/2008 saat 01:04
kaynak kullanıcı

oy
2

Ne ile yapabilirsiniz düşünmek Satır Testi Özellik Eğer bir ünite testini doldurmak için birkaç setleri belirleyebildiğinde (MbUnit mevcut ve NUnit sonraki sürümlerinde).

Cevap 16/08/2008 saat 14:31
kaynak kullanıcı

oy
0

o Test miktarda veri oluşturmak ve ne olduğunu görmek mümkün olsa da, verileri kullanılıyor aza indirmek için denemek için daha verimli.

Tipik bir QA açısından bakıldığında, sen girdilerin farklı sınıflandırmaları belirlemek isterim. Her grupta giriş değerleri kümesini üretmek ve uygun çıkış belirler.

İşte girdi değerlerinin sınıfların bir örneği var

  • gibi küçük sayılarla geçerli üçgenler (1 milyar, 2, milyar, 2 milyar)
  • gibi, çok sayıda geçerli üçgenler (0.000001, 0.00002, 0.00003)
  • gibi almost'flat' olan geçerli bir geniş üçgen (10, 10, 19,9999)
  • gibi neredeyse 'daire (10, 10, 0000001) vardır geçerli akut üçgenler
  • en az bir negatif değere sahip hatalı üçgenler
  • İki tarafın toplamı üçte eşittir geçersiz üçgenler
  • iki tarafın toplamı üçüncü daha büyük olan hatalı üçgenler
  • sayısal olmayan olan girdi değerleri

...

Eğer bu işlev için giriş sınıflandırmaların listesi ile yeterli bulduğunuz o zaman gerçek test verilerini oluşturabilir. Olasılıkla, her öğenin tüm permütasyon test etmek yararlı olacaktır. (Örneğin, (2,3,4), (2,4,3), (3,2,4), (3,4,2), (4,2,3), (4,3,2)) Genellikle, (örneğin bir giriş parametresi olarak inf kavramı gibi) kaçırdığınız bazı sınıflandırmalar vardır göreceksiniz.

belli bir süre için Rastgele veri garip şifreli hataları bulmak, ancak genellikle üretken değildir ki, hem yararlı olabilir.

Daha çok, bu fonksiyon ek kurallar uygulanır, bazı belirli bir bağlamda kullanılıyor. (Örneğin, sadece tam sayı değerleri veya değerler, 0.01 artışlarla vb olmalıdır) Bu giriş parametrelerini sınıflandırmaların listesine ekler.

Cevap 17/09/2008 saat 04:15
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more