1 背景
前文以实例的形式讨论了用例生成、需求检查等功能。这些功能可行的前提,是需求逻辑能够被计算机程序正确的识别、计算。
所谓需求结构化,是将非结构化需求转换为结构化需求的过程。而所谓结构化需求,是指基于明确语法表达的需求。结构化需求是半形式化的(semi-formal),可以转换为严格语义的形式化模型。
将需求结构化后,需求能够被计算机程序自动化处理,实现需求缺陷检查、基于需求的用例生成等功能。这一方法已经在多个工程应用中展现出显著价值,例如对系统需求生成十万级别的覆盖用例、对复杂决策逻辑进行缺陷检查等。
功能是好的,但是先要解决的眼前问题是:结构化需求从哪里来?
2 一般而言
一般而言,需求有三种情况:一是非结构化需求,典型是以自然语言描述的需求;二是结构化需求,一般是基于特定工具形成的设计开发产物;第三种,则属于灰色地带,即虽然有语法约束,但是由人工编写,语法没有得到严格执行和检查,导致结构化不彻底。
好消息是,需求的结构化程度在变高。各种形式的MBSE、MBD的实施,面向特定领域的辅助设计工具的应用,设计的规范化、模板化程度的提高,都使得设计输出呈现更好的结构化。在已有结构化需求的基础上,可以自动转换为能够被程序化处理的形式。
另一方面,自然语言虽然有语义模糊、二义性等缺点,但由于表达灵活度高、易于被各方理解,仍然是广泛使用的需求描述形式。大量需求仍然是自然语言,是非结构化的。
3 OneLogic的需求结构化
OneLogic提供了需求结构化功能,关键应用场景就是自然语言需求结构化。
例如,对下述需求:
Req01:当 舱温(cabin_temperature)大于等于 68℃,保持时间超过2s但不超过10秒,则触发短时超温事件(short_time_overtemperature);
转换为OneLogic中的需求如下:
上图可见,OneLogic提供了一种自然语言风格的需求描述方式。简要来讲,OneLogic采用类似软件“设计模式”的思想,将常见需求实例进行抽象,形成一套面向需求的“模式库”,能够以较为直接的方式,将常见自然语言需求转换为结构化需求。由于每种需求模式具有严格语义,从而所描述的需求实例也具有严格语义。
这里暂不展开对需求模式的讨论。本文先讨论需求结构化的第一个障碍,即数据定义问题。
4 数据定义
程序员习惯了编程语言中变量、对象的标识符语法,例如必须以字母、下划线开头等。然而,对于需求则不然。需求结构化的第一个障碍是:你不能要求按照软件代码语法进行需求数据定义!
一方面,需求中的数据标识,不能按照编程语言的标识符语法来约束。在需求中,标识符应具有更大的命名自由度,例如可以中英文、数字混用,甚至包含#、@之类的特殊符号。
另一方面,需求中的数据定义,是设计活动的关键输出。如何形成数据定义,是由设计体系所约束的。高层需求中的数据对象,被低层需求逐步细化直至具体实现。从测试角度讲,正是这种设计上的追溯关系,使得基于高层需求形成的用例,能够最终关联到具体实现的数据对象,使测试用例可执行。
下图FACE 数据模型架构也体现了上述数据定义过程。
OneLogic在如下方面对需求的上述特征提供支持。
4.1 支持用任意字符串对数据进行命名
OneLogic支持用任意字符串对数据进行命名,包括中文、英文、特殊字符、空格等。
前文讨论的带内部状态的多需求耦合用例生成实例,可直接使用中文定义数据名称,仍可正常求解。例如:
Req01:当舱温大于等于68℃,保持时间超过2s但不超过10秒,则触发短时超温事件;
Req02:当舱温大于等于68℃,保持时间超过10秒,则触发长时超温事件;
采用中文变量的结构化需求如下:
基于中文变量的求解结果如下(关于该实例的讨论,可具体参见带内部状态的多需求耦合用例生成实例)。
当然,为了能够求解,需要对变量类型进行设置。OneLogic内置类型包括布尔、整型、浮点,可自定义数据类型,例如枚举类型等。
4.2 支持双向数据定义
为了适应不同的设计体系,OneLogic支持双向数据定义。
所谓双向数据定义,指一方面OneLogic可以导入外部数据定义,以此为基础进行需求逻辑设计,此时在OneLogic中不新建数据对象;另一方面,如果没有外部数据定义,则在OneLogic中进行需求设计时创建数据对象,并自动汇总,形成数据字典(如下图),支持多人在同一套数据字典上进行设计协作,保持命名、指称的一致性。
4.3 支持高层数据到低层数据的映射
基于需求生成的测试用例,其操作的数据往往是抽象的、逻辑的,是与平台无关的。这就带来一个问题:这样的测试用例能实际执行吗?
生成的测试用例要能够可执行,能够对目标软件、设备、系统进行测试,才更具有价值。这其中的关键,就是实现高层数据到低层数据的映射。基于数据映射关系,测试用例可以被自动转换成可执行的脚本,实现自动测试。这也是结构化所带来的好处。
5 总结
结构化是需求能够被计算机自动处理的前提。现实中大量需求是采用自然语言描述的。如何使自然语言需求被高效的结构化并具有严格语义,是OneLogic期望解决的问题之一。本文首先讨论了在数据定义上OneLogic所做的考虑,包括中文命名、双向数据定义等。
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/ZigZag_Garden/article/details/129355172