# 软件测试的背景
# 软件缺陷是什么,为什么会出现
只有至少满足下列5个规则之一才称发生了一个软件缺陷(software bug):
- 软件未实现产品说明书要求的功能
- 软件出现了产品说明书指明不应该出现的错误
- 软件实现了产品说明书未提到的功能
- 软件未实现产品说明书虽未明确提及但应该实现的目标
- 软件难以理解、不易使用、运行缓慢或者——从测试员的角度看——最终用户会认为不好
# 软件测试员是谁,他们在做什么
软件测试员是第一个真正使用软件的人,他们的目标是尽可能早的找出软件缺陷,并确保其得以修复。
# 优秀的软件测试员应具备的素质
- 他们是群探索者
- 他们是故障排除员
- 他们不放过任何蛛丝马迹
- 他们具有创造性
- 他们是群追求完美者
- 他们判断准确
- 他们注重策略和外交
- 他们善于说服
# 软件开发的过程
# 常用软件设计文档的清单
- 结构文档
- 数据流图
- 状态转换图
- 流程图
- 代码注释
# 测试提交清单
- 测试计划
- 测试用例
- 缺陷报告
- 测试工具和自动测试
- 度量、统计和总结
# 软件开发生命周期模式
软件产品从最初构思到公开发行的过程称为软件开发生命周期模式。
# 大爆炸模式
- 基本思想:不做任何规划,多个程序员分组分工,按照自己的安排和进度独立开发。
- 优点:简单
- 缺点:
- 没有计划、进度安排和正规开发过程;
- 产品需求比较简单,最终发布日期可以任意更改;
- 对客户要求比较高;
- 没有测试;
# 边写边改模式
- 基本思想:最初只有粗略的想法,接着进行一些简单的设计,然后开始漫长的来回编写、测试和修改缺陷的过程,等到感觉足够了,就发布产品;
- 适合快速制作并且用完就扔(没有后续开发、升级)的小项目,例如原型范例和演示程序;
# 瀑布模式
所谓“软件工程”就是指的瀑布模式;
- 特点:瀑布模式非常强调产品的定义,开发或者代码编制阶段只是其中单独的一块;
- 瀑布模式的各步骤是分立的,没有交叉;
- 瀑布模式无法回溯,一旦进入某个步骤,就要完成该步骤的任务,然后才能向下继续,无法回溯。
- 优点:适合由明确清晰的产品定义和训练有素的开发人员的大项目,较适合测试的模式
- 缺点:不适合变换迅速,在互联网上开发产品的时代。当产品还在细细考虑和定义时,也许制造它的理由可能都变了,市场也许早不存在。
- 对于测试人员,瀑布模式的一个严重问题是,因为测试仅在最后进行,所以一些根本可能出现在最早期,但是直到发布产品时才可能被发现。
# 螺旋模式(测试员喜欢的模式)
- 基本思想:一开始不必详细定义所有细节,从小开始,定义重要功能,努力实现这种功能,接受客户反馈,然后进入下一阶段,重复上述工程,直到得到最终产品。
- 兼有几种模式的特点;
# 软件测试的实质
# 测试的原则
- 完全测试程序是不可能的
- 不完全测试是有风险的行为
- 测试无法显示潜伏的软件缺陷
- 找到的软件缺陷越多,就说明软件缺陷越多
- 程序员也有心情不好的时候
- 程序员往往犯同样的错误
- 某些软件缺陷实乃冰山一角
- “杀虫剂怪事”
- 描述软件测试越多,软件缺陷对于测试的免疫能力也越强的现象,称为杀虫剂怪事。
- 解决方案:为了克服杀虫剂怪事,软件测试员必须不断编写不同的、新的测试程序、对软件的不同部分进行测试、才能找到更多的软件缺陷。
- 并非所有软件缺陷都要修复
- 没有足够的时间
- 不算真正的软件缺陷
- 修复的风险太大
- 不值得修复
- 产品说明书从没有最终版本
# 软件测试的术语和定义
- 软件度量:用于描述软件项目特定属性评价的术语是软件度量
- 精确(precision)和准确(accuracy)
- 精确:落点集中,没命中目标
- 准确:命中目标,落点分散
- 确认(verification)和验证(validation)
- 确认:保证软件符合产品说明书的过程
- 验证:保证软件满足客户要求的过程
- 质量(quality)和可靠性
- 质量:“优秀程度”或者“同类优越性”
- 可靠性:仅是质量的一个方面
- 测试(testing)和质量保证(quality assurance,QA)
- 测试:软件测试员的目标是尽可能早的找出软件缺陷,并确保缺陷得以修复
- 质量保证:软件质量保证人员的主要职责是创建和执行改进软件开发过程并防止软件缺陷发生的标准和方法