<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Aktör Tabanlı Sistemler için Test Kapsama Kriterleri</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Hasan Sözer</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff2">2</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Ozan Gürler</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Orhan Yılmaz</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff1">1</xref>
          <xref ref-type="aff" rid="aff2">2</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Özyeğin Üniversitesi</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>İstanbul</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Türkiye hasan.sozer@ozyegin.edu.tr</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>EPİAŞ</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>İstanbul</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Türkiye</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>ozan.gurler</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>orhan.yilmaz}@epias.com.tr</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Anahtar kelimeler: Aktör Modeli</institution>
          ,
          <addr-line>Eşzamanlı Programlama, Dağıtık Sistemler, Asenkron Haberleşme</addr-line>
          ,
          <country>Test Kapsama Kriterleri</country>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>EPIAS</institution>
          ,
          <addr-line>Istanbul</addr-line>
          ,
          <country country="TR">Turkey</country>
        </aff>
        <aff id="aff2">
          <label>2</label>
          <institution>Ozyegin University</institution>
          ,
          <addr-line>Istanbul</addr-line>
          ,
          <country country="TR">Turkey</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>Özet. Aktör tabanlı sistemler, eşzamanlı çalışan ve birbirleri ile asenkron bir şekilde haberleşen aktör isimli otonom elemanlardan oluşmaktadırlar. Asenkron haberleşme sebebiyle aktörler arasında paylaşılan mesajların sıralaması farklılık gösterebilmektedir. Diğer eşzamanlı çalışan sistemlerde olduğu gibi, determinizm yokluğu, aktör tabanlı sistemlerde test ve hata ayıklama süreçlerini zorlaştırmaktadır. Geleneksel test kapsama kriterleri de bu sistemler için etkin olmamaktadır. Bu bildiride, aktör tabanlı sistemler için kullanılabilecek test kapsama kriterleri irdelenmektedir. Literatürde önerilmiş mevcut kriterlere ek olarak yeni kriterler ile, ayrık matematik alanında son zamanlarda yayınlanmış olan çalışmaların aktör tabanlı sistemler için test kapsama kriterleri belirlemek ve değerlendirmek üzere uygulamaları ilk defa bu bildiride ele alınmaktadır. Önerilen kapsama kriterlerine göre değerlendirme yapabilen ve bu kriterleri sağlayacak şekilde test durumlarını otomatik olarak oluşturan bir test altyapısı şu an geliştirme aşamasındadır.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>Test Coverage Criteria for Actor-Based Systems
1</p>
    </sec>
    <sec id="sec-2">
      <title>Giriş</title>
      <p>
        Aktör modeli, dağıtık ve eş zamanlı çalışan büyük ölçekli sistemlerin
geliştirilebilmesi için önerilmiş bir programlama modelidir [
        <xref ref-type="bibr" rid="ref1 ref6">1,6</xref>
        ]. Aktör bazlı sistemler, birbirleri
arasında durum bilgisi paylaşmayan, otonom ve eşzamanlı çalışan aktör isimli
elemanların bileşiminden oluşmaktadırlar. Bu aktörler birbirleri ile asenkron bir şekilde
mesajlar takas ederek haberleşmektedirler. Aktörler konum bilgilerinden habersiz,
birbirlerinden bağımsız bir şekilde çalışmaktadırlar. Bu özellikleri, yük dengeleme ve
hatalara karşı dayanıklılık için avantaj sağlamaktadır. Her aktör diğer aktörlerden
bağımsız ve habersiz olarak başka bir platformda çalıştırılmak üzere taşınabilmekte,
yeniden başlatılabilmekte veya çoğaltılabilmektedir.
      </p>
      <p>
        Aktör modelini destekleyen Erlang [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ], Rebeca [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ], Scala Aktörleri [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ] ve
Akka [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ] gibi birçok farklı programlama/modelleme dili ve çerçevesi bulunmaktadır.
Ayrıca, bu modelin Twitter mesajlaşma kuyruğu sistemi, Facebook sohbet sistemi ve
Vendetta oyun motoru [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ] gibi endüstriyel uygulamaları da bulunmaktadır.
      </p>
      <p>Determinizm yokluğu sebebi ile, aktör bazlı sistemler gibi eşzamanlı çalışan
sistemlerde test ve hata ayıklama süreçleri zorluklara tâbidir. Genel olarak aktör modeli,
aktörler arasında takas edilen mesajların başarılı bir şekilde hedeflerine ulaşmalarını
garanti altına almaktadır fakat bu mesajların aktörlere ulaşma sıraları, sistemin her
çalışması esnasına değişebilecek olan zamanlamaya bağlıdır.</p>
      <p>
        Aktör tabanlı sistemlerin test ve hata ayıklama süreçlerinde destek olmaya
