<!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>Combining Model-Based and Random Approaches to Improve Crash Detection in Android</article-title>
      </title-group>
      <contrib-group>
        <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>Mustafa Efendioğ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>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>Mustafa Efendioğ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</institution>
          ,
          <addr-line>Otomatik Test Yaratımı</addr-line>
        </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>
      <fpage>89</fpage>
      <lpage>100</lpage>
      <abstract>
        <p>Android applications are widely used around the world. Most of these applications contain potential crashes. Many recent academic studies focus on black-box testing of Android applications to detect these crashes. A simple random testing tool, Monkey, detects more crashes than the state-of-the-art black-box testing tools, but can not reach some</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>activities that are located deep within the application. We propose an
hybrid approach that combines our model-learning tool, AndroFrame,
and Monkey. With this hybrid approach, we aim to increase activity
coverage and improve crash detection. We conduct experiment on 20
Android applications. As a result, our hybrid approach achieves 2% more
activity coverage and detects 21 more crashes compared to AndroFrame.
Compared to Monkey, our hybrid approach achieves 24% more coverage
and detects 5 more crashes.
1</p>
    </sec>
    <sec id="sec-2">
      <title>Giriş</title>
      <p>
        Mobil uygulamalar günlük hayatımızın vazgeçilmez parçalarından biri
olmuşlardır. İstatistikler bir kişinin günde ortalama 3 saat mobil telefon kullandığını ve bu
sürenin de %90’ını mobil uygulamalara harcadığını gösteriyor [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ]. Büyüyen
mobil uygulama marketi trendini takiben, üst düzey test konferans ve yayınlarında
mobil uygulama testi yayınları da artmaktadır [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ]. Mobil uygulama pazarında
Android uygulamaları en büyük paya sahiptir. Bu çalışmada Android Grafiksel
Kullanıcı Arayüzü (GKA) testine odaklanmaktayız.
      </p>
      <p>
        Son on yılda A3E [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ], Dynodroid [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ], PUMA [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ], ve SwiftHand [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ] gibi birçok
akıllı otomatik test yaratım aracı geliştirilmiştir. Fakat, basit bir rastgele test
yaratım aracı olan Monkey’in, bunların hepsinden daha çok çökme tespiti yaptığı
gözlemlenmiştir [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ]. Bunun nedeni, Monkey’in diğer araçlara kıyasla çok daha
fazla çeşit olay test edebiliyor olmasıdır [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ]. Monkey’in kötü olduğu taraf ise
Test Altındaki Uygulamanın (TAU) derinliklerindeki ekranlara ulaşamamasıdır.
Bu yüzden Dynodroid gibi araçlar daha az çökme tespit etmesine [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ] rağmen
Monkey’e kıyasla daha büyük aktivite kapsamasına ulaşabilmektedir [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ].
      </p>
      <p>
        Bu çalışmamızda hem aktivite kapsaması, hem de çökme tespiti bakımından
iyi bir performans elde etmek amacıyla AndroFrame-Monkey (AFM) adını
verdiğimiz karma bir otomatik test aracı önermekteyiz. AndroFrame [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ], Android
platformu için geliştridiğimiz tam otomatik bir kara-kutu test yaratım
aracıdır. AndroFrame daha önce dizayn edilmiş Android Grafiksel Kullanıcı Arayüzü
(GKA) test araçlarının özelliklerini birleştirmektedir; A3E’de [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] olduğu gibi
bütün giriş noktalarını (exportable activity) kapsamakta, SwiftHand’de [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ] olduğu
gibi TAU’nun sonlu-durum modelini çıkarmakta ve PUMA’da [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ] önerildiği gibi,
farklı durumları ayırt edebilmek için kosinüs benzerliğini kullanmaktadır.
      </p>
      <p>AndroFrame aktivite kapsaması bakımından diğer araçlar arasında en iyi,
