=Paper= {{Paper |id=Vol-1483/1_Bildiri |storemode=property |title=Büyüyen Kısmi Yol Kısıtlarıyla Konkolik Test |pdfUrl=https://ceur-ws.org/Vol-1483/1_Bildiri.pdf |volume=Vol-1483 |dblpUrl=https://dblp.org/rec/conf/uyms/KorogluS15 }} ==Büyüyen Kısmi Yol Kısıtlarıyla Konkolik Test== https://ceur-ws.org/Vol-1483/1_Bildiri.pdf
    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