• 2024年第35卷第7期文章目次
    全 选
    显示方式: |
    • AmazeMap: 一种基于多层次影响图的微服务故障定位方法

      2024, 35(7):0-0. DOI: 10.13328/j.cnki.jos.007104

      摘要 (233) HTML (0) PDF 1.17 M (749) 评论 (0) 收藏

      摘要:微服务软件系统由于其具有大量复杂的服务依赖关系和组件化模块,一个服务发生故障往往造成与之相关的一个或多个服务发生故障,导致故障定位的难度不断提高.因此,如何有效检测系统故障,快速准确定位故障根因问题,是当前微服务领域研究的重点.现有研究一般通过分析故障对服务、指标的作用关系,构建故障关系模型,但存在运维数据利用不充分、故障信息建模不全面、根因定位粒度粗等问题.因此,本文提出了AmazeMap,该方法设计了多层次故障影响图建模方法以及基于多层次故障影响图的微服务故障定位方法.其中,多层次故障影响图建模方法通过挖掘系统运行时指标时序数据与链路数据,考虑不同层次间的相互关系,能够较全面地建模故障信息;基于多层次故障影响图的微服务故障定位方法通过缩小故障影响范围,从服务实例和指标两个方面发现根因,输出最有可能的故障根因节点和指标序列.本文基于开源基准微服务系统和AIOps挑战赛数据集,从有效性和效率两个方面设计了微服务软件故障定位实验,并与现有方法进行对比,实验结果验证了AmazeMap的有效性、准确性和效率.

    • 一种聚类分析驱动种子调度的模糊测试方法

      2024, 35(7):0-0. DOI: 10.13328/j.cnki.jos.007105

      摘要 (247) HTML (0) PDF 1.21 M (637) 评论 (0) 收藏

      摘要:作为当前被广泛应用的自动化软件测试技术,模糊测试的首要目标是尽可能多地探索被测程序的代码区域以达到更高的覆盖率,从而检测出更多的漏洞或者错误.现有的模糊测试方法大多是根据种子的历史突变数据来调度种子,实现起来较简单,但忽略了种子所探索程序空间的分布情况,导致测试工作可能会陷入只对程序的某单一区域进行探测,造成测试资源的浪费.本文提出了一种基于聚类分析驱动种子调度的模糊测试方法Cluzz.首先,Cluzz结合种子执行路径覆盖的分布来分析种子在特征空间上的区别,使用聚类分析对种子在程序空间中的执行分布情况进行划分.然后,根据不同种子簇群的路径覆盖模式与聚类分析结果对种子进行优先级评估,探索稀有代码区域并优先调度评估得分较高的种子.其次,通过种子评估得分为种子分配能量,将突变得到的有趣输入保留并进行归类以更新种子簇群信息.Cluzz根据更新后的种子簇群重新评估种子,以确保测试过程中种子的有效性,从而在有限时间内探索更多的未知代码区域,提高被测程序的覆盖率.最后,将Cluzz实现在3个当前主流的模糊器上,并在8个流行的真实程序上进行大量测试工作.结果表明,Cluzz检测独特崩溃的平均数量是普通模糊器的1.7倍,在发现新边缘数量方面平均优于基准模糊器22.15%.此外,通过与现有种子调度方法进行对比,Cluzz的综合表现要优于其它基准模糊器.

    • 基于多模态表征的移动应用GUI模糊测试框架

      2024, 35(7):0-0. DOI: 10.13328/j.cnki.jos.007106

      摘要 (243) HTML (0) PDF 1.39 M (692) 评论 (0) 收藏

      摘要:GUI模糊测试在提升移动应用可靠性和兼容性方面发挥着关键作用.然而,现有的GUI模糊测试方法大多效率较低,主要原因是这些工作过于粗粒度,仅基于单一模态的特征来整体理解GUI页面,应用状态的过度抽象使得许多细节信息被忽略,导致对GUI状态及小部件的理解不足.为了解决上述问题,本文提出了一种基于多模态表征的移动应用GUI模糊测试框架GUIFuzzer.该框架通过考虑多模态特征,如视觉特征、布局上下特征以及细粒度的元属性特征,来联合推断GUI小部件的语义,然后训练一个多层次奖励驱动的深度强化学习模型来优化GUI事件选择策略,提高模糊测试的效率.我们在大量的真实应用上对所提框架进行评估.实验结果表明,与现有的竞争性基线相比,GUIFuzzer显著地提升了模糊测试的覆盖率.我们还对特定目标的定制化搜索即敏感API触发进行了案例研究,进一步验证了GUIFuzzer框架的实用性.

    • 面向版本演化的APP软件缺陷跟踪分析方法

      2024, 35(7):0-0. DOI: 10.13328/j.cnki.jos.007107

      摘要 (143) HTML (0) PDF 1.67 M (608) 评论 (0) 收藏

      摘要:移动应用(APP)软件的版本更新速度正在加快,对软件缺陷的有效分析可以帮助开发人员理解和及时修复软件缺陷。然而,现有研究的分析对象大多较为单一,存在信息孤立、零散、质量差等问题,并且没有充分考虑数据验证及版本失配问题,分析结果存在较大误差,导致无效的软件演化。为了提供更有效的缺陷分析结果,提出一种面向版本演化的APP软件缺陷跟踪分析方法(ASD-TAOVE),首先从多源、异构的APP软件数据中抽取APP软件缺陷内容并挖掘缺陷事件的因果关系,接着设计了一种APP软件缺陷内容验证方法,基于信息熵结合文本特征和结构特征定量分析缺陷怀疑度用于缺陷内容验证并构建APP软件缺陷内容异构图。此外,为考虑版本演化带来的影响,设计了一个APP软件缺陷跟踪分析方法用于在版本演化中分析缺陷的演化关系,并将其转化为缺陷/演化元路径,最后通过一个基于深度学习的异构信息网络完成APP软件缺陷分析。针对4个研究问题(RQ)的实验结果证实了ASD-TAOVE方法在面向版本演化过程中对缺陷内容验证与跟踪分析的有效性,缺陷识别准确率分别提升约9.9%及5%(平均7.5%)。相较于同类基线方法,ASD-TAOVE方法可分析丰富的APP软件数据,提供有效的缺陷信息。

    • 基于程序约束的细粒度JVM测试程序约简方法

      2024, 35(7):0-0. DOI: 10.13328/j.cnki.jos.007108

      摘要 (167) HTML (0) PDF 1.24 M (612) 评论 (0) 收藏

      摘要:为了对Java虚拟机(JVM)进行测试,开发人员通常需要手工设计或利用测试生成工具生成复杂的测试程序,从而检测JVM中潜在的缺陷。然而,复杂的测试程序给开发人员定位及修复缺陷带来了极高的成本。测试程序约简技术旨在保障测试程序缺陷检测能力的同时,尽可能的删减测试程序中与缺陷检测无关的代码。现有研究工作基于Delta调试在C程序和XML输入上可以取得较好的约简效果,但是在JVM测试场景中,具有复杂语法和语义依赖关系的Java测试程序约减仍存在粒度较粗、约简效果较差的问题,导致约简后的程序理解成本依然很高。因此,针对具有复杂程序依赖关系的Java测试程序,本文提出一种基于程序约束的细粒度测试程序约简方法JavaPruner。首先在语句块级别设计细粒度的代码度量方法,随后在Delta调试技术上引入语句块之间的依赖约束关系来对测试程序进行约简。以Java字节码测试程序为实验对象,通过从现有的针对JVM测试的测试程序生成工具中筛选出具有复杂依赖关系的50个测试程序作为基准数据集,并在这些数据集上验证JavaPruner的有效性。实验结果表明,JavaPruner可以有效删减Java字节码测试程序中的冗余代码。与现有方法相比,在所有基准数据集上约减能力平均可提升37.7%。同时,JavaPruner可以在保障程序有效性及缺陷检测能力的同时将Java字节码测试程序最大约简至其原有大小的1.09% ,有效降低了测试程序的分析和理解成本。

    • 基于多源域适应的缺陷类别预测方法

      2024, 35(7):0-0. DOI: 10.13328/j.cnki.jos.007109

      摘要 (251) HTML (0) PDF 972.49 K (649) 评论 (0) 收藏

      摘要:随着规模和复杂性的迅猛膨胀,软件系统中不可避免地存在缺陷.近年来,基于深度学习的缺陷预测技术成为软件工程领域的研究热点.该类技术可以在不运行代码的情况下发现其中潜藏的缺陷,因而在工业界和学术界受到了广泛的关注.然而,已有方法大多关注方法级的源代码中是否存在缺陷,无法精确识别具体的缺陷类别,从而降低了开发人员进行缺陷定位及修复工作的效率.此外,在实际软件开发实践中,新的项目通常缺乏足够的缺陷数据来训练高精度的深度学习模型,而利用已有项目的历史数据训练好的模型往往在新项目上无法达到良好的泛化性能.因此,本文首先将传统的二分类缺陷预测任务表述为多标签分类问题,即使用CWE(common weakness enumeration)中描述的缺陷类别作为细粒度的模型预测标签.为了提高跨项目场景下的模型性能,本文提出一种融合对抗训练和注意力机制的多源域适应框架.具体而言,该框架通过对抗训练来减少域(即软件项目)差异,并进一步利用域不变特征来获得每个源域和目标域之间的特征相关性.同时,该框架还利用加权最大均值差异作为注意力机制以最小化源域和目标域特征之间的表示距离,从而使模型可以学习到更多的域无关特征.最后在八个真实世界的开源项目上与最先进的基线方法进行大量对比实验验证了所提方法的有效性.

    • 神经程序修复领域数据泄露问题的实证研究

      2024, 35(7):0-0. DOI: 10.13328/j.cnki.jos.007110

      摘要 (201) HTML (0) PDF 1000.73 K (672) 评论 (0) 收藏

      摘要:修复软件缺陷是软件工程领域一个无法回避的重要问题,而程序自动修复技术则旨在自动、准确且高效地修复存在缺陷的程序,以缓解软件缺陷所带来的问题.近年来,随着深度学习的快速发展,程序自动修复领域兴起了一种使用深度神经网络去自动捕捉缺陷程序和其补丁之间关系的方法,被称为神经程序修复.从在基准测试上被正确修复的缺陷的数量上看,神经程序修复工具的修复性能已经显著超过了非学习的程序自动修复工具.然而,近期有研究发现神经程序修复系统性能的提升可能得益于测试数据在训练数据中存在,即数据泄露.受此启发,为进一步探究神经程序修复系统数据泄露的原因及影响,更公平地评估现有的系统,本文(1)对现有神经程序修复系统进行了系统的分类和总结,根据分类结果定义了神经程序修复系统的数据泄露,并为每个类别的系统设计了数据泄露的检测方法;(2)依照上一步骤中的数据泄露检测方法对现有模型展开了大规模检测,并探究了数据泄露对模型真实性能与评估性能间差异的影响以及对模型本身的影响;(3)分析现有神经程序修复系统数据集的收集和过滤策略,加以改进和补充,在现有流行的数据集上基于改进后的策略构建了一个纯净的大规模程序修复训练数据集,并验证了该数据集避免数据泄露的有效性.实验结果发现:本次调研的10个神经程序修复系统在基准测试集上均出现了数据泄露,其中神经程序修复系统RewardRepair的数据泄露问题较为严重,在基准测试集Defects4J(v1.2.0)上的数据泄露达24处,泄露比例高达53.33%.此外,数据泄露对神经程序修复系统的鲁棒性也造成了影响,调研的5个神经程序修复系统均因数据泄露产生了鲁棒性降低的问题.由此可见,数据泄露是一个十分常见的问题,且会使神经程序修复系统得到不公平的性能评估结果,以及影响系统本身的性质.研究人员在训练神经程序修复模型时,应尽可能避免出现数据泄露,且要考虑数据泄露问题对神经程序修复系统性能评估产生的影响,尽可能更公平地评估系统.

    • 融合信息检索和深度模型特征的软件缺陷定位方法

      2024, 35(7):0-0. DOI: 10.13328/j.cnki.jos.007111

      摘要 (279) HTML (0) PDF 1.30 M (731) 评论 (0) 收藏

      摘要:构建自动化的缺陷定位方法能够加快程序员利用缺陷报告定位到复杂软件系统缺陷代码的过程.早期相关研究人员将缺陷定位视为检索任务,通过分析缺陷报告和相关代码构造缺陷特征,并结合信息检索的方法实现缺陷定位.随着深度学习的发展,利用深度模型特征的缺陷定位方法也取得了一定效果.然而,由于深度模型训练的时间成本和耗费资源相对较高,现有基于深度模型的缺陷定位研究方法存在实验搜索空间和真实情况不符的情况.这些研究方法在测试时并没有将项目下的所有代码作为搜索空间,而仅仅搜索了与已有缺陷相关的代码, 例如DNNLOC方法,DeepLocator方法,DreamLoc方法.这种做法和现实中程序员进行缺陷定位的搜索场景是不一致的.致力于模拟缺陷定位的真实场景,本文提出了一种融合信息检索和深度模型特征的TosLoc方法进行缺陷定位.TosLoc方法首先通过信息检索的方式检索真实项目的所有源代码,确保已有特征的充分利用;再利用深度模型挖掘源代码和缺陷报告的语义,获取最终定位结果.通过两阶段的检索,TosLoc方法能够对单个项目的所有代码实现快速缺陷定位.通过在4个常用的真实Java项目上进行实验,本文提出的TosLoc方法能在检索速度和准确性上超越已有基准方法.和最优基准方法DreamLoc相比,TosLoc方法在消耗DreamLoc方法35%的检索时间下,平均MRR值比DreamLoc方法提高了2.5%,平均MAP值提高了6.0%.

    • 代码审查自动化研究综述

      2024, 35(7):0-0. DOI: 10.13328/j.cnki.jos.007112

      摘要 (596) HTML (0) PDF 1.28 M (1110) 评论 (0) 收藏

      摘要:随着现代软件规模的不断扩大,协作开发成为软件开发的主流趋势,代码审查成为了现代化软件开发的重要工作流程.但由于人工代码评审往往耗费审查者较大精力,且存在审查者不匹配或审查者水平有限等问题,人工代码评审的质量和效率难以保证,且审查后的代码修复也十分费时费力.因此亟需研究人员为代码审查流程进行改进,提供自动化思路.本文对代码审查自动化相关研究进行系统梳理和总结,并重点介绍4种主要方向:审查者推荐、代码变更质量评估、审查意见生成和代码自动修复.并整理了相关方向的148篇研究,对每个方向的研究进行技术分类与分析.随后,本文整理了各方向研究任务的评估方法,并整理出常用的数据集与开源工具.最后,对代码审查自动化领域面临的问题进行梳理,并对未来研究进行展望.

    • 基于规则与学习的变异技术对比研究

      2024, 35(7):0-0. DOI: 10.13328/j.cnki.jos.007113

      摘要 (174) HTML (0) PDF 1.55 M (583) 评论 (0) 收藏

      摘要:变异测试是一种有效的软件测试技术,通过生成变异体来模拟软件缺陷,帮助提升现有测试套件的缺陷检测能力.变异体的质量对于变异测试的有效性具有显著影响.传统的变异测试方法通常采用人工设计的基于语法规则的变异算子生成变异体,并已取得一定的研究成果.近年来,许多研究开始结合深度学习技术,通过学习开源项目历史代码生成变异体.目前该新方法在变异体生成方面取得了初步的成果.基于语法规则和基于学习的两种变异技术,其机理不同,但其目标均是通过生成变异体来提高测试套件的缺陷检测能力,因此全面比较这两种变异技术对于变异测试及其下游任务(如缺陷定位和修复)至关重要.针对这一问题,本文设计实现一项针对基于语法规则和基于学习的变异技术的实证研究,旨在了解不同机理的变异技术在变异测试任务上的性能,以及生成的变异体在程序语义上的差异性.具体地,本文以Defect4J v1.2.0数据集为实验对象,比较MAJOR和PIT为代表的基于语法规则的变异技术和以DeepMutation、μBERT和LEAM为代表的基于深度学习的变异技术.实验结果表明,基于规则与学习的变异技术均可有效支持变异测试实践,但MAJOR的测试效果最优,能够检测85.4%的真实缺陷.在语义表示上,MAJOR具有最强的语义代表能力,基于其构造的测试套件能够杀死其余变异技术生成的超过95%占比的变异体.在缺陷表征上,两类技术均具有独特性.例如,基于规则的技术具有更稳定的代码元素变异能力,而基于学习的技术具有更强的上下文理解能力.

当期目录


文章目录

过刊浏览

年份

刊期

联系方式
  • 《软件学报 》
  • 主办单位:中国科学院软件研究所
                     中国计算机学会
  • 邮编:100190
  • 电话:010-62562563
  • 电子邮箱:jos@iscas.ac.cn
  • 网址:https://www.jos.org.cn
  • 刊号:ISSN 1000-9825
  •           CN 11-2560/TP
  • 国内定价:70元
您是第位访问者
版权所有:中国科学院软件研究所 京ICP备05046678号-3
地址:北京市海淀区中关村南四街4号,邮政编码:100190
电话:010-62562563 传真:010-62562533 Email:jos@iscas.ac.cn
技术支持:北京勤云科技发展有限公司

京公网安备 11040202500063号