çökme tespiti bakımından ise Monkey ile aşağı yukarı eşittir. AFM aracı,
AndroFrame ile çıkarılan TAU yaklaşık bir modeli üzerinden tüm aktiviteleri ziyaret
edecek en kısa yolları bulup, bu yollarla ziyaret ettiği aktivitelerin her birinde
Monkey aracını ayrı ayrı çalıştırarak çökme tespiti yapmaktadır. Bildiğimiz
kadarıyla, AFM, Monkey ile bir başka otomatik test yaratım aracını bir arada
kullanan ilk çalışmadır.</p>
      <p>Makalenin geri kalanı şu şekilde düzenlenmiştir. Bölüm 2, Android sistem
altyapısı hakkında gerekli bilgileri vermektedir. Bölüm 3, detaylı bir akış çizelgesi
ve basit bir örnek üzerinden AFM aracının çalışma prensiplerini anlatmaktadır.
Bölüm 4, AFM aracının Monkey ve AndroFrame araçları ile kıyaslanması için
oluşturduğumuz altyapıyı ve deney sonuçlarını açıklamaktadır. Bölüm 5,
çalışmamızın geçerliliği ile ilgili konuları ve dizayn seçimlerimiz hakkında açıklamalar
içermektedir. Bölüm 6, ilgili çalışmaları açıklamaktadır. Bölüm 7, çalışmamızı
özetleyip gelecek çalışmalar için olası yolları anlatmaktadır.
2</p>
    </sec>
    <sec id="sec-3">
      <title>Android Sistem Altyapısı</title>
      <p>Bu bölümde, kullandığımız yöntemlerin kolay anlaşılabilmesi için Android
Grafiksel Kullanıcı Arayüzü (GKA) ve Android uygulamaları hakkında temel bilgiler
vermekteyiz.</p>
      <p>Android GKA, aktivite (activity) ve olay (event) tabanlıdır. Aktiviteler bir
ekrandaki kullanıcı arayüzünü temsil eder ve 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 eylemler (action) aracılığıyla etkileşime girebileceğini belirten bir takı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 aracılığı
ile etkileşime girebilir. Olayları temel olarak iki kategoriye ayırabiliriz, sistem
olayları ve GKA olayları (GKA eylemleri). 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</p>
      <p>Tablo 1. GKA Eylemler Listesi
(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.</p>
      <p>Son olarak, bir çökmeyi Android sistem kayıtlarında görülen bir ölümcül hata
(fatal exception) olarak tanımlıyoruz. Çökmeler, sıklıkla test edilen uygulamanın
bir uyarıyla veya uyarısız bir şekilde sonlanmasıyla sonuçlanır. Bazı çökmeler
ise yürütmeyi görsel olarak etkilemez, fakat test edilen uygulama sonuç olarak
çalışmayı durdurur.</p>
      <p>Bir GKA durumu veya kısaca bir durum v aşağıdaki ögelerin
bitiştirilmesinden (concatenation) oluşur.
1. Paket adı
2. Aktivite adı
3. Bağlamsal durum
4. GKA bileşenleri</p>
      <p>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) olacak şekilde üçlü 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); (v2; v3; z2); : : : ; (vn; vn+1; zn)</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). Sınama örneklerini içeren
kümelere test kümesi (test suite), kısaca T K denilir.</p>
    </sec>
    <sec id="sec-4">
      <title>Yöntem</title>
      <p>Bu bölümde AFM aracının akış çizelgesi açıklanmaktadır. Akış çizelgesinin daha
iyi anlaşılması açısından bir örnek üzerinden detaylı açıklamalar da
bulunmaktadır.</p>
      <p>Şekil 1. AFM Aracının Akış Çizelgesi (Flowchart)
Şekil 1, AFM aracının akış çizelgesini göstermektedir. İlk olarak
AndroFrame’in model öğrenme altyapısını kullanarak Test Altındaki Uygulamaların
(TAU) sonlu-durum modelleri çıkarılmaktadır. Bu modeller üzerinden
genişliköncelikli arama (breadth-first search) yöntemi ile her uygulamanın her farklı
aktivitesine giden en kısa izler belirlenir. Daha sonra bu izler AndroFrame’in
yeniden çalıştırma (replay) özelliği kullanılarak mobil cihaz üzerinde birer birer
çalıştırılır. Her izin çalıştırılmasından sonra, belli bir süre boyunca Monkey
çalıştırılarak çökme tespiti ve kapsama analizi yapılır. Monkey’in her aktivite için
çalıştırılma süresi, TAU modeli için çıkarılmış izlerin sayısı ile ters orantılıdır.
Diğer test araçlarıyla adil bir kıyaslama yapılabilmesi adına AFM’nin çalışma
süresi sabit tutulmuş (10 dakika), her iz sonunda Monkey çalıştırma süresi de
bu sabit sürenin iz sayısına bölünmesi ile hesaplanmıştır.</p>
      <p>
        Şekil 2, internetteki açık kodlu F-Droid [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] test uygulamalarından
