<!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>Bad Behaving Test Generation for Android Applications</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Yavuz Köroğlu ve Alper Şen</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>Yavuz Köroğlu</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>Alper Şen</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>
        <aff id="aff0">
          <label>0</label>
          <institution>Anahtar Kelimeler: Mobil Uygulama Testi, Grafiksel Kullanıcı Arayüzü Testi, Otomatik Test Yaratımı</institution>
          ,
          <addr-line>Negatif Test</addr-line>
          ,
          <country>Test Örneği Mutasyonu</country>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>Bogazici University, Department of Computer Engineering</institution>
        </aff>
        <aff id="aff2">
          <label>2</label>
          <institution>Boğaziçi Üniversitesi</institution>
          ,
          <addr-line>Bilgisayar Mühendisliği Bölümü</addr-line>
        </aff>
      </contrib-group>
      <abstract>
        <p>Graphical User Interface (GUI) testing of mobile applications has been an important topic in the literature. Although there are many studies that focus on automated test generation for Android GUI applications, all these studies aim to explore depths of the Application Under Test (AUT) by generating meaningful and well-behaving tests. In this study we propose a fully automated tool, Bad Behaving Test Generator (BBTG), that builds on top of standard test generation tools. BBTG generates bad-behaving test cases from the well-behaving test cases by modifying existing events and adding new events. In this study, we develop BBTG on top of the state-of-the-art test generation approach, QBE (QLearning-Based Exploration). We perform experiments on 100 AUTs randomly selected from the commonly known F-Droid applications. We show that BBTG is effective at detecting novel crashes in a given time budget.</p>
      </abstract>
      <kwd-group>
        <kwd>Mobile Application Testing</kwd>
        <kwd>GUI Testing</kwd>
        <kwd>Automated Test Generation</kwd>
        <kwd>Negative Testing</kwd>
        <kwd>Test Case Mutation</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>Giriş</title>
      <p>
        Akıllı telefon kullanıcılarının sayısının 2019 yılında 5 milyarı geçmesi
beklenmektedir [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ]. Akıllı telefon pazarında Android %85.9 ile birinci sıradadır [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ].
Çalışmalar Android’de geçirilen zamanın %90’ının Android uygulamalarına
harcandığını göstermektedir [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]. Android uygulamaları, Grafiksel Kullanıcı Arayüzü
(GKA) üzerinden GKA eylemleri (actions) ile girdi alan sistemlerdir.
      </p>
      <p>
        Android GKA için tam otomatik test yaratımı amacıyla A3E [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ], SwiftHand
[
        <xref ref-type="bibr" rid="ref5">5</xref>
        ], PUMA [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ], DynoDroid [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ], Sapienz [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ], ve QBE [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ] araçları
geliştirilmiştir. Bu araçlar Test Altındaki Uygulamaları (TAU) dinamik olarak icra ederek
uygulamanın derinliklerini gezen testler yaratmaktadır. Bu araçların
yarattıkları testler iyi huyludur. İyi huylu testler gezdikleri GKA durumlarında
beklenen GKA eylemlerini gerçekleştirmekteyi hedefler. Bu sayede iyi huylu testler
TAU’nun derinliklerini gezebilmektedir.
      </p>
      <p>
        Otomatik test yaratımı araçlarının performanslarını değerlendirmek için
tespit edebildikleri farklı çökme (crash) sayılarını kıyaslamak çok kullanılan bir
yöntemdir [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ]. Otomatik test yaratımı araçlarının çökme tespitlerini iyileştirmek
amacıyla standart test yaratımı araçlarının üzerine inşa edilen tam otomatik
Kötü Huylu Test Yaratımı (KHTY) aracını önermekteyiz. Bu aracın temel
varsayımı kötü huylu GKA eylemlerinin iyi huylulara göre daha fazla çökme tespit
etme potansiyeli olmasıdır. Kötü huylu GKA eylemlerinin ait oldukları GKA
durumlarına (state) ulaştıktan sonra çalıştırılmaları gerekmektedir. Bu yüzden
KHTY, iyi huylu GKA eylemleriyle TAU’nun derinliklerini gezme amaçlı tam
otomatik olarak yaratılmış test örneklerindeki (test case) GKA eylemlerini
değiştirerek ve bu test örneklerine yeni GKA eylemleri ekleyerek kötü huylu test
örnekleri yaratmaktadır. Böylece KHTY, uygulamanın derinliklerindeki GKA
durumlarında kötü huylu GKA eylemleri çalıştırabilmektedir.
      </p>
      <p>
        Bu çalışmadaki katkılarımız aşağıdaki gibidir.
