一、软件白盒测试
软件白盒测试
软件测试的盒子测试方法包括黑盒测试和白盒测试,在这里讨论白盒测试,也称为玻璃盒测试,结构测试,开箱测试和透明盒测试。它测试软件的内部编码和基础设施,重点是根据预期和期望的输出检查预定义的输入,它基于应用程序的内部工作方式,并围绕内部结构测试。在这种类型的测试中,编程测试用例需要编程技巧,白盒测试的主要目标是通过软件关注输入和输出流,并加强软件的安全性。
由于系统的内部透视,使用术语“白盒子”,透明框或白框或透明框名称表示能够透过软件的外壳进入其内部工作。
白盒测试的测试用例源自软件开发生命周期的设计阶段,数据流测试,控制流测试,路径测试,分支测试,声明和决策覆盖所有这些技术使用白盒测试作为创建无错误软件的指南。
白盒测试遵循一些工作步骤,使测试易于管理,并且易于理解下一个要完成的任务。执行白盒测试有一些基本步骤。
白盒测试的通用步骤
1、设计所有测试场景,测试用例并根据高优先级编号对其进行优先级排序。
2、此步骤涉及在运行时研究代码以检查资源利用率,而不是访问代码区域,各种方法和操作所花费的时间等。
3、在此步骤中,将对内部子例程进行测试。内部子例程(如非公共方法,接口)能够适当地处理所有类型的数据。
4、此步骤侧重于测试控制语句(如循环和条件语句),以检查不同数据输入的效率和准确性。
5、在最后一步中,白盒测试包括安全测试,通过查看代码如何处理安全性来检查所有可能的安全漏洞。
白盒测试的原因
1、它识别内部安全漏洞。
2、检查代码中的输入方式。
3、检查条件循环的功能。
4、在单个级别测试函数,对象和语句。
白盒测试的优点
1、白盒测试可以优化代码,从而可以识别隐藏的错误。
2、白盒测试的测试用例可以轻松实现自动化。
3、此测试比其他测试方法更全面,因为它涵盖了所有代码路径。
4、即使没有GUI,它也可以在SDLC阶段启动。
白盒测试的缺点
1、在大规模编程应用程序中,白盒测试耗费太多时间。
2、白盒测试非常昂贵且复杂。
3、它可能导致生产错误,因为开发人员没有详细说明。
4、白盒测试需要具备编程语言和实现的详细知识和理解的专业程序员。
白盒测试中使用的技术:
测试技术 | 描述 |
---|
数据流测试 | 数据流测试是一组测试策略,用于检查程序的控制流程,以便根据事件的顺序探索变量的顺序。 |
控制流程测试 | 控制流测试通过控制结构确定语句或程序指令的执行顺序。程序的控制结构用于开发程序的测试用例。在该技术中,测试者选择大程序的特定部分来设置测试路径。测试用例由程序的控制图表示。 |
分支覆盖测试 | 分支覆盖技术用于覆盖控制流图的所有分支。它至少涵盖决策点的每个条件的所有可能结果(真实和错误)。 |
语句覆盖测试 | 语句覆盖技术用于设计白盒测试用例。该技术涉及至少执行一次源代码的所有语句。它用于计算源代码中执行语句的总数,在源代码中存在的总语句中。 |
决策覆盖测试 | 此技术报告布尔表达式的真假结果。每当语句中有两个或多个结果的可能性时,如while语句,if语句和case语句(控制流语句),这些都视为决策点,因为有两个结果为true 或false 。 |
二、软件数据流测试
软件数据流测试
数据流测试用于分析程序中的数据流,它是收集有关变量如何在程序中流动数据的过程,它试图获得过程中每个特定点的特定信息。
数据流测试是一组测试策略,用于检查程序的控制流程,以便根据事件的顺序探索变量的顺序,它主要关注分配给变量的值和通过集中在两个点上使用这些值的点,可以测试数据流。
数据流测试使用控制流图来检测可能中断数据流的不合逻辑的事物,由于以下原因,在值和变量之间的关联时检测到数据流中的异常:
1、如果使用变量而没有初始化。
2、如果初始化变量至少未使用一次。
让我们通过一个例子来理解:
在这段代码中,总共有8个语句,将选择一个涵盖所有8个语句的路径。正如代码中显而易见的那样,无法覆盖单个路径中的所有语句,因为如果语句2为真,则语句4,5,6,7未被覆盖,如果语句4为真,则语句2和3不包括在内。
因此,采取两种方式来涵盖所有陈述。
x= 1
Path - 1, 2, 3, 8
Shell
输出结果为:
2
当首先将x的值设置为1时,它会在步骤1中读取并分配x的值(在路径中取1)然后来到语句2(x> 0(在路径中取2))它是真, 它来自语句3(a = x + 1(在路径中取3))最后它出现在语句8上以打印x的值(输出为2)。
对于第二条路径,取x的值为1 -
Set x= -1
Path = 1, 2, 4, 5, 6, 5, 6, 5, 7, 8
输出结果为:
2
当将x的值设置为1,然后是第一个时,它会在步骤1中读取并分配x的值(在路径中取1)然后来到第2步,它是假的,因为x不大于0 (x> 0,x = -1)。由于错误的条件,它不会出现在语句3上并且直接跳转到语句4(在路径中取4)并且4为真(x <= 0并且它们的x小于0)然后出现在语句5(x < 1(在路径中取5))这也是真的所以它将出现在语句6(x = x + 1(在路径中取6))并且这里x增加1。
所以,
x=-1+1
x=0
x的值变为0。现在它转到语句5(x <1(在路径中取5))值为0且0小于1所以,它是真的。声明6(x = x + 1(在路径中取6))。
x=x+1
x= 0+1
x=1
将x变为1并再次转到语句5(x <1(在路径中取5))现在1不小于1因此,条件为假,它将来到其他部分时语句7(a = x +,其中x的值为1)并将值赋给a(a = 2)。最后,它出现在语句8上并打印出值(输出为2)。
为代码建立关联。在关联中,我们列出了所有定义及其所有
(1, (2, f), x),
(1, (2, t), x),
(1, 3, x),
(1, (4, t), x),
(1, (4, f), x),
(1, (5, t), x),
(1, (5, f), x),
(1, 6, x),
(1, 7, x),
(6,(5, f)x),
(6,(5,t)x),
(6, 6, x),
(3, 8, a),
(7, 8, a)
三、软件控制流程测试
软件控制流程测试
控制流测试是一种白盒测试下的测试技术,该技术的目的是通过控制结构确定语句或程序指令的执行顺序。程序的控制结构用于开发程序的测试用例,在该技术中,测试者选择大程序的特定部分来设置测试路径,它主要用于单元测试。测试用例由程序的控制图表示。
控制流图由节点,边缘,决策节点,结节点形成,以指定所有可能的执行路径。
用于控制流图的符号
1、节点
2、边缘
3、决策节点
4、连接节点
节点
控制流程图中的节点用于创建过程路径。它代表了接下来程序的程序顺序,测试人员可以确定程序的发生顺序。
我们在下面的示例中可以看到第一个节点表示启动过程,下一个过程是在赋值后分配n的值,如果是18或更大的值,则根据n的值确定过程的下一个节点的决策节点 如果小于18不符合条件的程序执行,那么它是合理的,程序将以其他方式执行。下一个节点是结节点,最后一个节点是停止节点以停止该过程。
边缘
控制流图中的边用于链接节点的方向。在下面的示例中可以看到,所有箭头都用于在适当的方向上链接节点。
决策节点
控制流程图中的决策节点用于根据值确定过程的下一个节点。可以在下面的示例中看到决策节点根据n的值确定过程的下一个节点,如果它是18或大于18,那么如果小于18,则合格的过程将执行,否则执行不合格的过程。
连接节点
控制流图中的结点节点是至少三个链路相遇的点。
示例
public class VoteEligiblityAge{
public static void main(String []args){
int n=45;
if(n>=18)
{
System.out.println("你有投票资格。");
}else{
System.out.println("你没有投票资格。");
}
}
}
控制流程图
上面的例子显示了投票年龄的资格标准,如果年龄是18岁或者超过18岁,那么打印消息“你有投票资格”,如果它少于18,则打印“你没有投票资格”。
此方案的程序如上所述,控制流程图是为测试目的而设计的。
在控制流图中,start,age,qualified,not eligible和stop是节点,n> = 18是决定哪个部分(if或else)将根据给定值执行的决策节点。符合条件的节点和不符合条件的节点的连接在停止节点上。
通过程序的流程图设计测试用例,以确定执行路径是否正确。所有节点,连接点,边缘和决策都是设计测试用例的基本部分。
四、软件分支覆盖测试
软件分支覆盖测试
分支覆盖技术用于覆盖控制流图的所有分支,它至少涵盖决策点的每个条件的所有可能结果(真和假),分支覆盖技术是一种白盒测试技术,可确保每个决策点的每个分支都必须执行。
然而,分支覆盖技术和决策覆盖技术非常相似,但两者之间存在关键差异,决策覆盖技术涵盖每个决策点的所有分支,而分支测试涵盖代码的每个决策点的所有分支。
换句话说,分支覆盖遵循决策点和分支覆盖边缘,许多不同的指标可用于查找分支覆盖范围和决策覆盖范围,但一些最基本的指标是:在程序执行期间查找程序的百分比和执行路径。
与决策覆盖一样,它也使用控制流图来计算分支数:
如何计算分支覆盖范围?
有几种方法可以计算分支覆盖率,但寻路是最常用的方法。
在此方法中,执行分支的路径数用于计算分支覆盖范围。分支覆盖技术可用作决策覆盖的替代方案。在某处,它没有被定义为单独的技术,但它不同于决策覆盖,并且是测试控制流图的所有分支所必需的。
让我们用一个例子来理解它:
Read X
Read Y
IF X+Y > 100 THEN
Print "Large"
ENDIF
If X + Y<100 THEN
Print "Small"
ENDIF
这是采用两个变量X和Y以及两个条件的基本代码结构。如果第一个条件为真,则打印“Large”,如果为假,则转到下一个条件。如果第二个条件为真,则打印“Small”。
控制代码结构的流程图
在上图中,描绘了代码的控制流程图。在第一种情况下,通过“Yes”决定,路径为A1-B2-C4-D6-E8,覆盖边数为1,2,4,5,6和8,但边缘3和7未覆盖 在这条路径上。为了覆盖这些边缘,必须遍历“No”决定。在“No”判定的情况下,路径是A1-B3-5-D7,并且覆盖边缘的数量是3和7。因此,通过穿过这两条路径,所有分支都覆盖。
Path 1 - A1-B2-C4-D6-E8
Path 2 - A1-B3-5-D7
Branch Coverage (BC) = Number of paths
=2
用例 | 覆盖的分支 | 路径 | 分支覆盖 |
---|
Yes | 1, 2, 4, 5, 6, 8 | A1-B2-C4-D6-E8 | 2 |
No | 3,7 | A1-B3-5-D7 | 2 |
五、软件语句覆盖测试
软件语句覆盖测试
语句覆盖是广泛使用的软件测试之一,它来自白盒测试。
语句覆盖技术用于设计白盒测试用例。该技术涉及至少执行一次源代码的所有语句。它用于计算源代码中源代码中执行的语句总数。
语句覆盖在白盒测试过程中得出测试用例的场景,该过程基于代码的结构。
在白盒测试中,测试人员的专注点是内部源代码和流程图或代码流程图的工作。
通常,在内部源代码中,有各种各样的元素,如运算符,方法,数组,循环,控制语句,异常处理程序等。根据给程序的输入,执行一些代码语句,有些可能不执行 被执行。语句覆盖技术的目标是覆盖代码中所有可能的执行语句和路径行。
下面通过一个例子来理解计算语句覆盖率的过程:
在这里,我们采用源代码根据输入值创建两个不同的场景,以检查每个场景的语句覆盖百分比。
源代码结构:
1、输入两个值,如a = 0和b = 1。
2、计算出这两个值的总和。
3、如果总和大于0,则打印“这是正结果”。
4、如果总和小于0,则打印“这是负结果”。
input (int a, int b)
{
Function to print sum of these integer values (sum = a+b)
If (sum>0)
{
Print ("这是正结果")
} else
{
Print ("这是负结果")
}
}
所以,这是程序的基本结构,这是它将要完成的任务。
现在,让我们看一下两种不同的场景,并计算给定源代码的语句覆盖的百分比。
场景1:如果a = 5,则b = 4
print (int a, int b) {
int sum = a+b;
if (sum>0) {
Print ("这是正结果")
} else
{
Print ("这是负结果")
}
}
在场景1中,可以看到sum的值是9,并且根据条件结果将是“这是正结果”。以黄色突出显示的语句是此方案的已执行语句。要计算第一个场景的语句覆盖率,假设取语句总数为7和执行语句数为5。
Total number of statements = 7
Number of executed statements = 5
Statement coverage = 5/7*100
= 500/7
= 71%
类似地,在场景2中
如果:A = -2, B = -7
print (int a, int b) {
int sum = a+b;
if (sum>0)
print ("这是正的结果")
else
print ("这是负的结果")
}
在场景2中,可以看到sum的值将是-9(小于0),并且根据条件,结果将是“这是负的结果”。以黄色突出显示的语句是此方案的已执行语句。
要计算第一个场景的语句覆盖率,请使用语句总数为7的和已使用语句数为6。
Total number of statements = 7
Number of executed statements = 6
Statement coverage = 6/7*100
= 600/7
= 85%
但是,可以看到两种情况都涵盖了所有语句,我们可以认为整体语句覆盖率是100%。
因此,语句覆盖技术涵盖了死代码,未使用的代码和分支。
六、软件决策覆盖测试
软件决策覆盖测试
决策覆盖技术属于白盒测试,它为布尔值提供决策覆盖,此技术报告布尔表达式的真/假结果。每当语句中有两个或多个结果的可能性时,如while语句,if语句和case语句(控制流语句),它被视为决策点,因为有两个结果为true或false。
决策覆盖率通过使用控制流图或图表涵盖代码的每个布尔条件的所有可能结果。
通常,决策点有两个决策值,一个是true,另一个是false,这就是为什么大多数时候结果总数是2的原因。决策覆盖率的百分比可以通过将行使结果的数量除以结果总数并乘以100来计算出。
在这种技术中,很难获得100%的覆盖率,因为有时表达式变得复杂。因此,有几种不同的方法来报告决策覆盖范围。所有这些方法都涵盖了最重要的组合,非常类似于决策覆盖。这些方法的好处是增强了控制流的灵敏度。
我们可以找到决策覆盖的数量如下。
下面通过一个例子来理解它。考虑应用于决策覆盖技术的代码:
Test (int a)
{
If(a>4)
a=a*3
Print (a)
}
场景1:a的值是7(a = 7),那么
Test (int a=7)
{
if (a>4)
a=a*3
print (a)
}
如果检查条件(a> 4),则此代码的结果为“True”。
当a的值为7时控制流程图如下 -
决策覆盖率的计算:
Decision Coverage = ½*100 (Only "True" is exercised)
=100/2
= 50
Decision Coverage is 50%
场景2:a的值是3(a = 3)
Test (int a=3)
{
if (a>4)
a=a*3
print (a)
}
这段代码的结果是:“False”,因为检查条件(a> 4)。
决策覆盖率的计算:
= ½*100 (仅在 "False" 时执行)
=100/2
= 50
Decision Coverage = 50%
决策覆盖范围的结果表:
测试用例 | A的值 | 输出 | 决策覆盖范围 |
---|
1 | 3 | 3 | 50% |
2 | 7 | 21 | 50% |
七、软件灰盒测试
软件灰盒测试
灰盒(GreyBox)测试是一种软件测试方法,用于部分了解内部工作结构来测试软件应用程序。它是黑盒子和白盒测试的组合,因为它涉及访问内部编码以设计测试用例,因为白盒测试和测试实践在功能级别作为黑盒测试完成。
灰盒(GreyBox)测试通常识别属于Web系统的特定于上下文的错误。例如; 在测试时,如果测试人员遇到任何缺陷,那么他会对代码进行更改以解决缺陷,然后再次实时测试。它专注于任何复杂软件系统的所有层,以提高测试覆盖率。它提供了测试表示层和内部编码结构的能力。它主要用于集成测试和渗透测试。
为什么选择灰盒测试?
选择灰盒测试的原因如下:
1、它提供了白盒测试和黑盒测试的综合优势。
2、它同时包括开发人员和测试人员的输入值,以提高产品的整体质量。
3、它减少了长时间功能和非功能测试的时间消耗。
4、它为开发人员提供了足够的时间来修复产品缺陷。
5、它包括用户观点,而不是设计师或测试者的观点。
6、它深入涉及用户观点的要求检查和规格确定。
灰盒测试策略
测试人员必须从源代码设计测试用例时没有必要使用灰盒测试。为了执行此测试,可以基于体系结构,算法,内部状态或程序行为的其他高级描述的知识来设计测试用例。它使用所有简单的黑盒测试技术进行功能测试。测试用例生成基于要求并在通过断言方法测试程序之前预设所有条件。
执行灰盒测试的一般步骤是:
首先,选择并识别来自黑盒和白盒测试输入的输入。
第二,确定这些选定投入的预期产出。
第三,确定在测试期间穿越的所有主要路径。
第四,任务是确定子功能,这些功能是执行深层次测试的主要功能的一部分。
第五,任务是确定子功能的输入。
第六,任务是确定子功能的预期输出。
第七,任务包括执行子功能的测试用例。
第八,任务包括验证结果的正确性。
灰盒测试设计的测试用例包括安全相关,浏览器相关,GUI相关,操作系统相关和数据库相关测试。
灰盒测试技术
矩阵测试这种测试技术属于灰盒测试。它定义了特定程序的所有已使用变量。在任何程序中,变量都是值可以在程序内传播的元素。它应该按照要求,否则会降低程序的可读性和软件的速度。矩阵技术是一种通过识别程序中使用的变量来删除未使用和未初始化变量的方法。
回归测试
回归测试用于验证软件任何部分的修改是否未对软件的任何其他部分造成任何不利或无意的副作用。在确认测试期间,任何缺陷都得到修复,并且该部分软件开始按预期工作,但固定缺陷可能会在软件中的其他位置引入不同的缺陷。因此,回归测试通过测试重新测试风险用例,在防火墙内重新测试,重新测试所有等策略来处理这些类型的缺陷。
正交阵列测试或OAT
此测试的目的是用最少的测试用例覆盖最大代码。测试用例的设计方式可以覆盖最大代码以及具有较少测试用例的GUI功能。
模式测试
模式测试适用于通过遵循先前软件的相同模式而开发的这种类型的软件。在这些类型的软件中可能会出现相同类型的缺陷。模式测试确定失败的原因,以便可以在下一个软件中修复它们。
通常,灰盒方法中使用自动化软件测试工具来执行测试过程。提供给测试人员的存根和模块驱动程序可以减轻手动代码生成的负担。
八、黑盒,白盒和灰盒测试的对比
黑盒,白盒和灰盒测试的对比
黑盒测试,白盒测试与灰盒测试的比较和区别如下所示:
编号 | 黑盒测试 | 白盒测试 | 灰盒测试 |
---|
1 | 不需要了解内部工作结构(代码)。测试用例只需要GUI(图形用户界面)。 | 测试需要了解内部工作结构(软件编码)。 | 部分了解内部工作结构。 |
2 | 黑盒测试也称为功能测试,数据驱动测试和封闭盒测试。 | 白盒测试也称为结构测试,透明盒测试,基于代码的测试和透明测试。 | 灰盒测试也称为半透明测试,因为测试人员对编码知识有限。 |
3 | 测试方法包括试验技术和错误猜测方法,因为测试人员不需要知道软件的内部编码。 | 通过验证软件中固有的系统边界和数据域来进行白盒测试,因为不缺乏内部编码知识。 | 如果测试人员具有编码知识,则通过验证软件的数据域和内部系统边界来进行。 |
4 | 输入表的测试空间(用于创建测试用例的输入)非常庞大,在所有测试空间中最大。 | 与黑盒测试相比,输入表的测试空间(用于创建测试用例的输入)较少。 | 输入表的测试空间(用于创建测试用例的输入)小于黑盒和白盒测试。 |
5 | 发现软件的隐藏错误非常困难,因为错误可能是由于黑盒测试未知的内部工作造成的。 | 发现隐藏错误很简单,因为它可能是由于内部工作,这在白盒测试中得到了深入探索。 | 很难发现隐藏的错误,可在用户级测试中找到。 |
6 | 它不适用于算法测试。 | 它非常适合并推荐用于算法测试。 | 它不被考虑用于算法测试。 |
7 | 黑盒测试中的时间消耗取决于功能规范的可用性。 | 由于冗长的代码,白盒测试需要很长时间来设计测试用例。 | 测试用例设计可以在短时间内完成。 |
8 | 测试人员,开发人员和最终用户可以参与测试。 | 只有测试人员和开发人员才能参与测试; 最终用户不能涉及。 | 测试人员,开发人员和最终用户可以参与测试。 |
9 | 这是所有测试过程中耗时最少的过程。 | 在所有测试过程中,整个测试过程是最耗时的。 | 比白盒测试耗时更少。 |
10 | 黑盒测试涵盖了抵御病毒攻击的弹性和安全性。 | 白盒测试不包括针对病毒攻击的弹性和安全性。 | 灰盒测试不包括针对病毒攻击的弹性和安全性。 |
11 | 黑盒测试的基础是外部期望内部行为未知。 | 灰盒测试的基础是编码,负责内部工作。 | 基于高级数据库图表和数据流图进行测试。 |
12 | 它不像白盒和灰盒测试方法那么详尽。 | 黑盒和灰盒测试方法之间最为详尽。 | 部分详尽; 取决于基于编码或基于GUI的测试用例的类型。 |
九、软件可视化测试
软件可视化测试
可视化测试用于通过定义数据来检查软件故障发生的情况,开发人员可以快速识别故障原因,并清楚地表达信息,以便任何其他开发人员可以利用这些信息。
可视化测试旨在显示实际问题,而不仅仅是描述它,显着增加理解和清晰度,以便快速解决问题。
可视化意味着我们可以看到的。因此,可视化测试需要整个过程的视频录制。它捕获视频格式系统测试时发生的所有事情。测试仪将图片网络摄像头中的图片和来自麦克风的音频评论作为输入值。
可视化检测系统
可视化检测系统包括用于收集数据和软件的高质量摄像机以及用于分析数据的计算机。摄像机用于在测试过程中捕获对象的图片。这些对象图片通过帧抓取器发送到计算机。
计算机具有分析图片并确定对象是否失败或是否通过检查的软件。
视频测试系统工作的条件必须得到很好的控制,并且易于维持测试持久性。
可视化测试提供了许多优点。它大大提高了通信质量,因为测试人员可以将问题呈现给开发人员,而不是以书面文档形式描述。开发人员具有测试失败所需的所有证据,因此,重点仅在于失败的原因以及如何解决。
下面给出了一些显着的优点和缺点:
可视化测试的优点
1、可视化测试很便宜,因为信息是以视频形式记录的。因此不需要以任何其他形式复制信息。它节省了资金。
2、可视化测试提供可移植性。如果软件类型相同,测试人员可以向任何其他测试人员提供视频。因此,在系统出现故障的情况下不会丢失数据。
3、可视化测试节省了测试时间,就像测试过程完成并以可视化形式保存一样,因此不需要再次测试软件。开发人员可以通过观看视频来识别缺陷。
4、可视化测试需要最少的特殊技能。
5、可视化测试需要最少的部件准备,因为需要只找到系统故障的原因。
可视化测试的缺点:
1、可视化测试仅适用于可见的表面,因此需要布置合适的表面。
2、可视化测试无法检测隐藏的缺陷; 它只能检测到更大的缺陷。
3、要记录清晰可见的视频照明必须很好地实现。
4、仅遵循规则不能模仿人工检查。
5、划痕和裂缝可能会造成误解。
6、如果软件组件存在差异,则无法通过可视化测试对视觉测试提供产品组件变体。
总结
当使用易于检测的缺陷测试软件并且不允许组件变化时,可使用可视化测试。