校园自行车租赁,买卖系统外文翻译资料

 2022-12-08 15:49:19

英语原文共 11 页,剩余内容已隐藏,支付完成后下载完整资料


摘要 - Android软件为静态程序分析提出了许多挑战。 在这项工作中,我们专注于静态控制流分析的基本问题。 传统分析不能直接应用于Android,因为应用程序是基于框架和事件驱动的。 我们将用户事件驱动组件以及来自Android框架的相关回调序列视为应用程序代码,用于生命周期回调和事件处理程序回调。

我们提出一个程序表示,捕获这样的回调序列。 该表示是使用回调方法的上下文敏感静态分析构建的。 分析通过遍历上下文兼容的过程间控制流路径和识别可能触发回调的语句以及避免此类语句的路径来执行图形可达性。 我们还开发了构建应用程序GUI静态模型的客户端分析。 实验评估表明,这种上下文敏感的方法导致了显着的精度改进,同时具有实际的成本。

一,引言
近年来,计算设备数量的增长主要由智能手机和平板电脑驱动。 对于这样的设备,Android是主导的平台。 最近的一份报告估计,2015年将有超过13亿部Android设备出货,而这一数字将大于所有出货的Windows / iOS / MacOS PC,笔记本电脑,桌子和手机的总数。

Android软件的广泛使用为软件工程研究人员带来了许多挑战。 一个这样的挑战是为软件理解,检查和转换奠定坚实的基础。 静态程序分析是这一基础的重要组成部分。 在这项工作中,我们专注于基本的静态分析:控制流分析。 数据流分析基于一些控制流程
代表性,我们的工作也对数据流分析的设计有直接的影响。

传统的控制流分析不能直接应用于Android应用程序,因为它们是基于框架和事件驱动的。应用程序代码和Android平台通过回调进行交互:从平台的事件处理代码到应用程序代码中定义的相关回调方法的调用。各种回调由Android框架模型定义,用于组件创建/终止,用户操作,设备状态更改等事件。
我们将分析集中在这个控制流程的一个关键方面:用户事件驱动的应用程序组件的生命周期和交互。我们工作的第一步是根据过程控制流分析的传统概念[2],[3]制定控制流分析问题,为推理运行时语义及其静态分析提供了基础近似。实质上,控制流分析问题可以减少到可能的回调序列的建模。

接下来,我们提出一种捕获这种回调序列的程序表示。 称为回调控制流程图(CCFG)的这种表示法与该图中有效路径的概念一起是控制流分析的输出。 然后,我们提出了一种CCFG构建算法。 该算法考虑用户驱动的组件,如活动,对话框和菜单,并分析相应的生命周期和事件处理回调方法。 每个回调方法的分析(以及由它传递的代码)决定了下一个可能触发的其他回调。 该信息为CCFG建设提供依据。

我们的算法设计的关键技术见解是,必须分别对与其相关联的不同调用上下文分别进行回调方法的分析。 例如,事件处理程序方法可以处理几个不同小部件的用户事件,并且可能对每个单独的小部件具有不同的行为。 我们的上下文敏感分析采用一种图形可达性的形式,遍历上下文相容的控制流路径,并识别其执行可能触发后续回调的语句,以及避免此类语句的路径。 通过实例和实验研究,我们展示了这种形式的上下文敏感性的重要性。

所提出的分析可以是各种其他静态分析的组成部分(例如,用于软件检查[4] - [17])。 我们考虑一个这样的客户端:自动生成静态GUI模型,这对于程序理解和测试生成很重要。 CCFG可以容易地转换成在先前工作中使用的某种GUI模型(例如,[18] - [21]),并且可以从模型中的有效路径导出用户GUI事件的可能序列。

使用20个应用程序,我们进行了一个实验评估,其结果可以归纳如下。 首先,分析成本适用于软件工具的实际应用。 第二,使用上下文敏感分析可以大大提高精度。 第三,在六个案例研究中,我们将生成的GUI模型与“完全精确”手动构建的解决方案以及动态分析工具的解决方案进行了比较[22]。 这种比较表明高分析精度,其中三个案例研究表现出完美的精度,其余的为未来工作提供了潜在的精度改进的见解。

贡献。 这项工作的贡献是
制定生命周期和事件处理回调的控制流分析问题
CCFG的定义,编码该问题的解决方案的程序表示
通过回调方法的上下文敏感控制流分析来构建CCFG的算法
基于CCFG构建和遍历静态GUI模型的技术
评估20个应用程序,以及使用其中六个应用程序的详细案例研究

