您的当前位置:首页正文

成都电子科技大学硕士学位论文(最终提交版)

2021-11-19 来源:钮旅网


论文题目 系统可测性分析与辅助设计软件

总体设计及关键模块实现

学科专业 测试计量技术及仪器 指导教师 龙 兵 副教授 作者姓名 杨兴霁 学

号 200820701030

分类号 密级 UDC注1

学 位 论 文

系统可测性分析与辅助设计软件总体设计及关键模块实现

(题名和副题名)

杨兴霁

(作者姓名)

指导教师姓名 龙 兵 副教授

电子科技大学 申请专业学位级别 论文提交日期 成 都

(职务、职称、学位、单位名称及地址) 硕士 专业名称 测试计量技术及仪器 2011.4 论文答辩日期 2011.5 电子科技大学

学位授予单位和日期 答辩委员会主席 评阅人 2011年 月 日

注1:注明《国际十进分类法UDC》的类号。

独 创 性 声 明

本人声明所呈交的学位论文是本人在导师指导下进行的研究工作及取得的研究成果。据我所知,除了文中特别加以标注和致谢的地方外,论文中不包含其他人已经发表或撰写过的研究成果,也不包含为获得电子科技大学或其它教育机构的学位或证书而使用过的材料。与我一同工作的同志对本研究所做的任何贡献均已在论文中作了明确的说明并表示谢意。

签名: 日期: 年 月 日

关于论文使用授权的说明

本学位论文作者完全了解电子科技大学有关保留、使用学位论文的规定,有权保留并向国家有关部门或机构送交论文的复印件和磁盘,允许论文被查阅和借阅。本人授权电子科技大学可以将学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存、汇编学位论文。

(保密的学位论文在解密后应遵守此规定)

签名: 导师签名:

日期: 年 月 日

摘 要

摘 要

可测性(Testability,也译为可测试性)是产品能及时准确地确定其状态(可工作、不可工作、性能下降),隔离其内部故障的设计特性。可测试性设计已成为装备整体设计中一个重要的组成部分,在提高武器装备保障能力、降低测试维护成本方面起到决定性的作用。虽然我国1995年就颁布了《装备测试性大纲》,但由于缺乏有效的系统可测性设计与评估的计算机辅助工具,我国电子装备可测性设计现状远远滞后于新一代装备可测性设计需求。因此,本论文在国家相关项目的支持下,参考美国QSI公司的TEAMS软件,对系统可测性分析及辅助设计软件的总体设计及关键模块实现做了深入研究,开发的可测性软件已在相关单位作了应用验证。论文的主要研究工作有:

1.设计了软件总体方案。将本软件划分为系统级可视化建模、可测性指标分析、最优故障诊断树生成、可测性指标分配四个大功能模块。以VC++ 6.0为编程开发平台,设计了软件总体结构和集成方案,以及多类型结点的模型树、依赖矩阵等用于模块间数据传递的关键数据结构。

2.提出了一种“基于依赖矩阵多测试信息的虚警率评估方法”。该方法在依赖矩阵基础上,只需采用现有测试方法就能评估虚警率,希望能为虚警率评估提供一种新的思路。另外,还完成了对常见可测性指标(故障检测率、故障隔离率、未检测故障集、故障模糊集、隐藏故障、掩盖故障、冗余测试)与动态性能指标(加权故障检测率、加权故障隔离率、平均模糊度)计算方法的实现与优化。

3.实现了基于AO*与或图启发式搜索算法的最优故障诊断树生成方法。AO*启发式搜索算法是可测性分析与设计优化的基础,但其算法描述复杂且计算复杂度较高。为了减少程序运行时的资源开销,本论文将所有的待解故障集、可用测试都通过依赖矩阵传入时的先后ID号来标识,该方法避免了程序执行期间无意义的冗余信息操作处理,一定程度上减少了不必要的内存和CPU开销。此外,本论文还设计和实现了诊断树结果的图形化交互显示界面。

4.针对TEAMS软件不能进行可测性指标分配的不足,提出了在可测性软件中集成可测性指标分配功能模块。本论文对可测性指标分配进行了简要介绍,编程实现了经验分配法和线性插值分配法,并根据指标分配的数据特征设计和实现了特定的数据结构和窗口化交互显示方式。

I

摘 要

5.对研制的可测性软件进行了测试验证。以“反坦克导弹发动机系统”为测试验证实例,通过和TEAMS 6.0对比验证,发现两款软件的各项可测性指标分析结果基本一致,另外本软件还具有直接查看系统依赖矩阵、虚警率分析与可测性指标分配等特殊功能。此外,本软件2010年通过了总装专家组的验收测试,而且本软件也在航天科工集团与中电集团相关单位进行了应用验证,得到了相关专家的肯定与表扬。

关键词:可测性,指标分析,故障诊断树,指标分配,虚警率

II

ABSTRACT

ABSTRACT

Testability is a key factror for a product design through which the product’s status (work, unwork, performance degradation) can be determined timely and accurately, and the internal fault can be isolated. Design for testability (DFT) has become an important part in the design of weapons and equipments because DFT plays a decisive role in imroving supportability and reducing test costs for weapons and equipments. Although China promulgated the \"Outline of test equipment\" in 1995, the DFT status applied in current electronic equipment lags far behind testability requirements for the new generation equipments due to a lack of an effective computer-aided tool for DFT design and evaluation, Therefore, in support by some projects of the State, based on the TEAMS—a commercial software for testability, we do a thorough research in software architecture design and key modules design for DFT software. Our DFT software has been verified in some related units. Main contents in this thesis are as follows:

1. The architecture of the software is designed. The software is divided into four functional modules i.e. system-level visual modeling, testability index analysis, optimal fault diagnosis tree generation, testability indicator distribution. Using VC++ 6.0 as the development platform, we designed the architecture of the software. In addition, we designed a multi-node model tree and some dependence-matrix data structures that play a key role when data transmission between modules.

2. A false alarm rate evaluation approach based on multi-test information from a dependence-matrix is proposed. Based on dependence-matrix, this method can verify the false alarm rate only use existing test methods. Thus this method provides a new way for evaluating false alarm rate. In addition, the calculation methods for common testability index (fault detection rate, fault isolation rate, undetected fault sets, fault ambiguity sets, hidden fault sets, masking fault sets, redundant test sets) and for dynamic testability index (weighted fault detection rate, the weighted fault isolation rate, the mean ambiguity degree) are implemented and optimized.

3. Based on AO* heuristic search algorithm, the optimal method for fault diagnosis tree generation is implemented. AO* heuristic search algorithm is the basis of testability

III

ABSTRACT

analysis and design optimization, but its algorithm description is complexity and it has complexity computation. In order to reduce resource overhead when the program runs, the program identify all the fault sets and usable the tests by the sequence of ID numbers on the time dependence-matrix. This method avoids redundant information in processing meaningless during the operation. Moreover, the method reduces the unnecessary requirement for memory and CPU overhead to some extent. In addition, we also design and implement an interactive graphical display interface for the results of the diagnostic tree.

4. Because of a shortage of index distribution in TEAMS software, the paper proposes to integrate a testability index distribution module into our testability software. First, an index distribution is briefly reviewed. Then, two distribution methods—an experience method and a linear interpolation method, are implemented. Finally, based on the characteristics of a distribution index, a specific data structure and an interactive display window are designed,

5. Our DFT software has been tested and verified. An instance of the \"anti-tank missile engine system\" is tested using our software and TEAMS 6.0. The test results show that the two testability softwares have nearly consistent performance. In addition, our software also has other special features, such as dependence-matrix direct view, false alarm rate analysis and distribution of testability indicators. Morover, our software passed the acceptance test from expert assembly in 2010, and the software has been verified by CASIC (China Aerospace Science & Industry Corp.) and the CETC (China Electronic Technology Group).

Keywords: Testability, Index analysis, Fault diagnosis tree, Indicator distribution, False

alarm rate (FAR)

IV

目 录

目 录

第一章 绪论 .................................................................................................................. 1 1.1 可测性技术概述 ........................................................................................................ 1 1.2 国内外可测性软件概况 ............................................................................................ 1 1.3 本文研究内容及结构安排 ........................................................................................ 3 第二章 软件结构总体设计 .......................................................................................... 5 2.1 软件平台介绍 ............................................................................................................ 5 2.1.1 编程开发平台介绍 ............................................................................................ 5 2.1.2 引用的第三方组件介绍 .................................................................................... 5 2.2 软件应具备的功能 .................................................................................................... 7 2.3 软件总体设计与实现 ................................................................................................ 9 2.3.1 软件集成方案设计与实现 ................................................................................ 9 2.3.2 关键数据结构设计 .......................................................................................... 13 2.4 本章小结 .................................................................................................................. 19 第三章 可测性指标分析模块设计与实现 ................................................................ 20 3.1 可测性性能指标介绍 .............................................................................................. 20 3.1.1 静态可测性指标 .............................................................................................. 20 3.1.2 动态可测性指标 .............................................................................................. 21 3.2 虚警率评估方法研究 .............................................................................................. 23 3.2.1 虚警率基本概述 .............................................................................................. 23 3.2.2 基于依赖矩阵多测试信息的虚警率评估方法研究 ...................................... 24 3.3 软件设计与实现 ...................................................................................................... 26 3.3.1 依赖矩阵预处理子模块设计与实现 .............................................................. 26 3.3.2 可测性性能指标分析实现 .............................................................................. 29 3.3.3 指标结果图形化显示设计与实现 .................................................................. 31 3.3.4 虚警率评估实现 .............................................................................................. 33 3.4 本章小结 .................................................................................................................. 35 第四章 最优故障诊断树模块设计与实现 ................................................................ 36 4.1 最优故障诊断搜索算法介绍 .................................................................................. 36

V

目 录

4.1.1 AO*搜索算法简介 ............................................................................................ 36 4.1.2 AO*搜索算法的实例分析 ................................................................................ 37 4.2 软件设计与实现 ...................................................................................................... 38 4.2.1 模块总体结构设计 .......................................................................................... 38 4.2.2 霍夫曼平均码长求解实现 .............................................................................. 40 4.2.3 AO*算法实现 .................................................................................................... 43 4.2.4 诊断树的图形化交互显示设计与实现 .......................................................... 46 4.3 本章小结 .................................................................................................................. 50 第五章 可测性指标分配模块设计与实现 ................................................................ 51 5.1 可测性指标分配简介 .............................................................................................. 51 5.1.1 可测性指标分配概述 ...................................................................................... 51 5.1.2 可测性指标分配方法介绍 .............................................................................. 52 5.2 软件设计与实现 ...................................................................................................... 54 5.2.1 模块总体结构设计 .......................................................................................... 54 5.2.2 窗口化交互显示设计与实现 .......................................................................... 56 5.3 本章小结 .................................................................................................................. 60 第六章 软件测试与验证 ............................................................................................ 61 6.1 测试验证实例简介 .................................................................................................. 61 6.2 指标分析模块测试验证 .......................................................................................... 62 6.2.1 可测性性能指标 .............................................................................................. 63 6.2.2 虚警率 .............................................................................................................. 65 6.3 最优故障诊断树模块测试验证 .............................................................................. 65 6.4 指标分配模块测试验证 .......................................................................................... 66 6.5 软件整体测试验证 .................................................................................................. 67 6.6 本章小结 .................................................................................................................. 69 第七章 总结与展望 .................................................................................................... 70 致 谢 ............................................................................................................................ 72 参考文献 ........................................................................................................................ 73 攻硕期间取得的研究成果 ............................................................................................ 75

VI

第一章 绪论

第一章 绪论

1.1 可测性技术概述

随着半导体集成电路技术的迅猛发展,军用电子系统日趋复杂,且向集成化和小型化两个方向发展,急剧地限制了测试点的设置,而随着检测点的缩减,降低了故障的可观测性。在这种情况下,人们提出了可测性设计概念,在设计阶段就考虑产品的后期测试维护问题,把降低测试维护代价的要求纳入设计规范,并通过可测性指标来检验和改进设计。

在可测试性大纲[1,2,3]中,可测性(Testability,也称可测试性)被定义为:产品能及时准确地确定其状态(可工作、不可工作、性能下降),隔离其内部故障的设计特性。以提高可测性为目的进行的设计被称为可测性设计(DFT: Design For Testability)。

可测性设计要解决的问题是如何通过改善设计[4],将难测或不可测故障转变为易测或可测的故障。具体是指在系统、分系统、设备、组件和部件的设计过程中,通过综合考虑并实现测试的可控性与可观测性、初始化与可达性以及和外部测试设备兼容性等,达到可测性要求的设计过程。

可测性设计的目的是提高系统的故障诊断和隔离能力,因此需要同故障诊断技术相结合来优化系统可测性设计。总之,可测性设计是与产品功能设计并行的复杂工作,不能仅从设计阶段的投入衡量,还要从它在产品整个寿命周期获得的利益考虑。

1.2 国内外可测性软件概况

20世纪80年代,美国军方相继实施了综合诊断研究计划。为与综合诊断的协调,美国国防部于1993年2月颁发MIL- STD-2165A《系统和设备的可测性大纲》,大纲将可测试性作为与可靠性及维修性等同的设计要求,并规定了可测试性分析、设计及验证的要求及实施方法。该标准的颁布标志着可测试性作为一门独立学科的确立[5-8]。考虑可测性的综合诊断技术已应用在正在研制的新一代武器系统中,如军用运输机C-17、战斗机F-22、轰炸机B-2。

1

电子科技大学硕士学位论文

自从MIL-STD-2165发布后,陆续出现了很多可测性分析工具用于美国军方装备的可测性设计和分析。这些工具包括:ASTEP、CAFIT、DTA、IN-ATE、LOGMOD、SCOAP、STAMP、ACE、WATA等。作为指标分析工具,上述这些软件基本上都具有系统逻辑建模的功能,但都没有得到大范围应用推广。

随着计算机软件工程的发展、武器系统测试和诊断要求提高,目前的可测性辅助设计和评价软件工具不仅可以用于系统的测试和诊断设计,而且可以生成相应的测试序列和故障诊断引擎,以提高系统的维护性、可靠性。具有代表性的可测性分析和辅助设计工具有美国QSI公司[9]的TEAMS和DSI公司[10]的eXpress。

TEAMS主要用于复杂系统的测试时序生成和可测性设计、分析。TEAMS最初为美国航天工业和NASA研制,后逐渐扩展应用到汽车、化工、医疗等行业。TEAMS是基于模型的分析工具,这些模型涵盖了系统的组成结构、互联、测试布局、故障模式等信息。这个模型将各种故障与系统组成单元、维护步骤和修理过程关联起来。产品的可测性经过TEAMS分析后,生成文本和图形的可测性报告。

eXpress也是建立在模型基础上,从系统观点获取设计数据,通过综合利用不同的数据源,将系统工程、可靠性、可测性、可维护性和诊断可测性等学科关联在一起。eXpress强调诊断性设计,其中的诊断信息可产生多个诊断报告,这些报告包括检测覆盖率报告,详细故障组统计,功能概率,故障模式概率等。

但这两款商用软件价格都很昂贵,TEAMS的单个建模模块就需要4-8万美元,若购买整套软件则需要高达几十万至百万美元。除此,TEAMS在可测性辅助设计方面功能不够完善,而eXpress的学科关联也太多,缺乏对系统可测性指标分析和辅助设计的针对性。

国内装备的可测性设计从20世纪80年代开始逐渐得到重视。1990年4月发布的航标HB6437-90《电子系统和设备的可测试性大纲》,1995年10月发布国军标GJB2547-95《装备测试性大纲》。时至今日,装备可测试性问题仍然没有得到很好地解决,甚至成为装备保障过程中最为突出的问题。从技术层面上看,主要是缺乏系统的可测性设计指南、理论指导,和缺乏有效的关于可测性设计的计算机辅助设计与仿真软件工具[11-20]。

在国内,雷达整机以及机载、舰载电子系统等复杂系统的设计研制单位,都对电子系统和设备可测性设计技术需求迫切。因为可测性设计是军用电子设备研制必要指标之一,而且未考虑可测性设计的电子设备大大增加了研制单位的维护费用,所以这些单位迫切希望能对现有电子系统和设备进行深入的可测性分析,为设备的后期测试、维护提高故障诊断依据。

2

第一章 绪论

因此,有必要自主开发一款可测性分析与辅助设计软件[15],对现有电子装备系统进行的可测性分析,为故障诊断提供最优测试依据,提高可测性设计效率的相关工程应用具有重大意义。

1.3 本文研究内容及结构安排

本论文的主要研究工作是可测性分析与辅助设计软件的总体结构设计与实现,和可测性指标分析模块、最优故障诊断树模块、可测性指标分配模块的设计与实现。本论文的主要研究内容如图1-1所示。

软件总体设计与集成系统级可视化建模模块指标分析模块设计与实现故障诊断树模块设计与实现指标分配模块设计与实现

图1-1本文研究内容

根据本文研究内容及可测性软件的关联性,本文的结构安排如下: 第一章,绪论

介绍可测性技术的定义及课题背景和国内外可测性软件概况。 第二章,软件结构总体设计

本章从软件整体结构设计的角度出发,介绍软件的编程开发平台和编程过程中引用的第三方开源组件。还介绍了软件具备的功能,并将其划分为系统级可视化建模、可测性指标分析、最优故障诊断树生成、可测性指标分配四个大功能模块。再阐述软件总体结构和集成方案设计,及模型树、依赖矩阵等负责模块间数据传递的关键数据结构的设计。

