软件测试
编码和测试统称为实现。
通常在编写出每个模块之后就对程序做必要的测试,这叫做单元测试。模板的编写者和测试者是同一个人。
之后会进行其他综合测试,由专门的测试人员承担这份工作,也就是软件测试工程师。
软件测试的工作量往往占软件开发总工作量的40%以上。
编码
对于编码有如下要求:
1)程序内部的文档
2)数据说明
3)语句构造
4)输入输出
5)效率:程序运行时间、存储器效率、输入输出的效率
软件测试基础
一、软件测试的目标
1)测试是为了发现程序中的错误而执行程序的过程
2)好的测试方案极可能发现迄今为止尚未发现的错误的测试方案
3)成功的测试是发现了至今为止尚未发现的错误的测试
注:测试只能查找出程序中的错误,而不能证明测试中没有错误。
二、软件测试准则
1)所有的测试都应该能追溯到用户需求
2)应该远在测试开始之前就制定出测试计划
3)把Pareto原理(测试发现的错误中的80%很可能是程序中20%的模块造成的)应用到软件测试中
4)应该从“小规模”测试开始,并逐步进行“大规模”测试
5)穷举测试是不可能的
6)应该由第三方从事测试工作
三、测试方法
白盒测试和黑盒测试,先进行白盒测试,后进行黑盒测试。(随后会有补充)
四、测试步骤
1)模块测试(又被称为单元测试)
2)子系统测试(将经过单元测试的模块放到一起形成一个子系统)
3)系统测试(将经过测试的子系统装配成一个完整的系统来测试)
4)验收测试(将软件系统作为一个单一的整体,它是用户积极参与下进行的,验收测试也被称为确认测试)
5)平行运行(将新旧系统同时运行进行比较,目的是:1,可以在准生产环节中运行新系统而不冒风险;2,用户能有一个熟悉新系统的过程;3,可以验证用户指南和使用手册之类的文档;4,能够以准生产模式对新系统进行全负荷测试,可以用测试结果验证性能指标)
五、测试阶段的信息流
输入的信息由两大类:
1)软件配置,包括需求说明书、设计说明书和源程序说明书清单等
2)测试配置,包括测试计划和测试方案,所谓测试方案不仅仅是测试时使用的输入数据(称为测试用例),还应该包括每组输入数据预定要检验的功能,以及每组数据预期应该取得的正确输出
(测试配置是软件配置的一个子集,也就是说最终交出的软件配置应该包括测试配置和测试的实际结果和测试的记录)
单元测试
一、测试重点
1)模块接口
包括:参数的数目、次序、属性或单位系统与变元是否一致;是否修改了只作输入用的变元;全局变量的定义和用法在各个模块中是否一致
2)局部数据结构
常有局部数据说明、初始化、默认值等方面的错误
3)重要的执行通路
4)出错处理通路
错误常在:1 对错误的描述是难以理解的;2 记下的错误与实际遇到的错误不同;3 在对错误进行处理之前,错误条件已经引起系统干预;4 对错误的处理不正确;5 描述错误的信息不足以帮助确定造成错误的位置
5)边界条件
二、代码审查
三、计算机测试
为每个单元测试开发驱动软件和(或)存根软件
集成测试
一、自顶向下集成
二、自底向上集成
三、在软件结构的较上层使用自顶向下方法与软件结构中较下层使用的自底向上方法相结合。
四、回归测试
确认测试
确认测试也称为验收测试,它的目的是验证软件的有效性。
验证(verification)是指保证软件正确的实现了某个特定要求的一系列活动。
确认(validation)是指保证软件确实满足了用户需求进行的一系列活动。
软件有效性的定义:如果软件的功能和性能如同用户所合理期待的那样,软件就是有效的。
一、软件测试的两种可能结果:
1)功能和性能与用户要求一致,软件是可以接受的。
2)功能和性能与用户要求有差距。
二、软件配置复查
三、Alpha和Beta测试
Alpha测试由用户在开发者的场所进行,并且在开发者对用户的“指导”下进行测试。开发者负责记录发现的错误和使用中遇到的问题。也就是说Alpha测试是在受控的环境中进行的。
Beta测试由软件的最终用户在一个或多个客户场所进行。开发者通常不在场,也就是说是不受控的环境。用户记录在Beta测试中遇到的一切问题(真实的或想象的),并定期将这些报告给开发者。
也就是说,作为计算机/软件的用户而言,我们平常接触最多的Beta版的软件,而Alpha版的软件除了自己开发/测试的基本不会遇到。
白盒测试技术
一、逻辑覆盖
1)语句覆盖
2)判定覆盖
3)条件覆盖
4)判定/条件覆盖
5)条件组合覆盖
6)点覆盖
7)边覆盖
8)路径覆盖
二、控制结构测试
1)基本路径测试
主要是:1 根据过程设计结果画出相应的流图;2 计算流图的环形复杂度,环形复杂度定量度量程序的逻辑复杂性;3 确定线性独立的基本集合;4 设计可强制执行基本集合中每条路径的测试用例
环形复杂度计算方式:V(G)=P+1,P是流图中判定(if等)结点的数目。
2)条件测试
3)循环测试
主要包括:简单循环,嵌套循环,串接循环(也就是两个循环并列,而非包含关系,包含关系时为嵌套循环)
黑盒测试
一、黑盒测试力图解决的问题:
1)功能不正确或遗漏了功能
2)界面错误
3)数据结构错误或外部数据库访问错误
4)性能错误
5)初始化和终止错误
二、设计黑盒测试时应考虑的问题:
1)怎样测试功能的有效性?
2)哪些类型的输入可构成好测试用例?
3)系统是否对特定的输入值特别敏感?
4)怎样划定数据类的边界?
5)系统能够承受什么样的数据率和数据量?
6)数据的特定组合将对系统运行产生什么样影响?
三、等价划分
将输入域划分成若干个数据类,据此导出测试用例。
四、边界值复习
五、错误推测
调试
一、调试途径
1)蛮干法
2)回溯法
3)原因排除法
软件可靠性
软件可靠性是程序在给定的时间间隔内,按照规格说明书的规定成功地运行的概率
错误的含义是开发人员造成的软件差错(Bug)
故障的含义是由错误引起的软件的不正确行为
一、估算平均无故障时间的方法
1)符号
ET——测试之前程序中错误总数
IT——程序长度(机器指令总数)
τ——测试(包括调试)时间
Ed(τ)——在0至τ期间发现的错误数
Ec(τ)——在0至τ期间改正的错误数
2)估计错误总数
植入错误发和分别测试法