增强RTP策略:覆盖多样使用场景的基于状态测试套件优化

0 下载量 71 浏览量 更新于2024-06-17 收藏 1.54MB PDF 举报
本文主要探讨了在基于状态的测试(SBT)框架中,特别是往返路径测试套件(RTP)的应用局限性。RTP策略虽然因其成本效益而受到青睐,但有研究指出其在测试实际使用场景时可能存在不足,可能导致故障检测不全面。作者Seonyeol Lee、Hyun-Jae Choi和Heung-Seok Chae针对这一问题,来自韩国釜山国立大学电气计算机工程系,提出了两种增强RTP套件的方法,旨在确保所有可能的事件对得到覆盖。 首先,他们分析了RTP策略的遍历算法中存在的问题,即忽略了某些关键的事件对,如在有序集合中删除和添加操作、巡航控制系统中的连续制动操作,以及录像机的停止和播放操作。这些未被覆盖的事件对可能直接影响系统的功能完整性和用户体验。 为解决这个问题,论文提出了一种方法来增强RTP套件,通过设计新的测试路径生成算法,确保所有可能的事件对都被包含在测试用例中。这种方法增加了测试的复杂性和覆盖面,虽然在一定程度上提高了测试成本,但它能够发现那些传统RTP套件遗漏的潜在缺陷,从而提高测试有效性。 作者通过三个案例研究展示了增强RTP套件的效果,分别提升了原有RTP套件未覆盖事件对的比例。与完全依赖于所有转换对(ATP)套件相比,增强后的RTP套件显示出更好的成本效益,因为它能在增加较低成本的前提下提供更全面的测试。因此,作者认为,增强的RTP套件可以作为一种经济高效的测试策略选择,特别是在关注测试覆盖率和成本之间平衡的场景下。 这篇文章发表在2023年的沙特国王大学学报上,采用的是开放访问的CCBY-NC-ND许可证,允许在特定条件下分享和使用。它强调了状态机在软件工程中的核心作用,并提供了实用的解决方案,对于从事状态机建模和测试的工程师具有重要的参考价值。

#include <stdint.h> #include <stdio.h> #include <string.h> #include <aos/aos.h> #include <aos/cli.h> #include "cunit_test_include/CUnit.h" #include "cunit_test_include/Basic.h" // 测试用例 1 void test_case_1(void) { int a = 1; int b = 2; //printf("for test test_case_1\n"); CU_ASSERT(a + b == 3); } // 测试用例 2 void test_case_2(void) { int c = 3; int d = 4; //printf("for test test_case_2\n"); CU_ASSERT(c * d == 10); } // 测试套件初始化函数 int init_suite(void) { return 0; } // 测试套件清理函数 int clean_suite(void) { return 0; } // 测试套件 CU_TestInfo tests[] = { {"test_case_1", test_case_1}, {"test_case_2", test_case_2}, CU_TEST_INFO_NULL }; // 测试套件初始化函数 CU_InitializeFunc initialize_suite = init_suite; // 测试套件清理函数 CU_CleanupFunc cleanup_suite = clean_suite; // 测试套件注册函数 void add_test_suite(void) { CU_pSuite suite; suite = CU_add_suite("Test Suite", initialize_suite, cleanup_suite); CU_add_test(suite, "test_case_1", test_case_1); CU_add_test(suite, "test_case_2", test_case_2); } static void test_cunit(int argc, char *argv[]) { // 初始化 CUnit 测试框架 CU_initialize_registry(); // 注册测试套件 add_test_suite(); // 运行所有测试 CU_basic_run_tests(); // 输出测试结果 CU_basic_show_failures(CU_get_failure_list()); // 清理 CUnit 测试框架 CU_cleanup_registry(); printf("\n"); } void test_cunit_init(void) { static const struct cli_command cmd_info = { "cunit", "test cunit", test_cunit }; aos_cli_register_command(&cmd_info); }为什么没有使用到测试套件tests

2023-06-13 上传