软件测试
概念:
软件测试:对软件计划、软件设计、软件编码进行查错和纠错的活动(包括代码执行活动和人工活动)
程序测试:对编码阶段的语法错、语义错、运行错进行查找的编码执行活动。找出编码中错误的代码执行活动。
各种软件错误的出现比例:
(1)功能错,27%,是需求分析设计不完整而引起的
(2)系统错,16%,是总体设计错误而引起的
(3)数据错,10%,由编码错误引起。
(4)编码错,4%,程序员编码错误引起。
(5)其他错,16%,由文档错和硬件错引起。
测试信息流(3个输入,3个输出):
(1)软件配置:软件的需求规格说明,软件设计说明,原程序
(2)测试配置:测试计划,测试用例,测试程序
(3)测试工具:专门数据库,工具
(4)测试结果分析
(5)排错(调试)
(6)修正后的文档再测试
测试用例设计:
黑盒测试:功能测试,数据驱动,测试程序的接口、功能
白盒测试:结构测试,逻辑驱动,测试模块的独立路径(关键路径)、逻辑条件(成立/不成立)、循环边界(0次,1次,最大次循环)
逻辑覆盖:语句覆盖,判定覆盖,条件覆盖,判定-条件覆盖,条件组合覆盖,路径覆盖
条件测试路径选择:嵌套式分支结构,连锁式分支结构
循环测试路径选择:简单循环,嵌套循环,连锁循环,非结构循环
单元测试:先做白盒测试
集成测试/系统测试:黑盒测试
黑盒测试的测试用例设计:
A.等价类划分
1.划分等价类,画出等价类表(输入条件 有效等价类 无效等价类)
2.设计测试用例
B.边界值分析(正好等于,刚刚大于,刚刚小于---取值范围,数据个数)
C.错误推测法:列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据他们选择测试用例。
D.因果图:如果在测试时必须考虑输入条件的各种组合,可使用一种适合于描述对于多种条件的组合,相应产生多个动作的形式来设计测试用例,这个就需要利用因果图。(因果图最终生成的就是判定表)
软件测试的策略:
1.单元测试(Unit Testing,模块测试)
内容:模块接口,局部数据结构,边界条件,独立路径,出错处理
模块接口:测试调用这个模块传入的数据、被调用的模块运算完输出的结果,全局量。
步骤:驱动模块(drive)à被测模块à桩模块(stub)
常见错误清单:
A.模块接口检查表
1.模块接受的输入参数个数与模块的变元个数是否一致
2.参数与变元的属性是否匹配
3.参数与变元所用的单位是否一致
4.传递给被调用模块的变元的数目是否等于那个模块的参数的数目
5传递给被调用模块的变元属性和参数的属性是否一致
6.传递给被调用模块的边缘的单位和该模块参数的单位是否一致
7.传递给内部函数的变元属性、数目和次序是否正确
8.是否修改了只是作为输入用的变元
9.全程变量的定义在各个模块中是否一致
10.有没有把常数当做变量来传递
B.完成外部输入/输出时的检查表
1.文件属性是否正确
2.Open语句是否正确
3.格式说明与输入/输出语句给出的信息是否一致
4.缓冲区容量与记录长度是否匹配
5.在进行读写操作之前是否打开了文件
6.对结束文件条件的判断和处理是否正确
7.对输入/输出错误的处理是否正确
8.有没有输出信息中有正文错误
C.模块局部数据结构检查表
1.不正确或不一致说明
2.错误的初始值或错误的缺省值
3.变量名拼写错或缩写错
4.不相容的数据类型
5.下溢、上溢或是地址错误
2.组装测试(Integrated Testing)——接口测试
把模块组装成为系统的方式:一次性组装方式(big bang),增值式组装方式
一般采用混合式,顶层模块自顶向下,底层模块自底向上,先测试关键模块
3.确认测试(Validation Testing)——需求测试,有效性测试
1.进行有效性测试(黑盒测试)
2.软件配置复查
4.验收测试(Acceptance Testing)
测试:系统的功能、性能+可移植性、可维护性。
验收测试,确认文档:
(1) 测试的分析报告
(2) 用户手册,操作手册
(3) 开发的总结报告
5.系统测试(System Testing)
α测试:1个用户(在开发者指导下)进行的测试,软件开发者记录错误和使用中出现的问题。
β测试:在开发者不能控制的环境下进行,用户记录遇到的问题,报告给开发者。所有测试的最后一关。
测试种类:功能测试,可靠性测试,强度测试,性能测试(响应时间、存储量、缓冲器大小、处理的精度),恢复测试,启动/停止测试,配置测试,安全性测试,可使用性测试,可支持性测试,安装测试,过程测试,互连测试,兼容性测试,容量测试,文档测试,
调试——方法:
强行排错:在程序可能出现问题的地方,安排一些输出语句,然后把可能出现错误的数据或单元打印出来,然后在大批量的数据中寻找出错的数据。
回溯法调试
归纳法调试
演绎法调试