2019, 30(5):1203-1205. DOI: 10.13328/j.cnki.jos.005736
摘要:
2019, 30(5):1206-1223. DOI: 10.13328/j.cnki.jos.005717
摘要:自动化软件开发一直是软件工程领域的研究热点.目前,互联网技术促进了开源软件和开源社区的发展,这些大规模的代码和数据成为自动化软件开发的机遇.与此同时,深度学习也在软件工程领域开始得到应用.如何将深度学习技术用于大规模代码的学习,并实现机器自动编写程序,是人工智能与软件工程领域的共同期望.机器自动编写程序,辅助甚至在一定程度上代替程序员开发程序,极大地减轻了程序员的开发负担,提高了软件开发的效率和质量.目前,基于深度学习方法自动编写程序主要从两个方面实现:程序生成和代码补全.对这两个方面的应用以及主要涉及的深度学习模型进行了介绍.
2019, 30(5):1224-1242. DOI: 10.13328/j.cnki.jos.005719
摘要:自动化编程是智能软件的核心挑战之一,使用程序执行轨迹或输入输出样例学习程序,是自动化编程的典型研究方法.这些方法无法弥合常规程序元素与神经网络组件间的隔阂,不能吸收经验信息输入、缺乏编程控制能力.给出了一种可无缝结合高级编程语言与神经网络组件的混合编程模型:使用高级编程语言元素和神经网络组件元素混合开发应用程序,其中,编程语言描述程序的框架、提供经验信息,关键复杂部分则用未定、可学习的神经网络组件占位,应用程序在可微分抽象机上运行生成程序的连续可微分计算图表示,然后使用输入输出数据,通过可微分优化方法对计算图进行训练,学习程序的未定部分,自动生成完整的确定性程序.可微分抽象机混合编程模型给出了一种能够将编程经验与神经网络自学习相结合的程序自动生成方法,弥合编程语言元素与神经网络元素间的隔阂,发挥并整合高级过程化编程和神经网络可训练学习编程各自的优势,将复杂的细节交给神经网络未定部分自动生成,降低编程难度或工作量,而适当的经验输入又有助于未定部分的学习,同时,为复用长期积累的宝贵编程经验提供输入接口.
2019, 30(5):1243-1255. DOI: 10.13328/j.cnki.jos.005729
摘要:在计算机软件中,程序缺陷不可避免且极有可能造成重大损失.因此,尽早发现并排除程序中潜在的缺陷,是学术界和工业界的普遍共识.目前的程序缺陷自动修复方法大都遵循缺陷定位、修复候选项生成、选择及验证的流程,但在修复实际程序时存在修复率低、无法保证修复结果的正确性等问题.提出了一种基于程序合成的C/C++程序缺陷自动修复方法.首先,从满足相同规约的程序集中,通过人工整理的方式总结错误模式及其对应的修复方法,使用重写规则表达错误模式,在此基础上实现了基于重写规则和基于程序频谱的缺陷定位方法,得到程序中可能的缺陷位置;其次,基于重写规则,使用修复选项生成方法得到缺陷的修复选项,同时,通过深度学习的方式学习正确程序的书写结构,帮助预测错误程序错误点应有的语句结构,通过这两种方式提高候选项质量,进而提高修复率;最后,在选择验证过程中,使用程序合成的方法将样例程序作为约束,保证合成后代码的正确性.基于上述方法实现了原型工具AutoGrader,并在容易出错、缺陷典型的学生作业程序上进行了实验,结果显示,该方法对学生作业程序中的缺陷有着较高的修复率,同时也能保证修复后代码的正确性.
2019, 30(5):1256-1268. DOI: 10.13328/j.cnki.jos.005716
摘要:已有的程序自动化调试研究大多面向工业软件,而学生程序调试具有缺陷数多、类型复杂等特有难点问题,因此,针对学生程序设计应用背景,研究程序自动修复方法,利用模板示例程序指导补丁的演化.改进了遗传编程算法,包括适应度的计算、变异体的生成方式和变异位置及操作的选择方式,使其更加适合修复学生程序.提出了基于示例的静态错误定位方法,能够识别缺陷程序和参考程序差异和可能的变异操作,有效地缩小补丁的搜索空间以提高修复的准确性.提出了基于执行值序列的变量映射方法,以降低变异体的编译错误,提高修复的准确性.在此基础上,设计并实现了示例演化驱动的Java学生程序自动修复系统.实验结果表明,该方法可以修复含有多缺陷学生程序,对于所用的测试集,当学生程序只有1个~2个错误时,修复率将近100%;当含有3个缺陷时,修复率约为70%;当含有4个及以上缺陷时,修复率约为50%.
倪友聪 , 吴瑞 , 杜欣 , 叶鹏 , 李汪彪 , 肖如良
2019, 30(5):1269-1287. DOI: 10.13328/j.cnki.jos.005734
摘要:演化算法通过搜寻GCC编译器最优编译选项集,对可执行代码的能耗进行改进,以达到编译时优化嵌入式软件能耗的目的.但这类算法未考虑多个编译选项之间可能存在相互影响,导致了其解质量不高且收敛速度慢的问题.针对这一不足,设计了一种基于频繁模式挖掘的遗传算法GA-FP.该算法在演化过程中利用频繁模式挖掘得到出现频度高且能耗改进大的一组编译选项,并以此作为启发式信息,设计了"增添"和"删减"两种变异算子,帮助提高解质量和加快收敛速度.与Tree-EDA算法在5个不同领域的8个典型案例下进行对比实验,结果表明,该GA-FP算法不仅能够更有效地降低软件能耗(平均降低2.5%,最高降低21.1%),而且还能在获得不劣于Tree-EDA能耗优化效果的前提下更快地收敛(平均加快34.5%,最高加快83.3%),最优解中编译选项的相关性分析进一步验证了所设计变异算子的有效性.
2019, 30(5):1288-1307. DOI: 10.13328/j.cnki.jos.005713
摘要:软件缺陷预测一直是软件工程研究中最活跃的领域之一,研究人员己经提出了大量的缺陷预测技术,根据预测粒度不同,主要包括模块级、文件级和变更级(change-level)缺陷预测.其中,变更级缺陷预测旨在于开发者提交代码时,对其引入的代码是否存在缺陷进行预测,因此又被称作即时(just-in-time)缺陷预测.近年来,即时缺陷预测技术由于其即时性、细粒度等优势,成为缺陷预测领域的研究热点,取得了一系列研究成果;同时也在数据标注、特征提取、模型评估等环节面临诸多挑战,迫切需要更先进、统一的理论指导和技术支撑.鉴于此,从即时缺陷预测技术的数据标注、特征提取和模型评估等方面对近年来即时缺陷预测研究进展进行梳理和总结.主要内容包括:(1)归类并梳理了即时缺陷预测模型构建中数据标注常用方法及其优缺点;(2)对即时缺陷预测的特征类型和计算方法进行了详细分类和总结;(3)总结并归类现有模型构建技术;(4)总结了模型评估中使用的实验验证方法与性能评估指标;(5)归纳出了即时缺陷预测技术的关键问题;(6)最后展望了即时缺陷预测的未来发展.
2019, 30(5):1308-1329. DOI: 10.13328/j.cnki.jos.005712
摘要:在实际软件开发中,需要进行缺陷预测的项目可能是一个新启动项目,或者这个项目的历史训练数据较为稀缺.一种解决方案是利用其他项目(即源项目)已搜集的训练数据来构建模型,并完成对当前项目(即目标项目)的预测.但不同项目的数据集间会存在较大的分布差异性.针对该问题,从特征迁移和实例迁移角度出发,提出了一种两阶段跨项目缺陷预测方法FeCTrA.具体来说,在特征迁移阶段,该方法借助聚类分析选出源项目与目标项目之间具有高分布相似度的特征;在实例迁移阶段,该方法基于TrAdaBoost方法,借助目标项目中的少量已标注实例,从源项目中选出与这些已标注实例分布相近的实例.为了验证FeCTrA方法的有效性,选择Relink数据集和AEEEM数据集作为评测对象,以F1作为评测指标.首先,FeCTrA方法的预测性能要优于仅考虑特征迁移阶段或实例迁移阶段的单阶段方法;其次,与经典的跨项目缺陷预测方法TCA+、Peters过滤法、Burak过滤法以及DCPDP法相比,FeCTrA方法的预测性能在Relink数据集上可以分别提升23%、7.2%、9.8%和38.2%,在AEEEM数据集上可以分别提升96.5%、108.5%、103.6%和107.9%;最后,分析了FeCTrA方法内的影响因素对预测性能的影响,从而为有效使用FeCTrA方法提供了指南.
2019, 30(5):1330-1341. DOI: 10.13328/j.cnki.jos.005715
摘要:内存泄漏在采用显式内存管理机制的C语言中是一种常见的代码缺陷,内存泄漏的检测方法目前主要是静态分析与动态检测.动态检测开销大,且高度依赖测试用例;静态分析目前被学术界和工业界广泛应用,但是存在大量误报,需要人工对检测结果进行确认.内存泄漏静态分析的误报通常是由于对指针、分支语句和全局变量分析的不准确性导致的.提出了一种内存泄漏的智能化检测方法,通过使用机器学习算法学习程序特征与内存泄漏之间的相关性,构建机器学习分类器,并应用机器学习分类器进一步提高内存泄漏静态分析的准确性.首先构建机器学习分类器,然后通过静态分析方法构建从内存分配点开始的Sparse Value Flow Graph(SVFG),并从中提取内存泄漏相关特征,再使用规则和机器学习分类器进行内存泄漏的检测.实验结果显示,该方法在分析指针、分支语句和全局变量时是有效的,能够提高内存泄漏检测的准确性,降低内存泄漏检测结果的误报.最后,对未来研究的可行性以及面临的挑战进行了展望.
2019, 30(5):1342-1358. DOI: 10.13328/j.cnki.jos.005722
摘要:开发人员经常需要使用各种应用程序编程接口(application programming interface,简称API)来复用已有的软件框架、类库等.由于API自身的复杂性、文档资料的缺失等原因,开发人员经常会误用API,从而导致代码缺陷.为了自动检测API误用缺陷,需要获得API使用规约,并根据规约对API使用代码进行检测.然而,可用于自动检测的API规约难以获得,而人工编写并维护的代价又很高.针对以上问题,将深度学习中的循环神经网络模型应用于API使用规约的学习及API误用缺陷的检测.在大量的开源Java代码基础上,通过静态分析构造API使用规约训练样本,同时利用这些训练样本搭建循环神经网络学习API使用规约.在此基础上,针对API使用代码进行基于上下文的语句预测,并通过预测结果与实际代码的比较发现潜在的API误用缺陷.对所提出的方法进行实现并针对Java加密相关的API及其使用代码进行了实验评估,结果表明,该方法能够在一定程度上实现API误用缺陷的自动发现.
2019, 30(5):1359-1374. DOI: 10.13328/j.cnki.jos.005724
摘要:上帝类是指某个承担了本应由多个类分别承担的多个职责的类.上帝类违背了分而治之的基本思想以及单一职责的设计原则,严重影响软件的可维护性和可理解性.但上帝类又是一种比较常见的代码坏味.因此,针对上帝类的检测与重构一直是代码重构领域的研究热点之一.为此,提出了一种基于深度神经网络的上帝类检测方法.该方法不仅利用了常见的软件度量,而且充分利用了代码中的文本信息,意图通过挖掘文本语义揭示每个类所承担的主要角色.此外,为了解决有监督深度学习所需的海量标签数据,提出了一种基于开源代码构造标签数据的方法.最后,基于开源数据集对所提出的方法进行了实验验证.实验结果表明,这些方法优于现有的上帝类检测方法,尤其是在查全率上有大幅度的提升(提高了35.58%).
2019, 30(5):1375-1385. DOI: 10.13328/j.cnki.jos.005730
摘要:在飞机维修与保养过程中,航空维修公司已积累了大量经验性的维修日志数据.合理利用该类维修日志,结合机器学习方法,可以辅助维修人员做出正确的故障诊断决策.首先,针对维修日志的特殊性,提出一种迭代式的故障诊断基本过程;其次,在传统的文本特征提取技术的基础上,基于领域内信息,提出一种基于卷积神经网络(convolution neural network,简称CNN)的小样本文本特征提取方法,在样本量较少的情况下,利用预测目标将字向量作为输入,得到更为充分的文本特征;最后,使用随机森林(random forest,简称RF)模型,结合其他故障特征判别飞机设备的故障原因.卷积神经网络以故障原因为目标,预先对故障现象中的字向量进行训练,从而得到更能反映该领域的文本特征.与其他文本特征提取方法相比,该类方法在小样本数据上得到了更好的效果.同时,将卷积神经网络与随机森林模型应用于飞机设备的故障原因判别,并与其他文本特征提取方式和机器学习预测模型进行对比,说明了该类文本特征提取方式和故障原因判别方法的合理性和必要性.
2019, 30(5):1386-1406. DOI: 10.13328/j.cnki.jos.005725
摘要:在所有的软件系统开发过程中,Bug的存在是不可避免的问题.对于软件系统的开发者来说,修复Bug最有利的工具就是Bug报告.但是人工识别Bug报告会给开发人员带来新的负担,因此,自动对Bug报告进行分类是一项很有必要的工作.基于此,提出用基于极速学习机的方法来对Bug报告进行分类.具体而言,主要解决Bug报告自动分类的3个问题:第1个是Bug报告数据集里不同类别的样本数量不平衡问题;第2个是Bug报告数据集里被标注的样本不充足问题;第3个是Bug报告数据集总体样本量不充足问题.为了解决这3个问题,分别引入了基于代价的有监督分类方法、基于模糊度的半监督学习方法以及样本迁移方法.通过在多个Bug报告数据集上进行实验,验证了这些方法的可行性和有效性.
2019, 30(5):1407-1421. DOI: 10.13328/j.cnki.jos.005732
摘要:社交化编程使得开源社区中的知识可以快速被传播,其中,缺陷报告作为一类重要的软件开发知识,会含有特定的语义信息.通常,开发者会人工地将相关的缺陷报告关联起来.在一个软件项目中,发现并关联相关的缺陷报告可以为开发者提供更多的资源和信息去解决目标缺陷,从而提高缺陷修复效率.然而,现有人工关联缺陷报告的方法是十分耗费时间的,它在很大程度上取决于开发者自身的经验和知识.因此,研究如何及时、高效地关联相关缺陷是对于提高软件开发效率十分有意义的工作.将这类关联相关缺陷的问题视为推荐问题,并提出了一种基于嵌入模型的混合式相关缺陷关联方法,将传统的信息检索技术(TF-IDF)与深度学习中的嵌入模型(词嵌入模型和文档嵌入模型)结合起来.实验结果表明,该方法能够有效地提高传统方法的性能,且具有较强的应用扩展性.
2019, 30(5):1422-1437. DOI: 10.13328/j.cnki.jos.005735
摘要:代码坏味是指程序设计中存在的不良设计模式或设计缺陷.坏味的存在,被认为会阻碍软件的演化与维护.近年来,研究人员致力于探究坏味产生的影响以及坏味与软件演化之间的关系.已有研究表明,代码坏味会随着软件的演化而不断发生变化.通常,软件的演化将涉及源文件的增加、修改与删除这3类具体操作,了解代码坏味与软件演化中源文件操作的关系,将有助于开发者更好地计划软件开发过程和重构软件代码.因此,针对13种常见的坏味,在8个Java项目共计104个版本中进行了系统的实证研究.研究发现,随着软件版本的演化,含代码坏味的文件在整个项目中的占比在不同的项目中呈现出不同的特征.另外,包含代码坏味的文件更倾向于被修改,而坏味本身与文件的添加或者删除并没有太大的关联.更进一步地,在探究的所有坏味中,有几种特定的坏味对文件的修改产生了显著的影响,且这些坏味文件间存在着明显的重叠.这些发现有助于开发人员更好地了解代码坏味,以便于更好地对软件进行维护.
2019, 30(5):1438-1449. DOI: 10.13328/j.cnki.jos.005714
摘要:持续集成环境下的测试存在测试用例集变化大、测试时间有限和快速反馈等需求,传统的测试优化方法难以适用.强化学习是机器学习的一个重要分支,其本质是解决序贯决策问题,可以用于持续集成测试优化.但现有的基于强化学习的方法中,奖励函数计算只包括测试用例在当前集成周期的执行信息.从奖励函数设计和奖励策略两个方面开展研究.在奖励函数设计方面,采用测试用例的完整历史执行信息替代当前执行信息,综合考虑测试用例历史失效总次数和历史失效分布信息,提出了两种奖励函数.在奖励策略方面,提出对当前执行序列的测试用例整体奖励和仅对失效测试用例的部分奖励两种策略.在3个工业级被测程序进行实验研究,结果表明:(1)与现有方法相比,所提出的基于完整历史执行信息奖励函数的强化学习方法可以大幅度提高持续集成测试序列的检错能力;(2)测试用例历史失效分布有助于发现潜在失效的测试用例,对强化学习奖励函数的设计更加重要;(3)整体奖励与部分奖励两种奖励策略受到被测程序的多种因素影响,需要根据实际情况具体选择;(4)包含历史信息的奖励函数会增加时间消耗,但并不影响测试效率.
2019, 30(5):1450-1463. DOI: 10.13328/j.cnki.jos.005720
摘要:测试预言生成技术是软件工程测试领域的研究热点之一.没有可以利用的历史测试用例是目前大部分测试预言生成技术的普遍假设,但是这种假设会使我们错过利用现有部分测试用例协助自动生成新测试用例预言的机会.在已知部分测试用例集的情况下,提出了基于敏感变量和线性感知机的新测试用例的测试预言自动生成方法.首先,收集已知测试用例执行的语句覆盖和不同断点处内存值集合作为训练集,计算与新测试用例执行覆盖信息高度相似的测试用例集;其次,计算各断点处表征成功或失败的敏感变量集;然后,应用线性感知机求解每个断点处成功或失败概率预测的门限值;在此基础上,给出新测试用例测试预言自动生成的方法,并对方法进行讨论;最后,采用7个程序的129个故障版本作为实验对象,对共计14 300个测试用例生成测试预言.实证评价表明,测试预言准确率平均达到96.2%.该成果可以形成测试用例集合构造的"滚雪球效应",不断迭代自动生成新测试用例的测试预言.
2019, 30(5):1464-1480. DOI: 10.13328/j.cnki.jos.005723
摘要:二阶变异测试通过向源程序中人工注入两个缺陷来模拟程序实际的复杂缺陷,在软件测试中具有重要意义.但由一阶变异体组合形成二阶变异体后数量会急剧增长,极大地增加了程序的执行开销.为了减少二阶变异体数量,降低程序的执行开销,提出一种基于SOM神经网络的二阶变异体约简方法.该方法首先采用较为全面的二阶变异体错误组合策略,对一阶变异体组合形成二阶变异体;然后,根据二阶变异体执行过程中的中间值相似性,进行基于SOM神经网络的变异体聚类.使用经典的基准程序和开源程序进行了方法的验证,实验结果表明,一方面,使用错误覆盖更为全面的组合策略能够充分模拟程序的复杂缺陷,聚类约简后,二阶变异体的个数在极大减少的同时,二阶变异充分度和一阶变异充分度更加接近,但是因为执行的二阶变异体数目明显降低,从而使得运行聚类后的二阶变异体时间开销明显比执行全部二阶变异体降低;另一方面,实验过程发现了有利于增加测试组件的隐藏二阶变异体.
2019, 30(5):1481-1497. DOI: 10.13328/j.cnki.jos.005721
摘要:源代码检索是软件工程领域的一项重要研究问题,其主要任务是检索和复用软件项目API(application program interface,应用程序接口).随着软件项目的规模越来越大、越来越复杂,当前,源代码检索一方面需要提高基于自然语言API查询的准确性,另一方面需要定位和展示目标API及其相关代码之间的关联,以更好地辅助用户理解API的实现逻辑和使用场景.为此,提出一种基于图嵌入的软件项目源代码检索方法.该方法能够基于软件项目源代码自动构建其代码结构图,并通过图嵌入对源代码进行信息表示.在此基础上,用户可以输入自然语言问题、检索并返回相关的API及其关联信息构成的连通代码子图,从而提高API检索和复用的效率.在以开源项目Apache Lucene和POI为例的检索实验中,该方法检索结果的F1值比现有基于最短路径的方法提高了10%,同时显著缩短了平均响应时间.
2019, 30(5):1498-1509. DOI: 10.13328/j.cnki.jos.005718
摘要:在大型IT企业中,尤其像Google或者百度,代码搜索已是软件开发过程中不可或缺且频繁的活动,其通过借鉴或复用已有代码,加速开发过程的速度.多年以来,已有大量的研究人员关注代码搜索,且设计出很多优秀的工具.但是已有的研究和工具主要是在小规模或者编程语言单一的代码数据集上,没有从企业实际搜索需求出发,且对用户的查询输入也有所限制,尚缺少一套针对企业级海量代码的检索与管理技术方案.提出了一套企业级海量数据代码搜索引擎的方案和系统实现,面向开发过程中用户最直接的需求,通过离线分析与在线分析,完成对海量代码库的索引构建与检索.其中,离线分析负责代码相关数据的获取与分析、构建索引集群.在线过程负责变换用户的query、对搜索的结果进行高级排序、生成摘要.本系统部署在百度代码库上,为数十TB级的Git代码库构建了索引,平均一次检索时间在1s之内.在百度推出应用以来,访问量逐步增加,现每周平均用户有数千人,每周查询平均有数万次,广受百度工程师好评.
2019, 30(5):1510-1521. DOI: 10.13328/j.cnki.jos.005726
摘要:语义网的飞速发展,使得各领域出现了以本体这种形式来表达的知识模型.但在实际的语义网应用中,常常面临本体实例匮乏的问题.将现有关系型数据源中的数据转化为本体实例是一种有效的解决办法,这需要利用关系模型到本体模型的模式匹配技术来建立数据源和本体之间的映射关系.除此之外,关系模型到本体模型的模式匹配还被广泛用于数据集成、数据语义标注、基于本体的数据访问等领域中.现有的研究工作往往会综合使用多种模式匹配算法,计算异构数据模式中元素对的综合相似度,辅助人工建立数据源到本体的映射关系.现有的工作针对单一模式匹配算法准确率不高的问题,试图通过综合多种模式匹配算法的结果来进行调和.然而,这种方法当多种匹配算法同时出现不准时,难以得出更加准确的最终匹配结果.对单一模式匹配算法匹配不准的成因进行深入的分析,认为数据源的本地化特征是导致这一现象的重要因素,并提出了一种迭代优化的模式匹配方案.该方案利用在模式匹配过程中已经得到匹配的元素对,对单一模式匹配算法进行优化,经过优化后的算法能够更好地兼容数据源的本地化特征,从而显著提升准确率.在"餐饮信息管理"领域的一个实际案例上开展实验,模式匹配效果显著高于传统方法,其中,F值超过传统方法50.1%.
2019, 30(5):1522-1531. DOI: 10.13328/j.cnki.jos.005727
摘要:问题追踪系统和版本控制系统等软件开发支持工具已被广泛应用于开源和商业软件的开发中,产生了大量的数据,即软件开发活动数据.软件开发活动数据被广泛应用于科学研究和开发实践,为智能化开发提供支持.然而数据质量对相关的研究和实践有重大影响,却还没有得到足够的重视.为了能够更好地警示数据使用者潜在的数据质量问题,通过文献调研和访谈,并基于自有经验对数据进行分析,总结出了9种数据质量问题,覆盖了数据产生、数据收集和数据使用这3个不同的阶段.进一步地,提出了相应的方法以帮助发现和解决数据问题.发现问题是指加强对数据上下文的理解和通过统计分析及数据可视化发现潜在的数据质量问题,解决问题是指利用冗余数据或者挖掘用户行为模式进行修正.
2019, 30(5):1532-1546. DOI: 10.13328/j.cnki.jos.005728
摘要:基于数据分析的智能决策对提升企业竞争力具有重要意义.根据待分析的问题,从内部信息系统的数据库中查询并获取与问题密切相关且信息完整的数据,是企业数据分析过程中的关键环节.基于本体的可视化数据查询系统为不掌握计算机专业技能的终端用户提供了高效获取数据的手段,近年来成为研究热点.然而现有工作仅采用简单的映射规则,将数据库中的表、字段、外键关系等元素直接映射为本体中的概念、属性和关系,向终端用户暴露了过多数据库设计的技术细节,增加了用户理解的难度,降低了系统的可用性.而通过人工编写映射规则来屏蔽数据库细节,既低效又缺乏通用性.针对这一问题,提出了一种基于推理的终端用户本体查询构造方法.该方法利用本体模型的语义表达能力和推理能力,在原有基于数据库简单映射所生成的本体模型基础上注入领域知识,从而优化查询构造流程,使终端用户得以从其更为熟悉的业务知识的视角,而非数据库设计的视角来看待和操纵数据,提高系统可用性;同时,增加了对分组统计的支持,扩展了方法的适用范围.最后,通过对"餐饮前台信息管理"领域真实案例的分析,验证了该方法相对于已有方法,其可用性提高了53.44%,表达能力提高了20.43%.
2019, 30(5):1547-1560. DOI: 10.13328/j.cnki.jos.005731
摘要:在移动应用软件中,用户评论是一种重要的用户反馈途径.用户可能提到一些移动应用使用中的问题,比如系统兼容性问题、应用崩溃等.随着移动应用软件的广泛流行,用户提供大量无结构化的反馈评论.为了从用户抱怨评论中提取有效信息,提出一种基于支持向量机和主题模型的评论分析方法RASL(review analysis method based on SVM and LDA)以帮助开发人员更好、更快地了解用户反馈.首先对移动应用的中、差评提取特征,然后使用支持向量机对评论进行多标签分类.随后使用LDA主题模型(latent dirichlet allocation)对各问题类型下的评论进行主题提取与代表句提取.从两个移动应用中爬取5 141条用户原始评论,并对这些评论分别用RASL方法和ASUM方法进行处理,得到两个新的文本.与经典方法ASUM相比,RASL方法的困惑度更低、可理解性更佳,包含更完整的原始评论信息,冗余信息也更少.
2019, 30(5):1561-1574. DOI: 10.13328/j.cnki.jos.005733
摘要:随着互联网技术的迅猛发展,基于开发者社区的提问-回答经验交流方式已成为众多开发人员解决软件开发、维护过程中所遇问题的重要手段之一.如何为开发者社区中的提问者及时、准确地推荐问题回答者,是具有实际需求的重要问题.通过对Stack Overflow和Github两个具有代表性的主流开发者社区相关数据的收集和分析,观察到影响上述问题推荐准确性和反馈及时性的3个现象:(1)用户标签自定现象,即开发者社区中,用户的标签信息是由用户自己主观定义所得,而非系统根据用户的历史行为客观标定;(2)不对称活跃现象,即用户可能在某个或某些开发者社区中活跃,但在其他社区中并不具有同等活跃程度,甚至不活跃;(3)关键词集封闭现象,即开发者社区中的问题回答者推荐仅依据问题文本中的关键词,而未考虑其他语义相关的关键词.针对以上问题,融合开发者社区的用户信息,通过分析用户与用户之间的互动行为,建立跨社区的开发者网络,并提出一种基于重启随机游走的算法更新用户标签.进一步地,通过使用Taxonomy来扩充问题的查询关键词范围,在此基础上,协同用户矩阵进行更加准确的推荐,并增大了推荐时有效用户的范围.收集的实验数据包括170万个有效主题、累计40万用户以及117个标签.实验结果证实,所提出的算法具有较好的F-measure和NDCG度量.特别是在冷门标签的推荐中,与未采用该方法的推荐算法相比,基于NDCG度量的推荐准确率至少可提高2倍,部分甚至可高达4倍.