[发明专利]一种软件功能需求与脆弱点知识的形式化表达方法在审
申请号: | 202110772615.6 | 申请日: | 2021-07-08 |
公开(公告)号: | CN113378170A | 公开(公告)日: | 2021-09-10 |
发明(设计)人: | 宋明秋;谷蔚然 | 申请(专利权)人: | 大连理工大学 |
主分类号: | G06F21/56 | 分类号: | G06F21/56;G06F21/57 |
代理公司: | 大连理工大学专利中心 21200 | 代理人: | 温福雪 |
地址: | 116024 辽*** | 国省代码: | 辽宁;21 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 软件 功能 需求 脆弱 知识 形式化 表达 方法 | ||
1.一种软件功能需求与脆弱点知识的形式化表达方法,其特征在于,步骤如下:
(1)定义
SOFL说明书规范:一个SOFL说明书规范是由一组具有关联关系的模块以分层级的方式构成的;其中:
进程:是模块的最基础单位,负责执行一个动作、任务或操作,主要由五个要素组成:名称、输入端口、输出端口、前置条件和后置条件;每一个要素的具体含义如下:
名称:进程的名称;
输入端口:接收输入数据流;
输出端口:连接输出数据流;
前置条件:定义了输入数据需要满足的条件;
后置条件:定义了输出数据需要满足的条件;
(2)进程的两种形式化知识表达规范
进程的形式化知识表达包括图形说明和文本说明两种格式;
图形说明格式:描述了进程,它的输入数据流变量和输出数据流变量,变量的类型或约束条件;
文本说明格式:采用形式化语言对定义的进程进行描述,格式为:
process进程名(输入数据流变量:类型声明)输出数据流变量:类型声明
pre前置条件(输入数据流变量)
post后置条件(输入数据流变量,输出数据流变量)
end_process
其中,process和end_process是一对关键字,分别用来标记一个规范描述的进程的开始和结束,进程名、输入数据流变量和输出数据流变量必须与它们在图形说明格式中表示的一致;每个数据流变量,包括输入数据流变量和输出数据流变量,都必须进行变量类型的声明,变量类型声明的形式为variable∶type,variable为变量名,type为类型;输入数据流变量的声明在进程名后面的括号内给出,输出数据流变量的声明在括号后给出;此外,pre表示进程的前置条件开始的关键字,post表示进程的后置条件开始的关键字;
(3)软件功能需求的形式化知识表达方法
(3.1)基本思想
软件功能需求的形式化知识表达,是通过对需求说明文档的结构化,将自然语言描述的文档转化为一系列描述软件功能需求的进程的集合;基本过程分为半形式化和形式化两个阶段;
半形式化需求说明书规范:半形式化过程,即对软件功能需求说明书文档进行结构化,分析出功能函数、数据资源和约束条件的过程;
形式化需求说明书规范;形式化过程,是在半形式化需求说明书规范的基础上,对半形式化说明书规范中所包含的所有功能函数、数据资源和约束条件进行厘清和定义,并确定这三部分要素之间关系的过程;即,使用模块封装数据资源、相关数据约束以及符合功能约束的相关操作,并用SOFL形式化语言对这些功能函数、数据资源和约束条件进行描述的过程;
(3.2)由软件需求说明书转化为形式化的需求说明书规范
(3.2.1)声明数据类型;
(3.2.2)构建进程;
(3.2.3)定义所有前置和后置条件;
(4)脆弱点知识的形式化知识表达方法
与需求说明文档进行形式化表达的过程不同,脆弱点代码知识是采用抽象树的方法进行形式化表达的,具体如下:
(4.1)基本思想
首先,将脆弱点代码抽象为一棵树,直观地展示脆弱点代码的整体结构;然后,将代码抽象树用SOFL形式化语言描述,分为两个部分:数据类型转换和模块转换,由于进程是模块最重要的组成部分,也是最基础的单元,因此模块转换细化为进程转换;
(4.2)建立脆弱点代码结构抽象树
一个代码结构抽象树的建立是从最顶级的代码模块开始,一个代码模块包含如下元素:进程集合P={p1,p2,…,pm},类型集合T={t1,t2,…,tn},变量集合V={v1,v2,…,vm},非变量集合Inv={Inv1,Inv2,…,Invn}和约束条件集合Const={const1,const2,…,constn};模块里包含的进程又继续向下拆解为子模块,子模块又包含有上述诸元素,如此下去,得到祖先模块、父模块、子模块及后代模块,形成一种树状结构;基于SOFL说明书规范的这种树状结构,根据一定的规则,将脆弱点代码模块逐层分解,并逐步建立树节点和边的定义,创建代码结构抽象树;
代码结构抽象树建立规则如下:
规则1:子节点的建立;针对脆弱点代码建立Topmodule顶级节点,根据每个模块的构成元素,将进程节点、类型节点、变量节点、非变量节点以及约束条件节点作为该模块节点下的子节点;
规则2:进程节点的分解;对于模块下可继续分解的进程,在进程节点下连接子模块节点,由进程分解而来的子模块根据上述规则继续分解,直至无法分解或不需要再分解为止;
规则3:非进程节点分解;除了进程节点外,其他节点的子节点相对单一,为其所包含具体元素的枚举;
规则4:确定叶节点;对于模块下不可分解的进程节点、类型节点定义为叶节点;
根据上述规则,建立基于SOFL语言规范的脆弱点代码结构抽象树;
(4.3)转换规则
根据代码结构抽象树,将代码转化为SOFL语言的过程划分为两部分:数据类型转换和模块转换;其中,模块转换细化为进程转换,因为进程是模块的最基础单元;针对数据类型转换和进程转换,分别建立转换规则如下:
(4.3.1)数据类型转换规则
给出JAVA语言数据类型与SOFL语言的数据类型之间的转换规则,如表1和表2所示:
表1 JAVA数据类型与SOFL基本数据类型的转换规则
注:对于不含零的自然数转换为nat型,含零的自然数转换为nat0型,整型数则直接用int表示;
表2 JAVA数据类型与SOFL复杂数据类型的转换规则
(4.3.2)进程转换规则
对脆弱点代码片段中的语句和表达式进行遍历,逐步将语句和表达式转换为进程语句和形式化表达式;通过建立Java中包含的语句和表达式向SOFL语言的转换规则,实现Java代码向SOFL进程的转换;给出java语句和表达式向SOFL形式化语言表达转换规则,分别见表3和表4;
表3 Java语句向SOFL形式化表达的转换规则
表4 Java表达式向SOFL形式化表达的转换规则
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于大连理工大学,未经大连理工大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202110772615.6/1.html,转载请声明来源钻瓜专利网。