八、逻辑覆盖

2023-09-21 00:24:01

不要让你的弱点妨碍你的优势。
有两种互补的逻辑测试方法。
第一种被称为语义逻辑覆盖,这种覆盖只考虑逻辑表达式的含义而不管表达式的构成。语义逻辑覆盖的优点在于即使谓词被写成一种表面不同但是具有等价语义的形式,依然可以产生相同的测试用例。
第二种被称为语法逻辑覆盖,这种覆盖专门根据逻辑表达式的构成来生成测试用例。语法逻辑覆盖的优势在于可以处理一些当开发者不正确地构建表达式时发生地特殊情况。
研究发现语法逻辑覆盖通常可以检测到更多的故障,但是这种测试准则相对复杂而且其使用成本可能会很高。

8.1 有效的语义逻辑覆盖准则

简单逻辑覆盖准则

简单逻辑覆盖准则是语义逻辑覆盖的一种重要技术,通过选择简单的谓词或条件组合来实现逻辑覆盖。该准则有助于减少程序的复杂度,提高可读性和可维护性。在应用简单逻辑覆盖准则时,我们应优先选择那些在程序中易于理解、易于维护和易于测试的谓词或条件组合。

有效子句覆盖

有效子句覆盖是一种通过选择合适的子句组合来实现逻辑覆盖的技术。在进行有效子句覆盖时,我们应优先选择那些能够全面覆盖程序中的所有可能情况的子句组合。通过有效子句覆盖,我们可以提高程序的正确性,确保程序在各种不同情况下都能得到正确的结果。

无效子句覆盖

与有效子句覆盖相对应,无效子句覆盖是一种通过选择特定的子句组合来发现程序中的错误和缺陷的技术。在无效子句覆盖中,我们故意选择一些不可能为真的子句组合,以验证程序是否能够正确地处理这些异常情况。通过无效子句覆盖,我们可以提高程序的可信度和鲁棒性,确保程序在遇到异常情况时不会崩溃或产生错误的结果。

不可行性和包含

不可行性和包含是语义逻辑覆盖中两个重要的概念。不可行性指的是程序中某些语句或路径无法被执行到的现象,而包含则是指程序中某些语句或路径可以被执行到的现象。在进行语义逻辑覆盖时,我们应尽量避免程序中出现不可行的情况,以确保程序的正确性。同时,我们也应当关注包含的情况,以确保程序中的所有可能情况都能够被覆盖到。

让子句决定谓词

让子句决定谓词是一种重要的技术,可以帮助我们提高程序的可读性和可维护性。该技术通过将程序的逻辑划分为多个简单的子句,并为每个子句分配一个简单的谓词或条件来实现。这些谓词或条件可以直观地表示程序中各部分的功能和作用,从而帮助程序员更好地理解程序的逻辑和结构。同时,让子句决定谓词还可以简化程序的维护过程,使得在修改或扩展程序时能够更加方便快捷地定位和理解相应的代码。

找到满足准则的取值

在语义逻辑覆盖中,找到满足准则的取值是一项关键的任务。它涉及到根据特定的语义逻辑覆盖准则,寻找相应的输入或参数取值,以确保程序在这些取值的作用下满足相应的覆盖要求。例如,如果我们要求程序在进行某些操作时必须满足某种特定的条件,那么就需要通过找到满足该条件的取值来进行有效的语义逻辑覆盖。在实际应用中,找到满足准则的取值可以帮助我们有效地验证程序的正确性,提高程序的可信度和鲁棒性。

8.2 语法逻辑覆盖准则

一个逻辑谓词无论写成何种形式,语义逻辑覆盖准则都可以有效地应用于这个谓词。
一、蕴含项覆盖

蕴含项覆盖是一种基于程序源代码的测试方法,它通过分析程序的语法结构,推导出程序中的各种蕴含项,并设计测试用例来覆盖这些蕴含项。蕴含项覆盖的优点在于,它能够有效地检测出程序中的各种逻辑错误,提高程序的可靠性。同时,蕴含项覆盖还具有较高的覆盖率,能够减少测试用例的遗漏。

二、极小DNF

极小DNF(Minimized Disjunctive Normal Form)是程序逻辑的一种表达形式,它将程序逻辑表达式转化为DNF(Disjunctive Normal Form)形式,并对其进行极小化处理。极小DNF在测试用例设计中的应用具有重要意义,它能够帮助测试人员找到程序中的最小化故障集合,提高测试的效率和质量。

三、MUMCUT覆盖准则

