目录
软件无处不在
软件发展不是一个简单的任务
识别软件缺陷
软件缺陷定位
使用bug报告识别有缺陷的源代码
使用标准IR方法建模相关性
VSM
rVSM
根据bug报告和源代码学习共享主题,并根据主题衡量相关度
学习结合大量手工制作的特性
如何建模?
软件无处不在
~游戏机
~电子书
~电视机
~飞机
~广播医疗
~电子签名
~娱乐游戏机
~打印机
~汽车
~移动手机
~智能手机
~相机
软件发展不是一个简单的任务
挑战:
-更大
-更复杂
-更多功能
传统的软件工程正在努力管理软件开发过程。
解决方法:软件挖掘
将软件视为一种特殊类型的数据,挖掘有用的知识,以促进软件开发。
~挖掘软件缺陷识别
~挖掘成本/工作量估算
~挖掘软件遗留问题管理
~挖掘资源分配
~挖掘过程控制
识别软件缺陷
识别软件整个生命周期中的软件缺陷
编码——>引导测试——>释放——>处理bug报告——>打软件补丁——>释放
软件缺陷定位
Bug报告使用自然语言描述程序的错误功能行为。
表示源代码中隐藏的软件缺陷,根据Bug报告,我们有望识别出有bug的源文件。
使用bug报告识别有缺陷的源代码
软件代码看作自然语言 相似度排序 找到最相似的code段落
使用标准IR方法建模相关性
VSM
-使用TF-IDF表示bug报告和源代码
-使用余弦相似度测量相关性
rVSM
-测量与VSM的相关性
-找到类似的错误报告和相关的源文件
-融合得分值产生最终排名
根据bug报告和源代码学习共享主题,并根据主题衡量相关度
-LDA
-LSI
学习结合大量手工制作的特性
-手工制作的特性(修复bug的近日性、频率...)
-词汇特征+文本相似特征+元数据
前期学习:程序代码 等同于🟰 自然语言
相同的特征表示 vs 不同的语义
如何建模?
两种可能的方式:
~将图分解为一组路径
~直接将图作为一个整体
法1: 把CFG图看作paths
法2: as a whole
bug报告通常提供意外程序行为的高级描述。这样就很难直接匹配关系。
(2023年 4月18日 12:08首次发布)