AndroidomaticKeyer uygulamasının öğrenilmiş bir sonlu-durum modelini göstermektedir.
Yenidenbaşlatmak eylemi mobil cihazın herhangi bir durumunda yapılabilmekte
olduğundan bu eylemden önceki durum içeriği önemsiz anlamında ’_’ ile
gösterilmiştir. Diğer her durumda, v# o duruma verilmiş özel ismi, a# ise o durumun
ait olduğu aktiviteyi gösterir. Sonlu-durum makinesinde her aktivite için birden
fazla durum bulunabilir. Her iki durum arasındaki geçişlerdeki eylemler
kısaltılarak sadece olayların tipleri belirtilmiştir.
_
yenidenbaşlatmak
v1/a1
      </p>
      <p>uzuntıklama
menü</p>
      <p>tıklama geri
metin tıklama v7/a4
tıklama2
v4/a3</p>
      <p>tıklama,uzuntıklama
geri</p>
      <p>tıklama1
v2/a1
metin</p>
      <p>tıklama1
uzuntıklama uzuntıklama</p>
      <p>Tablo 2’de, Şekil 2 üzerinde genişlik-öncelikli arama sonucu bulunmuş en
kısa izler gösterilmektedir. Bu izlerin her biri uygulamanın 5 farklı
aktivitesinden birine gitmektedir. AFM 10 dakika çalıştırılacağından, her izin çalıştırılıp
ardından Monkey kullanılması için ikişer dakika ayrılmıştır. Monkey’in sadece bir
kere 10 dakikalığına ilk durumdan çağrılmasına kıyasla AFM yöntemi,
uygulamanın sonlu-durum modelindeki bütün aktiviteleri kapsamayı garanti etmektedir.
Ayrıca Monkey’in tek başına çağrıldığında v3 durumundan geri dönüş yapmak
Şekil 3. AndroFrame, Monkey, ve AFM Deney Sonuçları
mümkün olmazken, AFM yönteminde iki dakikanın bitiminde hemen başka bir
izin çalıştırılmasına geçilir.
4</p>
    </sec>
    <sec id="sec-5">
      <title>Deneyler</title>
      <p>Bu bölümde AFM’nin kıyaslanması için gerçekleştirdiğimiz deneylerin içeriği ve
sonuçları açıklanmaktadır.</p>
      <p>Deneylerin çalıştırılması için Android Debugging Bridge (adb) aracının en
yeni versiyonu kurulmuştur. Deneyler emulasyon ortamında, Android 4.4.2
versiyonu üzerinde koşulmuştur.</p>
      <p>
        Adil bir kıyaslama yapabilmek adına AndroFrame, Monkey, ve AFM
araçlarının her biri her TAU üzerinde 10 dakika çalıştırılmıştır. Çökme tespiti ve kapsam
analizi kıyaslamaları için 20 adet Android uygulaması F-Droid [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] sitesinden
indirilmiştir. Kıyaslama ölçütü olarak her uygulamanın aktivite kapsaması ve çökme
tespit sayıları AndroFrame, Monkey, ve AFM için hesaplanmıştır.
      </p>
      <p>Android GKA Test deneylerinde başarım kriteri olarak ortalama aktivite
