18、提升安卓应用响应能力及多故障程序搜索研究

提升安卓应用响应能力及多故障程序搜索研究

在当今的软件开发领域,安卓应用的响应能力以及软件中多故障的处理是两个重要的研究方向。下面我们将详细探讨如何提升安卓应用的响应能力,以及如何在 Defects4J 中搜索多故障程序。

提升安卓应用响应能力

在提升安卓应用响应能力的研究中,我们采用了遗传改进方法,并对不同测试覆盖程度的 UI 类和其他类进行了实验。

实验结果分析
  • 测试类改进情况
    | 项目 | 发现的改进数量 | 95% 百分位渲染时间的最大降幅(%) |
    | — | — | — |
    | AntennaPod | 0 | 0.0 |
    | Gnu Cache | 1 | 11.11 |
    | MicroPinner | 1 | 5.56 |
    | Wikimedia commons | 8 | 50.00 |

    项目 发现的改进数量 95% 百分位渲染时间的最大降幅(%)
    AntennaPod 0 0.00
    Gnu Cache 0 0.00
    MicroPinner 1 5.26
    Wikimedia commons 0 0.00

    从这些表格可以看出,在 160 次遗传改进(GI)运行中,只有 11 次发现了具有统计学意义的改进,其中 8 次集中在一个应用中。大部分情况下未发现改进,GI 执行返回空补丁。在第一次实验的 7 个案例中,搜索时发现的补丁在验证后被证明没有统计学意义上的改进。
    - 改进对其他指标的影响 :对帧速率有显著改进的补丁,其执行时间和内存使用情况的测量结果显示,改进对内存消耗和执行时间影响很小。这可能是因为测量存在噪声,对我们发现的改进类型不敏感。
    - 未发现显著改进的原因 :应用可能本身响应性较好,难以发现显著改进。不过,UI 测试的视觉观察显示有明显但不显著的改进,这表明我们的帧速率测量对 UI 变化更敏感,虽影响较小但真实存在。如果刻意设计测试来暴露应用的无响应区域,可能更有机会发现改进。

改进类型分析

为了了解能提高应用帧速率的改进类型,我们对补丁进行了手动调查。以 Wikimedia Commons 应用的一个补丁为例,该补丁使帧渲染时间提高了 50%,包含 3 处编辑。其中 2 处编辑移除屏幕文本使补丁无效,而移除下拉菜单动画重力设置的那处编辑单独运行时仍能使帧渲染时间提高 43%,这是最重要的改变。部署修改后的应用后,下拉菜单的打开和关闭更加流畅,动画无明显视觉损伤,且对测试套件的执行时间和内存消耗影响不大,从用户角度解决了动画卡顿问题。

然而,大部分开源应用测试不足或覆盖率低,改进无效的情况往往是因为被改进的类覆盖率不足,测试不够健壮。例如,一些补丁移除了本应显示的文本或阻止了对话框显示,部分被移除的代码虽有覆盖但缺乏断言检查。因此,需要更强的回归测试来避免产生无效补丁,这种问题在覆盖率较低的 UI 类中更为明显。

改进成本分析

为评估改进成本,我们对每次 GI 运行的执行时间进行了计时。运行时间在 2 到 16 小时之间,所有实验总共花费了 883 小时的计算时间。执行时间在不同项目和特定项目的运行中差异很大,这是由于测试套件长度不同以及可构建和测试的补丁数量不同。针对由小型快速测试套件覆盖的类进行改进,有助于降低 GI 成本。

在模拟器上运行测试成本很高,是导致运行时间长的主要原因。以 Wikimedia Commons 的 About Activity 类为例,运行单元测试过滤器 10 次的中位数时间为 5 秒,而编译、安装和运行一次 UI 测试 10 次的中位数时间为 2 分 12 秒。未来在安卓上运行 GI 时,针对仅能通过本地测试测量的属性进行改进,可避免使用模拟器或真实设备,从而显著提高速度。

有效性威胁及应对措施
  • 测量噪声 :尽管适应性测量测试时噪声较小,但小偏差仍可能导致改进的误判。为减轻这一威胁,我们对所有改进进行重复测量和统计测试,以验证改进的真实性。
  • 随机搜索 :随机搜索可能使我们“幸运”地找到改进,但后续运行可能无法重现。为展示方法的通用性,我们对每个实验设置进行 20 次运行(共 160 次运行)。
  • 过拟合 :由于补丁在单个模拟器上生成,可能无法在其他真实硬件上适用。我们在真实设备上验证所有发现的改进,并使用更大的测试集验证补丁,检查是否有测试失败以及改进对其他测试用例的影响。
相关工作

近期的调查揭示了几种提升安卓应用响应能力的方法:
- 卸载技术 :将昂贵的计算任务放在外部服务器上执行,可节省设备的计算资源和能源消耗。但动态决定卸载内容是主要挑战,且需要开发者创建外部基础设施,成本较高。
- 预取技术 :在需要之前异步获取在线资源,使用户无需等待请求执行。但该技术只能改善有限的操作,不适用于许多应用。
- 本地转换 :如修复安卓代码异味对帧速率的影响、将代码自动重构为异步任务、优化本地数据库写入等。但现有相关工作未考虑使用更多的重构方法和基于搜索的方法来探索改进空间。

在 Defects4J 中搜索多故障程序

Defects4J 是软件工程领域中流行的真实世界 Java 故障数据集,它清晰分离和提炼了每个测试失败的根本原因,便于研究人员单独研究单个故障。然而,在实际调试场景中,多个故障可能共存并共同影响测试结果。

