一种形式化需求规约自动化修复方法

文档序号:24726044发布日期:2021-04-16 16:03阅读:195来源:国知局
一种形式化需求规约自动化修复方法

1.本发明涉及形式化需求修复领域,更具体地,涉及一种形式化需求规约自动化修复方法。


背景技术:

2.在软件系统中,软件和环境总是按预期运行,实现软件系统之所以很难,是因为可以导致断言矛盾的情况是不可避免的,由于人为设计软件过程中对设想软件系统存在自然倾向,自然会存在缺少需求的现象,而众所周知,缺少需求是软件失败的主要原因之一。需求工程正是一门针对缺少需求问题存在的学科,它的主要工作是根据已证实有效的技术、原理、方法进行需求分析,目的是尽可能获取到当前目标下的需求设定,从而增加软件的健壮性与完备性。在形式化需求工程中,首先对需求进行建模,然后分析模型是否满足要求。分析阶段中有一个阶段为冲突分析阶段,该阶段的主要工作内容就是先找到当前系统需求模型中存在的问题与冲突,然后据此对当前的需求做出增添和修改,进而修复需求模型,冲突分析阶段主要包括三个步骤:(1)识别使得系统断言发生分歧的条件,即冲突;(2)评估冲突的严重性和处理的优先级;(3)对冲突进行处理。
3.公开日为2019年06月21日,公开号为cn109918049a的中国专利公开了一种基于形式化验证的软件开发模型的验证方法,将形式化验证与软件开发过程结合起来,提高软件的高可信程度,从逻辑上保障开发软件的可靠性;发挥形式化验证在软件检错领域的对于软件开发过程中开发逻辑进行验证的作用;降低程序在非正常状态运行的可能性。但该发明并未给出一般性的系统的冲突修复方法。
4.为了更好的描述需求,说明以下基本概念。线性时态逻辑(ltl)是一种以时间为表达形式的模糊时序逻辑。线性时态逻辑公式是带有时间属性的逻辑命题。除了命题逻辑中的与(∧),或(∨),非(not),蕴含(

),真(true),假(false),ltl还包含一些特殊的算子,其基础语义及符号表示见表1。当存在一种变量的赋值使得ltl公式为真时,那么我们称这条公式具有可满足性,是可满足的;当不存在赋值可以使得ltl公式为真时,我们称这条公式具有互斥性,是不可满足的;当任意一种赋值都能使得ltl公式为真时,我们称这条公式是永真式。ltl的可满足性是可判定的,而ltl求解器的主要作用就是判断一个ltl公式是否是可满足的。通常来说,给定一个ltl公式作为输入,求解器可以给出该式的可满足性判定,即可满足的(sat)和不可满足的(unsat)。
5.在面向目标的需求工程方法论中,需求规约来源于线性时态逻辑——ltl(linear temporal logic)形式下的环境约束(domain property)和系统断言(goal)两部分。环境约束是对当前系统要求的状态描述,系统断言是系统功能的断言。满足环境约束要求但是使得系统断言产生冲突的条件被定义为冲突。通俗来说,冲突就是使得软件系统发生错误的某种场景。环境约束(domain property):对当前系统要求的状态的描述,记为domain={dom1,dom2,...,dom
n
}。系统断言(goal):系统功能的断言,记为goal={g1,g2,...,g
n
}。冲突(boundary condition):满足环境约束但使得系统断言产生冲突的赋值情况。由于ltl可
以反映变量在时间序列上的状态变化,所以显而易见,在系统中,不同物理量的状态及其变化都可以使用ltl公式的形式表示。环境约束和系统断言就是使用ltl进行形式化表示的公式。我们给出冲突的完整性质定义,对于系统断言集合goal={g1,g2,...,g
n
}和环境约束集合domain,冲突存在如下性质:
6.(1)逻辑不一致性:是不可满足的;
7.(2)极小性:是可满足的;
8.(3)非平凡性:为永真式。
9.其中g为系统断言集合goal中所有系统断言的合取,即g=g1∧g2∧...∧g
n
;g

i
为系统断言集合goal中除第i个元素外其他所有元素的合取,即g

i
=g1∧...∧g
i
‑1∧g
i+1
∧...∧g
n

10.表1
11.

技术实现要素:

12.本发明的首要目的是提供一种形式化需求规约自动化修复方法,解决在形式化需求工程中自动化修复系统断言冲突的难题。
13.为解决上述技术问题,本发明的技术方案如下:
14.一种形式化需求规约自动化修复方法,包括以下步骤:
15.s1:输入需求规约的环境约束和系统断言,利用局部搜索算法自动寻找冲突,将寻找到的冲突构成冲突集合;
16.s2:对冲突集合中的冲突进行筛选,对筛选后的冲突按照发生的概率进行排序,取概率最高的冲突;
17.s3:将s2得到的概率最高的冲突取反加入需求规约的系统断言中;
18.s4:返回步骤s1,其中需求规约的系统断言为步骤s3处理后的系统断言,直到找不到新的冲突为止,进入步骤s5;
19.s5:输出需求规约的环境约束和此时的系统断言。
20.优选地,步骤s1中利用局部搜索算法自动寻找冲突,具体包括以下步骤:
21.s11:输入需求规约的环境约束domain,系统断言goal={g1,g2,...,g
n
};
22.s12:将当前候选解formula初始化为not(g1∧g2∧...∧g
n
),为初始ltl公式,并且
利用恒等变换将not下推到变量上,not表示非逻辑;
23.s13:随机选取候选解formula的多个邻居ltl公式,组成集合set;
24.s14:使用目标函数给集合set中每个邻居ltl公式评分;
25.s15:将集合set中冲突加入到结果集合中;
26.s16:当前候选解formula更新为集合set得分最高的公式;
27.s17:重复步骤s3

s6直到运行达到最大时间;
28.s18:输出结果集合为冲突集合。
29.优选地,所述邻居ltl公式有公式编辑操作产生,具体为:
30.定义o1为一元运算符集合{not,x,f,g},λ1∈o1,x,f,g均为逻辑符号,表示在下一个时刻为真,表示在未来某一时刻为真,表示在未来任一时刻都为真;
31.定义o2为二元运算符集合{∧,∨,

,u,r},λ2∈o2,∧,∨,

,u,r均为逻辑符号,∧表示与逻辑,∨表示或逻辑,

表示蕴含逻辑,表示在为真之前,ψ必须一直为真,表示在为真之前,包括该时刻,ψ必须一直为真,如果不可能为真,ψ永远保持真;
32.p为变量,为初始ltl公式,为经过一次操作后得到的新的ltl公式,三种公式编辑操作如下:
33.a)增添
34.增加一个一元运算符:
35.增加一个二元运算符及一个变量:或
36.b)修改
37.修改一个变量:当时;
38.修改一个一元运算符:当时;
39.修改一个二元运算符:当时;
40.c)删除
41.删除一个一元运算符:当时;
42.删除一个二元运算符:或p


43.对于一个ltl公式对其任意一个子公式进行一次上述所述的公式编辑操作得到的新的ltl公式组成的集合成为它的邻域。
44.优选地,步骤s14中使用目标函数给集合set中每个邻居ltl公式评分。首先介绍目标函数的各个分函数辅助函数再介绍目标函数具体为:
[0045][0046]
[0047][0048][0049]
式中,|goal|是系统断言集合中元素的个数,g

i
=g1∧...∧g
i
‑1∧g
i+1
∧...∧g
n

