通过本地和云之间的调度扩展低端Android设备的能力外文翻译资料

 2022-01-26 09:01

Extend Capability of Low-End Android Devices by Scheduling Apps Between Local and Cloud

Authors:Shaoyong Li ; Lei Luo ; Yaping Liu ; Yaoxue Zhang

Date:2018.8.13

Abstract:

Smartphones are indispensable in people#39;s daily lives. As smartphone apps are being increasingly concurrent, developers are increasingly unable to tackle the complexity and to avoid subtle concurrency bugs. To better address this issue, we propose a novel approach to manifesting concurrency bugs in Android apps based on the fact that one can simultaneously generate input events and their schedules for an app. We conduct static-dynamic hybrid analysis to find potentially conflicting resource accesses in an app. The app is then automatically pressure-tested by guided event and schedule generation. We implemented the prototype tool AATT and evaluated it over thirteen popular real-world open-source apps. AATT successfully found 9 concurrency bugs out of which 7 were previously unknown.

Published in: 2016 23rd Asia-Pacific Software Engineering Conference (APSEC)

Date of Conference: 6-9 Dec. 2016

Date Added to IEEE Xplore: 03 April 2017

ISBN Information:

Print ISSN: 1530-1362

INSPEC Accession Number: 16777747

DOI: 10.1109/APSEC.2016.038

Publisher: IEEE

Conference Location: Hamilton, New Zealand

Qiwei Li

Yanyan Jiang

Tianxiao Gu

Chang Xu

Jun Ma

Xiaoxing Ma

Jian Lu

Advertisement

Contents

SECTION I.

Introduction

The mobile device and app market flourishes in recent years. At the end of year 2015, there had been more than 1.9 billion apps in the Google Play Store [1].

Concurrency is a key factor in a mobile app: it should quickly respond to incoming events as well as processing time-consuming tasks in the background [2]. However, concurrent programs are notoriously difficult to write, test and debug. Therefore, Android has a set of constraints to avoid concurrency bugs (e.g., Android UI updates are constrained in the Main Thread and all AsyncTasks are scheduled in a single background thread). Unfortunately, as mobile apps are being increasingly complicated, developers are unable to correctly understand app#39;s behavior and leave subtle concurrency bugs in the releases.

Existing work [3]–[4][5] tackles the problem of detecting concurrency bugs in an app by extending the concept of data race to event-driven systems. However, their bug detection capabilities heavily depend on the quality of input events that are used to build the event happens-before graph. Furthermore, non-commutative events may not lead to concurrency bugs and these techniques usually have a high false-positive rate [5].

In this paper, we take a different approach to manifesting hidden concurrency bugs in an app. We observed that in mobile app testing, one can simultaneously generate both events and their schedules to manifest potentially mistake event-schedule combinations. To realize this idea, the two challenges are 1) how to figure out which events are potentially related to concurrency bug; and 2) how to systematically generate such events and schedules to manifest real concurrency bugs.

To address the first challenge, we deploy static-dynamic hybrid analysis to find each concurrent task (Listener, Thread or AsyncTask)lsquo;s shared resource access sites (i.e., access points, APs). Following the definition of noncommutative race [3], two concurrent tasks are conflicting if they both access a particular AP and at least one is a write operation. Conflicting tasks are potentially related in a concurrency bug and should be scheduled by a guided event generation.

To address the second challenge, we propose a scheduling oriented depth-first search (SO-DFS) algorithm that integrates both event generation and schedule generation. SO-DFS is based on the traditional state space exploration algorithm [6] that traverses each transition between distinct app states (de-fined by the GUI layout) exactly once and is not concurrency-aware. We extend it by systematically manifesting all k -combination schedules of conflicting tasks that are relevant to the current app state (we set k = 2 in the implementation for practical consideration).

We implemented our approach as a prototype tool named AATT. We evaluated the effectiveness and efficiency of the tool using popular open-source apps. We found nine concurrency bugs (cause crashes or functional bugs) where seven were previously unknown and three are already confirmed by the developers. Detailed evaluation results show that AATT achieved improved effectiveness over concurrency-unaware techniques (DFS) and random testing (Monkey) with a reasonable overhead.

Our contributions are summarized as follows:

全文共34250字,剩余内容已隐藏,支付完成后下载完整资料


通过本地和云之间的调度扩展低端Android设备的能力

作者:李;罗雷;刘某;张

Date:2018.8.13

摘要:

