首页 > 其他分享 >需求结构化:数据定义

需求结构化:数据定义

时间:2024-02-26 09:46:39浏览次数:28  
标签:需求 结构化 定义 OneLogic 自然语言 数据

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

标签:需求,结构化,定义,OneLogic,自然语言,数据
From: https://www.cnblogs.com/zgq123456/p/18033649

相关文章

  • SpringBoot:通过实现自定义接口获取实现类的@RequestMapping注解请求路径
    1.自定义接口//什么都不用写,就定义一个空接口publicinterfaceMyMark{}2.Controller接口类实现自定义接口@RestControllerpublicclassDayControllerimplementsMyMark{@RequestMapping("/day1")publicStringget1(){return"day1";}......
  • 若使用的ts,子组件的props是直接解构好呢还是定义一个接口好呢?
    在TypeScript中,定义子组件的props通常有以下两种方式:接口(Interface)://定义一个接口来描述PropsinterfaceMyComponentProps{title:string;items:string[];onItemSelected:(item:string)=>void;}//在子组件中使用该接口constMyComponent:React.FC......
  • 自定义一个QAbstractScrollArea(二)
    延续上一篇文章,本文以另一种方法实现QAbstractScrollArea。此例子是一个图片缩略图的列表控件,控件沿水平方向延伸。仅作为一个例子,因为实际的图片列表可以用QListWidget实现,并不需要自己写代码。下面是程序的运行截图:头文件:classMListWidget:publicQAbstractScrollArea{......
  • 单调栈的定义与应用
    定义:单调栈是一种特殊的栈结构,通常用于解决一类特定的问题,如找到数组中元素的下一个更大(或更小)元素。它的核心特性是维护栈内元素的单调性,即栈内元素按照从栈底到栈顶的顺序,要么严格递增,要么严格递减。也即:单调递增栈:从栈底到栈顶,依次递增的顺序单调递减栈:从栈底到栈顶,依次递......
  • 前端防抖-通过自定义指令实现
    前端防抖-通过自定义指令实现1、通过自定义事件实现前端防抖Vue.directive('preventReClick',{inserted(el,binding){el.addEventListener('click',()=>{if(!el.disabled){el.disabled=truesetTimeout(()=>......
  • 『数学记录』测度论学习笔记(一):测度与常见测度基本定义
      在数学中,测度(measure)是对长度、面积、体积等概念的一般化。对于一个可测的(measurable)集合,一个集合可以给出这个集合的“大小”。本文将从简介绍测度的基本定义与一些常见测度。Part1 基本定义  测度通常定义在一个集合的\(\sigma\)-代数(sigma-algebra)上的......
  • Unity编辑器扩展秘籍-利用EditorApplication.contextualPropertyMenu为右键菜单增加自
    假设我们希望为材质右键弹出按钮增加新的功能,应该怎么做呢我们可以通过注册EditorApplication.contextualPropertyMenu全局回调方法,增加自定义的MenuItemusingUnityEditor;usingUnityEngine;namespaceYaojz{[InitializeOnLoad]publicstaticclassMaterialC......
  • 盘点一个Python自动化办公Excel数据处理的需求
    大家好,我是Python进阶者。一、前言前几天在Python白银交流群【干锅牛蛙】问了一个Python处理Excel数据的问题。问题如下:有两个问题哈:1、表头有合并单元格识别不出来,如何处理类似下图2、遇到单元格有公式自动识别成了0,如何处理,保留计算后的值,类似下图附上他自己的代码如下:目......
  • docker 自定义网络
    docker的网络分为:单主机、跨主机这篇先说:单主机我们先说一下docker的原生网络模式网络模式简介优点使用场景none空网络,没有网络此网络与外界隔离,安全度非常高适合公司内部生产密钥host容器与宿主机共享namespace直接使用宿主机的网络,网络性能方面最好。......
  • 七、通过"#define"预定义函数
    七、通过#define预定义函数我们在初学C语言的时候知道,可以通过#definePI3.1415926545来在程序中预定义变量。实际上,在C++语言当中,#define也可以预定义函数,以下是一段示例函数:#include<iostream>#defineMAX(a,b)(a>b)?a:b//预定义取两个数最大值的函数using......