kapsaması ve çökme tespit sayılarına bakmaktayız. Deneylerimizin rastgelelik
içermesinden ötürü tüm deneylerimizi üçer kere tekrarlayıp sonuçlarımızın
tekrar ortalamasını Şekil 3 ile raporlamaktayız. AFM, Monkey’e ve AndroFrame’e
kıyasla daha fazla hata tespitinde bulunmaktadır. Bunun temel nedeni AFM’nin
derinliklerdeki aktivitelerde de çok hata tespiti yapabilen Monkey aracını
çalıştırabilmesidir. AFM’nin aktivite kapsaması yine Monkey ve AndroFrame’e göre
daha iyi çıkmıştır. AFM, algoritması gereği AndroFrame’in ulaştığı tüm
aktivitelere ulaşmaktadır. Bu aktivitelerde Monkey çalıştırılması sonucu daha önce
keşfedilmemiş yeni aktivitelere gidilmiştir. Böylece AFM’nin aktivite kapsaması
AndroFrame aracına göre daha yüksek çıkmıştır. Sonuç olarak, AFM, 20 adet
Android uygulaması içerisinde AndroFrame’e kıyasla %2 daha fazla aktivite
kapsamasına ulaşıp ortalamada fazladan yaklaşık 21 çökme tespit etmiştir. Monkey’e
kıyasla ise %24 daha fazla aktivite kapsamasına ulaşıp ortalamada fazladan
yaklaşık 5 çökme tespit etmiştir.</p>
    </sec>
    <sec id="sec-6">
      <title>Tartışma</title>
      <sec id="sec-6-1">
        <title>Monkey Hakkında</title>
        <p>
          Monkey sayıca diğer test araçlarına göre daha çok sayıda çökme tespit eden basit
bir rastgele test yaratım aracıdır [
          <xref ref-type="bibr" rid="ref10">10</xref>
          ]. Monkey’in başarısının temelinde diğer
test araçları tarafından üretilemeyen olaylar bulunmaktadır. Bu olaylara örnek
olarak birden fazla parmakla yapılabilen karışık hareketler, aktivitelere yeniden
başlatma dışında intentler yollamak, trackball hareketleri, ve yazılımda tanımlı
ama donanımda bulunmayan özel tuşlara basmak verilebilir. Monkey bu olayları
Android işletim sistemine gömülü olarak geldiği için yapabilmektedir. Diğer test
araçları genel olarak Android işletim sistemine dışarıdan uiautomator veya daha
eski troyd altyapılarını kullanarak Android cihaza erişirler. Bu altyapılar söz
konusu olayları desteklememektedir.
        </p>
        <p>Monkey AndroFrame’e göre daha az aktivite kapsamasına ulaşabilmektedir.
Bunun nedeni Şekil 2 ile verilen modelden kolayca anlaşılabilir. Monkey, çok
sayıda çökme tespit etmesine rağmen geri dönüşü mümkün olmayan durumlara
takılı kaldığı ya da sayıca çok olay arasından aktivite geçişi için gerekli olanı
tutturamadığı için, TAU derinliklerinde kalan başka aktivitelere
erişememektedir. AFM’yi, Monkey aracının bu aktivitelerde de çalıştırılmasının çökme tespit
sayısını artıracağı fikrinden yola çıkarak önermekteyiz.</p>
        <p>
          Monkey hakkındaki bir diğer sorun ise Monkey ile üretilen testlerin kolayca
yeniden çalıştırılabilir betikler (replayable script) haline getirilememesidir [
          <xref ref-type="bibr" rid="ref11">11</xref>
          ].
Bu problem AFM’nin tespit ettiği çökmelerin doğrulanamamasına yol
açmaktadır. İleride Monkey ile üretilen testlerin tekrar edilebilmesi amacıyla AFM
aracımızı geliştirmeyi planlamaktayız.
        </p>
        <p>
          Monkey çalıştırırken yaratılan bir testte çökmeye hangi olayın neden
olduğuna karar vermek açık bir problemdir [
          <xref ref-type="bibr" rid="ref11">11</xref>
          ]. Şu an için AFM, bir iz
çalıştırdıktan sonra Monkey’i birden çok eylem gerçekleştirecek şekilde çalıştırmaktadır.
AFM, Monkey’i her bir eylem için çalıştırıp/durdurarak da Monkey testi
yapabilir. Böylece AFM çökmeye hangi eylemin sebep olduğunu ortaya çıkarabilir.
Bu yöntemi, Monkey’in kısıtlı sürede ürettiği eylem sayısını azaltıp çökme tespit
sayısını düşürebilme ihtimali yüzünden bu çalışmamızda tercih etmemiş
bulunmaktayız.
5.2
        </p>
      </sec>
      <sec id="sec-6-2">
        <title>AndroFrame Hakkında</title>
        <p>AndroFrame modüler bir test yaratım aracıdır. AndroFrame içerisinde