第三章,可测性指标分析模块设计与实现

本章介绍了常见可测性指标(故障检测率、故障隔离率、未检测故障集、故障模糊集、隐藏故障、掩盖故障、冗余测试)、动态性能指标(加权故障检测率、加权故障隔离率、平均模糊度)的定义及计算方法,并编程实现了这些指标的计算方法和显示可测性指标结果的报告输出。此外,本章提出了一种“基于依赖矩阵多测试信息的虚警率评估方法”。该方法在依赖矩阵基础上,只需采用现有测试方法就能评估验证虚警率,希望能为虚警率评估提供一种新的思路,并编程实现

3

电子科技大学硕士学位论文

了该方法。

第四章,最优故障诊断树模块设计与实现

本章对故障诊断树和AO*最优故障诊断树搜索算法作了简要介绍。重点阐述了最优故障诊断树生成模块的软件设计和编程实现,包括模块的组成结构设计,霍夫曼树的构造、霍夫曼平均码长的求取实现,AO*算法的编程实现,诊断树结果的图形化交互显示界面的设计和实现。

第五章,可测性指标分配模块设计与实现

本章针对TEAMS软件不能进行可测性指标分配的不足,提出了在可测性软件中集成可测性指标分配功能模块。对可测性指标分配做了简要介绍,还介绍了经验法、线性插值法两种分配方法。编程实现了经验分配法和线性插值分配法,并根据指标分配的数据特征设计和实现了特定的数据结构和窗口化交互显示方式。

第六章,软件测试与验证

本章以“反坦克导弹发动机系统”测试验证实例,建立本软件的可测性模型,对本软件的各功能模块和整体性能进行一一测试。同时,使用可测性分析软件TEAMS建立其对应的可测性模型,分析可测性指标和最优故障诊断树。

4

第二章 软件结构总体设计

第二章 软件结构总体设计

本章从软件整体结构设计的角度出发,先介绍本软件的编程开发平台和编程过程中引用的第三方开源组件,及本软件具备的功能。再阐述本软件的总体结构、集成方案设计,和“模型树”、“故障-测试依赖矩阵”两个数据结构的设计,这两个数据结构对软件模块间数据传递起到了关键作用。

2.1 软件平台介绍

本软件是在VC++6.0编程平台下开发,并且以Windows操作系统为运行平台。

2.1.1 编程开发平台介绍

C++是一种使用非常广泛的计算机编程语言,它也是静态数据类型检查的,支持多重编程范式的通用程序设计语言。它支持过程化程序设计、数据抽象、面向对象程序设计、泛型程序设计等多种程序设计风格[21]。

VC++6.0是微软(Microsoft)公司推出的一个基于Windows系统平台的可视化的集成程序开发环境,它的源程序要求按C++语言方式编写,并加入了微软提供的功能强大的MFC(Microsoft Foundation Class)类库[22]。MFC中封装了大部分Windows API(Application Programming Interface,应用程序编程接口)函数和Windows控件,它包含的功能涉及到整个Windows操作系统。MFC不仅给用户提供了Windows图形环境下应用程序的框架,而且还提供了创建应用程序的组件,为开发人员节省了大量的开发时间。除此,它还提供了详细的程序开发手册,介绍其定义类库和函数的接口,使应用程序开发变得简单。

2.1.2 引用的第三方组件介绍

程序中开发过程中,除了使用MFC自带的程序开发函数库,引用了第三方开源组件CMarkup、CRGTreeT、CGridCtrl,分别用来完成数据的文件读写、数据操作、表格数据显示,还引用了Visio ActiveX图形化开发控件,和Xtreme Toolkit Pro界面美化组件。

5

电子科技大学硕士学位论文

1.CMarkup XML文件读写组件

CMarkup类是由First Objective Software Inc用C++语言开发的非常经典的XML文件读写工具。它是一个非常独立的、简单易用的开源项目。用它来创建新的XML文档,分析修改现存的XML文档,非常方便易用。它具有如下特征:①独立,不需要任何外部的XML组件;②小,是很小的一个类,并且对于文档只维持了一个字符串;③简单,创建、导航和修改XML无比的简单;④快,分析器能相当快的建立索引数组。

本软件将可测性模型数据存储为XML(Extensible Markup Language,即可扩展标记语言)格式的文件,并通过CMarkup类来实现工程文件数据的读写操作。 2.CRGTreeT树形数据操作组件

CRGTreeT类是由程序员Tibor Blazko和René Greiner联合开发的纯数据树形数据结构。其功能完整,不仅包含树结点的添加、插入、删除,而且还提供查找、排序、堆内存外部释放等功能。除此,其数据结构明晰易懂,代码简洁明了易用。

本文的模型树、诊断树等树形数据结构都是继承至CRGTreeT类。 3.CGridCtrl表格数据显示组件

CGridCtrl类是CodeProject.com网站的创始人之一Chris Maunder开发的一个数据表格显示编辑开源控件,该控件继承于MFC的CWnd类,其功能全面,简单易用。除此,还具有如下特点:①可以对任何列或行固定,隐藏行和列,行或者列可以按照大小自动排序;②单元格可以有不同文本和背景颜色的个性化设置,字体的个性化设置,标注\"只读\"或者其他的状态设置及检测,单元格太小而不能显示数据时会有提示框显示完整的数据。

本文的依赖矩阵显示的数据表格,和指标分配模块的线性插值法加权参数设置表格使用了该组件。

4.Visio ActiveX图形化开发控件

Visio是由Microsoft开发的功能强大的图形开发环境,它可以创建种类广泛的几何图形和流程图。Visio ActiveX图形化控件可以嵌入到以Microsoft Visual Studio、Microsoft office开发的应用程序中,为图形编程提供绘图界面,并允许开发人员控制集成的Visio用户界面。

软件中建模模块的图形化交互显示就是基于该组件实现的,但该部分不是本文的研究内容,不作深入讨论。 5.Xtreme Toolkit Pro界面美化组件

Xtreme Toolkit Pro是由Codejock Software Inc开发的一套非常好的MFC扩展

6

第二章 软件结构总体设计

界面库,可以帮助在编程时轻松的制作出非常漂亮专业的自定义主题外观,是VC程序员的理想的界面开发工具选择之一。

本文对该组件的使用,主要体现在框架和属性面板的显示风格上。

2.2 软件应具备的功能

如果按功能进行划分,本可测性分析与辅助设计软件具备系统级可视化建模、可测性指标分析、最优故障诊断树、可测性指标分配四大功能模块。软件模块化原则是软件架构中的基本原则。模块化可以提高软件模块的复用性,并保障每一个模块的稳定性。软件的功能模块组成结构图如图2-1所示。

系统系统级可视化建模可测性指标分析最优故障诊断树可测性指标分配 图2-1软件功能模块组成结构图

1.系统级可视化建模模块

可视化建模的目的是为了建立可测性模型,对被测系统进行系统级的数学抽象描述[23-27]。系统级可测性模型是通过人们对系统的理解来进行抽象描述的,可能涉及到各行各业的专业知识,各种不同岗位的工作人员的合作努力。对于系统的功能设计工程师,其关注的模型是具有传输函数的结构框图,而对于维修工程师来说,关注的模型又是由可更换元件组成的系统原理图。

系统级可测性模型数学模型是一个多信号模型[14-18]。多信号模型是在对被测系统结构层次图基础上,分析各组成单元构成、相互连接关系,和各单元隐含的故障模式(简称故障,也称信号)及故障模式流向,以分层有向图的方式来表征系统组成、功能、故障及测试之间相关性的一种模型表示方法。

系统级可测性模型的建模[17]是通过分等级多层次分布建模实现的,建模方向一般是从上至下逐层细化的过程。当仅有设计概念时,用户可以先设计系统的最顶级模型,等到子系统的设计方案明确后,再完善较低等级的模型。

系统级可视化建模模块是本软件的核心部分和数据来源,但该模块由其他同学设计与实现,该模块部分不在本文的讨论范围之内,这里只做简单说明。

7

电子科技大学硕士学位论文

2.可测性指标分析模块

可测性是系统及设备的一种设计特性,描述和确定系统的检测和隔离故障的能力。可测性参数是对可测性特性的描述,可测性指标是可测性参数的量值。本文依据计算不同指标的要素及方法差异性,将可测性性能指标分成静态、动态两部分。

静态可测性指标是在被测系统的故障-测试依赖矩阵中作统计分析或进行“或”运算产生的结果,由系统的故障测试依赖关系决定,不受故障概率等因素影响。动态可测性指标的计算除了考虑被测系统的故障-测试依赖矩阵,还要考虑故障概率、测试成本/时间等用户评估性辅助加权因素,所以这些指标具有一定的动态性。

虚警率(FAR),是指在规定时间内,发生的虚警次数与在同一时间内发生的虚警次数与真实故障显示次数总和的百分比。其中,虚警是指机内测试和外部测试设备检测显示出一个单元有故障,而实际上该单元没有故障的情况。 3.最优故障诊断树生成模块

最优诊断树是一种将形成系统故障的原因由总体至部分按树枝状逐级细化并隔离出故障的分析方法,是用于隔离复杂系统故障的一种简单有效的方法。故障诊断树的生成和优化涉及到目标函数的确定、测试点的选取、生成算法等多方面的问题。

生成最优诊断树的关键在于选取最优决策搜索算法,本文采用的算法是AO*(And/Or)与或图启发式搜索算法。该模块实现了AO*启发式最优诊断树搜索算法,国外可测性分析软件TEAMS已经实现了故障诊断树生成功能[24],但存在技术封锁问题,国内仍缺乏相关的最优诊断树生成组件或软件平台[11-18]。 4.可测性指标分配模块

可测性分配是可测性设计中的重要工作内容[28],可测性分配是将要求的系统可测性和诊断指标逐级从整体到局部、由大到小的分解过程,使整体和部分的指标协调一致。

在进行系统可测性分配时,首先应建立系统的功能框图,系统功能框图是进行可测性分配的基本依据。需要进行分配的指标是故障检测率和故障隔离率。指标分配方法是很重要的部分,采用不同的分配方法得到的分配结果也不同。本文实现了常规的经验分配方法和高效的自动化可测性分配方法——线性插值法。

8

第二章 软件结构总体设计

2.3 软件总体设计与实现 2.3.1 软件集成方案设计与实现

1.软件总体结构及数据流向

本软件按功能模块划分为系统级可视化建模、可测性指标分析、最优故障诊断树、可测性指标分配四大模块。软件总体结构及数据流向如图2-2所示,图中采用黑框突出标注的“模型树”、“故障-测试依赖矩阵”在软件模块关联上起到了重要的数据纽带作用。

系统级可视化建模模型树模块测点连线故障诊断树指标分配经验分配法线性插值法最优测试序列平均隔离代价未使用测试五元组{S,P,T,C,D}故障源-测试依赖矩阵静态可测性指标未检测故障冗余测试静态模糊组隐藏故障掩盖故障动态可测性指标检测率(加权)隔离率(加权)平均模糊度 图2-2软件总体结构及数据流向示意图

系统级可视化建模模块,是用户建立、编辑可测性模型的工作平台。是其他模块工作的数据来源,该模块除了输出模型树供指标分配模块使用,还根据可测性模型的故障传播机理输出故障-测试依赖矩阵。它也是和用户交互最为频繁、操作最为复杂的模块,是本软件的核心模块之一。由于本模块的复杂性和相对独立性,该模块的具体设计与实现由其他人员协作开发完成,本文对该部分的内容不作深入讨论。

可测性指标分析模块,是计算可测性模型的可测性指标的功能模块。该模块的输入为故障测试依赖矩阵,输出为可测性指标报告。其中,这些可测性指标包括未检测故障、冗余测试、静态模糊组、隐藏故障、掩盖故障等静态可测性指标,和加权检测率、加权隔离率、平均模糊度等动态可测性指标。

最优故障诊断树模块,是产品可测性设计和后期维护、故障诊断结合的模块。该模块的输入同样是依赖矩阵,根据最优决策算法生成一棵测试代价最小的最优故障诊断树(最优测试序列)。同时,其还生成诊断树的平均隔离代价、未使用测

9

电子科技大学硕士学位论文

试等故障诊断指标。

可测性指标分配模块,是将要求的系统可测性和诊断指标逐级分配给子系统、设备、部件或组件,是可测性设计的重要工作内容。该模块的输入为系统结构层次图(模型树),输出就是分配到每个子系统或组件的指标。在分配方法上,该模块实现了经验法、线性插值法两种分配算法。 2.模块集成方式

本文将每个功能模块都封装成不同的C++抽象数据类[21],以方便框架下、平台间的相互调用。进行类的封装隐含了实现该类的成员和具体功能实现过程,使用该类时只需要了解这些类的接口,不用在意这些过程的实现细节。

用类来定义各模块的抽象数据类型,可以使程序的编写、调试和修改更容易。类的封装也避免了类内部出现无意义的、可能破坏对象状态的错误。保证了各模块间的相对独立,互不干涉。

除此,采用C++类来抽象和封装各功能模块,首先对编程语言的要求比较单一,其次模块间的调用也不需要其他平台或媒介的支持。从一定程度上降低了开发环境和集成环境的复杂度。如图2-3所示为框架类CMainFrame的构成图。

关键数据对象模型树(CModelTree)依赖矩阵(CDMData)诊断树(CDiagTreeAO)框架类 数据成员(CMainFrame )对话框依赖矩阵显示对话框指标分析设置对话框虚警率评估对话框指标分配对话框可测性指标分析可测性指标分配虚警率评估查看静态指标报告查看可测性指标报告查看最优故障诊断树查看依赖矩阵右侧面板模型属性模型树显示控件诊断树属性工具栏模型工程工具栏功能模块工具栏建模组件工具栏模型视图工具栏操作事件响应函数图2-3软件框架CMainFrame类的数据成员及事件响应函数构成图

10

第二章 软件结构总体设计

本文以CMainFrame类作为软件的框架类,其中封装集成了各模块的数据成员及事件响应函数。框架类包含了关键数据对象、右侧面板、对话框、工具栏等数据成员对象,和指标分析、指标分配、查看报告等用户操作事件的响应函数。

菜单栏、工具栏的操作,模块间的切换操作均是通过框架类的成员函数实现。 3.框架窗口交互显示样式设计

从软件的框架构成方面看,将软件大致分为菜单工具栏、视图工作区、属性面板三大功能区域。其中,视图工作区是整个软件的主题交互显示部分,模型编辑、指标报告显示、最优故障诊断树结果显示操作都在这个区域中完成;属性面板是辅助功能区,用于快捷查看视图工程区中指定对象的属性。框架窗口的功能区域构成示意图如图2-4所示。

菜单栏工具栏建模工作区、模型视图区指标报告显示区最优故障诊断树结果显示区模型属性面板模型树显示控件诊断树属性面板 图2-4框架窗口的功能区域构成示意图

当切换不同功能模块时,在此框架窗口结构下,相应调整视图工作区、属性面板的显示内容即可完成模块间的切换和跳转。

为了使框架程序窗口的显示风格和Windows系统提供的传统窗口有所不同,让框架窗口的界面风格显得更加友好。所以,在定义软件框架类CMainFrame时使框架类继承于Xtreme Toolkit Inc的MDI(Multiple Document Interface)框架类CXTPMDIFrameWnd,继承其框架窗口友好的显示风格。 4.软件菜单项及工具栏设计

根据软件功能需要,将软件的菜单分为文件、编辑、模型、分析、分配、仿真、显示、帮助8类主菜单项。

“文件”主要负责用户建立或编辑的可测性模型工程的数据文件管理; “编辑”主要负责建模时剪切、复制、粘贴等常用的编辑操作;

“模型”主要负责建模模块的模型视图属性设置和常用建模组件的添加; “分析”主要负责可测性指标的分析和虚警率评估; “分配”主要负责可测性指标分配;

11

电子科技大学硕士学位论文

“仿真”主要负责模拟电路的故障字典仿真,该部分功能由其他人员负责开发,本文不予说明;

“显示”主要负责模块间切换和指标结果显示;

“帮助”主要负责查看软件的版权说明,和软件使用说明文档。本软件的菜单项的组成结构图如图2-5所示。

文件新建打开关闭保存另存为退出编辑剪切复制粘贴删除模型分析指标分析虚警率指标分配分配仿真电路仿真显示帮助帮助关于视图缩放模块测点连线添加子层标尺网格连接点参考线页标签50%100%200%400%上一比例模型静态指标可测性指标故障诊断树指标分配文本报告依赖矩阵

图2-5软件菜单项的组成结构图

工具栏按钮相当于菜单栏选项的快捷方式,是显示位图式按钮行的控制条,工具栏按钮和菜单项通过相同的ID绑定在一起,使用同一个处理函数。本软件包含的工具栏如图2-6所示。

新建打开保存另存为关闭建模分析报表诊断树分配矩阵

(a)模型工程 (b)功能模块

模块测点连线

放大缩小原大小标尺网格交叉点属性

(c)常用建模组件 (d)模型视图

图2-6软件工具栏效果截图

菜单项和工具栏在软件中的部分显示效果截图如图2-7所示。

12

第二章 软件结构总体设计

图2-7菜单项和工具栏的部分显示效果截图

2.3.2 关键数据结构设计

