第1章 软件测试概论
1.1 概述
1957年,软件测试才开始与调试区别开来,成为一种发现软件缺陷的活动;
20世纪80年代早期,软件测试定义发生了改变,测试不单纯是一个发现错误的过程,而且包含软件质量评价的内容;
20世纪90年代后,测试工具开始盛行,软件测试理论与技术飞速发展。
1.2 发展趋势
软件测试的发展有如下几个趋势:
测试工作将进一步前移;
软件架构师、开发工程师、QA人员、测试工程师将进行更好的融合;
测试职业将得到充分的尊重;
设置独立测试部门越来越成为共识;
测试外包服务快速增长。
第2章 软件测试基础
2.1软件测试与软件质量
2.1.1什么是软件测试
在规定条件下对程序进行操作,以发现错误,对软件质量进行评估。
『使用人工和自动化手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求或是弄清预期结果与实际结果之间的差别。』
2.1.2什么是软件质量
软件特性的总和,软件满足规定或潜在用户用户需求的能力。(1999年国际标准ISO 14598经典定义)
2.1.3软件测试与质量保证的区别
软件测试『质量控制(QC)』:关注的不是过程的活动,而是对过程的产物以及开发出的软件进行剖析。
质量保证(QA):关注的是软件生命周期的管理以及验证软件是否满足规定的质量和用户的需求,着眼于软件开发活动中的过程、步骤和产物。
2.2软件测试的目的
以最少的人力、物力和时间找出软件中潜在的各种错误和缺陷,通过修正各种错误和缺陷提高软件质量,回避软件发布后由于潜在的软件缺陷和错误造成的隐患所带来的商业风险。
Grenford J.Myers就软件测试目的提出了以下观点:
测试是程序的执行过程,目的在于发现错误;
一个好的测试用例在于能够发现至今未发现的错误;
一个成功的测试是发现了至今未发现的错误的测试。
2.3软件测试的原则
所有的软件测试都应该追溯到用户需求;
应该把“尽早地和不断地进行软件测试”作为软件测试者的座右铭;
完全测试是不可能的,测试需要确定最佳终止时间;
测试只能证明软件存在错误而不能证明软件没有错误;
充分注意测试中的集群现象;『所谓的80/20原则』
避免自己编写的测试自己测试;『所谓的“定势思维”问题』
尽量避免测试的随意性。『体现软件测试过程的重要性』
2.4软件测试的对象
软件测试并不仅仅是程序测试,软件测试应该贯穿于整个软件生命周期中。『一切与软件有关的内容(比如过程中的文档、代码等等)都应该是被测试的对象』
为了把握各个环节的正确性,需要进行验证和确认(verification&validation)工作。
验证(verification)是保证软件正确实现特定功能的一系列活动和过程,目的是保证软件生命周期中的每一个阶段的成果满足上一个阶段所设定的目标。
确认(validation)是保证软件满足用户需求的一系列活动和过程,目的是在软件开发完成后保证软件与用户需求相符合。
2.5软件测试分类
2.5.1按照开发阶段划分
按照开发阶段划分软件测试可分为:单元测试、集成测试、系统测试、确认测试和验收测试。
单元测试(也称模块测试)——是针对软件设计的最小单位—程序模块进行正确性检验的测试工作。
集成测试(也称组装测试)——在单元测试的基础上,将所有的程序模块进行有序的、递增的测试。『将经过测试的单元组合在一起进行测试,验证其集成后工作是否正常』
『冒烟测试(也称版本验证测试、提交测试)——是在集成测试完成后,提交下一阶段测试时都需要进行的对程序主要功能进行验证的过程。』
确认测试——通过检验和提供客观证据,证实软件是否满足特定预期用途的需求。
系统测试——在真实或仿真系统运行的环境下,检查完整的程序系统能否和系统(包括硬件、外设、网络和系统软件、支持平台等)正确配置、连接,并满足用户需求。
验收测试——按照项目任务或合同、供需双方约定的验收依据文档进行的对整个系统的测试与评审,决定是否接收或拒收系统。
2.5.2按照测试实施的组织划分
按照测试实施的组织划分,软件测试可分为开发方测试、用户测试(β测试)、第三方测试。
第三方测试——由在技术、管理和财务上与开发方和用户方相对独立的组织进行的软件测试。『测试外包公司主要涉及的就是该种测试』
2.5.3按照测试技术划分
按照测试技术划分,软件测试可分为白盒测试、黑盒测试、灰盒测试;也可分为静态测试和动态测试。
静态测试——是指不运行程序,通过人工对程序和文文件进行分析与检查,包括:走查、符号执行、需求确认等。
动态测试——是指通过人工或使用工具运行程序进行检查、分析程序的执行状态和外部表现。
白盒测试(也称结构测试)——通过对程序内部的分析、检测来寻找问题。『就如一个透明的盒子一样,清楚其内部程序结构和处理过程。』
黑盒测试——通过程序的外部表现来发现其缺陷和错误。『就如一个黑盒子一样,完全看不到程序内部的处理过程,只通过界面回馈进行分析。』
灰盒测试——关注输出对于输入的正确性,同时也关注内部表现,但这种关注不像白盒测试那么详细、完整,只是通过一些表征性的现象、事件、标志来判断内部的运行状态。
2.6软件测试过程模型
软件开发几十年的实践过程中,出现了很多的开发模型,比如瀑布模型、原型模型、螺旋模型、增量模型、V模型、W模型等等
由于模型需结合图形表述较为合适,所以该处就暂不作说明。