CCFG定义和分析算法是新颖的贡献:据我们所知,这是第一次对Android回调行为进行上下文敏感分析,并对所得到的控制流信息进行编码。 这也是为Android完成静态生成GUI模型的第一个工作。 分析实施是公开提供的,作为GATOR分析工具包的一部分[23]。

II。 ANDROID控制流分析
我们的工作针对一个根本问题:静态控制流分析。 由于数据流分析必须对程序的控制流进行建模(除了数据流域之外),控制流分析也是数据流分析的关键组成部分。

背景
这种分析的标准程序表示是过程间控制流程图(ICFG)。 该图组合了程序过程的控制流程图(CFG)。 节点对应于语句,并且过程内边缘显示过程中的控制流。 程序p的CFG具有专用的起始节点sp和专用的出口节点ep。 每个呼叫由两个节点表示:呼叫站点节点ci和返回站点节点ri。 从呼叫站点节点到被叫过程p的起始节点有一个过程间边缘ci!sp; 还有相应的边缘ep!ri。 从主程序的入口开始的ICFG路径如果其过程前边缘匹配(即每个ri与对应的ci)匹配,则是有效的[2],[3]。

控制流分析的目的是确定所有有效路径的集合。 在实际分析中,通常采用这种路径的一些抽象。 然而,实质上,控制流分析需要查找和抽象所有有效的路径。

对于基于框架的平台,如Android,没有主要的过程控制流程路径从哪里开始。 应用程序和平台之间的交互是通过回调:控制流的高级视图是从(未知)平台代码到特定应用程序的一个调用序列。 这是Android控制流分析的关键挑战,也是我们工作的重点。 因此,我们考虑抽象的ICFG路径,其中仅表示来自/来自回调方法的过程外边缘,并且所有其他边被抽象出来。 在这种情况下,路径由边缘ci! sm和em! 其中ci是调用应用程序定义的回调方法m的平台代码中的调用站点节点,ri是对应于ci的返回站点节点。

Android框架为各种交互定义了数千个回调。 我们专注于此控制流程的一个重要方面:用户事件驱动组件的生命周期和交互。 感兴趣的组件是活动,对话框和菜单。 每个这样的组件由单独的GUI窗口表示。 我们考虑两类回调。

生命周期回调管理应用程序组件的生命周期。 最重要的例子是管理活动的回调。 生命周期方法如onCreate和onDestroy是非常有意义的,因为活动生命周期的管理对于开发人员来说是至关重要的(例如,避免泄漏[11],[12],[20])。 活动,对话框和菜单的生命周期回调定义了对可见状态以及可能的运行时事件和行为的重大更改。 GUI事件处理程序回调响应用户操作(例如,单击按钮)并且定义控制流的另一关键方面。 这些事件处理程序执行各种动作,包括应用程序逻辑中的转换(例如,终止活动并返回到前一个操作)。 这种处理程序的控制流分析对于事件驱动平台至关重要。

对于这两类回调,回调方法mi的执行在任何其他回调方法mj被调用之前完成。 (如稍后讨论的,mi可能导致后续执行mj)。因此,抽象的控制流路径总是以ci!smi的形式; emi!ri cj! smj emj! j ck! smk 呃!RK; ::,并将被简单地表示为mi mj mk:::其中mi是ci调用的回调方法。 因此,在这项工作中,我们对控制流分析的版本感兴趣,该版本产生组件生命周期和事件处理的方法回调的所有有效序列。 我们的目标是建模一个单一的应用程序; 应用间控制流程超出了这项工作的范围。

B. Android应用程序的示例
图1显示了从Open-Manager [24]得到的简化示例,Open-Manager是Android的开源文件管理器。 Class Main定义一个活动:负责显示GUI窗口并与用户交互的应用程序组件。 方法onCreate是生命周期回调方法的示例:当活动被实例化时,它由Android平台调用。 新窗口的结构由文件main.xml定义,如图所示。 在这个简化的例子中,布局包含四个GUI小部件,每个都是一个带有可以点击的图像的按钮。 在第4行对setContentView的调用会实例化这些小部件(与它们的LinearLayout容器一起),并将它们与Main活动相关联。 第9-12行的循环遍历编程按钮ID,并将按钮与侦听器对象相关联:在第5行创建的EventHandler。

监听器类定义了一个事件处理方法onClick,当用户点击一个按钮时,它Android平台调用。 点击的按钮作为onClick的参数v提供。 事件处理程序可以启动一个新的活动:DirectoryInfo的实例(当v是信息按钮,第25行)或HelpManager(当v是帮助按钮时,行30)。 在这两种情况下,Intent触发激活; 这是启动新活动的标准Android机制。 对startActivity的调用在框架的事件队列上发布一个事件。 在onClick完成后,处理此事件,对新活动执行对onCreate的回调,并显示新窗口。

