软件测试的概念与目的
- 正向思维(让自己相信软件是没有问题的)
出发点: 使自己确信产品是能够正常工作的评价一个程序和系统的特性或能力,并确定它是否达到期望的结果, 软件测试就是以此为目的的任何行为. - 反向思维(证明软件有错的)
- Glenford·J·Myers (《软件测试的艺术》的作者)
- 软件测试是为了发现错误而执行一个程序或者系统的过程
- 测试是为了证明程序有错, 而不是证明程序无错误
- 一个好的测试用例在于它能发现以前未发现的错误
- 一个成功的测试是发现了以前未发现的错误的测试
- IEEE(国际电气和电子工程师协会)定义的测试
- 在规定条件下运行系统或者构件的过程: 观察和记录结果,并对系统或者构件的某些方面给出评价
- 分析软件项目的过程:检测现有状况和所需状况之间的不同,并评估软件项目的特性
- 广义软件测试定义
- 软件测试是对软件形成过程中的所有工作产品(包括程序以及相关文档)进行的测试,而不仅仅是对程序的运行进行测试
- 验证(Verification)
- 通过检查和提供客观证据来证实指定的需求是否满足
- 确认(Validation)
- 通过检查和提供客观证据来证实特定目的的功能或应用是否已经实现
- 验证(Verification)
- 软件测试是对软件形成过程中的所有工作产品(包括程序以及相关文档)进行的测试,而不仅仅是对程序的运行进行测试
- 软件测试的目的
- 以最少的人力,物力和时间找出软件中潜在的各种错误和缺陷, 通过修正各种错误和缺陷保障软件质量, 避免软件发布后由于潜在的软件错误和缺陷造成的隐患所带来的商业风险.同时利用测试过程中得到的测试结果和测试信息,作为后续项目开发和测试过程改进的重要输入,避免在将来的项目开发和测试中重复同样的错误;采用更加高效的测试管理手段,提高软件测试的效率和软件产品的质量
- 测试需要保证以下两点:程序做了它该做的事情以及程序没有做它不该做的事
- Ps: 一句话的记忆: 软件测试的目的是尽早的找出软件产品中潜藏的缺陷,并确保其得以修复
软件测试仅仅只是软件质量保证的重要手段之一,想要真正的提高软件产品的质量,需要通过持续不断过程,改进.
测试(test)和调试(debug)的区别
- 在目标, 方法和思路上有所不同
- 调试目标: 没有错误
- 测试目标: 确保发布的软件零缺陷(有缺陷但用户可以容忍和接受的也叫零缺陷)
- 调试方法: 依赖工具
- 测试方法: 可以依赖手工(例如白盒测试中的代码走查)也可以依赖工具
- 调试对象: 代码
- 测试对象: 软件开发过程中的文档, 数据以及代码
- 测试是从已知的条件开始, 使用预先定义的过程, 并且有预知的结果; 调试时从未知的条件开始, 结束的过程可能不可预计
- 测试可以计划, 可以预先定制测试用例和过程, 工作进度可以度量;描述调试的过程或持续时间相对比较困难
- 测试的对象包括软件开发过程中的文档, 数据以及代码,而调试的对象一般来说只是代码
软件的定义
- 程序
- 数据
- 文档
软件项目人员
- 项目经理:
驱动整个项目运转, 负责制定计划, 安排人力, 管理进度, 协调团队, 进行重大决策. - 架构师/系统工程师:
技术专家, 经验丰富, 负责整个系统的体系架构的设计以及关键模块的设计 - 程序员/开发人员:
设计, 编写软件, 并修复软件中的缺陷 - 测试工程师:
负责找出软件产品存在的问题并报告 - 美术工程师:
完成软件设计师安排的功能界面设计 - 产品经理(可由市场人员兼任):
对所负责的产品进行策划和管理
QA与QC的区别:
- QA:软件质量保证(保证软件研发过程的质量)
- QC:软件质量控制(即软件测试)保证软件最终产物的质量
什么是软件工程
- 软件工程包括两个方面的内容: 软件开发技术和软件项目管理
软件的生命周期
立项 --> 需求分析 --> 设计,编码,测试 --> 发布 --> 运行维护 --> 淘汰
软件研发模型
- 瀑布模型
定义阶段: 计划, 需求分析(该阶段完成后生成需求说明书)
开发阶段: 设计, 编码, 测试(开发阶段, 设计说明书)
维护阶段: 运行,维护
特点: 上一阶段的变换结果是下一阶段的变换的输入, 相邻两个阶段具有因果关系, 紧密相联 - 快速原型
需求的采集和细化 --> 快速设计 --> 建造原型 --> 用户评价原型 --> 对原型加工(需求精确化) --> 产品样品(需求确认)
优点: 克服瀑布模型的缺点,减少由于软件需求不明确带来的开发风险
缺点: 所选用的开发技术和工具不一定符合主流的发展; 快速建立起来的系统结构加上连续的修改可能会导致产品质量低下 - 增量模型
- 增量模型是把待开发的软件系统模块化, 将每个模块作为一个增量组件, 从而分批次的分析,设计,编码和测试这些增量组件.
- 相对于瀑布模型而言,采用增量模型进行开发,开发人员不需要一次性的把整个软件产品提交给用户,而是可以分批次进行提交
优点: 将软件系统模块化,可以分批次提交产品,使用户可以及时了解软件项目的进展
- 相对于瀑布模型而言,采用增量模型进行开发,开发人员不需要一次性的把整个软件产品提交给用户,而是可以分批次进行提交
- 迭代模型
开发迭代是一次完整的经过所有工作流程的过程:需求分析, 设计, 实施和测试工作流程