软件测试的测试方法包括黑盒测试和白盒测试。我们在这里讨论白盒测试,也称为玻璃盒测试,结构化测试,透明盒测试 和开盒测试 。它是测试软件的内部编码和基础设施,重点是检查预定义的输入与预期的输出。它基于应用程序的内部工作,并围绕内部结构测试。在这种类型的测试中,设计测试用例需要编程技能。白盒测试的主要目标是关注通过软件的输入和输出流,并加强软件的安全性。
使用术语 “ 白盒 ” 是因为系统的内部视角。透明框或白框或透明框名称表示能够穿透软件的外壳了解其内部工作原理。
开发人员进行白盒测试。在这种情况下,开发人员将测试程序代码的每一行。开发人员执行白盒测试,然后将应用程序或软件发送给测试团队,在那里他们将执行黑盒测试并验证应用程序以及需求并识别错误将其发送给开发人员。
开发人员修复错误并进行一轮白盒测试,并将其发送给测试团队。在这里,修复错误意味着删除错误,并且特定功能在应用程序上运行良好。
在此,测试工程师将不包括修复缺陷,原因如下:
- 修复该错误可能会中断其他功能。因此,测试工程师应该先找到 bug ,而开发人员仍然应该进行 bug 修复。
- 如果测试工程师花费大部分时间修复 bug ,那么他们可能无法找到应用程序中的其他错误。
白盒测试还包含以下各种测试,如下所示:
- 路径测试
- 循环测试
- 条件测试
- 基于内存视角的测试
- 程序的测试性能
路径测试
在路径测试中,我们将编写流程图并测试所有独立的路径。在这里,编写流程图意味着流程图表示程序的流程,并显示每个程序是如何相互添加的,如下图所示:
测试所有独立路径意味着假设从 main ()到函数 G 的路径,首先设置参数并测试程序在该特定路径中是否正确,并以同样的方式测试所有其他路径并修复错误。
循环测试
在循环测试中,我们将测试循环,例如 while 、 for 和 do-while 等,并检查结束条件是否正常工作以及条件的大小是否足够。
例如 :我们有一个程序,开发人员给出了大约 50 , 000 个循环。
{
而( 50 , 000 )
......
......
} |
我们无法在所有 50 , 000 个循环周期中手动测试此程序。所以我们写了一个小程序,对所有 50 , 000 个周期都有帮助,正如我们在下面的程序中所看到的,测试 P 是用与源代码程序类似的语言编写的,这被称为单元测试。它仅由开发人员编写。
如下图所示,我们有各种要求,例如 1 、 2 、 3 、 4 。然后,开发人员为并行条件编写程序 1 、 2 、 3 、 4 等程序。在这里,应用程序包含 100 行代码。
开发人员将进行白盒测试,他们将逐步测试所有程序以查找错误。如果他们在任何程序中发现任何错误,他们都会纠正。他们必须再次测试系统,然后这个过程需要花费大量的时间和精力,并减慢产品发布时间。
现在,假设我们有另一种情况,客户想要修改需求,然后开发人员将进行所需的更改并再次测试所有四个程序,这需要花费大量时间和精力。
这些问题可以通过以下方式解决:
在此,我们将为一个类似的程序编写测试,其中开发人员用相关语言编写这些测试代码作为源代码。然后他们执行这些测试代码,也称为 单元测试程序 。这些测试程序链接到主程序并作为程序实现。
因此,如果代码中有任何修改或错误的要求,则开发人员在主程序和测试程序中都进行调整,然后执行测试程序。
条件测试
在这里,我们将测试 真 值和 假 值的所有逻辑条件 ; 也就是说,我们将验证 if 和 else 条件。
例如:
if(condition) - true
{
.....
......
......
}
else - false
{
.....
......
......
} |
上面的程序在这两种情况下都可以正常工作,这意味着如果条件是真的,那么否则应该是假的,反之亦然。
基于内存(大小)视角的测试
由于以下原因,代码的大小正在增加:
- 代码的重用不存在 :让我们举一个例子,我们有同一个应用程序的四个程序,程序的前十行是相似的。我们可以将这十行写成一个离散函数,上面四个程序也应该可以访问它。而且,如果存在任何错误,我们可以修改函数中的代码行而不是整个代码。
- 开发人员使用可能被修改 的逻辑代码 。如果一个程序员编写代码并且文件大小最大为 250kb ,那么另一个程序员可以使用不同的逻辑编写类似的代码,文件大小最大为 100kb 。
- 开发人员声明了许多函数和变量,这些函数和变量可能永远不会在代码的任何部分中使用。因此,该计划的规模将增加。
例如 ,
Int a = 15 ;
Int b = 20 ;
String S = "Welcome" ;
….
…..
…..
….
…..
Int p = b ;
Create user()
{
……
……
….. 200's line of code
} |
在上面的代码中,我们可以看到 整数 a 从未在程序的任何地方被调用过,而且函数 Create user 也从未在代码中的任何地方被调用过。因此,它会导致我们消耗内存。
由于代码很大,我们无法通过验证代码来手动记住这种类型的错误。因此,我们有一个内置工具,可以帮助我们测试不必要的变量和函数。而且,这里有一个名为 Rational purify 的工具。
假设我们有三个程序,如程序 P 、 Q 和 R ,它们为 S 提供输入。 S 进入程序并验证未使用的变量,然后给出结果。之后,开发人员将单击多个结果并调用或删除不必要的函数和变量。
此工具仅用于C 编程语言 和 C++ 编程语言 对于另一种语言,还有其他相关工具。
- 开发人员不使用可用的内置功能 ; 相反,他们使用他们的逻辑编写完整的功能。因此,它导致我们浪费时间并推迟产品发布。
程序的测试性能(速度,响应时间)
由于以下原因,应用程序可能很慢:
- 当使用逻辑时。
- 对于有条件的情况,我们将充分使用 or 和 and 。
- Switch-case ,这意味着我们不能使用嵌套 if ,而不能使用 Switch-case 。
正如我们所知,开发人员正在执行白盒测试,他们知道代码运行缓慢,或者程序的性能也在被故意破坏。开发人员无法手动检查程序并验证哪一行代码正在减慢程序。
为了恢复这种情况,我们有一个叫做 RationalQuantify 的工具,它可以自动解决这些问题。一旦整个代码准备就绪, rationalquantify 工具将遍历代码并执行它。我们可以在结果表中看到粗细线条的结果。
这里,粗线指定了代码的哪一部分是耗时的。当我们双击粗线时,该工具会自动将我们带到该行或代码段,它也会以不同的颜色显示。我们可以反复更改代码并使用此工具。当线的顺序都很细时,我们知道程序的呈现已经增强了。开发人员将自动执行白盒测试,因为它比手动执行节省时间。
白盒测试的测试用例源自软件开发生命周期的设计阶段。数据流测试、控制流测试、路径测试、分支测试、语句和决策覆盖——所有这些技术都被白盒测试用作创建无错误软件的指南。
白盒测试遵循一些工作步骤,使测试易于管理并易于理解下一个任务要做什么。执行白盒测试有一些基本步骤。
白盒测试的一般步骤
- 设计所有测试场景、测试用例,并根据高优先级编号确定优先级。
- 涉及在运行时研究代码,以检查资源利用率、代码的未访问区域、各种方法和操作所花费的时间等。
- 将对内部子程序进行测试。内部子程序(如非公共方法、接口)能够适当或不适当地处理所有类型的数据。
- 侧重于测试控制语句(如循环和条件语句),以检查不同数据输入的效率和准确性。
- 最后一步,白盒测试包括安全测试,通过查看代码如何处理安全性来检查所有可能的安全漏洞。
白盒测试的原因
- 它识别内部安全漏洞。
- 检查代码内部的输入方式。
- 检查条件循环的功能。
- 在单个级别测试函数、对象和语句。
白盒测试的优势
- 白盒测试优化了代码,从而可以识别隐藏的错误。
- 白盒测试的测试用例可以很容易地自动化。
- 这种测试比其他测试方法更彻底,因为它覆盖了所有代码路径。
- 即使没有 GUI ,也可以在 SDLC 阶段启动。
白盒测试的缺点
- 对于大规模编程应用程序,白盒测试非常耗时。
- 白盒测试非常昂贵和复杂。
- 它可能导致生产错误,因为开发人员没有详细说明。
- 白盒测试需要对编程语言和实现有详细知识和理解的专业程序员。
白盒测试中使用的技术
数据流测试 |
数据流测试是一组测试策略,它检查程序的控制流,以便根据事件的顺序探索变量序列。 |
控制流 测试 |
控制流测试通过控制结构确定程序语句或指令的执行顺序。程序的控制结构用于开发程序的测试用例。在这种技术中,测试人员选择大型程序的特定部分来设置测试路径。由程序的控制图表示的测试用例。 |
分支测试 |
分支覆盖技术用于覆盖控制流图的所有分支。它至少一次涵盖决策点的每个条件的所有可能结果(真和假)。 |
语句测试 |
语句覆盖技术用于设计白盒测试用例。此技术涉及至少执行一次源代码的所有语句。它用于计算源代码中执行的语句总数,占源代码中存在的语句总数。 |
决策测试 |
该技术报告布尔表达式的正确和错误结果。每当有两个或多个结果可能来自 do while 语句、 if 语句和 case 语句(控制流语句)时,它被视为决策点,因为有两个结果或真或假。 |
白盒测试和黑盒测试的区别
以下是白盒测试和黑盒测试之间的显着区别:
白盒测试 |
黑盒测试 |
开发人员可以执行白盒测试。 |
测试工程师执行黑盒测试。 |
要执行 WBT ,我们应该了解编程语言。 |
要执行 BBT ,不需要了解编程语言。 |
在这里,我们将研究源代码并测试代码的逻辑。 |
在此,我们将根据需求规范验证应用程序的功能。 |
在这方面,开发人员应该了解代码的内部设计。 |
在这种情况下,无需了解代码的内部设计。 |
|