odaklanmış metot, teknik ve araçlar üzerine az sayıda çalışma olduğu
gözlemlenmiştir [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ]. Geleneksel metot, teknik ve araçlar ise bu sistemler için her zaman etkin
olmamaktadır. Örneğin, bir test kapsama kriteri olarak tüm kod satırlarının veya kodun
akışı içerisindeki tüm dallanmaların kapsanmasının hedeflenmesi, aktör tabanlı
sistemlerde hata tespiti için etkin bir kriter değildir. Aktörler genel olarak mesajları
işleyen kısa kod bloklarından oluşurlar. Hatalar bu kod bloklarının içeriğinden ziyade,
aktörler arasında paylaşılan mesajların öngörülemeyen bir sırada işlenmesinden
kaynaklanmaktadırlar [
        <xref ref-type="bibr" rid="ref19">19</xref>
        ].
      </p>
      <p>
        Bu bildiride, aktör tabanlı sistemler için kullanılabilecek test kapsama kriterleri
irdelenmektedir. Sıralamaları kapsayan diziler (sequence covering arrays) [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ] ve
mesaj çifti sıralamaları (pair of message receives) [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ] gibi literatürde önerilmiş mevcut
kriterler tartışılarak yeni kriterler önerilmektedir. Ayrıca, ayrık matematik alanında
son zamanlarda yayınlanmış olan çalışmaların [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ] aktör tabanlı sistemler için test
kapsama kriterlerini değerlendirmek üzere uygulamaları ilk defa bu bildiride ele
alınmaktadır. Önerilen kapsama kriterlerine göre nicel değerlendirme yapabilen ve bu
kriterleri sağlayacak şekilde test durumlarını otomatik olarak oluşturan bir test
altyapısı1 şu an geliştirme aşamasındadır [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ].
      </p>
      <p>Bildirinin organizasyonu: Bir sonraki bölümde, aktör modeli ve aktör tabanlı
sistemlere ilişkin temel bilgiler aktarılmakta ve Java dili ile geliştirilmiş örnek bir sistem
tanıtılmaktadır. 3. Bölümde aktör tabanlı sistemler için farklı test kapsama kriterleri
irdelenmektedir. 4. Bölümde literatürdeki ilgili çalışmalar özetlenmektedir. Son
olarak, 5. Bölümde temel çıkarımlar özetlenerek ileriye dönük çalışmalar
listelenmektedir.
2</p>
    </sec>
    <sec id="sec-3">
      <title>Aktör Tabanlı Sistemler</title>
      <p>Aktör modeli dağıtık ve asenkron sistemlerin geliştirilmesi için kullanılmaktadır. Bu
sistemler, eş zamanlı çalışan, aktör olarak adlandırılan birimlerden oluşmaktadırlar.
Aktörler durum bilgilerini dışarıdan saklamakta ve birbirleri ile sadece mesajlaşma
vasıtasıyla iletişim kurmaktadırlar. Bu bakış açısından, aktörlerin çalışma prensibi
nesneye yönelik programlama prensipleri ile örtüşmektedir. Ancak, nesnelerden farklı
olarak, her aktörün kendine ait bir iş birimi (thread) bulunmaktadır. Çoklu kullanım
(multithreading), nesnelerin oluşturulması ve kullanılması sırasında
faydalanılabilecek ek bir özellik olarak görülebilir; ancak, bu özellik aktörlerin ayrılmaz bir
parçasıdır.</p>
      <p>Mesajlar aktörler arasında asenkron bir şekilde paylaşılmaktadır. Her aktörün
kendisine ulaşan ve işlenmeyi bekleyen mesajların listesini tutan bir posta kutusu
bulunmaktadır. Her aktör sırası ile bu mesajları posta kutusundan çıkarmakta ve mesajın
içeriğine göre bir takım eylemler gerçekleştirmektedir. Bu eylemler, örneğin, diğer
1 https://github.com/hasansozer/JBita
aktörlere mesajlar göndermek veya yeni bir aktör oluşturmak şeklinde
gerçekleşebilmektedir. Bir mesaja ilişkin gerçekleştirilen eylemlerin tümü bir bütün olarak
kesintiye uğramayan bir işlem birimi (atomic) olarak gerçekleştirilmektedir. Dolayısıyla,
programlama modeli gereği olarak, mesajların işlenmesi sırasında, eş zamanlı
programlamaya özgü hataların (concurrency bugs) ortaya çıkması beklenmemektedir. Her
gönderilen mesajın hedef aktöre iletimi de garanti altına alınmaktadır. Fakat bu
mesajların hangi sıra ile aktörlere ulaşacağı konusunda herhangi bir garanti
bulunmamaktadır. Bu açıdan bir determinizm yokluğu söz konusudur.</p>
      <p>
        Şekil 1’de BoundedBuffer uygulamasının [
        <xref ref-type="bibr" rid="ref19">19</xref>
        ] Akka kütüphanesi2 kullanılarak,
Java dili ile gerçeklemesi gösterilmektedir. Bu uygulamada Akka tarafından sunulan
UntypedActor sınıfının çocukları olarak 3 çeşit aktör tanımlanmıştır. Bu aktörler sırası
ile Buffer (Satır 1-28), Producer (Satır 29-43) ve Consumer (Satır 44-54) olarak
isimlendirilmiştir.
      </p>
      <p>Her aktörün onReceive metodunu tanımlayarak aktör tarafından işlenen her mesaj