由图2-2的软件整体结构及数据流向示意图可以看出,“模型树”和“故障-测试依赖矩阵”这两个数据对象在软件模块间的关联上起到了关键作用,结合面向对象的编程思想,本文设计了对应的两个数据结构。 2.3.2.1 多类型结点的树形数据结构

根据实际模型需要,设计了一种多类型结点的树形数据结构。一个被测系统的可测性模型[16]可以表征为由模块、测点、与(表决)、或(开关)等不同类型组件组成的结构层次图。结合面向对象的编程思想,本文将该模型结构层次图抽象为编程中的数据结构模型——多类型结点的模型树。

如图2-8所示,为某被测系统的可测性模型的结构层次图,图中包含了系统的组成模块和可测性需要的测点等信息,作为根结点的“系统模块”除了包含两个类型相同的“子系统模块”结点,还包含了一个不同类型的“测点”结点;进一步细分,“子系统模块1”又包含“与结点”、“子模块1”两个不同类型的数据结点;以此类推,可以看出,该可测性模型可以表示成一个多层次、多类型结点的树形数据结构。

根结点第一层子系统模块1系统模块测点子系统模块2第二层与结点子模块1或结点子模块1子模块2第 i 层子模块1子模块2图2-8某被测系统的可测性模型的结构层次图

13

电子科技大学硕士学位论文

而传统单结点类型的树形数据结构每个结点的数据类型都是一样的。传统的单结点类型树结构无法满足我们的模型需求。在数据结构描述中,传统单结点类型的树(Tree)是由n(n≥0)个结点组成的有限集合[29],对n>0的树即任意一棵非空树,则有:

(1)将一个特殊的结点定义为根结点(Root),根结点没有前驱结点; (2)当n>1时,除根结点外,其余的结点可分为m(m>0)个互不相交的有限

树集合{T1, T2, …, Tm}。其中,每一个集合Ti(1≤i≤m)本身就是一棵树,称其为根结点的子树(SubTree)。

所以需要设计一个符合实际需要的多类型结点的树形数据结构。多类型结点的树形数据结构是在传统单结点类型树的基础上,在树结点类型方面作了扩展设计的树形结构,使得在一颗树中允许存在多种类型的树结点。 1.树结点设计

为了实现上述的树形数据结构,树结点的数据类型设计是关键。利用C++语言中类的多态性,将基结点声明为CBaseNode类,所有树结点类型都继承于它而来,并将CBaseNode类的文件读写函数、幅值函数都声明为虚函数。所有树结点除了包含基结点所具备的属性外,还包含结点自身特有的属性,所以需要在每个继承出来的结点类中实现这些特有属性的文件读写、赋值操作。不同结点类型间的继承关系如图2-9所示。

基结点CBaseNode继承模块结点CModNode继承扩展模块结点CModNodeEx继承继承类型标识结点Id结点名称„等包含继承测点结点CTestPointNode与结点CAndNode或结点COrNode图2-9不同结点类型的继承关系示意图

下面只列出结点基类CBaseNode的具体程序定义,后续几种结点类都是继承于CBaseNode类。在此基础上各自增加一些特有属性,并重写这些特有属性的读写、赋值函数,对应的程序不再一一列出。

这些结点类型所代表的意义及其包含的属性具体说明如下:

14

第二章 软件结构总体设计

(1)CBaseNode类,是结点基类。包含了结点类型标识变量,及所有树结点共有的其他信息(如结点唯一标识符Id、名称Name等)。其中还包含了数据读写处理过程函数,以实现结点数据的文件读写。

考虑到树结点数据类型的后续扩展性,充分利用了C++语言中类的多态性,将结点基类的读写函数都声明为虚函数的形式。CBaseNode类的具体定义如下:

class CBaseNode {public:

MODULE_TYPE type; int „„

//将结点数据写入XML文件

virtual BOOL DumpNode(CMarkup* markup); //从XML文件读取结点数据

virtual BOOL InitNode(CMarkup* markup, CBaseNode* pParentNode = NULL); virtual const CBaseNode &operator=(const CBaseNode& rt); };

//结点赋值函数

id; name;

CString

//结点类型

//结点ID,在整棵树中是唯一的 //结点名称

//多类型结点模型树的结点基类

(2)CModNode类,模块结点类。继承于CBaseNode类,除了包含基结点的属性,还包含了模块名称、故障概率、故障模式、层次包含关系等模块的可测性属性信息。

模块可以是一个系统的抽象,也可以是一个子系统的抽象,同理也可以是某个的功能模块或元件的抽象。一个模块也可以表征为多个子模块连接而成的组合体,即模块具有层次包含嵌套特性。

(3)CModNodeEx类,扩展模块结点类。继承于CModNode,其除了具有模块结点的属性,还包含了可测性指标分配的属性(如已分配或预期的FDR、FIR指标值等数据)。此类在工程文件读写和指标分配模块操作时会用到。

(4)CTestPointNode类,是测点结点类。其包含了测试数、测试等信息。其中还包含了测试的修改、添加、插入、删除操作过程函数。

测点是可测性模型的关键结点,测点的放置位置对项目的可测性指标取到决定性的作用,并且依据实际模型一个测点位置往往会包含多个不同的测试。这里的测试是一系列测试活动的抽象,而不是指某一个具体的测试操作。

(5)CAndNode、COrNode类,分别是与结点(也称表决结点)、或结点(也称开关结点)的数据类型。

其中,只有“模块”结点、“扩展模块”结点具有包含子级的层次特性,这也

15

电子科技大学硕士学位论文

是由实际系统中系统间、模块间的相互包含特性决定的。 2.树形结构设计及类封装

将多类型结点的模型树(模型层次图)数据结构定义为CModelTree类,将树结构的读写、查找查找等常用操作封装在该类中。并使该类继承于树形数据结构CRGTreeT类,利用CRGTreeT类简洁高效的树形结构关系,将各个树结点连接成一棵逻辑树。

如图2-10所示,CRGTreeT树结点数据的数据结构,其成员数据大致可以分为指针域和数据域。指针域用于存储表征树形结构数据结点间依赖关系,包含指向父结点、直接兄结点、直接弟结点、长子结点、小子结点的指针;数据域用于存储实际数据,包含直接子结点数、结点数据。除此,CRGTreeT类还是一个模板类,它的每个结点的数据域可以用于存放一个具体的数据或通用指向数据的指针。

pTIParentpTIPrevpTINextCRGTreeT树结点pTIChildFirstpTIChildLastnChildCountItemData数据结构依赖关系指针域子数统计结点数据数据域

图2-10 CRGTreeT树结点数据结构图

然后,以结点基类指针CBaseNode*作为树结点的数据,每个结点在树形结构中都只存储指向结点数据空间的指针。当要访问每个结点的数据时,通过树结点中存储的指针指向的数据前几个字节的结点类型标识变量type,进一步去区分所指向的结点对应的是上述几种结点类型中那一种结点类型,即可得到结点的数据。

多类型结点模型树数据结构CModelTree类的定义如下:

class CModelTree : public CRGTreeT //多类型结点模型树 {public:

BOOL DumpXmlFile(LPCTSTR lpFileName); BOOL InitByXmlFile(LPCTSTR lpFileName);

//将模型树数据写入XML文件 //从XML文件读出模型树数据

//遍历posParent的所有子结点,查找结点Id或页面Id与id对应的结点 POSITION FindAfter(int id, POSITION posParent = NULL, LPARAM lFlag = FIND_BY_ID);

16

第二章 软件结构总体设计

//遍历posParent的直接子结点,查找结点Id或页面Id与id对应的结点 POSITION Find(int id, POSITION posParent = NULL, LPARAM lFlag = FIND- _BY_ID);

//根据树结点id返回树结点指针

CBaseNode* GetNode(int id, POSITION posParent = NULL); private:

//导出指定结点及子集的数据,被DumpXmlFile()调用 void DumpTree(CMarkup* markup, POSITION posItem); //从XML文件初始化整个模型树

void InitTree(CMarkup* markup, POSITION posParent); //根据结点类型type构建不同类型的结点

POSITION InitNode(CMarkup* markup, POSITION posParent); „„ };

从CModelTree类的定义可以看出,模型的读写文件操作子函数DumpTree()、

InitTree()、InitNode()的形式参数中都包含有CMarkup*用于读写XML数据文件。

3.模型树的交互显示实现

模型树的交互显示,是基于MFC的CTreeCtrl树形显示控件来实现,以方便用户能够直接的查看建模过程中生成的模型层次结构。当用户每次编辑模型时,都更新模型树CModelTree的数据,且同时更新模型显示树控件CTreeCtrl的数据,使CTreeCtrl控件显示的数据和CModelTree实际的数据同步。某模型的模型树在软件中的显示效果如图2-11所示。

图2-11模型树显示控件CTreeCtrl的显示效果截图

2.3.2.2 故障-测试依赖矩阵的数据结构

故障-测试依赖矩阵(也称D矩阵)是可测性模型的数据抽象,是可视化建模模块的数据输出,是指标分析、诊断树生成模块的数据输入,在整个软件数据传输过程中起着相当关键的作用。在编程过程中,依赖矩阵所使用的数据结构设计

17

电子科技大学硕士学位论文

也显得至关重要。

根据故障-测试依赖矩阵的抽象定义[16],将依赖矩阵表征为五元组{S, P, T, C, D}之间的关系。其中:

S=[s0,s1,s2,…,sm]是系统故障状态的有限集合。其中,s0表示系统的无故障状态,si(1≤i≤m)分别表示系统的m个不同故障状态;

P=[p(s0), p(s1), …, p(sm)]T是系统各状态的先验概率(也称故障概率)集合; T=[t1, t2, …, tn]是n个可用的测试集;

C=[c1, c2, …, cn]T是测试代价向量集,由测试时间及其他经济因素决定; D=[dij]是由故障集和测试集的二元依赖关系得到[0,1]矩阵,其元素dij的值由故障模式传播有向图中故障-测试间的可达性决定,1代表故障si能够被测试tj检测到,0则代表si不能被tj检测到。其中,系统无故障状态s0对应的行dij(1≤j≤n)值始终为0。

根据依赖矩阵的数学模型,将其对应在程序中的数据结构定义部分如下:

class CDMData {public: };

int int int*

faultCnt; testCnt; pFaults; pTest;

pDMatrix;

//故障数,行数 //测试数,列数 //依赖矩阵 //故障集 //测试集

//依赖矩阵数据结构

CModNode* CFaultTest* „„

其中,faultCnt、testCnt分别表示依赖矩阵的故障数m、测试数n,pDMatrix表示依赖矩阵D,pFaults、pTest分别表示故障集S、测试集T。CModNode是模块结点类,对应故障,包含有模块名称、故障模式、故障概率等模块属性。CFaultTest是测试类,是测点结点类的成员类,包含有测试名称、测试成本等测试属性。

依赖矩阵的交互显示,是基于第三方组件CGridCtrl类数据表格显示控件实现的,以方便用户能够即时的了解模型中的故障-测试依赖关系。数据表格元素值由[0,1]二值组成,对于0、1分别以红绿两种颜色加以区分,还对值为1的单元格的字体加粗处理,以直观的将矩阵的依赖关系呈现给用户。其中表格中横向表示故障,纵向代表测试,表格的最后一列和最后一行分别为故障概率、测试成本。某模型的依赖矩阵显示窗口效果如图2-12所示。

18

第二章 软件结构总体设计

图2-12故障-测试依赖矩阵显示窗口

2.4 本章小结

本章先介绍了软件开发平台,再从软件整体结构设计的角度出发,将软件划分为系统级可视化建模、可测性指标分析、最优故障诊断树生成、可测性指标分配四个大功能模块。接着阐述了将各功能模块联合在一起的软件集成方案设计,及模型树、依赖矩阵等负责模块间数据传递的关键数据结构的设计。

在软件集成方式上,采用C++类数据抽象的方式来封装各功能模块,然后将各模块的数据对象添加到框架类CMainFrame类中,实现软件的集成和模块调用。该方法使得在模块的编程开发过程中,对语言的要求比较单一,模块间的调用和集成,也不需要其他平台或媒介的支持。从一定程度上降低了开发环境和集成环境的复杂度。

本章根据可测性模型数据对象的实际需求,设计了一种多类型结点的树形数据结构。多类型结点的树形数据结构是在传统单结点类型树的基础上,在树结点类型方面作了扩展设计的树形结构,使得在一颗树中允许存在多种类型的树结点。

19

电子科技大学硕士学位论文

第三章 可测性指标分析模块设计与实现

可测性指标分析模块是本软件重要的研究内容之一,可测性参数是对可测性特性的描述,可测性指标是可测性参数的量值。在用户建立完模型后,先通过建模模块对被测项目模型进行分析生成故障-测试依赖矩阵,再进一步将依赖矩阵作为指标分析模块的数据输入,生成可测性指标报告,以便用户直观的查看被测项目的可测性指标。

3.1 可测性性能指标介绍

可测性参数是对可测性特性的描述,可测性指标是可测性参数的量值。本文依据不同指标的要素及方法差异性,将可测性性能指标分成静态、动态两部分。

3.1.1 静态可测性指标

静态可测性指标是在被测系统的故障-测试[0,1]依赖矩阵中作统计分析或进行“或”运算产生的结果,由系统的故障测试依赖关系决定,不受故障概率等因素影响。其中包括故障检测率、故障隔离率、未检测故障集、故障模糊集、隐藏故障、掩盖故障、冗余测试[17]。各指标的具体定义及计算公式如下:

(1)故障检测率(FDR),是指在规定时间内,被测系统的故障能够由测试设备检测到的故障数与所有可能的故障总数的百分比。其数学模型为

式中

FDRmn100% (3-1)

m——故障-测试依赖矩阵的非零行数; n——故障-测试依赖矩阵的总行数。

注:式(3-1)中的故障-测试依赖矩阵是不包含系统无故障状态全零行的矩阵。 (2)故障隔离率(FIR),是指在规定时间内,被测系统检测到的故障能够由测试设备正确地隔离到规定等级和个数的故障数与检测到的故障总数的百分比。其数学模型为

FIRMN100% (3-2)

20

第三章 可测性指标分析模块设计与实现

式中 M——故障-测试依赖矩阵中,所有无重复行的行数; N——故障-测试依赖矩阵的总行数。

注:式(3-2)中的故障-测试依赖矩阵是含系统无故障状态全零行在内的矩阵。 (3)未检测故障集(Undetected Faults),是指整个系统的测点均不能检测出的故障。即被测系统的故障-测试依赖矩阵中,全0行所对应的故障集合。

(4)故障模糊集(Ambiguity Sets),是指系统现有的测试点不能将故障隔离到规定等级的故障集合。即被测系统的故障-测试依赖矩阵中,对应元素相同的所有行对应的故障集合。

(5)隐藏故障(Hidden Sets),当某个故障S1的故障特征全部被另一个故障S2的特征所隐藏则称S1为S2的隐藏故障。即找出某个故障的隐藏故障,也就是找出被测系统的故障-测试依赖矩阵中,该行与其他任意行“或”运算后的结果与该行相同的所有故障集合。

(6)掩盖故障(Masking Sets),当两个或多个故障的征兆的叠加与一个不相关元件的故障征兆相同时,就产生掩盖的虚警故障。找出某个故障的掩盖故障,就是找出被测系统的故障-测试依赖矩阵中,其他任意行“或”运算后的结果与该行相同的所有故障集合。

(7)冗余测试(Redundant Tests),故障检测能力相同的测试集合。即被测系统的故障-测试依赖矩阵中,对应元素相同的所有列对应的测试集合。

3.1.2 动态可测性指标

动态可测性指标的计算除了考虑被测系统的故障-测试[0,1]依赖矩阵,还要考虑故障概率、测试成本/时间等用户评估性辅助加权因素,所以这些指标具有一定的动态性。包含加权故障检测率、加权故障隔离率、平均模糊度(也称平均模糊组尺寸),最优测试代价等指标。其中,最优测试代价是最优故障测试序列的关键指标,将在下一章作重点介绍,本章不作讨论。

(1)加权故障检测率(Weighted FDR)的计算公式为

Dj1jFDRwn100%

ii1D——系统中可检测故障的故障率之和;

m (3-3)

式中

——可能发生故障的所有故障的故障率之和;

21

电子科技大学硕士学位论文

i——故障-测试依赖矩阵中,第i个非零行的故障率;

m——故障-测试依赖矩阵的非零行数; n——故障-测试依赖矩阵的总行数。

注:式(3-3)中的故障-测试依赖矩阵是不包含系统无故障状态全零行的矩阵。 (2)加权故障隔离率(Weighted FIR)的计算公式一:

Mkk1100%(10)Nii1M(1)k1k100%0N0ii1FDR100%时

FIRw

FDR100%时(3-4)

式中

0——系统OK系数(系统无故障状态的概率);

i——故障-测试依赖矩阵中,第i个无重复行对应的故障率;

M——故障-测试依赖矩阵中,无重复行的行数; N——故障-测试依赖矩阵的总行数。

注:式(3-4)中的故障-测试依赖矩阵是不包含系统无故障状态全零行的矩阵。 当将所有故障的故障概率归一化后,加权故障隔离率即为所有无重复行的概率和,其计算过程可以简化为公式二:

式中

FIRwMi i1(3-5)

i——故障-测试依赖矩阵中,第i个无重复行对应的故障率;

M——故障-测试依赖矩阵中,无重复行的总行数。