derinlik-öncelikli, rastgele, ve makine-öğrenmesi tabanlı arama stratejileri
kodlanmıştır. Bu çalışmamızda AndroFrame makine-öğrenmesi tabanlı arama yöntemiyle
çalıştırılmıştır. AndroFrame içerisindeki makine-öğrenme modülü aktivite
kapsamasını artıracak olan olaylara öncelik verecek şekilde eğitilmiştir. Bu sayede
AndroFrame, Monkey’e göre daha yüksek aktivite kapsamasına ulaşmaktadır.</p>
        <p>AndroFrame’in öğrendiği sonlu-durum modeli tam değildir. Dolayısıyla
öğrenilmiş modellerden çıkarılan izlerin istenilen aktivitelere gittiklerini doğrulayıp,
0
2
iis 15
y
a
iteS 10
v
it
k
A 5
0
x1000 200
0
0
1
0
0
5
0
4
d
toeM 03
x000 02
1
0
1
0
Test</p>
        <p>F−Droid</p>
        <p>Test</p>
        <p>F−Droid</p>
        <p>Test</p>
        <p>F−Droid
Test</p>
        <p>F−Droid</p>
        <p>Test</p>
        <p>F−Droid
Şekil 4. Test ve F-Droid Uygulama Karakteristiklerinin Dağılımları
eğer istenilen aktiviteye ulaşılamamış ise model öğrenirken kullanılan test
örneklerinden o aktiviteye ulaştığı bilinen izlerden birini seçmek ilerisi için pratik bir
çözüm olabilir.
5.3</p>
      </sec>
      <sec id="sec-6-3">
        <title>Geçerlilik Sorunları</title>
        <p>Deneylerimizde emulasyon ortamından yararlanmaktayız. Emulasyon ortamı şarj
bitmesi gibi sistem olaylarını doğru yansıtmayabilir. Deneylerimizde
kullandığımız eylemlerin hepsi emulasyon ortamında desteklenmektedir. Ayrıca tüm
araçların aynı koşullar altında çalıştırılması deneylerimizin kuvvetini artırmaktadır.</p>
        <p>
          F-Droid uygulamaları [
          <xref ref-type="bibr" rid="ref6">6</xref>
          ] AFM test aracının diğer araçlarla kıyaslanması için
yeterlidir, çünkü birçok üst seviye konferans bildirisi ve dergi makalesinde
Android test araçlarının kıyaslanması için kullanılmıştır [
          <xref ref-type="bibr" rid="ref11 ref4 ref5 ref9">4,5,9,11</xref>
          ].
        </p>
        <p>F-Droid uygulamaları Mart 2016 ayı itibariyle 4021 adettir ve bu sayı gün
geçtikçe artmaktadır. İndirdiğimiz 4021 uygulamadan deneylerimiz için 20
taneyi rastgele seçmiş bulunmaktayız. Seçtiğimiz uygulamaların F-Droid
uygulamalarının genelini temsil ettiğini gösterebilmek adına bu uygulamaların komut,
metod, aktivite, ve izin sayıları ile megabayt cinsinden boyutlarını ölçtük.
Şekil 4 ve Tablo 3, test ettiğimiz 20 uygulamanın (test kümesi) ve tüm F-Droid
uygulamalarının karakteristiklerini göstermektedir.</p>
        <p>
          Aktivite kapsaması ölçümü, Android testlerinde yaygın olarak
kullanılmaktadır [
          <xref ref-type="bibr" rid="ref1">1</xref>
          ]. Aktiviteler, kabaca geleneksel GKA-tabanlı uygulamalardaki farklı
ekranlara ya da pencerelere karşılık gelirler. Aktivite kapsamasını artırmak, daha
Tablo 3. Test ve F-Droid Uygulamaların Asgari, Azami, ve Ortalama Karakteristikleri
Karakteristik
        </p>
        <p>Boyut (MB)
