N öğeyi test ederken, tüm t-alt kümelerini mümkün olduğunca az s-alt kümesiyle nasıl kapsayabilirim?


10

Bu sorun yazılım testlerinden kaynaklanmıştır. Sorunu açıklamak biraz zor. Önce bir örnek vereceğim, sonra sorunu genelleştirmeye çalışacağım.

A'dan J'ye kadar test edilecek 10 öğe ve aynı anda 3 öğeyi test edebilen bir test aracı vardır. Test aracındaki öğelerin sırası önemli değildir. Tabii ki, kapsamlı testler için öğe kombinasyonuna ihtiyacımız var.10C3

Sorun daha karmaşık. Bir çift öğenin birlikte test edilmesinden sonra, aynı çiftin tekrar test edilmesine gerek olmadığı ek bir koşul vardır.

Örneğin, aşağıdaki üç testi gerçekleştirdikten sonra:

ABC

ADE

BDF

yürütmek zorunda değiliz:

ABD

çünkü A, B çifti birinci test vakası tarafından, A, D ikincisi tarafından ve B, D üçüncüsü tarafından kapsanmıştır.

Sorun şu ki, tüm çiftlerin test edildiğinden emin olmak için ihtiyaç duyduğumuz minimum test vakası sayısı nedir?

Genelleştirmek için, n öğemiz varsa, s aynı anda test edilebilir ve olası tüm t-tüllerin test edildiğinden emin olmamız gerekir (s> t gibi), ihtiyacımız olan minimum test vakası sayısı nedir? n, s ve t terimleri?

Son olarak, gerekli test senaryolarını oluşturmak için iyi bir algoritma ne olurdu?


1
Olguların test "optimal" (her tam olarak bir kez test edilir) Blok Tasarım kavramı kapsamındadır . Bu mükemmel test olasılıklarının nispeten azı var, bu yüzden birinin ek buluşsal yöntemlere ihtiyacı var sanırım. t
Hendrik Ocak

Test paradigmanız hatalı; sadece çiftleri test etmek yeterli olmayabilir. Bazı hatalar yalnızca üç (veya daha fazla) bileşen belirli bir kombinasyonda birlikte hareket ederse oluşabilir.
Raphael

4
@Raphael, çok daha iyi bir başlık için teşekkürler, ancak asıl problemi veya bağlamı sıfır anlama ile "test paradigmanız hatalı" iddiasında bulunabileceğinizi tamamen anlayamıyorum.
wookie919

@ wookie919 Bunun nedeni herhangi bir bağlam vermiyorsunuz, ancak genel bir sorun oluşturuyor. Sadece gözlemledim, genel olarak, meydana gelebilecek tüm kombinasyonları test etmeniz gerekebilir (eylemde).
Raphael

Yanıtlar:


11

İstediğiniz blok tasarımlarına (bir seferde 3 şeyi test etmek ve tüm çiftleri kapsamak için) Steiner üçlü sistemleri denir . mod olduğunda üçlüsüne sahip bir Steiner üçlü sistemi vardır ve algoritmaların bunları oluşturduğu bilinmektedir. Örneğin, bu MathOverflow sorusuna bakın (çalışan Sage koduna bir bağlantı ile!). Diğer için , bir sonraki kadar yuvarlak olabilir mod ve bu üç sisteminin bir modifikasyonunu kullanımı için tüm çiftleri kapsayacak şekilde .13(n2)6 n n 1 o r 3 6 n nn1 or 36nn1 or 36nn

Diğer için en iyi yapıyı istiyorsanız, gerekli üçlü sayısı kaplama numarasıdır ve bu girişle tamsayı dizilerinin çevrimiçi ansiklopedisinde verilir. Bu , iyi kaplamaların bulunduğu La Jolla Örtme Havuzu'na bağlanır . Tamsayı dizilerin çevrimiçi ansiklopedisi, ; eğer bu formül mevcutsa, sezgisel olarak bu muhtemelen bu kaplamaları inşa etmek için iyi bir algoritmik yol olması gerektiği anlamına gelir, ancak formül tahmin edildiği için, şu anda kimsenin bunları bilmediği açıktır.Cı- ( n , 3 , 2 ) Cı- ( n , 3 , 2 )n C(n,3,2)C(n,3,2)

Yüksek kaplama sayıları için, iyi kaplamaların bulunması den daha zordur ve depo bilinen herhangi bir verimli algoritmadan daha iyi çözümler verecektir.C(n,3,2)


5

Her köşenin bir çift öğe olduğu ve bir öğeyi ortak paylaştıkları takdirde iki köşe arasında bir kenar olduğu yönlendirilmemiş grafiği . Başka bir deyişle, burada ve . Grafikte köşeleri ve her tepe noktasında kenar olayı var.GG=(V,E)V={{a,b}:a,bItemsab}E={(s,t):s,tV|st|=1}(n2)2n4

O zaman bir yaklaşım maksimum eşleşme bulmak olacaktır . Edmonds algoritması, polinom zamanında böyle bir maksimum eşleşmeyi bulmak için kullanılabilir. Eğer şanslıysanız, bu size mükemmel bir eşleşme sağlayacaktır ve sonra iyisiniz. Eşleştirmedeki her kenar bir test senaryosuna karşılık gelir . Her tepe noktası mükemmel eşleşmede bir kenara sahip olduğundan, çifti optimal bir faktör içinde olan test senaryosunu kullanarak tüm çiftleri kapladınız. Mükemmel bir eşleşme elde edemezseniz, tam kapsam elde etmek için gerektiğinde birkaç test örneği daha ekleyin.G({A,B},{B,C})EABC(n2)/21.5


4

Halinde ve En az gerçekleştirmek için ihtiyaç vardır, çünkü test çiftleri ve her deney kapakları 3 çift. Bu, önemsiz şeyi yapabileceğiniz ve testleri ve optimumdan sadece 3 kat daha kötü bir faktör olabileceğiniz anlamına gelir .s=3t=2(n2)/3(n2)(n2)

Bunu gerçekten programlıyorsanız, bunu optimize etmenin bir yolu önce rastgele bazı sayı testleri seçmek ve daha sonra şimdiye kadar testin kapsamadığı çiftler üzerindeki kaba kuvvet yapmak olabilir.


Genel ve , testlerinin alt sınırı vardır . Üst sınır için bunun yapmak için yeterli olduğunu iddia ediyorum testleri.st(nt)/(st)C(nt)(st)log((nt))O(t(ntst)tlog(n))

Bakalım ne olacak, testleri rastgele tek biçimli olarak seçiyoruz. Rastgele bir dizisi dizisi seçerseniz , sabit bir dizisi dizisi için . Bu nedenle, testlerini rastgele ,sS[n]tX[n]Pr[XS]=(ntst)(ns)C(nt)log((nt))

Pr[X does not belong to any of them]=(1(ntst)(ns))C(nt)log((nt))exp(C(ntst)(nt)(ns)(st)log((nt)))=exp(Clog(nt))1/(nt).

Bu nedenle, birleşme sınırına göre, rasgele testlerden sonra tüm grupları kapsanacaktır.tO(t(ntst)tlog(n))t


Çok anlayışlı cevap için çok teşekkür ederim, ancak test vakalarının tam olarak alt sınır sayısını (mümkün ise) veya çok yakın bir şey oluşturacak kesin bir algoritma arıyordum alt sınır. (nt)/s
wookie919
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.