注:式(3-5)中的故障-测试依赖矩阵是含系统无故障状态全零行在内的矩阵。 (3)平均模糊度(Mean Ambiguity Size)

模糊度,也称模糊组尺寸,是反应故障模糊组模糊程度的一个指标。和FIR一样都是反应被测项目隔离能力的指标。但不同之处在于,模糊度只关注局部的隔离能力,而FIR反应的是整个系统的隔离能力,是全局性的指标。

当某模糊组的模糊度为1,则说明该模糊组包含只包含了一个故障,该故障是能够被唯一隔离出的,对于被测项目该故障是100%可隔离的,即该模糊组的隔离能力强。反之如果模糊组的模糊度很高,则说明其中包含了多个故障测试特征相

22

第三章 可测性指标分析模块设计与实现

同的故障,当其中某一故障发生故障时,无法再隔离定位到发生故障的故障,即该模糊组的隔离能力弱。

平均模糊度,是被测项目所有模糊组模糊度的综合值,且和故障的故障概率值有关。其数学模型为

式中

AmLkPk

k1S(3-6)

Lk——第k个模糊组的模糊度;

Pk——模糊度为Lk的所有模糊组的故障概率和;

S——模糊组数(含模糊度为1的模糊组)

其中,上述提到的故障概率为归一化后的概率值,且归一化时是预先将系统OK系数排出在外后,再对剩余的故障率进行归一,最后使归一化后的概率值加上系统OK系数的和等于1。在引用公式(3-6)时,所使用的故障-测试依赖矩阵是包含系统完好状态全0行的矩阵。

3.2 虚警率评估方法研究 3.2.1 虚警率基本概述

虚警率(False Alarm Rate,简称FAR),是指在规定时间内,发生的虚警次数与在同一时间内发生的虚警次数与真实故障显示次数总和的百分比。其中,虚警是指机内测试和外部测试设备检测显示出一个单元有故障,而实际上该单元没有故障的情况[4]。虚警率也属于一种可测性指标。

产生虚警的原因是多方面的,如BIT(Built in test,机内测试、内建测试)失效、设计缺陷、瞬变状态和间歇故障等。虚警将影响使用和维修,降低基本可靠性。减少虚警的措施有:延时报警、多次测试判定故障、“滤波”与表决方法以及人工智能的应用等。

“假报”,即BIT或其他监控电路指示某单元有故障,而实际上系统及设备内无任何故障。

“错报”,即系统中A单元发生了故障,却指示B有故障。

以上两种情况都属于虚警情况。而“应报不报”(即有故障而BIT或其他监控电路没有故障指示)不属于虚警范畴,它实际属于FDR的范畴。

23

电子科技大学硕士学位论文

虚警率的数学模型[4]可表示为

FARNFANFA100% NNFNFA(3-7)

式中

NFA——虚警次数; NF——真实故障指示次数;

N——指示(报警)总次数。

用于某些系统及设备的FAR分析及预计数学模型也可以表示为

FARFA100%

DFA(3-8)

式中 FA——虚警发生的频率,包括会导致虚警的BITE(内建测试装置)

的故障率和未防止的虚警事件的频率之和;

D——被检测到的故障的故障率总和。

国内研究虚警问题较晚,研究现状可以归纳如下:

(1)在可测性BIT技术要求中,只有故障检测率、隔离率和虚警率要求,没有错误隔离率要求。如何确认虚警,是否包括错报情况还尚待讨论和研究。

(2)在设计过程中,由于各种因素影响,设计者主要考虑的往往是产品的功能特性和进度,对虚警问题分析研究不够。

(3)尚未见到国内发表的关于BIT虚警问题的文章和研究报告,原因可能是国内还没有大量设计、使用BIT的经验,系统分析研究不够。有的产品虽然采取了一些减少虚警的措施,但也未见发表相关的技术资料。

3.2.2 基于依赖矩阵多测试信息的虚警率评估方法研究

虚警率太高不但直接影响BIT有效性,而且会对系统任务的完成以及对系统的可用性、维修和备件等产生不利影响。但在实际的评估验证中,都是通过对实验测试统计的方法来确定虚警率,具有指标后验性,这样对测试设备的精确度和测试人员熟练程度的要求很高,使得获取虚警率指标的成本太高,且可能会出现遗漏等不准确现象。

在此背景下,本文提出了“基于依赖矩阵多测试信息的虚警率评估方法”,该方法在依赖矩阵基础上,只需采用现有测试方法就能评估被测项目的虚警率,希望能为虚警率的评估提供一种新的思路。

24

第三章 可测性指标分析模块设计与实现

1.“基于依赖矩阵多测试信息的虚警率评估方法”

依据虚警(显示某单元有故障,而实际上又没有出现故障的情况)的定义,可以将发生虚警的情况理解为“故障判定矛盾”(简称故障冲突,即测试ti检测故障源S发生了故障,而同时测试tj却排出了故障源S发生故障),而判定故障是否真的存在,往往需要使用更加准确的测试来做实验统计。

“基于依赖矩阵多测试信息的虚警率评估方法”是基于被测项目的故障-测试依赖矩阵(可测性模型生成的故障-测试依赖矩阵)和现有测试条件,根据多个故障测试的通过或不通过状态判断发生故障冲突的个数,再用发生的故障冲突数除以可能发生的故障总数,进而评估被测项目的虚警率。 2.数学模型

“基于依赖矩阵多测试信息的虚警率评估方法”的数据模型可以抽象为四元组{S, T, D, TS}模型。该模型在传统故障-测试依赖矩阵五元组{S, P, T, C, D}模型基础上,去除故障概率和测试成本{P, C}因素,然后增加故障测试状态(未检测、未通过、通过)信息TS。

依据上述模型,假设依赖矩阵中,第i个测试“通过”,则假定矩阵中对应的列向量为VPi;而第j个测试“未通过”,则假定矩阵中对应的列向量为VFj。我们将向量VPi和VFj进行对应元素“与”运算后得到一个维数不变的向量V,元素值仍是由[0,1]值构成。向量V中值为1的元素个数Nv1就是由i和j两个测试推导出的故障冲突数。则虚警率的评估值FARe的数学模型可表示为

式中

FAReNv1100% N(3-9)

Nv1——根据测试通过状态得的故障冲突数,即向量V中1的个数;

N——所有可能发生故障的故障数。

当Nv1的值为1时,表示系统中只存在一个冲突的故障,即比较常见的单故障情况,所得的虚警率评估值FARe也就是一个确定值。当Nv1的值大于1时,表示系统中可能出现多个故障(含单故障模式),但是具体发生的故障数是未知的,所以得到的FARe是一个范围值估计值。

当依赖矩阵中存在有多个测试“通过”或“未通过”状态时,先将所有“通过”的列向量进行对应元素“或”运算得到VP,将所有“未通过”的列向量进行对应元素“与”运算得到VF。再将向量VP和VF进行“与”运算后得到向量V。最后再通过式(3-9)来估算虚警率值。

25

电子科技大学硕士学位论文

3.实例分析

下面以某被测项目为例,对上述模型进行讲解分析,依赖矩阵数据见表3-1。表中中的依赖矩阵,包含了1和2两个测试状态,测试状态分为三个状态,值为-1表示该测试“未检测”,为0表示测试“未通过”,为1表示测试“通过”。

表3-1 某被测项目含测试状态的依赖矩阵

故障\\测试

s1 s2 s3 s4 测试状态1 测试状态2

t1 1 0 1 0 0 0

t2 0 1 1 1 0 -1

t3 0 0 0 0 -1 -1

t4 1 0 1 1 1 1

t5 1 1 1 0 -1 0

对于测试状态1,其中包含了一个“通过”的测试t4和两个“未通过”的测试{t1, t2},对应的矩阵列向量为VP1、{VF1, VF2},其虚警率的评估步骤如下:

①首先将同状态向量合并,得“通过”的VP=VP1={1, 0, 1, 1};将VF1和VF2“与”运算得“未通过”的VF={0, 0, 1, 0};

②其次将不同状态向量“与”运算得VVPVF={0, 0, 1, 0};

③统计向量V中1的个数得1,故障总数得4,所以该测试状态下虚警率的评估值等于确定值25%。

同理,对于测试状态2,VP={1, 0, 1, 1},VF={1, 0, 1, 0};VVPVF={1, 0, 1, 0};由于向量V中包含了两个1,当系统发生故障时其故障原因可能是由单个故障源引起的,也可能是由两个故障源引起的,所以最终的虚警率评估值FARe应该是一个范围值25%~50%。

3.3 软件设计与实现

3.3.1 依赖矩阵预处理子模块设计与实现

计算可测性指标主要是考虑矩阵中的全0行或者无重复行,如果计算每个指标的时候都重复去分析遍历整个矩阵,会使得程序的运行效率很低。

所以本软件设计了一个依赖矩阵预处理子模块,在计算分析可测性指标之前,先对依赖矩阵进行预处理,产生动态模糊组、全0行(数),并按模糊度大小对这些模糊组进行排序,以方便后续的指标运算,提高软件效率。

26

第三章 可测性指标分析模块设计与实现

依据C++类的数据抽象和封装特性,将矩阵预处理模块封装在CAmbList类中,主要由数据关系、数据操作两部分组成。

从数据关系的角度看,CAmbList是一个单向二维链表结构。在链式存储中,每个存储结点不仅包含有元素本身的信息(称之为数据域),而且包含有元素之间逻辑关系的信息,即一个结点中包含有直接后续结点的地址信息(称之为指针域),这样可以通过一个结点的指针域方便地找到后续结点的位置[29]。一般地,每个结点有一个或多个这样的指针域。若一个结点中的某个指针域不需要指向其他任何结点,则将它的值置为空,用常量NULL表示。

如图3-1所示,图中的AmbNode、AmbHead、CAmbList,分别表示动态模糊组结点、头结点、链表结点,均是本子模块中使用到的结点关键数据结构。

数据域AmbNoderowIndexnext*指针域AmbHeadrowIndexsizecnt1nextAmb*nextRow*CAmbListrowCntcntSize1cntSizeXfirstAmb*图3-1 CAmbList中的结点数据结构

在单链表中,由于每个结点只包含有一个指向直接后续结点的指针,所以当访问过一个结点后,只能接着访问它的直接后续结点,而无法访问它的直接前驱结点。为了便于插入和删除算法的实现,每个链表带有一个头结点,并通过头结点的指针唯一标识链表。通过该指针所指的头结点出发,沿着结点的链(即指针域的值)可以访问到每个结点。逻辑上相邻的元素,其对应的存储位置是通过指针来链接的,因而每个结点的存储位置可以任意安排,不必要求相邻,所以当进行插入或删除操作时,只需修改相关结点的指针域即可,这样既方便又省时。

由于链表的每个结点带有指针域,从存储密度来讲,是不经济。存储密度是指结点数据本身所占的存储量和整个结点结构中所占的存储量之比。此特性也可以理解为链表的不利因素,但考虑到其带来的有利因素,其在本模块中这个缺点是可以忽略不计的。

如图3-2所示,将模糊组“重复行”结点链接,形成一个单链结构,用于存放依赖矩阵模糊组中重复行的行索引号。

27

电子科技大学硕士学位论文

模糊组头HeadnAmb*nRow*重复行结点1Node1next*重复行结点2Node2next*...重复行结点nNoden^0图3-2 模糊组单链表示意图

如图3-3所示,将上述3种类型的结点链接成一个单向二维链表结构,可以完成对依赖矩阵预处理所需的数据结构要求。本子模块采用的链表式结构,在对模糊组进行排序时,可以大大的提高排序效率。

链表头模糊组1模糊组2模糊组i模糊组i+1ListfAmb*Node1next*Node1next*Node1next*Node1^0Node2next*Node2Node2^0^0Node3^0Head1nAmb*nRow*Head2nAmb*nRow*HeadinAmb*nRow*Headi1^0nRow*图3-3 CAmbList单向二维链表结构示意图

CAmbList类相较前述的两个结构体,除了包含描述数据关系的成员数据变量,还包含了对依赖矩阵进行预处理的过程函数,CAmbList类的具体声明如下:

class CAmbList {public: };

int int int

rowCnt;

//矩阵的行数

//模糊组尺寸=1的行数 //模糊组尺寸≥2的模糊组数

//动态模糊组链表头,指向第一个模糊组

cntSize1; cntSizeX; firstAmb;

AmbHead* AmbHead*

pFullZeroAmb; //指向全零行的模糊组(没有占用新的空间)

//传入依赖矩阵,生成动态模糊组链表,并生成隐藏故障集、掩盖故障集 BOOL AmbList(int* pData,int row,int col);

//排序函数。bInc表示升序(默认)或降序,bByAmbSize表示是通过模糊组尺寸或对应行含1的个数cnt1排序。默认对动态模糊组链表按模糊组度进行升序排序 void Sort(BOOL bInc = TRUE,BOOL bByAmbSize = TRUE);

//显示AmbList()计算生成的动态模糊组结果,常在开发调试过程中使用 void DisplayAmbList(); „„

从数据操作的角度看,CAmbList类的矩阵预处理函数AmbList()的输入为故

障-测试依赖矩阵,通过矩阵预处理函数产生动态模糊组链表,及模糊组尺寸为1、大于1的模糊组数等用于静态、可测性指标分析的关键数据,避免反复遍历矩阵。

28

第三章 可测性指标分析模块设计与实现

除此,还提供了Sort()排序函数对动态模糊组进行排序,可以通过模糊度或对应行中含1的个数,分别进行升序或降序排序,方便后续的指标计算及结果显示。DisplayAmbList()函数是用来显示AmbList()生成的动态模糊组结果的调试用函数,以提高本软件子模块的可观性。

3.3.2 可测性性能指标分析实现

1.可测性性能指标分析(下简称指标分析)实现

在对原始的故障测试依赖矩阵通过矩阵预处理模块进行处理后,得到一个CAmbList类型的故障动态模糊组链表FaultAmblist,其中就包含了矩阵的全0行数、无重复行等信息,进而使用这些信息计算故障检测率、故障隔离率、未检测故障、平均模糊度、隐藏故障集、掩盖故障集等可测性性能指标。

接着对原始的故障测试依赖矩阵转置,然后再通过矩阵预处理模块进行处理,得到一个CAmbList类型的测试动态模糊组链表TestAmblist,通过该链表就可以直接得到依赖矩阵中所有重复的冗余测试。

如图3-4所示,为可测性性能指标的分析流程图,图中黑色框体突出的部分为最终求得的可测性性能指标。

开始依赖矩阵矩阵预处理矩阵转置故障动态模糊组链表FaultAmblist矩阵预处理全0行、重复行测试动态模糊组链表TestAmblist冗余测试故障检测率故障隔离率平均模糊度未检测故障掩盖故障集隐藏故障集结束

图3-4可测性性能指标分析流程图

29

电子科技大学硕士学位论文

2.指标分析模块在软件框架下的运行

从软件框架下运行指标分析模块时,会先调用建模模块,最后才分析、显示指标。软件框架下,用户通过点击菜单项“分析->指标分析”,弹出指标分析设置窗口设置隔离层次、系统OK系数、成本/时间加权值等指标分析参数。接着调用建模模块,根据隔离层次的参数设置分析可测性模型,生成依赖矩阵。然后,才进行矩阵预处理、分析指标、显示指标,完成指标分析模块的调用,如图3-5所示。

开始设置指标分析参数分析可测性模型依赖矩阵预处理计算静态、动态可测性指标显示可测性指标结束依赖矩阵

图3-5指标分析的软件框架下的运行流程图

其中,根据可测性模型的需要,分析可测性指标时需要预先设置一些分析参数,这些参数主要由隔离层次、系统OK系数、成本/时间加权值三部分组成。所以将指标分析参数设置窗口设计成对话框的形式,如图3-6所示。

图3-6指标分析参数设置窗口

30

第三章 可测性指标分析模块设计与实现

3.3.3 指标结果图形化显示设计与实现

为了以简洁、直观的方式显示结果,设计了指标显示组框、直方图组件,并最终生成完整的可测性指标报告。

从编程实现的角度看,这两个组件都采用了直接调用GDI(Graphics Device Interface)图形设备接口的绘图函数方式,一线、一框或一字符串独立绘制完成的。这样可以提高软件的独立性,减少对其它第三方组件的依赖;也可以降低程序和软件的体积;同时还方便后续开发的维护和升级。 1.指标显示组框

显示指标结果时,将不同类型的可测性指标分别置于不同的指标显示组框中,通过标题加以说明,并可以根据需要选择加方框以突出。在程序中定义部分如下:

class CReportDCNode {public: };

CString int

m_Head; m_Body;

//指标子模块名称 //指标项内容

CStringArray

//指标结果图形化显示组框

m_HeadFontHeight; //名称字体尺寸

//构造函数。输入要显示的指标子模块名称、指标项内容 CReportDCNode(LPCTSTR head,CStringArray* body=NULL)

//绘图函数。输入显示位置的左上角坐标,并指定bFrm选择边框类型 CRect Draw(CDC* dc, int left, int top, FRM_STYLE frmStyle = FS_NULL); „„

如图3-7所示,图中显示了无边框无内容、无边框、带内框、带外框的四种不同样式的指标显示组框。这些样式都是在调用绘图函数的时候,根据传入的边框类型决定的。

(a)无边框无内容的大标题

(b)无边框

(c)带内边框 (d)带外边框

