一种基于aadl模态蜕变关系的嵌入式软件测试方法

文档序号:6336493阅读:375来源:国知局
专利名称:一种基于aadl模态蜕变关系的嵌入式软件测试方法
技术领域
本发明涉及一种基于AADL模态蜕变关系的嵌入式软件测试方法,涉及软件测试 中的蜕变测试技术。
背景技术
随着计算机技术的发展,嵌入式系统在工业领域扮演着越来越重要的角色。早期 嵌入式软件的任务简单明确,同时软件的规模也比较小,因此在软件的设计和实现过程中, 关注的重点是如何有效地满足软件的功能及非功能性需求,基本不考虑软件工程中控制和 管理系统规模及复杂性的方法和技术。随着嵌入式软件系统复杂性不断扩大,早期的嵌入 式软件开发方法已不能够完全满足嵌入式软件设计需求,这对嵌入式软件开发中的设计合 理性、验证完备性,以及开发效率等方面都带来了挑战,迫切需要研究使用新的嵌入式软件 开发方法。目前,业界引入模型驱动结构方法(MDA-Model Driven Architecture),该方法是 由0MG(0bject Management Group)定义的软件开发框架。在MDA的开发方法中,软件开 发行为被提升到更高的级别一分析模型级,而针对特定计算平台的编码工作由机器自动完 成,这样就将业务逻辑与逻辑实现技术成功分离,使软件模型成为开发过程中的核心,从而 提高软件的可信性、缩短系统开发周期。另外,为了提高系统的开发效率,嵌入式软件也表 现出开发工具方面的集成化趋势,以及向构件复用方面发展的趋势。在开发工具方面,需要 把覆盖需求、设计、代码生成、验证等整个生命周期的工具集成起来,形成嵌入式软件开发 过程的生产线。同时,采用基于构件的复用技术开发方法,可以在不同产品之间复用软件模 块,有效降低开发和维护方面的成本。基于这个思想,由美国卡内基-梅隆大学开发,美国自动化协会SAE发布了航 空标准AS5506——架构分析与设计语 目(Architecture Analysis & Design Language, AADL)。AADL系统建模语言拥有对各种应用系统的强大描述能力,如描述系统行为的并发、 通信、时间和层次化结构以及设计约束等。AADL支持在非功能属性方面(如时间、吞吐量 和可靠性等)对嵌入式实时系统的软硬件体系进行早期和迭代分析。AADL采用了基于构 件的系统分析与设计技术,把构件分为应用软件、运行平台和系统三种类型。AADL通过构 件以及构件间的交互对系统架构进行描述与分析,不关心构件的具体实现,通过软件构件、 硬件构件和系统构件,对实时嵌入式系统以及高可靠性系统进行了描述与分析。同时,AADL 中定义了模态的概念——构件的模态是对包含构件,关联以及属性值的一个明确定义的配 置,是一个系统或者构件可选的操作状态。当为一个构件声明多个模态,一个模态迁移行为 声明标识了哪个事件引起模态切换和产生一个新模态,即不同的结构的一个变化。只有一 个模态被认为是当前模态,当前模态决定被认为是活动的线程集合,即准备响应分派,和可 行的传输数据和控制的关联。一个模态迁移是指从一个状态或条件到另一个的可能的运行 时通道,这样的迁移由事件触发。通过对系统的AADL模型进行分析和测试,可以在嵌入式 软件开发的早期发现问题,保证嵌入式软件的可靠性。
在嵌入式软件开发过程中,软件测试作为其中的重要组成部分,它在软件的整个 生命周期内持续发挥着作用,保证着软件功能属性和非功能属性(如可靠性、安全性等)要 求。由于AADL开发的软件是基于模型进行开发设计和分析的。在对应基于模型的嵌入式 软件测试中,常用的模型包括UML模型,有限状态机(FSM-Finite State Machine),状态 图(Statechart),马尔科夫链等。但这些模型对于基于AADL的模型测试的支持较少,另外 更值得注意的是在嵌入式软件测试过程中,由于构件实际运行环境的多样性和构件之间交 互的复杂性,往往出现程序执行结果不能提前预知,或者为了预知结果使用人工方法需要 花费较大代价的现象,这种程序的执行结果不能预知的现象在测试理论中称为“Oracle问 题”。而已有的构件化软件测试模型和方法是程序在特定测试用例下的运行结果和预期运 行结果比对来判断程序设计实现是否有错误,它导致测试人员只能选择一些可以预知结果 的简单测试用例进行测试,而不能完整有效地揭示程序存在的错误。需要有新的测试方法 来对AADL模型进行支持,并且能够解决测试过程中的“Oracle问题”。