当v是管理按钮时,将在第35行创建并显示一个新的对话窗口。此窗口是AlertDialog的一个实例,用于显示几个可选项目(例如,管理正在运行的进程或将应用程序备份到 SD卡)。 通过帮助对象构建器执行对话框的创建。 最后,当v是多选按钮时,显示的窗口保持与活动Main相关联的窗口,但其视觉表示更改(第38行); 此更改的细节将被省略。

此应用程序的控制流分析需要捕获onCreate和onClick之间的排序关系:事件处理程序方法可能在onCreate完成其执行后立即被调用。 类似地,控制流分析需要捕获onClick和DirectoryInfo.onCreate,HelpManager.onCreate和AlertDialog.onCreate之间的排序关系关系。 另外,由于可能采用switch语句的默认分支,onClick之后的下一个回调可能是onClick的另一个调用。

请注意,由onClick触发的控件流是上下文敏感的:根据窗口小部件(参数v),可能会观察到不同的回调序列。 从面向对象程序的控制流/参考分析的前期工作(例如[25] - [27]),众所周知,上下文敏感性具有显着的精确效果。 引入上下文敏感性的一个有效方法是对方法调用的参数进行建模(包括此)[25]。 基于这一观察,我们提出了一种新的回调方法的上下文敏感控制流分析。 对于这个例子,上下文不敏感的分析将得出结论,执行onClick可以跟随执行其他四个回调中的任何一个。 但是,上下文敏感的分析将报告,例如,只有当v是帮助按钮时,onClick将跟随HelpManager.onCreate。

问题定义
考虑两套应用方法:为活动,对话框和菜单设置L个生命周期方法,以及设置H的GUI事件处理程序方法。 回调这些方法的顺序是我们分析的目标。 在这项工作中,我们专注于
某些生命周期方法l 2 L:具体来说,创建回调(例如Activity.onCreate)和终止回调(例如Activity.onDestroy)。

533/5000

在未来,我们计划根据标准排序约束扩展其他生命周期回调的分析[11]。 此外,与其他类型的组件相关的回调(例如服务,广播接收器和非UI工作线程)对于静态分析社区(例如,用于安全检查和泄漏检测)以及对其的上下文敏感分析是非常重要的 回调是未来工作的重要目标。 这种概括将需要对我们目前的分析进行重大概念扩展。

我们假设相关静态抽象已经由GUI相关对象的现有分析定义[28],[29]。 我们将把这个分析称为GATOR,使用其公共实现的名称[23]。 分析通过分析XML布局和相关代码(例如,图1中对findViewById和setOnClickListener的调用)跟踪小部件和相关实体(例如,活动,对话,听众,布局/小部件ID)的传播。 其输出包含一对(W; V)。 每个窗口w 2 W(活动,对话框或菜单)与一组视图v 2 V相关联。视图是GUI窗口小部件的Android表示,并且是android.view.View的子类的实例。 小部件v 2 V可以与事件处理程序h 2 H相关联。

控制流分析输出可以由回调控制流程图(CCFG)表示。 有三类图形节点。 节点(h; v)2 H V表示由于widget v上的GUI事件而执行事件处理程序h。节点(l; w)2 L?W表示在窗口w上执行生命周期方法l。 此外,帮助节点用于表示分支和连接点,如稍后所述。 CCFG中的起始节点对应于应用程序的主要活动的onCreate回调。 从该节点开始的每个路径在执行应用程序期间定义了可能的回调序列。 边缘n1! n2表示由n1表示的回调可能触发由n2表示的回调的后续执行。

运行示例的CCFG如图2所示。为了说明,我们展示了一个场景,其中(1)主要活动也有一个onDestroy生命周期方法,(2)HelpManager和AlertDialog的细节没有详细阐述, (3)DirectoryInfo有两个事件处理程序以及一个onDestroy方法,(4)onCheckedChanged处理程序可能强制终止
的DirectoryInfo并返回控制回Main。
为了指示可以以任何顺序执行事件处理程序,引入了分支节点bi和连接节点ji以及边缘ji!双。这种技术类似于我们早期关于数据流分析近似的工作[30]。最近的工作[9]也采用了类似的方法,如下文所述。 onDestroy方法都是相应分支节点(而不是连接节点)的后继,以显示用户可以单击设备的BACK按钮立即退出活动,而不触发任何事件处理程序。注意onDestroy inDirectoryInfo也是onChecke

剩余内容已隐藏,支付完成后下载完整资料


资料编号:[27879],资料为PDF文档或Word文档,PDF文档可免费转换为Word

您需要先支付 30元 才能查看全部内容!立即支付

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