图3-7四种不同样式的指标显示组框的效果截图

31

电子科技大学硕士学位论文

2.直方图组件

为了更好的以图形的方式显示较复杂的指标,还设计了直方图组件,用于显示故障动态模糊组尺寸组成,和显示故障诊断树的测试使用数比例构成。直方图组件在程序中定义如下:

class CHistogramCtrl {public:

struct CHistogramNode { }; };

void InitData(int* pNum,double* pPerc,int cnt,int greenCnt,int yelloCnt); void SetNames(LPCTSTR titleName, LPCTSTR xAxisName); RECT Draw(CDC* pDC, CPoint leftTopPos); „„

//绘制直方图组件

double int

RECT

//直方条 //纵轴百分值

//横轴模糊组尺寸或故障诊断的测试数 //绘制方框的位置 //颜色

percent; num; rc; clr;

COLORREF

直方图组件的纵坐标表示分布情况(百分数),横坐标表示模糊组尺寸或故障诊断的测试数。直方图中不同的矩形均以不同的颜色加以区分,红色代表很合理,黄色代表较合理,红色代表不怎么合理。如图3-8所示,为模糊组尺寸指标的直方图组件显示的效果截图。

图3-8直方图组件效果截图

3.指标结果图形化显示整体效果

指标分析结束后,将所有类型的指标结果通过这两个组件实例出各自的对象,根据不同的需要选择不同的显示位置将这些结果显示出来,最终生成完整的可测性指标报告。如图3-9所示,为指标分析结果报告的整体显示效果截图。

32

第三章 可测性指标分析模块设计与实现

图3-9指标分析结果报告的整体显示效果截图

3.3.4 虚警率评估实现

评估时需要的主要数据输入是故障-测试依赖矩阵和多测试通过状态信息。其中依赖矩阵是通过系统级可视化建模模块分析被测模型得来。这些依赖矩阵、故障等非必要信息则隐藏在后台数据对象中。

虚警率评估时,首先从建模模块获取当前模型的故障-测试依赖矩阵和所有测试的测试名称、测试说明,并获取之前保存的测试通过状态信息。进而先判断当前的测试状态是否是全通过、全未通过,如果“是”则说明当前不存在真假未明的故障,不存在虚惊,虚警率等于0%;如果“否”则根据“基于依赖矩阵多测试信息的虚警率评估方法”做进一步分析。

虚警率评估子模块的数据输出是每次更改测试信息后,根据对矩阵列向量进行“与”、“或”运算后得到的故障冲突数和故障总数的比值,评估虚警率的指标结果。该结果在单故障时是一个确定值,而在多故障时是一个范围估计值。虚警率评估流程图如图3-10所示。

33

电子科技大学硕士学位论文

开始依赖矩阵、测试说明所有未通过测试的对应列“与”得VF所有通过测试的对应列“或”得VP否通过集VF和未通过集VP“与”得VV中1的个数/故障数测试(未)通过状态测试全(未)通过是无虚警虚警率结束

图3-10虚警率评估流程图

虚警率的评估子模块是以对话框形式呈现的,交互显示界面独立、简洁、直观,以方便用户根据测试状态信息评估虚警率。在窗口界面上,针对性的以数据表格的方式显示了评估虚警率时用户关心的测试、测试说明、测试通过状态等信息。用户可以根据实际测试情况,输入相应的多测试通过状态信息数据,就可以即时评估虚警率。如图3-11所示,为虚警率评估的交互显示窗口。

图3-11虚警率评估的交互显示窗口

34

第三章 可测性指标分析模块设计与实现

3.4 本章小结

本章介绍了常见可测性指标(故障检测率、故障隔离率、未检测故障集、故障模糊集、隐藏故障、掩盖故障、冗余测试)的定义及计算方法。对动态性能指标(加权故障检测率、加权故障隔离率、平均模糊度)的计算方法做了一定的研究。并编程实现了这些指标的计算方法。

本章提出了一种“基于依赖矩阵多测试信息的虚警率评估方法”。该方法在依赖矩阵基础上,只需采用现有测试方法就能评估被测项目的虚警率,希望能为虚警率的评估提供一种新的思路,并编程实现了该方法。

本章设计和实现了一个依赖矩阵预处理子模块CAmbList类,以提升指标分析效率。在计算分析可测性指标之前,先对依赖矩阵进行预处理,获取动态模糊组、全0行(数)等矩阵信息,并按模糊度大小对这些模糊组进行排序,方便后续的指标运算,以避免指标分析时反复遍历依赖矩阵,提高了软件运行效率。

此外,还设计和实现了指标显示组框和直方图组件,用于直观的显示可测性指标报告。

35

电子科技大学硕士学位论文

第四章 最优故障诊断树模块设计与实现

故障诊断树是一种将形成系统故障的原因由总体至部分按树枝状逐级细化,并隔离出故障的分析方法,是用于隔离复杂系统故障的一种简单有效的方法。最优故障诊断树的生成和优化涉及到目标函数的确定、测试点的选取、生成算法等多方面的问题。生成最优诊断树所使用的搜索算法对诊断树结果有决定性的影响,根据项目要求,本软件使用AO*与或图启发式搜索算法来生成最优诊断树。

4.1 最优故障诊断搜索算法介绍

故障诊断树(也称测试序列,或诊断策略)是诊断故障时的测试先后序列集合。最优故障诊断树就是在不影响诊断、检测任务的前提下,使整体的测试代价(时间、费用)最小化的优化后测试序列。

求解最优故障诊断树,就是使用测试集T中的一系列测试,能够明确诊断出故障集S中任意故障的发生,并且使测试代价最小化。因为每一个测试都有测试代价,每一个故障都有自己的故障率,而求解最优测试矩阵又和测试代价和故障率密切相关。

4.1.1 AO*搜索算法简介

AO*(And/Or)算法是一种与或图启发式搜索算法,是一种有序的、最佳优先的搜索算法[16],它根据启发式估值函数h(x)扩展搜索图中的最有希望达到目标节点的节点x。

“或”节点表示待解故障状态集合S,“与”节点是应用于待解故障集S的测试。根节点是待隔离的故障状态集合S,它表示需要用测试序列去解决的问题;中间节点是故障模糊集,它需要用测试序列去解决的子问题;叶子节点是被最终隔离出来的故障,其模糊度为1,它表示问题最终被解决。

该算法主要重复两个步骤直到最终决策树生成:

第一步,根据当前最优的路径从上而下的执行遍历,选择未扩展节点中启发式评估函数h(x)值最小的节点,扩展该节点,并且把它添加到诊断树中。

第二步,根据实际情况(比如测试对故障的实际检测能力引起的测试代价修

36

第四章 最优故障诊断树模块设计与实现

正)自下而上修正已扩展节点的评估值HEF,并且回溯向上改变最初节点的HEF。

其中,评估值HEF是一个容易计算的最优测试代价的启发式评估函数h(x)值。启发函数h(x)的数学模型[27]如下:

w*(x)[p(xi)]1xixw*ip(xi)

xXi(4-1) (4-2)

h(x)w(x)j1cj[w*(x)w(x)]cw(x)1

式中 x ——待解故障集;

p(xi)——故障xi的故障概率;

w*(x)——故障集x的霍夫曼平均码长;

w(x)——w*(x)的整数部分;

w*i——状态si对应于S的霍夫曼编码的长度。

cj——当前可用测试按测试代价升序排序0≤c1≤c2≤…cj…≤cn后第j个测试的代价值;

其中,求解故障集x的霍夫曼平均码长(也称平均霍夫曼编码长度,或带权路径长度)w*(x),又和构造霍夫曼树[29]有关。

4.1.2 AO*搜索算法的实例分析

本节以实例分析的方式,对AO*算法的搜索过程进行简要的介绍,并选用算法原文献[27]中的某被测项目作为分析对象。该项目中包含了6个不同故障概率的故障{s0,s1,s2,s3,s4,s5},和 5个测试代价均为1的测试{t1,t2,t3,t4,t5},对应的故障-测试依赖矩阵如表4-1所示,这些数据均是算法的输入参数。

表4-1 某被测项目含故障率和测试代价的故障-测试依赖矩阵

故障\\测试

s0 s1 s2 s3 s4 s5 测试代价c(tj)

t1 0 0 0 1 1 1 1.0

t2 0 1 0 0 1 1 1.0

t3 0 0 1 0 0 1 1.0

37

t4 0 0 1 1 0 1 1.0

t5 0 1 0 1 0 0 1.0

故障率p(si)

0.70 0.01 0.02 0.10 0.05 0.12 —

电子科技大学硕士学位论文

其AO*算法生成最优测试序列的搜索过程的完全扩展图如图4-1所示。最开始的待测故障集S为{s0,s1,s2,s3,s4,s5},剩余可用的测试集为{t1,t2,t3,t4,t5},且5个测试对应的评估测试值为{1.18,1.18,1.22,1.18,1.26}。显然1.18为最小值,先选取其中的测试t1作为当前选中的测试,根据依赖矩阵中t1的检测特性,将故障集S展开为{s0,s1,s2}和{s3,s4,s5},以进一步扩展。经过一番自顶向下的展开后,又自底向上逐步修正,最后t1的修正后估计值值变为2.86,并非最小。故接着选取对应估计值最小1.18对应的t2展开,重复上述过程。图中黑线突出部分为最终生成的最优故障诊断树,其余部分为搜索中的中间子树过程。

S0 S1 S2 S3 S4 S5 (1.22)(1.18→2.86)(1.18)(1.18)(1.26)t3S0 S1S3 S4S2 S5S0S1 S2t1S3S4 S5S0S1 S4t4S2S3 S5S0S2 S3t2S1S4 S5S0 S2S4 S5t5S1S3t2t3t4t5t2t3t4t5t1t3t4t5t1t3t4t5S0S2S0S1S4S5S3S4S3S5S0S3S2S3S1S4t1t3t5t1t5S0S1S2S3S4S5 图4-1 某被测项目的AO*搜索完全扩展图

4.2 软件设计与实现 4.2.1 模块总体结构设计

考虑到模块的封装性、独立性及易扩展性,将最优故障诊断树生成模块封装设计在CDiagTree类中。并按功能属性划分,将本模块进一步划分为AO*算法实现、结果显示交互两个子模块。

38

第四章 最优故障诊断树模块设计与实现

本模块的组成结构及数据流向示意图如图4-2所示,模块中除了包括最优故障树搜索AO*算法实现子模块,和算法生成的最优诊断树结果显示交互子模块,还设计了供其他程序调用的接口部分。为了保障各子模块间内存数据的独立性,在各子模块中均设计了独立的内部缓冲区,子模块间的数据传递通过拷贝实现。

A0*最优诊断树生成模块接口依赖矩阵D内部输入测试数n拷贝缓冲故障概率P区测试成本C故障源数m或节点剩余测试树结点内部拷贝缓冲区GDI绘图事件响应处理启发函数h(x)诊断树图形化交互显示模块中间结点叶子结点AO*最优诊断树递归搜索AoSearch连接线提示框属性栏图4-2 最优诊断树模块组成结构及数据流向示意图

最优诊断树生成部分,该部分为本模块的核心算法实现部分,也是编程复杂度最高的部分。在将接口接收到的参数拷贝到内部缓冲区上后,将其大致分为待解故障集S和可用测试集T两部分。生成霍夫曼树,求取霍夫曼平均码长,评估测试代价h(x),进而用于后续的AO*全局最优搜索。

诊断树图形化交互显示部分,负责最优诊断树生成模块生成的最优故障诊断树的结果显示,和完成直观便捷的人机交互操作。是本模块与用户直接交互的关键部分,该部分的设计在后续章节将做详细的介绍。

模块接口部分,用于接收可测性模型五组元参数{S, P, T, C, D}的输入,其中D为待分析系统的故障-测试依赖矩阵(也称D矩阵),m为故障数(D矩阵的行数),n为测试数(D矩阵的列数),P为故障先验概率,C为测试成本。

本模块的主体类CDiagTree是继承至MFC的基本窗口类CWnd的,以方便事件响应处理及其他可测性软件的调用。除此,该诊断树控件的数据结构采用了组合的方式关联在一起,其中包含了两棵主体的树形成员对象——AO*最优故障诊断测试序列树和结果显示树,分别由CDiagTreeDisp类和CDiagTreeAO类进行实例,它们均继承至树形数据结构CRGTreeT类,如图4-3所示。

39

电子科技大学硕士学位论文

CDiagTreeCDiagTreeDisp继承CWnd继承CRGTreeT继承结果显示树CDiagTreeAO测试序列树

图4-3 诊断树模块CDiagTree类的关键成员组成及其类的继承关系

使用诊断树模块CDiagTree类时,只需要调用CDiagTreeAO类对象的上述接口函数,即可完成生成诊断树所需的{S, P, T, C, D}数据初始化,及实现AO*搜索算法和最优诊断树的生成。

4.2.2 霍夫曼平均码长求解实现

由于AO*启发式搜索算法是采用霍夫曼编码方式构造的启发式评估函数,以平均霍夫曼平均码长最为评估值,所以霍夫曼平均码长的求解实现是AO*算法实现的关键环节。

求解霍夫曼平均码长时,先构造霍夫曼树,再求取对应的霍夫曼平均码长。构造霍夫曼树时,先输入故障数n及n个故障对应的故障概率(其中霍夫曼树的每个结点对应一个故障,结点的权值对应故障概率),然后返回生成的霍夫曼树。再根据该霍夫曼树,进一步递归求解每一个叶子结点的带权路径长度,进而求解整棵霍夫曼树的霍夫曼平均码长。

霍夫曼树的具体构造方法设计如下:设待分析的故障集合为{s1,s2,,sn},各个故障发生故障的概率集合为{p1,p2,,pn},以故障s1,s2,,sn作为树的叶子结点,以故障概率p1,p2,,pn作为各根结点到每个叶子结点的权值。由于求解霍夫曼平均码长只考虑每个结点的权值(故障概率)和码长,所以将霍夫曼树结点在程序中的数据结构定义设计如下:

typedef struct {

double

HuffNode* HuffNode* HuffNode*

//霍夫曼树结点 //故障概率 //父结点 //左孩子结点 //右孩子结点

prob; parent; left; right;

} HuffNode;

霍夫曼树的构造步骤如下:

(1)把所有故障定义成霍夫曼树结点,并将这些结点添加到临时缓冲区中;

40

第四章 最优故障诊断树模块设计与实现

(2)将缓冲区中所有结点按故障概率进行降序排序;

(3)取缓冲区中故障概率最小的两个结点Nm1、Nm2组建子树Tc,并把这两

个结点从缓冲区移除,然后将新组建子树Tc的根结点添加到缓冲区中; (4)重复(2)(3)过程,直到缓冲区为空。霍夫曼树构造完成。

为了用直观的方式阐述构造霍夫曼树的实现过程,以某被测系统为例进行说明。该系统包含了6个故障{S1,S2,S3,S4,S5,S6},且其对应的故障概率分别为{0.45, 0.13,0.12,0.16,0.09,0.05},对应的数据如表4-2所示。

故障 故障概率

S1 0.45

表4-2某被测项目包含的故障及故障概率数据

S2 S3 S4 S5

0.13

0.12

0.16

0.09

S6 0.05

霍夫曼树的具体构造过程如图4-4所示。

(a)S1:0.45S4:0.16S2:0.13S5:0.09S6:0.5(d)S1:0.450.14(b)S1:0.45S4:0.160.14S2:0.13S6:0.50.25S3:0.12S3:0.12(c)S1:0.450.25S5:0.090.300.14S4:0.16S2:0.13S3:0.12S5:0.09S6:0.5S4:0.16S2:0.13S6:0.51.00S3:0.12S5:0.09(e)0.300.55S1:0.450.25(f)0.55S1:0.450.25S4:0.160.14S2:0.13S6:0.5S3:0.120.30S5:0.09S4:0.160.14S2:0.13S6:0.5S3:0.12S5:0.09图4-4 霍夫曼树构造过程实例图

考虑到程序的封装性,将霍夫曼树的构造、平均码长求解都封装在CHuffManTree类中。使用CHuffManTree类时,先调用霍夫曼构造函数CreateHuffManTree(),并传入待分析的故障集对应的故障概率集合作为参数,再调用平均码长求解函数GetMeanCodeLen()即可求取对应的霍夫曼平均码长。该类在程序中的定义如下:

41

电子科技大学硕士学位论文

class CHuffManTree {public:

HuffNode* CreateHuffManTree(double* pProb, int count); double GetMeanCodeLen(); HuffNode* m_pTree; „„ };

//构造霍夫曼树

//求解霍夫曼平均码长 //霍夫曼树

//构造霍夫曼树,求霍夫曼平均码长

double HuffManMeanWeightLen(HuffNode* pTree,int level=0); //求解带权路径长度

其中,霍夫曼平均码长求解函数GetMeanCodeLen()通过调用平均码长(带权路径长度)求解函数HuffManMeanWeightLen(),求取根结点的平均码长。求解平均码长的实现流程图如图4-5所示:

开始霍夫曼树根结点作当前结点当前结点不为空是左右子结点均不为空是深度加1否否平均码长=节点深度×故障概率平均码长= 0.0左子结点作当前节点右子结点作当前节点左右子结点的平均码长求和结束图4-5求解平均码长的实现流程图

