2.1.1什么是软件测试
软件是由文档、数据以及程序组成的,软件测试是对软件形成过程的文档、数据、以及程序进行的测试。
60%的软件错误不是程序错误,而是分析和设计错误,因此做好软件需求和设计阶段的测试工作非常重要。提倡软件全生命周期测试的理念。
2.1.2什么是软件质量
软件特性的总和,软件满足规定或潜在用户需求的能力。
2.1.3软件测试与软件质量的区别
质量保证(QA):QA的工作是是软件生命周期的管理以及验证软件是否满足规定的质量和用户需求i;主要着眼于软件开发活动种的过程、步骤和产物。
软件测试:关心的不是过程活动,而是对过程的产物以及开发出的软件进行剖析。
2.2软件测试目的
(1)以最少的人力、物力和时间找出软件中潜在的各种错误和缺陷,通过修正各种错误和缺陷提高软件质量,回避软件发布后由于潜在的软件缺陷和错误造成的隐患所带来的商业风险。
(2)测试是对软件质量的度量和评估,以验证软件的质量满足用户需求的程度,为用户选择与接受软件提供有力的依据。
(3)通过测试发现错误,分析软件错误产生的原因还可以帮助发现当前开发工作所用的软件过程的缺陷,以便进行软件过程改进。
2.3软件测试原则
(1)所有软件测试都应该追溯到软件需求。
(2)把“尽早和不断的进行软件测试”作为软件测试者的做右铭。
(3)完全测试是不可能的,测试需要终止。
(4)测试无法显示软件潜在的全部缺陷;
(5)充分注意测试中的集群现象;
(6)程序员应避免检查自己的程序;
2.4软件测试对象
软件包括程序、数据和文档,软件测试并不仅仅是程序测试。软件测试应贯穿于整个软件生命周期中。各阶段有不同的测试对象。需求分析、概要设计、详细设计以及程序编码等各阶段所得的文档,包括需求规格说明、概要设计说明、详细设计说明以及源程序等,都应成为软件测试的对象。
2.5软件测试分类
按照全生命周期的软件测试概念,测试对象应该包括软件设计开发的各个阶段的内容,对于需求和设计阶段的测试和文档的测试将在面向对象于文档测试部分进行描述,这里重点讲述开发阶段的测试和程序测试。
2.5.1按照开发阶段划分
单元测试(模块测试)、集成测试(组装测试,将模块集成为系统部件进行测试)、系统测试(将系统加载到完整环境测试、搭配网络、硬件等)、确认测试(对比需求说明数的测试)和验收测试(对比合同的验收依据的测试)。
2.5.2按照测试实施阶段划分
开发方测试(α测试,开发方验证软件的实现是否满足软件设计说明书的要求)、用户测试(β测试,在用户的应用环境下,用户通过运行和使用软件,检测于核实软件实现是否符合自己预期的需求)、
第三方测试(独立测试、第三方测评机构执行)
2.5.3按照测试技术划分
白盒测试、黑盒测试、灰盒测试或者分为静态测试和动态测试。
静态测试:不运行程序,通过人工对程序和文档进行分析和检查,针对需求说明书、设计说明书程序源代码等进行非运行的检查;
动态测试:通过人工或使用工具运行程序进行检查、分析程序的执行状态;
白盒测试:对程序内部结果的分析、检测来寻找问题。(把测试对象视为一个透明的盒子,清楚了解程序结构和处理过程)
黑盒测试:通过软件的外部表现来发现其缺陷和错误。(把测试对象视为一个黑盒子,完全不考虑程序的内部结构和处理过程)
灰盒测试:介于白盒测试和黑盒测试之间的测试,关注输出对于输入的正确性;同时也关注内部表现;
测试方法和技术的分类与软件开发过程相关联,它贯穿整个软件开发周期。
开发文档和源程序可以应用单元测试应用走查的方法;
单元测试可以应用白盒测试方法;集成测试应用灰盒测试方法;系统测试和确认测试应用黑盒测试方法;
2.6软件测试过程模型
2.6.1V模型
2.6.2W模型
V模型的局限,没有明确的说明早期的测试,不能体现“尽早的和不断的进行测试的原则”。
2.6.3H模型
2.6.4其他模型
1.X模型
2.前置测试模型
2..6.5测试模型的使用
任何模型都不完美,尽可能应用模型中对项目有实用价值的地方,但不强行的为使用模型而使用。实际工作中,在W模型框架下,运用H模型的思想进行独立的测试,并同时将测试和开发紧密结合,寻找恰当的就绪点开始测试并反复迭代测试。
2.7软件生命周期测试策略
2.7.1软件开发与软件测试
软件开发是一个自顶向下,逐步细化的过程。首先,在软件细化阶段定义软件的作用域,然后进行软件需求分析,建立软件的数据域、功能和性能需求、约束及一些有效性准则。接着进入软件开发,进行软件设计,把设计用某种程序设计语言转换成程序代码。而测试过程则是依照相反的顺序安排自低向上,逐步集成的过程。低一级测试为上一级测试做准备。
2.7.2软件测试策略
测试过程按4个步骤进行,单元测试、集成测试(组装)测试、确认测试和系统测试。
1.测试信息流
测试过程需要3类输入:
软件配置:包括软件需求说明、软件设计规格说明、源代码
测试配置:测试计划、测试用例、测试驱动
测试工具:为提高效率,可以使用测试工具支持测试工作;
测试后,要对所有测试结果进行分析,将实测结果与预期结果进行比较。
2.分析设计阶段
2.8软件失效分析与管理
2.8.1软件失效分类
2.8.2缺陷与错误分布
2.8.3缺陷与错误严重和优先级
2.8.4软件错误跟踪管理
2.9白盒测试
2.10黑盒测试
2.11自动化测试
2.11.1自动化测试的基本概念
2.11.2自动化测试的优势与局限性
2.11.3选择合适的自动化测试工具
2.11.4功能自动化测试
2.11.5负载自动化测试