tipi için gerçekleştirilmesi gereken eylemleri belirtmesi gerekmektedir. Örneğin,
Buffer aktörü için tanımlanan onReceive metodunda (Satır 9-27) iki tip mesaj
işlenmektedir. Bu mesajlar Put (Satır 10-15) ve Get (Satır 16-24) mesajlarıdır. Her mesaj tipi
birer Java sınıfı olarak tanımlanmaktadır ve dolayısıyla mesaj objelerinin kendilerine
ait değişkenleri (attributes) ve metodları bulunmaktadır.</p>
      <p>Her aktör, bu aktörün bir referansını ve posta kutusunu saklayan bir AktorRef
objesi tarafından kapsanmaktadır. Diğer aktörler mesajlarını ancak bu arayüz üzerinden
gönderebilmektedir. Bir aktör, diğer bir aktöre, ilgili aktörün referansı üzerinde tell
metodunu çağırarak (Örneğin, Şekil 1’deki 38 nolu satır) asenkron bir şekilde mesaj
gönderebilmektedir. Aktörün kendisi, diğer aktörlerin haberi olmaksızın başka bir
aktör ile yer değiştirebilmekte, başka bir fiziksel sisteme geçirilebilmekte veya
yeniden başlatılabilmektedir.</p>
      <p>
        BoundedBuffer uygulaması [
        <xref ref-type="bibr" rid="ref19">19</xref>
        ] için beklenen bir çalışma senaryosu Şekil 2’de