除此,将霍夫曼树构造函数CreateHuffManTree()设计成公开权限,使得该类不仅可以用于求解霍夫曼平均码长,还可以供第三方程序调用,以单独构造霍夫曼树,具有一定的功能扩展性。

42

第四章 最优故障诊断树模块设计与实现

4.2.3 AO*算法实现

AO*算法实现部分,是最优诊断树生成的关键程序部分。其中包含了二叉树数据结构、AO*最优诊断树递归搜索过程等数据结构和操作过程。考虑到子模块的封装性、独立性,依据C++编程语言面向对象的编程思想,把AO*算法实现部分封装设计成CDiagTreeAO类。 1.诊断树结点数据结构设计

本文将诊断树结点设计成一个数据结构,并且定义为CDTreeNode类。对数据对象的数据抽象设计(建模方法)将直接影响算法的实现方式,进而决定算法实现程序的运行效率和性能。

由于每个故障和测试都有各自的属性数据,这些属性数据在程序中会占用比较多的内存空间,如果在程序运行时反复的复制这些数据,将浪费大量的CPU资源。为了减少程序运行时的资源开销,所以每个故障和测试都通过唯一的自然数(ID)值来进行标识。

将诊断树结点CDTreeNode类设计为除了包含最终诊断树结果包含的诊断属性,还包含了诊断树搜索过程中需要使用的中间变量,并且其中的每个故障和测试都通过占4字节的ID来标识。诊断树结点类的数据成员由待解故障集(故障ID集、故障数、故障概率和)、选中测试(测试ID、测试代价、测试成本、测试时间)、结点附属属性(是否模糊组、是否叶子结点、结点层次)三大部分组成,具体的成员组成结构如图4-6所示。

待解故障集选中测试pFaultIDsfaultCntprobSumselTestIDcosttimebLeaflevel故障ID集故障数故障概率和测试ID测试代价测试成本测试时间是否模糊组是否叶子结点节点层次costWeightedbAmbiguity结点属性

图4-6诊断树结点CDTreeNode类数据成员组成结构图

2.AO*递归搜索过程算法实现

AO*最优诊断树递归搜索是一个较复杂的过程。从搜索实现过程看,可以将

43

电子科技大学硕士学位论文

其分成测试代价向下启发式评估和实测代价向上修正两个阶段。从分析的数据对象看,又可以将其分成待解故障集和当前可用测试集(即除去已被直接父结点和所有祖父结点选中测试外的可用测试集合)。

AO*启发式搜索过程近似于一个递归过程,所以编程实现过程中也通过一个递归过程来实现。算法实现的具体执行步骤如下:

(1)构建一个CDTreeNode类型的诊断树结点,作为树的根结点。将被测项目的所有待解故障集S添加到根结点的待解故障集,并把测试集T添加到当前可用测试缓冲区,然后把根结点选作当前结点;

(2)判定当前结点的待解故障集S是否为空或已解决,判定当前可用测试集T是否为空。如果为空或已解决,则向下扩展搜索结束,直接跳至步骤(9);

(3)如果待解故障集S和当前可用测试集T均有效,则需进一步分解。对待解故障集S进行霍夫曼编码,求取霍夫曼平均码长;再根据式(4-1)、式(4-2)和当前可用测试集T中每个测试的测试代价,计算评估函数h(x)的启发式评估值HEF,进行测试代价评估;然后选择评估值最小的测试作选中测试TS;

(4)构建CDTreeNode类型的左右子结点。依据测试TS对应故障-测试依赖矩阵列中的元素值,构建诊断树的左右子结点,值为0表示和测试TS无关,即对应行的故障“通过测试”,添加到测试通过的故障子集Sp;值为1表示和测试TS有关,即对应行的故障“未通过测试”,添加到测试未通过的故障子集Sf;

(5)从当前可用测试缓冲区中移除父级结点已选中的测试TS;

(6)将左子结点选作当前结点,重复步骤(2)至(8),计算故障子集Sp的实际测试代价值;

(7)将右子结点选作当前结点,重复步骤(2)至(8),计算故障子集Sf的实际测试代价值;

(8)根据左右子结点的测试代价,计算当前结点的实际测试代价。如果实际测试代价大于步骤(3)的评估测试代价,则修正可用测试缓存区中选中测试TS对应的测试代价。重新选择可用测试缓存区中测试代价最小的测试做当前结点的选中测试TS;

(9)沿着诊断树结构向上回溯,用得到的实际测试代价修正之前向下扩展时估计的启发式评估测试代价;

(10)重复步骤(2)至(9),直到当前结点为根结点,并且选中测试TS对应的测试代价是所有可用测试中的最小值。最优故障诊断树生成完成。

AO*最优诊断树递归搜索流程图如图4-7所示。图中实线表示递归的向下实际

44

第四章 最优故障诊断树模块设计与实现

执行过程,虚线表示递归回退跳转过程。开始处的根结点数据是指被测项目的所有待解故障集S和可用测试集T;选中测试为当前故障集S结点在可用测试集T中选中的测试代价最小的“最优”测试;Ep和Ef分别表示故障集S在当前选中的最优测试进行故障隔离时通过和不通过的故障子集Sp和Sf实际测试代价值;HEF为测试代价的启发式评估值。

结束开始Y当前结点是根结点根结点作当前节点N根据得到的Ep,Ef计算实际测试代价ErS为空,或T为空,或已解决NNEr≠代价评估值HEFYS子集通过选中测试YN修正选中测试的测试代价ErY初始化左子结点故障集Sp及可用测试集t选择最佳测试,评估对应测试代价Ep左子结点代替当前结点,S=Sp,T=t初始化右子结点故障集Sf及可用测试集t选择最佳测试,评估对应测试代价Ef左子结点代替当前结点,S=Sf,T=tN代价最小测试不是选中测试Y选择代价最小的测试作选中测试图4-7AO*最优诊断树递归搜索流程图

搜索过程中,所有的待解故障集、可用测试都通过依赖矩阵传入时的先后ID号来标识,并分别存储在常规数据类int型的缓冲区中,并不考虑故障和测试的实际物理意义及名称等属性数据。其名称、描述等属性只是在结果显示时,再通过ID进行逆向映射即可。该方法避免了程序执行期间无意义的冗余信息操作处理,可以从一定程度上减少不必要的内存和CPU开销。

45

电子科技大学硕士学位论文

除此,AO*算法实现类CDiagTreeAO在编程实现过程中,严格采用了标准C++函数库,并没有调用MFC/ATL等与操作系统相关的第三方库,使得该算法实现部分的源代码与操作系统无关,所以一定程度上的增强了该部分源代码的移植性、重用性和后续扩展性。

4.2.4 诊断树的图形化交互显示设计与实现

诊断树显示、交互模块。显示绘制生成的最优诊断树结果,及处理人机交互时的操作事件。

1.图形化交互显示界面分析与设计

最优诊断树是一棵完全二叉树,一般情况下该树的深度会达到很深,且结点数量很多。具有n个叶子结点的完全二叉树的深度为树结点的个数为log2n1,2n-1。除此,最优故障诊断树还是一系列具有先后顺序的最优测试序列集合,它的每个结点均包含了用户在对被测项目进行故障检测隔离时所需的大量关键信息。所以本模块的图形化交互显示部分还具备如下几个关键特性:

(1)有限性,鉴于PC屏幕显示区域的有限性和树形结构广度、深度无限性的矛盾,所以每次在PC屏幕上显示的故障诊断树部分只能是整棵中的一小部分,并不能完整显示整棵树形结构。

(2)伸缩性,考虑到树结构包含的数据可能会很庞大(多层、多结点),所以该诊断树需要具备伸缩性,以方便用户快捷的定位到关心的树区段,并减小程序运行时的资源开销;

(3)信息全面性,除了显示整棵最优诊断的全局指标信息(如最优测试代价),还需显示每个测试结点的测试及包含的待隔离故障集属性。

(4)直观性,最优故障诊断树由测试、测试通过状态、待隔离故障模糊集、最终隔离故障模糊集组成,所以需要采用直观的图像元素加以区分。

(5)模块易扩展性,以方便于后续版本的升级开发或功能完善。

从界面组成角度看,将其分成树形结构显示交互部分、树结点属性显示两部分。其中,树形结构显示交互部分包含了由黑色大方框(待隔离故障模糊集)、圆圈(测试)、分支线(绿色代表测试通过,红色代表测试未通过,虚线表示诊断树还存在未完整显示的部分),绿色小方框(最终隔离故障模糊集或故障)。

从人机交互角度看,在鼠标选中诊断树结点时,则自动加粗该结点的外围线框,以突出显示,并将该结点的诊断属性数据更新到属性面板上。当鼠标选中树

46

第四章 最优故障诊断树模块设计与实现

的根结点时,则该结点的属性即为整棵最优故障诊断树的全局指标信息。当鼠标移入结点时,自动弹出提示框,显示详细的测试说明等信息。当双击结点(非顶端结点)时,自动将该结点置顶,并更新诊断树的显示部分,以方便显示子一级的诊断树,该操作对于显示诊断树的未完整显示的部分尤为有效。当双击顶端结点时,则恢复到前一次的顶端结点,并更新诊断树的显示部分。

诊断树的图形化交互显示界面的交互示意图如图4-8所示。图中左边的大方框部分为树形结构显示交互部分,右边的小方块为树结点属性显示部分。

PC屏幕显示区域 鼠标移入时弹出提示框 tS结点属性显示面板单击选中结点突出显示„„„„.....„costxtStSsstSstSsstSs 虚线表示含未完全显示子树双击展开

图4-8图形化交互显示界面交互示意图

2.编程实现

从编程层面上看,诊断树的图形化交互显示界面部分是在MFC框架基础上搭建的。其中,交互事件处理部分继承MFC基本窗口CWnd类的事件响应机制,绘图部分通过GDI最基本的图形化编程接口函数绘图实现。

人机交互操作事件处理部分利用CWnd自带的事件响应处理机制来实现。为了让诊断树的每个结点更好的响应鼠标操作事件,定义诊断树结点的交互显示类时,使该类继承于MFC基本窗口CWnd类。

图形化显示界面部分绘制是通过调用Windows系统自带的图形输出库GDI (Graphics Device Interface)的函数来实现的。图形绘制时,先根据当前要显示的诊断树部分计算各结点的显示位置,再绘制诊断树结点(包括圆圈、方框),最后再绘制结点间的连线。诊断树结果的显示界面的绘制实现步骤如下:

(1)先将需要显示在顶端的结点作为当前绘制结点,并且初始化当前显示层级为1,显示位置的横坐标为界面显示宽度的一半,纵坐标固定为80像素;

47

电子科技大学硕士学位论文

(2)再判定当前结点是否存在子结点,决定绘制结点的圆圈、方框和测试名等结点特征(包含待解故障集的诊断树结点),或绘制绿色小方框(包含已解故障集的诊断树结点);

(3)如果存在子结点,则层级level加1,将子结点作当前结点递归调用绘制函数;

(4)如果是左子结点,则向左绘制绿色连线和表征通过测试的”G”; (5)如果是右子结点,则向右绘制红色连线和表征未通过测试的”NG”; (6)当层级level大于能够显示的最大层数6时,判断当前结点是否还存在子结点,如果存在子结点,则绘制虚线标志诊断树还存在未显示的子树部分。

诊断树结果显示界面的图形化绘制流程图如图4-9所示。

开始初始化顶结点为当前结点,显示层级level为1否否否存在子结点是绘制当前结点的圆圈、方框和测试名否绘制绿色小方框子结点作当前节点,层级level加1否将结点间距armWid初始化为界面宽度的一半结点间距armWid减半、纵坐标+30将顶结点中心点的横纵坐标分别定为armWid,80level>1是level>6是存在子结点是绘制表征诊断树未完全显示的虚线左子结点是结点中兴位置的横坐标-armWid结束结点中兴位置的横坐标+armWid绘制绿色连线绘制红色连线

图4-9诊断树结果显示界面的图形化绘制流程图

在结点属性数据方面,为了使每个显示结点的属性数据和上一节生成的最优

48

第四章 最优故障诊断树模块设计与实现

故障诊断树结点的数据一致,在诊断树显示结点类中设计了一个指向最优故障诊断树结点数据的指针变量。

诊断树的图形化交互显示界面效果截图如图4-10所示。图中显示了7个待解故障集和8个已解故障集,总共显示了5个层级,小于能够显示的最大层数6,不存在未显示的诊断树部分。

图4-10诊断树的图形化交互显示界面效果截图

诊断树的结点属性显示面板,由被测项目的系统级故障诊断指标,和已选择查看的当前测试的故障诊断指标两部分组成。属性面板类继承于Codejock Software Inc公司开发的界面美化程序开发库Xtreme Toolkit Pro的CXTPPropertyGrid类。属性面板中的每一个属性项对应一个CXTPPropertyGridItem类型的对象,通过调用其成员函数AddChildItem()对每一项的属性名称、属性值进行简单设置。

诊断树的结点属性显示面板效果截图如图4-11所示。

(a)诊断树的系统级指标 (b)当前选中测试(树结点)的属性

图4-11诊断树的结点属性显示面板效果截图

49

电子科技大学硕士学位论文

当鼠标选中查看的诊断树结点时,在树结点的单击响应函数中调用面板属性更新函数,并传入选中结点的属性数据,就实现了属性数据“同步”显示。系统指标是整棵故障诊断树的总体属性,由被测项目的系统特性决定的,所以是系统指标固定显示的,每次只更新当前测试的属性。

在AO*最优诊断树生成模块对接收到的初始化数据进行递归搜索计算后,将生成的最优故障诊断树传递过来,本模块即可以直观的呈现出含有中间结点、叶子结点、分支线、提示框(显示树结点备注信息),及结点属性面板的树形控件,以方便用户进行故障诊断隔离。

由于诊断树交互显示部分和诊断树生成部分在编程实现上是互为独立的,需要对图形化显示效果进行升级或修正时,只需单独对此模块进行升级修改即可,对诊断树的算法实现部分无影响。

4.3 本章小结

本章对故障诊断树和AO*最优故障诊断树搜索算法作了简要介绍。重点阐述了最优故障诊断树生成模块的软件设计和编程实现,包括模块的组成结构设计,霍夫曼树的构造、霍夫曼平均码长的求取实现,AO*算法的编程实现,诊断树结果的图形化交互显示界面的设计和实现。

本章将最优故障诊断树模块封装在CDiagTree类中,该类的数据结构采用了组合的方式,将AO*最优故障诊断数据树、故障诊断结果显示树关联在一起,确保了数据和显示的独立和分离。

AO*算法的编程实现时,为了减少程序运行时的资源开销,将所有的待解故障集、可用测试都通过依赖矩阵传入时的先后ID号来标识,该方法避免了程序执行期间无意义的冗余信息操作处理,一定程度上减少了不必要的内存和CPU开销。

50

第五章 可测性指标分配模块设计与实现

第五章 可测性指标分配模块设计与实现

可测性指标分配是从整体到局部,由大到小的分解过程,使整体和部分协调一致。针对TEAMS软件不能进行可测性指标分配的不足,提出了在可测性软件中集成可测性指标分配功能模块。对指标分配建立了数学模型,并编程实现了比较实用的经验分配法和线性插值分配法,并根据指标分配的应用需求的数据特征设计了特定的数据结构和窗口化交互显示方式。

5.1 可测性指标分配简介 5.1.1 可测性指标分配概述

可测性分配是可测性设计中的重要工作内容[28]。从图5-1中可以看到,可测性设计过程分为要求与分配、初步设计、详细设计、验证与评估四个阶段。可测性分配在可测性设计中处于前端地位,后续工作(初步设计、详细设计、后期设计、验证与评估)必须按照分配的结果展开,使得最终产品满足可测性指标要求。指标要求和分配阶段是,确定系统可测性要求,并把这些要求分配到低层次产品。

要求与分配测试性要求测试性分配系统级系统•诊断方案•固有测试性设计初步设计 测试性模型•信息流图•相关性模型系统级•测量参数 与测试点•诊断策略•BIT模式与 测试方法•测试容差•防虚警措施详细设计系统级•故障判据•测试流程•BIT软硬件•兼容性•外部诊断 测试•BIT预计•测试性预计•测试性验证后期设计验证与评估LRU级LRU•诊断方案•固有测试性设计LRU级•测量参数 与测试点•诊断策略LRU级•故障判据•测试流程•技术改进•改进设计SRU级SRU•诊断方案•固有测试性设计SRU级•测量参数 与测试点•诊断策略SRU级•故障判据•测试流程•生产评价•使用评价图5-1 可测性指标分配在可测性设计中的地位

可测性指标分配是将要求的系统可测性和诊断指标逐级分配给子系统、设备、部件或组件,作为它们各自的可测性指标提供给设计人员,产品的设计必须满足

51

电子科技大学硕士学位论文

这些要求。分配是从整体到局部、由大到小的分解过程,使整体和部分协调一致。

需要进行分配的可测性指标主要是故障隔离率(FIR)、故障检测率(FDR)。其他可测性参数一般不用分配,如系统级的虚警率要求的范围大多数在1%~3%,分配给各组成部分的分配值也相差不多,所以可用系统级要求作为各组成部分的要求。故障检测与隔离时间是与使用和准备状态密切相关的,不需要进行分配。故障隔离时间是故障平均修复时间的组成部分,维修性分配中已考虑了,不需要再另行分配。