1. Kötü Huylu Test Yaratım İşleçleri (Operators). Yeni çökmelerin tespiti
amaçlı olarak test örnekleri (test case) üzerinde tanımlı altı işleç (operator)
önermekteyiz. Yazı Değişimi işleci dışındaki bütün işleçler tamamen yenidir.
2. Köyü Huylu Test Yaratım Algoritması. İşleçlerimizin iyi huylu testlere
uygulanarak kötü huylu testler yaratılmasını sağlayan yeni bir algoritma
geliştirmekteyiz.
3. Vaka İncelemeleri. Beş ayrı vaka incelemesi üzerinden geliştirdiğimiz
işleçlerin gerçek dünyadaki karşılıklarını göstermekteyiz.
4. Deneyler. F-Droid [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ] uygulamalarından rastgele seçilmiş 100 uygulama
üzerinde gerçekleştirdiğimiz deneylerin sonuçlarına bakarak KHTY’nin verili
bir zaman bütçesinde yeni çökmeleri tespit etmekte etkili olduğunu
görmekteyiz.
      </p>
      <p>
        Şekil 1, KHTY aracının akış çizelgesini göstermektedir. KHTY aracını
literatürdeki en yeni test yaratım yaklaşımı olan QBE [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ] üzerine geliştirdik. QBE,
makine öğrenmesi tabanlı bir tam otomatik test yaratım aracıdır. Bu akışta ilk
olarak QBE yardımıyla Test Altındaki Uygulama (TAU) için bir İyi Huylu Test
Kümesi (test suite) yaratmaktayız. QBE test yaratımı sırasında TAU’nun
Genişletilmiş Etiketli Durum-Geçiş Sistemi (GEDGS, Extended Labeled Transition
System [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ]) adı verilen bir sonlu durum-geçiş modelini çıkarmaktadır. KHTY
uygulamanın modeline bakarak İyi Huylu Test Kümesinin test örneklerindeki GKA
eylemlerini değiştirip bunlara yeni kötü huylu GKA eylemleri eklemekte ve kötü
      </p>
      <sec id="sec-1-1">
        <title>Test Altındaki Uygulama</title>
      </sec>
      <sec id="sec-1-2">
        <title>Test Yaratım Aracı (QBE)</title>
      </sec>
      <sec id="sec-1-3">
        <title>Test Sonuçları</title>
        <p>İyi Huylu Test Kümesi +
GKA Modeli</p>
      </sec>
      <sec id="sec-1-4">
        <title>Kötü Huylu Test Yaratımı (KHTY)</title>
      </sec>
      <sec id="sec-1-5">
        <title>Kötü Huylu Test Kümesi</title>
      </sec>
      <sec id="sec-1-6">
        <title>Yeniden Çalıştırma Test Sonuçları</title>
        <p>Şekil 1: KHTY Akış Çizelgesi
huylu test örnekleri oluşturmaktadır. Kötü huylu test örnekleri Kötü Huylu Test
Kümesini oluşturmaktadır. Son olarak KHTY, Kötü Huylu Test Kümesini TAU
üzerinde yeniden çalıştırarak Test Sonuçlarını toplamaktadır.</p>
        <p>Bildirimizin geri kalanı yedi bölüme ayrılmaktadır. Çalışmamızın anlaşılması
için gerekli temel bilgiler Bölüm 2’de toplanmıştır. KHTY aracının nasıl çalıştığı
Bölüm 3 ile anlatılmıştır. Bölüm 4’te vaka incelemeleri yaparak KHTY aracında
kullanılan işleçlerin gerçek hayattaki karşılıkları gözlemlenmiştir. KHTY aracının
diğer araçlarla kıyaslanması ve çökme tespitine katkıları Bölüm 5’te ele
alınmıştır. Çalışmamız ile ilgili akademik literatür taraması Bölüm 6’de yer almaktadır.
Son olarak KHTY ile alınan sonuçlar ve gelecekte yapacağımız araştırmalar
Bölüm 7 ile özetlenmiştir.
2
2.1</p>
      </sec>
    </sec>
    <sec id="sec-2">
      <title>Temel Bilgiler</title>
      <sec id="sec-2-1">
        <title>Android Grafiksel Kullanıcı Arayüzü (GKA)</title>
        <p>Android GKA, aktivite (activity) ve olay (event) tabanlıdır. Aktiviteler GKA
bileşenlerinden (widget) oluşur. Her bir GKA bileşeni (örn. düğme veya metin
girdisi), piksel cinsinden bileşenin sınır koordinatlarını (x1; y1; x2; y2) tanımlayan
ve kullanıcının bileşenle hangi GKA eylemleri (GUI action) aracılığıyla
etkileşime girebileceğini belirten birtakım özelliklere sahiptir. Bu özelliklere, tür, etkin
(enabled), tıklanabilir (clickable), uzun tıklanabilir (longclickable), kaydırılabilir
(scrollable), ve şifre (password) örnek olarak verilebilir.</p>
        <p>Bir kullanıcı, Android sistemi ile GKA bileşenleri üzerinden olaylar
