黑盒测试之因果图法

因果图产生的原因

        在一个功能或一个界面中,往往会有多个控件,这些控件一般会有一定的制约关系或组合关系,并且功能模块的输出会依赖于输入的条件。

        如果在测试时必须考虑输入条件的各种组合,则可能的组合数目将是天文数字,因此必须考虑采用一种适合于描述多种条件的组合、相应产生多个动作的形式来进行测试用例的设计,这就需要利用因果图(逻辑模型)。

因果图的原理

         一些程序的功能可以用判定表(或称决策表)的形式来表示,并根据输入条件的组合情况规定相应的操作。。 定义:是一种利用图解法分析输入的各种组合情况,从而设计测试用例的方法,它适合于检查程序输入条件的各种组合情况。

因果图基本符号

        左结点ci表示输入状态(或称原因),右结点ei表示输出状态(或称结果)。ci 与 ei 取值0或1,0表示某状态不出现,1则表示某状态出现。

因果图4种关系

恒等:若 c1 是1,则 e1 也为1,否则 e1 为0。

非:若 c1 是1,则 e1 为0,否则e1为1。

或:若 c1 或 c2 或 c3 是1,则 e1 为1,否则 e1 为0。

与:若 c1 和 c2 都是1,则 e1 为1,否则 e1 为0。

因果图中的约束

        在实际问题中输入状态相互之间、输出状态相互之间可能存在某些依赖关系,称为“约束”或“制约”。对于输入条件的约束有E、I、O、R四种约束,对于输出条件的约束只有M约束。

        E约束(异):a和b中最多只有一个为1,即a和b不能同时 为1。(如3个a、b、c则a、b、c最多只有一个1,或全0)

        I 约束(或):a、b、c中至少有一个必须为1,即 a、b、c不能同时为0。

         O约束(唯一):a和b必须有一个且仅有一个为1。

         R约束(要求):a是1时,b必须是1,即a为1时,b不能为0。

        M约束(强制):若结果a为0,则结果b强制为0。

因果图约束符号

 

因果图测试流程

        1.根据程序规格说明书描述,分析并确定因(输入条件)和果(输出结果或程序状态的改变),画出因果图。

        2.将得到的因果图转换为判定表。

        3.为判定表中每一列所表示的情况设计一个测试用例。

因果图测试案例

公交一卡通自动充值系统,其需求描述如下:

        系统只接收50元或100元纸币,一次充值只能使用一张纸币,一次充值金额只能为50元或100元。

        若输入50元纸币,并选择充值50元,完成充值后退卡,提示充值成功。

        若输入50元纸币,并选择充值100元,提示输入金额不足,并退回50元。

        若输入100元纸币,并选择充值50元,完成充值后退卡,提示充值成功,找零50元。

        若输入100元纸币,并选择充值100元,完成充值后退卡,提示充值成功。

        若输入纸币后在规定时间内不选择充值按钮,退回输入的纸币,并提示错误。

        若选择充值按钮后不输入纸币,提示错误。

 (1)条件之间的制约及组合关系

根据上述描述,

输入条件(原因)为:

① 投币50元 ② 投币100元 ③ 选择充值50元 ④ 选择充值100元

输出(结果)有:

(a)完成充值、退卡 (b)提示充值成功 (c)找零 (d)提示错误

(2)明确所有条件之间的制约关系以及组合关系 条件之间的制约关系以及组合关系如图所示。

(3)画出因果图

         为了描述得更清楚,这里把每种情况单独画一个因果图出来。

        条件①和条件③可以组合,输出a和b的组合,也就是投币50元,充值50元,会输出完成充值、退卡,提示充值成功的结果。其因果图如图所示。

        条件①和条件④可以组合,输出c和d的组合,也就是投币50元,充值100元,会输出找零、提示错误的结果。其因果图如图所示。

 

         条件②和条件③可以组合,输出a、b、c的组合,也就是投币100元,充值50元,会输出找零、完成充值、提示充值成功的结果。其因果图如图所示。

        条件②和条件④可以组合,输出a和b的组合,也就是投币100元,充值100元,会输出完成充值、退卡,提示充值成功的结果。其因果图如图所示。        

         条件①、②、③、④均可以单独出现,其因果图如图所示。

 

(4)根据因果图,写出判定表 根据上面的因果图,写出对应的判定表。

 5)根据判定表,写出测试用例

根据上面的判定图,写出对应的测试用例

编号

用例说明

预期结果

1

投币50  选择充值50

正确充值50元,提示充值成功后退卡

2

投币50  选择充值100

系统提示错误并退回50

3

投币100  选择充值50

正确充值50元,提示充值成功后退卡,并找回50

4

投币100  选择充值100

正确充值100元,提示充值成功后退卡

5

投币50

系统提示错误并退回50

6

投币100

系统提示错误并退回100

7

选择充值50

系统提示错误

8

选择充值100

系统提示错误

### 黑盒测试中的因果图方法 #### 因果图方法概述 因果图是一种用于设计黑盒测试用例的技术,通过图形化的方式展示输入条件与输出结果之间的逻辑关系。该技术能够帮助识别不同输入组合下的预期行为,并能有效减少冗余测试用例的数量。 #### 原理说明 因果图基于布尔代数理论构建,其中每个输入变量对应于一个节点,而输出则取决于这些输入之间定义的关系。具体来说: - 输入条件被转换成原因; - 输出或动作被视为结果; - 使用特定符号来表达两者间的依赖性和约束条件[^1]。 #### 设计过程 为了创建有效的因果图并从中导出测试用例,通常遵循如下流程: 1. **确定输入和输出** 明确系统的全部可能输入以及相应的期望输出。 2. **绘制因果图** 将上述输入作为原因绘制成左侧的一系列节点;右侧则是对应的输出节点。接着,在二者间建立连接线以表示它们之间的逻辑关联,比如`AND`, `OR` 或者更复杂的函数形式。 3. **引入约束条件** 对某些特殊情况施加额外的规定,例如屏蔽(mask),即当某个事件发生时另一些不可能发生的状况应标记出来。这有助于捕捉现实中存在的业务规则限制[^2]。 4. **转化决策表** 完整的因果图表可以进一步简化为表格形式——决策表,便于后续编写具体的测试脚本。 5. **生成测试用例** 根据最终形成的决策表,针对每种不同的情况制定一组或多组测试数据集来进行验证工作。 ```python def causal_diagram_to_test_cases(causal_graph): test_cases = [] # 遍历因果图的所有路径 for path in generate_all_paths(causal_graph): input_conditions, expected_output = parse_path(path) # 创建单个测试用例 case = { 'inputs': input_conditions, 'expected_result': expected_output } test_cases.append(case) return test_cases # 辅助函数:解析给定路径得到输入条件列表及预期输出 def parse_path(path): inputs = {} output = None for node in path: if is_input_node(node): key, value = extract_condition_from_node(node) inputs[key] = value elif is_output_node(node): output = get_expected_value(node) return inputs, output ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值