故障检测率、隔离率等可测性指标分配时也是受条件约束的。在可测性指标分配后,需要综合下一级子模块的指标值进行逆向拟合,验证分配的指标值是否合理,必须保证将各组成单元分配的指标Pi综合后得到的系统指标Ps不小于原本要求的系统指标Pr[4],其约束函数的数学模型表示为

式中

PiDii PsDi(5-1)

ii (5-2) (5-3)

PsiPiPr

Di——第i个单元的故障检测率;

i——第i个单元的故障率。

Pi——系统第i个组成单元被分配的可测性指标值;

Pr——系统可测性指标要求值;

Ps——根据各单元指标综合计算得到的系统可测性指标;

在进行可测性分配时,分配步骤大致如下:

(1)分配时应尽量考虑与系统和组成单元相关的各种因素,如故障率、故障

影响、平均修复时间(MTTR)和费用等特性和约束条件;

(2)根据系统要求指标Pr,选取合适的分配方法计算各组成单元的分配Pi,

且保证0Pi1;

(3)根据各单元的分配指标Pi综合得到系统指标拟合值Ps,且保证PsPr。

5.1.2 可测性指标分配方法介绍

1.经验分配法

经验分配法[4]是根据以往的工程经验或对系统各组成单元特性的了解,直接给

52

第五章 可测性指标分配模块设计与实现

予各单元分配值Pi。但是,各单元被给予的分配值Pi必须满足分配指标逆向拟合验证的要求,否则重新选择一组分配方案。根据经验能提供的分配方案可能有很多种,所以需要我们结合使用要求和系统构成特点,选择一种最合适的方案。 2.线性插值分配法

线性插值分配法[30]的主要步骤如下:

(1)根据指标分配的层级画出系统功能层次图;

(2)从可靠性分析结果中取得故障模式、影响和故障率数据;

(3)根据工程分析、专家经验和以前类似产品的经验,按照系统的构成情况和维修要求等确定系统的每个组成单元的加权系数ki,其中取值范围为1~10,i=1,2,„,5;

(4)确定影响系数Ci 式中

Ci=i(ki1+ki2+ki3+ki4+ki5)

(5-4)

kij——第i个组成单元的加权系数,其中j=1,2,„,5;

i——第i个组成单元的故障率。

其中,ki1表征故障率高低,ki2表征发生故障后对系统影响大小,ki3表征发生故障后的修复时间的多少,ki4表征实现故障检测与故障隔离的难易程度,ki5表征实现故障检测与故障隔离的成本高低。

(5)计算指标分配值Pi

PiPrPmaxPr(CiC)

CmaxC(5-5)

式中

Pi——第i个组成单元的分配指标值;

Pr——系统要求指标值,是各个组成单元分配指标Pi的平均值; Pmax——要求达到的最高指标;

Ci——第i个组成单元的影响系数; Cmax——最大影响系数;

C——平均影响系数。

比较两种方法知,经验分配法单纯的依靠人力经验进行分配;而线性插值分配法的计算简便,概念明确,分配时不会出现分配的可测性指标太小或大于1的不合理情况,不需要修正就能得出非常合理的结果,且不需要由人工经验加以修正,这样做减少了一些人为因素。两种分配方法的分析比较如下表5-1所示。

53

电子科技大学硕士学位论文 表5-1 两种可测性指标分配法比较

缺点

分配方法

优点 基于工程经验的积累更具针对性 能综合多因素且分配结果小于1

分配结果是 否会大于1

是 否

参数的主观 依赖程度 很大 小

其他 对人力要求太高 没有考虑上 下限判据值

经验法 线性插值法

线性插值法能够综合考虑多因素,使分配结果小于1,自动化智能最高。在采用这种自动分配方法后,如果仍觉得分配指标不够合理,可以再采用经验调整法对指标进行微调,以使指标结果更具针对性。同时发挥人力的能动性,充分利用设计人员以往的工程经验和对单元特性的了解的知识积累。

5.2 软件设计与实现

可测性指标分配是一个逐级向下,并反复修正的过程。对该模块的编程实现,重点体现在分配方法上,难点主要体现在复杂的人机交互设计上。本文采用的经验分配法、线性插值法是指标分配模块的理论支撑,显得尤为重要,但这两种方法在算法实现上均较容易实现,直接按定义或公式计算即可。比较复杂的是如何获取这些方法需要的参数输入,存储不同方法的分配值,和调用相互关联结点间的数据,难点主要体现在人机交互设计上,所以将可测性指标分配模块设计成易于操作和编程实现的窗口化的交互显示方式。

5.2.1 模块总体结构设计

1.指标分配模型设计

一般系统或子系统可从结构上划分为多个LRU(单机、设备或机组等),现场可更换单元又可以划分为多个SRU(部件、组合件插件板等)。

建立可测性分配模型框图如下,每个方框表示系统的一个子模块组成部分,其中包含有名称、编号,还有标明必要的特性数据(如已分配的可测性指标等)。根据系统功能层次图,我们可以将可测性指标逐级分配到指定的层级,由上而下进行分配。当知道低一级的可测性指标后,也可以按照功能层次图由下往上综合,预计出上一级的指标,实现分配指标值的拟合验证。可测性指标分配的分配模型如图5-2所示。

54

第五章 可测性指标分配模块设计与实现

指标分配系统拟合验证子系统1子系统2子系统3„LRU1LRU2„LRUi„LRUn整个分配过程是在一棵树形结构中完成的,子模块的上下级关系都是相对的,每个树结点均可以采用相同的数据类型。该树形数据结构就是前面第二章提到的模型树,结点集为该树中的所有模块类型结点。 2.指标分配结点数据结构设计

待分配的可测性指标故障检测率、隔离率,在指标分配树形结构中具有相似性,所以可以采用相同的数据结构,本文将其设计为CDistrNode结构体,以存储指标分配过程的中间值或最终值。

在第二章模型树数据结构中的扩展模块结点类CModNodeEx,就是为了实现指标分配功能而设计。该类继承于模块结点类CModNode,其除了具有模块结点的属性,还包含了可测性指标分配的属性(如已分配或预期的FDR、FIR指标值等数据,即通过CDistrNode结构体实例的待分配指标)。CModNodeEx类在程序中的定义部分代码如下:

class CModNodeEx : public CModNode {public: };

CDistrNode CDistrNode „„

fdr; fir;

//检测率 //隔离率 //扩展模块结点类

每个模块结点的待分配指标可测性指标都包含上下限值(上级指标要求值和实际能达到的指标上限值)、分配方法选择(线性插入法或经验分配法,及加权值设置)、分配验证值(上级分配值和逆向验证值)等分配参数。可测性分配指标及模块结点CDistrNode的数据组成如图5-3所示。

„SRU1SRU2„SRUj„SRUm图5-2可测性分配模型框图

55

电子科技大学硕士学位论文

上下限值检测率分配方法隔离率分配验证

图5-3可测性分配指标及模块结点CDistrNode数据成员组成

targetLimitupperLimitmethodsettingdistrValuecheckValue指标要求值指标上限值分配方法加权参数值分配值逆向验证值5.2.2 窗口化交互显示设计与实现

1.交互显示设计

指标分配模块的交互显示包含的数据元素虽不多,但数据间相互关联的逻辑关系却异常复杂,本文将该部分设计成模型层次图(模型树)模块选择、可测性指标选择、指标值显示三大功能区域。用户对系统模型进行可测性指标分配时的具体操作步骤如下:

(1)选择模型层次图中的待分配模块。有上述的指标分配模型知,进行指标分配时选取系统中的待分配模块是至关重要的,而系统模型层次图(模型树)是以对系统层次的建模为基础的。本软件的系统可视化建模模块就是实现此功能的,故该模型树从传递而来即可。

(2)选择要进行分配的可测性指标——故障检测率或故障隔离率。这两个指标在每一个系统组成模块中都是相互独立存在的。

(3)设置或修改指标的上下限值。在进行可测性指标分配时,指标分配的上下限值分配结果的重要判定和参考依据。其中上限值是有系统或模块特性决定的,而下限值则是在项目设计时上级要求达到的指标要求值。

(4)选择分配方法。分配方法的选取是至关重要的,本模块采用了经验法和线性插值法。不同的分配方法,分配结果也是不一样的。一般情况下,在初次进行指标分配的时候,推荐使用智能性较高的线性插值法,如果在后续分配过程中觉得该分配结果不理想,再用经验法进行微调修正。

(5)如果(4)中选择的是线性插值分配法,则弹出一个参数设置对话框,设置或修改线性插值的加权值。该对话框包含了一个数据表格,其中列出当前选中模块的所有下一集子模块,及相对应的故障率和加权参数。

(6)分配结果显示。在完成上述操作后,指标分配操作完成,用户可以在指

56

第五章 可测性指标分配模块设计与实现

标值显示区域直接查看分配结果;

(7)上一级模块指标拟合验证结果显示。在上一级指标分配参数显示区域看到上一级模块的指标拟合验证结果。

除了进行指标分配操作,该部分还得考虑用户在不同模块间切换时,对已有数据的回显查看。如果当前选中的模块存在以前设置或分配的数据,则直接回显在指标显示区域,以便查看或修正。指标分配模块的窗口化交互显示如图5-4所示。

及待模分块配选模择型树测试性指标选择(检测率、隔离率)加权值设置 ②③上下限值显示①④经验分配法线性插值法⑤⑥分配值显示⑦上一级指标分配参数显示

图5-4指标分配模块的窗口化交互显示示意图

2.窗口化交互显示编程实现

可测性指标分配模块的交互显示,都是通过易于操作和编程实现的对话框完成的。从窗口组成上看,分为指标分配交互显示主窗口、线性插值法的加权参数设置窗口,这两个窗口均继承于MFC的对话框CDialog类。

(1)指标分配交互显示主窗口主要实现分配模块选择、分配指标选择、分配方法选择,指标要求值、上下限值设定,和显示已分配值。指标分配交互显示主窗口在程序中的定义部分如下:

class CDistributionDlg : public CDialog {public:

CTreeCtrl

m_TreeCtrl;

//指标分配模型树 //父级模块结点 //当前模块结点 //指标分配方法 //指标类型 0|1, FDR|FIR

CModNodeEx* m_pParentNode; CModNodeEx* m_pModuleNode; int int

m_DistrMethod; m_TargetType;

//指标分配交互显示主窗口类

public:

void InitDlg(int targetType);

//初始化对话框 targetType=0|1, FDR|FIR

void MethodSelect(int method); //分配方法选择

void InitTreeCtrl(CTreeCtrl* pTreeCtrl, CModelTree* pModelTree, HTREEITEM hItem = NULL, POSITION pos = NULL);//初始化指标分配模型树

57

电子科技大学硕士学位论文

};

void ReCalcParent(); „„

//拟合分配值,验算父结点分配结果是否合理

(2)线性插值法的加权参数设置窗口主要实现线性插值法的加权参数设定,线性插值法指标自动分配,和分配结果列表显示。其中的数据表格显示编辑控件是CodeProject.com网站CGridCtrl类实例的一个表格对象。线性插值法的加权参数设置窗口在程序中的定义部分如下:

class CInterplationDlg : public CDialog//线性插值法的加权参数设置窗口类 {public: };

CGridCtrl CModelTree* POSITION DistrNode* int

m_GridCtrl; m_posParent;

//表格对象

//父结点在模型树中的位置

m_ModelTree; //指向模型树

CModNodeEx* m_pParentNode; //父结点

m_pParentDistr; //父结点指标

m_TargetType; //指标类型 0|1,FDR|FIR

public:

//线性插值法指标分配。target-要求的指标,targetMax-指标最大值,pCiBuf-影响系数Ci,count-待分配的子结点数,pResult-分配结果

void Distribute(double target, double targetMax, int* pCiBuf, int count, double* pResult);

//重新拟合分配值,验证分配结果

double ReCalc(double* pProbs, double* pPi, int count); void DrawInterplationGrid(int nRows,int nCols); //绘制表格 „„

指标分配进行指标分配的程序运行步骤如下:

(1)先选择待分配的模块结点,如果已进行指标分配,则在指标显示区域显示已选用的分配方法和对应的分配值;否则显示初始化的经验分配法和分配值0;

(2)判断当前选择的分配方法是经验分配法还是线性插值法,如果是经验分配法,则直接从指标分配主界面获取设定的经验分配值,作为当前结点的分配值;否则弹出线性插值法的加权参数设置窗口;

(3)在弹出线性插值法的加权参数设置窗口中,如果当前结点存在子结点,则显示所有直接子结点的加权参数和故障概率;用户可以根据实际项目中各子模块的重要性对相应子模块进行加权参数设置,并进行可测性指标重新分配;

(4)当点击线性插值法的加权参数设置窗口的确定按钮时,程序自动保存步骤(3)设置的加权参数,并将当前结点的指标要求值自动分配到所有直接子结点;

58

第五章 可测性指标分配模块设计与实现

否则不保存,并恢复原有的分配方法和分配值;

(5)在每一次指标分配后,都将结合当前结点同一级其他模块结点的分配指标值逆向拟合父结点的指标值,和父结点的指标要求值做对比,以验算指标分配结果是否合理。

指标分配运行流程如图5-5所示。指标分配交互显示窗口如图5-6所示。

开始选择要进行指标分配的模块结点显示结点初始值,或已选用的分配法和对应的分配值否弹出线性插值法的加权参数设置窗口显示所有直接子结点的加权参数和故障概率否经验分配法是直接从主界面获取经验分配值,作为当前结点的分配值点击确定按钮是将当前结点的指标要求值,自动分配到所有直接子结点恢复原有分配方法联合同一级其他模块的分配值逆向拟合父结点的验算值结束 图5-5指标分配运行流程图

(a)指标分配交互显示主窗口 (b)线性插值法加权参数设置窗口

图5-6指标分配交互显示窗口截图

59

电子科技大学硕士学位论文

5.3 本章小结

本章针对TEAMS软件不能进行可测性指标分配的不足,提出了在可测性软件中集成可测性指标分配功能模块。对可测性指标分配做了简要介绍,还介绍了经验法、线性插值法两种分配方法。编程实现了经验分配法和线性插值分配法,并根据指标分配的数据特征设计和实现了特定的数据结构和窗口化交互显示方式。

可测性指标分配是一个逐级向下,并反复修正的过程。对该模块的编程实现,重点体现在分配方法上,难点主要体现在复杂的人机交互设计上。本章通过易于操作和编程实现的交互显示方式——窗口化的交互显示方式,设计和实现了可测性指标分配模块。

60

第六章 软件测试与验证

第六章 软件测试与验证

6.1 测试验证实例简介

本章将文献[16, 31]的“反坦克导弹发动机系统”(下文简称发动机系统)作为分析实例,以完成本软件的测试验证工作。并以美国QSI公司的TEAMS 6.0软件作为参考,对比分析两款软件的功能。测试过程中,先使用本软件建立发动机系统的可测性模型,测试本软件的各功能模块和整体性能,再使用TEAMS 6.0建立其对应的发动机系统可测性模型,对比分析两款软件的可测性指标分析结果和功能。

“反坦克导弹发动机系统”的模块组成结构框图及测点位置如图6-1所示。图中,方框表示系统的组成模块(故障源),圆圈表示添加的测点,有向连线表示模块-测点间的依赖关系和故障传播方向。

combinedru3int1in1int2in2readinesstab_looru5summ_safpower_relaunch_tru1ru2ru7ru8ru4course_cru6inu1inu2图6-1 反坦克导弹发动机系统结构及测点位置框图

该系统包含了12个故障源(假设每个故障源对应一种故障)和9个测点(每个测点中只包含一个测试),对应的故障-测试依赖矩阵如表6-1所示。

在进行可测性指标分析前,先假定系统完好系数为10%(即系统有10%的可能性是无故障的,矩阵中SystemOK行所对应的故障概率值为0.1000)。同时假定成本加权系数为90.0%;时间加权系数10.0%;成本/时间比值为10.0。

61

电子科技大学硕士学位论文

表6-1 反坦克导弹发动机系统的故障-测试依赖矩阵

故障\\ 测试 SystemOK

in1 in2 inu1 inu2 ru3 ru1 ru2 ru4 ru6 ru5 ru7 ru8 测试成本

int1 int2 0 1 0 0 0 0 0 0 0 0 0 0 0 1.0

0 0 1 0 0 0 0 0 0 0 0 0 0 1.0

read- ines 0 1 0 0 0 0 1 0 0 0 0 0 0 2.2

comb- ined 0 1 1 0 0 1 1 0 0 0 0 0 0 1.3

cour- se_c 0 1 1 0 0 1 1 0 1 0 1 0 0 1.0

stab_loo 0 1 1 0 0 1 1 0 1 0 1 0 0 100000.0

summ- powe- _saf 0 1 1 0 0 1 1 1 0 0 0 0 0 1.5

r_re 0 1 1 0 0 1 1 0 1 1 1 0 0 0.9

laun- ch_t 0 1 1 1 1 1 1 1 1 1 1 1 1 2.0

故障概率 0.1000 0.0100 0.0010 0.0100 0.0100 0.0300 0.0105 0.0105 0.0010 0.0210 0.0015 0.0010 0.0110 -

6.2 指标分析模块测试验证

可测性指标分析模块是本软件的核心功能模块部分。该模块分析得到的关键性指标包含:

(1)静态可测性性能指标。故障检测率、故障隔离率、未检测故障集、故障

模糊集、隐藏故障、掩盖故障、冗余测试、未使用测试;