(events) aracılığı ile etkileşime girer. Olayları temel olarak iki kategoriye
ayırabiliriz, sistem olayları ve GKA eylemleri (GUI actions). Tipik olarak literatürde
kullanılanlardan daha kapsamlı bir GKA eylemleri listesini Tablo 1’de
göstermekteyiz. Eylemler üç kategoriden oluşmaktadır; bağlamsal olmayan
(non-contextual), bağlamsal (contextual) ve özel (special). Bağlamsal olmayan eylemler
kullanıcı hareketleriyle tetiklenen eylemlerdir. Tıklama ve uzun tıklama
eylemleri, tıklanılacak x ve y koordinatları olmak üzere iki parametre alırlar. Metin
girdisi eylemi x, y koordinatları ve girilecek metni belirten üç parametre alır.
Kaydırma eylemi beş parametre alır; ilk dört parametre başlangıç ve bitiş
koordinatlarını belirtirken, beşinci parametre ise kaydırma hızını ayarlamak için
kullanılır. Menü ve Geri eylemleri mobil cihaz üzerindeki ilgili düğmelerin
basılmasını temsil eden eylemlerdirler ve herhangi bir parametre almazlar. Bağlamsal
eylemler, kullanıcının Test Altındaki Uygulamanın (TAU) bağlamsal durumunu
değiştirdiği eylemleri ifade eder. Mobil cihazın global niteliklerinin birleşimi
(internet bağlanırlığı, bluetooth durumu, konum, uçak modu ve uyku modu)
uygulamanın o anki bağlamsal durumunu oluşturur. Bağlanırlık eylemi mobil cihazın
internet bağlanırlığını ayarlar (Wi-Fi veya mobil veri). Bluetooth durumu,
konum ve uçuş modu nitelikleri açık ve anlaşılırdır. Uyku eylemi mobil cihazı güç
düğmesine basarak uyku moduna alan veya uyku modundan çıkaran eylemdir.
Uyku eylemi test edilen uygulamayı duraklatmak ve devam ettirmek için
kullanılır. Özel (special) eylem olarak da uygulamayı yeniden yükleyip başlatmaya
yarayan yenidenbaşlatmak (reinitialize) bulunmaktadır. Sistem olayları sistem
tarafından oluşturulan olaylardır; örneğin, pil seviyesi olayları, SMS almak, ve
saat/süreölçer olayları gibi.
2.2</p>
      </sec>
      <sec id="sec-2-2">
        <title>Android GKA için Test Durumları</title>
        <p>Bir GKA durumu veya kısaca bir durum v dört öğenin bitiştirilmesinden
(concatenation) oluşur: (1) Paket adı, (2) aktivite adı, (3) bağlamsal durum, ve
(4) GKA bileşenleri. Her durum v için GKA bileşenlerinden elde edilebilen bir
etkin eylemler kümesi (v) vardır. Bir GKA eylemi veya kısaca eylem z 2 Z,
ancak ve ancak bir v durumunun GKA bileşenlerinden en az biri ile
ilişkilendirilebiliyorsa, z eylemi v durumunda etkindir, kısaca z 2 (v), denilir. Bir geçiş,
(başlangıç-durumu, bitiş-durumu, eylem, süre) olacak şekilde dörtlü değişkenler
grubu (tuple) olarak tanımlanır. Bir yürütme izi (execution trace) veya kısaca
iz (trace) t, bir geçişler dizisidir. Örneğin n uzunluğa sahip bir iz aşağıdaki gibi
olabilir.</p>
        <p>t = (v1; v2; z1; d1); (v2; v3; z2; d2); : : : ; (vn; vn+1; zn; dn)</p>
        <p>Eğer bir iz t’nin ilk durumu, TAU başlatıldığı andaki GKA durumu olan
ilk durum v0 ile aynıysa, t bir test örneği dir (test case). Test örneklerini içeren
kümelere test kümesi (test suite), kısaca TK denilir.</p>
        <p>Algoritma 1 Kötü Huylu Test Yaratımı (KHTY) Algoritması</p>
      </sec>
      <sec id="sec-2-3">
        <title>Girdiler:</title>
        <p>TK : Test Kümesi
X : Yeni Test Kümesinin Süre Limiti
: Kötü Huylu Test Yaratım İşleçleri Kümesi
Çıktılar:</p>
        <p>TK 0 : Yeni Test Kümesi
1: TK 0</p>
        <p>?