智能手机在人们的日常生活中是不可或缺的。由于智能手机应用程序的并发性越来越强,开发人员越来越无法解决复杂的问题,也越来越无法避免微妙的变化。 是虫子。为了更好地解决这个问题,我们提出了一种新的方法来解决android应用程序中的更好的错误,因为它可以同时生成输入事件和它们的时间表。 这是一个应用程序。我们进行静态-动态混合分析,发现应用程序中潜在的冲突资源。该应用程序然后通过引导事件和时间表自动进行压力测试。 在hellip;hellip;上面.我们实现了原型工具,并对13个流行的现实世界开源应用程序进行了评估。成功地发现了9种潜在的缺陷,其中7种是未知的。

发表于:2016第23届亚太软件工程会议

会议日期:2016年12月6日至9日

添加到IEEEXPLore:2017年4月3日的日期

ISBN信息:

印刷品:-

INSpec加入编号:16777747

10.1109/

出版者:IEEE

会议地点:新西兰汉密尔顿

李先生

盐岩江

二次顾

张旭

马骏

马晓星

健路

介绍:

近年来移动设备和应用程序市场。到2015年底,Google Play Store已有超过19亿个应用程序[1]。

Cor是移动应用程序中的一个关键因素:它应该快速响应传入的事件,并在后台处理耗时的任务[2]。然而,并发程序是并行的。 很难编写、测试和调试。因此,android有一组约束来避免错误(例如,android用户界面更新在主程序中受到限制,而所有的更新都是调度的)。 d在一个背景线程中)。不幸的是,随着移动应用程序越来越复杂,开发人员无法正确理解应用程序的行为,并在程序中留下一些微妙的错误 e释放。

现有的工作[3]-[4][5]通过将数据竞赛的概念扩展到事件驱动的系统来检测应用程序中的错误。但是,它们的bug检测能力非常强。 用于构建事件的输入事件的质量发生在图表之前。此外,非重述事件可能不会导致错误,这些技术通常都具有一致性。 h假阳性率[5]。

在本文中,我们采取了一种不同的方法来处理应用程序中隐藏的错误。我们观察到,在移动应用程序测试中,可以同时生成事件及其时间表t。 没有明显的潜在错误事件-日程组合。要实现这一理念,两个挑战是:(1)如何找出哪些事件可能与错误相关;(2)如何进行转述。 自动生成这样的事件和计划以显示真正的并发错误。

要解决第一个挑战,我们部署静态动态混合分析,以查找每个并发任务(监听程序、线程或异步任务)的共享资源访问站点(即接入点、AP)。跟踪 在非交换竞争的定义[3]中,如果两个并发任务都访问特定AP且至少一个是写入操作,则两个并发任务是冲突的。冲突的任务可能相关 在并发错误中,应该由引导事件生成来调度。

为了解决第二个挑战,我们提出了一种面向调度的深度优先搜索(SO-DFS)算法,该算法集成了事件生成和调度生成。因此DFS基于传统的传统 AlStateSpaceExploration算法[6],该算法遍历不同的应用程序状态之间的每个过渡(由GUI布局取消)恰好一次,且不并发感知。我们以系统的方式扩展它 将与当前APP状态相关的冲突任务的所有k组合计划(我们在实现中设置k=2以供实际考虑)。

我们实现了我们的方法,作为一个原型工具,名为ACCER。我们使用流行的开源应用程序评估了该工具的有效性和效率。我们发现了九个错误(导致崩溃或 功能缺陷),其中7个先前未知,3个已经得到开发人员的确认。详细的评价结果表明,与再加工相比,再生产取得了更好的效果。 是具有合理开销的技术(辅助测试)和随机测试(随机测试)。

我们的贡献概述如下:

我们提出了一种基于分析、引导、系统事件和调度生成的解决Android应用中系统错误的有效方法。

我们实现了原型工具,并在现实世界的开源应用上对其进行了评估。我们发现了以前未知的bug,定量分析表明我们的方法是有效和高效的。

其余的文件按如下方式组织。第二节给出了一个激励实例。第三节、第四章和第五章描述了我们的并发错误表现方法。第六节和第七章评价我们的批准 并讨论了其实验结果。

简化的代码。特定的事件日程允许删除两次下载项,从而导致应用程序崩溃。

第八节讨论了相关工作,最后第九节对本文进行了总结。

第二节

背景和动机

Android模型提供了约束和机制,以帮助程序员在满足需求的同时,避免由于转述而产生的错误。首先,所有UI和 为了避免共享资源上的数据争用,在主节点中对事件进行处理。第二,用户界面更新只允许在主更新,以消除UI更新竞赛。第三,时间 ING任务(例如,网络)被异步任务(Android文档[7]推荐的)延迟,这些任务在完成时触发事件。