(2)动态可测性性能指标。加权故障检测率、加权故障隔离率、平均模糊度; (3)虚警率。

如图6-2、图6-3,和图6-4所示,分别为本软件的静态可测性指标报告、可测性指标报告,和TEAMS软件的可测性指标报告。对比发现,两款软件的各项可测性性能指标均一致,各指标的具体结果如下:

(1)故障检测率为100%,加权故障检测率为100%,故障隔离率73.57%,

加权故障隔离率为53.85%,平均模糊度为1.75; (2)未检测故障集、未使用测试均为空;

62

第六章 软件测试与验证

(3)冗余测试为{course_c,stab_loo};

(4)故障模糊集为{#1{ru4,ru5},#2{inu1,inu2,ru7,ru8}}; (5)隐藏故障/掩盖故障

{in1#{ru1,ru3,ru4,ru5,ru2,ru6,inu1,inu2,ru7,ru8}; in2#{ru3,ru4,ru5,ru2,ru6,inu1,inu2,ru7,ru8}; ru1#{ru3,ru4,ru5,ru2,ru6,inu1,inu2,ru7,ru8}; ru3#{ru4,ru5,ru2,ru6,inu1,inu2,ru7,ru8}; 模糊组{ru4,ru5}#{ru6,inu1,inu2,ru7,ru8}; ru2#{inu1,inu2,ru7,ru8}; ru6#{inu1,inu2,ru7,ru8}}。

稍有不同的是TEAMS软件的报告上没有未检测故障集、故障模糊集、隐藏故障、掩盖故障、冗余测试等指标,那是因为TEAMS只以文本文件的形式显示这些指标,而本软件除了以文本方式显示,还将其显示在静态指标报告上,以提高数据结果显示的直观性。

6.2.1 可测性性能指标

图6-2 本软件的静态可测性指标报告

根据第三章的定义知,隐藏故障集包含掩盖故障集,且两个故障集是往往是一致的,为了节约显示版面,所以将这两个指标进行合并显示。

63

电子科技大学硕士学位论文

图6-3本软件的可测性指标报告

可测性指标报告除了包含静态、动态可测性指标,和故障诊断树的关键指标,还显示了指标分析的设定参数(系统OK系数、分析的层次属性等),和模型统计信息(故障数,测点、测试数,层数等)。

两个报告右下角的直方图分别为模糊度、诊断树故障隔离使用测试数直方图。

图6-4 TEAMS软件的可测性指标报告

64

第六章 软件测试与验证

6.2.2 虚警率

图6-5所示是根据本文提出的“基于依赖矩阵多测试信息的虚警率评估方法”实现的虚警率评估人机交互显示界面。图中显示,用户完成了两个测试,且测试readines“通过”,测试course_c“未通过”,其余测试尚未检测。最终得到该测试状态下的虚警率评估值16.67%。

图6-5本软件的虚警率评估界面

对比发现,虚警率评估部分为本软件特有的功能模块,TEAMS软件无该功能。

6.3 最优故障诊断树模块测试验证

图6-6 本软件的最优故障诊断树模块

65

电子科技大学硕士学位论文

如图6-6、图6-7所示,分别为本软件和TEAMS两款软件生成的两棵诊断树,其中故障诊断树的关键指标:平均测试代价分别为6.13、5.14,平均测试成本分别为5.42、4.42,平均测试时间分别为1.26、1.16,TEAMS的指标值显得更优一些。

图6-7 TEAMS软件的最优故障诊断树模块

对比发现,在图形化交互显示方面,除了生成的树形结构一样外,本软件的结点属性显示采用了属性面板(窗口右侧)方式,改进了TEAMS软件属性显示窗口太小、不可调整等不足之处。

6.4 指标分配模块测试验证

(a)经验分配法 (b)线性插值法

图6-8 指标分配模块的窗口化交互显示界面

66

第六章 软件测试与验证

如图6-8所示为指标分配主界面,图中选中了系统级模块“Anti-Tank”,分配指标为故障检测率FDR,指标要求值为0.8,实际系统能达到的上限值为0.9。图(a)为使用“经验分配法”人工设定模块“Anti-Tank”分配值为0.84。图(b)为使用“线性插值法”自动将系统级模块“Anti-Tank”的要求指标0.8分配自动分配到各子模块,并逆向拟合验证得到模块“Anti-Tank”的预计指标为0.822。

如图6-9所示为线性插值法的加权参数设定界面,通过本交互界面完成各单元的加权参数设置。界面中,白色区域为参数设定区域,加权值的取值是介于1~10的整数值。在设定参数后,点击“重新分配”按钮即可重新进行指标分配。

图6-9 线性插值法加权参数设定界面

该模块也是本软件特有的可测性辅助设计功能,TEAMS软件则没有。

6.5 软件整体测试验证

软件整体集成测试是在模块测试基础上进行的,软件的整体测试主要是检验各功能模块集成到一起后,软件是否能够正常工作,和其他功能模块间的数据传递及模块切换操作是否稳定。

其中,系统级可视化建模模块是本软件的核心部分和数据来源,但该模块由其他同学协作设计与实现,不在本文的讨论范围之内,这里只做简单的截图说明。

而本软件的其他各功能模块,在本章的前面几节中已经测试验证过,且正常工作,本节不再重复说明。下面只对在整个软件期间起着关键作用的模型树和依赖矩阵进行测试验证,以确保后续功能模块能够正常工作。

67

电子科技大学硕士学位论文

如图6-10所示为采用本软件对“反坦克导弹发动机系统”进行建模得到的模型。图中,界面右下角显示的是与模型相对应的模型树形结构,该结构是贯穿软件各模块的关键数据结构;界面右上角是模块、测点属性快速查看面板。

图6-10 本软件的系统级可视化建模模块中的模型

如图6-11所示为本软件提供的依赖矩阵查看界面。依赖矩阵界面以数据表格的形式呈现,并以红、绿两色有区分的显示矩阵的[0,1],直观明了,也是本软件的特有功能,TEAMS软件则没有。

图6-11 本软件的依赖矩阵查看界面

故障-测试依赖矩阵由系统级可视化模块根据建立好的模型分析产生的,是指标分析及虚警率评估、最优故障诊断树等模块的数据输入。

68

第六章 软件测试与验证

如图6-12所示,为使用TEAMS软件对“反坦克导弹发动机系统”进行建模得到的模型。相比较本软件的建模模块而言,除了缺少属性快速查看面板外,并无太大差异。

图6-12 TEAMS软件中的模型

6.6 本章小结

本章以“反坦克导弹发动机系统”为测试验证实例,以美国QSI公司的TEAMS 6.0为参考,测试验证本软件的可测性指标分析结果的正确性,并对两款软件的功能进行对比分析。先使用本软件建立可测性模型,测试本软件的各功能模块和整体性能,再使用TEAMS 6.0建立其对应的可测性模型,对比分析两款软件的可测性指标分析结果和功能。

经过实例测试,发现本软件的各功能模块运行正常、性能良好;模块间切换、数据传递正常,软件整体进行良好;从模块到整体软件均达到了预期要求。

通过和TEAMS软件的指标对比验证,发现两款软件的各项可测性指标基本一致。除此,本软件还具有直接查看系统依赖矩阵、虚警率分析与可测性指标分配等特殊功能。

69

电子科技大学硕士学位论文

第七章 总结与展望

1.论文总结

针对国内缺乏系统的可测性设计指南、理论指导,和对可测性分析与辅助设计软件的需求,本文对可测性指标分析计算方法、AO*最优故障诊断树生成算法、指标分配方法展开了总结和研究。主要研究成果有:

(1)将系统级可视化建模、可测性指标分析、最优故障诊断树生成、可测性指标分配四个大功能模块集成为一个完整的可测性分析与辅助设计软件。在软件集成方式上,采用C++类数据抽象的方式来封装各功能模块,然后将各模块的数据对象添加到框架类CMainFrame类中,实现软件的集成和模块调用。

(2)根据可测性模型数据对象的实际需求,设计了一种多类型结点的树形数据结构。多类型结点的树形数据结构是在传统单结点类型树的基础上,在树结点类型方面作了扩展设计的树形结构,使得在一颗树中允许存在多种类型的树结点。

(3)实现了常见可测性指标(故障检测率、故障隔离率、未检测故障集、故障模糊集、隐藏故障、掩盖故障、冗余测试)和动态性能指标(故障检测率、加权故障隔离率、平均模糊度)的计算方法。

在指标分析模块,设计和实现了一个依赖矩阵预处理子模块CAmbList类,在计算分析可测性指标之前,先对依赖矩阵进行预处理,避免了指标分析时反复遍历依赖矩阵,提升了指标分析模块的软件运行效率。除此,还设计和实现了指标显示组框和直方图组件,用于直观的显示可测性指标报告。

(4)提出并编程实现了一种“基于依赖矩阵多测试信息的虚警率评估方法”,该方法在依赖矩阵基础上,只需采用现有测试方法就能评估被测项目的虚警率,希望能为虚警率的评估提供一种新的思路,并编程实现了该方法。

(5)实现了AO*最优故障诊断树搜索算法(包括构造霍夫曼树、霍夫曼平均码长求解)。将最优故障诊断树模块封装在CDiagTree类中,该类的数据结构采用了组合的方式,将AO*最优故障诊断数据树、故障诊断结果显示树关联在一起,确保了数据和显示的独立和分离。

AO*算法的编程实现时,为了减少程序运行时的资源开销,将所有的待解故障集、可用测试都通过依赖矩阵传入时的先后ID号来标识,该方法避免了程序执行期间无意义的冗余信息操作处理,一定程度上减少了不必要的内存和CPU开销。

70

第七章 总结与展望

(6)针对TEAMS软件不能进行可测性指标分配的不足,提出了在可测性软件中集成可测性指标分配功能模块。本文通过易于操作和编程实现的交互显示方式——窗口化的交互显示方式,设计和实现了可测性指标分配模块,解决了复杂的人机交互操作问题。

(7)对研制的可测性软件进行了测试验证。以“反坦克导弹发动机系统”为测试验证实例,通过和TEAMS 6.0对比验证,发现两款软件的各项可测性指标分析结果基本一致,另外本软件还具有直接查看系统依赖矩阵、虚警率分析与可测性指标分配等特殊功能。此外,本软件2010年通过了总装专家组的验收测试,而且本软件也在航天科工集团与中电集团相关单位进行了应用验证,得到了相关专家的肯定与表扬。 2.课题展望

系统级可测性研究是一个具有重要理论研究和工程应用价值的课题,随着电子系统集成度提高,对其可测性研究方法的精度和效率提出了更高的要求。本文虽在可测性软件工程应用方面取得了一定进展,但还有不足之处,以下的一些理论研究工作有待进一步开展:

(1)可测性模型建模方法研究;

(2)可测性指标分析结果的数据及报告显示形式多样性研究; (3)多目标最优故障诊断树生成算法研究;

(4)考虑上下限判据的智能化可测性指标分配方法研究。

71

电子科技大学硕士学位论文

致 谢

本研究课题及学位论文是在我的导师龙兵副教授的亲切关怀和悉心指导下完成的。他严肃的科学态度,严谨的治学精神,精益求精的工作作风,深深地感染和激励着我。从课题的选择到项目的最终完成,龙老师都始终给予我细心的指导和不懈的支持。两年多来,龙教授不仅在学业上给我以精心指导,同时还在思想、生活上给我以无微不至的关怀,在此谨向龙老师致以诚挚的谢意和崇高的敬意。

我还要感谢教研室的刘震老师,他严谨的治学精神、务实忘我的工作作风、宽以待人的处事态度让我受益匪浅。

研究生期间朝夕相处的同学也是宝贵的财富,特别感谢叶小杰、祝捷两位好友让我感受到了日积月累的真挚友情。感谢教研室的所有师兄弟妹、同学、朋友们,是你们的情谊和帮助,让我在举目无亲的成都感觉踏实温暖。

最后,我要感谢我的父母,感谢他们的养育之恩,感谢他们对我的一如既往的爱护、关心和支持。

感谢所有参考文献的作者们,他们在相关领域的研究成果对本文有很大的参考和启发价值。

杨兴霁

2011年5月于电子科技大学

72

参考文献

参考文献

[1] MIL-STD-470A. Maintenance management outline for system and devices. 1983. [2] 温熙森. 可测试性技术的现状与未来. 测控技术, 2000, 19(1):9-12.

[3] 王厚军. 可测性设计技术的回顾与发展综述. 中国科技论文在线, 2008, 3(1): 52-58. [4] 田仲, 石君友. 系统测试性设计分析与验证. 北京: 北京航空航天大学出版社, 2003. [5] MIL-STD-471A. Maintainability verification demonstration evaluation. 1978. [6] DOD-HDBK-791. Maintainability design techniques. 1988.

[7] MIL-STD-2165. Testability program for electronic systems and equipment. 1985. [8] MIL-STD-2165A. Testability program for systems and equipment. 1993.

[9] Pattipati K R, Raghavan V, Shakeri M, et al. TEAMS: Testability Engineering And

Maintenance System. American Control Conference, 1994, Vol.2:1989-1995.

[10] Gould E, Hartop D. Simulation-based techniques for calculating fault resolution and false

removal statistics. Proceedings of IEEE International Automatic Testing Conference, 2000, Vol.1: 465-480.

[11] 曾天翔. 电子设备测试性及诊断技术. 北京: 航空工业出版社, 1995. [12] 陈光禹. 可测性设计技术. 北京:电子工业出版社, 1997.

[13] LONG Bing, SONG zhengji, JIANG xingwei. On-line monitoring and diagnosis for

satellite telemetry data. Aircraft Engineering and Aerospace Technology, 2005, 77(1): 42-51.

[14] 龙兵, 王日新, 姜兴渭. 多信号模型航天器配电系统最优测试技术. 哈尔滨工业大学

学报, 2005.4: 440-443.

[15] 龙兵. 多信号建模与故障诊断方法及其在航天器中的应用研究:[博士学位论文]. 哈尔

滨: 哈尔滨工业大学. 2005.

[16] 蒋荣华. 基于粒子群算法的电子系统可测性研究:[博士学位论文]. 成都: 电子科技大

学. 2009.

[17] 王义琴. 基于多信号模型的电子系统可测性算法及软件设计:[硕士学位论文]. 成都:

电子科技大学. 2010.

[18] 杨智勇, 许化龙等. 基于多信号模型的故障诊断策略设计. 计算机测量与控制.

2006.14(12): 1616-1619.

73

电子科技大学硕士学位论文

[19] 杨鹏, 邱静等. 测试不可靠条件下的诊断策略优化方法. 仪器仪表学报, 2008.4:

850-854.

[20] 蒋荣华, 王厚军, 龙兵. 大型复杂系统故障隔离智能优化策略. 系统仿真学报. 2009. 2:

841-844.

[21] 李师贤, 蒋爱军等. C++ Primer中文版(第4版). 北京: 人民邮电出版社, 2006. [22] 孙鑫. VC++深入详解. 北京: 电子工业出版社, 2006.

[23] Deb S, Pattipati K R, Raghavan V, et al. Multi-signal flow graphs: a novel approach for

system testability analysis and fault diagnosis. Proceedings of IEEE International Automatic Testing Conference, 1994, Vol.1: 361-373.

[24] Pattipati K R, Raghavan V, Shakeri M, et al. TEAMS: Testability Engineering And

Maintenance System. American Control Conference, 1994, Vol.2: 1989-1995.

[25] Pattipati K R, Deb S, Dontamsetty M, et al. Start: system testability analysis and research

tool. Proceedings of IEEE Systems Readiness Technology Conference, 1990, Vol. 1: 395-402.

[26] Pattipati K R, Deb S, Dontamsetty M. Start: system testability analysis and research tool.

IEEE Aerospace and Electronic Systems Magazine, 6(1): 13-20.

[27] Pattipati K R, Alexandridis M G. Application of heuristic search and information theory to

sequential fault diagnosis. IEEE Transactions on Systems, Man and Cybernetics, 1990, 20(4): 872-887.

[28] GJB2547-95. 装备测试性大纲. 1995.10: l, 7.

[29] 李春葆, 尹为民等. 数据结构教程(第3版). 北京: 清华大学出版社, 2009.

[30] 陈万创. 新一代地空导弹武器系统可测性要求与指标分配. 测控技术. 1997. 16(6): 4-7. [31] Simpson W R, Sheppard J W. System test and diagnosis. Boston: Kluwer Academic

Publishers, 1994.

74

攻硕期间取得的研究成果

攻硕期间取得的研究成果

学术论文:

[1] 杨兴霁, 龙兵, 刘震. 基于AOstar算法的最优诊断树生成组件的设计与实

现. 电子元器件应用. 2011年6月.

参与项目:

[1] 2008年7月-2010年1月参与“基于GPIB的中射频模块自动测试系统软

件”项目,负责仪器程控驱动二次封装、虚拟界面封装;

[2] 2009年10月-2010年12月负责“系统可测性分析与辅助设计软件”项目,

负责总体设计、核心模块开发。

获奖情况:

[1] 2008年9月获电子科技大学研究生三等奖学金; [2] 2010年10月获电子科技大学研究生一等奖学金;

[3] 2010年4月获得电子科技大学第八届ACM(大学生程序设计竞赛)暨西

南地区高校邀请赛三等奖。

75

因篇幅问题不能全部显示,请点此查看更多更全内容