研究背景

根据系统文献综述,多数多故障定位研究使用 C 语言故障进行评估,考虑 Java 程序的研究较少,且仅有少数使用 Defects4J 并手动创建多个故障。因此,构建可靠的真实多故障 Java 程序数据集对自动化多故障调试技术的研究具有重要意义。

提出的方法

我们通过迭代移植 Defects4J 版本间的故障揭示测试用例,系统检测每个版本中是否存在多个故障。具体来说,检查 Defects4J 主题版本 P 中的特定故障 N 是否存在于包含另一个故障 M 的旧版本 P’ 中。如果 N 存在于 P’ 中,则认为 P’ 是包含 N 和 M 的多故障程序。整个检查过程通过测试移植完成,不修改 P 和 P’,仅揭示 P’ 中已存在的故障。

动机示例

以 Defects4J 中的 Math - 5 故障为例,开发者补丁将返回值从 NaN 改为 INF,该故障由测试用例 testReciprocalZero 揭示,每个 Defects4J 故障都类似地配有一组揭示单个故障的测试用例。

通过以上研究,我们在提升安卓应用响应能力和搜索多故障程序方面取得了一定的成果,但也面临着一些挑战,如测试不足、改进成本高等。未来,我们将继续探索如何更好地解决这些问题,推动软件开发技术的发展。

提升安卓应用响应能力及多故障程序搜索研究(续)

多故障程序搜索结果

我们对 326 个 Defects4J 主题版本进行了研究,发现超过 95%(311 个版本)实际上包含 2 到 24 个故障。这一结果表明,在实际的软件项目中,多故障的情况是普遍存在的。以下是对这一搜索过程的详细分析:

搜索流程

整个搜索多故障程序的流程可以用以下 mermaid 流程图表示:

graph TD;
    A[选择 Defects4J 主题版本 P 和 P'] --> B[确定版本 P 中的故障 N 和版本 P' 中的故障 M];
    B --> C[移植故障 N 的揭示测试用例到版本 P'];
    C --> D{测试用例在 P' 中是否失败};
    D -- 是 --> E[判定 P' 为包含 N 和 M 的多故障程序];
    D -- 否 --> F[P' 不包含故障 N];

具体操作步骤如下:
1. 版本选择 :从 Defects4J 中挑选不同的版本 P 和 P’,其中 P’ 为较旧版本且已知包含故障 M。
2. 故障确定 :明确版本 P 中特定的故障 N 及其对应的故障揭示测试用例。
3. 测试移植 :将故障 N 的揭示测试用例移植到版本 P’ 中进行运行。
4. 结果判断
- 如果测试用例在 P’ 中失败,说明故障 N 也存在于 P’ 中,P’ 为多故障程序。
- 如果测试用例在 P’ 中通过,说明 P’ 不包含故障 N。

结果意义

这些多故障版本的发现为自动化多故障调试技术的研究提供了丰富的实验数据。研究人员可以利用这些数据来评估和改进现有的调试技术,如故障聚类和多故障定位方法。同时,这也提醒开发者在实际开发过程中要更加关注多故障的情况,避免因为忽视多个潜在故障而导致软件出现难以调试的问题。

综合分析与未来展望
提升安卓应用响应能力与多故障程序搜索的关联

虽然提升安卓应用响应能力和在 Defects4J 中搜索多故障程序看似是两个不同的研究方向,但它们在软件开发的整体流程中是相互关联的。多故障的存在可能会影响应用的响应能力,例如某些故障可能导致代码执行效率低下,从而使应用出现卡顿等响应问题。而提升应用响应能力的研究中所采用的一些技术和方法,如代码重构、优化等,也可以应用于多故障程序的修复过程中。

未来研究方向
  • 扩展遗传改进操作符 :在提升安卓应用响应能力的研究中,计划扩展传统的操作符,加入专门针对响应能力的重构操作。这样可以更有针对性地对应用进行优化,提高搜索到有效改进的概率。
  • 多目标搜索 :考虑到提升响应能力可能会对其他软件属性(如内存消耗)产生负面影响,未来将采用多目标搜索方法,在提高响应能力的同时,尽量减少对其他属性的不利影响。
  • 加速遗传改进过程 :通过仅使用本地测试来寻找改进,避免在模拟器或真实设备上进行复杂的安装和运行过程,从而显著加快遗传改进的速度,提高研究效率。
  • 深入研究多故障调试技术 :利用发现的多故障版本数据,进一步研究和改进自动化多故障调试技术,如开发更有效的故障聚类算法和多故障定位方法,提高调试的准确性和效率。
总结

本文围绕提升安卓应用响应能力和在 Defects4J 中搜索多故障程序展开了详细的研究。在提升安卓应用响应能力方面,通过遗传改进方法进行实验,分析了改进效果、类型、成本等方面,并提出了应对有效性威胁的措施。在多故障程序搜索方面,通过迭代移植测试用例的方法,发现了大量的多故障版本,为多故障调试技术的研究提供了有力支持。未来,我们将继续在这两个方向上深入探索,不断推动软件开发技术的进步,提高软件的质量和性能。

总之,软件开发是一个复杂的过程,需要综合考虑多个方面的因素。通过对安卓应用响应能力和多故障程序的研究,我们可以更好地理解软件中的问题,并采取有效的措施来解决这些问题,为用户提供更加稳定、流畅的软件体验。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值