=Paper=
{{Paper
|id=Vol-1980/YTM_2017_paper_2
|storemode=property
|title=Android'de Cokme Tespitini Iyilestirme Amacli Model-Tabanli ve Rastgele Karma Yontem(Combining Model-Based and Random Approaches to Improve Crash Detection in Android)
|pdfUrl=https://ceur-ws.org/Vol-1980/YTM_2017_paper_2.pdf
|volume=Vol-1980
|authors=Yavuz Koroglu,Mustafa Efendioglu,Alper Sen
|dblpUrl=https://dblp.org/rec/conf/uyms/KorogluE017
}}
==Android'de Cokme Tespitini Iyilestirme Amacli Model-Tabanli ve Rastgele Karma Yontem(Combining Model-Based and Random Approaches to Improve Crash Detection in Android)==
Android’de Çökme Tespitini İyileştirme Amaçlı Model-Tabanlı ve Rastgele Karma Yöntem Yavuz Köroğlu1 , Mustafa Efendioğlu1 , ve Alper Şen1 Boğaziçi Üniversitesi, Bilgisayar Mühendisliği Bölümü {yavuz.koroglu,mustafa.efendioglu,alper.sen}@boun.edu.tr Özet. Android uygulamaları dünya çapında yaygın olarak kullanılmak- tadır. Bu uygulamaların birçoğu potansiyel çökmeler (crash) içermekte- dir. Bu çökmeleri tespit etmek amaçlı olarak son yıllarda Android uy- gulamalarının kara-kutu (black-box) testini yapan birçok akademik ça- lışma gerçekleştirilmiştir. Test amaçlı rastgele eylemler seçen basit bir araç olan Monkey, en gelişkin test araçlarından daha fazla çökme tespit etmekte, fakat uygulamaların derinliklerindeki aktivitelere ulaşamamak- tadır. 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ştirmeyi amaçlamaktayız. Karma yöntemimiz 20 adet Android uygulaması içerisinde AndroFrame’e kıyasla %2 daha fazla ak- tivite 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. Anahtar Kelimeler: Mobil Uygulama Testi, Grafiksel Kullanıcı Ara- yüzü Testi, Otomatik Test Yaratımı Combining Model-Based and Random Approaches to Improve Crash Detection in Android Yavuz Köroğlu1 , Mustafa Efendioğlu1 , and Alper Şen1 Bogazici University, Department of Computer Engineering {yavuz.koroglu,mustafa.efendioglu,alper.sen}@boun.edu.tr Abstract. 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 89 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. Keywords: Mobile Application Testing, GUI Testing, Automated Test Generation 1 Giriş Mobil uygulamalar günlük hayatımızın vazgeçilmez parçalarından biri olmuşlar- dı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 [3]. Büyüyen mo- bil uygulama marketi trendini takiben, üst düzey test konferans ve yayınlarında mobil uygulama testi yayınları da artmaktadır [12]. 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. Son on yılda A3 E [1], Dynodroid [9], PUMA [7], ve SwiftHand [4] 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 [11]. Bunun nedeni, Monkey’in diğer araçlara kıyasla çok daha fazla çeşit olay test edebiliyor olmasıdır [11]. 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 [11] rağmen Monkey’e kıyasla daha büyük aktivite kapsamasına ulaşabilmektedir [9]. 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ı ver- diğimiz karma bir otomatik test aracı önermekteyiz. AndroFrame [8], 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; A3 E’de [1] olduğu gibi bü- tün giriş noktalarını (exportable activity) kapsamakta, SwiftHand’de [4] olduğu gibi TAU’nun sonlu-durum modelini çıkarmakta ve PUMA’da [7] önerildiği gibi, farklı durumları ayırt edebilmek için kosinüs benzerliğini kullanmaktadır. 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ı, And- roFrame 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 ka- darıyla, AFM, Monkey ile bir başka otomatik test yaratım aracını bir arada kullanan ilk çalışmadır. 90 Makalenin geri kalanı şu şekilde düzenlenmiştir. Bölüm 2, Android sistem alt- yapı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 Android Sistem Altyapısı Bu bölümde, kullandığımız yöntemlerin kolay anlaşılabilmesi için Android Gra- fiksel Kullanıcı Arayüzü (GKA) ve Android uygulamaları hakkında temel bilgiler vermekteyiz. 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. 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ılanlar- dan daha kapsamlı bir GKA eylemleri listesini Tablo 1’de göstermekteyiz. Eylem- ler üç kategoriden oluşmaktadır; bağlamsal olmayan (non-contextual), bağlamsal (contextual) ve özel (special). Bağlamsal olmayan eylemler kullanıcı hareketle- riyle 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 eylem- lerdirler 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ığı, blu- etooth durumu, konum, uçak modu ve uyku modu) uygulamanın o anki bağlam- sal 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 nite- likleri 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 91 Tablo 1. GKA Eylemler Listesi Bağlamsal olmayan Param1 Param2 Param3 Param4 Param5 tıklama x y - - - uzuntıklama x y - - - metin x y string - - kaydırma x1 y1 x2 y2 süre menü - - - - - geri - - - - - Bağlamsal Parametre bağlanırlık açık/kapalı/değiştir bluetooth açık/kapalı/değştir konum gps/gps&ağ/kapalı/değiştir uçuşmodu açık/kapalı/değiştir uyku açık/kapalı/değiştir Özel Param1 Param2 Param3 Param4 Param5 yenidenbaşlatmak paket aktivite - - - (reinitialize) bulunmaktadır. Sistem olayları sistem tarafından oluşturulan olay- lardır; örneğin, pil seviyesi olayları, SMS almak, ve saat/süreölçer olayları gibi. 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. Bir GKA durumu veya kısaca bir durum v aşağıdaki ögelerin bitiştirilmesin- den (concatenation) oluşur. 1. Paket adı 2. Aktivite adı 3. Bağlamsal durum 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 ∈ Z, ancak ve ancak bir v durumunun GKA bileşenlerinden en az biri ile ilişkilendirilebiliyorsa, z eylemi v durumunda etkindir, kısaca z ∈ λ(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. t = (v1 , v2 , z1 ), (v2 , v3 , z2 ), . . . , (vn , vn+1 , zn ) 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. 92 3 Yöntem 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 bulunmak- tadır. Şekil 1. AFM Aracının Akış Çizelgesi (Flowchart) Şekil 1, AFM aracının akış çizelgesini göstermektedir. İlk olarak AndroF- rame’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 ça- lış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. Şekil 2, internetteki açık kodlu F-Droid [6] test uygulamalarından Androido- maticKeyer 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öste- rilmiş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. 93 _ yenidenbaşlatmak v1/a1 uzuntıklama menü tıklama geri metin tıklama v7/a4 tıklama2 v4/a3 tıklama,uzuntıklama geri tıklama1 v2/a1 metin tıklama1 uzuntıklama uzuntıklama tıklama1 v5/a1 metin tıklama2 tıklama2 v6/a5 metin tıklama1 uzuntıklama tıklama2 v8/a5 tıklama1 v9/a5 tıklama2 tıklama v3/a2 v10/a5 metin v11/a5 Şekil 2. Örnek TAU Sonlu-Durum Modeli Tablo 2. Çalıştırılacak En Kısa İzler Listesi Aktivite Aktiviteye Ulaşan En Kısa İz a1 ta1 = (_,v1,yenidenbaşlatmak ) a2 ta2 = (_,v1,yenidenbaşlatmak ), (v1,v2,metin), (v2,v3,tıklama2 ) a3 ta3 = (_,v1,yenidenbaşlatmak ), (v1,v4,tıklama) a4 ta4 = (_,v1,yenidenbaşlatmak ), (v1,v7,menü) a5 ta5 = (_,v1,yenidenbaşlatmak ), (v1,v2,metin), (v2,v6,tıklama1 ) 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ı aktivitesin- den 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, uygulama- nı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 94 Ş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 Deneyler Bu bölümde AFM’nin kıyaslanması için gerçekleştirdiğimiz deneylerin içeriği ve sonuçları açıklanmaktadır. 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 ver- siyonu üzerinde koşulmuştur. 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 [6] sitesinden indi- rilmiş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. 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 tek- rar 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 akti- vitelere 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 kap- saması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 yak- laşık 5 çökme tespit etmiştir. 95 5 Tartışma 5.1 Monkey Hakkında 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 [10]. 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. 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şememekte- dir. 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. Monkey hakkındaki bir diğer sorun ise Monkey ile üretilen testlerin kolayca yeniden çalıştırılabilir betikler (replayable script) haline getirilememesidir [11]. Bu problem AFM’nin tespit ettiği çökmelerin doğrulanamamasına yol açmak- tadır. İleride Monkey ile üretilen testlerin tekrar edilebilmesi amacıyla AFM aracımızı geliştirmeyi planlamaktayız. Monkey çalıştırırken yaratılan bir testte çökmeye hangi olayın neden oldu- ğuna karar vermek açık bir problemdir [11]. Şu an için AFM, bir iz çalıştırdık- tan 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 yapa- bilir. 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ş bulun- maktayız. 5.2 AndroFrame Hakkında AndroFrame modüler bir test yaratım aracıdır. AndroFrame içerisinde derin- lik-ö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 kap- saması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. AndroFrame’in öğrendiği sonlu-durum modeli tam değildir. Dolayısıyla öğre- nilmiş modellerden çıkarılan izlerin istenilen aktivitelere gittiklerini doğrulayıp, 96 500 50 7 6 400 40 5 1000 x Komut 1000 x Metod Boyut (MB) 300 30 4 200 3 20 2 100 10 1 0 0 0 Test F−Droid Test F−Droid Test F−Droid 20 50 40 15 Aktivite Sayisi Izin Sayisi 30 10 20 5 10 0 0 Test F−Droid Test 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 örnek- lerinden o aktiviteye ulaştığı bilinen izlerden birini seçmek ilerisi için pratik bir çözüm olabilir. 5.3 Geçerlilik Sorunları 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. F-Droid uygulamaları [6] AFM test aracının diğer araçlarla kıyaslanması için yeterlidir, çünkü birçok üst seviye konferans bildirisi ve dergi makalesinde And- roid test araçlarının kıyaslanması için kullanılmıştır [4,5,9,11]. 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 ta- neyi rastgele seçmiş bulunmaktayız. Seçtiğimiz uygulamaların F-Droid uygula- maları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. Şe- kil 4 ve Tablo 3, test ettiğimiz 20 uygulamanın (test kümesi) ve tüm F-Droid uygulamalarının karakteristiklerini göstermektedir. Aktivite kapsaması ölçümü, Android testlerinde yaygın olarak kullanılmak- tadır [1]. Aktiviteler, kabaca geleneksel GKA-tabanlı uygulamalardaki farklı ek- ranlara ya da pencerelere karşılık gelirler. Aktivite kapsamasını artırmak, daha 97 Tablo 3. Test ve F-Droid Uygulamaların Asgari, Azami, ve Ortalama Karakteristikleri Test Kümesi F-Droid Karakteristik Asgari Azami Ortalama Asgari Azami Ortalama Boyut (MB) 0.02 17.48 1.8 0.01 157.2 2.29 1000 x Komutlar 0.9 522.2 74.17 0.01 1395 107.4 1000 x Metodlar 0.18 38.15 6.51 0.01 157.7 11.3 # Aktiviteler 1 28 6.3 0 123 5.79 # İzinler 0 24 6.4 0 168 8.4 fazla ekranı keşfetme anlamına gelmektedir. Daha fazla ekranı keşfetmek ise, uy- gulamanın daha çok işlevini kapsamaktadır. Bu yüzden, yaratılan test örnekleri- nin 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 kodu- nun değiştirilmesi gerekmektedir. Çö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ı ya- pabilmek 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 or- talama 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 [5]; bu yüzden test kümemizin seçim yanlılığına (selection bias) eğilimi yoktur. Gözlemlerimiz dışsal geçerliliğini (external validity) de korumaktadır. Kullan- dığı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östermek- tedir. 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 so- nuçları almayı beklemekteyiz. 6 İlgili Çalışmalar AndroFrame test aracını, Test Altındaki Uygulamaların (TAU) sonlu-durum mo- dellerini öğ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 du- rumdadır. A3 E [1] sistematik olarak GKA bileşenlerini çalıştıran bir Android test ara- cıdır. A3 E, uygulamanın birden fazla olabilen giriş noktalarını (exportable acti- vities) desteklemektedir. AndroFrame de bu aktiviteleri desteklemektedir. 98 CrashScope [11], wifi ve rotation gibi bağlamsal eylemleri ortaya koymak- tadı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 kodla- yacağız. SwiftHand [4] 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. Ay- rıca, TAU’nın deterministik bir modelini elde etmek için SwiftHand’in Passive- Learn algoritmasını kullanmaktayız. PUMA [7] bir başka kara-kutu Android test aracıdır. PUMA’nın ana kat- kı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. Baek and Bae [2], Android GKA durumları için bir karşılaştırma kriteri ta- nı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 Sonuç 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. İ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 uy- gulamayı 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. Kaynaklar 1. Azim, T., Neamtiu, I.: Targeted and depth-first exploration for systematic tes- ting of android apps. In: Proceedings of the ACM SIGPLAN International Con- ference on Object Oriented Programming Systems Languages and Applications (OOPSLA) (2013) 2. Baek, Y.M., Bae, D.H.: Automated model-based android gui testing using multi- level gui comparison criteria. In: Proceedings of the 31st IEEE/ACM International Conference on Automated Software Engineering (ASE) (2016) 3. Chaffey, D.: Statistics on consumer mobile usage and adoption to inform your mobile marketing strategy mobile site design and app development (2017), http://www.smartinsights.com/mobile-marketing/mobile-marketing- analytics/mobile-marketing-statistics/ 99 4. Choi, W., Necula, G., Sen, K.: Guided gui testing of android apps with minimal restart and approximate learning. In: Proceedings of the ACM SIGPLAN Inter- national Conference on Object Oriented Programming Systems Languages and Applications (OOPSLA) (2013) 5. Choudhary, S.R., Gorla, A., Orso, A.: Automated test input generation for android: Are we there yet? In: Proceedings of the 30th IEEE/ACM International Conference on Automated Software Engineering. ASE (2015) 6. Gultnieks, C.: F-Droid Benchmarks (2010), https://f-droid.org/ 7. Hao, S., Liu, B., Nath, S., Halfond, W.G., Govindan, R.: Puma: Programmable ui-automation for large-scale dynamic analysis of mobile apps. In: Proceedings of the 12th Annual International Conference on Mobile Systems, Applications, and Services (MobiSys) (2014) 8. Koroglu, Y., Sen, A.: AndroFrame Technical Report (2017), https://www.cmpe.boun.edu.tr/ yavuz.koroglu/AndroFrameTechnicalReport.pdf 9. Machiry, A., Tahiliani, R., Naik, M.: Dynodroid: An input generation system for android apps. In: Proceedings of the 9th Joint Meeting on Foundations of Software Engineering (ESEC/FSE) (2013) 10. Android ui/application exerciser monkey, http://developer.android.com/tools/help/monkey.html 11. Moran, K., Vásquez, M.L., Bernal-Cárdenas, C., Vendome, C., Poshyvanyk, D.: Automatically discovering, reporting and reproducing android application crashes. In: IEEE International Conference on Software Testing, Verification and Validation (ICST) (2016) 12. Zein, S., Salleh, N., Grundy, J.: A systematic mapping study of mobile application testing techniques. J. Syst. Softw. 117, 334–356 (2016) 100