[0050]
目标函数为:
[0051][0052]
式中,是公式的变量和操作符的个数。
[0053]
优选地,当公式的评分高于3时,将其作为一个冲突,并且的长度越短,评分越高。
[0054]
优选地,步骤s2中对冲突集合中的冲突进行筛选,对筛选后的冲突按照发生的概率进行排序,取概率最高的冲突,具体包括以下步骤:
[0055]
s21:输入冲突集合∑,输出概率最高的一般冲突集合;
[0056]
s22:遍历∑中的每一个ltl公式使用ltl求解器如果能找到使用ltl求解器如果能找到表示逻辑推出符号,逻辑推出ψ,那么删除最后∑剩下的ltl公式构成一般冲突集合;
[0057]
s23:使用模型计数方法计算一般冲突集合中每个冲突发生的概率;
[0058]
s24:选择概率最高的一般冲突,并输出。
[0059]
优选地,步骤s23中使用模型计数方法计算一般冲突集合中每个冲突发生的概率,具体为:
[0060]
使用模型计数方法分别计算有限模型长度以内,环境约束∧系统断言∧冲突的模型个数#a和环境约束∧系统断言的模型个数#b,
[0061]
与现有技术相比,本发明技术方案的有益效果是:
[0062]
本发明提出了自动化的需求精化方法,高效的自动化搜索描述需求规约的冲突,从而为需求的修复提供方向。在自动化搜索冲突这个问题上,本发明设计的局部搜索算法大幅度的提高了搜索的性能。
附图说明
[0063]
图1为本发明的方法流程示意图。
具体实施方式
[0064]
附图仅用于示例性说明,不能理解为对本专利的限制;
[0065]
为了更好说明本实施例,附图某些部件会有省略、放大或缩小,并不代表实际产品的尺寸;
[0066]
对于本领域技术人员来说,附图中某些公知结构及其说明可能省略是可以理解的。
[0067]
下面结合附图和实施例对本发明的技术方案做进一步的说明。
[0068]
实施例1
[0069]
本实施例提供一种形式化需求规约自动化修复方法,如图1,包括以下步骤:
[0070]
s1:输入需求规约的环境约束和系统断言,利用局部搜索算法自动寻找冲突,将寻找到的冲突构成冲突集合;
[0071]
s2:对冲突集合中的冲突进行筛选,对筛选后的冲突按照发生的概率进行排序,取概率最高的冲突;
[0072]
s3:将s2得到的概率最高的冲突取反加入需求规约的系统断言中;
[0073]
s4:返回步骤s1,其中需求规约的系统断言为步骤s3处理后的系统断言,直到找不到新的冲突为止,进入步骤s5;
[0074]
s5:输出需求规约的环境约束和此时的系统断言。
[0075]
步骤s1中利用局部搜索算法自动寻找冲突,具体包括以下步骤:
[0076]
s11:输入需求的环境约束domain,系统断言goal={g1,g2,...,g
n
};
[0077]
s12:将当前候选解formula初始化为not(g1∧g2∧...∧g
n
),为初始ltl公式,并且利用恒等变换将not下推到变量上,not表示非逻辑;
[0078]
s13:随机选取候选解formula的多个邻居ltl公式,组成集合set;
[0079]
s14:使用目标函数给集合set中每个邻居ltl公式评分;
[0080]
s15:将集合set中冲突加入到结果集合中;
[0081]
s16:当前候选解formula更新为集合set得分最高的公式;
[0082]
s17:重复步骤s3

s6直到运行达到最大时间;
[0083]
s18:输出结果集合为冲突集合。
[0084]
所述邻居ltl公式有公式编辑操作产生,具体为:
[0085]
定义o1为一元运算符集合{not,x,f,g},λ1∈o1,x,f,g均为逻辑符号,表示在下一个时刻为真,表示在未来某一时刻为真,表示在未来任一时刻都为真;
[0086]
定义o2为二元运算符集合{∧,∨,

,u,r},λ2∈o2,∧,∨,

,u,r均为逻辑符号,∧表示与逻辑,∨表示或逻辑,

表示蕴含逻辑,表示在为真之前,ψ必须一直为真,表示在为真之前,包括该时刻,ψ必须一直为真,如果不可能为真,ψ永远保持真;
[0087]
p为变量,为初始ltl公式,为经过一次操作后得到的新的ltl公式,三种公式编辑操作如下:
[0088]
a)增添
[0089]
增加一个一元运算符:
[0090]
增加一个二元运算符及一个变量:或
[0091]
b)修改
[0092]
修改一个变量:当时;
[0093]
修改一个一元运算符:当时;
[0094]
修改一个二元运算符:当时;
[0095]
c)删除
[0096]
删除一个一元运算符:当时;
[0097]
删除一个二元运算符:或p


[0098]
对于一个ltl公式对其任意一个子公式进行一次上述所述的公式编辑操作得到的新的ltl公式组成的集合成为它的邻域。
[0099]
步骤s14中使用目标函数给集合set中每个邻居ltl公式评分。首先介绍目标函数的各个分函数辅助函数再介绍目标函数具体为:
[0100][0101][0102][0103][0104]
式中,|goal|是系统断言集合中元素的个数,g

