Büyüyen Ksmi Yol Kstlaryla Konkolik Test Yavuz Köro§lu, Alper “en Bo§aziçi Üniversitesi, Bilgisayar Mühendisli§i Bölümü {yavuz.koroglu,alper.sen}@boun.edu.tr Özet. Otomatik birim testler sayesinde programlarn kapsama orann arttrmak mümkündür. Konkolik test metodu (concolic testing) otoma- tik birim test yaratm için kullanlan bir yazlm testi tekni§idir. Ancak, yol patlamas (path explosion) ve kst çözümlerinin (constraint solving) yaratt§ darbo§az nedeniyle, ölçeklenebilir bir otomatik konkolik testçi geli³tirmek zor olmu³tur. Bu tekni§i ölçeklenebilir hale getirebilmek için bu makalede kst çözücüye daha çok ama daha küçük sorgular gönderi- lerek çözme üzerindeki yükü haetecek bir yol önerilmi³tir. Yapt§mz deneyler altta yatan kst çözücüye yaplan sorgu uzunluklarn dü³ürerek bu hedefe yakla³ld§n gösteriyor. Anahtar Kelimeler: Konkolik Test (Concolic Testing), Hedef Yöne- limli Test (Goal Directed Testing), Dallanma Zorlamas (Branch Enfor- cement), Kst Çözümü (Constraint Solving) 1 Giri³ Konkolik testte amaç test edilen programn yollarn dola³acak girdileri oto- matik olarak olu³turmaktr. Buna örnek olarak bir üçgen snandrma progra- mn dü³ünelim. Bu program test edilirken bütün olas sonuçlarn (çe³itkenar, ikizkenar, e³kenar, üçgen de§il) bir ³ekilde ortaya çkarlmasn sa§layacak test girdileri üretilmesini bekleriz. Tüm yollar kapsayacak ³ekilde bir test üretmek zor ve uzun vakit alan bir i³tir. Bu i³in hzlanabilmesi, daha büyük program- larda da otomatik test üretimini mümkün klacaktr. Konkolik testin daha hzl çal³mas için önerdi§imiz yöntem kst çözücüye yaplan sorgu uzunluklarn dü³ürerek bu amaca hizmet etmeyi öngören bir ön çal³madr. Konkolik test metodu program çal³masn (program execution) istenilen yollara yönlendiren girdileri yaratmaya çal³r. Bu girdileri yaratabilmek için, istenilen yollarn yol kstlar (path constraint) bulunur. Böyle kstlar sa§layan girdileri bulmak kst sa§lama problemi (constraint satisfaction problem) olarak bilinen çok zor bir problemdir. Bu problemleri çözmek genelde girdinin büyüyü³üyle üssel oranda vakit alr. Bu yüzden kst sa§lama için yapmay planlad§mz ³ey mümkünse k- st çözücüye yaplan sorgu saysn artrmak pahasna sorgular ksaltmaktr. Bir büyük kstn çözümü için daha küçük kstlarn çözümünü kullanmak üzerinde çal³lm³ bir kirdir [1]. Kst çözücüleri bu ³ekilde kullanmak yazlm do§rula- mas (verication) alannda önerilmi³tir [2]. Yöntemimizi CREST adl konkolik test programnda gerçekle³tirdik. Yapt§mz ilk deneysel çal³malarda daha kü- çük denemeler ile ayn kapsama oranna ula³labildi§ini gördük. Makalenin geri 2 kalan ³u ³ekilde düzenlenmi³tir. Bölüm 2 konkolik test üzerine yaplm³ di§er çal³malar açklamaktadr. Bölüm 3 konkolik test ve geli³tirilmi³ yeni yöntem hakknda detayl bilgi vermektedir. Bölüm 4 ise önerilen metodun yararl oldu§u bir örne§i içermektedir. Bölüm 5 ise küçük programlar üzerindeki deneysel sonuç- lar gösterirken bu sonuçlar tart³maktadr. Bölüm 6 ise ³imdiye kadar gelinmi³ olan noktay belirtirken Bölüm 7 ise daha ileride yaplabilecekleri anlatmaktadr. 2 lgili Çal³malar Konkolik test verilen bir programn istenilen ksmlarn çal³trmak için ge- rekli girdileri üreten ve programlar somut olarak bu girdilerle çal³tran yazlm testi temelli bir yakla³mdr. Konkolik test program istenilen tek bir hedefe yön- lendirilebilir [3] veya olas bütün hedeere varmaya çal³abilir [4] [5] [6]. Java [7] [8], C [5] ve C# [6] gibi bilinen dillerin ço§unda kullanlm³tr. Konkolik test bü- yük programlarda çal³trlamad§ndan bu yöntemin farkl ba§lamlarda geli³ti- rilmesi için çal³malar yaplm³tr [9]. Konkolik testte kullanlan yakla³mlar üze- rine detayl bir ara³trma bulunmaktadr [5]. Geleneksel konkolik testin özünde tüm program yollar üzerinde derinlik öncelikli arama (depth rst search) var- dr [4]. Bu aramalarda uygulamann somut çal³m sonucu hesaplanm³ sembolik yollar kullanlr. Bu yakla³mda yol üzerinde denenmemi³ en son dallanma tersine çevrilmeye çal³lr. En çok uygulanan alternatif yakla³mlardan biri ise geni³lik öncelikli aramadr (breadth rst search) [1] [10]. Bu yakla³mda algoritma rast- gele bir girdiden ba³lar ve yol üzerinde denenmemi³ ilk dallanmada sapmaya neden olacak girdileri bulmaya çal³r. lk seviyedeki dallanmalar bitti§inde bir sonraki dallanmalara geçilir ve yeni girdiler olu³turulurken önceki yaratlm³ gir- dilerden faydalanlr. Bu yakla³m ba³ta çok küçük yol kstlar yaratr ve kstl bir test yapma yakla³mna olanak sa§lar. Ba³ka bir arama alternati de kontrol- ak³ yönlendirmeli (control-ow directed) testtir [5]. Algoritma program istatis- tiki olarak kontrol-ak³ çizelgesindeki en yakn ifadelere yönlendirmeye çal³r. Program çal³ma yollar üzerinde arama yaptkça algoritmann yava³lad§ gö- rülmü³, bu yüzden rastgele yeniden ba³lamalar kullanlm³tr. Rastgele-dallanma test yakla³m uygulamann somut çal³m sonucu hesaplanm³ sembolik yol üze- rindeki herhangi bir dallanmay rastgele olarak seçer [5]. Rastgele-dallanma ara- masnn yan sra, rastgele-yol aramas da denenmi³tir. Bu yakla³m rastgele yollar seçmeyi ve çal³may bu yollara yönlendirmeyi dener. Bu yakla³mn yaz- lm testinde en sk kullanlan rastgele-girdi aramasndan daha iyi çal³t§ iddia edilmi³tir. Bu yakla³m somut bir çal³ma seçer ve bu çal³ma yolu üzerindeki 1 her dallanmay 2 olaslkla tersine çevirir. Sonra da bu yeni yol kst için girdi yaratmaya çal³r. Rastgele-dallanma yakla³mnn kapsama bakmndan daha iyi çal³t§ gösterilmi³tir [5]. Bir di§er ilginç yakla³m ise hedef-yönelimli dallanma zorlamasdr (goal-directed branch enforcement). Bu yakla³mda belirli bir he- def için sembolik yol kstlar toplanr ve bütün kst giderek artan ³ekilde kritik dallanma ko³ullarn çözerek sa§lanr [11]. Bizim çal³mamzda ise, söz konusu yakla³mn tüm yollar deneyen metodlara genellenmesi sunulmaktadr. Konko- lik testte kullanlan kst sa§lama problemi verilen kstlar içerisinde kalan bir 3 örnek bulmak olarak tanmlanabilir. Konu hakknda daha fazla bilgi [12] kayna- §ndan elde edilebilir. Yices, Z3 gibi standart kst çözücülerin yan sra nonlineer kstlar çözmek [13] ve gerçel saylarda yüksek kesinlik [14] için ayarlanm³ k- st çözücüler vardr. Kst çözümü 3-sa§lanabilirlik (3-satisability) probleminin bir genellemesi olup problemin büyük örneklerini çözen bir algoritma bulunmas beklenmemelidir. Bu makalede kulland§mz yöntem derinlik öncelikli arama ile hedef-yönelimli konkolik test algoritmalarnn birle³tirilmesiyle geli³tirilmi³tir. 3 Yöntem 3.1 Konkolik Test Konkolik (Concolic) test ingilizce concrete (somut) ve symbolic (sembolik) testlerin birle³imi için bir ksaltmadr. Bu yakla³mda, test altndaki program sa§lanmas gereken dallanma ko³ullarnn (branch condition) sembolik olarak toplanlmasn sa§layacak ³ekle getirilir. Sonra toplanm³ ko³ullar kullanlarak yeni bir ko³ul kümesi elde edilir. Bu yeni ko³ullar incelenilerek yeni girdiler ya- ratlr ve programa girdi olarak sunulur. Tanm 1 DALLANMA KO“ULU (Branch Condition, c) En az bir program pa- rametresine (girdi) ba§l sadece do§ru veya yanl³ olabilen ve her farkl sonucun program farkl bir çal³ma yoluna yönlendirdi§i ko³ullardr. Dallanma ko³ullar a³a§dakilerden herhangi biri olabilir:  Boole cebri (boolean algebra) kullanlarak yazlm³ bir ifade,  Bir kar³la³trma veya  Sadece do§ru veya yanl³ döndüren bir fonksiyon. Genelde bir programdaki dallanma ko³ullar birbirine ba§ldr, o yüzden bir ko³ulun sonucunu sabit tutmak di§erlerini etkiler. Rastgele bir çal³ma yolu üze- N rindeki rastgele bir ko³ulun, bu yol üzerindeki di§er dallanmalarn ortalama 8 i ile ba§l oldu§u gösterilmi³tir ( N bu yol üzerindeki toplam dallanma ko³ulu says olarak alnm³tr) [4]. Tanm 2 DALLANMA KO“ULU BA‡LILI‡I (Branch Condition Dependency) ki dallanma ko³ulu sadece ve sadece a³a§daki durumlarda birbirine ba§l kabul edilir:  ki dallanma ko³ulunun d gibi en az bir ortak de§i³keni varsa veya  ki ko³ul da üçüncü bir ko³ulla ba§lysa. Olas bir çal³ma yolunun gerçeklenebilmesi ancak o yol üzerindeki bütün dallanma ko³ullarnn sa§lanmasyla olabilir. 4 Tanm 3 TAM YOL KISITI (Full Path Constraint, π ) Tam yol kst, bir ça- l³ma yolu üzerindeki bütün dallanma ko³ullarnn mantksal Ve operatörüyle birle³tirilmesi olarak tanmlanr: N ^ π= ci i=1 “u andan itibaren kst çözücü ad verilecek olan ve varsa tam yol kstn sa§layan de§erler yaratabilen bir çözücünün oldu§u varsaylacaktr. Böylece, ger- çeklenebilir (feasible) bütün çal³ma yollarna götürecek olan gerekli girdiler ya- ratlp program bu girdilerle çal³trlabilir. Örne§in, program bir hata ifadesine yönlendiren bir yol gerçeklenmeye çal³lyor ve buna kar³lk gelen tam yol kst biliniyorsa ya bu ifadeye varacak girdiler yaratlabilir ya da bu çal³ma yolunun gerçeklenemez (olanaksz) oldu§u sonucuna varlr. Konkolik testte, program önce rastgele girdilerle çal³trlr. Sonra, çal³ma srasnda sembolik çal³ma yolunun tam yol kst toplanr. Asl kst üzerinden yeni bir tam yol kst elde etmek için bir strateji izlenir. Genel bir strateji bu tam yol kst üzerindeki son dallanma ko³ulunu tersine çevirmektir [4]. Sonra yeni yol kst kst çözücüye verilir ve program için yeni test girdileri elde edilir. −1 N^ π 0 = ¬cN ∧ ci (1) i=1 Bu stratejiye derinlik-öncelikli arama ad verilir. Uygulamalar genel olarak kst saysyla veya azami iterasyon saysyla [5] snrlandrlm³tr. Böyle bir al- goritma Algoritma 1 üzerinde açklanm³tr. 3.2 Ksmi Yol Kstlar Teoride, bir kst çözücünün çal³ma süresi çözücüye verilen ifade (ko³ul) saysyla üssel olarak büyür [15]. Bu yüzden, kst çözücüye büyük kstlar vermek kötü bir kirdir. Konkolik testte, ölçeklendirilebilirli§in önündeki üç darbo§az yol patlamas, yüksek dallanma says ve kst çözücüye verilen bu büyük sorgulardr [16]. Bizim yakla³mmzda, sorgu uzunluklar sorgu saysn artrmak pahasna dü³ürülmeye çal³lm³tr. Tanm 4 KISM YOL KISITI (Partial Path Constraint, φ) Tam yol kstnn her yukar yakla³m (over-approximation) bir ksmi yol kst olarak adlan- drlr. Tam yol kstn yol üzerindeki dallanma ko³ullarnn bir kümesi olarak dü³ünürsek, ksmi yol kstn da tam yol kstnn herhangi bir alt kümesi olarak görebiliriz. π→φ Tanma göre, mutlak do§ruluk (true) bütün tam yol kstlarnn bir yukar yakla³mdr. Ayrca, çal³ma yolu üzerindeki her dallanma ko³ulunun da bir ksmi yol kst oldu§u görülebilir. 5 Algoritma 1 Derinlik Öncelikli Aramal ve Azami terasyonlu Konkolik Test. Require: P : program under test Ensure: inputs : Test Suite 1: inputs ← ∅ 2: input ← generateRandomInputs() 3: for j = 1 to max_iterations do 4: Execute P with input 5: Add input to inputs 6: π ← collectedPathConstraint 7: for i = length(π ) to 0 do 8: if !isVisited(branchOf(π[i]) then 9: c ← π[i] 10: break 11: end if 12: end for 13: if isDened(c) then 14: π[i] ← ¬c 15: input ← generateInput(π ) 16: else 17: break 18: end if 19: end for Teorem 1 YOL KISITLARININ YUKARI YAKLA“IMI (Over-approximation of Path Constraints) Bir tam yol kstn sa§layan bütün örnekler ayrca bu yolun bütün ksmi yol kstlarn da sa§lar. E§er sadece ksmi yol kstn çözersek, bu çözümün her zaman tam yol kstn sa§lama ³ans vardr. Bu çal³mada, tam yol kstlarnn kullanmndan kaçna- bilmek amacyla ksmi yol kstlarnn yaratlmas üzerine çal³lm³tr. Burada asl hedef bütünlük (completeness) ve geçerlilikten (soundness) ödün vermeden büyük kstlarn yaratt§ yükü azaltmaktr. 3.3 Ksmi Yol Kst Yaratma Stratejileri Algoritma 2'da program üzerinde tek bir çal³ma yolunu gerçekleyecek girdi üretilmektedir. Bunun için sembolik olarak bu heden tam yol kst bilinmeli- dir. E§er 3. satrda ksmi yol kstn sa§layan girdiler bulunamyorsa, tam yol kst da sa§lanamyor demektir. E§er 8. satrda ö§renilen tam yol kst hedef ile aynysa istenilen girdi elde edilmi³ demektir. E§er hiçbiri de§ilse, o zaman yolun sapmasna neden olan bir ko³ul vardr. Bu sapma 15. satrda ö§renilmektedir. Algoritma 3'te ise Algoritma 2 kullanlarak tüm yollar gerçekleyecek olan bir girdi listesi üretilmektedir. Derinlik öncelikli arama kullanlm³tr. 15. satrda görüldü§ü gibi daha önce gerçeklenmi³ çal³ma yollarndan yeni tam yol kstlar elde edilerek Algoritma 2'ye verilmektedir. 6 Algoritma 2 Büyüyen Ksmi Yol Kstlar Kullanan Hedef-Yönelimli Konkolik Test Require: P : program under test, π : full path constraint of goal Ensure: input → π 1: φ ← π[length(π) − 1] 2: loop 3: input ← generateInput(φ) 4: if input = infeasible then 5: return fail 6: end if 7: Execute P with input 8: π 0 ← collectedPathConstraint 0 9: if π = π then 10: return input 11: end if 12: repeat 13: c ← nextConditionOf(π ) 0 14: until !contains(π , c) 15: φ←φ∧c 16: end loop Algoritma 3 Büyüyen Ksmi Yol Kstlarn Kullanan Tam Konkolik Test Require: P : program under test Ensure: inputs : Test Suite 1: inputs ← ∅ 2: φ = true. 3: girdi ← generateInput(φ) 4: for j = 1 to max_iterations do 5: Execute P with input 6: Add input to inputs 7: π ← collectedPathConstraint 8: for i = length(π ) to 0 do 9: if !isVisited(branchOf(π[i]) then 10: c ← π[i] 11: break 12: end if 13: end for 14: if isDened(c) then 15: π[i] ← ¬c 16: input ← Algortihm 2(P, π ) 17: Add input to inputs 18: else 19: break 20: end if 21: end for 7 Teorem 2 YOL SAPMASI (Path Divergence) Ksmi kst φ yi sa§layan ama tam yol kstπ 'yi sa§lamayan girdiler var ise bu girdiler için (π → c)∧(π 0 → ¬c) 0 ifadesini sa§layan ve yol sapmasna neden olan c vardr. Bu ifadede π , φ yi sa§layan girdilerin kar³lk geldi§i çal³ma yolunun tam yol kstn belirtmektedir. Algoritma 3'ün perfromansn arttrmak için 15. satrda daha uzun ama k- st çözücüye yüklenmeyen bir φ ile ba³lanabilir. Bu sefer φ yine son dallanma ko³ulunun tersi ¬cN i içerir, ama bundan ba³ka birbirinden ba§msz (Tanm 2) di§er bütün dallanma ko³ullarn da içerir. Böyle bir φ yi çözmek, kst çö- zücü için φ = cN yi çözmek kadar kolay olacaktr, çünkü kst çözücü böyle bir durumda her dallanma ko³ulunu ayr ayr çözer [4] [17]. Bu durumda ksmi yol kstlar daha çok de§i³ken içerdi§i için çal³ma yolunu sa§lama ³ans daha yüksek olacaktr. Başlangıç, φ←> φ için girdi yarat evet φ gerçek- hayır Sonraki φ ye geç Sonraki φ lenebilir (π → φ) var mı? mi? evet Programı Girdilerle hayır Çalıştır evet φ ← φ ∧ cd π 0 sapıyor hayır Sonraki Sonraki π hayır DUR evet mu? π ye geç var mı? “ekil 1. Büyüyen Ksmi Yol Kstl Konkolik Test Ak³ Çizelgesi Görsel kolaylk vermek için “ekil 1 te geli³tiridi§imiz algoritmann ak³ çizel- gesi vardr. Bir π listesi oldu§unu ve de her π için bütün yollar deneyen bir φ listesi oldu§unu varsaymaktadr. Genel olarak sonsuz yol olabilir ve azami ite- rasyon snr durma ko³ulu olarak kullanlr. Ak³ çizelgesi ayrca cd de§i³kenini kullanmaktadr. Bu de§i³ken sapma sebebini belirtmek için kullanlm³tr. Hedef yol kst π nin bir dallanma ko³uludur. 8 4 Örnek Bu bölümde örnek olarak verilen üç saynn küçükten büyü§e sral olup ol- mad§n kontrol eden bir program için test kümesi yaratlacaktr. Test altndaki programn kontrol-ak³ çizelgesi “ekil 2 üzerinde gösterilmi³tir. A a>b a≤b a>c B HAY IR a≤c b>c b≤c C EV ET “ekil 2. sralM(a,b,c) Metodunun Ak³ Çizelgesi Klasik bir konkolik test “ekil 3 üzerinde görüldü§ü gibi rastgele bir girdi ile ba³lar. Test altndaki program bu girdiyle çal³trlr ve tam yol kst π1 hesaplanr. Bundan sonra yeni bir tam yol kst π2 , π1 in son dallanma ko³ulu tersine çevrilerek olu³turulur. Bu yeni çal³ma yolunu gerçekleyebilmek için tam yol kst kst çözücüye verilir. Bu tam yol kst 3 tane dallanma ko³ulu içerdi§i için bu operasyon 3 uzunlukta kst çözümü, ksaca KÇ(3) olarak tanmlanm³tr. Test altndaki program test boyunca 4 kere çal³trlm³tr ve kst çözücüye 3 kere sorgu gönderilmi³tir. Önemli nokta ise bu sorgularn ortalama uzunlu§unun (3 + 2 + 1)/3 = 2 olmasdr. Geli³tiridi§imiz konkolik test tekni§inde “ekil 4 üzerinde görülen testte bir girdiyle ba³lanm³ ve kar³lk gelen tam yol kst ö§renilmi³tir. Sonra π2 normal konkolik testteki gibi olu³turulup hedef olarak belirlenmi³tir. Tüm ifadenin çö- zülmesi yerine tam bu noktada tam yol kstnn yukar yakla³mlar kullanlm³- tr. φ21 alttaki kst çözücünün program do§ru çal³ma yoluna yönlendiremeyen bir girdi yaratmasna neden olmu³tur. Bu yüzden algoritma sapmann nedenini (cd ) bulur ve ö§renir (φ ← φ ∧ cd ). Bu ö§renme bir ba³ka yukar yakla³m olan π2 → φ22 → φ21 ile sonuçlanr. Bu yukar yakla³m örnekte program çal³masn hedefe yönlendirme açsndan yeterli gelmi³tir. ki algoritmay kar³la³tracak olursak, bunda da yine test altndaki program 4 kere çal³trlm³tr, ancak kst çözücüye ortalamada (1 + 2 + 1)/3 = 1.33 uzunlu§unda sorgular yaplm³tr. 9 i1 = [0, 0, 0] [ba³langçta] P1 = A → B → C → EV ET π1 = (a ≤ b) ∧ (a ≤ c) ∧ (b ≤ c) π2 = (a ≤ b) ∧ (a ≤ c) ∧ ¬(b ≤ c) i2 = [0, −1, 2] [KÇ(3)] P2 = A → B → C → HAY IR π3 = (a ≤ b) ∧ ¬(a ≤ c) i3 = [0, 0, −1] [KÇ(2)] P3 = A → B → HAY IR π4 = ¬(a ≤ b) i4 = [−1, 0, −1] [KÇ(1)] P4 = A → HAY IR DUR [Tüm Yollar Denendi] “ekil 3. Klasik Konkolik Test Kullanlarak Çözüm i1 = [0, 0, 0] [ba³langçta] P1 = A → B → C → EV ET π1 = (a ≤ b) ∧ (a ≤ c) ∧ (b ≤ c) π2 = (a ≤ b) ∧ (a ≤ c) ∧ ¬(b ≤ c) φ21 = ¬(b ≤ c) i21 = [0, 0, −1] [KÇ(1)] P21 = A → B → HAY IR [P21 6= Pistenen ] φ22 = (a ≤ c) ∧ ¬(b ≤ c) [φ ← φ ∧ cd ] i22 = [−1, 0, −1] [KÇ(2)] P22 = A → B → C → HAY IR [P22 = Pistenen ] π3 = ¬(a ≤ b) φ31 = ¬(a ≤ b) i31 = [0, −1, −1] [KÇ(1)] P31 = A → HAY IR DUR [Tüm Yollar Denendi] “ekil 4. Geli³tiridi§imiz Ksmi Yol Kstlar ile Çözüm 10 5 Deneyler Tekni§imizi CREST adl C için geli³tirilmi³, derinlik-öncelikli arama ve rastgele- dallanma gibi bilinen stratejileri kullanan bir konkolik test uygulamas üzerine ekledik [5]. CREST'i ksmi yol kstlarn ve girdi/kst önbelleklenmesi kullana- cak ³ekilde de§i³tirdik. Ayrca verilen test kümelerinin verilen programlardaki dallanma kapsamn (branch coverage) ölçen bir kod da yazdk. A³a§da be³ farkl konkolik test uygulamas tanmlanm³tr. Bunlardan KYK ve bKYK bizim geli³tirid§imiz ksmi yol kstlar yakla³mn kullanmaktayken di§er üçü kar³la³trma amaçl olarak literatürde bulunana ve CREST'te gerçek- le³tirlmi³ yöntemlerdir. 1. DÖA: Derinlik-öncelikli arama kullanan normal konkolik test algoritmas- dr. 2. KAÇ: Kontrol-ak³ çizelgesi yönlendirmeli konkolik test algoritmasdr. 3. Rastgele: Rastgele-dallanma yakla³m kullanlan konkolik test algoritma- sdr. 4. KYK: Ksmi yol kstlar yakla³m kullanlan konkolik test algoritmasdr. 5. bKYK: Bellekli ksmi yol kstlar algoritmasdr. Bu algoritma da normal KYK'dan farkl olarak kst çözücüye daha önce yollanm³ sorgular ve test altndaki programa gönderilmi³ girdileri hatrlayan bir hafza vardr ve ayn sorgularla çal³malarn tekrarlanmasna engel olmak amacyla tasarlanm³ olup yer kayglar yüzünden bu makalenin d³nda braklm³tr. Be³ yöntem de iki farkl C programnda ( Dörtgen ve Üçgen) ile çal³trl- m³tr. Bu programlar açlar ve kenar uzunluklar verilen üçgen ve dörtgenleri snandrmak amacyla yazlm³tr. Test altndaki programn çal³trlma için iterasyon limiti 100 olarak belirlenmi³tir. Tablo 1'de deney sonuçlarmz verilmi³tir. Tablodan KYK ve bKYK'nn DÖA ve KAÇ'a göre daha çok sorgu yapt§ görülebilir. Ancak, ortalama sorgu uzun- lu§u bunlara göre çok dü³üktür. Benzer ³ekilde Rastgele'nin ortalama sorgu uzunlu§unn en ksa oldu§u ancak sorgu saysn çok fazla oldu§u ve dallanma kapsamnn dü³tü§ü görülmektedir. Bu sayede kst çözücünün çözüm süresi kst uzunlu§uyla üssel olarak artt§ndan karma³klk azaltlm³tr. Tablo'dan bKYK yönteminin kst çözücü üzerindeki yükü en az tavizle en çok haeten yöntem oldu§unu görülmektedir. Önceki sorgular hatrlamann toplam sorgu says üze- rinde bir etkisi olmam³tr, ancak gereksiz test girdilerinin çkarlmas ile test kümeleri KYK'ya göre küçültmü³tür. Bu saptama Üçgen programnn ihtiyaç duydu§u girdi saysnn 27'den 19'a dü³ürülmü³ olmasyla açklanabilir. 6 Sonuçlar Bu ön çal³mada büyüyen ksmi yol kstlarnn konkolik test için kullanla- bilecek bir yakla³m oldu§u gösterilmi³tir. Deneylerimizde ortalama sorgu uzun- lu§unun yarya kadar dü³ürülmesi ilerisi için umut vaat edici bir geli³medir. Bu geli³melerin özellikle karma³k yol kstlarna sahip programlarda konkolik testin 11 Üçgen Dörtgen Sorgu Ort. Sorgu Girdi Dallanma Sorgu Ort. Sorgu Girdi Dallanma Yöntem Says Uzunlu§u Says Kapsamas Says Uzunlu§u Says Kapsamas DÖA 10 5.3 11 100% 10 5.5 11 100% KAÇ 19 4.789 19 100% 18 5.06 18 100% Rastgele 100 2.26 100 85% 100 1.77 100 65% KYK 26 2.769 27 100% 17 1.5 18 100% bKYK 26 2.769 19 100% 17 1.5 18 100% Tablo 1. Üçgen ve Dörtgen Snandrclar için Test Sonuçlar daha hzl çal³masn sa§layaca§ beklenmektedir. Bu önçal³mann devam ola- rak ölçeklenebilirli§i görmek açsndan daha büyük kodlar üzerinde test etmeyi planlamaktayz. 7 Gelecek Çal³malar Ksmi yol kstlar yakla³m birkaç ³ekilde geli³tirilebilir. Örne§in, π için bu kadar küçük bir yukar yakla³mla ba³lamak çok iyi bir kir de§ildir. Onun yerine yol üzerinde birbiriyle ba§msz bir dallanma ko³ullar kümesiyle ba³lanabilir. Sonra kst çözücü bu daha güçlü ksmi kstn ko³ullarn birer birer çözebilir. Bu yöntem kst çözücüye yüklenmeden sorgu ba³na do§ru girdileri bulma ³ansn artrr. Ksmi yol kstlar grep ve vim gibi daha büyük kodlar üzerinde test edilmeli- dir. Zaman kstlarna uyulabilmesi için bu testler henüz gerçekle³tirilememi³tir. Kaynaklar 1. P. Godefroid, N. Klarlund, and K. Sen, Dart: Directed automated random testing, SIGPLAN Not., vol. 40, no. 6, pp. 213223, 2005. Verication, Model 2. A. R. Bradley, Sat-based model checking without unrolling, in Checking, and Abstract Interpretation - 12th International Conference, VMCAI 2011, pp. 7087, 2011. 3. C. Cadar, D. Dunbar, and D. Engler, Klee: Unassisted and automatic generation Proceedings of the 8th of high-coverage tests for complex systems programs, in USENIX Conference on Operating Systems Design and Implementation, OSDI'08, 2008. 4. K. Sen, D. Marinov, and G. Agha, Cute: A concolic unit testing engine for c, SIGSOFT Softw. Eng. Notes, vol. 30, no. 5, pp. 263272, 2005. Proce- 5. J. Burnim and K. Sen, Heuristics for scalable dynamic test generation, in edings of the 2008 23rd IEEE/ACM International Conference on Automated Soft- ware Engineering, ASE '08, 2008. 12 6. N. Tillmann and J. De Halleux, Pex: White box test generation for .net, in Proceedings of the 2Nd International Conference on Tests and Proofs, TAP'08, 2008. 7. K. Sen and G. Agha, Cute and jcute: Concolic unit testing and explicit path model- checking tools, inProceedings of the 18th International Conference on Computer Aided Verication, CAV'06, 2006. 8. K. Kähkönen, R. Kindermann, K. Heljanko, and I. Niemelä, Experimental com- parison of concolic and random testing for java card applets, inModel Checking Software (J. van de Pol and M. Weber, eds.), vol. 6349 of Lecture Notes in Com- puter Science, pp. 2239, Springer Berlin Heidelberg, 2010. 9. X. Qu and B. Robinson, A case study of concolic testing tools and their limita- Proceedings of the 2011 International Symposium on Empirical Software tions, in Engineering and Measurement, ESEM '11, 2011. 10. H. Seo and S. Kim, How we get there: A context-guided search strategy in concolic Proceedings of the 22Nd ACM SIGSOFT International Symposium on testing, in Foundations of Software Engineering, FSE 2014, 2014. 11. S. Sidiroglou-Douskos, E. Lahtinen, N. Rittenhouse, P. Piselli, F. Long, D. Kim, and M. C. Rinard, Targeted automatic integer overow discovery using goal- directed conditional branch enforcement, inProceedings of the Twentieth Interna- tional Conference on Architectural Support for Programming Languages and Ope- rating Systems, ASPLOS '15, pp. 473486, 2015. 12. E. Tsang, Foundations of constraint satisfaction, 1993. 13. P. Nuzzo, A. Puggelli, S. A. Seshia, and A. Sangiovanni-Vincentelli, Calcs: Smt Proceedings of the 2010 Conference solving for non-linear convex constraints, in on Formal Methods in Computer-Aided Design, FMCAD '10, 2010. 14. M. Souza, M. Borges, M. d'Amorim, and C. S. Pasareanu, Coral: Solving comp- Proceedings of the Third International lex constraints for symbolic pathnder, in Conference on NASA Formal Methods, NFM'11, 2011. 15. J. Zhou, M. Yin, and C. Zhou, New worst-case upper bound for 2-sat and 3-sat Proceedings of the Twenty-Fourth with the number of clauses as the parameter, in AAAI Conference on Articial Intelligence, 2010. 16. S. Anand, E. K. Burke, T. Y. Chen, J. Clark, M. B. Cohen, W. Grieskamp, M. Har- man, M. J. Harrold, and P. Mcminn, An orchestrated survey of methodologies for automated software test case generation, J. Syst. Softw., vol. 86, pp. 19782001, Aug. 2013. 17. B. Dutertre, Yices 2.2, in Computer Aided Verication (A. Biere and R. Bloem, eds.), vol. 8559 of Lecture Notes in Computer Science, pp. 737744, Springer In- ternational Publishing, 2014. 13