1、软件测试基础
1、软件的定义与分类
1.1、软件的组成
- 程序
- 数据
- 文档
1.2、生命周期
1.3、软件的分类
- 按层次划分
- 系统软件
- 应用软件
- 按组织划分
- 商用软件
- 开源软件
- 按结构划分
- 单机软件
- 分布式软件
2、软件的缺陷与由来
2.1、软件缺陷的定义
- 两条铁律
- 所有不满足软件需求的或者超出需求的都是缺陷
- 没有不存在缺陷的软件,只有尚未发现的缺陷
- 具体表现
- 软件为实现产品说明书要求的功能
- 软件说明书指明不应该的出现的功能
- 软件出现了说明书未提到的功能
- 软件未实现产品说明书虽未明确提及但应该实现的目标
- 软件难以理解,不易使用,运行缓慢或者(从测试角度)最终用户会认为不好
2.2、软件测试的由来
- 起源于上世纪七十年代中期
- 《测试数据的原理》
- 《软件测试的艺术》
- 20世纪80年代早期,软件行业开始逐渐关注软件产品的质量,并在公司建立了软件质量保证部门(QA)
3、软件测试的定义和目的
-
正向思维的定义
- 出发点:使自己确信产品是能够正产工作的评价一个程序和系统的特性和能力并确定它是否可以达到结果,软件测试就是以此为目的的任何行为
-
反向思维的定义
- Glenford.j.Mypers《软件测试的艺术》
- 出发点:测试是为了发现错误而执行一个程序或者系统的过程
- 测试是为了证明程序是有错的,而不是为了证明程序无误
- 一个好的测试用例在于它能发现以前为发现的错误
- 一个成功的测试时发现了以前未发现的测试
-
IEEE定义的软件测试
- 在规定条件下运行系统或构建的过程:观察记录结果,并对系构件方面给予某些评价
- 分析软件项目的过程:检测现有状况与所需状况的不同,并评估软件项目的特性
-
广义的软件测试
-
软件测试是对软件形成过程中所有工作产品(包括程序及相关文档)进行的测试,不仅仅是对程序的运行进行测试
-
确认(Validation)(对不对)
通过检查和提供客观证据来证实特定目的的功能或者应用是否已经实现
-
验证(Verification)(好不好)
通过检查和提供客观证据来证实指定的需求是否满足
-
-
软件测试的目的
- 以最少的人力、物力找出软件中潜在的各种错误和缺陷,保证各种错误和缺陷得以修复,避免软件发布后由于潜在的软件错误和缺陷造成的隐患所带来的商业风险
- 同时利用测试过程得到的测试结果和测试信息,作为后续的项目开发和测试过程改进的重要输入,避免在将来的开发和测试中重复同样的错误。
- 采用更加高效的测试管理手段,提高软件测试的效率和产品质量
-
测试与调试的区别
测试 调试 主体 测试人员 开发人员 目标 找bug 修复bug 方法 等价类,边界值 源代码,逻辑 思路 反向思维 正向思维 - 在主体、目标、方法、思路各不同
- 测试是从已知的条件开始,使用预先定义的过程,并且有预知的结果,调试是从未知的条件入手,结束的过程可能不可预计
- 测试可以计划,可以预先制定测试用例和过程,工作进度可以度量,描述调试的过程或者持续时间比较困难
- 测试的对象包括文档、数据、代码、测试的对象一般只是代码
-
软件测试的对象
- 软件生命周期中文档、数据、代码
2、软件工程与测试
2.1、软件危机与软件工程
2.1.1、软件危机
落后的软件生产方式无法满足迅速增长的软件需求,从而导致软件开发与维护过程中出一系列严重问题的现象。
2.1.2、软件工程
- 基于软件危机对于发展的阻碍,1968年,在联邦德国召开的国际会议上,北大西洋公约组织计算机科学家讨论软件危机。提出了软件工程这个名词,从此软件生产进入工程化时代
- 软件工程主要包括以下两个方面:
- 软件开发技术:软件开发方法学,软件工具,软件工程环境
- 软件项目管理:软件质量,项目估算,进度控制,人员组织,配置管理,项目计划
- 总结:
- 引起软件危机的主要问题就是软件质量问题
- 软件工程解决的就是软件质量问题
- 软件测试是软件质量管理体系中一个非常重要的手段
2.2、软件的生命周期
2.3、软件开发模型
2.3.1、瀑布模型
最早提出的软件开发的过程模型
-
瀑布模型:
-
存在的问题:
- 强调时间顺序严格执行,前阶段不完成,后面环节无法开展
- 将测试放在了编码之后。没有体现出测试贯穿软件生命周期的原则,无法避免需求问题一直延续到编码结束才暴露或被发现的弊端
-
总结:
- 为项目提供了按阶段划分的监测点
- 当前一阶段的任务完成后,只需关注后续阶段
-
缺点:
- 各阶段划分完全固定,阶段之间产生的大量文档,极大增加了工作量。
- 线性开发,用户要等到整个过程的末期才能见到开发成果,从而增加了开发风险
- 瀑布模型不适应用户需求的变化
-
2.3.2、螺旋模型
- 螺旋模型:一种演化软件开发过程的模型,它兼顾了快速模型的迭代特征以及瀑布模型的系统化与严格监控
- 引入了其他模型不具备的风险分析,使软件在无法排除重大风险时有机会停止,以减少损失
- 螺旋模型更适合大型的昂贵的系统级别的软件应用
2.3.3、迭代模型
- 迭代模型(大版本更新):
- 概念:迭代包括产生产品发布(稳定、可执行的产品版本)的全部开发活动和要使用该发布必须的所有其他元素
- 在某种程度上,开发迭代是一次完整的经过所有工作流程的过程:需求分析、设计、实施和测试的工作流程
- 迭代过程具有以下优点:
- 降低在一个增量上的开发风险
- 降低了产品无法按照几点进度进入市场的风险
- 加快整个开发工作的进度
- 迭代过程这种模式使得适应需求变化会更好一些
2.3.4、敏捷模型
- 敏捷模型:
- 敏捷宣言:又叫敏捷软件开发宣言,正式宣布了四种核心价值与12条法则,可以指导迭代的软件开发方法
- 四种核心价值:
- 个体和互动高于流程和工具
- 工作的软件高于详细的文档
- 客户合作高于合同谈判
- 响应变化高于遵循计划
2.3.5、快速原型模型
- 快速原型模型:
- 应用领域越来越广泛
- 原型:是一个软件的模型,具有最简单的功能,以及详细的布局与模块分布布局
- 典型的工具:axure,制作原型
- 缺点:原型设计比较难,不利于开发人员对产品的拓展
3、软件测试的过程
3.1、软件测试的流程
3.2、软件测试过程的模型
- 如同软件开发过程一样,软件测试也有模型,软件测试过程是一种抽象的模型,用来定义软件测试的流程和方法
- 测试过程的质量将直接影响测试结果的准确性和有效性。软件测试过程和软件开发过程一样,都遵循软件工程的原理和管理原理
3.2.1、V模型
- 揭示了开发过程与测试过程各阶段的对应关系
- 缺点和不足:
- V模型将测试定义在编码之后,忽视了测试对于需求分析,系统设计的验证
- 需求的满足情况一直到后期的验收才被验证
- 没有"体现出尽早和不断进行软件测试"的原则
3.2.2、W模型
- 揭示了开发过程与测试过程各阶段的对应关系
- 缺点和不足:
- V模型将测试定义在编码之后,忽视了测试对于需求分析,系统设计的验证
- 需求的满足情况一直到后期的验收才被验证
- 没有"体现出尽早和不断进行软件测试"的原则