gösterilmektedir. Burada bir Test Sürücüsü, Producer aktörüne bir Produce mesajı
göndermekte ve ardından, Consumer aktörüne bir Consume mesajı göndermektedir.
Sonuç olarak, Buffer aktöründe Producer tarafından Put mesajı ile eklenmiş ve daha
sonradan Consumer tarafından Get mesajı ile elde edilmiş olan verinin bir Element
mesajı ile Test Sürücüsü’ne iletilmesi beklenmektedir.
2 http://akka.io
}
public void onReceive(Object message) {
if(message instanceof Put) {
if(size &lt; capacity) {
content[tail] = ((Put)message).getElement();
tail = (tail + 1) % capacity;
size++;
}
getSender().tell(new Element(value), getSelf());
} else {
      </p>
      <p>
        unhandled(message);
Şekil 1. Bir BoundedBuffer uygulamasının [
        <xref ref-type="bibr" rid="ref19">19</xref>
        ] Java dili ile, Akka çerçevesi
kullanılarak gerçeklemesi.
      </p>
      <p>Şekil 2’de gösterilmekte olan tüm mesajlar asenkron bir şekilde iletilmektedirler.
Dolayısıyla, bu şekilde gösterilen mesajlaşma sırası, tek olası sıralama değildir.
Teorik olarak n farklı mesaj paylaşma olayının n! farklı sıralaması mevcuttur. Esasen,
mesajlar arasındaki nedensel bağımlılıklar (causal dependencies) mümkün olabilecek
sıralama sayısını azaltmaktadır. Örneğin, Put ve Get mesajları, sırasıyla, Produce ve
Consume mesajlarına tepki olarak gönderilmektedirler. Dolayısıyla bu mesajların
kendi aralarındaki sıralamaları değişememektedir. Diğer yandan, Consume mesajı,
Produce mesajı hedefine ulaşıp işlenmeden önce işleme alınabilir. Bu durumda,
henüz Buffer aktöründe saklanan veri bulunmadığından ötürü bir hata ortaya çıkacaktır.</p>
      <p>Test Sürücüsü</p>
      <p>Producer</p>
      <p>Buffer</p>
      <p>Consumer
Produce</p>
      <p>Put
Consume
Element</p>
      <p>
        Get
Element
Şekil 2. BoundedBuffer uygulamasının [
        <xref ref-type="bibr" rid="ref19">19</xref>
        ] test edilmesi sırasında beklenen
çalışma senaryosu.
3
      </p>
    </sec>
    <sec id="sec-4">
      <title>Aktör Tabanlı Sistemler için Test Kapsama Kriterleri</title>
      <p>Bu bölümde, aktör tabanlı sistemler için farklı test kapsama ölçüleri ve bu ölçülerin
hesaplama yöntemleri irdelenmektedir. Temel test kapsama kriteri olarak aktörler
arasında paylaşılan mesajların farklı sıralamaları göz önünde bulundurulmaktadır.
Tespit edilmesi beklenen hataların, bu mesajların belirli bir sıralamasından
kaynaklandığı varsayılmaktadır.</p>
      <p>
        Bir aktör tabanlı sistemde, aktörlerin oluşturulması, bu aktörlerin mesajlar
göndermesi, bu mesajların bir diğer aktör tarafından işleme alınması gibi birçok farklı
olay gerçekleşmektedir. Biz çalışmamızda sadece mesajların iletildikleri aktörler
tarafından işleme alınma olaylarına (message receive events) odaklanarak, bu olayların
farklı sıralamalarını bir test kapsama kriteri dâhilinde değerlendiriyoruz. Mesajların
işleme alınma sıralamaları, dolaylı olarak aktör oluşturma ve mesaj gönderme
sıralamalarına da etki etmektedir [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ]. Bir aktör sisteminin çalışması esnasındaki tüm
mesaj alınma olaylarını sonlu bir olay dizisi olarak kabul edebiliriz: s = ‹e1, e2, e3, … en›.
Bu dizide her olay bir (gönderici, alıcı, mesaj) üçlüsü ile ifade edilebilir. Dizi içinde
yer alan olaylar arasındaki her bir farklı sıralama, testler sırasında gözlemlenebilir
veya kapsam dışında kalabilir.
      </p>
      <p>Öncelikle, bir sonraki bölümde, aktörler arası mesajlaşma sıralamalarının sayısının
üst limitini belirlemek üzere bir yöntem tanıtacağız. Ardından, literatürde önerilen ve
aktör tabanlı sistemler için doğrudan kullanılabilecek veya bu amaç için
uyarlanabilecek farklı test kapsama ölçülerini tartışacağız.
3.1</p>
      <sec id="sec-4-1">
        <title>Test kapsama kriteri olarak bir üst limit</title>
        <p>
          Aktörler tarafından paylaşılan mesajlar arasında hiçbir nedensel bağımlılık olmadığı
durumda, n farklı mesaj için n! farklı sıralama mevcuttur. Ancak, bir önceki bölümde
tartışıldığı gibi, gerçekte bazı mesajlar arasında bağımlılıklar bulunmakta ve
dolayısıyla bu mesajlar arasındaki kısmi sıralama (partial ordering) hiçbir zaman
değişmemektedir. Aşağıdaki koşullardan herhangi birisi sağlandığında, bir olay dizisi
içerisindeki iki farklı ei ve ej olayları arasında bağımlılık var demektir [
          <xref ref-type="bibr" rid="ref17">17</xref>
          ]:





gönderici(ei) = gönderici(ej)
mesaj(ej), mesaj(ei) işleme alınması neticesinde gönderilmiştir
gönderici(ej), mesaj(ei) işleme alınması neticesinde oluşturulmuştur
∃ ek : (i &lt; k &lt; j) ˄ (alıcı(ei) = alıcı(ek)) ˄ mesaj(ej), mesaj(ek) işleme
alınması neticesinde gönderilmiştir
∃ ek : (i &lt; k &lt; j) ˄ (alıcı(ei) = alıcı(ek)) ˄ gönderici(ej), mesaj(ek) işleme
alınması neticesinde oluşturulmuştur
        </p>
        <p>
          Bu listedeki ilk koşul her aktör tabanlı sistem için geçerli değildir; ancak, Akka [
          <xref ref-type="bibr" rid="ref9">9</xref>
          ]
gibi bazı çerçevelerde, aynı gönderici tarafından iletilen mesajların aynı sıra ile
ulaşmaları garanti edilmektedir. İkinci koşul bir mesajın diğer bir mesaja tepki olarak
gönderilmesi durumunu ifade etmektedir. Üçüncü koşul, bir mesajı gönderen aktörün
diğer bir mesaja tepki olarak oluşturulduğu durumu ifade etmektedir. Son iki koşul ise
dolaylı bağımlılıkları ifade etmektedir. Eğer bir mesajın alındığı ei olayı ile aynı
alıcıya daha sonra ulaşan başka bir mesajın alındığı ek olayı, ej olayı ile ikinci veya üçüncü
koşulu sağlıyorsa ve aynı zamanda, ek olayı ej olayından önce gerçekleşiyorsa, ei ve ej
olayları arasında bir bağımlılık olduğu kabul edilmektedir.
        </p>
        <p>
          Sistem içinde aktörlere ulaşan mesajlar ve bu mesajlar arasındaki bağımlılıkları bir
döngüsüz yönlü çizge (directed acyclic graph - DAG) ile ifade edebiliriz. Bu çizgede
her mesaj alınma olayı bir düğüm (node), bu olaylar arasındaki nedensel bağımlılıklar
ise birer yönlü uç (directed edge) ile ifade edilebilir. Bu şekilde ortaya çıkan bir çizge
için elde edilebilecek tüm topolojik sıralamalar (topological orderings), sistemdeki
tüm olası mesaj alınma sıralamalarını temsil edecektir. Ancak bu sıralamaların sayısı,
çizgenin boyutuna oranla üssel (exponential) olarak artmaktadır. Tüm olası
sıralamaları elde etmek bir yana, sadece bu sıralamaların sayısını hesaplamak bile, doğrusal
uzantılar (linear extensions) bulma problemi olarak adlandırılmakta ve NP-zor bir
problem olarak bilinmektedir [
          <xref ref-type="bibr" rid="ref4">4</xref>
          ]. Ancak henüz bu bildirinin yazımı sırasında basım
aşamasında olan bir makalede [
          <xref ref-type="bibr" rid="ref3">3</xref>
          ], bu sayıyı yaklaşık olarak hesaplayan verimli bir
algoritma ve bu algoritmanın R dili ile geliştirilmiş bir uygulaması önerilmiştir.
Önerilen algoritma, n adet düğümü olan bir çizgede, topolojik sıralamaların sayısı olarak
kabul edilen bir L değereini, 1 – δ kadar olasılıkla, 1+ ϵ kadar yakınsayarak
bulmaktadır. Bu algoritma δ ve ϵ değerlerini birer parametre olarak kabul etmektedir ve
karmaşıklığı O(n3(ln n)(ln L)2 ϵ −2 ln δ−1) olarak hesaplanmıştır [
          <xref ref-type="bibr" rid="ref3">3</xref>
          ]. Dolayısıyla, sistemin
ölçeği, mesajların sayısı ve hesaplama için kullanılabilecek kaynakların miktarına
bağlı olarak, bir test kapsama kriteri üst limiti olarak L değeri, farklı doğruluk
seviyelerinde hesaplanabilmektedir.
        </p>
        <p>Büyük ölçekli sistemlerin testleri sırasında tüm olası mesaj alınma sıralamalarını
kapsamak tabi ki uygulanabilir ve gerçekçi bir hedef değildir. Ancak bu kapsama
kriteri için bir üst limit belirleyebilmek, kapsama oranını ölçebilmek ve kıyaslama
yapabilmek açısından önem teşkil etmektedir.
3.2</p>
      </sec>
      <sec id="sec-4-2">
        <title>Mesaj Çifti Sıralamaları</title>
        <p>
          Aktör tabanlı sistemler için pratik olarak uygulanabilir bir test kapsama kriteri
oluşturmak adına, tüm mesaj alınma olayları yerine, her aktörü ayrı ayrı ele an ve bir
aktör tarafından işlenen mesaj çiftlerinin farklı sırlamalarının sayısını ölçen mesaj çifti
sıralamaları (pair of receives - PR) [
          <xref ref-type="bibr" rid="ref17 ref19">17,19</xref>
          ] bir ölçü olarak önerilmiştir. Bu ölçüye
göre iki farklı asenkron ei ve ej olayı arasındaki bir sıralama hedefi, aşağıdaki
koşulların tümü sağlandığında ulaşılmış sayılır:



alıcı(ei) = alıcı(ej)
ej olayı, en az bir test sırasında ei olayından önce gelmektedir
ej olayı, en az bir test sırasında ei olayından sonra gelmektedir
        </p>
        <p>
          PR ölçüsü için bir üst limit belirlenmediğinden, bir kapsama oranı yerine, sadece
sıralama hedefine ulaşılan farklı mesaj çiftlerinin sayısı cinsinden bir ölçüm
sunulmuştur [
          <xref ref-type="bibr" rid="ref17">17</xref>
          ]. Daha sonradan PCR (pair of consecutive receives) ve PBR (pair of
behavior change and receive) gibi PR ölçüsünün farklı varyantları de önerilmiş olmakla
birlikte, deneysel çalışmalarda hata bulma etkinliği açısından PR ölçüsünün en etkin
kriter olduğu gösterilmiştir [
          <xref ref-type="bibr" rid="ref17">17</xref>
          ].
3.3
        </p>
      </sec>
      <sec id="sec-4-3">
        <title>Sıralamayı Kapsayan Diziler</title>
        <p>
          Aktör tabanlı sistemlere özel bir kriter olarak geliştirilmemiş olsa da, genel olarak eş
zamanlı çalışan bir sistemde meydana gelen olayların farklı sıralarda çalışmasını göz
önünde bulunduran genel bir yaklaşım olarak sıralamaları kapsayan diziler (sequence
covering arrays) [
          <xref ref-type="bibr" rid="ref9">9</xref>
          ] önerilmiştir. Bu yaklaşımda, bir test kapsama kriteri olarak t-li
test sıralaması (t-way test sequence), t farklı olayın her bir olası sıralamasının en az
bir test tarafından kapsanmasını hedeflemektedir. Eğer bir sistemde n farklı olay var
ise, bunların bir alt kümesi olan t adet (t &lt;= n) veya daha az sayıdaki olayın tüm olası
(t! adet) sıralamasının her birinin en az bir test sırasında gerçekleşmiş olması
beklenmektedir. Her bir test sırasında, geriye kalan n – t adet olayın sırlaması herhangi bir
şekilde olabilir.
        </p>
        <p>İlk görüşte, bir test kapsama kriteri olarak t-li test sıralamasının, t değeri 2 iken, bir
önceki bölümde tanıtılan PR kriteri ile aynı olduğu düşünülebilir. Ancak, aktör tabanlı
sistemlere özel olarak önerilen PR kriteri, tüm olaylar arasında olay çiftlerinin farklı
sıralamalarını değil, her bir aktör için ayrı ayrı, ilgili aktör tarafından alınan mesaj
çiftlerinin sıralamalarını dikkate almaktadır.</p>
        <p>
          Bir test kapsama kriteri olarak sıralamaları kapsayan diziler ilk defa Kuhn ve
diğerleri [
          <xref ref-type="bibr" rid="ref11">11</xref>
          ] tarafından önerilmiş, kriteri sağlamak için gerekli test sayısı için bir alt limit
hesaplanmış ve bu testleri otomatik bir şekilde oluşturabilmek için sezgisel bir
algoritma sunulmuştur [
          <xref ref-type="bibr" rid="ref11">11</xref>
          ]. Yakın zamanlarda bu hesaplamalar ve algoritmalar üzerine
yeni çalışmalar sunulmuştur [
          <xref ref-type="bibr" rid="ref15 ref5">15,5</xref>
          ]. Fakat şu ana kadar önerilen algoritmalar ve
hesaplama yöntemleri, aktör tabanlı sistemler için uyarlanmamış/kullanılmamış ve
büyük ölçekli sistemler üzerinde uygulanmamıştır. Literatürde sunulan vaka
çalışmalarında kullanılan sistemlerde gerçekleşen toplam olay sayısı ancak 100 civarındadır.
3.4
        </p>
        <p>Öncelikli/İlgili Mesajların Sıralamasını Kapsayan Diziler
Olaylar arasındaki bağımlılıkların dikkate alınmasına rağmen, milyonlarca mesajın
paylaşıldığı aktör tabanlı sistemlerde, bir önceki bölümde tanıtılan test kapsama
kriterlerini sağlamak mümkün olmayabilir. Bu sebeple, sıralamaları kapsayan diziler
yaklaşımı iki farklı gözleme dayalı olarak uyarlanabilir.</p>
        <p>
          Birincisi, aktörler arasında paylaşılan tüm mesajlar, hataların ortaya çıkma olasılığı
açısından aynı derecede önemli olmayabilir. Bu sebeple, tüm olaylar yerine, bu
olayların alan uzmanları tarafından tanımlanan bir alt kümesine odaklanmak, söz konusu
olabilir. Bu yaklaşım ile uyumlu bir kriter olarak temel seçim kapsamından (base
choice coverage) [
          <xref ref-type="bibr" rid="ref2">2</xref>
          ] esinlenilebilinir. Genel bir kapsama kriteri olarak, k-seçimli, t-li
test sırlaması, n farklı olay gerçekleşen bir sistemde, bu olayların bir alt kümesi olan
seçilmiş k adet (k &lt;= t &lt;= n) temel olayı içeren t veya daha az sayıdaki olayın, tüm
olası (t! adet) sıralamasının her birinin en az bir test sırasında gerçekleşmiş olmasını
beklenmek şeklinde tanımlanabilir.
        </p>
        <p>İkincisi, PR ölçüsünde olduğu gibi tüm mesajların bir arada değerlendirilmesi
yerine her aktör tarafından işlenen mesajlar ayrı ayrı ele alınabilir. Bu durumda, her bir
aktör için t-li test sıralaması, bu aktör tarafından işlenen t farklı mesajın her bir olası
sıralamasının en az bir test tarafından kapsanmasını hedefler. Her aktör tarafından
işlenen mesaj sayısı farklı olacağından, t değeri bir üst limit belirleyecek, aktör
tarafından işlenen mesaj sayısını geçmeyecek şekilde farklı aktörler için farklı değerler
söz konusu olacaktır.
4</p>
        <p>
          İlgili Çalışmalar
Actorverse [
          <xref ref-type="bibr" rid="ref18">18</xref>
          ] aktör tabanlı sistemler için geliştirilmiş bir hata ayıklama aracıdır. Bu
araç ile aktörler arası mesajlaşmalar üzerinde kesme noktaları (breakpoints)
tanımlanabilmektedir. Sistemin çalışması bu noktalarda durdurulabilmekte ve bu noktalardan
geriye alınabilmektedir. Aynı zamanda bu araç, hataları tekrar oluşturabilmek için,
aktörler arasında gerçekleşen mesajlaşma senaryolarının kayıt altına alınıp, daha
sonradan aynı sıralama ile tekrar oynatılmalarını sağlamaktadır; ancak olası mesajlaşma
sıralamalarının kapsama miktarının ölçümüne ilişkin bir destek sunmamaktadır.
        </p>
        <p>
          Aktör sistemlerinde gerçekleşen mesajlaşmaların zamanlamaya bağlı olası
sırlamalarını sistematik bir şekilde oluşturmak, bu sıralamalara uygun şekilde sistemin
çalışmasını sağlamak ve test kapsamını bu bakış açısından ölçmek için Bita [
          <xref ref-type="bibr" rid="ref17 ref19">17,19</xref>
          ] aracı
geliştirilmiştir. Bu bildiride, test kapsamının ölçümü problemine odaklanılmaktadır.
Bita aracı tarafından değerlendirilen, her aktör için mesaj çifti sıralamalarını ayrı ayrı
ele alan ölçüler (PR) ile birlikte, alternatif ölçü ve hesaplama yöntemleri irdelenmiştir.
        </p>
        <p>
          Aktör bazlı sistemlerin tasarım aşamasında doğrulanabilmeleri için Rebeca [
          <xref ref-type="bibr" rid="ref11">11</xref>
          ]
gibi modelleme dilleri ve model denetimi (model checking) araçları geliştirilmiştir.
Bu araçlar, oluşturulan modele uygun olarak tüm olası senaryoları kontrol
etmektedirler; ancak ölçeklenme konusundaki kısıtları sebebiyle sadece küçük ölçekli sistemler
için uygulanabildikleri görülmüştür.
        </p>
        <p>
          Eşzamanlı programlarda iş parçacıkları ve değişken erişimleri arasındaki
sıralamalara ilişkin farklı seviyelerde 7 kapsama kriteri önerilmiştir [
          <xref ref-type="bibr" rid="ref14">14</xref>
          ]; ancak bu kriterler
aktör tabanlı sistemlere odaklanmamaktadır. Genel olarak bir dizi olayın farklı
sıralarda meydana gelmesinden ötürü ortaya çıkan hataların yakalanabilmesine yönelik
gerçekleştirilen testlerin değerlendirilmesi için sıralamaları kapsayan diziler
önerilmiştir [
          <xref ref-type="bibr" rid="ref11">11</xref>
          ]. Olaylar arası sırlamaları kapsamak için gereken test sayısını hesaplamak
ve sezgisel bir algoritma ile bu testleri oluşturmak üzere çalışmalar yapılmıştır [
          <xref ref-type="bibr" rid="ref15 ref5">15,5</xref>
          ].
Ayrık matematik alanında da bu algoritmalar [
          <xref ref-type="bibr" rid="ref3">3</xref>
          ] üzerine çalışmalar olsa da, aktör
tabanlı sistemlerde test kapsama ölçümü ile ilgili olarak ilk kez bu çalışmada ele
alınmışlardır.
5
        </p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>Sonuç</title>
      <p>Bu bildiride, aktör tabanlı sistemler için kullanılabilecek test kapsama kriterleri
irdelenmiştir. Literatürde önerilmiş mevcut kriterlere ek olarak yeni kriterler ile, ayrık
matematik alanında son zamanlarda yayınlanmış olan çalışmaların aktör tabanlı
sistemler için test kapsama kriterlerini değerlendirmek üzere uygulamaları ele alınmıştır.</p>
      <p>Önerilen kapsama kriterlerine göre değerlendirme yapabilen ve bu kriterleri
sağlayacak şekilde test durumlarını otomatik olarak oluşturan bir test altyapısı şu an
geliştirme aşamasındadır. Bu test altyapısı ile farklı aktör tabanlı sistemler üzerinde
deneyler gerçekleştirilerek, test kapsama kriterlerinin nicel olarak değerlendirilmesi
hedeflenmektedir.</p>
      <p>Teşekkür. Bu çalışma, Türkiye Bilimsel ve Teknolojik Araştırma Kurumu
(TÜBİTAK) Teknoloji ve Yenilik Destek Programları Başkanlığı (TEYDEB)
tarafından desteklenen 3170457 numaralı proje kapsamında yürütülmüştür. Yazarlar, başta
yazılım geliştirme müdürü Birol Karatay ve genel müdür Mustafa Kayırıcı olmak
üzere, EPİAŞ yönetici ve çalışanlarına desteklerinden ötürü teşekkür eder.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <surname>Agha</surname>
            <given-names>G.</given-names>
          </string-name>
          :
          <article-title>A Model of Concurrent Computation in Distributed Systems</article-title>
          . Cambridge, MA, USA: MIT Press (
          <year>1990</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <surname>Amman</surname>
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Offut</surname>
            <given-names>J</given-names>
          </string-name>
          .: Introduction to Software Testing, Cambridge University Press, (
          <year>2017</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <surname>Banks</surname>
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Garrabrant</surname>
            <given-names>S.M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Huber</surname>
            <given-names>M.L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Perizzolo</surname>
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>Using TPA to count linear extensions</article-title>
          ,
          <source>Journal of Discrete Algorithms</source>
          , in press (available online)
          <year>2018</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <surname>Brightwell</surname>
            <given-names>G.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Winkler</surname>
            <given-names>P.</given-names>
          </string-name>
          :
          <article-title>Counting linear extensions is #P-complete</article-title>
          .
          <source>In Proceedings of the 23rd Annual Symposium on Theory of Computing</source>
          ,
          <volume>175</volume>
          -
          <fpage>181</fpage>
          (
          <year>1991</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <surname>Chee</surname>
            <given-names>Y.M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Colbourn</surname>
            <given-names>C.J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Horsley</surname>
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Zhou</surname>
            <given-names>J</given-names>
          </string-name>
          .:
          <article-title>Sequence Covering Arrays</article-title>
          .
          <source>SIAM Journal on Discrete Mathematics</source>
          , Vol.
          <volume>27</volume>
          , No.
          <volume>4</volume>
          ,
          <fpage>1844</fpage>
          -
          <lpage>1861</lpage>
          (
          <year>2013</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <surname>Hewitt</surname>
            <given-names>C.</given-names>
          </string-name>
          :
          <article-title>Actor model for discretionary, adaptive concurrency</article-title>
          .
          <source>CoRR</source>
          , vol.
          <source>abs/1008</source>
          .1459 (
          <year>2010</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <surname>Armstrong</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Virding</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Wikström</surname>
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Williams</surname>
            <given-names>M.</given-names>
          </string-name>
          :
          <article-title>Concurrent Programming in ERLANG</article-title>
          . 2nd ed. Hertfordshire, UK: Prentice Hall (
          <year>1996</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <surname>Haller</surname>
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Odersky</surname>
            <given-names>M.:</given-names>
          </string-name>
          <article-title>Scala actors: Unifying thread-based and event-based programming</article-title>
          .
          <source>Theoretical Computer Science</source>
          , Vol.
          <volume>410</volume>
          , No.
          <fpage>2</fpage>
          -
          <issue>3</issue>
          ,
          <fpage>202</fpage>
          -
          <lpage>220</lpage>
          (
          <year>2009</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <surname>Gupta</surname>
            <given-names>M.</given-names>
          </string-name>
          :
          <string-name>
            <given-names>Akka</given-names>
            <surname>Essentials</surname>
          </string-name>
          . Birmingham, UK: Packt Publishing (
          <year>2012</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <surname>Padua</surname>
            <given-names>D.</given-names>
          </string-name>
          (Editor):
          <article-title>Encyclopedia of Parallel Computing</article-title>
          . New York, USA, Springer, (
          <year>2011</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <surname>Jafari</surname>
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kamespanah</surname>
            <given-names>E.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Sirjani</surname>
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Hermanns</surname>
            <given-names>H.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Cimini</surname>
            <given-names>M.:</given-names>
          </string-name>
          <article-title>PTRebeca: Modeling and analysis of distributed and asynchronous systems</article-title>
          .
          <source>Science of Computer Programming</source>
          , Vol.
          <volume>128</volume>
          ,
          <fpage>22</fpage>
          -
          <lpage>50</lpage>
          (
          <year>2016</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <surname>Kuhn</surname>
            <given-names>D.R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Higdon</surname>
            <given-names>J.M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Lawrence</surname>
            <given-names>J.F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kacker</surname>
            <given-names>R.N.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Lei</surname>
            <given-names>Y.</given-names>
          </string-name>
          :
          <article-title>Combinatorial Methods for Event Sequence Testing</article-title>
          .
          <source>In Proceedings of the 5th International Conference on Software Testing, Verification and Validation</source>
          ,
          <volume>601</volume>
          -
          <fpage>609</fpage>
          (
          <year>2012</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <string-name>
            <surname>Lopez</surname>
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Marr</surname>
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Boix</surname>
            <given-names>E.</given-names>
          </string-name>
          ,
          <article-title>Towards advanced debugging support for actor languages studying concurrency bugs in actor-based programs</article-title>
          .
          <source>In Proceedings of the 6th ACM SIGPLAN International Workshop on Programming Based on Actors, Agents, and Decentralized Control</source>
          ,
          <fpage>1</fpage>
          -
          <lpage>5</lpage>
          (
          <year>2016</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14.
          <string-name>
            <surname>Lu</surname>
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Jiang</surname>
            <given-names>W.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Zhou</surname>
            <given-names>Y.</given-names>
          </string-name>
          :
          <article-title>A Study of Interleaving Coverage Criteria</article-title>
          .
          <source>In Proceedings of the 6th ACM SIGSOFT Symposium on the Foundations of Software Engineering</source>
          ,
          <fpage>533</fpage>
          -
          <lpage>536</lpage>
          (
          <year>2007</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          15.
          <string-name>
            <surname>Murray</surname>
            <given-names>P.C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Colbourn</surname>
            <given-names>C.J.</given-names>
          </string-name>
          :
          <article-title>Sequence Covering Arrays and Linear Extensions</article-title>
          .
          <source>In Proceedings of the 26th International Workshop on Combinatorial Algorithms</source>
          ,
          <fpage>274</fpage>
          -
          <lpage>285</lpage>
          (
          <year>2015</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          16.
          <string-name>
            <surname>Sözer</surname>
            <given-names>H.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Gürler</surname>
            <given-names>O.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Yılmaz</surname>
            <given-names>O.</given-names>
          </string-name>
          :
          <article-title>Towards a Testing Framework with Visual Feedback for Actor-based Systems</article-title>
          .
          <source>In Proceedings of the 18th IEEE International Conference on Software Quality</source>
          , Reliability, and
          <string-name>
            <surname>Security</surname>
          </string-name>
          (
          <year>2018</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          17.
          <string-name>
            <surname>Tasharofi</surname>
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Pradel</surname>
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Lin</surname>
            <given-names>Y.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Johnson</surname>
            <given-names>R</given-names>
          </string-name>
          .:
          <article-title>Bita: Coverageguided, automatic testing of actor programs</article-title>
          .
          <source>In Proceedings of the 28th IEEE/ACM International Conference on Automated Software Engineering</source>
          ,
          <fpage>114</fpage>
          -
          <lpage>124</lpage>
          (
          <year>2013</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          18.
          <string-name>
            <surname>Shibanai</surname>
            <given-names>K.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Watanabe</surname>
            <given-names>T.</given-names>
          </string-name>
          :
          <article-title>Actoverse: A reversible debugger for actors</article-title>
          .
          <source>In Proceedings of the 7th ACM SIGPLAN International Workshop on Programming Based on Actors, Agents, and Decentralized Control</source>
          ,
          <fpage>50</fpage>
          -
          <lpage>57</lpage>
          (
          <year>2017</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          19.
          <string-name>
            <surname>Tasharofi</surname>
            <given-names>S.</given-names>
          </string-name>
          :
          <article-title>Efficient testing of actor programs with non-deterministic behaviors</article-title>
          .
          <source>Ph.D. Thesis</source>
          , University of Illinois at Urbana-Champaign (
          <year>2013</year>
          )
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>