然而,随着应用程序变得越来越复杂,它们开始创建具有非一致性结果的复杂事件[3]、[4]以及混合本地线程(例如T)。 在执行过程中使对象和对象相关联。这种复杂的情况也会带来一些微妙的错误,这些缺陷很难在有限的测试预算中被检测到。

图1显示了一个更高级的bug的例子,一个轻量级的多目标文件[8]。当下载项目的菜单是新的(第1-3行)时,它会创建一个新的 (第4行)并将其删除(命名为del)设置为可见(第7-8行)。当del被替换时,侦听器(第10-19行)被执行,下载项由管理器删除(第14行)。密码 片段乍一看似乎很管用。但是,如果您快速单击菜单,则可以有两个相同的PopupMenu(第4行),屏幕上有两个MenuItem。单击“两个”(Dels)“导线”(DLS)可 调用(第13行minus;16)并使应用程序崩溃。

此示例演示了一个微妙的冲突bug,它需要一个特定的事件序列和一个特定的事件调度来触发: 开发人员的麦克风(一旦0 nck事件完成,就不能再次单击菜单)。在中间的意外单击事件(通过快速执行额外的单击)破坏了这样的单击。 离子并引起故障。

不幸的是,现有的预测跟踪分析技术[3]-[4][5]很难检测到这一缺陷。这些技术的有效性在很大程度上依赖于产生t的输入事件。 他有行刑痕迹。除非跟踪包含演示的输入序列和中断,否则它们无法检测到此错误。另一方面,随机测试(例如,随机测试) Y有机会检测到这个错误,但是它生成适当的事件序列的概率很低,并且没有错误表现的保证。

这是我们设计的,用于检测Android应用程序中的潜在错误。我们观察到,在android中触发一个新的错误需要一个指定的输入事件序列和一个 特别时间表。虽然现有的工作集中在事件生成[9]或计划生成[10]上,但不足以暴露许多隐藏的错误。我们利用 在运行时生成事件和计划,以自动显示冲突事件的组合,从而尽早暴露相关错误。

第三节

一套方法

在应用程序中显示并发错误的两个关键因素是(1)生成可能与并发错误相关的事件;(2)枚举此类事件的可能时间表。赞同 并发错误是由冲突的共享资源(例如,数据竞争和共享内存、数据库、文件系统等的/顺序冲突)的问题引起的[11]。对位 为了测试传统的程序,我们可以在一个移动应用程序中同时生成事件和它们的时间表,产生一种两阶段的方法,其工作方式如下:

预处理阶段,通过混合静态-动态分析找到每个事件处理程序的相关资源;

主动生成潜在并发错误相关事件的表现阶段以及其用于进一步检查的计划。

我们首先通过引入一些定义来扩展对该方法的讨论。任务是应用程序中的单元,可以由运行时系统进行调度。任务由GUI事件创建 可以是听者,也可以是本地人,也可以是无中生有的人。在主任务中没有执行的任何任务都称为后台任务。在android模型中,大多数任务都是执行的。 然而,它们的时序/顺序会影响应用程序的行为,并可能导致错误。

[电影]菲格罗亚街. 2:

两种方法的比较

查看全部

任务可以访问共享资源。我们定义了一个接入点(AP表示)为一个程序点,用于重新分配这样的资源。特别是,我们关注共享内存、数据库和文件。 系统。注意,AP要么是只读的,要么是写的。如果两个对象访问相同的资源,则它们之间会发生冲突,并且至少一个是写访问。包含冲突的任务是缺点。 冲突性和直观性。这类任务的特定时间表是造成大多数错误[3]-[4][5]的根本原因。

冲突任务是通过混合静态-动态分析得到的.静态分析通过调用图分析找出每个任务的相关关系;动态分析是基于深度FI的。 探索应用程序的GUI模型。这两种分析方法互相补充,以获得一组可能相互冲突的任务。混合分析还得到每个GUI事件的相关任务

我们使用这些冲突的信息来指导事件的生成。特别是,我们在运行时生成GUI事件,这样所有冲突任务的k组合都会在测试中得到体现。颗粒 对于每个任务与其他任务冲突的任何k个任务,都会在测试中枚举所有这些任务(k=1等效于现有的匿名事件生成技术[ 6],我们使用k=2作为实际考虑,因为任何数量的任务都会导致指数复杂性)。

我们的方法的基本思想如图2所示。该活动由三个按钮组成,分别是A、B和C,而按下Ac和C则会产生冲突的任务tA和tC。 再联系。图2a:只探索了一些特定的事件生成技术,即计划未知的事件生成技术。在我们的方法(图)中,我们尝试更多的时间表。 t_A和t_C的s表示潜在的错误。特别是,如果tA和tC中至少有一个是后台任务,我们尝试使它们并行运行,并按随机顺序调度。如果 t A和t C是原子任务,我们试图同时表示t A→t C和t C→tA。

