软件测试方法和技术,考试重点笔记
软件测试方法和技术,考试重点笔记(河北工程职业技术学院-软件学院)
——参考书目《软件测试方法和技术》朱少民(主编),清华大学出版社。
第一章、引论
为什么要进行软件测试?
-
简答:为了保证软件质量。
-
大题:
- 软件的某些缺陷只有在测试时才会发现;
- 提供对系统质量相关的信息和信息;
- 预防错误的发生;
什么是软件测试?
-
在特定的条件下运行系统或构件,观察或记录结果,对系统 的某个方面做出评价;
-
分析某个软件项以发现现存的和要求的条件之差别(即错误) 并评价此软件项的特性;
软件测试的定义?
标准观点来看,可以定义为“验证”和“有效性确认”活动够成的整体,即软件测试V&V。
- “验证”是检验软件是否已正确地实现了软件需求规格说明书所定义的系统功能和特性。验证过程提供证据表明软件相关产品与所有生命周期活动的要求(如正确性、完整性、一致性、准确性等)一致。相当于以软件产品设计规格说明书为标准进行软件测试的活动。
- “有效性确认”是确认所开发的软件是否满足用户真正需求的活动。一切从客户出发,理解客户的需求,并对软件需求定义和设计存疑,以发现需求定义和产品设计中的问题。主要通过各种软件评审活动来实现,保证让客户参加评审和测试活动。
软件测试4个阶段?(软件测试级别有哪4个?)
单元测试、集成测试、系统测试、验收测试。
- 单元测试 是对软件组成单元进行测试。其目的是检验软件基本组成单位的正确性。测试的对象是软件设计的最小单位:模块。又称为模块测试。
- 集成测试 也称联合测试(联调)、组装测试,将程序模块采用适当的集成策略组装起来,对系统的接口及集成后的功能进行正确性检测的测试工作。集成主要目的是检查软件单位之间的接口是否正确。
- 将软件系统看成是一个系统的测试。包括对功能、性能以及软件所运行的软硬件环境进行测试。时间大部分在系统测试执行阶段,包括回归测试和冒烟测试。
- 验收测试 是部署软件之前的最后一个测试操作。它是技术测试的最后一个阶段,也称为交付测试。验收测试的目的是确保软件准备就绪,按照项目合同、任务书、双方约定的验收依据文档,向软件购买者展示该软件系统满足原始需求。
第二章、软件测试的基本概念
软件缺陷的定义?
- 内部:软件本身设计问题。
- 外部:不能满足用户的需求。
软件缺陷的产生?
- 技术问题。
- 软件本身。
- 团队工作。
静态测试和动态测试。
根据程序是否运行,测试可以分为静态测试和动态测试。
静态测试:
静态测试包括对软件产品的需求和设计规格说明书的评审、对程序代码的审查以及静态分析等。
动态测试:
动态测试是通过真正运行程序发现错误,通过观察代码运行过程,来获取系统行为、变量实时结果、内存、堆栈、线程以及测试覆盖度等方面的信息,来判断系统是否存在问题,或者通过有效的测试用例,对应的输入输出关系来分析被测程序的运行情况,来发现缺陷。
静态分析:
人工检测:
不依靠计算机儿完全靠人工审查或评审软件。注重:编码风格、算法的检查,也可以检查安全性、国际化和容错性等代码问题。
计算机辅助静态分析:
利用测试工具对被测程序进行特性分析,从程序中提取一些信息,以便检查程序逻辑的各种缺陷和可疑的程序构造。
软件(产品)评审。
软件评审的形式有互为评审(同行评审)、走查(从头到尾,陪同开发)、会议评审(开会)。
- 文档评审。
- 技术评审。
- 管理评审。
- 流程评审。
管理评审和流程评审也作为软件质量保证。
软件测试是对以下内容评审。
- 需求评审。
- 设计评审。
- 代码评审。
- 文档评审。
白盒测试和黑盒测试。
白盒测试:
白盒测试,也称结构化测试或逻辑驱动测试,也就是已知产品的内部工作过程,清楚最终生成软件产品的计算机程序结构及其语句,按照程序内部的机构测试程序,检查所有内部成分是否按照规定正常进行。
白盒测试方法:
- 语句覆盖。
- 判定覆盖。
- 条件覆盖。
- 判定条件覆盖。
- 条件组合覆盖。
- 基本路径覆盖。
黑盒测试:
黑盒测试方法,也称数据驱动测试方法,在测试时,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特征的情况下,测试人员针对软件直接进行测试,检查系统功能是否按照需求规格说明书的规定正常使用、是否能适当地接收输入数据而输出正确的结果等,检查相应的文档是否才用了正确的模板、是否满足规范要求。
黑盒测试方法:
- 等价类划分法。
- 边界值分析法。
- 判定表方法。
- 因果图法。
- 正交试验法。
- 功能图法。
- 错误推测法。
黑盒测试的难点:如何构造一个有效的输入。
单因素 1.等价类划分 2.边界值划分
静态{
多因素 1.因果分析法 2. 决策表 3. 正交试验法
黑盒方法{
功能图
动态{
有限状态机
其他 错误推测法
有了黑盒测试为什么还要进行白盒测试?
黑盒测试只能观察软件的外部表现,即使软件的输入和输出都是正确的,确并不能表示软件是正确的。
程序有可能用错误的运算方式得出正确的结果,只有白盒测试才能发现真正的原因。
白盒测试能发现程序里面的隐患,像内存泄漏、误差累计问题。在这方面黑盒测试存在严重的不足。
测试用例。
测试用例(Test Case)是为了特定的测试目的而设计的测试条件、测试数据及与之相关的测试规程的一个特定的使用用例或场景。测试用例也可以被称为有效地发现软件缺陷的最小测试执行单元。而测试脚本(Test Script)是测试工具执行的一组指令集合,是计算机能自动完成测试用例的执行,也是计算机程序的一种新式。脚本可以通录制产生,也可以直接用脚本语言编写脚本。
第三章、软件测试方法
简答:
什么是等价类划分法?
等价类划分是把程序的输入域划分为若干部分,然后从每个部分中选取少数代表性数据作为测试用例。每一类的代表性数据在测试中的作用等价于这一类中的其他值,使用这一方法设计测试用例即为等价类划分法。
每一类的代表性数据在测试中的作用等价于这一类中的其他值,也就是说,如果某一类中的一个例子发现了错误,这一类等价类中的其他例子也能发现同样的错误;反之,如果某一类中的一个例子没有发现错误,则这一类中的其他例子也不会查出错误(除非等价类中的某些例子属于另一等价类,因为几个等价类可能相交的)。使用这一方法设计测试用例,首先必须在分析需求规格说明的基础上划分等价类,列出等价类表。
6条确定等价类的原则:
- 在输入条件规定了取值范围或值的个数的情况下,可以确立一个有效等价类和两个无效等价类。
- 在输入条件规定了输入值的集合或者规定了“必须如何”的条件情况下,可以确定一个有效等价类和一个无效等价类。
- 在输入条件是一个布尔量的情况下,可以确定一个有效等价类和一个无效等价类。
- 在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可确立n个有效等价类和一个无效等价类。
- 在规定了输入数据必须遵守的规则的情况下,可确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)。
- 在确知已划分的等价类中,各元素在程序处理中的方式不同的情况下,则应再将该等价类进一步地划分为更小的等价类。
等价类划分步骤。
- 为每个等价类规定一个唯一的编号。
- 设计一个新的测试用例,使其尽可能多地覆盖尚未覆盖的有效等价类。重复这一步,最后使得所有有效等价类均被测试用例所覆盖。
- 设计一个新的测试用例,使其只覆盖一个无效等价类。重复这一步是所有无效等价类均被覆盖。
环路复杂度计算。
软件测试的目的。
确保软件的质量。
-
正向:找软件不存在错误。
-
反向:找软件有错误。
以最少的人力、物力和时间找出软件中潜在的各种错误和缺陷,通过修正各种错误和缺陷保障软件质量,避免软件发布后由于潜在的软件错误和缺陷造成的隐患所带来的商业风险。同时利用测试过程中得到的测试结果和测试信息,作为后续项目开发和测试过程改进的重要输入,避免在将来的项目开发和测试中重复同样的错误;采用更加高效的测试管理手段,提高软件测试的效率和软件产品的质量。
基本路径法的步骤。
-
程序的控制流图:描述程序控制流的一种图示方法。
-
程序圈复杂度:McCabe复杂性度量。从程序的环路复杂性可导出程序基本路径集合中的独立路径条数,这是确定程序中每个可执行语句至少执行一次所必须的测试用例数目的上界。
-
导出测试用例:根据圈复杂度和程序结构设计用例数据输入和预期结果。
-
准备测试用例:确保基本路径集中的每一条路径的执行。
什么是非增量测试与增量测试。
增量式集成
增量式集成测试是逐步集成和逐步测试的方法,把可能出现的错误分散暴露出来,便于找出问题和修改。
优点:更早地发现模块间的接口错误,有利于错误定位;
缺点:需要编写驱动模块和桩模块;
非增量式集成
在对每个单元进行充分测试后,将所有单元全部集成起来,一次性地进行集成测试。
优点:减少测试工作量。
缺点:难以定位和解决问题,可能会发现很多错误。
为什么要进行回归测试。
验证缺陷得到了正确的修复,同时对系统的变更没有影响以前的功能。
回归测试的定义。
- 回归测试是指重复以前的全部或部分的相同功能测试。
- 新加入测试的模块,可能对其他模块产生副作用,因此要进行某些程度的回归测试。
- 回归测试的重心,是以关键性模块为核心。
第四章、软件测试流程和规范
X、V、W、H、模型
X模型
X模型是对V模型的改进, X模型提出针对单独的程序片段进行相互分离的编码和测试. 此后通过频繁的交接, 通过集成, 最终合成为可执行的程序。
V模型
由用户需求到验收测试。
W模型
W模型也可以看做是 “双V模型”, 有两个 V, 一个是研发V, 一个是测试V, 将研发和测试的工作并行了起来, 使研发和测试的工作可以同时进行, 因此解决了V模型的三个缺点。
H模型
H模型中, 软件测试过程活动完全独立, 贯穿于整个产品的周期, 与其他流程并发地进行, 某个测试点准备就绪时, 就可以从测试准备阶段进行到测试执行阶段. 软件测试可以尽早的进行, 并且可以根据被测物的不同而分层次进行。
软件测试学派
- 分析学派:分析学派认为软件测试是严格的技术性的,这一派在学术界有很多支持者。
- 标准学派:标准学派认为软件测试是用于衡量进度的一种方式,强调成本度量和可重复的标准。
- 质量学派:质量学派强调过程,软件测试人员像警察一样审判开发人员,又像守门员一样保证质量。
- 上下文驱动学派:上下文驱动学派强调软件测试人的作用,寻找利益相关的BUG。
- 敏捷学派:敏捷涟派使用软件测试来验证开发是否完成,强调自动化。
第五章、单元测试与集成测试
为何要进行单元测试。
软件测试的目的之一就是尽可能早地发现软件中存在的错误,从而降低软件质量成本,测试越早进行越好,单元测试就显得更重要,也是系统的功能测试的基础。
静态测试的标准和规范
- 可靠性。
- 可读性和维护性。
- 移植性。
代码评审
- 代码走查。
- 正式会议审查。
- 走查与会议审查的对比。
- 缺陷检查表。
JUnit介绍
JUnit 是一个编写可重复测试的简单框架。它是单元测试框架的 xUnit 架构的一个实例。
测试步骤:
- 建立一个被JUnit测试的类。
- 建立其对应的JUnit Test 类。
- 针对自动生成的代码,进行补充修改,使其满足对特定功能的测试。
- 执行测试。
集成测试定义:
集成测试,也叫组装测试或联合测试。
在单元测试的基础上,将所有模块按照设计要求(如根据结构图)组装成为子系统或系统,进行集成测试。
第六章、系统测试
性能测试
目的:为了验证系统是否达到用户提出的性能指标,同时发现系统中存在的性能瓶颈,起到优化系统的目的。
基本概念:通常验证软件的性能在正常环境和系统条件下重复使用是否还能满足性能指标。或者执行同样任务时新版本不比旧版本慢。一般还检查系统记忆容量在运行程序时会不会流失(memory leak)。比如,验证程序保存一个巨大的文件新版本不比旧版本慢。
分为客户端和服务端。
第七章、验收测试
验收测试是部署软件之前的最后一个测试操作。在软件产品完成了单元测试、集成测试和系统测试之后,产品发布之前所进行的软件测试活动。它是技术测试的最后一个阶段,也称为交付测试。验收测试的目的是确保软件准备就绪,并且可以让最终用户将其用于执行软件的既定功能和任务。
实施验收测试的常用策略有三种,它们分别是:
· 正式验收
· 非正式验收或 Alpha 测试
· Beta 测试
您选择的策略通常建立在合同需求、组织和公司标准以及应用领域的基础上。
第八章、软件本地化测试
翻译验证
检查软件内文字标点,是否准确以及有无不符对应国家的法律以及文化习惯。