软件测试
编码和测试统称为实现。
通常在编写出每个模块之后就对程序做必要的测试,这叫做单元测试。模板的编写者和测试者是同一个人。
之后会进行其他综合测试,由专门的测试人员承担这份工作,也就是软件测试工程师。
软件测试的工作量往往占软件开发总工作量的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测试由用户在开发者的场所进行,并且在开发者对用户的“指导”下进行测试。开发者负责记录发现的错误和使用中遇到的问题。