第四节

合接入点分析

错误与冲突任务的时间表有关。回想一下,如果两个人访问相同的资源,其中至少有一个是写操作,那么两个是冲突的。因此,我们 目标是获取每个事件的相关任务和每个任务的相关资源。我们使用静态分析和动态分析作为混合分析来查找GUI事件的相关任务和 在这些任务中潜在的冲突。

静态分析获得静态数据和控制流信息,不需要运行目标应用程序,因此它不依赖于输入事件。我们首先为所有具有特定入口po的任务建立调用图。 开始任务。注意,一个任务的调用图可能与另一个任务的调用图有关,因为后者已经启动了前者。对于调用图中的每一种方法,我们都会找到所有出现的和毛皮的。 分析出相互矛盾的问题。

然而,由于隐式控制流难以精确确定,调用图可能是不完整的。例如,有些方法的接收方只能在调用时确定- 时间是因为多态。

因此,我们通过动态剖面阶段来补充静态分析,以获得更完整的AP信息。特别是,我们使用现有的事件生成技术(不是des)运行这个应用程序。 通过修改的Android(ART)虚拟机来检测和收集执行跟踪[12]。我们记录与实际资源相关的方法和字段事件。 用于任务,并从任务中产生冲突的信息。

第五节

带有引导事件生成的自动测试

我们使用引导事件生成自动运行测试中的应用程序,这是我们方法的第二步。我们的自动化测试是基于状态模型的,其中运行的应用程序的状态是更高级的。 ED作为其布局,即不同的状态对应不同的状态。

算法1给出了面向调度的算法.该算法由两部分组成:深度优先搜索状态空间探测(事件生成)和压力测试。 其他任务(计划生成)。

事件生成部分类似于标准的扩展算法[13]。当调用状态s和事件序列pi;(第2行)时,我们首先添加s到S,存储已探测的状态(第4行)和PAR。 输出变量E(第5行)中所有启用的s事件。然后,我们将探讨所有相关事件,以达到更多的app状态(第12-19行),如果结果状态slsquo;,则调用so-sub。 d(第15-17行)。最后,如果需要,我们恢复状态s(第18-19行)。状态恢复是通过恢复来实现的。它首先尝试按后退键(第29行)。如果此操作成功休息 矿石状态,我们继续我们的测试程序。否则,它重新调整应用程序和事件序列pi;以恢复s(第31-34行)。我们不能保证绝对状态恢复,因为 在执行以前执行的事件序列时,可以修改APP的E变量和数据库,如何自动有效地恢复这些变量和数据库是一个很大的挑战。

调度生成部分在相同的APP状态下同时生成并发任务及其调度。在每个app状态下,我们首先获得所有可以启动的s的事件对。 TING任务(第7-9行)。对于每一对相互冲突的事件,我们通过(第10-11行)调度它们。

算法1:

面向调度的调度算法

我们的目标是在不同的任务中调度冲突的任务,以显示由于种族条件而相互冲突的任务之间的错误。当线程即将进行修改时,我们将生成当前线程。 一个冲突的AP(其他任务因此被调度)。我们还采用两个启发式规则来显示更多此类任务的时间表。请注意,我们没有将任务之间的因果依赖关系转换为c。 ,这意味着在执行第一个任务后,可能会出现第二个任务不再启用的情况。

[电影]菲格罗亚街. 3:

两种不同的任务

查看全部

第一种方法是针对主要运行的冲突任务。在执行相关冲突事件时,我们用不同的命令发送它们,以尝试对这些任务进行更多的调度。代表e 事件有两种类型,即lang;e 1,(L1,T1)rang;和lang;e 2,(L2,T2)rang;,这意味着事件触发了侦听器,侦听器启动了b。 线。如果(L1,T1)和(L2,T2)之间有一些冲突,我们希望它们之间尽可能多地表现出来。因为L1和L 2主要执行中,它们不能任意相互交叉,实际上只有两种不同的调度方式。如果E1的发送时间早于E2,则L1肯定会执行 Er大于L2,反之亦然。因此,我们可以先发送事件E1触发L1,但在下一次尝试中首先为L2发送事件E2。这解释了为什么冲突事件对th敏感。 e事件顺序。

提出了任务组合的第二种方法。我们

全文共10724字,剩余内容已隐藏,支付完成后下载完整资料


资料编号:[500]

原文和译文剩余内容已隐藏,您需要先支付 30元 才能查看原文和译文全部内容!立即支付

以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。