2021, 32(7):1923-1925. DOI: 10.13328/j.cnki.jos.006273 CSTR:
摘要:随着互联网、物联网、云计算等新计算平台、新应用模式、及智能化等新软件模式的广泛运用,软件系统内外各种来源的非确定性不断增强.从软件系统内部的不确定性看,并发程序是一类典型的非确定性软件系统.并发程序由于其随机性高的特点,容易导致并发缺陷且难以调试.从软件系统外部的不确定性看,软件所处的网络环境和所服务的用户需求变得更加动态多变,这就要求软件系统能够主动应对这些动态变化.具有自适应和持续演化能力的软件系统需要在环境和需求的自动感知与理解、适应行为的自主决策、以及适应行为的精准实施等环节处理各种不确定性,以保障系统能够持续稳定地提供服务.从软件构造途径的不确定性看,包含深度神经网络部件的数据驱动智能化软件系统是另一类非确定性软件系统,其非确定性来自于机器学习模型的归纳本质.此类系统日益应用于一些安全相关的领域,这就对其软件质量提出了更高的要求.本专题关注软件质量保障中非确定性问题所面临的挑战以及相关软件质量保障技术. 本专题采取自由投稿的方式,共收到24篇投稿.特约编辑邀请了近20位领域专家参与审稿,每篇稿件至少邀请2位专家进行评审,每篇稿件均经过至少两轮审稿.共计16篇稿件通过评审,并在中国软件大会上进行了报告,最终该16篇论文入选本专题.
2021, 32(7):1926-1956. DOI: 10.13328/j.cnki.jos.006267 CSTR:
摘要:复杂软件系统(如信息物理系统CPS、物联网IoT以及自适应软件系统等)在其开发和运行过程中会遇到各种类型的不确定性问题.针对这些不确定性问题,研究人员开展了大量的研究工作,提出了一系列的方法,取得了诸多成果.然而,由于此类系统本身固有的复杂性和其内在与外在不确定性的共同作用,截止目前研究人员针对该研究领域仍然缺乏系统性和整体性的理解和分析.为了深入探究该领域的研究现状,采用系统研究的方法(systematic mapping study)识别出142篇相关文献,并基于这些文献研究信息物理系统和物联网等系统生命周期中各个阶段和系统开发过程中产生的各种制品的不确定性及其处理方法.通过对相关文献进行分析发现针对复杂系统的不确定性研究主要集中在其生命周期的设计定义、系统分析和运行等阶段.此外,首先将文献划分为3种不确定性类型,包括外部不确定性、内部不确定性和传感器不确定性,并将142篇相关论文关注的不确定性进行了分类.为了深入探究不确定性,将外部不确定性细分为环境不确定性、基础设施不确定性、用户行为不确定性以及经济属性不确定性,将内部不确定性细分为系统结构不确定性、内部交互不确定性、支持系统运行的技术不确定性以及处理系统运行技术的不确定性.针对复杂系统中的开发制品,提出了对应的不确定性类型,包括模型的不确定性、数据的不确定性和参数的不确定性等8类.针对复杂系统的不确定性问题,研究人员主要采用不确定性下的决策、不确定性推理和不确定性规约/建模等方法进行不确定性分析和处理.基于文献分析结果,进一步探讨和展望了该领域未来的研究趋势.
2021, 32(7):1957-1977. DOI: 10.13328/j.cnki.jos.006259 CSTR:
摘要:自适应系统由于其能够自主地适应具有非确定性的部署环境,并持续地保持用户的满意度,受到了广泛的关注.然而,目前仍然存在未解决的挑战,例如如何在新的部署环境下,或者在开放且复杂的环境下,使得系统仍然能满足自适应性.因此,为自适应系统的设计引入了一个新的概念模型,受归因理论启发,该模型被设计成内归因和外归因两层结构.内归因层决定了内因如何影响自适应行为,这一层与部署环境解耦,可以独立设计且可以复用在不同的部署环境中.外归因层映射了外因与内因的关系,这一层在不同的部署环境中可以被替换.基于两层结构的实现框架,具有设计且实现自适应系统的适用性,以及内因层适应逻辑的可复用性,通过两个案例,一个是被广泛使用的电子商务网络应用,一个是需要躲避障碍物且避免滑倒和翻转的机器人系统,来进行评估.
2021, 32(7):1978-1998. DOI: 10.13328/j.cnki.jos.006268 CSTR:
摘要:目前自适应软件正在为众多领域系统提供着对运行环境的适应能力.如何建立一种能够保障识别质量的自适应分析方法,使之可从运行环境中快速且准确地识别出异常事件,是确保自适应软件长期稳定运行所必须考虑的研究问题之一.当前运行环境的不确定性给该问题的攻关带来两方面的挑战:其一,现有分析方法一般通过预先建立环境状态与事件之间的映射关系来识别事件.但在系统运行之前,已无法仅凭经验确定环境状态并建立全面且正确的映射关系.仅依赖映射关系建立分析方法的设计思路已无法保障识别的准确性.其二,不确定环境何时会发生何种事件已变得不可预期.如果采用现有设计思路,定期地获取环境状态再进行事件识别,则无法保障识别效率.然而,目前却缺乏应对这些紧迫挑战的相关工作,因此提出了一种基于事件关系保障识别质量的自适应分析方法(self-adaptation analysis method for recognition quality assurance using event relationships,简称SAFER).SAFER采用序列模式挖掘算法、模糊故障树与贝叶斯网络等技术抽取并建模事件因果关系,并基于该类关系与映射关系通过贝叶斯网络的正向推理能力共同识别事件,与传统的仅依赖映射关系的识别方法相比可保证识别的准确性;基于贝叶斯网络的反向推理能力,确定易引发事件的精英感知对象,并动态调整获取精英感知对象状态数据的采样周期,以便于在事件发生后尽快获得相关环境状态,从而保障识别效率.实验结果表明,在自适应软件实际运行过程中,SAFER可实现对事件的识别并保障识别准确性与识别效率,为自适应软件稳定运行提供了有效支持.
2021, 32(7):1999-2015. DOI: 10.13328/j.cnki.jos.006272 CSTR:
摘要:随着科技的进步,新型复杂系统,例如人机物融合系统(human cyber-physical systems,简称hCPS),已与人类社会生活越来越密不可分.软件系统所处的信息空间与人们日常生活所处的物理空间日渐融合.物理空间内环境的复杂多变、时空数据的爆发增长以及难以预料的人类行为等不确定因素威胁着系统安全.由于系统安全需求的增长,系统的规模和复杂度随之增加所带来的一系列问题亟待解决.因此,在不确定性环境下,构造智能、安全的人机物融合系统已成为软件行业所面临的不可回避的挑战.环境不确定性使得人机物融合系统软件无法准确感知其所处的运行环境.感知的不确定性将导致系统的误判,从而影响系统的安全性.环境不确定性使得系统设计人员无法为人机物融合系统软件的运行环境提供准确的形式化规约.而对于安全要求较高的系统,准确的形式化规约是保证系统安全的首要条件.为了应对规约的不确定性,提出时空数据驱动与模型驱动相结合的建模方式,即通过使用机器学习算法,基于环境中时空数据对环境进行建模.根据安全软件的典型特征,采用动态验证的方式保证系统的安全,从而构建统一而安全的理论框架.为了展示方案的可行性,以自动驾驶车辆与人驾驶的摩托车的交互场景为例说明了在不确定性环境下的人机物融合系统的建模与验证的具体应用.
2021, 32(7):2016-2038. DOI: 10.13328/j.cnki.jos.006265 CSTR:
摘要:并发错误是程序设计语言和软件工程领域的研究热点之一.近年来,针对应用程序并发错误检测的研究已取得了很大进展.但是由于操作系统内核的并发和同步机制复杂、代码规模庞大,与应用程序级并发错误检测相比,操作系统内核的并发错误检测研究仍面临巨大的挑战.对此,国内外学者提出了各种用于操作系统内核并发错误检测的方法.首先介绍了并发错误的基本类型、检测方法和评价指标,讨论了现有的并发错误检测方法和工具的局限性;然后,从形式化验证、静态分析、动态分析和静态动态相结合4个方面,对现有的操作系统内核并发错误检测的研究工作进行了分类阐述,并作了系统总结和对比分析;最后,探讨了操作系统内核并发错误检测研究面临的挑战,并对该领域未来的研究趋势进行了展望.
2021, 32(7):2039-2055. DOI: 10.13328/j.cnki.jos.006260 CSTR:
摘要:随着技术的不断发展,软件系统的非确定性(uncertainty)不断增强,数据竞争是并发系统这一类典型的非确定性软件系统中常见的缺陷.尽管数据竞争静态检测近年来取得了巨大进展,但其面临的重要问题仍然存在.先前的静态技术要么以分析精度为代价达到高扩展性,要么由于高精度分析而导致可扩展性问题.提出一种解决上述矛盾的分段分析方法——GUARD.它首先基于程序值流进行轻量级上下文敏感的数据访问分析,以识别出候选的数据竞争子路径而非完整的程序路径.接下来,进行可能并行执行(may-happen-in-parallel,即MHP)分析来确定程序中的两个数据访问操作是否可能会同时执行.MHP分析基于线程流图(TFG)将线程信息进行编码以便于高效地查询各个子路径之间的并发关系.最后,对于每条存在MHP数据访问的子路径,进行重量级路径敏感分析以确定数据竞争路径的可行性.针对12个开源项目的实验评估显示,GUARD能够在1 870s内完成对130万行代码的工业规模项目的检测,且平均误报率为16.0%.此外,GUARD的分析速度更快,比现有的前沿技术平均快了6.08倍,并且显著降低了误报率.除此之外,GUARD在其中还发现了12个数据竞争漏洞.将它们全部报告给了开发者,其中8个已得到了确认.
朱向雷,王海弛,尤翰墨,张蔚珩,张颖异,刘爽,陈俊洁,王赞,李克秋
2021, 32(7):2056-2077. DOI: 10.13328/j.cnki.jos.006266 CSTR:
摘要:随着人工智能技术的深入发展,自动驾驶已成为人工智能技术的典型应用,近十年来得到了长足的发展,作为一类非确定性系统,自动驾驶车辆的质量和安全性得到越来越多的关注.对自动驾驶系统,特别是自动驾驶智能系统(如感知模块、决策模块、综合功能及整车)的测试技术得到了业界和学界的深入研究.调研了56篇相关领域的学术论文,分别就感知模块、决策模块、综合功能模块及整车系统的测试技术、用例生成方法和测试覆盖度量等维度对目前已有的研究成果进行了梳理,并描述了自动驾驶智能系统测试中的数据集及工具集.最后,对自动驾驶智能系统测试的未来工作进行了展望,从而为该领域的研究人员提供参考.
2021, 32(7):2078-2102. DOI: 10.13328/j.cnki.jos.006269 CSTR:
摘要:随着图数据规模的日益庞大和图计算作业的日益复杂,图计算的分布化成为必然趋势.然而图计算作业在运行过程中面临着分布式图计算系统内外各种来源的非确定性所带来的严峻的可靠性问题.首先分析了分布式图计算框架中不确定性因素和不同类型图计算作业的鲁棒性,并提出了基于成本、效率和质量3个维度的面向分布式图计算作业的容错技术评估框架,然后分别对分布式图计算的4种容错机制——基于检查点的容错、基于日志的容错、基于复制的容错、基于算法补偿的容错等机制结合国内外相关工作做了深入的分析、评估和比较.最后对未来的研究方向进行了展望.
2021, 32(7):2103-2117. DOI: 10.13328/j.cnki.jos.006264 CSTR:
摘要:数据驱动的智能系统的核心是处理数据的算法,对算法正确性的要求高,导致其测试开销大,需要有效地缩减测试的规模,其中回归测试选择是控制测试规模的有效手段.数据驱动的智能系统由于其动态信息流强度弱的原因,发生偶然正确性现象的概率较高,并且该现象会导致常用的回归测试选择技术所选择出的测试集包含大量检测不到故障的测试用例.因此,从偶然正确性现象的角度出发,提出一种基于偶然正确性概率的回归测试选择技术,进一步排除可能发生偶然正确性现象的用例.该方法能够兼顾代码覆盖,同时从偶然正确性的角度保证缩减后的测试用例集合对被修改的代码的测试是充分的.根据在用例缩减和故障检测能力之间侧重的不同,提出了基于最小化和安全性技术的两种选择策略,并给出3种具体的选择算法.在实验中将所提方法与一种安全的测试选择技术进行比较,结果表明,这3种选择算法都很好地缩减了测试集合的规模,提高了测试选择的精度,并提高了安全性和精度的综合指标.
2021, 32(7):2118-2141. DOI: 10.13328/j.cnki.jos.006258 CSTR:
摘要:在软件的开发和维护过程中,与代码对应的注释经常存在缺失、不足或者与代码实际内容不匹配等问题,但手工编写代码注释对开发人员来说费时费力,且注释质量难以保证,因此亟需研究人员提出有效的代码注释自动生成方法.代码注释自动生成问题是当前程序理解研究领域的一个研究热点,对该问题进行了系统综述.主要将已有的自动生成方法细分为3类:基于模板的方法、基于信息检索的方法和基于深度学习的方法.依次对每一类方法的已有研究成果进行了系统的梳理、总结和点评.随后分析了已有的实证研究中经常使用的语料库和主要的注释质量评估方法,以利于针对该问题的后续研究可以进行合理的实验设计.最后进行总结,并对未来值得关注的研究方向进行了展望.
2021, 32(7):2142-2165. DOI: 10.13328/j.cnki.jos.006270 CSTR:
摘要:代码注释在软件质量保障中发挥着重要的作用,它可以提升代码的可读性,使代码更易理解、重用和维护.但是出于各种各样的原因,有时开发者并没有添加必要的注释,使得在软件维护的过程中,往往需要花费大量的时间来理解代码,大大降低了软件维护的效率.近年来,多项工作利用机器学习技术自动生成代码注释,这些方法从代码中提取出语义和结构化信息后,输入序列到序列的神经网络模型生成相应的注释,均取得了不错的效果.然而,当前最好的代码注释生成模型Hybrid-DeepCom仍然存在两方面的不足.一是其在预处理时可能破坏代码结构导致不同实例的输入信息不一致,使得模型学习效果欠佳;二是由于序列到序列模型的限制,其无法在注释中生成词库之外的单词(out-of-vocabulary word,简称OOV word).例如在源代码中出现次数极少的变量名、方法名等标识符通常都为OOV词,缺少了它们,注释将难以理解.为解决上述问题,提出了一种新的代码注释生成模型CodePtr.一方面,通过添加完整的源代码编码器解决代码结构被破坏的问题;另一方面,引入指针生成网络(pointer-generator network)模块,在解码的每一步实现生成词和复制词两种模式的自动切换,特别是遇到在输入中出现次数极少的标识符时模型可以直接将其复制到输出中,以此解决无法生成OOV词的问题.最后,在大型数据集上通过实验对比了CodePtr和Hybrid-DeepCom模型,结果表明,当词库大小为30 000时,CodePtr的各项翻译效果指标平均提升6%,同时,处理OOV词的效果提升近50%,充分说明了CodePtr模型的有效性.
2021, 32(7):2166-2182. DOI: 10.13328/j.cnki.jos.006262 CSTR:
摘要:软件错误定位是一项耗时又费力的工作,因此如何提高软件错误定位的自动化程度一直以来都是软件工程领域研究的热点.现有的基于频谱的错误定位方法很少利用程序的上下文信息,而程序的上下文信息对错误定位至关重要.针对这一问题,提出了一种基于路径分析和信息熵的错误定位方法FLPI.该方法在基于频谱信息技术的基础上,通过对所有执行路径中的数据依赖关系进行分析来引入执行上下文信息,同时利用信息熵理论将测试事件信息引入到可疑语句的怀疑度计算公式中,以提高错误定位的精度和效率.为了评价该方法的有效性,基于一组基准程序和开源程序进行实验验证.实验结果表明,所提出的方法FLPI能够有效地提高错误定位的精度和效率.
2021, 32(7):2183-2203. DOI: 10.13328/j.cnki.jos.006263 CSTR:
摘要:随着开发者社区和代码托管平台成为程序员获取代码的主要途径,针对代码的用户评论数量急剧增加.用户在使用代码后给出的评论中包含多种静态和动态的代码质量属性信息,但是由于用户评论多为复杂句,使得评论中包含的代码质量属性难以判断.针对复杂用户评论的代码质量属性判断将有助于分析用户评论中的代码质量信息,有助于开发者在了解用户的代码使用情况和用户关注的代码质量属性后有针对性地提升代码质量.提出了针对复杂用户评论的代码质量属性判断方法.首先对复杂用户评论进行分句并构建分句的依存句法关系有向图;然后,应用基于分句的依存句法关系的主题判断规则抽取分句中的主题;接着,根据初始的代码质量属性特征词库识别各主题对应的代码质量属性,并获取各主题的代码质量属性表现与表现结果;最后,基于主题处理规则分析复杂用户评论中的代码质量属性表现与表现结果,产生复杂用户评论中代码质量属性相关结果,并持续扩充初始代码质量属性特征词库.实验结果表明,该方法能够对复杂用户评论的代码质量属性进行有效判断.
2021, 32(7):2204-2218. DOI: 10.13328/j.cnki.jos.006257 CSTR:
摘要:跨项目软件缺陷预测技术可以利用现有的已标注缺陷数据集对新的无标记项目进行预测,但需要两者之间具有相同的度量集合,难以用于实际开发.异构缺陷预测技术可以在具有异构度量集合的项目间进行缺陷预测,该技术引起了大量研究人员的关注.现有的异构缺陷预测技术利用朴素的或者传统机器学习方法为源项目和目标项目学习特征表示,所学习到的特征表示能力很弱且缺陷预测性能很差.鉴于深度神经网络强大的特征抽取和表示能力,基于变分自编码器技术提出了一种面向异构缺陷预测的特征表示方法.该模型结合了变分自编码器和最大均值差异距离,能够有效地学习源项目和目标项目的共性特征表示,基于该特征表示可以训练出有效的缺陷预测模型.在多组缺陷数据集上通过与传统跨项目缺陷预测方法及异构缺陷预测方法实验对比验证了所提方法的有效性.
2021, 32(7):2219-2241. DOI: 10.13328/j.cnki.jos.006261 CSTR:
摘要:软件缺陷预测是软件质量保障领域的一个活跃话题,它可以帮助开发人员发现潜在的缺陷并更好地利用资源.如何为预测系统设计更具判别力的度量元,并兼顾性能与可解释性,一直是人们致力于研究的方向.针对这一挑战,提出了一种基于代码自然性特征的缺陷预测方法——CNDePor.该方法通过正逆双向度量代码并利用质量信息对样本加权的方式改进语言模型,提高了模型所得交叉熵(CE)类度量元的缺陷判别力.针对粗粒度缺陷预测存在难以聚焦缺陷区域、代码审查成本高的不足,研究了一种新的细粒度缺陷预测问题——面向语句的切片级缺陷预测.在该问题上,设计了4种度量元,并在两类安全缺陷数据集上验证了度量元和CNDePor方法的有效性.实验结果表明,CE类度量元具有可学习性,它们蕴涵了语言模型从语料库中学习到的相关知识;改进的CE类度量元的判别力明显优于原始度量元和传统规模度量元;CNDePor方法较传统缺陷预测方法和已有的基于代码自然性的方法有显著优势,较先进的基于深度学习的方法具有可比性和更强的可解释性.
2021, 32(7):2242-2259. DOI: 10.13328/j.cnki.jos.006271 CSTR:
摘要:代码相似性检测(code similarity detection)是软件工程领域的基本任务之一,其在剽窃检测、许可证违反检测、软件复用分析以及漏洞发现等方向均起着重要作用.随着软件开源化的普及以及开源代码量的高速增长,开源代码在各个领域的应用日益频繁,给传统的代码相似性检测方法带来了新的挑战.现有的一些基于词法、语法、语义的检测方法存在算法较为复杂、对解析工具有依赖性、消耗资源高、可移植性差、候选对比项数量较多等问题,在大规模代码库上有一定的局限性.基于相似哈希(simhash)指纹的代码相似性检测算法将代码降维至1个指纹,能够在数据集规模较大的情况下实现快速相似文件检索,并通过海明距离阈值控制匹配结果的相似度范围.通过实验对现有的基于代码行粒度的相似哈希算法进行验证,发现其在大规模数据集下存在行覆盖问题,即高频行特征对低频行特征的覆盖现象,导致结果精确度较低.受TF-IDF算法思想启发,针对上述问题创新性地提出了分语言行筛选优化方法,通过各种语言的行筛选器对代码文件行序列进行筛选,从而消除高频出现但语义信息包含较少的行对结果的影响.对改进前后方法进行一系列对比实验,结果表明,改进后的方法在海明距离阈值为0~8的情况下都能够实现高精确度的相似文件对检索,当阈值为8时在两个数据集下的精确度较改进前的方法分别提升了98.6%和52.2%.在所建立的130万个开源项目、386 486 112个项目文件的大规模代码库上进行了实验,结果表明所提方法能够快速检测出待测文件的相似文件结果,平均单个文件检测时间为0.43s,并取得了97%以上的检测精度.
2021, 32(7):2260-2286. DOI: 10.13328/j.cnki.jos.006309 CSTR:
摘要:区块链技术是一种通过块链式结构、共识算法和智能合约来生成、存储、操作和验证数据的新型分布式基础架构和计算范式,其所构建的新型信任机制有助于推动互联网技术由信息互联网向价值互联网的转化.由于区块链中的账本数据采用公开交易记录、多节点共识确认的方式进行存储和验证,因此对系统中的身份管理及隐私保护提出了极大的挑战.首先分析了区块链系统交易模型的特点及其与传统中心化系统在身份认证、数据存储和交易确认方面的不同,阐述了区块链系统中身份管理技术涵盖的主要内容、关键问题及安全挑战;其次,从身份标识、身份认证和身份隐藏3个方面比较分析了目前主流区块链平台中身份管理和隐私保护的不同实现技术;最后,分析了现有区块链系统中身份管理的不足并对未来的研究方向进行了展望.