因果图是一种可用于功能测试范围内的测试用例设计方法,它能系统地选择一组测试用例,这些测试用例有很高的概率检测出系统中存在的错误。该技术在开发测试用例时,会探索系统的输入以及输入的组合(即原因)。
以下为因果图的构建和测试用例生成的流程:
graph LR
A[分析用例和场景] --> B[分配唯一标识]
B --> C[构建布尔图]
C --> D[追溯原因组合]
D --> E[生成测试用例]
金融单位管理(FUM)应用程序提供更新和查询与银行组织单位相关信息的服务。银行被划分为执行不同活动的金融单位,如销售金融产品、客户服务、支持服务等。一个典型的金融单位是分行,例如马德里储蓄银行在西班牙各地有超过 1500 家分行。
新单位创建后,在宣布其可运行之前,需要完成以下步骤:
1. 识别单位(名称和唯一识别码)
2. 分配单位站点
3. 人员分配
4. 办公室硬件安装
5. 法律放行确认
6. 会计放行确认
7. 确认金融单位相对于计算系统的运行状态
该应用使用 OMT 面向对象方法开发,用 Java 编码,并使用消息传递中间件将客户端机器连接到主机集中式数据库。设计和开发了以下元素:4 个用例、23 个业务类、53 个设计类和 12 个持久化类。
以“创建金融单位(Create FU)”用例为例,其文档使用以下模板:
- 用例名称 :Create FU
- 用例 ID :UC1
- 类型 :实际
- 主要参与者 :组织员工
- 次要参与者 :马德里储蓄银行员工(人事员工、会计员工、房地产员工、系统员工)
- 与其他用例的关系 :不适用
- 描述 :组织部门的用户启动此用例,以创建银行的新金融单位并建立其与其他单位的关系。
UC1 创建金融单位用例包含 7 个场景(独立执行路径),以人员分配场景为例:
- 名称 :人员分配
- ID :E1 - 3
- 前置条件 :单位必须已识别,要分配人员的单位站点已创建。
- 描述 :
1. 用户输入要分配人员的员工编号。
2. 系统检查员工是否已存在。
3. 用户输入该员工与该单位相关的工作分配(百分比)。
4. 系统以列表形式显示现有单位站点。
5. 用户选择单位站点。
6. 用户可以根据需要分配尽可能多的员工。
- 注意事项 :工作代表在马德里储蓄银行组织中扮演的重要角色。
对于完整的 UC1 用例(包括其 7 个场景),识别出的原因和结果如下表所示:
| 原因 | 结果 |
| — | — |
| 1. 输入金融单位代码 | 100. 正确部分放行 |
| 2. 从代码列表中选择金融单位代码 | 101. 正确完全放行 |
| 3. 输入金融单位描述 | 102. 错误的 FU 代码 |
| 4. 从站点列表中选择站点 | 103. FU 描述中的错误 |
| 5. 输入员工描述 | 104. 错误的员工标识符 |
| 6. 确认法律放行 | 105. 错误的交互序列 |
| 7. 确认会计状态 | |
| 8. 确认相对于计算系统的运行状态 | |
| 9. 确认办公室硬件安装 | |
用例 1 被转换为一个布尔逻辑图,代表原因之间的约束和因果序列,使用了如“与(and)”、“或(or)”、“非(not)”等逻辑运算符以及“E(原因排除)”等约束。
通过确定因果图中哪些输入条件会导致每个已识别的输出条件,得到决策表,表中的每一列代表一个独立的测试用例。
| 原因/测试用例 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| — | — | — | — | — | — | — | — | — | — | — | — | — | — |
| 1. 输入金融单位代码 | F | T | T | - | - | F | F | F | F | F | F | F | T |
| 2. 从代码列表中选择金融单位代码 | – | – | – | T | T | T | F | F | F | F | F | F | – |
| 3. 输入金融单位描述 | – | F | T | – | – | – | – | – | – | – | – | – | T |
| 4. 从站点列表中选择站点 | – | – | – | T | – | – | T | – | – | – | – | – | T |
| 5. 输入员工描述 | – | – | – | – | F | T | – | T | – | – | – | – | T |
| 6. 确认法律放行 | – | – | – | – | – | – | – | – | T | – | – | – | T |
| 7. 确认会计状态 | – | – | – | – | – | – | – | – | – | T | – | – | T |
| 8. 确认相对于计算系统的运行状态 | – | – | – | – | – | – | – | – | – | – | T | – | T |
| 9. 确认办公室硬件安装 | – | – | – | – | – | – | – | – | – | – | – | T | T |
| 100. 正确部分放行 | F | F | T | T | F | T | F | F | F | F | F | F | F |
| 101. 正确完全放行 | F | F | F | F | F | F | F | F | F | F | F | F | T |
| 102. 错误的金融单位代码 | T | F | F | F | F | F | F | F | F | F | F | F | F |
| 103. 金融单位信息错误 | F | T | F | F | F | F | F | F | F | F | F | F | F |
| 104. 错误的员工标识符 | F | F | F | F | T | F | F | F | F | F | F | F | F |
| 105. 错误的序列 | F | F | F | F | F | F | T | T | T | T | T | T | F |
验收测试成功检测到了隐藏的错误,检测到并修复了与设计类相关的两个错误,并运行了回归测试以验证代码修改。以下是 FUM 因果测试的相关数据:
| 用例 | 原因数量 | 结果数量 | 中间节点数量 | 测试用例数量 |
| — | — | — | — | — |
| UC1 | 9 | 6 | 4 | 13 |
| UC2 | 4 | 4 | 1 | 5 |
| UC3 | 7 | 4 | 2 | 7 |
| UC4 | 6 | 2 | 2 | 6 |
验收测试工作耗时两个月,全部手动完成,使用了屏幕捕获和回复测试工具来生成测试脚本以进行回归测试。
使用形式化方法进行实时系统设计可以对已完成的规范进行分析和验证,但由于其复杂性,在工业开发中应用受限,导致实际用户(工业界)的实际需求与科学界之间存在差距。
基于组件的设计作为一种设计技术,可以降低软件开发的复杂性和验证过程。在实时系统设计中,面向对象设计已证明其有效性,使用预定义组件可以显著改进并减少设计、实现和验证阶段。
提出了一个从一组特定组件设计实时控制系统的环境,该环境提供图形界面来定义组件级别。每个组件都关联一个高级时间 Petri 网和一个 Ada 代码,它们组合起来构建原型和设计规范。
设计新开发环境的过程应考虑以下决策:
1. 选择合适的组件作为高级抽象提供给用户。
2. 选择支持这些抽象的形式化模型。
3. 将单个组件转换为形式化组件。
4. 构建组件和转换的库。
5. 提供一个全局模型来构建完整的规范。
6. 测试规范。
7. 用选定的语言生成原型。
在实时系统开发中,Petri 网被广泛研究并用作指定并发系统的形式化方法,高级定时 Petri 网允许指定具有时间约束的并发系统。而 Ada 被认为是实现实时系统的合适语言。
从基于预定义组件的架构设计出发,生成基于高级 Petri 网的规范和 Ada 代码,以验证最终实现的某些属性。该方法可与其他设计方法(如 HRT - HOOD)结合使用。以下为组件化设计的流程:
graph LR
A[选择组件] --> B[选择形式化模型]
B --> C[组件转换]
C --> D[构建组件库]
D --> E[构建全局模型]
E --> F[测试规范]
F --> G[生成原型]
综上所述,因果图测试用例设计方法为软件功能测试提供了有效的手段,而组件化设计方法为实时系统设计带来了降低复杂度和提高效率的解决方案。通过这些方法,可以更好地进行软件测试和系统设计,提高软件的质量和可靠性。
通过对 FUM 应用的验收测试,成功检测到了隐藏的错误,如与设计类相关的两个错误,并及时进行了修复。这表明基于用例的验收测试能够有效地发现系统中的问题,提高软件的质量。
验收测试工作耗时两个月,全部手动完成,虽然使用了屏幕捕获和回复测试工具来生成测试脚本进行回归测试,但整体测试效率仍有待提高。在未来的测试中,可以考虑引入自动化测试工具,减少人工测试的工作量。
从 FUM 用例的测试结果来看,通过因果图生成的测试用例能够覆盖系统的各种功能和场景,确保了测试的全面性。但在实际测试中,仍需要根据系统的特点和需求,进一步优化测试用例,提高测试覆盖度。
组件化设计可以复用预定义的组件,减少了开发过程中的重复工作,降低了开发成本。同时,由于组件的独立性和可替换性,系统的维护和升级也更加方便。
通过使用高级定时 Petri 网和 Ada 代码进行规范和实现,可以更好地验证系统的行为和性能,提高系统的可靠性和稳定性。
组件化设计方法可以与其他设计方法(如 HRT - HOOD)结合使用,促进不同技术的融合,为实时系统设计提供更多的选择和可能性。
实时系统组件化设计方法适用于各种实时控制系统,如工业自动化、航空航天、交通运输等领域。随着技术的不断发展,其应用领域将不断拓展。
测试方法 | 优点 | 缺点 |
---|---|---|
因果图测试 | 系统性强、避免歧义、可扩展性好 | 复杂性高、自动化程度低 |
传统测试方法 | 简单易行、成本低 | 覆盖度低、易受主观因素影响 |
设计方法 | 优点 | 缺点 |
---|---|---|
组件化设计 | 降低复杂度、提高效率、可复用性强 | 需要构建组件库、对设计人员要求高 |
传统设计方法 | 灵活性高、适应性强 | 开发周期长、维护成本高 |
因果图测试用例设计方法和实时系统组件化设计方法分别在软件测试和系统设计领域具有重要的应用价值。因果图测试方法通过将用例场景转换为布尔图,避免了文本需求的歧义,提高了测试的准确性和全面性;组件化设计方法通过复用预定义组件,降低了实时系统开发的复杂度和成本,提高了系统的可靠性和可维护性。