2: x 0
3: Tekrarla
4: t rastgele t 2 TK
5: Tekrarla
6: rastgele 2
7: Çıkış Koşulu: t 6= (t)
8: t0 (t)
9: TK0 TK0 [ ft0g
10: x x + P(vs;ve;z;d)2t0 d
11: Çıkış Koşulu: x &gt; X
. Rastgele bir test örneği seç</p>
        <p>. Rastgele bir işleç seç
. Test örneği değişene kadar tekrarla
. İşleci test örneğine uygula
. Yeni test örneğini kümeye ekle</p>
        <p>. Toplam süreyi hesapla
. Toplam süre limiti aşana kadar tekrarla
3</p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>Kötü Huylu Test Yaratımı</title>
      <p>Bu bölümde Kötü Huylu Test Yaratımı (KHTY) aracımızın nasıl çalıştığını
açıklamaktayız. KHTY’nin temelinde Kötü Huylu Test Yaratım işleçleri, ya da kısaca
işleçler vardır. İşleçler bir test örneği alarak yeni test örnekleri oluşturan
fonksiyonlardır ve (t) = t0 şeklinde gösterilirler. Bu bölümde önce işleçleri kullanarak
kötü huylu test kümesi yaratan algoritmamızı açıklamaktayız. Daha sonra kısaca
bu çalışmada kullandığımız işleçleri anlatmakta ve son olarak da KHTY icrasını
ufak bir örnekle açıklamaktayız.
3.1</p>
      <sec id="sec-3-1">
        <title>Algoritma</title>
        <p>KHTY aracının temel prosedürü Algoritma 1 üzerinden anlaşılabilir. İyi Huylu
Test Kümesi (TK ), Kötü Huylu Test Kümesi (TK 0) için ayrılabilecek azami süre
(X ), ve TK ’nın test örneklerinden kötü huylu test örnekleri yaratacak işleçlerin
bir kümesi ( ) bu algoritmaya girdi olarak verilir. KHTY çıktı olarak icrası
azami süre (X ) kadar vakit alacak olan bir Kötü Huylu Test Kümesi (TK 0)
döner.</p>
        <p>Algoritma 1 ilk olarak Kötü Huylu Test Kümesine (TK 0) boş küme (?) atar
(bkz. satır 1). Dolayısıyla Kötü Huylu Test Kümesinin (TK 0) şu anki icra süresi
(x) sıfırdır (bkz. satır 2). Daha sonra KHTY, İyi Huylu Test Kümesinden (TK )
rastgele bir test örneği (t) ve verili işleçler kümesinden ( ) bu test örneğini
değiştirecek rastgele bir işleç seçer (bkz. satır aralığı 4-7). KHTY seçilmiş işleci
( ) seçilmiş test örneğine (t) uygular ve yeni bir kötü huylu test örneği (t0) elde
eder (bkz. satır 8). KHTY yeni test örneğini (t0) Kötü Huylu Test Kümesine
(TK 0) ekler (bkz. satır 9). Böylece Kötü Huylu Test Kümesinin (TK 0) icra süresi
(x) yeni eklenen test örneğinin (t0) icra süresi kadar artmış olur (bkz. satır 10).
KHTY Kötü Huylu Test Kümesinin (TK 0) icra süresi (x) verili limiti (X) aşana
kadar test ekleme işlemini tekrarlar (bkz. satır 11).
3.2</p>
        <p>
          İşleçler (Operators)
Bu bölümde Algoritma 1’de kullandığımız işleç kümesini ( ) anlatmaktayız. Bu
çalışmamızda Android uygulamaları üzerindeki gözlemlerimize ve Android hata
örgeleri (crash patterns) üzerine yapılmış bir çalışmaya [
          <xref ref-type="bibr" rid="ref3">3</xref>
          ] dayanarak altı adet
işleç geliştirdik.
1. Döngü Stresleme ( DS) : Bir test örneği içindeki bazı geçişlerin başlangıç
ve sonlanış durumları aynı olabilir (vi = vi+1). Döngü Stresleme ( DS) işleci
verili test örneğindeki döngü içeren geçişleri birden çok kere tekrarlayarak
döngüyü stresleyen bir kötü huylu test örneği elde eder.
2. Durdur-Başlat ( DB) : Android uygulamaları herhangi bir anda arkaplana
atılıp (durdur) geri çağırabilir (başlat). Durdur-Başlat ( DB) işleci verili test
örneğinin her iki geçişi arasına "uyku kapa" ve "uyku aç" eylemleri koyarak
bu işlevi suistimal eden bir kötü huylu test örneği elde eder.
3. Yazı Değiştirme ( YD) : Verili iyi huylu test örneğinde yazı girdileri varsa
bu girdilerin beklenen, anlamlı girdiler olduğunu varsaymaktayız. Yazı
Değiştirme ( YD) işleci verili test örneğindeki yazı girdilerini uzun ve anlamsız
yazılarla, özel karakterlerle, veya boş yazı ile değiştirerek bir kötü huylu test
örneği elde eder.
4. Bağlamsal Durum Değiştirme ( BDD): Verili iyi huylu test örneğinin
uygulamanın işlevini düzgünce yerine getirebileceği bir bağlamsal durumda
(bağlanırlık, konum, vb.) icra edildiğini varsaymaktayız. Bağlamsal Durum
Değiştirme ( BDD) işleci verili test örneğine rastgele bağlamsal durum
değiştirme eylemleri ekleyerek bir kötü huylu test örneği elde eder.
5. Beklemeleri Kaldırma ( BK) : Verili iyi huylu test örneğine ait bütün
geçiş sürelerinin uygulamayı çalıştırdığımız aygıttan yanıt alabileceğimiz kadar
uzun süreler olduğunu varsaymaktayız. Beklemeleri Kaldırma ( BK) işleci bu
süreleri sıfırlayarak bir kötü huylu test örneği elde eder.
6. Hızla Kaydırma ( HK) : Kaydırma eyleminin kendi ayrı süre parametresi
bulunmaktadır. Bu parametre ekrana dokunmaya başlayıp dokunmayı
bırakana kadar geçecek süreyi tanımlar. Hızla Kaydırma ( HK) işleci verili test
örneğindeki kaydırma sürelerini sıfırlayarak aşırı hızlı kaydırma eylemlerine
sebep olur ve böylece bir kötü huylu test örneği elde eder.
3.3
        </p>
        <p>Örnek İcra
Bu bölümde Şekil 2 üzerinden KHTY’nin örnek bir icrasını açıklamaktayız. Şekil
2a, KHTY algoritmasına bu örnekte verdiğimiz İyi Huylu Test Kümesini (TK )
göstermektedir. Örneğin basit olması için bu test kümesine sadece tek bir tane
test örneği koyduk ama bundan daha fazla test örneği olabilirdi. Test
örneklerindeki v1, v2, v3 gibi ifadeler GKA durumlarını göstermektedir. ’_’ ifadesi
herhangi bir durumu (don’t care state) ifade etmek için kullanılmıştır. Şekil 2b,
KHTY algoritması yardımıyla yaratılmış bir dakika azami süreli (X = 60) Kötü
Huylu Test Kümesini (TK 0) göstermektedir. Kötü Huylu Test Kümesi,
geçişlerinin toplam süresi 59 saniye olan Kötü Huylu 1 ve Kötü Huylu 2 adında iki test
örneğinden oluşmaktadır. KHTY bu iki test örneği sırasıyla Döngü Stresleme
( DS) ve Durdur-Başlat ( DB) işleçleriyle oluşturmuştur. İki kötü huylu test de
dokuzuncu adımda çökme tespit etmiştir.</p>
        <p>Vaka 1 Şekil 3a, a2dpVol uygulamasının çökme içeren bir aktivitesini
göstermektedir. Bu çökmenin gözlemlenebilmesi için normalde kapalı olan bluetooth
özelliğinin açılması gerekmektedir. KHTY, Bağlamsal Durum Değiştirme ( BDD)
işleci yardımıyla test örneği içine "bluetooth değiştir" eylemi yerleştirerek
uygulamanın çökmesine sebep olmaktadır.</p>
        <p>Vaka 2 Şekil 3b, Mirrored uygulamasının çökme içeren bir aktivitesini
göstermektedir. Mirrored bir haber uygulamasıdır. Bu uygulama soldaki ekranda
görüldüğü gibi bir haber listesi açmaktadır. Hızla Kaydırma ( HK) ve
Beklemeleri Kaldırma ( BK) işleçleri ile yaratılmış kötü huylu testler bu uygulamanın
çökmesine neden olmuştur.</p>
        <p>Vaka 3 Şekil 3c, SoundBoard uygulamasının çökme içeren bir aktivitesini
göstermektedir. coin ve tube tuşları uygulamanın GKA durumunu değiştirmemekte,
sadece ses çıkarmaya yarayan AudioFlinger kütüphanesini çağırmaktadır. QBE
bu tuşlara tıklayan ama çökme tespit etmeyen test örnekleri yaratmaktadır.
KHTY, Döngü Stresleme ( DS) işlecini kullanarak kütüphanenin uygulama
tarafından beklenmeyen ölümcül bir istisna (unhandled fatal exception)
döndürmesine sebep olmaktadır.</p>
        <p>Vaka 4 Şekil 3d, importcontacts uygulamasının çökme içeren bir aktivitesini
göstermektedir. Bu uygulama, kişi kayıtlarının dışarıdan yüklenemediği
durumları en soldaki ekranda görüldüğü gibi çökmeden kurtarabilmektedir. Ama tam
bu kurtarma sırasında Durdur-Başlat ( DB) işleci yardımıyla uygulamayı
durdurup tekrar uyandırdığımızda en sağdaki hata ekranı çıkmakta ve uygulama
çökmektedir.</p>
        <p>(a) Vaka 1
(b) Vaka 2
(c) Vaka 3
(d) Vaka 4
(e) Vaka 5
Şekil 3: Vaka İncelemeleri
Vaka 5 Şekil 3e, aCal uygulamasının çökme içeren bir aktivitesini
göstermektedir. QBE internet adresi bekleyen en alttaki çubuğa internet adresi yazım
r
e
l
e
m
k
ö
Ç
#
5
2
0
2
5
1
0
1
5
0</p>
        <p>KHTY : 29 çökme
QBE : 18 çökme
SAPIENZ : 12 çökme
MONKEY : 10 çökme
PUMA : 6 çökme</p>
        <p>A3E : 4 çökme
0
200
400
600
800
1000</p>
        <p>1200</p>
        <p>Süre (saniye)
Şekil 4: Süreye bağlı Olarak Tespit Edilen Toplam Farklı Çökme Sayısı
kurallarına uygun bir adres girmektedir. KHTY, Yazı Değiştirme ( YD) işleci
yardımıyla buraya beklenmeyen bir yazı girerek çökmeye sebep olmaktadır.
5</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>Deneyler</title>
      <p>
        F-Droid uygulamaları [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ] arasından deneylerimiz için 100 tane uygulamayı
rastgele seçip indirdik. Vaka incelemelerimiz için kullandığımız uygulamaları bu
listenin dışında bıraktık. Deneylerimizi gerçekleştirebilmek için 7 adet Android 4.4.r5
x86 VirtualBox sanal makinası kurduk. QBE, Sapienz, PUMA, Monkey, ve A3E
araçlarının her birini 100 uygulamanın her biri ile 20’şer dakika çalıştırdık. Sonra
KHTY aracını çalıştırabilmek için ilk 10 dakika QBE ile test yaratımı
gerçekleştirip kalan 10 dakikada ise azami 10 dakika süreli Kötü Huylu Test Kümesi
yaratıp bu test kümesindeki testleri çalıştırdık.
      </p>
      <p>Şekil 4, süreye bağlı olarak tespit edilen toplam farklı çökme sayısını
göstermektedir. Çökmelerin farklılığını Android sistem kayıtlarında rapor edilen yığın
izlerini (stack trace) karşılaştırarak tespit ettik. Test yaratım araçlarının
bazılarında rastgelelik bulunduğundan deneylerimizi beş defa tekrarlayıp sonuçların
ortalamalarını aldık.</p>
      <p>Şekil 4, QBE aracının erkenden diğer araçlara kıyasla daha çok çökme
tespit ettiğini göstermektedir. KHTY aracını kullandığımız durumda ilk 10 dakika
QBE çalıştırdığımız için QBE ile tamamen aynı sayıda çökme tespit edilmiştir
(600 saniye). Bu 10 dakika içinde QBE 15 adet çökme tespit etmiştir. Kalan 10
dakikada ise QBE sadece 3 çökme tespit edebilirken KHTY 14 adet çökme tespit
etmiştir. Sonuç olarak toplamda KHTY 29 çökme tespit ederken QBE 18 çökme
tespit etmiştir. Son olarak QBE dahil bütün test yaratım araçlarının 20 dakikaya
yaklaştıkça çökme bulma performanslarının azaldığını gözlemliyoruz. KHTY ise
süre limitine yakınlaştığımızda bile çökme tespit etmeye devam etmiştir. KHTY
QBE’den 14 adet daha fazla ve diğer araç arasında en iyi olan Sapienz aracından
da 17 adet daha fazla çökme tespit etmiştir.</p>
      <p>
        Şekil 5 ile KHTY yardımıyla tespit edilebilmiş ve diğer test yaratım
araçlarıyla tespit edilememiş bir çökmeyi göstermekteyiz. Şekil 5a, Yahtzee uygulaması
(a) İyi Huylu Test Örneği
(b) Kötü Huylu Test Örneği
Şekil 5: Sadece KHTY ile Bulunmuş Bir Çökme Örneği
için QBE ile yaratılmış bir test örneğini göstermektedir. Bu test örneği çökme
tespit etmemektedir. Şekil 5b, bu test örneğinden KHTY yardımıyla elde edilmiş
bir kötü huylu test örneğini göstermektedir. Bu kötü huylu test örneği
çalıştırıldığında uygulama çökerek sonlanmaktadır. Bu çökme kullandığımız diğer
araçların hiçbiri tarafından tespit edilmemiştir. Bir başka çalışmada da Sapienz ve
Dynodroid araçlarının bu uygulamada hiç çökme tespit etmediği raporlanmıştır
[
        <xref ref-type="bibr" rid="ref15">15</xref>
        ].
6
      </p>
      <p>
        İlgili Çalışmalar
Bu çalışmamız Test Örneği Mutasyonu (TÖM) olarak adlandırılan bir girdi
mutasyonu tekniğidir. TÖM, test kümesinin kalitesini ölçmek için mutasyon işleçleri
adı verilen fonksiyonlar yardımıyla program kaynak kodunu değiştiren standard
Mutasyon Testinden [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] farklıdır. Çeşitli çalışmalar Android’de standard
Mutasyon Testi için işleçler geliştirmiştir [
        <xref ref-type="bibr" rid="ref18 ref7">18,7</xref>
        ]. TÖM işleçleri ise program koduna
değil, test kümesinin test örnekleri üzerine uygulanır ve test kümesini
zenginleştirmeyi amaçlar. Önceki çalışmalarda geliştirilen standard Mutasyon Testi
işleçleri bizim çalışmamıza uygulanamazlar.
      </p>
      <p>
        Android Grafiksel Kullanıcı Arayüzü (GKA) için TÖM sınırlı da olsa Sapienz
[
        <xref ref-type="bibr" rid="ref15">15</xref>
        ] ve Evodroid [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ] çalışmaları ile başlamıştır. Bu çalışmalar mutasyon olarak
eylemlerin gerçekleştirilme sıralarını değiştirmekte ve Yazı Değiştirme işlecini
kullanmaktadırlar. Biz bu çalışmamızda beş adet yeni işleç tanımlayarak bu
çalışmaları ilerletmeyi ve deneylerle TÖM yaklaşımının standard test yaratımına
katkısını ölçmekteyiz.
      </p>
      <p>
        A3E [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ], DynoDroid [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ], PUMA [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ], ve QBE [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ] iyi huylu test yaratım
araçlarıdır. Bu araçlar Android GKA’sının derinliklerini keşfetmeyi
amaçlamaktadır. Monkey [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ] ise tamamen rastgele testler üreten bir araç olduğu için kötü
huylu testler yaratabilmekte ama uygulamanın derinliklerine inemediği için
etkililiği kısıtlı olmaktadır. KHTY iyi huylu testleri kullandığı için uygulamanın
derinliklerine de erişebilmektedir.
7
      </p>
    </sec>
    <sec id="sec-5">
      <title>Sonuç</title>
      <p>Bu çalışmamızda Android uygulamalarında önceki çalışmalardan daha fazla
çökme tespit eden bir tam otomatik kötü huylu test yaratım yaklaşımı geliştirdik.
İyi huylu Grafiksel Kullanıcı Arayüzü (GKA) testlerini kötü huylulara
dönüştüren altı tane işleç geliştirdik. İşleçlerimizi var olan testlere uygulayan bir Kötü
Huylu Test Yaratımı (KHTY) Algoritması geliştirdik ve bunu literatürdeki en
yeni Android test yaratım aracı olan QBE üzerinde kodladık. Vaka incelemeleri
ile işleçlerimizin gerçek uygulamalarda daha önce tespit edilememiş çökmelerin
tespit edilmesini sağladığını gösterdik. Standard bir test yaratım aracı üzerine
eklendiğinde KHTY’nin verili bir zaman bütçesinde yeni çökmeleri (crash) tespit
etmekte etkili olduğunu deneylerle gösterdik.</p>
      <p>İleride rotasyon ve çift-tıklama gibi daha geniş bir GKA eylemleri kümesi
üzerinde çalışacağız. İşleçleri tamamen rastgele seçmek yerine çökme tespit etme
sayılarına doğru orantılı olarak seçmenin verili zaman bütçesinde tespit
edilen çökme sayısını daha da artıracağını düşünüyoruz. Son olarak da QBE ile
KHTY’nin eşit süreyle çalıştırılması yerine verili zaman bütçesini daha etkili
bölmenin yollarını araştıracağız.</p>
    </sec>
    <sec id="sec-6">
      <title>Kaynaklar</title>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <surname>Ammann</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Offutt</surname>
          </string-name>
          , J.: Introduction to Software Testing. Cambridge University Press,
          <volume>1</volume>
          <fpage>edn</fpage>
          . (
          <year>2008</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <surname>Azim</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Neamtiu</surname>
            ,
            <given-names>I.</given-names>
          </string-name>
          :
          <article-title>Targeted and depth-first exploration for systematic testing of android apps</article-title>
          .
          <source>In: Proceedings of the ACM SIGPLAN International Conference on Object Oriented Programming Systems Languages and Applications (OOPSLA)</source>
          (
          <year>2013</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <surname>Azim</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Neamtiu</surname>
            ,
            <given-names>I.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Marvel</surname>
            ,
            <given-names>L.M.</given-names>
          </string-name>
          :
          <article-title>Towards self-healing smartphone software via automated patching</article-title>
          .
          <source>In: Proceedings of the 29th ACM/IEEE International Conference on Automated Software Engineering (ASE)</source>
          (
          <year>2014</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <surname>Chaffey</surname>
            ,
            <given-names>D.:</given-names>
          </string-name>
          <article-title>Statistics on consumer mobile usage and adoption to inform your mobile marketing strategy mobile site design and app development (</article-title>
          <year>2017</year>
          ), http://www.smartinsights.com/mobile-marketing/mobile-marketinganalytics/mobile-marketing-statistics/
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <surname>Choi</surname>
            ,
            <given-names>W.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Necula</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Sen</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          :
          <article-title>Guided gui testing of android apps with minimal restart and approximate learning</article-title>
          .
          <source>In: Proceedings of the ACM SIGPLAN International Conference on Object Oriented Programming Systems Languages and Applications (OOPSLA)</source>
          (
          <year>2013</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <surname>Choudhary</surname>
            ,
            <given-names>S.R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Gorla</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Orso</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>Automated test input generation for android: Are we there yet?</article-title>
          <source>In: Proceedings of the 30th IEEE/ACM International Conference on Automated Software Engineering. ASE</source>
          (
          <year>2015</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <surname>Deng</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Offutt</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ammann</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Mirzaei</surname>
          </string-name>
          , N.:
          <article-title>Mutation operators for testing android apps</article-title>
          .
          <source>Inf. Softw. Technol</source>
          . 81(C),
          <volume>154</volume>
          -
          <fpage>168</fpage>
          (
          <year>2017</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8. eMarketer, AP:
          <article-title>Number of mobile phone users worldwide from 2013 to 2019 (in billions) (</article-title>
          <year>2015</year>
          ), https://www.statista.com/statistics/274774/forecast-of
          <article-title>-mobilephone-users-worldwide/ (accessed</article-title>
          <volume>6</volume>
          /3/18, 11:51 AM)
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9. Gartner:
          <article-title>Global market share held by the leading smartphone operating systems in sales to end users from 1st quarter 2009 to 1st quarter 2018 (</article-title>
          <year>2017</year>
          ), https://www.statista.com/statistics/266136/global-market
          <article-title>-share-held-bysmartphone-operating-systems/</article-title>
          <source>(accessed 6/3/18</source>
          , 11:49 AM)
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <surname>Gultnieks</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          :
          <string-name>
            <surname>F-Droid Benchmarks</surname>
          </string-name>
          (
          <year>2010</year>
          ), https://f-droid.org/
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <surname>Hao</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Liu</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Nath</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Halfond</surname>
            ,
            <given-names>W.G.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Govindan</surname>
          </string-name>
          , R.: Puma:
          <article-title>Programmable ui-automation for large-scale dynamic analysis of mobile apps</article-title>
          .
          <source>In: Proceedings of the 12th Annual International Conference on Mobile Systems</source>
          , Applications, and
          <string-name>
            <surname>Services</surname>
          </string-name>
          (MobiSys) (
          <year>2014</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <surname>Koroglu</surname>
            ,
            <given-names>Y.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Sen</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Muslu</surname>
            ,
            <given-names>O.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Mete</surname>
            ,
            <given-names>Y.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ulker</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Tanriverdi</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Donmez</surname>
            ,
            <given-names>Y.</given-names>
          </string-name>
          :
          <article-title>QBE: QLearning-Based Exploration of Android Applications</article-title>
          .
          <source>In: IEEE International Conference on Software Testing, Verification and Validation (ICST)</source>
          (
          <year>2018</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <string-name>
            <surname>Machiry</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Tahiliani</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Naik</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          :
          <article-title>Dynodroid: An input generation system for android apps</article-title>
          .
          <source>In: Proceedings of the 9th Joint Meeting on Foundations of Software Engineering (ESEC/FSE)</source>
          (
          <year>2013</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14.
          <string-name>
            <surname>Mahmood</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Mirzaei</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Malek</surname>
            ,
            <given-names>S.:</given-names>
          </string-name>
          <article-title>EvoDroid: Segmented Evolutionary Testing of Android Apps</article-title>
          .
          <source>In: 22Nd ACM SIGSOFT International Symposium on Foundations of Software Engineering (FSE)</source>
          . pp.
          <fpage>599</fpage>
          -
          <lpage>609</lpage>
          (
          <year>2014</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          15.
          <string-name>
            <surname>Mao</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Harman</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Jia</surname>
            ,
            <given-names>Y.</given-names>
          </string-name>
          :
          <article-title>Sapienz: Multi-objective automated testing for android applications</article-title>
          .
          <source>In: Proceedings of the 25th International Symposium on Software Testing and Analysis (ISSTA)</source>
          (
          <year>2016</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>16. Android ui/application exerciser monkey, http://developer.android.com/tools/help/monkey.html</mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          17.
          <string-name>
            <surname>Moran</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Vásquez</surname>
            ,
            <given-names>M.L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Bernal-Cárdenas</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Vendome</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Poshyvanyk</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          :
          <article-title>Automatically discovering, reporting and reproducing android application crashes</article-title>
          .
          <source>In: IEEE International Conference on Software Testing, Verification and Validation (ICST)</source>
          (
          <year>2016</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          18.
          <string-name>
            <surname>Oliveira</surname>
            ,
            <given-names>R.A.P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Alégroth</surname>
            ,
            <given-names>E.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Gao</surname>
            ,
            <given-names>Z.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Memon</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>Definition and evaluation of mutation operators for gui-level mutation analysis</article-title>
          .
          <source>In: IEEE Eighth International Conference on Software Testing, Verification and Validation Workshops (ICSTW)</source>
          (
          <year>2015</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          19.
          <string-name>
            <surname>Zeller</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>Yesterday, my program worked. today, it does not</article-title>
          .
          <source>why? In: Proceedings of the 7th European Software Engineering Conference Held Jointly with the 7th ACM SIGSOFT International Symposium on Foundations of Software Engineering (ESEC/FSE-7)</source>
          (
          <year>1999</year>
          )
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>