MUMCUT(Mutation and Coverage Uniformity)覆盖准则是基于变异测试和覆盖均匀性的一种测试方法。该准则通过引入变异算子对程序进行变异,然后通过覆盖算子对变异后的程序进行覆盖。MUMCUT覆盖准则能够有效地检测出程序中的各种潜在错误,提高程序的鲁棒性和可靠性。

四、卡诺图

卡诺图(Karnaugh Map)是一种用于简化逻辑电路设计的工具,在测试用例设计中也有所应用。通过使用卡诺图,测试人员可以将逻辑表达式转化为图形形式,从而更加直观地分析程序逻辑。卡诺图可以帮助测试人员找出程序中的漏洞和错误,提高测试的准确性。同时,卡诺图还可以用于制定测试策略,指导测试用例的设计和生成。

8.3 程序的结构化逻辑覆盖

一、满足谓词覆盖
谓词覆盖是一种基本的逻辑覆盖准则,它要求对程序中每个谓词都至少设计一个测试用例。谓词覆盖的优点在于它可以全面覆盖程序中的逻辑表达式,但是它并不能保证测试用例的有效性和充分性。
二、满足子句覆盖
子句覆盖是一种比谓词覆盖更加严格的逻辑覆盖准则。它要求对程序中的每个子句都至少设计一个测试用例。子句覆盖可以更加准确地反映程序的逻辑结构,但是它也可能会导致测试用例的数量增加。
三、满足有效子句覆盖准则
有效子句覆盖准则是一种更加高级的逻辑覆盖准则,它要求测试用例必须覆盖程序中的所有有效子句。有效子句是指程序中那些对于输出结果有影响的子句。有效子句覆盖准则可以确保测试用例更加准确地检测程序中的逻辑错误,但是实现起来较为复杂。
四、谓词转换问题
在程序的结构化逻辑覆盖中,谓词转换问题是一个重要的问题。它涉及到如何将程序中的谓词转换为测试用例的问题。解决谓词转换问题的关键在于找到谓词之间的关系以及谓词与其他元素之间的联系,从而设计出有效的测试用例。
五、谓词中的副作用
在程序中,谓词可能会产生副作用,例如修改全局变量或者影响其他部分的程序状态。这些副作用可能会影响测试用例的准确性和可靠性,因此在实现程序的结构化逻辑覆盖时,必须要注意到这些副作用并采取相应的措施。

8.4 基于规范的逻辑覆盖

基于规范的逻辑覆盖是一种白盒测试方法,它以程序内部的逻辑结构为基础,设计测试用例来覆盖程序中的所有可能情况。
根据覆盖源程序语句的详尽程度,逻辑覆盖可以分为以下几种类型:

语句覆盖:设计足够多的测试用例,使得程序中每个可执行语句至少执行一次。
判定覆盖:设计足够多的测试用例,使得程序中每个判定的取真分支和取假分支都至少执行一次。
条件覆盖:设计足够多的测试用例,使得每个判定语句中的每个表达式都获得各种可能结果。
判定/条件覆盖:设计足够多的测试用例,使得判定中的每个条件的所有可能(真/假)至少出现一次,并且每个判定本身的判定结果也至少出现一次。
条件组合覆盖:设计足够多的测试用例,使得每个判定中条件的各种可能组合都至少出现一次。

基于规范的逻辑覆盖可以帮助测试人员更好地理解程序的逻辑结构,并且可以更加有效地发现程序中的错误和缺陷。

8.5 有限状态机的逻辑覆盖

有限状态机(Finite State Machine,FSM)是一种数学模型,用于描述有限个状态以及在这些状态之间的转移和动作等行为。有限状态机可以应用于各种领域,包括计算机科学、自动化控制、通信协议等等。在计算机科学中,有限状态机常常被用于描述程序或系统的行为。

逻辑覆盖是测试理论中的一种术语,它指的是对程序逻辑的一种覆盖方式,即设计足够多的测试用例,使得程序中的每个逻辑语句或者逻辑分支都至少被执行一次。在有限状态机中,逻辑覆盖可以被应用于描述状态转移和动作的行为。

有限状态机的逻辑覆盖可以通过以下步骤实现:

确定有限状态机中的状态和转移条件:首先需要明确有限状态机中的状态和状态转移的条件。这可以通过分析有限状态机的定义和规格说明来得到。
设计测试用例:根据有限状态机的定义和规格说明,设计足够多的测试用例,覆盖有限状态机中的所有状态和转移条件。测试用例应该包括所有可能的状态序列和状态转移序列。
执行测试用例:通过模拟有限状态机的行为,执行测试用例,观察状态转移和动作的结果是否符合预期。
分析测试结果:根据测试结果,分析有限状态机的行为是否正确,并记录任何不符合预期的结果。
通过逻辑覆盖,可以有效地发现有限状态机中的错误和缺陷,并提高有限状态机的可靠性和健壮性。

