基于模糊
Petri
网的软件过程故障诊断模型
龚波
摘 要
:
软件过程的故障产生和传播是一个典型的离散事件动态系统,软件过程的过程性能属性具有模糊,不确定性特点。
Petri
网具有严格的形式化定义和直观的图形表示,是描述动态系统和系统行为的重要技术。提出基于模糊
Petri
网的软件过程故障诊断模型(
SD-FPN
),在反向推理过程中充分考虑到过程状态信息,根据过程状态信息决定变迁激活概率,以解决冲突消解问题,采用深度优先的搜索方法,以反向并行推理来缩小搜索空间,寻找到一条最有可能的故障路径。
关键词
:
软件过程,故障诊断,模糊
Petri
网,知识表示,知识推理
中图法分类号
: TP301
文献标识码
: A
A Software Process Fault Diagnosis Model Based On Fuzzy Petri Net
*
GONG Bo
Abstract
: Fault generation and transmission of the software process is a representative scattering dynamic event system, software performance parameters are fuzzy, imprecise, ambiguous and uncertain. Petri net is formally defined, has intuitionistic graphic representation, and is an important technology for describing and analyzing dynamic systems and system behaviors. Based on fuzzy Petri nets, this paper puts forward a fault diagnosis model for software processes, using process status information to resolve reasoning conflict problems. According as the possibility of firing transitions, searching range is reduced with searching method of depth priority and the reverse parallel reasoning, and finally the path that most possibly induces the known failure is found.
Key words:
software process, fault diagnosis, fuzzy petri nets, knowledge representation, knowledge reasoning
1 引言
软件过程改进逐渐成为软件企业改进产品质量的关键,各种过程建模方法和语言、过程验证和分析方法层出不穷。但是,当软件过程出现问题时(比如控制图中过程属性出现异常),如何进行故障诊断尚没有很好地解决,在诸如
CMM
、
Bootstrap
等软件过程改进模型都没有相应地提供有关候选解决方案。统计过程控制(
SPC
)是实现软件过程定量管理的重要技术,能够监控和发现过程与过程基线之间的变异,也没有提供相应的故障诊断能力
[4]
。
软件过程的故障诊断是一个典型的离散事件动态系统,由于过程分量(人、机器、原料、环境、方法)的不确定性和交互过程的复杂性,导致软件过程故障信息的不确定性和模糊性。
故障诊断的一个关键问题是知识的表示方法,为此人们提出了许多知识表示法,如逻辑表示法,产生式规则,模糊产生式规则,语义网络,框架和关系表示,面向对象表示等。这些方法虽然能表达故障特征的纵向和横向联系,但由于对故障仅仅是一种静态描述,不能表示故障的动态行为,且无法进行并行推理,使整个系统的诊断效率受到限制。
Petri
网是对离散事件动态系统建模和分析的重要工具,具有处理并发现象和非确定性现象的能力,是对动态系统进行建模和分析的重要工具。由于
Petri
网的动态性可以很好地描述故障现象的动态产生和传播过程,近几年来
Petri
网已逐渐应用于动态系统故障诊断领域。但是经典的
Petri
网模型不能表示信息和规则的不确定性和模糊性,人们就使用模糊逻辑来扩展经典
Petri
网,出现各种满足实际应用需求的模糊
Petri
网模型。普通
Petri
网是模糊
Petri
网的特例
[1]
。
本文基于软件过程故障产生和传播的特点,以及模糊
Petri
网的诊断知识表示法,提出一种用于软件过程故障诊断的模糊
Petri
网模型
(SD-FPN)
,同时考虑到故障发生概率和不确定性特点,解决了变迁的冲突消解问题,最终实现软件过程故障诊断的效率和正确性的提高。事实证明,这种模型具有直观,表达能力强,易于推理,以及正确性高等优点。
2 模糊Petri网
2.1 模糊Petri网定义
Petri
网由位置和变迁组成,分别用圆圈和竖线表示。相对于经典
Petri
网来说,
SD-FPN
模糊
Petri
网还考虑到位置的可信度、变迁的可信度、变迁激活的阈值,以及变迁激活概率等四种模糊知识。
定义
1
:
软件过程故障模糊
Petri
网(
SD-FPN
)定义为一个十元组
[3,5,6]
:
FPN
=(
P,T,D,I,O,TCF,PCF,FCF,TP,PD
)
其中
P
、
T
、
D
、
I
、
O
和经典
Petri
网的定义相同,
P
=
{p1,p2,...,pn}
是有限位置的集合。
T
=
{t1,t2,...,tm}
是有限变迁的集合。
D={d1,d2,...,dn}
是有限命题的集合。
I
是输入函数,变迁到位置的有向弧集合,
I(tj)=pi
。
O
是输出函数,位置到变迁的有向弧集合,
O(ti)= pj
。
TCF:T
→
[0,1]
,是变迁的可信度。
PCF:P
→
[0,1]
是位置的可信度。
FCF: T
→
[0,1]
是变迁激活的域值,对于
pi
∈
I(tj)
,当且仅当
PCF(pi)
≥
FCF(tj)
时,变迁
tj
才激活。
TP:T
→
[0,1]
是变迁激活概率,就是按照经验或者理论证明得到的到达同一位置的不同变迁发生的可能性。
PD:P
→
D
,位置到命题的映射,
PD(pi)=di
。
本文提出的软件故障模糊
Petri
网(
SD-FPN
)与一般模糊
Petri
网的主要区别在于:
SD-FPN
的变迁激活概率
TP
,当并发进行多故障诊断推理时优先激活相邻变迁中
TP(ti)
最大的变迁,对应现实问题就是优先诊断和处理发生概率最大的故障。
对于同一软件过程和相同软件过程性能指标而言,在不同生产环境和阶段、不同的输入条件、不同的历史故障序列等情况下,变迁发生的概率是不同的,我们把这些影响变迁发生概率的信息统称为过程状态信息。比如对于单元测试这个软件过程而言,假设某一时刻性能指标“缺陷率”出现“缺陷率
>UCL
”这种故障情况(其中
UCL
是缺陷率
X
控制图的上限),如图
1
所示。
图1 缺陷率异常的SD-FPN
图
1
中
p3
所对应的命题“缺陷率
>UCL
”成立,能导致
p3
的变迁有
t1
和
t2
。若
p1
、
p2
所对应的命题状态未知(也就是
PCF(p1)
和
PCF(p2)
尚不清楚,那么
p3
究竟是由哪个变迁启动引发的很难确定,这就存在冲突问题。故障诊断的本质在于寻找一条最有可能发生的故障传播路径,从图中看出变迁
t2
的可信度大,但是开发工具异常的现象发生的可能性比较小,尤其在项目开发的初期,出现需求理解不清楚的情况比较多,而且既往项目经验也证明这一点,这时候应该首先选择变迁激活概率更大的变迁
t1
。
当项目开发后期时,需求比较固定和明确时,这时“需求理解不清楚”命题发生的可能性就比较小了,这时出现这种性能异常很可能是由于诸如开发工具等问题引起的,这时
t2
的变迁激活概率应该比
t1
的大,应该首先执行变迁
t2
。
要注意,根据项目的过程状态信息不同,相应的变迁激活概率也会不同。而且在不同模糊
Petri
网实例中,相同命题的前序变迁也可能不同,变迁激活概率只具有相对值,能够切实体现当前过程状态信息,帮助实现冲突消解即可。
2.2 知识表示
定义2:
模糊产生式规则。模糊产生式规则表示因果关系,主要有以下三种基本形式:
R1: IF di THEN dj (TCF=ui, TP=vi)
即
di
→
dj
R2:IF di AND dj THEN dk (TCF= ui, TP=vi)
即
di
∩
dj
→
dk
R3:IF di OR dj THEN dj (TCF= ui, TP=vi)
即
di
∪
dj
→
dk
其中
di
、
dk
是包含一些模糊变量的命题
,di
表示一组前提或状态
,dk
表示若干个结论或动作
,ui
∈
[0,1]
是规则的可信度,
vi
是规则的优先级。
利用模糊
Petri
网可以表示这种模糊产生式规则知识,将规则的前提和结论当作模糊
Petri
网中的位置,即
PD(pi)=di
、
PD(pk)=dk
;而前提和结论之间的关系视为一种变迁,即变迁
ti
表示
pi
→
pk
;
PCF(pi)
、
PCF(pk)
即为前提和结论事实的可信度;变迁的可信度为
TCF(ti)=ui
。
vi
是在特定过程状态信息环境下变迁的优先级。相应软件过程、
SD-FPN
和模糊产生式规则之间的对应关系如表
1
所示。
表1 软件过程、SD-FPN和模糊产生式规则的对应关系
软件过程
|
SD-FPN
|
模糊产生式规则
|
故障
|
变迁
|
规则
|
软件过程
|
网
|
规则库
|
软件过程状态
|
网标识
|
条件集
|
部件状态
|
位置
|
条件
|
状态变化
|
变迁的激活
|
适用规则
|
模糊性
|
位置、变迁可信度
|
规则的可信度
|
故障严重程度
|
变迁优先级
|
规则优先级
|
3 基于模糊Petri网的推理机制
在模糊
Petri
网中,有
2
种特殊类型的位置:目标位置与起始位置。前者表示待诊断的故障现象,后者表示故障原因。软件过程故障诊断的任务就是根据所出现的目标位置,寻找能到达目标位置的起始位置。
在模糊推理算法中,需要对
Petri
网中每个位置建立可达性集合�p立即可达性集合和相邻位置集合。
定义
3
:
可达性集合
RS
、立即可达性集合
IRS
和相邻位置集合
AP
。对于某位置
pi
,
(
1
)可达性集合
RS(pi)
:从
pi
经过一系列变迁可以到达的位置集合。
(
2
)立即可达性集合
IRS(pi)
:从
pi
经过一次变迁就可以到达的位置集合。
(
3
)相邻位置集合
AP(pi)
:与
pi
经过同一变迁能立即到达的位置集合。
为加快推理速度和效率,可以采用目标驱动为主的反向推理的控制策略。即选定一个目标位置,遍历规则库中的规则。如果存在多条可以到达目标位置的路径,则确定规则优先级。首先选择优先级最大的规则执行;如果优先级相同,则首先选择变迁可信度最大的规则执行,然后依次执行其他规则。若某条规则的产生式前提条件为真,则该规则被激活,推出新的事实;否则,将该规则的前提作为子目标,递归执行上述过程,如此往复直到求出诊断结论。或者没有搜索到能导出目标位置的规则,即推理失败,系统转入自学习。在推理过程中,规则优先级是动态的,在不同过程状态信息环境下,规则优先级
(
变迁激活概率
)
是不同的,应该在进行发祥推理时根据过程状态信息情况来调整变迁激活概率。
4 软件过程故障分析的应用实例
在本部分,我们以单元测试过程为例,说明
SD-FPN
模糊
Petri
网的应用。
首先简单讨论按照故障源对过程性能异常进行分类,分为三类:外部系统因素(对于特定软件过程而言,其他软件过程或者外部环境等导致目标软件过程产生故障的因素)、内部系统因素(目标过程本身的故障因素,是过程本身的一个或者多个分量发生突然或者永久性异常的结果,是非受控的偏差,也就是
[4]
中定义的
assignable causes
),以及偶然因素(是过程内部自然和内在的故障因素,是过程分量
4M
1E
――人、机器、原料、环境、方法――之间正常的或者内在的交互作用导致的性能偏差,这种偏差是随机的,但在预定界限内变化,也就是
[4]
中定义的
common causes
)
[2]
。
下面演示怎样基于模糊
Petri
网诊断单元测试的过程评审过程异常,确定导致异常的具体原因。以缺陷率这个质量指标为例,假设缺陷率≥
UCL
(注:
UCL
是缺陷率的
X
控制图的控制上限)。图
2
是“缺陷率≥
UCL
”故障特征的简单模糊
Petri
网,蕴含该故障的模糊产生式规则,并且变迁激活概率已经根据过程状态信息生成了。这是一个非常简单的
SD-FPN
模型,起始位置还可以根据实际需要继续展开。模糊
Petri
网提供分层能力,也有利于缩减命题规模。
图
2
中位置集合为
{p1,p2,p3,p4,p5,p6,p7,p8,p9},
起始位置集合为
{p1,p2,p3,p4,p5,p7,p8},
目标位置为
p9
。诊断推理的过程就是由目标位置,反向推理出可导致目标位置表示的故障现象的起始位置表示的故障原因,步骤如下:
图2 故障诊断模糊Petri网
(
1
)建立位置集合的可达性集合
RS
、立即可达性集合
IRS
和相邻位置集合
AP
,如表
2
所示。
表2 可达性集合、立即可达性集合和相邻位置集合
Place(pi)
|
p1
|
p2
|
p3
|
p4
|
p5
|
p6
|
p7
|
p8
|
p9
|
RS(pi)
|
{p6,p9}
|
{ p6,p9}
|
{ p6,p9}
|
{ p6,p9}
|
{ p6,p9}
|
{p9}
|
{p9}
|
{p9}
|
{}
|
IRS(pi)
|
{p6}
|
{p6}
|
{p6}
|
{p6}
|
{p6}
|
{p9}
|
{p9}
|
{p9}
|
{}
|
AP(pij)
|
{}
|
{}
|
{}
|
{}
|
{}
|
{}
|
{}
|
{}
|
{}
|
(
2
)根据故障特征“缺陷率≥
UCL
”(位置
p9
),查询(
1
)中建立的
3
个集合,对应
p9
的相邻位置集合为空,说明没有并发故障发生。引发
p9
的路径有
3
个:
p6
→
p9
、
p7
→
p9
和
p8
→
p9
,再查询变迁激活概率
TP(t6)
、
TP(t7)
和
TP(t8)
,发现
TP(t6)
最大,首先执行
t6
。在进行深度有限搜索时,给已经查询的路径赋予标志。然后再以
p6
为目标位置,重复如上反向推理过程,引发
p6
的路径有
p1
→
p6
、
p2
→
p6
,
p3
→
p6
,
p4
→
p6
和
p5
→
p6
,由于变迁激活概率
TP
(
t5
)最大,根据可信度最大选择原则,首先选择变迁
t5
,找到输入位置
p5
。
(
3
)由于
p5
是起始位置,人机接口询问“是否存在方法问题?”。如用户非常“是“,则从系统预先设置的模糊程度度量表自动计算该命题的可信度,假设
PCF(p5)
=
0.98
。因为该命题的可信度大于域值
0.8(
假设所有变迁启动的域值都是
0.8)
,则
p6
对应的命题是一个被激活的事件。计算
p6
的可信度
PCF(p6)
=
PCF(p5)*0.9
=
0.98*0.92=0.90
。
PCF(p6)>0.8
,
p9
对应命题也被激活,计算
PCF(p9)=PCF(p6)*0.9=0.9*0.9=0.81
。这样就找到导致
p9
的故障源,那就是
p5
对应的命题“方法问题”,由该命题导致的“缺陷率≥
UCL
”故障的可信度是
0.81
。
(
4
)若人机接口询问“是否存在方法问题?”时,用户回答“否”,由模糊程度量化表计算该命题可信度
PCF(p5)=0.1
,
0.1
小于
0.8
,则
p5
对应命题不会被激活。系统会按照变迁激活概率大小,继续如上推理过程。重复如上推理过程,直到找到故障原因,并计算故障位置的可信度。
5 结束语
软件过程故障属性往往是不清晰的,模糊的。基于模糊产生式规则,本文提出适用于软件过程故障诊断的模糊
Petri
网模型(
SD-FPN
),较好地表示和处理这些模糊知识。为实现故障诊断的快速有效,模糊诊断系统采用深度优先的搜索方法,以反向并行推理来缩小搜索空间,并且根据过程状态信息调整变迁激活概率,依据变迁激活概率决定哪种变迁是最可能发生的,这样能够使得反向推理更加高效,更快找到故障源。实验表明,用模糊
Petri
网作为知识表示和推理框架来辅助进行软件过程故障诊断,其推理过程接近人的思维活动,是一种行之有效的故障诊断方法。