发明内容
要解决的技术问题为了避免现有技术的不足之处,本发明提出一种基于AADL模态蜕变关系的嵌入 式软件测试方法,解决嵌入式软件测试过程中的“Oracle问题”,对AADL模型进行测试,保 证AADL模型的可靠性。本发明的思想在于基于AADL架构模型文件中的模态信息,构造模态迁移图,根 据改进的深度优先遍历算法将该图转换成蜕变测试需要的模态关系树。通过遍历该模态关 系树,构造出模态蜕变关系中的源测试用例,然后借助由AADL模型中的模态蜕变关系生成 后续测试用例,最后运行源测试用例和后续测试用例,验证模态蜕变关系,最后得出蜕变测 试的结论。技术方案一种基于AADL模态蜕变关系的嵌入式软件测试方法,其特征在于步骤如下步骤1 通过AADL设计工具对需要测试的AADL系统架构模型进行实例化操作,将 AADL文件转换为AAXL文件,从转换的AAXL文件中利用模态关键字进行识别得到系统模态 之间的迁移信息;步骤2 利用步骤1中得到的系统模态迁移信息和有限状态机的方式,将其构造 成模态迁移图MTD = (QM,E,b。,be,σ),其中,ΩΜ= {M。,M1. · · Mi, · · · Mj为模态状态空间, Mi为其中某模态;E = {ei;e2,. . . . . . en}为触发模态迁移的事件集合;b。为初始状态;札 为终结状态;σ为变迁函数,σ = ΩμΧΕ-> Ωμ;所述触发模态迁移的事件集合E包括可触发模态Mi迁移的事件集合与非可触发 模态Mi迁移的事件集合;所述可触发模态Mi迁移的事件集合为触发某模态Mi发生迁移的 事件^的集合;所述非可触发模态Mi迁移的事件集合为不能触发某模态Mi发生迁移的事 件h的集合。步骤3 将步骤2中的模态迁移图转换成蜕变测试需要的模态关系树,树的结点表 示AADL模型中的任一模态,父结点指向孩子结点的边表示触发父结点的模态迁移到孩子 结点模态的事件;
转换步骤如下步骤a:以模态迁移图中的初始状态顶点为模态关系树的根结点,作为当前访问 的顶点,并加以标记;步骤b 依次从当前访问的顶点的未标记的边或者邻接点出发,深度优先遍历模 态迁移图,遍历的过程中标记已访问的结点,标记进入该结点访问路径上的边;步骤c 当遍历的过程中遇到如下其中之一的情况时,返回父结点,转到步骤b继 续进行如下遍历A.遍历到初始状态顶点;B.遍历到终结状态顶点;C.遍历到的顶点,以该点出发的边及指向该点的边均已标记;步骤d 当模态迁移图中的所有结点和边均已标记,模态迁移图到模态关系树的 转换结束,形成模态关系树;步骤4 从步骤3中得到的模态关系树的根结点出发,深度优先遍历模态关系树, 将每条从根结点到叶子结点的路径信息作为一条记录,得到包括所有结点和边信息的路径 信息记录;当叶子结点为初始状态结点时将该条路径信息放入路径集合A中,否则放在路 径集合B中;步骤5 构造模态蜕变关系模态蜕变关系1 :f(M0, EJ = f(M0, Eoin)其中f为AADL系统模型,M0为系统的初始模态,Eoi为某最小自达状态事件集合,-^oi — ,.…, ,Αι, ■…,已"........,· · · ■ ? ^jj ),; ~‘ ‘~‘广,η为大于等于1任意正整数,表示了集合^顺序/7次执行的次数;如果模态蜕变关系1等式不成立,则该系统的AADL架构模型不可靠;模态蜕变关系2 :f(M0, Eti) = f (M0, Eti ‘)其中,Eti为非自达状态事件集合,Eti ‘是在事件集合Eti中插入任意数量的非可触 发当前模态迁移的事件后形成的事件集合;如果模态蜕变关系2等式不成立,则该系统的 AADL架构模型不可靠;所述正确事件集合包括自达状态事件集合和非自达状态事件集合;所述自达状态事件集合为可触发系统由初始模态返回到初始模态的一系列有 序事件的集合,它表示为Etji = (en, .... , ein),满足关系式MMtl, Eoi) = Mtl,其中f为AADL 系统模型,Mtl为系统的初始模态;若Etji中φ e…则该集合称为最小自达状 态事件集合;不同的该类型的集合组成最小自达状态事件集合的空间,表示为ωε= (E01, Eo2,· · · Eoi. · ·,Eon);所述非自达状态事件集合为可触发系统由初始模态迁移到非初始模态的一系列 有序事件的集合;步骤6 根据步骤4得到的路径信息,分别除去集合A和B中的每条路径信息记录 中的模态信息,得到集合A'和B',其中集合A'中的每个元素为最小自达状态事件集合, 集合B'中的每一个元素为非自达状态事件集合;集合A'和B'中的每个元素构成了模态 蜕变关系中的源测试用例;
步骤7 对每个最小自达状态事件集合Etji进行η次的扩展形成新的有序事件集 合,构成步骤5中模态蜕变关系1中的成为后续测试用例,η为大于等于1的任意正整 数;对非自达状态事件集合如Eti,由步骤4知Eti中每个事件前面位置上的模态,再根据步 骤2中的非可触发该模态迁移的事件集合,选取其中的任意事件,在该位置插入,构成步骤 5中模态蜕变关系2中的Eti'成为后续测试用例;步骤8 从AADL架构模型的初始模态出发,以步骤6中由最小自达状态事件集合 构成的源测试用例和对应的步骤7中的后续测试用例,判断步骤5中的模态蜕变关系1中 的等式是否成立;从架构模型的初始模态出发,以步骤6中的由非自达状态事件集合构成 的源测试用例和对应的步骤7中的后续测试用例,判断步骤5中的模态蜕变关系2中的等 式是否成立;;如果上述两组模态蜕变关系的等式均成立,说明AADL架构模型测试通过,否 则报错,说明模型设计中存在缺陷模型不可靠。有益效果本发明提出的基于AADL模态蜕变关系的嵌入式软件测试方法,适合用来对航空、 航天等大规模、复杂的嵌入式软件设计分析进行前期的验证工作,是对系统架构模型进行 正确性检验的方法,解决了嵌入式软件测试中存在的“Oracle问题”,方便用户在软件设计 的早期对嵌入式软件进行测试,在系统的架构级别保证软件的可靠性,如果模型架构不能 满足相应的要求,可以在开发的早期修改软件的架构,这样不仅节约了开发成本,同时也 可以缩短开发周期。


图1 本发明方法流程图;图2 本发明实施例中的系统模态迁移图;图3 系统模态关系树;图4 系统模态迁移图到关系树的转换流程具体实施例方式现结合实施例、附图对本发明作进一步描述该实例描述了一个飞行控制系统,系统有两个子构件分别为飞行状态处理进程 Modify和错误处理进程Err0r_Deal。该系统有5个系统模态,分别为初始模态化^化11狀、 飞行员控制模态Hum_Control_Mode、飞机自动控制模态Autopilot_Control_Mode、故障模 态Malfuction_Mode、待重置模态Wait_Mode。其中当系统接收来自hit_Done的事件,系 统由hitialize转换到Hum_Control_Mode,此时当接收来自BackJnit的事件系统会返 回 hitialize。系统由 Hum_Control_Mode 经进程 Modify 中的 Autopilot_Control_UP 端 口事件的触发会转换到Autopilot_Control_Mode,此时如果收到Hum_Control_UP端口事 件的触发返回Hum_Control_Mode。另外当系统由初始模态hitialize,接收到hit_error 事件的触发会转换到Malfuction_Mode,此时如果接收到错误处理进程Error_Deal中的 Repaired事件,会转换到Initialize,如果接收到Unr印aired事件,系统会转换到Wait_ Mode。下面为该系统的AADL架构模型代码
process Control—Modify—ProcessfeaturesHum—Control—UP:out event port ;Autopilot_Control_UP:out event port ;end Control—Modify—Process ;process Error—Deal—ProcessfeaturesRepaired:out event port ;Unrepaired:out event port ;end Error—Deal—Processsystem Flight—SystemfeaturesInit_Done:in event port ;Init—Error: in event port ;Back—Init:in event portend Flight_System ;system implementation Flight_System. ImplsubcomponentsModify:process Control—Modify—Process ;Error—Deal: process Error—Deal—ProcessmodesInitialize:initial mode ;Hum—Control—Mode:mode ;Autopilot_Control—Mode:mode ;Malfuction—Mode:mode ;Wait—Mode:mode ;Initialize-[Init_Done]->Hum_Control_Mode ;Initialize-[Init_Error]->Malfuction_Mode ;Hum_Control_Mode-[Back_Init]->InitializeHum_Control_Mode-[Modify. Autopilot_Control_UP]->Autopilot_Control_Mode ;Autopilot—Control—Mode-[Modify. Hum_Control_UP]->Hum—Control—Mode ;Malfuction—Mode-[Repaired]->Initialize ;Malfuction—Mode-[Unrepaired]->Wait—Mode ;end Flight_System. Generic ;按步骤1通过AADL设计工具对需要测试的AADL系统架构模型进行实例化操作,将AADL文件转换为AAXL文件,从转换的AAXL文件中利用模态关键字进行识别得到系统模 态之间的迁移信息,结果如下
Initialize-[Init_Done]->Hum_Control_Mode ;Initialize-[Init_Error]->Malfuction_Mode ;Hum_Control_Mode-[Back_Init]->InitializeHum_Control_Mode-[Modify. Autopilot_Control_UP]->Autopilot_Control_ Mode ;Autopilot_Control_Mode-[Modify. Hum_Contro1_UP]->Hum_Control_Mode ;Malfuction_Mode-[Repaired]->Initialize ;Malfuction_Mode-[Unrepaired]->ffait_Mode ;按步骤2将步骤1得到的系统模态信息,构造为模态迁移图,见图2。按步骤3将步骤2中构造的系统模态迁移图按照步骤3里的方法(方法的流程见 图4)转换成模态关系树,见图3。Il^ Initialize^ Hum_Control_Mode> Autopilot_Control_Mode> Malfuction_Mode> ffait_Mode ^ !] ^ M0 M M4, Init_Done、Back_Init> Modify. Autopilot_Control_UP>Modify. Hum_Control_UP> Init_Error>Repaired>Unrepaired 分另Ij 记作ei至e7。这些模态的可触发模态迁移的事件集合以及非可触发模态迁移的事件集合 见表1。按步骤4,深度优先遍历步骤3生成的模态关系树,得到相应的路径信息,其中得 到集合A的元素分别为(M0, e1; M1, e3, M2, e4, M1, e2, M0),(M0, e1; M1, e2, M0),(M0, e5, M3, e6, M0)。集合B 中的元素为(Mq,e5,M3, e7,M4)。按步骤5构造两个模态蜕变关系。模态蜕变关系1 :f(M0, EJ = f(M0, Eoin);模态蜕变关系2 :f(M0, Eti) = f(M0, Eti')。按步骤6,除去步骤4得到的集合A中的每条路径信息记录中的模态信息,得到集 合 A' = {Eol,E。2,E。3},其中 E01 = (ei,e3,e4,e2),Eo2 = (θι,θ2),Εο3 = (e5,e6)。A'中的每 个元素均为个最小自达状态事件集合,并作为测试中的源测试用例;除去步骤4得到的集 合B中的每条路径信息记录中的模态信息,得到集合B' = {Etl},其中Etl= (e5,e7),Etl为 非自达状态事件集合,并作为另外一组测试中的源测试用例。按步骤7构造后续的测试用例。针对步骤6中最小自达状态事件集合构成的源测试用例和步骤5中的模态蜕变关 系1,这里取η = 3时,对于Etjl = (ei,e3,e4,e2)的后续测试用例为Ε。/= (e1; e3,e4,e2,Θ3 j θ^. j 2 ? θ-^ j Θ3 j θ^. j 2 ),相应的 Ε。23 = (θι j 2 ? θ-^ j 2 ? θ-^ j 2 ),E033 = (e5 ,e6,e5,e6,e5,θ6/ °针对步骤6中非自达状态事件集合构成的源测试用例和步骤5中的模态蜕变关系 2构造后续测试用例。源测试用例Etl = (e5, e7),它是由步骤4中的路径记录(Mtl, e5, M3, e7,M4)生成的,因而可插入的事件位置有3处,即箭头所在的位置,如(丨i e5,丨2 e7丨3)。 根据步骤2中的非可触发相应模态的事件集合(见表1),在丨工处对应的模态为M0,可插入 事件集合{e2,e3, e4, e6, e7}中的任一事件,这里可取% ;丨2处对应的模态为M3,插入对应 的非可触发M3迁移的事件集合Ie1, e2, e3, e4, ej中的任一事件,这里取这里可取% ;个3 位置对应的是M4,因而可以插入事件集合E中的任一事件,这里取e4 ;最后可得一个后续测试用例为 Etl ‘ = (e3, e5, e2, e7, e4)。按照步骤8系统的初始模态为M0,分别运行根据步骤6生成的源测试用例和对应 的步骤7中的后续测试用例,验证模态蜕变关系是否保持。验证步骤5中的模态蜕变关系 1 :f(M0, E01) = f(M。,E013),f(M。,E02) = f(M。,Eo23),f(M。,Eo3) = f(M。,Eo33)是否成立;以及 验证步骤5中的模态蜕变关系2 :f (M。,Etl) = f (M0,Etl')是否成立;如果上述两组关系均 成立则AADL架构模型测试通过,否则说明系统架构模型存在缺陷,模型不可靠,需要改进。至此,方法已完成对系统架构模型的蜕变测试。表1系统模态对应的可触发模态迁移和非可触发模态迁移的事件集合
权利要求
1. 一种基于AADL模态蜕变关系的嵌入式软件测试方法,其特征在于步骤如下 步骤1 通过AADL设计工具对需要测试的AADL系统架构模型进行实例化操作,将AADL 文件转换为AAXL文件,从转换的AAXL文件中利用模态关键字进行识别得到系统模态之间 的迁移信息;步骤2 利用步骤1中得到的系统模态迁移信息和有限状态机的方式,将其构造成模态 迁移图MTD= (QM,E,b。,be,σ),其中,ΩΜ= {M0, M1. . . Mi, . . . Mj 为模态状态空间,Mi 为 其中某模态;E = Ie1, %,. . . . . . en}为触发模态迁移的事件集合;b。为初始状态屯为终 结状态;σ为变迁函数,σ = ΩμΧΕ-> Ωμ;所述触发模态迁移的事件集合E包括可触发模态Mi迁移的事件集合与非可触发模态 Mi迁移的事件集合;所述可触发模态Mi迁移的事件集合为触发某模态Mi发生迁移的事件ei 的集合;所述非可触发模态Mi迁移的事件集合为不能触发某模态Mi发生迁移的事件ej的皇A朱口 ο步骤3 将步骤2中的模态迁移图转换成蜕变测试需要的模态关系树,树的结点表示 AADL模型中的任一模态,父结点指向孩子结点的边表示触发父结点的模态迁移到孩子结点 模态的事件;转换步骤如下步骤a:以模态迁移图中的初始状态顶点为模态关系树的根结点,作为当前访问的顶 点,并加以标记;步骤b:依次从当前访问的顶点的未标记的边或者邻接点出发,深度优先遍历模态迁 移图,遍历的过程中标记已访问的结点,标记进入该结点访问路径上的边;步骤c 当遍历的过程中遇到如下其中之一的情况时,返回父结点,转到步骤b继续进 行如下遍历A.遍历到初始状态顶点;B.遍历到终结状态顶点;C.遍历到的顶点,以该点出发的边及指向该点的边均已标记;步骤d:当模态迁移图中的所有结点和边均已标记,模态迁移图到模态关系树的转换 结束,形成模态关系树;步骤4 从步骤3中得到的模态关系树的根结点出发,深度优先遍历模态关系树,将每 条从根结点到叶子结点的路径信息作为一条记录,得到包括所有结点和边信息的路径信息 记录;当叶子结点为初始状态结点时将该条路径信息放入路径集合A中,否则放在路径集 合B中;步骤5 构造模态蜕变关系 模态蜕变关系 1 :f(M0, Eoi) = f(M0, Eoin)其中f为AADL系统模型,M0为系统的初始模态,Eoi为某最小自达状态事件集合,
全文摘要
本发明涉及一种基于AADL模态蜕变关系的嵌入式软件测试方法,技术特征在于基于AADL架构模型文件中的模态信息,构造模态迁移图,根据改进的深度优先遍历算法将该图转换成蜕变测试需要的模态关系树。通过遍历该模态关系树,构造出模态蜕变关系中的源测试用例,然后借助由AADL模型中的模态蜕变关系生成后续测试用例,验证模态蜕变关系,得出蜕变测试的结论。解决了嵌入式软件测试中存在的“Oracle问题”,方便用户在软件设计的早期对嵌入式软件进行测试,在系统的架构级别保证软件的可靠性,如果模型架构不能满足相应的要求,可以在开发的早期修改软件的架构,这样不仅节约了开发成本,同时也可以缩短开发周期。
文档编号G06F11/36GK102053910SQ20101055427
公开日2011年5月11日 申请日期2010年11月18日 优先权日2010年11月18日
发明者周兴社, 孙博, 张凡, 董云卫, 路晓丽 申请人:西北工业大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1