i
=g1∧...∧g
i
‑1∧g
i+1
∧...∧g
n
。目标函数为:
[0105][0106]
式中,是公式的变量和操作符的个数。
[0107]
当公式的评分高于3时,将其作为一个冲突,并且的长度越短,评分越高。
[0108]
现有技术对自动化搜索冲突有两种,一种是采用表分解方法,另一种是采用遗传算法。表分解方法属于构造类方法,它将ltl公式语义展开成带回边的语法树,进而构造出冲突。遗传算法属于搜索类方法,它初始化一批ltl公式,通过公式模拟染色体行为进行突变和交叉互换,进而获得冲突。本发明在自动化搜索冲突采用局部搜索算法,也属于搜索类方法,与遗传算法的区别是,我们通过公式邻域指定了公式变化的方向,指定目标函数让搜索朝着冲突前进,并且指定了局部搜索的冲突,能以较少迭代次数找到冲突。
[0109]
步骤s2中对冲突集合中的冲突进行筛选,对筛选后的冲突按照发生的概率进行排序,取概率最高的冲突,具体包括以下步骤:
[0110]
s21:输入冲突集合∑,输出概率最高的一般冲突集合;
[0111]
s22:遍历∑中的每一个ltl公式使用ltl求解器如果能找到使用ltl求解器如果能找到表示逻辑推出符号,逻辑推出ψ,那么删除最后∑剩下的ltl公式构成一般冲突集合;
[0112]
s23:使用模型计数方法计算一般冲突集合中每个冲突发生的概率;
[0113]
s24:选择概率最高的一般冲突,并输出。
[0114]
步骤s23中使用模型计数方法计算一般冲突集合中每个冲突发生的概率,具体为:
[0115]
使用模型计数方法分别计算有限模型长度以内,环境约束∧系统断言∧冲突的模型个数#a和环境约束∧系统断言的模型个数#b,
[0116]
在具体的实施例中,考虑矿洞中的水泵系统,该系统目的是防止矿洞中洪水暴发。但系统检测到水位过高时,将开启水泵抽水。但是当系统检测到矿洞中有瓦斯时,不能开启水泵。现在用布尔变量h表示水位高,p表示开启水泵,m表示矿洞中存在瓦斯。那么环境约束和系统断言如下:
[0117]
环境约束:在水泵连续开启两个时刻,在第三个时刻变成低水位
[0118]
ltl公式描述:g((p∧xp)

x(x not h))
[0119]
系统断言1:当水位过高时,系统开启水泵
[0120]
ltl公式描述:g(h

xp)
[0121]
系统断言2:当矿洞中有瓦斯时,系统不能开启水泵
[0122]
ltl公式描述:g(m

x not h)
[0123]
利用本实施例处理的步骤如下:
[0124]
步骤一:输入形式化需求后的环境约束和系统断言集合,用局部搜索算法定位冲突。
[0125]
1.初始化当前候选公式为not(g(h

xp)∧g(m

x not h));
[0126]
2.利用恒等变换去除

和将not下推到变量上,当前候选公式改写为f(h∧x(notp))∨f(m∧x(p));
[0127]
3.利用公式编辑操作获得当前候选公式的多个邻居,举例它的其中一个邻居为:
[0128]
f(h∧x(not p))∨(m∧x(p))
[0129]
通过删除当前候选公式的f得到;
[0130]
计算邻居公式的评分,f(h∧x(not p))∨(m∧x(p))评分为1+1+1+0.09=3.09,即它是一个冲突,加入到结果集合中;
[0131]
4.将当前候选公式更改为邻居中评分最高的公式。假设当前选择的邻居中得分最高公式为f(h∧x(notp))∨(m∧x(p)),那么该公式称为下一轮迭代的当前候选公式。
[0132]
5.重复3

4步骤,最后输出结果集合为冲突集合。
[0133]
步骤二,对冲突集合筛选和排序。
[0134]
假设步骤一输出了冲突集合为
[0135]
{f(h∧m),h∧m,f(h∧notm∧p∧x((not h∧not p)∨(h∧(m∨not p))))}
[0136]
1.只有因此删除h∧m
[0137]
2.得到一般冲突集合{f(h∧m),f(h∧not m∧p∧x((not h∧not p)∨(h∧(m∨not p))))}
[0138]
3.使用模型计数方法分别计算模型1000长度以内冲突发生的概率如表2所示:
[0139]
表2
[0140][0141]
4.因此输出概率最高的一般冲突f(h∧not m∧p∧x((not h∧not p)∨(h∧(m∨not p))))。
[0142]
步骤三,选择概率最高的一般冲突,将其取反后,加入系统断言集合;
[0143]
把not(f(h∧not m∧p∧x((not h∧not p)∨(h∧(m∨not p)))))作为新增加的系统断言加入到原来的系统断言集合中。
[0144]
步骤四:重复步骤一至步骤三直到没有找到冲突。
[0145]
相同或相似的标号对应相同或相似的部件;
[0146]
附图中描述位置关系的用语仅用于示例性说明,不能理解为对本专利的限制;
[0147]
显然,本发明的上述实施例仅仅是为清楚地说明本发明所作的举例,而并非是对本发明的实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明权利要求的保护范围之内。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1