We use cookies to improve your experience with our site.
姜远, 黎铭, 周志华. ROCUS: 一种软件缺陷检测方法[J]. 计算机科学技术学报, 2011, 26(2): 328-342. DOI: 10.1007/s11390-011-1135-6
引用本文: 姜远, 黎铭, 周志华. ROCUS: 一种软件缺陷检测方法[J]. 计算机科学技术学报, 2011, 26(2): 328-342. DOI: 10.1007/s11390-011-1135-6
Yuan Jiang, Ming Li, Zhi-Hua Zhou. Software Defect Detection with ROCUS[J]. Journal of Computer Science and Technology, 2011, 26(2): 328-342. DOI: 10.1007/s11390-011-1135-6
Citation: Yuan Jiang, Ming Li, Zhi-Hua Zhou. Software Defect Detection with ROCUS[J]. Journal of Computer Science and Technology, 2011, 26(2): 328-342. DOI: 10.1007/s11390-011-1135-6

ROCUS: 一种软件缺陷检测方法

Software Defect Detection with ROCUS

  • 摘要: 软件缺陷检测旨在自动检测程序模块中是否包含缺陷,从而加速软件测试过程,提高软件系统的质量。目前,机器学习方法已开始逐渐被用于软件缺陷检测,取得比传统方法更优的性能。然而,现有方法忽视了软件缺陷检测任务自身两个重要且实际的问题,即:一方面,在软件缺陷检测任务中,往往难以收集大量有标记的训练数据,这将严重影响学习器的预测性能;另一方面,软件系统中存在缺陷的模块数量往往远小于无缺陷的模块的数量,这种类别分布失衡的训练数据将严重影响学习器的性能。因此本文针对上述在软件缺陷预测中同时存在的两个问题,提出了一种新型的半监督学习方法ROCUS  (RandOm Committee with Under-Sampling)。一方面,该方法利用基于不一致性的半监督学习方法来克服软件缺陷预测任务中有标记训练样本不充分问题,通过有效利用大量未标注样本学习来提升学习器的性能;另一方面,该方法利用亚采样技术,使学习器在利用未标记数据学习过程中能够更加关注小类样本,从而来缓解数据分布不平衡性对半监督学习性能造成的影响。
    本文在8个软件缺陷预测基准数据集上面评估ROCUS的性能。实验中对比ROCUS与现有的监督学习方法、半监督学习方法、类别不平衡学习方法的性能,其中监督学习忽视了软件缺陷检测问题中的标记数据不充分性以及训练数据分布不均衡性,半监督学习仅试图缓解标记数据不充分性,而类别不平衡学习仅试图缓解标记类别分布的非均衡性。实验结果表明,通过同时考虑标记数据不充分性和训练数据分布不均衡性后,ROCUS方法对软件缺陷的检测性能显著优于监督学习方法、类别不平衡学习方法、半监督学习方法的性能。因此,在软件缺陷检测中,同时显式地考虑标记数据的不充分性和数据分布的不均性能够有效提升预测性能。
    目前,ROCUS只能判断当前模块是否包含缺陷,但并不能直接预测模块中包含的缺陷个数。因此,在将来的工作中可利用半监督回归方法的思想对ROCUS方法进行扩展,使之能够适合对缺陷数目的预测。另一方面,标记数据的不充分性和数据分布的不平衡性两个问题之间可能相互影响,将来工作中将利用二者之间的关系进一步提升软件缺陷检测的精度。
    软件缺陷预测的实际应用中,标记数据的不充分性和数据分布不平衡性广泛存在。本文ROCUS凭借其对软件缺陷模块检测性能好的特点,能够在软件测试过程中自动给出缺陷模块预警,以帮助测试人员有针对性地对预警模块进行重点测试。这样,一方面有助于在提升软件质量,另一方面,可减少无针对性测试造成的资源浪费,节约软件开发成本。因此,ROCUS方法具有较高的实用价值和良好的应用前景。

     

    Abstract: Software defect detection aims to automatically identify defective software modules for efficient software test in order to improve the quality of a software system. Although many machine learning methods have been successfully applied to the task, most of them fail to consider two practical yet important issues in software defect detection. First, it is rather difficult to collect a large amount of labeled training data for learning a well-performing model; second, in a software system there are usually much fewer defective modules than defect-free modules, so learning would have to be conducted over an imbalanced data set. In this paper, we address these two practical issues simultaneously by proposing a novel semi-supervised learning approach named Rocus. This method exploits the abundant unlabeled examples to improve the detection accuracy, as well as employs under-sampling to tackle the class-imbalance problem in the learning process. Experimental results of real-world software defect detection tasks show that Rocus is effective for software defect detection. Its performance is better than a semi-supervised learning method that ignores the class-imbalance nature of the task and a class-imbalance learning method that does not make effective use of unlabeled data.

     

/

返回文章
返回