8.41 软件缺陷挖掘
软件是计算机系统的灵魂,软件的质量是计算机系统安全可靠运行的保障。伴随着软件运行环境逐渐从封闭、静态的单机环境向开放、动态多变的网络环境过渡,系统功能变得越发复杂,代码规模也不断增加,如何有效保证庞大而复杂的软件系统的质量使其能够正确、可靠的运行,已成为软件研究者和软件开发人员所面临的巨大挑战。 软件质量主要体现为软件的可靠性、可用性、有效性和可维护性[1] ,其中软件的可靠性尤为重要。导致软件系统不可靠的主要诱因之一是软件缺陷[2] 。软件缺陷是软件中存在的某种破坏其正常运行的错误、故障或隐藏的功能瑕疵。包含缺陷的软件系统不仅会影响用户的正常使用,还可能会造成严重后果。例如,1996 年欧洲阿丽亚娜 -5 型火箭因软件缺陷引发的飞行姿态错误导致升空数秒后爆炸,经济损失达 5亿美元;2000 年美国国家癌症研究中心放疗机因软件缺陷而错误计算放射量,造成 8 人死亡 20 人重伤;2014 年美国花费巨资研制的第四代隐形攻击机 F-35 由于机载软件缺陷导致其航炮无法瞄准射击,而修复这一缺陷的升级版本预计需要花费 4年才能完成。因此,要提高软件质量必须有效发现软件中潜在的缺陷。
软件缺陷挖掘 (software defect mining) 是一种典型的软件挖掘 (software mining) 任务。它将软件模块的源代码以及相关代码注释、用户报告等资源视为一种特殊的数据,基于数据挖掘技术对其进行分析建模,从中挖掘蕴含于软件模块中的软件缺陷模式,并据此自动发现软件模块中包含的缺陷。根据建模时采用的信息不同,对软件缺陷的挖掘可分为基于编程模式挖掘软件缺陷、基于缺陷标注挖掘软件缺陷和基于用户缺陷报告挖掘软件缺陷三种主要方式。