1、目录为什么需要单元测试?怎样征服可测性难题?怎样才能高效率测试?怎样保证测试效果?目录怎样征服可测性难题?怎么保证测试效果?怎样才能高效率测试?为什么需要单元测试?从代码特性看必要性单元测试产生哪些效益?单元测试的目标和方法代码基本特性对数据分类处理代码基本特性一个判定一次分类嵌套判定分类翻倍循环判定也是分类代码基本特性分类遗漏处理错误代码基本特性函数无错分类完整+处理正确功能逻辑正确如何检测功能逻辑?如何全面检测功能逻辑?调试临时不完整系统测试不针对具体函数如何检测功能逻辑?依分类列出数据检测是否作了处理处理是否正确单元测试目录怎样征服可测性难题?怎么保证测试效果?怎样才能高效率测试?为什么
2、需要单元测试?从代码特性看必要性单元测试产生哪些效益?单元测试的目标和方法单元测试的目标完整检测功能逻辑找出单元本身的功能逻辑错误并非代替系统测试性能测试优先测试哪些代码?算法密集度测试价值测试效益优先测试功能逻辑复杂的代码20%单元测试的方法分析代码静态动态测试方法执行代码静态测试可能发现不能发现不能发现并非真正检测功能逻辑单元测试的方法分析代码执行代码静态动态测试方法动态测试依数据分类列出输入执行被测程序判断输出是否符合预期目录怎样征服可测性难题?怎么保证测试效果?怎样才能高效率测试?为什么需要单元测试?从代码特性看必要性单元测试产生哪些效益?单元测试的目标和方法效益1:保证代码质量函数只
3、有单元测试全面检测功能逻辑效益2:排错成本最小设计/编码Search()=true简单输出,复杂初始化可测性问题详解外部输入内部输入可测独立运行覆盖输入自然输入不可控失真难于初始化静态输入中断输入调用底层函数与其他代码隔离与依赖系统隔离编译差异平台差异成员变量全局变量参数静态输入局部静态变量每用例不同初值外部无法访问可测性问题详解外部输入内部输入可测独立运行覆盖输入自然输入不可控失真难于初始化静态输入中断输入调用底层函数与其他代码隔离与依赖系统隔离编译差异平台差异成员变量全局变量参数中断输入中断调用某些代码全局变量被修改影响功能逻辑可测性问题详解外部输入内部输入可测独立运行覆盖输入自然输入不可
4、控失真难于初始化静态输入中断输入调用底层函数与其他代码隔离与依赖系统隔离编译差异平台差异成员变量全局变量参数目录为什么需要单元测试?怎样征服可测性难题?可测性问题详解解决可测性问题怎样才能高效率测试?怎样保证测试效果?需解决的可测性问题外部输入内部输入可测独立运行覆盖输入自然输入不可控失真难于初始化静态输入中断输入调用底层函数与其他代码隔离与依赖系统隔离编译差异平台差异成员变量全局变量参数被测文件与其他代码隔离(VU)测试任务一次隔离外围文件与其他代码隔离(VU)测试任务一次隔离其他文件自动打桩与其他代码隔离(VU)测试任务一次隔离需解决的可测性问题外部输入内部输入可测独立运行覆盖输入自然输入
5、不可控失真难于初始化静态输入中断输入调用底层函数与依赖系统隔离编译差异平台差异成员变量全局变量参数与其他代码隔离解决编译与平台差异(VU)转定义关键字解决数据长度差异屏蔽特殊关键字或代码片断需解决的可测性问题外部输入内部输入可测独立运行覆盖输入自然输入不可控失真难于初始化静态输入中断输入调用底层函数与依赖系统隔离编译差异平台差异成员变量全局变量参数与其他代码隔离可编程的桩能解决内部输入吗?自然输入不可控失真难于初始化静态输入中断输入调用底层函数内部输入不需特别解决调用实际代码调用实际代码无函数调用不确定调用可编程的桩能解决内部输入吗?自然输入不可控失真难于初始化静态输入中断输入调用底层函数内部
6、输入简单情形多次调用一个桩函数-桩多对多用例多修改繁用命名法匹配用例与桩输出需解决的可测性问题外部输入内部输入可测独立运行覆盖输入自然输入不可控失真难于初始化静态输入中断输入调用底层函数外部输入内部输入覆盖输入调用底层函数与依赖系统隔离编译差异平台差异成员变量全局变量参数与其他代码隔离解决底层函数内部输入(VU)无须编程不可控失真难于初始化解决底层函数返回值参数成员全局变量复杂类型同一用例多次调用每次不同需解决的可测性问题外部输入内部输入可测独立运行覆盖输入自然输入不可控失真难于初始化静态输入中断输入调用底层函数与依赖系统隔离编译差异平台差异成员变量全局变量参数与其他代码隔离解决静态输入(VU
7、)控制静态输入(双击)需解决的可测性问题外部输入内部输入可测独立运行覆盖输入自然输入不可控失真难于初始化静态输入中断输入调用底层函数与依赖系统隔离编译差异平台差异成员变量全局变量参数与其他代码隔离解决中断输入(VU)模拟中断(右键菜单)填写可能被中断修改并映响功能逻辑的全局变量需解决的可测性问题外部输入内部输入可测独立运行覆盖输入自然输入不可控失真难于初始化静态输入中断输入调用底层函数与依赖系统隔离编译差异平台差异成员变量全局变量参数与其他代码隔离内部输入解决之后底层函数类别状态操作系统API支持库的函数其他模块的接口本模块其他函数未实现被隔离有错误难于初始化 内部输入直接设定在用例中直接设定
8、环境温度内部输入解决之后:嵌入式测试效率高不需上传下载代码功能逻辑与平台无关功能逻辑无关影响功能逻辑不必处置内部输入嵌入式API可在PC上可信测试目录为什么需要单元测试?怎样征服可测性难题?可测性问题详解解决可测性问题怎样才能高效率测试?怎样保证测试效果?小结不解决可测性,无法测试关键:内部输入方法:底层模拟目录为什么需要单元测试?怎样才能高效率测试?怎样征服可测性难题?似是而非的高效率高效率测试:四两拔千斤怎样保证测试效果?高效率调试、排错、开发全自动生成用例可能发现不能发现作为人工方法的补充工具不能自动了解代码功能自动方法有多大意义?intadd(inta,intb)returnab;最简
9、单代码最简单错误自动方法并未检测功能逻辑自动静态或动态均无法发现得不偿失的高效率生成大量用例手工修改/删除字符串左边空格char*TrimLeft(char*)/检查用户名的合法性并删除非法字符char*CheckUserName(char*)工具不了解差别生成的多是垃圾选择修改比直接设定更费时复杂类型生成海量垃圾/假如结构DATA有100个域intfunc(DATA*pData)工具不知道哪个域需初始化哪个域需判断输出生成海量垃圾目录为什么需要单元测试?怎样才能高效率测试?似是而非的高效率高效率测试:四两拔千斤怎样保证测试效果?高效率开发怎样征服可测性难题?四两拔千斤人的智慧+工具的效率生成
10、测试代码生成测试用例找出遗漏用例人工及时干预生成代码(VU)指定需要的数据避免遗漏和垃圾四两拔千斤人的智慧+工具的效率生成测试代码生成测试用例找出遗漏用例自动表格化(VU)外部输入内部输入预期输出自动移到表格中人工干预的数据生成(VU)根据有效范围分段点生成数据指定组合生成用例(VU)自动列出可能组合四两拔千斤人的智慧+工具的效率生成测试代码生成测试用例找出遗漏用例实现高覆盖很困难语句覆盖条件覆盖分支覆盖判定条件覆盖(C/DC)修正判定条件覆盖(MC/DC)路径覆盖白盒覆盖白盒覆盖逾后逾难遗漏用例难以找出修正判定条件覆盖(MC/DC)每个条件独立影响判定结果A&(B|C)本身相反其他相同结果相
11、反快速找出遗漏用例(VU)近似用例修改提示根据提示修改近似用例快速完成白盒覆盖(VU)A&(B|C)&(D&E)|(F|G)&(H|I|J)|K)MC/DC难吗?三分钟四两拔千斤人的智慧+工具的效率生成测试代码生成测试用例找出遗漏用例目录为什么需要单元测试?怎样才能高效率测试?似是而非的高效率高效率测试:四两拔千斤怎样保证测试效果?高效率开发怎样征服可测性难题?单元测试对开发的促进测试驱动开发可视编程快速排错提高调试效率可视编程(VU)程序行为一目了然单元测试对开发的促进测试驱动开发可视编程快速排错提高调试效率快速排错(VU)对比输入输出与已执行代码,容易找出错误原因单元测试对开发的促进测试驱
12、动开发可视编程快速排错提高调试效率提高调试效率(VU)支持直接发起调试根据错误自动选择调试输入无限制后退重复支持调试过程中切换输入目录为什么需要单元测试?怎样才能高效率测试?似是而非的高效率高效率测试:四两拔千斤怎样保证测试效果?高效率开发怎样征服可测性难题?小结忽视人的智慧不能真正高效率真正的高效率=人的智慧+工具的效率重点:代码生成用例生成找出遗漏促进开发:可视编程排错调试目录为什么需要单元测试?怎样保证测试效果?怎样征服可测性难题?怎样才能高效率测试?基本指标:白盒覆盖多角度保证测试效果衡量效果的指标:白盒覆盖语句覆盖条件覆盖分支覆盖判定条件覆盖(C/DC)修正判定条件覆盖(MC/DC)
13、路径覆盖白盒覆盖MC/DC是欧美航空标准MC/DC不保证代码组合覆盖最强组合:MC/DC-路径覆盖支持六种覆盖(VU)语句覆盖条件覆盖分支覆盖C/DCMC/DC路径覆盖标示清晰简明(VU)未覆盖语句T未覆盖真值F未覆盖假值M未覆盖MC/DC未覆盖分支未覆盖路径目录为什么需要单元测试?怎样保证测试效果?怎样才能高效率测试?基本指标:白盒覆盖多角度保证测试效果怎样征服可测性难题?仅有白盒覆盖是不够的不能发现代码缺失不能发现用例未反映功能人工检查跟着代码走容易遗漏边界非法输入自动边界测试从哪些角度保证测试效果?黑 盒将数据分类集中,人工检查白 盒统计覆盖率,找出遗漏用例自 动捕捉易遗漏的边界非法错误
14、黑盒白盒自动相结合多角度保证效果(VU)效果问题数据分类集中便于检查黑盒方法白盒方法自动方法自动边界用例测试判定条件覆盖(C/DC)语句覆盖条件覆盖分支覆盖修正判定条件覆盖(MC/DC)路径覆盖将数据分类集中(VU)便于检查数据及组合的完整性,有效检测代码缺失多角度保证效果(VU)效果问题数据分类集中便于检查黑盒方法白盒方法自动方法自动边界用例测试判定条件覆盖(C/DC)语句覆盖条件覆盖分支覆盖修正判定条件覆盖(MC/DC)路径覆盖全自动生成边界用例(VU)根据预设值全自动生成用例检测极端错误自动用例的合理用途多角度保证效果(VU)效果问题数据分类集中便于检查黑盒方法白盒方法自动方法自动边界用例测试判定条件覆盖(C/DC)语句覆盖条件覆盖分支覆盖修正判定条件覆盖(MC/DC)路径覆盖目录为什么需要单元测试?怎样保证测试效果?怎样才能高效率测试?基本指标:白盒覆盖多角度保证测试效果怎样征服可测性难题?小结白盒覆盖是基本指标黑盒白盒自动相结合总结:需要什么样的工具?现状工具要求可测性 未解决内部输入复杂项目无法测试解决内部输入复杂项目易以测试测试效率忽视人的智慧得不偿失人的智慧+工具效率自动代码用例生成找出遗漏支持可视编程测试效果难以发现代码缺失覆盖强度不足难以实现高覆盖数据自动分类集中支持最强覆盖组合快速找出遗漏用例自动检测极端错误谢谢!






