软件工程白盒测试
软件工程中软件测试方法
软件工程中软件测试方法软件测试是软件工程中非常重要的环节,它用于验证和评估软件系统是否满足预期的需求,并发现其中的错误和缺陷。
在软件测试过程中,可以采用多种不同的测试方法来确保软件的质量和稳定性。
以下是一些常见的软件测试方法:1. 黑盒测试:这种测试方法着重于测试软件系统的功能性,而不考虑内部的实现细节。
测试人员只关注输入和输出之间的关系,通过输入不同的数据,检查系统的响应和输出是否符合预期。
黑盒测试通常包括等价类划分、边界值分析、决策表等技术来设计测试用例。
2. 白盒测试:与黑盒测试相反,白盒测试关注软件系统的内部结构和实现。
测试人员需要了解代码的逻辑和结构,在此基础上设计相关的测试用例。
白盒测试通常包括语句覆盖、分支覆盖、路径覆盖等技术,以确保代码的全面覆盖率。
3. 灰盒测试:灰盒测试是黑盒测试和白盒测试的结合,既考虑系统的功能性,也考虑内部的实现。
测试人员在设计测试用例时,会兼顾输入输出关系和代码结构等因素。
4. 冒烟测试:冒烟测试也称为可靠性测试或基本功能测试,用于验证软件系统的基本功能是否正常工作。
在软件开发过程中的早期阶段,进行冒烟测试可以尽早发现严重的错误和缺陷。
5. 性能测试:性能测试用于评估软件系统在不同负载下的性能表现,包括响应时间、吞吐量、并发性能等指标。
通过性能测试,可以确定系统在实际使用场景下的性能瓶颈,并进行性能优化。
6. 安全测试:安全测试用于评估软件系统的安全性,包括数据安全、身份认证、访问控制等方面。
通过安全测试,可以发现系统中的安全漏洞和弱点,并提供相应的安全防护措施。
7. 兼容性测试:兼容性测试用于验证软件系统在不同的操作系统、浏览器、设备等环境下的兼容性。
通过兼容性测试,可以确保软件在各种环境下都能正常运行。
以上是软件工程中常见的软件测试方法,每种方法都有其特定的应用场景和测试目标。
在实际项目中,通常会根据需求和资源的情况,选择合适的测试方法来保证软件的质量和稳定性。
软件工程中的软件测试与验证
软件工程中的软件测试与验证在软件工程中,软件测试与验证是确保软件质量和功能完整性的重要环节。
通过对软件系统的测试和验证,可以发现和解决潜在的错误或问题,从而提高软件的可靠性和稳定性。
本文将探讨软件测试与验证的基本概念、分类、方法和重要性。
一、软件测试与验证的基本概念软件测试是指通过运行软件系统并与预期结果进行比较来评估系统的特性和性能。
验证是指确认软件系统是否满足了所期望的需求和规范。
二、软件测试与验证的分类1. 功能测试:验证软件的功能是否按照要求正确运行。
例如,对于一个计算器应用程序,验证加减乘除功能是否正常。
2. 性能测试:测试软件在不同负载和压力下的性能表现。
例如,测试一个电商网站在同时访问人数增加时的响应时间和吞吐量。
3. 安全测试:测试软件系统的安全性,发现和修复潜在的安全漏洞和隐患。
例如,测试一个银行应用程序的防火墙和身份验证系统。
4. 兼容性测试:测试软件在不同操作系统、浏览器或设备上的兼容性。
例如,测试一个网站在不同浏览器中的显示效果是否一致。
5. 冒烟测试:测试软件系统的基本功能,以确定软件是否可以进行更详细的测试。
例如,对于一个新开发的游戏软件,验证游戏的基本操作是否可用。
三、软件测试与验证的方法1. 黑盒测试:测试者只关注软件的输入和输出,不了解内部实现细节。
通过输入不同的数据和条件,验证软件是否按照规范输出正确的结果。
2. 白盒测试:测试者了解软件的内部结构和逻辑,并基于此设计测试用例。
通过检查程序的数据结构、路径和边界条件,发现并修复潜在的错误。
3. 灰盒测试:结合黑盒测试和白盒测试的特点,既关注软件的功能,又关注其内部实现。
通过分析代码和使用不同的数据进行测试,评估软件的可用性和稳定性。
四、软件测试与验证的重要性1. 提高软件质量:通过测试和验证,可以发现和解决软件中的错误和问题,确保软件的质量和正确性,减少用户的使用问题和投诉。
2. 减少开发成本:在软件开发的早期阶段,发现和修复错误的成本相对较低。
黑盒测试、白盒测试、单元测试、集成测试、系统测试、验收测试
⿊盒测试、⽩盒测试、单元测试、集成测试、系统测试、验收
测试
⿊盒测试、⽩盒测试、单元测试、集成测试、系统测试、验收测试
⿊盒测试、⽩盒测试、单元测试基本由从开发⼈员在不同阶段要做的事。
单元测试:是指对软件中的最⼩可测试单元进⾏检查和验证。
单元测试是在软件开发过程中要进⾏的最低级别的测试活动,软件的独⽴单元将在与程序的其他部分想隔离的情况下进⾏测试。
⿊盒测试:在不考虑程序内部结构和逻辑结构的情况下,来测试系统的功能是否满⾜规格说明书。
⼀般会有⼀个输⼊值、⼀个输出值、和期望值做⽐较。
⿊盒测试也叫做功能测试,它是通过测试来检测每个功能是否都能正常使⽤。
⿊盒测试着眼于程序外部结构,不考虑内部逻辑结构,主要针对软件界⾯和软件功能进⾏测试。
⽩盒测试:主要应⽤在单元测试阶段,主要是对代码级的测试,针对程序内部逻辑结构。
测试⼿段有:语句覆盖,判定覆盖,条件覆盖,路径覆盖,条件组合覆盖。
所以也叫作结构测试或逻辑驱动测试。
白盒测试也称结构测试或逻辑驱动测试
白盒测试也称结构测试或逻辑驱动测试,它是按照程序内部的结构测试程序,通过测试来检测产品内部动作是否按照设计规格说明书的规定正常进行,检验程序中的每条通路是否都能按预定要求正确工作。
这一方法是把测试对象看作一个打开的盒子,测试人员依据程序内部逻辑结构相关信息,设计或选择测试用例,对程序所有逻辑路径进行测试,通过在不同点检查程序的状态,确定实际的状态是否与预期的状态一致。
概述采用什么方法对软件进行测试呢?常用的软件测试方法有两大类:静态测试方法和动态测试方法。
其中软件的静态测试不要求在计算机上实际执行所测程序,主要以一些人工的模拟技术对软件进行分析和测试;而软件的动态测试是通过输入一组预先按照一定的测试准则构造的实例数据来动态运行程序,而达到发现程序错误的过程。
白盒测试的测试方法有代码检查法、静态结构分析法、静态质量度量法、逻辑覆盖法、基本路径测试法、域测试、符号测试、Z路径覆盖、程序变异。
白盒测试法的覆盖标准有逻辑覆盖、循环覆盖和基本路径测试。
其中逻辑覆盖包括语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖。
六种覆盖标准:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖发现错误的能力呈由弱至强的变化。
语句覆盖每条语句至少执行一次。
判定覆盖每个判定的每个分支至少执行一次。
条件覆盖每个判定的每个条件应取到各种可能的值。
判定/条件覆盖同时满足判定覆盖条件覆盖。
条件组合覆盖每个判定中各条件的每一种组合至少出现一次。
路径覆盖使程序中每一条可能的路径至少执行一次。
"白盒"法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。
"白盒"法是穷举路径测试。
在使用这一方案时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。
黑盒测试&白盒测试
一、白盒测试白盒测试(White-box Testing,又称逻辑驱动测试,结构测试)是把测试对象看作一个打开的盒子。
利用白盒测试法进行动态测试时,需要测试软件产品的内部结构和处理过程,不需测试软件产品的功能。
白盒测试又称为结构测试和逻辑驱动测试。
白盒测试法的覆盖标准有逻辑覆盖、循环覆盖和基本路径测试。
其中逻辑覆盖包括语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖。
六种覆盖标准:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖发现错误的能力呈由弱至强的变化。
语句覆盖每条语句至少执行一次。
判定覆盖每个判定的每个分支至少执行一次。
条件覆盖每个判定的每个条件应取到各种可能的值。
判定/条件覆盖同时满足判定覆盖条件覆盖。
条件组合覆盖每个判定中各条件的每一种组合至少出现一次。
路径覆盖使程序中每一条可能的路径至少执行一次。
白盒测试也称结构测试或逻辑驱动测试,它是知道产品内部工作过程,可通过测试来检测产品内部动作是否按照规格说明书的规定正常进行,按照程序内部的结构测试程序,检验程序中的每条通路是否都有能按预定要求正确工作,而不顾它的功能,白盒测试的主要方法有逻辑驱动、基路测试等,主要用于软件验证。
"白盒"法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。
"白盒"法是穷举路径测试。
在使用这一方案时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。
贯穿程序的独立路径数是天文数字。
但即使每条路径都测试了仍然可能有错误。
第一,穷举路径测试决不能查出程序违反了设计规范,即程序本身是个错误的程序。
第二,穷举路径测试不可能查出程序中因遗漏路径而出错。
第三,穷举路径测试可能发现不了一些与数据相关的错误。
白盒测试目前主要用在具有高可靠性要求的软件领域,例如:军工软件、航天航空软件、工业控制软件等等。
白盒测试工具在选购时应当主要是对开发语言的支持、代码覆盖的深度、嵌入式软件的测试、测试的可视化等。
简述白盒测试概念
简述白盒测试目录1. 概述 (3)2. 白盒测试 (3)2.1. 白盒测试的基本概念 (3)2.2. 白盒测试的常用方法 (3)2.2.1. 逻辑覆盖测试 (3)2.2.1.1. 语句覆盖 (3)2.2.1.2. 判定覆盖 (4)2.2.1.3. 条件覆盖 (4)2.2.1.4. 判定/条件覆盖 (4)2.2.1.5. 条件组合覆盖 (4)2.2.1.6. 路径测试 (4)2.2.2. 循环覆盖测试 (4)2.2.2.1. 简单循环的测试策略 (4)2.2.2.2. 嵌套循环的测试策略 (4)2.2.2.3. 串接循环的测试策略 (4)2.2.2.4. 不规则循环 (5)2.2.3. 基本路径测试 (5)2.2.3.1. 步骤一:画出控制流图 (5)2.2.3.2. 步骤二:计算圈复杂度 (5)2.2.3.3. 步骤三:导出测试用例 (5)2.2.3.4. 步骤四:执行测试用例 (5)2.2.3.5. 工具方法:图形矩阵 (6)2.2.4. 静态数据流分析 (6)3. 总结 (6)1.概述20世纪60年代中期,随着计算机硬件的迅猛发展,计算机的应用范围迅速扩大,软件开发数量急剧增长,计算机系统应用越来越广泛。
软件快速的需求增长使得软件开发中的矛盾越来越突出——软件危机出现了。
软件工程应运而生,软件测试的作用越来越重要。
而白盒测试就是一种软件测试用例的设计方法。
2.白盒测试2.1.白盒测试的基本概念白盒测试又称结构测试,透明盒测试,逻辑驱动测试或基于代码的测试。
白盒测试是测试被测单元内部如何工作的一种方法。
其目的是通过检查软件内部的逻辑结构,对软件中的逻辑路径进行覆盖测试;在程序不同地方设立检查点,检查程序的状态,以确定实际运行状态与预期状态是否一致。
它允许测试人员对程序内部逻辑结构及有关信息来设计和选择测试用例,对程序的逻辑进行测试,提高代码质量。
由于逻辑错误和不正确假设与一条程序路径被运行的可能性成反比。
软件工程名词解释
1.抽象:现实世界中一定事物、状态或过程之间总存在着某些相似的方面,把这些相似的方面几种概括起来,暂时忽略它们之间的差异。
2.对象:描述该对象属性的数据以及可以对这些数据施加的所有操作封装在一起构成的统一体。
3.结构化程序设计:如果一个程序的代码块仅仅通过顺序、选择和循环这三种控制结构进行连接,并且每个代码块只有一个入口和一个出口,则称这个这个程序是结构化的。
4.模块:模块是由边界元素限定的相邻的程序元素的序列,而且有一个总体标识符来代表它。
5.模块化:把程序划分成独立运行且可以独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。
6.软件:是程序、数据及相关文档的完整集合。
程序是能够完成预定功能和性能的可执行的指令序列;数据是使程序能够适当地处理信息的数据结构;文档是开发、使用和维护程序所需要的图文资料。
7.软件工程:是指导计算机软件开发和维护的工程科学。
采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护8.软件危机:是指在计算机软件的开发和维护过程中所遇到的一系列严重的问题。
9.软件生命周期:是指从软件定义、开发、使用、维护到淘汰的全过程。
10.数据字典:是关于数据的信息的集合,也就是对数据流图中包含的所有元素的定义的集合。
11.条件覆盖:条件覆盖的含义是,不仅每条语句至少执行一次,而且使判定表达式中的每个条件都取到各种可能的结果。
12.判定覆盖:不仅每个语句必须至少执行一次,而且每个判定的每种可能的结果都应该至少执行一次,也就是每个判定的每个分支都至少执行一次。
13.语句覆盖:选择足够多的测试数据,使被测程序中每个语句至少执行一次。
14.黑盒测试:黑盒测试是在程序接口进行的测试,它只检查程序功能是否能按照规格说明书的规定正常使用,程序是否能适当地接收输入数据产生正确的输出信息,并且保持外部信息(如,数据库或文件)的完整性。
软件工程的白盒和黑盒测试归纳
软件工程的白盒和黑盒测试归纳一、黑盒测试和白盒测试APP测试中黑盒测试:产品的功能设计规格,可以进行测试证明每个实现了的功能是否符合要求。
白盒测试:产品的内部工作过程,可以进行测试证明每种内部操作是否符合设计规格要求,全部内部成分是否经过检查。
1.第一熟悉:黑盒测试测试特点:测试功能;测试依据:需求规格说明书方法举例:等价类划分、边界值测试优点:能站在用户的立场上进行测试缺点:不能测试程序内部特定部位,如程序有误,那么无法觉察。
白盒测试测试特点:测试程序接口与结构测试依据:软件程序方法举例:规律掩盖优点:对程序内部特定部位进行掩盖测试。
缺点:无法检验程序外部特性。
2.其次熟悉:黑盒测试把程序看作一个不能翻开的黑盒子,在完全不考虑程序内部结构和内部特性的状况下,针对“软件界面”和“软件功能“进行测试,只检查功能是否符合需求规格说明书能正常使用。
因此黑盒测试又叫功能测试或数据驱动测试。
白盒测试是对软件的过程性细节做细致的检查。
这种方法是把测试对象看作一个翻开的盒子,他允许测试人员采用程序内部的规律结构及有关信息,设计或选择测试用例,对程序全部规律路径进行测试。
通过在不同点检查程序状态,确定实际状态是否与预期的状态全都。
因此白盒测试又称为”结构测试“或”规律驱动测试白盒测试是根据程序内部的结构来测试程序,通过测试检验产品内部动作是否根据设计规格说明书的要求正常进行,检验程序中的每条通道是否都根据规定正常工作。
3•第三熟悉:黑盒测试主要是为了觉察以下错误:(1)是否有不正确或者遗漏了的功能;(2)在接口上,输入能否正确的接受?能否输出正确的结果?(3)是否有数据结构错误或外部信息(例如数据库文件)访问错误?(4)性能上是否能够满意要求?(5)是否有初始化或终止性错误?黑盒的测试用例技术设计有三种:边界值分析、等价类划分、错误推想法。
白盒测试主要是想对程序模块进行以下检查:(1)对程序模块的全部独立的执行路径至少测试一遍;(2)对全部的规律判定,取“真“与”假”的两种状况都能至少测一遍;(3)在循环的边界和运行的界限内执行循环体;(4)测试内部数据结构的有效性,等等;(5)静态白盒测试:即代码审查,正式审查和检验设计和程序代码;(6)动态白盒测试采用查看代码功能和实现方式得到的信息来设计和执行测试,也叫结构测试;白盒的测试用例技术包括:规律掩盖和基本路径测试。
白盒测试笔试题
一选择题1.下面不属于白盒测试能保证的是(D)。
A.模块中所有独立途径至少测试一次B.测试所有逻辑决策真和假两个方面C.在所有循环的边界内部和边界上执行循环体D.不正确或漏掉的功能2.因果图方法是根据(a)之间的因果关系来设计测试用例的。
A.输入与输出B.设计与实现C.条件与结果D.主程序与子程序3.使用白盒测试方法时,确定测试数据应根据(a)和指定的覆盖标准。
A.程序的内部逻辑B.程序的复杂程度C.使用说明书D.程序的功能4.软件测试中常用的静态分析方法是(a)和接口分析。
A.引用分析B.算法分析C.可靠性分析D.效率分析5.白盒方法中常用的方法是(a)方法。
A.路径测试B.等价类C.因果图D.归纳测试6.在进行单元测试时,常用的方法是(a)。
A.采用白盒测试,辅之以黑盒测试B.采用黑盒测试,辅之以白盒测试C.只适用白盒测试D.只适用黑盒测试7.在软件工程中,白盒测试法可以用于测试程序的内部结构。
此方法将程序看做是(a)。
A.路径的集合B.循环的集合C.目标的集合D.地址的集合8. 对下面个人所得税程序中满足语句覆盖测试用例的是(D )If(income < 800) taxrate=0;Else if(income <=1500) taxrate=0.05;Else if(income <2000) taxrate=0.08;Exle taxrate=0.1;A income = (800,1500,2000,2001)B income = (800,801,1999,2000)C income = (799,1499,2000,2001)D income = (799,1500,1999,2000)二简答题1.白盒测试有几种方法?答:白盒测试方法分为两大类:静态测试方法和动态测试方法。
静态测试方法:检查软件的表示和描述是否一致,没有冲突或者没有歧义。
动态测试方法:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖、路径覆盖。
软件工程中的测试策略
软件工程中的测试策略软件测试是软件工程中一个重要的环节,它决定了软件产品的质量和可靠性。
测试策略是指根据产品需求和技术特点,制定有效的测试方案和方法,达到尽可能多地发现缺陷、提高测试效率和降低测试成本的目的。
本文将从测试策略的定义、种类、设计以及执行等多个方面进行探讨。
一、测试策略的定义测试策略是指在软件测试过程中,为了达到预期的测试目标和质量标准,根据项目需求和技术特点,制定的一系列测试方案和方法的总称。
测试策略是在测试计划基础上进行的,它具有指导测试过程和控制测试质量的作用。
测试策略的主要目标是全面、系统地发现软件缺陷,从而确保软件产品的稳定、可靠和可用性。
测试策略要从测试目标、测试环境、测试工具、测试人员、测试方法、测试数据等多个方面进行制定,随着测试过程的进行不断进行适应性调整和优化。
二、测试策略的种类测试策略根据不同标准的分类方法,可以分为很多种类。
下面是几个常见的分类方式:1. 静态测试和动态测试:静态测试是在代码编写之前进行的测试,主要包括源代码分析、需求分析等。
动态测试是在编译、构建或运行程序过程中进行的测试,主要包括功能测试、性能测试、安全性测试等。
2. 黑盒测试和白盒测试:黑盒测试是指在不了解程序内部结构和实现的情况下进行的测试,测试人员主要着眼于程序的输入和输出是否符合预期。
白盒测试是指在了解程序的内部结构和实现的情况下进行的测试,测试人员主要关注程序的逻辑结构、异常处理、循环等细节方面。
3. 自动化测试和手工测试:自动化测试是通过工具或脚本执行的自动测试,可以大大提高测试效率和减少测试成本。
手工测试是测试人员通过手动方式执行测试用例的过程。
三、测试策略的设计测试策略的设计是软件测试中的重要环节,其质量和有效性决定了后续测试工作的开展和效果。
测试策略的设计过程包括以下步骤:1. 定义测试目标和质量标准:测试策略的首要任务是根据软件产品的需求和用户期望,制定符合质量标准的测试目标,为后续测试工作提供明确的指导。
第3章白盒测试技术
函数调用关系图
• 通过应用程序各函数之间的调用关系展示 了系统的结构。列出所有函数,用连线表 示调用关系。 • 通过函数调用关系图:
– 可以检查函数的调用关系是否正确 – 是否存在孤立的函数而没有被调用 – 明确函数被调用的频繁度,对调用频繁的函数 可以重点检查
模块控制流图
• 模块控制流图是与程序流程图类似的有许 多节点和连接节点的边组成的一种图形, 其中一个节点代表一条语句或数条语句, 边表示节点间的控制流向,它显示了一个 函数的内部逻辑结构 • 模块控制流图可以直观的反映出一个函数 的内部逻辑结构,通过检查这些模块的控 制流图,能够很快发现软件的错误与缺陷。
逻辑覆盖法
• 逻辑覆盖是通过对程序逻辑结构的遍历实现程序 的覆盖。它是一系列测试过程的总称,这组测试 过程逐渐进行越来越完整的通路测试。 • 从覆盖源程序语句的详尽程度分析,逻辑覆盖标 准包括:
– – – – – – 语句覆盖 判定覆盖 条件覆盖 条件判定组合覆盖 多条件覆盖 修正条件判定覆盖
示例程序
3.3 动态测试技术
• 白盒测试的动态测试应该根据程序的控制结构设计测试用例,原则是:
– – – – 保证模块中每一独立的路径至少执行一次; 保证所有判断的每一分枝至少执行一次; 保证每一循环都在边界条件和一般条件下至少各执行一次; 验证所有内部数据结构的有效性。
• 对一个具有多重选择和循环嵌套的程序,不同的路径数目可能是天文数 字.而且即使精确地实现了白盒测试,也不能断言测试过的程序完全正 确. • 比如包括了一个执行达20次的循环的程序,它所包含的不同执行路径 数高达520条,假使有这么一个测试程序,对每一条路径进行测试需要 1ms,假设一天工作 24小时,一年工作365天,若要对它进行穷举测试,也 需要3024年的时间. • 为了节省时间和资源,就必须精心设计测试用例,从数量巨大的可用 测试用例中挑选少量的、优秀的测试数据,使用这些测试数据能够达 到最佳的测试效果 • 其中,逻辑覆盖法和基本路径测试法是常用的两种白盒测试用例测试 方法。
软件工程实验报告
软件工程实验报告学号:姓名:专业:年月实验一:白盒测试一、实验目的巩固白盒测试知识,对于给定的待测程序,能熟练应用基本控制流覆盖方法设计测试用例;能够执行白盒测试过程,并撰写白盒测试分析报告。
二、实验内容白盒测试又称为结构测试、逻辑驱动测试或基于程序的测试,一般用来分析程序的内部结构。
测试规划基于产品内部结构进行测试,检查内部操作是否按规定执行,软件各个部分功能是否得到充分使用,则这种测试方法称为白盒测试方法。
白盒测试将被测程序看做一个打开的盒子,测试者能够看到被测源程序,可以分析被测程序的内部结构,此时测试的焦点集中在根据其内部结构设计测试用例。
白盒测试要求是对某些程序的结构特性做到一定程度的覆盖,或者说这种测试是“基于覆盖率的测试”。
测试内容包括语句覆盖测试、分支覆盖测试、条件覆盖测试、分支/条件覆盖测试、条件组合覆盖测试和基本路径测试。
三、程序代码要求:实现对不少于10个随机输入的数的冒泡排序算法。
#include<iostream>using namespace std;int main(){double a[100];int N;int i = 0, j = 0;cin >> N;//排序元素的个数for (i = 0; i <= N; i++){cin >> a[i];}for (i = 0; i < N-1 ; i++) {for (j = 0; j < N - 1 - i; j++){if (a[j] > a[j + 1]) {int tmp;tmp = a[j];a[j] = a[j + 1];a[j + 1] = tmp;}}}for (i = 0; i < N; i++){cout << a[i] <<" ";}cout << endl;return 0;}四、程序流程图五、测试内容(1)语句覆盖测试测试结果:①②测试结果分析:输入元素时需要输入的元素个数大于最初输入的元素个数。
《软件工程》考试内容考点分析
软件工程名词解释1.白盒测试又叫做结构测试,把程序看成装在一个透明的白盒子里,按照程序内部的逻辑测试程序,检测程序中的主要执行通路是否都能按预定要求正确工作。
2..软件工程过程即软件生命周期的方法、工具和概念、3..模块化模块化是指解决一个复杂问题时自顶向下逐层把系统划分成若干模块的过程,有多种属性,分别反映其内部特性.每个模块完成一个特定的子功能,所有的模块按某种方法组装起来,成为一个整体,完成整个系统所要求的功能4..集成测试集成测试,也叫组装测试或联合测试。
在单元测试的基础上,将所有模块按照设计要求(如根据结构图)组装成为子系统或系统,进行集成测试。
5..软件可靠性(1)在规定的条件下,在规定的时间内,软件不引起系统失效的概率;(2)在规定的时间周期内,在所述条件下程序执行所要求的功能的能力;6.软件危机:软件发展第二阶段的末期,由于计算机硬件技术的进步。
一些复杂的、大型的软件开发项目提出来了,但软件开发技术的进步一直未能满足发展的要求。
在软件开发中遇到的问题找不到解决的办法,使问题积累起来,形成了尖锐的矛盾,因而导致了软件危机。
7. 软件工程:用科学知识和技术原理来定义、开发、维护软件的一门学科。
8.软件生存周期:一个软件从提出开发要求开始直到该软件报废为止的整个时期。
9. 数据流图:简称DFD,是SA(结构化分析)方法中用于表示系统逻辑模型的一种工具,是一种功能模型。
10. 字据字典:简称DD,就是用来定义数据流图中的各个成分具体含义的,它以一种准确的\无二义性的说明方式为系统的分析\设计及维护提供了有关元素的一致的定义和详细的描述.11. 需求分析是指:开发人员要准确理解用户的要求,进行细致的调查分析,将用户非形式的需求陈述转化为完整的需求定义,再由需求定义转换到相应的形式主义功能规约(需求规格说明)的过程。
12.耦合度:指软件系统结构中各模块间相互联系紧密程度的一种度量。
13.内聚度:一个模块内部各个元素彼此结合的紧密程度的度量。
2023年10月《软件工程》全国自考试题含解析
2023年10月《软件工程》全国自考试题一、单项选择题1、软件测试中,白盒测试技术依据的是程序的______。
A.逻辑结构B.输入数据C.状态D.功能2、集成化能力成熟度模型(CMMI)中有22个过程域,分为4类:项目管理类、工程类、过程管理类和______。
A.需求管理类B.支持类C.项目包类D.目标类3、在建模过程中,可用以描述加工的工具是______。
A.数据流B.判定树C.数据字典D.数据存储4、指一个模块内部各成分之间相互关联程度的度量是______。
A.耦合B.内聚C.扇入D.扇出5、“与所规约的系统执行之间的偏差”是指______。
A.错误B.失效C.故障D.误差6、RUP的分析类包括边界类、实体类和______。
A.子类B.控制类C.父类D.活动类7、软件结构化设计中,支持“自顶向下逐步求精”的详细设计,并且能够以一种结构化方式严格地控制从一个处理到另一个处理的转移,这个详细设计工具是______。
A.PAD图B.程序流程图C.DFD图D.N-S图8、下列不属于软件危机的主要表现是______。
A.软件生产效率低B.软件开发没有工具支持C.软件生产质量低D.软件开发缺乏可遵循的原理、原则、方法体系以及有效的管理9、CMMI组织过程改善的成熟度等级中的2级是______。
A.已执行级B.已定义级C.已管理级D.已定量管理级10、有效性测试的目标是发现软件实现的功能与下列哪个选项不一致,正确的是______。
A.需求规格说明书B.概要设计说明书C.详细设计说明书D.测试计划11、软件工程在20世纪60年代末到80年代初获得的主要成果有______。
A.CASE产品B.面向对象语言C.瀑布模型D.软件生存周期过程12、RUP的迭代、增量式开发过程中,需要估算成本、进度,并能够减少次要的错误风险,至少需要完成______。
A.初始阶段B.精化阶段C.构造阶段D.移交阶段13、在销售管理系统需求文档中出现下列描述,属于设计约束范畴的是______。
软件工程习题及答案
软件工程习题及答案软件工程是一门研究和应用如何以系统性、规范化、可定量的过程化方法去开发和维护软件,以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来的学科。
以下是一些软件工程相关的习题及答案,希望能帮助您更好地理解这门学科。
一、选择题1、软件生存周期中,解决软件“做什么”的阶段是()A 需求分析B 软件设计C 软件实现D 软件测试答案:A解释:需求分析阶段的主要任务是确定软件系统的功能和性能要求,解决软件“做什么”的问题。
2、下面不属于软件设计阶段任务的是()A 软件总体结构设计B 算法设计C 制定测试计划D 数据库设计答案:C解释:制定测试计划属于软件测试阶段的任务,软件设计阶段主要包括总体结构设计、详细设计(如算法设计、数据库设计等)。
3、软件工程中,白盒测试法可用于测试程序的内部结构。
此方法将程序看作是()A 循环的集合B 地址的集合C 路径的集合D 目标的集合答案:C解释:白盒测试是把程序看成装在一个透明的白盒子里,也就是清楚了解程序的结构和处理过程,测试用例要覆盖程序中的所有可能路径。
4、软件维护工作中,大部分工作属于()A 改正性维护B 适应性维护C 完善性维护D 预防性维护答案:C解释:在软件维护工作中,完善性维护占了大部分,因为随着用户需求的变化和使用过程中的新发现,需要对软件功能进行扩充和增强。
二、填空题1、软件危机产生的主要原因是软件产品的_________和软件生产的_________之间的矛盾。
答案:复杂性;规模性解释:软件产品的复杂性不断增加,而软件生产的规模性又使得管理和控制变得困难,这两者之间的矛盾导致了软件危机。
2、结构化分析方法使用的主要工具是_________和_________。
答案:数据流图;数据字典解释:数据流图用于描述系统中数据的流动和处理过程,数据字典则对数据流图中的元素进行详细的定义和说明。
3、软件测试的步骤包括单元测试、_________、_________和系统测试。
软件测试的基本概念
软件测试的基本概念软件测试是软件工程中非常关键的一环节,意思是对软件系统进行检测和验证,以发现其中的错误、缺陷、漏洞等。
测试的主要目标是保证软件系统的质量,以满足用户的需求和期望,同时降低软件开发中的风险和成本。
一、软件测试的基本概念1.测试的定义与分类:测试是一种实现非功能性需求的方式,也是软件质量保证的一个过程。
根据测试执行的对象不同,测试可以分为单元测试、集成测试、系统测试、验收测试等不同的分类。
2.测试用例与测试计划:测试用例是为达到某个特定的测试目标而制定的一组测试步骤,而测试计划则是测试的一个整体组织,包括测试目标、测试资源、测试计划和执行、测试管理和跟踪等。
3.缺陷与缺陷管理:在测试过程中,测试人员发现的问题和错误被称为缺陷,而缺陷管理是针对这些问题的跟踪、管理、解决和报告的过程,以确保软件质量。
二、软件测试的流程在进行软件测试时,可以参考以下流程:1.需求分析:对需求进行深入了解和分析,确保测试人员掌握了需求的核心内容和所有功能点的逻辑。
2.测试计划与策略:编制测试计划及测试策略,包括测试的目标、范围、资源、时间、环境等。
3.测试用例设计:根据需求和功能设计测试用例。
4.测试环境准备:搭建测试环境并配置好测试所需的相关软件、硬件及网络等。
5.测试用例执行:按照测试用例进行测试并记录测试结果。
6.缺陷跟踪:发现问题之后,进行缺陷跟踪分析、确认、解决、验证和报告等。
7.测试报告:汇总所有的测试结果并进行测试报告的撰写。
三、软件测试的方法软件测试的方法有很多种,常见的有如下几种:1.黑盒测试:又叫功能测试,针对软件系统的功能进行测试,不考虑内部实现。
2.白盒测试:又叫结构测试,测试人员需要了解软件系统的内部实现,以进行测试。
3.灰盒测试:结合黑盒和白盒测试的优缺点,进行测试。
4.自动化测试:利用专用的软件工具实现自动执行测试用例,并比较测试结果和预期结果。
5.性能测试:测试软件系统在一定规模和负载下的性能表现和负载能力。
白盒测试(条件组合覆盖、条件覆盖)
中每个判定的每个条件的每个可能取值至少执行 一次; 用例设计:条件取值-T1,F2,T3,T4; F1,T2,F3,F4;
序号 1 2 X 90 40 Y 70 90 路径 OBC OBD
条件覆盖
优点 条件覆盖比判定覆盖,增加了对符合判定情况的测 试,增加了测试路径。 缺点 要达到条件覆盖,需要足够多的测试用例,但条件 覆盖并不能保证判定覆盖。条件覆盖只能保证每个 条件至少有一次为真,而不考虑所有的判定结果
要求: 画出程序流程图; 标识条件表达式序列号; 用条件组合覆盖法设计测试用例; 用条件覆盖法设计测试用例。 测试用例格式如下表: 序 号 1 输入 条件 i=?,j=? 输出 结果 条件 取值 情况 路径
m=, T1T2 n=?,k =?
2 3
90 70 30 90 90 70 50
路径
OAE OBCE OBDE OBCE OBDE OBDE OBDE
条件组合
优点 多重条件覆盖准则满足判定覆盖、条件覆盖和判定 /条件覆盖准则。 缺点 线性地增加了测试用例的数量。
《软件工程》教学
4、 条件覆盖
条件覆盖:设计足够多的测试用例,使被测程序
白盒测试条件组合覆盖条件覆盖内容要点软件工程教学掌握条件组合覆盖设计测试用例掌握条件覆盖设计测试用例逻辑覆盖实例讲解软件工程教学3条件组合覆盖条件组合覆盖
条件组合覆盖,条件覆盖
白盒测试
内容要点
掌握条件组合覆盖设计测试用例
掌握条件覆盖设计测试用例
《软件工程》教学
逻辑覆盖实例讲解
《软件工程》教学
课堂练习
4.2 课堂实践-条件组合覆盖和条件覆盖.doc
Void sort(int i,int j) {
软件工程中的测试与验证
软件工程中的测试与验证一、引言软件是现代社会的普遍存在,作为软件生命周期的重要一个环节,软件测试和验证可以为软件的质量保障提供有效保障。
本文将从测试和验证的概念、软件测试与验证的方法与流程、软件测试与验证的常用工具等几个方面探讨软件工程中的测试与验证。
二、测试与验证的概念测试是指通过一系列的操作,对软件系统或其组成元素进行评价或者处理,并根据给定的标准或指标进行判定,以发现系统错误或潜在的错误,从而提高系统质量。
验证是指系统在需求或规格说明的限制下被构造出来与所期望的效果一致,并满足系统运行的需求,包括对系统的正确性、完整性、一致性、符合性和有效性进行确认和证明。
三、软件测试与验证的方法与流程软件测试与验证的方法主要包括黑盒测试、白盒测试和灰盒测试。
黑盒测试是在不考虑软件内部的实现细节前提下,通过输入数据和观察输出结果来评价软件系统的质量和可靠性,主要测试的是系统的功能性、完整性和准确性。
白盒测试是利用软件内部的源代码和程序结构信息进行测试,测试者需要具有程序设计的技能和经验,这种测试对软件的系统性能、安全性、效率性等方面进行评价。
灰盒测试是介于黑盒测试和白盒测试之间的一种测试方法,既考虑了输入输出也考虑了系统的内部实现。
软件测试与验证的流程主要包括测试计划、测试设计、测试执行、测试报告和测试总结等环节。
其中,测试计划是测试工作的目标、任务、方法和过程的详细描述;测试设计是定义测试用例和测试脚本,确定测试数据和环境;测试执行是按照测试计划和测试设计来进行测试,并记录测试结果;测试报告是对测试结果进行分析和总结,并向受测软件的开发人员提供测试建议和改进方案;测试总结则是对测试过程进行总结,评价测试效果和效率。
四、软件测试与验证的常用工具软件测试和验证的常用工具主要包括源代码分析工具、测试用例生成工具、自动化测试工具和缺陷跟踪工具等。
源代码分析工具可以帮助测试人员了解软件系统的结构和内在逻辑,从而提高软件测试和验证的效率和效果。
白盒测试方法主要用于测试什么
白盒测试方法主要用于测试什么
白盒测试是一种软件测试方法,通常被应用于计算机软件工程领域。
白盒测试方法主要用于测试软件系统内部结构和逻辑是否有效,并且通过检查代码的执行路径来验证软件程序是否按照设计规范进行处理。
在白盒测试过程中,软件测试人员会深入了解软件系统的内部机制,以检查代码的质量、逻辑错误和性能瓶颈。
白盒测试方法主要包括以下几个方面:
1.代码覆盖率测试:白盒测试会通过对代码的不同部分进行覆盖,以
确保每一段代码都能被执行到,并且保证代码的覆盖率达到预定的要求。
通过代码覆盖率测试,可以发现潜在的逻辑错误和代码漏洞。
2.路径覆盖测试:白盒测试方法会检查软件程序的不同执行路径,以
验证软件系统在不同条件下的执行结果是否符合预期。
路径覆盖测试可以帮助发现代码中可能存在的逻辑错误和死代码,确保软件系统的稳定性和可靠性。
3.数据流分析:白盒测试会对软件系统中的数据流进行分析,以验证
数据在程序中的流动是否正确,并检测数据处理过程中是否存在潜在的问题。
数据流分析可以帮助发现可能存在的数据泄露、数据损坏和数据竞争等问题。
4.性能测试:白盒测试方法也包括对软件系统的性能进行测试,以验
证软件在不同负载下的执行效率和响应速度。
性能测试可以帮助发现软件系统中的性能瓶颈和优化潜力,确保软件系统能够满足用户的需求。
总的来说,白盒测试方法主要用于测试软件系统的内部结构和逻辑是否正确,以确保软件程序的质量和稳定性。
通过对代码的覆盖率、路径覆盖、数据流分析和性能进行测试,可以有效地发现软件系统中潜在的问题,并及时进行修复和优化,从而提高软件系统的可靠性和性能表现。
白盒测试及其用例设计
优先测试关键业务
逻辑
针对核心功能和业务流程,设计 有针对性的测试用例,提高关键 代码的覆盖率。
自动化测试工具
利用自动化测试工具进行白盒测 试,可以快速执行大量测试用例, 提高代码覆盖率。
如何处理复杂的业务逻辑?
分解复杂逻辑
将复杂的业务逻辑拆分成多个小逻辑,针对每个 小逻辑设计独立的测试用例,降低测试难度。
确定测试目标与范围
1
明确测试的目的和目标,确定测试的范围和重点。
2
了解被测系统的需求和功能,确定测试的关注点。
3
确定测试所需的资源、时间和人力,制定相应的 计划。
分析被测系统与代码
对被测系统进行详细分析,了解其架构、模块 和关键功能。
熟悉被测系统的代码结构、逻辑和实现方式。
识别潜在的缺陷和风险点,为设计测试用例提 供依据。
详细描述
判定表设计法是一种基于条件判断的测试用 例设计方法。它通过列出所有可能的输入条 件和相应的输出结果,构建判定表,然后根 据判定表设计测试用例,以覆盖所有可能的
输入条件和输出结果。
决策树设计法
总结词
通过构建决策树来设计测试用例的方法。
详细描述
决策树设计法是一种基于条件判断的测试用例设计方法。它通过构建决策树来表示软件 中各种条件判断的逻辑关系,然后根据决策树设计测试用例,以覆盖所有可能的判断逻
分析测试覆盖率和质量,评估被测系统的质量水 平。
提供改进建议和优化方案,为开发团队提供反馈 和建议。
05
白盒测试工具与技术
Junit
Junit是一个Java语言的单元测 试框架,用于编写和执行测试 用例,验证代码的正确性和可
靠性。
它支持测试驱动开发(TDD), 允许开发者先编写测试用例,再 编写实现代码,从而保证代码质
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
白盒测试白盒测试以程序的结构为依据,所有又称为结构测试。
早期的白盒测试把注意力放在流程图的各个判定框,使用不同的逻辑覆盖标准来表达对程序进行测试的详尽程度。
随着测试技术的发展,人们越来越重视对程序执行路径的考察,并且用程序图代替流程图来设计测试用例。
为了区分这两种白盒测试技术,以下把前者称为逻辑覆盖测试,后者称为路径测试。
一、逻辑覆盖测试逻辑覆盖测试法(Logic Coverage Testing)考察的重点是图中的判定框(菱形框)。
因为这些判定若不是与选择结构有关,就是与循环结构有关,是决定程序结构的关键成分。
按照对被测程序所作测试的有效程度,逻辑覆盖测试可由弱到强区分为5种覆盖标准:举例说明:有一个程序段如下:bd(a)语句覆盖:设计若干个测试用例,运行被测程序,使得每一个可执行语句至少执行一次。
例如在上图所给出的例子中,正好所有的可执行语句都在路径L1(a->c->e)上,所以选择路径L1设计测试用例,就可以覆盖所有的可执行语句。
L1(a->c->e)={(A>1) and (B=0) } and {(A=2) or (x/A>1)}=(A=2) and (B=0) or {(A>1) and (B=0) and (x/A>1)}测试用例可以设计为:【(2,0,4),(2,0,3)】覆盖ace【L1】从程序中每个可执行语句都得到执行这一点来看,语句覆盖的方法似乎能够比较全面的检验每一个可执行语句。
但与后面介绍的其它覆盖相比,语句覆盖是最弱的逻辑覆盖准则。
(b)判定覆盖所谓判定覆盖就是设计若干个测试用例,运行被测试程序,使得程序中每个判断的取真分支和取假分支至少经历一次。
判定覆盖又称为分支覆盖。
如上例如果选择路径L1(a->c->e)和L2(a->b->d),可得满足要求得测试用例:L2(a->b->d)={(A<=1) or (B≠0) } and {(A≠2) and (x<=1)}=( A<=1) and (x<=1) or {( B≠0) and (A≠2) and (x<=1)}测试用例可以设计为:【(2,0,4),(2,0,3)】覆盖ace【L1】【(1,1,1),(1,1,1)】覆盖abd【L2】如果选取路径L3(a->b->e)和L4(a->c->d)L3(a->b->e)={(A<=1) or (B≠0) } and {(A=2) or (x>1)}={( A<=1) and (x>1)} or {( B≠0) and (A=2) } or {( B≠0) and (x>1)}L4(a->c->d)={(A>1) and (B=0) } and {(A≠2) and (x/A<=1)}还可以得到另一组可用得测试用例:【(2,1,1),(2,1,2)】覆盖abe【L3】【(3,0,3),(3,1,1)】覆盖acd【L4】所有测试用例得取法不唯一。
注意有例外情况,例如,如果把上例中第二个判定中的条件x>1错写成x<1,那么利用上面两组测试用例,仍能得到同样的结果。
这表明,只是判定覆盖,还不能保证一定能查出在判断得条件中存在得错误。
因此还需要更强的逻辑覆盖准则检验判断内部条件。
(c)条件覆盖所谓条件覆盖就是设计若干个测试用例,运行被测程序,使得程序中每个判断的每个条件的可能取值至少执行一次。
上例中,我们事先可对所有条件得取值加以标记。
例如:对于第一个判断:条件A>1取真值为T1,取假值为T1条件B=1取真值为T2,取假值为T2对于第二个判断:条件A=2取真值为T3,取假值为T3条件x>1取真值为T4,取假值为T4盖了判断中所有条件得可能取值。
但是后一组测试用例虽满足了条件覆盖,但只覆盖了第一个判断得取假分支和第二个判断得取真分支,不满足判定覆盖得要求。
为了解决这一矛盾,需要对条件和分支兼顾,有必要考虑以下得判定-条件覆盖。
(d)判定-条件覆盖所谓判定-条件覆盖就是设计足够的测试用例,使得判断中每个条件得所有可能取值至少执行一次,同时每个判断本身的所有可能判断结果至少执行一但是事实并非如此。
因为往往某些条件掩盖了另一些条件。
对于条件表达式(A>1)and (B=0)来说,若(A>1)的测试结果为真,则还有测试(B=0),才能决定表达式得值;而若(A>1)的测试结果为假,可以立刻确定表达式得结果为假。
这时往往就不再测试(B=0)的取值了。
因此,条件(B=0)就没有检查。
同样,对于条件表达式(A=2)or (X>1)来说,若(A=2)得测试结果为真,就可以立即确定表达式的结果为真。
这时,条件(X>1)就没有检查。
因此,采用判定-条件覆盖,逻辑表达式中的错误不一定能够查得出来。
(e)条件组合覆盖所谓条件组合覆盖就是设计足够得测试用例,运行被测程序,使得每个判断得所有可能得条件取值组合至少执行一次。
上例中,先对各个判断得条件取值组合加以标记。
如下:记①A>1,B=0 作T1 T2,属第一个判断得取真分支;②A>1,B≠0 作T1 T2,属第一个判断得取假分支;③A≯1,B=0 作T1 T2,属第一个判断得取假分支;④A≯1,B≠0 作T1 T2,属第一个判断得取假分支;⑤A=2,x>1 作T3 T4,属第二个判断得取真分支;⑥A=2,x≯1 作T3 T4,属第二个判断得取真分支;⑦A≠2,x>1 作T3 T4,属第二个判断得取真分支;⑧A≠2,x≯1 作T3 T4,属第二个判断得取假分支;支,但路径漏掉了L4。
测试还不完全。
六种白盒子测试方法:语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组...白盒测试的概述由于逻辑错误和不正确假设与一条程序路径被运行的可能性成反比。
由于我们经常相信某逻辑路径不可能被执行, 而事实上,它可能在正常的情况下被执行。
由于代码中的笔误是随机且无法杜绝的,因此我们要进行白盒测试。
白盒测试又称结构测试,透明盒测试、逻辑驱动测试或基于代码的测试。
白盒测试是一种测试用例设计方法,盒子指的是被测试的软件,白盒指的是盒子是可视的,你清楚盒子内部的东西以及里面是如何运作的。
白盒的测试用例需要做到:·保证一个模块中的所有独立路径至少被使用一次·对所有逻辑值均需测试true 和false·在上下边界及可操作范围内运行所有循环·检查内部数据结构以确保其有效性白盒测试的目的:通过检查软件内部的逻辑结构,对软件中的逻辑路径进行覆盖测试;在程序不同地方设立检查点,检查程序的状态,以确定实际运行状态与预期状态是否一致。
白盒测试的特点:依据软件设计说明书进行测试、对程序内部细节的严密检验、针对特定条件设计测试用例、对软件的逻辑路径进行覆盖测试。
白盒测试的实施步骤:1.测试计划阶段:根据需求说明书,制定测试进度。
2.测试设计阶段:依据程序设计说明书,按照一定规范化的方法进行软件结构划分和设计测试用例。
3.测试执行阶段:输入测试用例,得到测试结果。
4.测试总结阶段:对比测试的结果和代码的预期结果,分析错误原因,找到并解决错误。
白盒测试的方法:总体上分为静态方法和动态方法两大类。
静态分析是一种不通过执行程序而进行测试的技术。
静态分析的关键功能是检查软件的表示和描述是否一致,没有冲突或者没有歧义。
动态分析的主要特点是当软件系统在模拟的或真实的环境中执行之前、之中和之后, 对软件系统行为的分析。
动态分析包含了程序在受控的环境下使用特定的期望结果进行正式的运行。
它显示了一个系统在检查状态下是正确还是不正确。
在动态分析技术中,最重要的技术是路径和分支测试。
下面要介绍的六种覆盖测试方法属于动态分析方法。
黑盒测试(black—box testing)又称功能测试、数据驱动测试或基于规范的测试。
用这种方法进行测试时,被测程序被当作看不见内部的黑盒。
在完全不考虑程序内部结构和内部特性的情况下,测试者仅依据程序功能的需求规范考虑确定测试用例和推断测试结果的正确性。
因此黑盒测试是从用户观点出发的测试,黑盒测试直观的想法就是既然程序被规定做某些事,那我们就看看它是不是在任何情况下都做的对。
完整的“任何情况”是无法验证的,为此黑盒测试也有一套产生测试用例的方法,以产生有限的测试用例而覆盖足够多的“任何情况”。
由于黑盒测试不需要了解程序内部结构,所以许多高层的测试如确认测试、系统测试、验收测试都采用黑盒测试。
黑盒测试首先是程序通常的功能性测试。
要求:每个软件特性必须被一个测试用例或一个被认可的异常所覆盖;用数据类型和数据值的最小集测试;用一系列真实的数据类型和数据值运行,测试超负荷、饱和及其他“最坏情况”的结果;用假想的数据类型和数据值运行,测试排斥不规则输入的能力;对影响性能的关键模块,如基本算法、应测试单元性能(包括精度、时间、容量等)。
不仅要考核“程序是否做了该做的?”还要考察“程序是否没做不该做的2”同时还要考察程序在其他一些情况下是否正常。
这些情况包括数据类型和数据值的异常等等。
下述几种方法:(a)等价类划分,(b)因果图方法,(c)边值分析法,(d)猜错法,(e)随机数法,就是从更广泛的角度来进行黑盒测试。
每一个方法都力图能涵盖更多的“任何情况”,但又各有长处,综合使用这些方法,会得到一个较好的测试用例集。
1.等价类划分等价类划分是一种典型的黑盒测试方法。
等价类是指某个输入域的集合。
它表示对揭露程序中的错误来说,集合中的每个输入条件是等效的。
因此我们只要在一个集合中选取一个测试数据即可。
等价类划分的办法是把程序的输入域划分成若干等价类,然后从每个部分中选取少数代表性数据当作测试用例。
这样就可使用少数测试用例检验程序在一大类情况下的反映。
在考虑等价类时,应该注意区别以下两种不同的情况:有效等价类:有效等价类指的是对程序的规范是有意义的、合理的输入数据所构成的集合。
在具体问题中,有效等价类可以是一个,也可以是多个。
无效等价类:无效等价类指对程序的规范是不合理的或无意义的输入数据所构成的集合。
对于具体的问题,无效等价类至少应有一个,也可能有多个。
确定等价类有以下几条原则:如果输入条件规定了取值范围或值的个数,则可确定一个有效等价类和两个无效等价类。
例如,程序的规范中提到的输入条包括“……项数可以从1到999……”,则可取有效等价类为“l考项数<999”,无效等价类为“项数<l,,及“项数>999”。
输入条件规定了输入值的集合,或是规定了“必须如何”的条件,则可确定一个有效等价类和一个无效等价类。