更多推荐

机械寿命预测(基于NASA C-MAPSS数据的剩余使用寿命RUL预测,Python代码,CNN_LSTM模型,有详细中文注释)

1.效果视频:机械寿命预测(NASA涡轮风扇发动机剩余使用寿命RUL预测,Python代码,CNN_LSTM模型,有详细中文注释)_哔哩哔哩_bilibili环境库版本:2.数据来源:https://www.nasa.gov/intelligent-systems-division数据文件夹数据介绍:当前基于机器学习的

计算机是如何工作的下篇

操作系统(OperatingSystem)操作系统是一组做计算机资源管理的软件的统称。目前常见的操作系统有:Windows系列、Unix系列、Linux系列、OSX系列、Android系列、iOS系列、鸿蒙等.操作系统由两个基本功能:对下,要管理硬件设备.对上,要给软件提供稳定的运行环境.因此,操作系统是软件硬件用户之

【C#】Redis在net core下使用教程

系列文章文章目录系列文章前言一、Redis简介1.1Redis优势1.2Redis与其他key-value存储有什么不同?二、Redis安装步骤2.1下载链接2.2安装测试三、Redis修改帐户密码四、Redis写成Windows服务五、.netcore-使用CSRedisCore操作redis前言官方教程:https

【Azure】构建安全架构的 Azure 云:深入了解零信任体系结构

文章目录前言一、零信任安全模型的概念以及背景介绍二、传统安全模型(边界模型)三、零信任模型(现阶段主流云厂商策略)四、Azure中的零信任体系结构(本文重点)4.1基础知识点(必须了解)(一)Azure中零信任的指导原则(二)Azure中调整为零信任4.2Azure中的零信任体系结构(六层防御)4.3AzureClou

STM32H7 Azure RTOS

STM32H7是意法半导体(STMicroelectronics)推出的一款高性能微控制器系列,基于ArmCortex-M7内核。它具有丰富的外设和高性能计算能力,适用于各种应用领域。AzureRTOS(原名ThreadX)是一款实时操作系统(RTOS),是AzureIoT解决方案的一部分。它是一个可裁剪、可扩展的嵌入

算法通关村第十九关:青铜-动态规划是怎么回事

青铜挑战-动态规划是怎么回事动态规划(简称DP,DynamicProgramming):最热门、最重要的算法之一。面试中大量出现,整体偏难。1.热身:重复计算和记忆化搜索(如何说一万次"我爱你")举例:看谁说更多的我爱你classFibonacciTest:def__init__(self):self.count=0d

MOEA算法的背景知识

MOEA算法多目标进化算法优化MOEA工作原理举个例子为什么单一策略可能会导致种群中的个体过于相似?种群在MOEA里面做什么?举例说明多目标进化算法优化MOEAMulti-objectiveevolutionaryalgorithmoptimization(MOEA)多目标进化算法优化(MOEA)是一种用于解决多目标优

日志审计设计-结合spring-aop实现

日志审计设计设计原则和思路:元注解方式结合AOP,灵活记录操作日志能够记录详细错误日志为运营以及审计提供支持日志记录尽可能减少性能影响操作描述参数支持动态获取,其他参数自动记录。1.定义日志记录元注解,根据业务情况,要求description支持动态入参。例:新增应用{applicationName},其中applic

Linux 文件 & 目录管理

Linux文件基本属性Linux系统是一种典型的多用户系统,为了保护系统的安全性,不同的用户拥有不同的地位和权限。Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。可以使用命令:ll或ls–l来显示一个文件的属性以及文件所属的用户和组,如图所示:详细解析命令:ls-l中显示的内容使用命令:ll

自定义开发成绩查询小程序

在当今数字化时代,教育行业借助技术手段提高教学效果。作为老师,拥有一个自己的成绩查询系统可以帮助你更好地管理学生成绩,并提供更及时的反馈。本文将为你详细介绍如何从零开始搭建一个成绩查询系统,让你的教学工作更加高效和便捷。不过比较便捷好用的方法还是直接使用现成工具。今天我为大家争取到了易查分的福利,只需要在注册时输入邀请

解密Docker容器网络

一个Linux容器能看见的“网络栈”,被隔离在它自己的NetworkNamespace中。1“网络栈”的内容网卡(NetworkInterface)回环设备(LoopbackDevice)路由表(RoutingTable)iptables规则对于一个进程,这些构成它发起、响应网络请求的基本环境。作为一个容器,它可声明直

热文推荐