1000 x Komutlar
1000 x Metodlar
# Aktiviteler
# İzinler
fazla ekranı keşfetme anlamına gelmektedir. Daha fazla ekranı keşfetmek ise,
uygulamanın daha çok işlevini kapsamaktadır. Bu yüzden, yaratılan test
örneklerinin TAU’nun daha çok işlevini kapsaması için daha yüksek aktivite kapsamasını
hedeflemekteyiz. Aktivite kapsamasının avantajı, uygulamanın kaynak kodunun
değiştirilmesine (instrumentation) gerek duymamasıdır. Komut kapsaması gibi
diğer yaygın olarak kullanılan ölçümleri yapabilmek için TAU’nun kaynak
kodunun değiştirilmesi gerekmektedir.</p>
        <p>
          Çökme sayıları ve kapsama ölçümleri, yalnızca deney ortamımızda
kullanılan test etme algoritmasından etkilendiği için, gözlemlerimizin içsel geçerliliği
(internal validity) korunmaktadır. Test araçlarının adil bir karşılaştırmasını
yapabilmek adına, çökme ve aktivite kapsamasını bütün araçlarda aynı yöntemleri
kullanarak ölçmekteyiz. Doğruluğu artırmak amacıyla, diğer test araçları da
ortalama olarak benzer bir hızla olay oluşturduğu için, Monkey’i de iki saniyede
bir olay oluşturacak şekilde çalışmaya zorladık. F-Droid uygulamaları, Android
GKA testi çalışmalarında yaygın olarak kullanılmaktadır [
          <xref ref-type="bibr" rid="ref5">5</xref>
          ]; bu yüzden test
kümemizin seçim yanlılığına (selection bias) eğilimi yoktur.
        </p>
        <p>Gözlemlerimiz dışsal geçerliliğini (external validity) de korumaktadır.
Kullandığımız uygulamaları, F-Droid uygulama kümesinden rastgele olarak indirdik.
Kullandığımız uygulamaların rastgeleliği, çeşitliliği ve sayısı, bu uygulamalar
üzerindeki deney sonuçlarının dışsal olarak genellenebilir olduğunu
göstermektedir. Uygulama kümemiz, haber, eğlence ve iletişim defteri uygulamaları gibi
çeşitli alanlardaki uygulamalardan oluştuğu için kapsamlıdır. Ayrıca
kullandığımız TAU’ların ortalama karakteristik özelliklerini de Şekil 4 ile göstermekteyiz.
Bu karakteristiklere sahip olduğu sürece, verilen bütün TAU’lar için benzer
sonuçları almayı beklemekteyiz.
6</p>
        <p>İlgili Çalışmalar
AndroFrame test aracını, Test Altındaki Uygulamaların (TAU) sonlu-durum
modellerini öğrenmek için kullanmaktayız. AndroFrame yetenekleri itibariyle
aşağıda anlatılan son model (state-of-the-art) test araçlarıyla karşılaştırılabilir
durumdadır.</p>
        <p>
          A3E [
          <xref ref-type="bibr" rid="ref1">1</xref>
          ] sistematik olarak GKA bileşenlerini çalıştıran bir Android test
aracıdır. A3E, uygulamanın birden fazla olabilen giriş noktalarını (exportable
activities) desteklemektedir. AndroFrame de bu aktiviteleri desteklemektedir.
        </p>
        <p>
          CrashScope [
          <xref ref-type="bibr" rid="ref11">11</xref>
          ], wifi ve rotation gibi bağlamsal eylemleri ortaya
koymaktadır. CrashScope bağlamsal durumları değiştirmenin yeni çökmeleri ortaya
çıkardığını göstermektedir. AFM, döndürme eylemi dışındaki bütün bağlamsal
eylemleri desteklemektedir. Döndürme desteğini ileriki bir çalışma olarak
kodlayacağız.
        </p>
        <p>
          SwiftHand [
          <xref ref-type="bibr" rid="ref4">4</xref>
          ] TAU’nın sonlu-durum modelini yaratmak için özdevinir
