基于源码的疑问代码和不良编程习惯检测
| 摘要 | 第1-5页 |
| ABSTRACT | 第5-9页 |
| 第一章 绪论 | 第9-12页 |
| ·引言 | 第9页 |
| ·软件测试的发展历程 | 第9-10页 |
| ·软件测试的意义 | 第10-11页 |
| ·主要工作 | 第11页 |
| ·论文结构 | 第11-12页 |
| 第二章 软件测试及软件测试工具 | 第12-18页 |
| ·软件测试概念 | 第12页 |
| ·软件测试方法 | 第12-15页 |
| ·静态测试 | 第12-13页 |
| ·动态测试 | 第13页 |
| ·黑盒测试 | 第13-14页 |
| ·白盒测试 | 第14页 |
| ·基于模型的软件测试 | 第14-15页 |
| ·静态测试工具实例 | 第15-18页 |
| ·Lint | 第15-16页 |
| ·Klocwork | 第16页 |
| ·Findbugs | 第16-17页 |
| ·DTS | 第17-18页 |
| 第三章 疑问代码和 DTS静态测试工具 | 第18-32页 |
| ·编译技术简述 | 第18-21页 |
| ·疑问代码的产生 | 第21-24页 |
| ·类型兼容问题 | 第21页 |
| ·编译链接缺陷 | 第21页 |
| ·面向对象机制 | 第21-22页 |
| ·控制流和逻辑 | 第22页 |
| ·语言设计问题 | 第22-23页 |
| ·编译器实现差异 | 第23-24页 |
| ·DTS静态测试工具 | 第24-32页 |
| ·简介 | 第24-25页 |
| ·上下文中的数据结构 | 第25-29页 |
| ·状态机运行机制 | 第29-32页 |
| 第四章 疑问代码模式及其检测 | 第32-59页 |
| ·独立于语言的模式 | 第32-38页 |
| ·定义(赋值)使用关系 | 第32-34页 |
| ·自赋值 | 第34-35页 |
| ·空语句嫌疑 | 第35-36页 |
| ·空的条件语句块 | 第36页 |
| ·嫌疑的赋值运算 | 第36-37页 |
| ·条件分支相同 | 第37页 |
| ·比较运算 | 第37页 |
| ·移位运算问题 | 第37-38页 |
| ·C\C++的疑问模式 | 第38-53页 |
| ·内存分配 | 第38-39页 |
| ·对象生命周期管理 | 第39页 |
| ·sizeof相关问题 | 第39-40页 |
| ·运算符优先级 | 第40-41页 |
| ·运算符new和delete的定义 | 第41-42页 |
| ·未定义的计算 | 第42-43页 |
| ·枚举类型比较 | 第43页 |
| ·运算符重载 | 第43页 |
| ·无返回值路径 | 第43页 |
| ·无效和隐藏的typedef | 第43-44页 |
| ·文件10操作 | 第44-46页 |
| ·语言惯用型 | 第46-47页 |
| ·逻辑结构疑问 | 第47-48页 |
| ·语法结构一致性 | 第48页 |
| ·不兼容的类型转换 | 第48-50页 |
| ·非一致的结构 | 第50-51页 |
| ·构造函数 | 第51-52页 |
| ·对象泄漏 | 第52-53页 |
| ·Java的疑问模式 | 第53-57页 |
| ·类型转换不准确 | 第53-54页 |
| ·多余的锁操作 | 第54页 |
| ·字符串比较 | 第54-55页 |
| ·怪异的赋值表达式 | 第55-56页 |
| ·无后效语句 | 第56页 |
| ·类的设计问题 | 第56-57页 |
| ·疑问模式和检测方法总结 | 第57-59页 |
| 第五章 重复代码检测方法 | 第59-72页 |
| ·背景介绍 | 第59页 |
| ·重复代码及其检测技术 | 第59-61页 |
| ·重复代码的产生 | 第59-60页 |
| ·重复代码分类 | 第60页 |
| ·检测技术分类 | 第60-61页 |
| ·设计与分析 | 第61-67页 |
| ·算法设计 | 第61-67页 |
| ·复杂度分析 | 第67页 |
| ·实验结果 | 第67-71页 |
| ·单文件测试结果对比 | 第67-69页 |
| ·多文件测试结果对比 | 第69-71页 |
| ·分析与评价 | 第71-72页 |
| 第六章 总结与展望 | 第72-73页 |
| ·工作总结 | 第72页 |
| ·展望 | 第72-73页 |
| 参考文献 | 第73-75页 |
| 附录 | 第75-76页 |
| 致谢 | 第76-77页 |
| 攻读硕士学位期间发表的学术论文目录 | 第77页 |