1.1 软件测试的基本概念
1. IEEE给出的测试的定义
(1)在特定的条件下运行系统或构件,观察或记录结果,对系统某个方面做出评价;
(2)分析某个软件项目以发现和现存的以及要求的条件之差别(即错误)并评价此软件的特性。
2. 软件测试的特征
(1)可以从需求开始,而不仅仅是代码;
(2)既是静态活动又是动态活动(测试用例);
(3)用来预防失效;
(4)有助于软件生命周期中尽早发现问题,以降低修复缺陷所需的成本;
(5)过程中应创建可重用的测试件。
3.软件测试的目的
(1)目的在于发现错误:以最少的人力、物力、时间找出软件中潜在的各种错误和缺陷,通过修正错误和缺陷提高软件的质量,回避潜在的软件错误和缺陷给软件造成的商业风险
(2)是为了证明程序有错,而不是证明程序无错误:通过分析软件过程中发现的问题可以帮助发现当前开发工作所采用的软件过程的缺陷,以便进行软件过程的改进;同时通过对测试结果的分析整理,可修正软件开发规则,并为软件可靠性分析提供相关的依据。
(3)也对软件进行度量和评估,提高软件质量:评价程序或系统的属性,对软件质量进行度量和评估,以验证软件的质量满足用户的需求,为用户选择、接受软件提供有力的依据
(4)软件测试是工程性的,是以发现错误为目的的。
4.软件测试的关键问题(原则)
(1)软件测试是证伪而非证真
(2)尽早地和不断的进行软件测试
(3)重视无效数据和非预期使用习惯的测试
(4)程序员应避免自己检查自己的程序
(5)充分注意测试中的群集现象
(6)测试用例要定期评审
(7)应当对每一个测试结果做全面的检查
(8)测试现场的保护和资料归档
(9)软件测试的经济型原则
5.评价指导度量 度量指导测试
流程图:
1.2 软件测试的分类
1.测试分类概貌图:
2.各类测试介绍
(1)单元测试
又称模块测试,针对软件设计中的最小单元—— 程序模块,进行正确性的测试工作。单元测试需要从程序的内部结构出发设计测试用例,多个模块可以平行地、独立地进行单元测试。
[1] 单元定义:
c中指一个函数,Java中指一个类,在图形化的软件中,单元一般指一个窗口,一个菜单
[2] 单元测试的六个问题
一. 什么时候进行单元测试?
编码后,编译通过后进行
二. 谁来做单元测试
白盒测试工程师或者开发工程师,最好不要自己测自己的代码
三.单元测试的依据
源程序(代码+注释)+ 《详细设计文档》
四.单元测试的通过标志
程序通过所有单元测试用例
语句的覆盖率达到100%
分支的覆盖率达到80%
五.国内单元测试的现状
简单+没有单元测试计划、单元测试用例和代码覆盖率的统计
六.如何进行单元测试
单元测试主要用白盒测试,先静态地检查代码是否符合规范,然后动态运行代码,检查其实际运行结果,检查程序的运行结果是否正确是一个最基本的要求,还有关注容错处理,程序的边界值处理等。
(2)集成测试
[1] 集成测试定义:
集成测试又叫组装测试,通常在单元测试的基础上,将所有程序模块进行有序的、递增的测试。重点测试不同模块的接口部分
[2] 集成测试的三个问题
一. 什么时候进行集成测试
单元测试和集成测试同步进行,理论上先有单元测试
二. 由谁来做单元测试
白盒测试工程师或者开发工程师
三. 集成测试的依据
单元测试的模块+《概要设计》文档
(3)系统测试
指的是将整个软件系统看为了一个整体进行测试,包括对功能、性能以及软件所允许的软硬件环境进行测试。
目前系统测试主要由黑盒测试工程师在系统集成完毕后进行测试,前期主要测试系统的功能是否满足需求,后期主要测试系统运行的性能是否满足需求,以及系统在不同的软硬件环境中的兼容性等。
(4)验收测试
验收测试指按照 项目任务书或合同、供需双方约定的验收依据文档进行的对整个系统的测试与评审,决定是否接收或拒收系统。在系统测试的后期,以用户测试为主或有测试人员等质量保证人员等共同参与的测试
[1] α测试:指的是由用户,测试人员、开发人员等共同参与的内部测试
[2] β测试:指的是内测后的公测,即完全交给最终用户测试
[3] 正式的验收测试
(5)静态测试
是指不实际运行被测软件,而只是静态地检查程序代码、界面或文档中可能存在的错误过程。
[1] 代码测试:主要测试代码是否符合相应的标准和规范
[2] 界面测试:主要测试软件的实际界面与需求中的说明是否相符
[3] 文档测试:主要测试用户手册和需求说明是否真正符合用户的实际需求
[4] 工具:testbad 、(logiscope)Telelogic ,可以用作Java/c++等
(6)动态测试
是指实际运行被测程序,输入响应的测试数据,检查实际输出结果和预期结果是否相符的过程。
[1] 动态测试方法为:结构和正确性测试
[2] 动态测试工具Robot、QTP等
(7)黑盒测试
指的是把被测软件看做一个黑盒子,我们不关心盒子里面的结构是什么样子的,只关心软件的输入数据和输出数据
(8)白盒测试
指的是把盒子打开,去研究里面的源代码和程序结构。
在软件公司中往往采用黑盒测试和白盒测试相结合的方式
[1] 软件的整体功能和性能进行黑盒测试
[2]软件的源代码采用白盒测试
(9) 功能测试
是黑盒测试的一方面,它检查实际软件的功能是否符合用户的需求。
[1]逻辑功能测试
[2]界面测试(UI)
[3]易用性测试
[4]安装测试
[5]兼容性测试
(10)性能测试
是软件测试的高端测试,通常我们所说的高级软件工程师一般就是性能测试或者白盒测试工程师
[1]时间性能(事务响应时间等)
[2]空间性能(系统资源消耗)
[3]一般性能测试
[4]可靠性测试(稳定性)
[5]负载测试
[6]压力测试
(11)回归测试
是指软件被修改后重新进行的测试,如重复执行上一个版本测试时的用例,是为了保证对软件所做的修改没有引入新的错误而重复进行的测试(如降级bug)。
(12)冒烟测试
是指在对一个新版本进行大规模的测试之前,先验证一下软件的基本功能是否实现,是否具备可测试性
(13)随机测试
是指测试中所有的输入数据都是随机生成的,其目的是模拟用户的真实操作,并发现一些边缘线的错误