öğrenme (automata learning) kullanmaktadır. AndroFrame’de algoritmalarımızı
tanımlarken genel olarak SwiftHand’in biçimselleştirmesini takip etmekteyiz.
Ayrıca, TAU’nın deterministik bir modelini elde etmek için SwiftHand’in
PassiveLearn algoritmasını kullanmaktayız.
        </p>
        <p>
          PUMA [
          <xref ref-type="bibr" rid="ref7">7</xref>
          ] bir başka kara-kutu Android test aracıdır. PUMA’nın ana
katkısı, iki durumun içeriklerinin karşılaştırılmasına dayanan kosinüs benzerliği dir.
AndroFrame kosinüs benzerliğini durum eşdeğerliği için kullanmaktadır.
        </p>
        <p>
          Baek and Bae [
          <xref ref-type="bibr" rid="ref2">2</xref>
          ], Android GKA durumları için bir karşılaştırma kriteri
tanımlamaktadır. AndroFrame, bu çalışmada anlatılan maksimum karşılaştırma
seviyesini kullanarak kara-kutu testi için modellerimizi olabildiğince ince-taneli
(fine-grained) yapmaktadır.
7
        </p>
      </sec>
    </sec>
    <sec id="sec-7">
      <title>Sonuç</title>
      <p>Bu çalışmamızda model öğrenen AndroFrame aracımızı Monkey ile karma olarak
çalıştırarak daha çok aktiviteyi kapsayıp çökme tespit performansını iyileştirdik.
Karma yöntemimiz 20 adet Android uygulaması içerisinde AndroFrame’e kıyasla
%2 daha fazla aktivite kapsamasına ulaşıp fazladan 21 çökme tespit etmiştir.
Monkey’e kıyasla ise %24 daha fazla aktivite kapsamasına ulaşıp fazladan 5
çökme tespit etmiştir.</p>
      <p>İlerideki çalışmalarımızda deney sayısını artırmayı, diğer test araçları ile
kıyaslama yapmayı, ve deneyleri AndroFrame’in diğer arama stratejileri için de
uygulamayı planlıyoruz. Ayrıca, Monkey ile üretilen testlerin yeniden çalıştırılabilir
hale getirilip testlerin yeniden çalıştırılarak çökme tespitlerinin doğrulanması da
başlıca izleyeceğimiz araştırma yolları arasındadır.</p>
      <p>Kaynaklar</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <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="ref2">
        <mixed-citation>
          2.
          <string-name>
            <surname>Baek</surname>
            ,
            <given-names>Y.M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Bae</surname>
            ,
            <given-names>D.H.</given-names>
          </string-name>
          :
          <article-title>Automated model-based android gui testing using multilevel gui comparison criteria</article-title>
          .
          <source>In: Proceedings of the 31st IEEE/ACM International Conference on Automated Software Engineering (ASE)</source>
          (
          <year>2016</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <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="ref4">
        <mixed-citation>
          4.
          <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="ref5">
        <mixed-citation>
          5.
          <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="ref6">
        <mixed-citation>
          6.
          <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="ref7">
        <mixed-citation>
          7.
          <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="ref8">
        <mixed-citation>
          8.
          <string-name>
            <surname>Koroglu</surname>
            ,
            <given-names>Y.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Sen</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <source>AndroFrame Technical Report</source>
          (
          <year>2017</year>
          ), https://www.cmpe.boun.edu.tr/ yavuz.koroglu/AndroFrameTechnicalReport.pdf
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <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="ref10">
        <mixed-citation>10. Android ui/application exerciser monkey, http://developer.android.com/tools/help/monkey.html</mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <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="ref12">
        <mixed-citation>
          12.
          <string-name>
            <surname>Zein</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Salleh</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Grundy</surname>
            ,
            <given-names>J.:</given-names>
          </string-name>
          <article-title>A systematic mapping study of mobile application testing techniques</article-title>
          .
          <source>J. Syst. Softw</source>
          .
          <volume>117</volume>
          ,
          <fpage>334</fpage>
          -
          <lpage>356</lpage>
          (
          <year>2016</year>
          )
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>