基于代码跟踪的软件可靠性测试方法和装置转让专利
申请号 : CN202010265596.3
文献号 : CN111488276B
文献日 : 2021-07-27
发明人 : 张莉 , 刘泽伟 , 葛宁 , 张磊 , 田家豪
申请人 : 北京航空航天大学
摘要 :
权利要求 :
1.一种基于代码跟踪的软件可靠性测试方法,其特征在于,包括:对UML时序图和标号迁移系统LTS分别进行形式化描述;
进行可靠性策略模型到代码的跟踪以获得可靠性策略代码,其中,所述跟踪包括定位和映射;
基于所述可靠性策略代码插桩获得Log文件,其中,所述Log文件包括所述可靠性策略代码的执行路径信息;
基于所述Log文件构建代码LTS;
基于从软件系统整体设计模型中分离提取的可靠性策略切面模型,获取可靠性策略UML时序图模型的关键信息,以构建所述可靠性策略UML时序图模型,其中,所述可靠性策略切面模型为UML时序图的XMI文件;
将所述可靠性策略UML时序图模型转换为模型LTS,其中,基于转换原则将所述可靠性策略UML时序图模型转换为模型LTS,所述转换原则包括:所述模型LTS的初始状态标记为0;所述可靠性策略UML时序图中的一条消息对应于所述模型LTS中的一个状态迁移;当在同一执行环境下第一条信息和第二条信息在时间轴上相邻时,所述第一条信息转换后的模型LTS目的状态等价于所述第二条信息转换后的模型LTS起始状态;以及当组合片段的每个子片段的起始信息转换为所述模型LTS,增加一个过渡状态和一个过渡迁移动作,其中,所述过渡状态的名称与所述起始信息的发送端名称一致,所述过渡迁移动作的类型为当前组合片段的类型;
所述可靠性策略UML时序图模型包括ALT、OPT、LOOP和BREAK组合片段,其中,所述组合片段的转换规则还包括:所述组合片段结束时,增加一个过渡状态节点作为结束标志;所述ALT组合片段的转换原则还包括:先执行守卫条件为真的子片段;在所述ALT组合片段转换为所述LTS后,存在多个分支,分支数量与ALT组合片段中的子片段数量一致;所述OPT组合片段的转换原则还包括:当守卫条件为真时执行所述OPT组合片段,否则跳过所述OPT组合片段;在所述OPT组合片段转换为所述LTS后,存在两个分支;所述LOOP组合片段的转换原则还包括:当满足循环执行条件时,执行所述LOOP组合片段内的交互消息,否则结束循环;以及所述BREAK组合片段的转换原则还包括:当守卫条件为真时,执行所述BREAK组合片段内的交互消息;在所述BREAK组合片段转换为所述LTS时,存在两个分支;当所述BREAK组合片段属于另一组合片段时,执行完所述BREAK组合片段后,添加所述结束标志,然后执行所述另一组合片段,否则添加的结束标志作为全局结束状态节点;
提取所述代码LTS的分支路径作为代码路径,并提取所述模型LTS的所有分支路径作为模型路径;以及
判断所述模型路径与所述代码路径是否匹配。
2.根据权利要求1所述的软件可靠性测试方法,其特征在于,所述定位为在软件系统源代码中找到可靠性策略的实现代码;以及所述映射为基于可靠性策略模型,将所述可靠性策略模型中的元素映射到所述实现代码中。
3.根据权利要求1所述的软件可靠性测试方法,其特征在于,利用复合检测进行可靠性策略模型到代码的跟踪以获得可靠性策略代码,其中,所述复合检测为约束配置、信息检索、基于方法调用图的检测、以及人工检测的结合,其中,所述约束配置为配置以下约束:可靠性策略关键词、基于需求的软件系统模块名称、和软件系统源代码文件格式;
所述信息检索包括可靠性策略模型与代码信息的提取、检索匹配;以及所述方法调用图完整反映代码中各个类之间的方法调用关系以及描述代码的动态交互行为。
4.根据权利要求1所述的软件可靠性测试方法,其特征在于,基于所述可靠性策略代码插桩获得Log文件进一步包括:通过在所述可靠性策略代码的指定位置中插入代码片段作为探针,使得所述可靠性策略代码运行到所述指定位置时,通过执行所述代码片段来获得Log信息,其中,插桩规则包括:在所述跟踪的结果中,当根据名称直接匹配成功时,插入所述探针且将Tag标记为D;
当根据所述名称没有匹配成功但与标记为D的所述直接匹配存在直接或间接依赖关系时,插入探针;
当类根据名称直接匹配成功时,如果所述类的内部不存在标记为D的所述直接匹配,则在所述类的所有直接匹配中插入探针;以及在执行插桩的直接匹配的第一行和最后一行,插入探针。
5.根据权利要求1所述的软件可靠性测试方法,其特征在于,基于所述Log文件构建代码LTS包括:
从所述log文件中提取可靠性策略一次完整的执行逻辑信息作为所述log信息;以及基于构建规则构建所述代码LTS,其中,所述构建规则包括:所述log信息中的每条log信息用于构建所述代码LTS中的一个起始状态节点和一个状态转移;
所述log信息中的第一条log信息构建起始状态节点,并且所述log信息中的后续log信息构建的状态节点标记为顺序递增的数字;以及所述log信息中的最后一条log信息仅构建状态节点不构建状态转移。
6.根据权利要求1所述的软件可靠性测试方法,其特征在于,所述关键信息包括生命线、组合片段、和组合片段子片段。
7.根据权利要求1所述的软件可靠性测试方法,其特征在于,判断所述模型路径与所述代码路径是否匹配还包括设计一致性检测规则并根据所述一致性检测规则判断所述模型路径与所述代码路径是否匹配,其中,所述一致性检测规则包括:如果所述模型LTS中的一条交互消息对应于实现代码LTS中同一类的多个实现方法,当且仅当实现所述代码LTS的多个方法连续调用并且所述代码LTS与所述模型LTS的顺序一致时,满足一致性;
如果所述模型LTS中的一条交互消息对应于实现代码LTS中多类的多个实现方法,当且仅当所述多类的多个实现方法连续调用,并且所述代码LTS与所述模型LTS的顺序一致时,满足一致性;
如果所述模型LTS中的一条交互消息是自关联消息,则在所述代码LTS中有两种实现方式:调用同一类中的不同的另一方法和调用所述同一类中的同一方法;以及如果所述模型LTS中的一条交互消息的起始端的对象与接收端的对象不同,则当所述代码路径中起始节点的类映射的对象与所述模型路径中起始节点的对象保持相同时,保持一致性。
8.一种基于代码跟踪的软件可靠性测试装置,其特征在于,包括:形式化描述模块,用于对UML时序图和标号迁移系统LTS分别进行形式化描述;
跟踪模块,用于进行可靠性策略模型到代码的跟踪以获得可靠性策略代码,其中,所述跟踪包括定位和映射;
插桩模块,用于基于所述可靠性策略代码插桩获得Log文件,其中,所述Log文件包括所述可靠性策略代码的执行路径信息;
代码LTS构建模块,用于基于所述Log文件构建代码LTS;
提取模块,用于基于从软件系统整体设计模型中分离提取的可靠性策略切面模型,获取可靠性策略UML时序图模型的关键信息,以构建所述可靠性策略UML时序图模型,其中,所述可靠性策略切面模型为UML时序图的XMI文件;
模型LTS构建模块,用于将所述可靠性策略UML时序图模型转换为模型LTS,其中,基于转换原则将所述可靠性策略UML时序图模型转换为模型LTS,所述转换原则包括:所述模型LTS的初始状态标记为0;所述可靠性策略UML时序图中的一条消息对应于所述模型LTS中的一个状态迁移;当在同一执行环境下第一条信息和第二条信息在时间轴上相邻时,所述第一条信息转换后的模型LTS目的状态等价于所述第二条信息转换后的模型LTS起始状态;以及当组合片段的每个子片段的起始信息转换为所述模型LTS,增加一个过渡状态和一个过渡迁移动作,其中,所述过渡状态的名称与所述起始信息的发送端名称一致,所述过渡迁移动作的类型为当前组合片段的类型;
所述可靠性策略UML时序图模型包括ALT、OPT、LOOP和BREAK组合片段,其中,所述组合片段的转换规则还包括:所述组合片段结束时,增加一个过渡状态节点作为结束标志;所述ALT组合片段的转换原则还包括:先执行守卫条件为真的子片段;在所述ALT组合片段转换为所述LTS后,存在多个分支,分支数量与ALT组合片段中的子片段数量一致;所述OPT组合片段的转换原则还包括:当守卫条件为真时执行所述OPT组合片段,否则跳过所述OPT组合片段;在所述OPT组合片段转换为所述LTS后,存在两个分支;所述LOOP组合片段的转换原则还包括:当满足循环执行条件时,执行所述LOOP组合片段内的交互消息,否则结束循环;以及所述BREAK组合片段的转换原则还包括:当守卫条件为真时,执行所述BREAK组合片段内的交互消息;在所述BREAK组合片段转换为所述LTS时,存在两个分支;当所述BREAK组合片段属于另一组合片段时,执行完所述BREAK组合片段后,添加所述结束标志,然后执行所述另一组合片段,否则添加的结束标志作为全局结束状态节点;
提取模块,用于提取所述代码LTS的分支路径作为代码路径,并提取所述模型LTS的所有分支路径作为模型路径;以及
判断模块,用于判断所述模型路径与所述代码路径是否匹配。
说明书 :
基于代码跟踪的软件可靠性测试方法和装置
技术领域
背景技术
非功能需求的重要组成部分,可靠性需求描述了系统的可靠性约束。可靠性设计是针对可
靠性需求所拟定的决策并给出解决方案,是保障系统在遭遇故障时能够正常运行的机制。
于软件系统的开发过程并为开发人员提供了指导,但是开发人员在实现可靠性设计的同
时,也需要满足系统基本功能需求和其他非功能需求的设计;另外,系统代码版本更新、打
补丁等也会使得可靠性设计产生相应的变更,对可靠性设计的完整实现带来了隐患。测试
作为检查被测系统是否完整实现预期设计的有效手段,将辅助代码开发人员确认可靠性设
计实现的完整性。
盒测试方法,无法验证可靠性设计在代码中是否完整实现。因此,研究可靠性设计是否在代
码中得以实现是系统测试阶段亟待解决的关键问题之一。在软件系统开发周期中,需求与
系统设计模型处于相对早期的阶段。随着不断的迭代开发过程,代码修改、版本更新等可能
造成设计模型与代码实现不一致,从而造成后期系统高昂的开发、维护成本。目前已有研究
中,更多的是关注UML类图模型与代码类之间的静态信息的一致性。但对于可靠性策略,其
更多的关注模型元素之间的动态交互。因此纯静态信息的提取比较,不适合检测可靠性策
略的模型与代码的一致性。
发明内容
不适合检测可靠性策略的模型与代码的一致性的问题。
获得可靠性策略代码,其中,所述跟踪包括定位和映射;基于所述可靠性策略代码插桩获得
Log文件,其中,所述Log文件包括所述可靠性策略代码的执行路径信息;基于所述Log文件
构建代码LTS;基于从软件系统整体设计模型中分离提取的可靠性策略切面模型,获取可靠
性策略UML时序图模型的关键信息,以构建所述可靠性策略UML时序图模型,其中,所述可靠
性策略切面模型为UML时序图的XMI文件;将所述可靠性策略UML时序图模型转换为模型
LTS;提取所述代码LTS的分支路径作为代码路径,并提取所述模型LTS的所有分支路径作为
模型路径;以及判断所述模型路径与所述代码路径是否匹配。
计模型的逻辑与源代码中的实现逻辑分别转换为同一种中间模型来判断二者满足一致性,
弥补当前研究中对模型与代码动态一致性检测的缺失;该方法对可靠性策略模型与实现代
码进行动态一致性检测,符合可靠性策略对实现逻辑正确性的要求,提供了更加高效的检
测方法和更加准确的检测结果。
所述实现代码中。
以及人工检测的结合,其中,所述约束配置为配置以下约束:可靠性策略关键词、基于需求
的软件系统模块名称、和软件系统源代码文件格式;所述信息检索包括可靠性策略模型与
代码信息的提取、检索匹配;以及所述方法调用图完整反映代码中各个类之间的方法调用
关系以及描述代码的动态交互行为。
策略代码运行到所述指定位置时,通过执行所述代码片段来获得所述Log信息,其中,所述
插桩规则包括:在所述跟踪的结果中,当根据名称直接匹配成功时,插入所述探针且将Tag
标记为D;当根据所述名称没有匹配成功但与标记为D的所述直接匹配存在直接或间接依赖
关系时,插入探针;当类根据名称直接匹配成功时,如果所述类的内部不存在标记为D的所
述直接匹配,则在所述类的所有直接匹配中插入探针;以及在执行插桩的直接匹配的第一
行和最后一行,插入探针。
述代码LTS,其中,所述构建规则包括:所述log信息中的每条log信息用于构建所述代码LTS
中的一个起始状态节点和一个状态转移;所述log信息中的第一条log信息构建起始状态节
点,并且所述log信息中的后续log信息构建的状态节点标记为顺序递增的数字;以及所述
log信息中的最后一条log信息仅构建状态节点不构建状态转移。
序图中的一条消息对应于所述模型LTS中的一个状态迁移;当在同一执行环境下第一条信
息和第二条信息在时间轴上相邻时,所述第一条信息转换后的模型LTS目的状态等价于所
述第二条信息转换后的模型LTS起始状态;以及当组合片段的每个子片段的起始信息转换
为所述模型LTS,增加一个过渡状态和一个过渡迁移动作,其中,所述过渡状态的名称与所
述起始信息的发送端名称一致,所述过渡迁移动作的类型为当前组合片段的类型。
过渡状态节点作为结束标志;所述ALT组合片段的转换原则还包括:先执行守卫条件为真的
子片段;在所述ALT组合片段转换为所述LTS后,存在多个分支,分支数量与ALT组合片段中
的子片段数量一致;所述OPT组合片段的转换原则还包括:当守卫条件为真时执行所述OPT
组合片段,否则跳过所述OPT组合片段;在所述OPT组合片段转换为所述LTS后,存在两个分
支;所述LOOP组合片段的转换原则还包括:当满足循环执行条件时,执行所述LOOP组合片段
内的交互消息,否则结束循环;以及所述BREAK组合片段的转换原则还包括:当守卫条件为
真时,执行所述BREAK组合片段内的交互消息;在所述BREAK组合片段转换为所述LTS时,存
在两个分支;当所述BREAK组合片段属于另一组合片段时,执行完所述BREAK组合片段后,添
加所述结束标志,然后执行所述另一组合片段,否则添加的结束标志作为全局结束状态节
点。
匹配,其中,所述一致性检测规则包括:如果所述模型LTS中的一条交互消息对应于实现代
码LTS中同一类的多个实现方法,当且仅当实现所述代码LTS的多个方法连续调用并且所述
代码LTS与所述模型LTS的顺序一致时,满足一致性;如果所述模型LTS中的一条交互消息对
应于实现代码LTS中多类的多个实现方法,当且仅当所述多类的多个实现方法连续调用,并
且所述代码LTS与所述模型LTS的顺序一致时,满足一致性;如果所述模型LTS中的一条交互
消息是自关联消息,则在所述代码LTS中有两种实现方式:调用同一类中的不同的另一方法
和调用所述同一类中的同一方法;以及如果所述模型LTS中的一条交互消息的起始端的对
象与接收端的对象不同,则当所述代码路径中起始节点的类映射的对象与所述模型路径中
起始节点的对象保持相同时,保持一致性。
于进行可靠性策略模型到代码的跟踪以获得可靠性策略代码,其中,所述跟踪包括定位和
映射;插桩模块,用于基于所述可靠性策略代码插桩获得Log文件,其中,所述Log文件包括
所述可靠性策略代码的执行路径信息;代码LTS构建模块,用于基于所述Log文件构建代码
LTS;提取模块,用于基于从软件系统整体设计模型中分离提取的可靠性策略切面模型,获
取可靠性策略UML时序图模型的关键信息,以构建所述可靠性策略UML时序图模型,其中,所
述可靠性策略切面模型为UML时序图的XMI文件;模型LTS构建模块,用于将所述可靠性策略
UML时序图模型转换为模型LTS;提取模块,用于提取所述代码LTS的分支路径作为代码路
径,并提取所述模型LTS的所有分支路径作为模型路径;以及判断模块,用于判断所述模型
路径与所述代码路径是否匹配。
与代码动态一致性检测的缺失;
型进行判断;
以及
易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过说明书以及附图中所
特别指出的内容中来实现和获得。
附图说明
具体实施方式
移系统LTS分别进行形式化描述;在步骤S104,进行可靠性策略模型到代码的跟踪以获得可
靠性策略代码,其中,跟踪包括定位和映射;在步骤S106,基于可靠性策略代码插桩获得Log
文件,其中,Log文件包括可靠性策略代码的执行路径信息;在步骤S108,基于Log文件构建
代码LTS;在步骤S110中,基于从软件系统整体设计模型中分离提取的可靠性策略切面模
型,获取可靠性策略UML时序图模型的关键信息,以构建可靠性策略UML时序图模型,其中,
可靠性策略切面模型为UML时序图的XMI文件;在步骤S112中,将可靠性策略UML时序图模型
转换为模型LTS;在步骤S114中,提取代码LTS的分支路径作为代码路径,并提取模型LTS的
所有分支路径作为模型路径;以及在步骤S116中,判断模型路径与代码路径是否匹配。
与源代码中的实现逻辑分别转换为同一种中间模型来判断二者满足一致性,弥补当前研究
中对模型与代码动态一致性检测的缺失;该方法对可靠性策略模型与实现代码进行动态一
致性检测,符合可靠性策略对实现逻辑正确性的要求,提供了更加高效的检测方法和更加
准确的检测结果。
行形式化描述包括:将UML时序图描述为八元组:SD={Obj,M,E,→,CF,OP,o,c},其中,Obj
表示UML时序图中所有对象的集合;M表示UML时序图中所有消息的集合;E表示UML时序图中
所有事件的集合;→表示UML时序图的消息集合M上的一个全局排序关系;CF表示UML时序图
中所有组合片段的集合;OP表示UML时序图中所有隶属于组合片段的子片段的集合;O表示
从E到OP的一个函数关系;C表示从OP到CF的一个函数关系;以及将标号迁移系统LTS描述为
一个四元组:L={S,A,T,q0},其中,S表示标号迁移系统状态的有限非空集合;A表示标号迁
移系统行为活动标号的有限非空集合;T表示系统状态迁移的集合;q0表示标号迁移系统的
初始状态。UML时序图和标号迁移系统LTS的形式化描述能够指导后续需要从UML时序图模
型中提取哪些信息以及转换规则的制定。
代码中找到可靠性策略的实现代码;以及映射为基于可靠性策略模型,将可靠性策略模型
中的元素映射到实现代码中。利用复合检测进行可靠性策略模型到代码的跟踪以获得可靠
性策略代码,其中,复合检测为约束配置、信息检索、基于方法调用图的检测、以及人工检测
的结合,其中,约束配置为配置以下约束:可靠性策略关键词、基于需求的软件系统模块名
称、和软件系统源代码文件格式;信息检索包括可靠性策略模型与代码信息的提取、检索匹
配;以及方法调用图完整反映代码中各个类之间的方法调用关系以及描述代码的动态交互
行为。通过约束配置、信息检索、基于方法调用图的检测这三个步骤可以大大缩小查找范
围,在最后使用人工检测不仅能避免耗费大量人力和时间,还能够有效提高跟踪的准确率。
代码插桩获得Log文件进一步包括:通过在可靠性策略代码的指定位置中插入代码片段作
为探针,使得可靠性策略代码运行到指定位置时,通过执行代码片段来获得Log信息,其中,
插桩规则包括:在跟踪的结果中,当根据名称直接匹配成功时,插入探针且将Tag标记为D;
当根据名称没有匹配成功但与标记为D的直接匹配存在直接或间接依赖关系时,插入探针;
当类根据名称直接匹配成功时,如果类的内部不存在标记为D的直接匹配,则在类的所有直
接匹配中插入探针;以及在执行插桩的直接匹配的第一行和最后一行,插入探针。
信息作为log信息;以及基于构建规则构建代码LTS,其中,构建规则包括:log信息中的每条
log信息用于构建代码LTS中的一个起始状态节点和一个状态转移;log信息中的第一条log
信息构建起始状态节点,并且log信息中的后续log信息构建的状态节点标记为顺序递增的
数字;以及log信息中的最后一条log信息仅构建状态节点不构建状态转移。通过该构建规
则,能够获得可靠性策略执行路径的代码LTS。
息,以构建可靠性策略UML时序图模型,其中,可靠性策略切面模型为UML时序图模型的XMI
文件。具体地,关键信息包括生命线、组合片段、和组合片段子片段。
以需要定义转换规则。基于转换原则将可靠性策略UML时序图模型转换为模型LTS,其中,该
转换原则包括:模型LTS的初始状态标记为0;可靠性策略UML时序图中的一条消息对应于模
型LTS中的一个状态迁移;当在同一执行环境下第一条信息和第二条信息在时间轴上相邻
时,第一条信息转换后的模型LTS目的状态等价于第二条信息转换后的模型LTS起始状态;
以及当组合片段的每个子片段的起始信息转换为模型LTS,增加一个过渡状态和一个过渡
迁移动作,其中,过渡状态的名称与起始信息的发送端名称一致,过渡迁移动作的类型为当
前组合片段的类型。
组合片段的转换规则还包括:组合片段结束时,增加一个过渡状态节点作为结束标志;ALT
组合片段的转换原则还包括:先执行守卫条件为真的子片段;在ALT组合片段转换为LTS后,
存在多个分支,分支数量与ALT组合片段中的子片段数量一致;OPT组合片段的转换原则还
包括:当守卫条件为真时执行OPT组合片段,否则跳过OPT组合片段;在OPT组合片段转换为
LTS后,存在两个分支;LOOP组合片段的转换原则还包括:当满足循环执行条件时,执行LOOP
组合片段内的交互消息,否则结束循环;以及BREAK组合片段的转换原则还包括:当守卫条
件为真时,执行BREAK组合片段内的交互消息;在BREAK组合片段转换为LTS时,存在两个分
支;当BREAK组合片段属于另一组合片段时,执行完BREAK组合片段后,添加结束标志,然后
执行另一组合片段,否则添加的结束标志作为全局结束状态节点。
致性检测规则判断模型路径与代码路径是否匹配。模型LTS与代码LTS之间的一一对应关系
几乎不存在,基本上是一对多的对应关系,因此,需要定义一致性检测规则。一致性检测规
则包括:如果模型LTS中的一条交互消息对应于实现代码LTS中同一类的多个实现方法,当
且仅当实现代码LTS的多个方法连续调用并且代码LTS与模型LTS的顺序一致时,满足一致
性;如果模型LTS中的一条交互消息对应于实现代码LTS中多类的多个实现方法,当且仅当
多类的多个实现方法连续调用,并且代码LTS与模型LTS的顺序一致时,满足一致性;如果模
型LTS中的一条交互消息是自关联消息,则在代码LTS中有两种实现方式:调用同一类中的
不同的另一方法和调用同一类中的同一方法;以及如果模型LTS中的一条交互消息的起始
端的对象与接收端的对象不同,则当代码路径中起始节点的类映射的对象与模型路径中起
始节点的对象保持相同时,保持一致性。
给出解决方案。由于开发人员在系统实现过程中可能没有完全按照设计模型进行实现,或
者后期代码升级维护过程中产生代码变更,破坏了可靠性策略的实现。因此我们需要检测
系统代码中的可靠性策略是否按照设计模型进行了正确实现。图2给出了本发明代码中可
靠性策略跟踪确认方法的整体流程。在图2中的可靠性策略切面模型(UML时序图)是基于系
统总体架构模型、系统可靠性需求、可靠性策略库等得到的,默认是已存在的文档。因此我
们要首先定义UML时序图与LTS模型的形式化定义,从UML模型的描述文件中提取关键信息。
同时定义UML时序图到LTS模型的转换规则,基于该规则实现转换算法,完成可靠性策略UML
时序图模型到LTS模型的转换;然后为了在系统源代码中找到可靠性策略的相关实现代码,
提出了复合检测方法。通过结合约束配置、信息检索、基于方法调用图(Call Graph)的检测
以及人工检测四种方法,完成可靠性策略设计模型到代码的跟踪。再定义代码插桩规则,完
成可靠性策略实现代码的“源代码插桩”,运行并得到可靠性策略实现代码的执行路径Log
信息。通过设计实现相关算法,利用Log构建可靠性策略代码执行路径的LTS模型;最后,分
别从获取的可靠性策略UML时序图转换得到的LTS模型与可靠性策略实现代码执行路径构
建的LTS模型中提取分支路径,定义一致性检测规则,实现一致性检测算法,对比这两个LTS
模型产生的分支路径是否满足一致性,从而确认代码中可靠性策略的实现逻辑是否符合其
设计模型。另外,为了提高该一致性检测结果的可信度,提出了一致性检测覆盖标准,避免
代码路径无法完全覆盖的情况。
合;→表示UML时序图的消息集合M上的一个全局排序关系。它表示时序图中的所有消息在
纵向时间轴上的先后关系;CF表示时序图中所有组合片段的集合;OP表示时序图中所有隶
属于组合片段的子片段的集合;O表示从E到OP的一个函数关系。对于o(e)∈OP,表示事件e
所隶属于的子片段;C表示从OP到CF的一个函数关系。对于c(op)∈CF,表示子片段op所隶属
于的组合片段。
×S的子集;q0表示系统的初始状态,可以看作只有一个元素的集合。因为本文中UML时序图
转换得到的LTS只有一个初始状态,由UML时序图的入口消息决定。
信息构建出UML时序图数据结构的实例。图4是可靠性策略UML时序图(下文中,简称UML时序
图)与LTS的数据结构,该图详细地展示出UML时序图与LTS模型应该保存的数据信息。
时序图(即,可靠性策略UML时序图)中的一条消息,对应LTS(即,模型LTS)中的一个状态迁
移;(3)对于同一执行环境下的两条在时间轴上相邻的信息,将其转换为LTS后,第一条消息
转换后的LTS目的状态等价于第二条消息转换后的LTS起始状态;(4)对于ALT、OPT等组合片
段中每个子片段的第一条消息,将其转换为对应的LTS时,需要增加一个过渡状态和过渡迁
移动作,过渡状态name与该第一条消息的发送端对象名称一致、过渡迁移动作的类型为当
前组合片段的类型。
UML时序图中的交互消息进行处理的时候,若该交互消息属于某一类型的组合片段,则调用
对应的算法处理该片段内的所有消息并返回组合片段结束状态节点。
而言,其转换为LTS后会存在若干分支,分支数量与组合片段内的子片段数量保持一致。每
个分支均以[cfName,ALT,Ci]作为过渡迁移标号,其中Ci为每个子片段自身的守卫条件。由
于每个子片段最后一条消息的接收端不一定是同一个对象,因此还需要在组合片段结束
后,增加一个名称为ALT_CF_END过渡状态节点,如图6所示。
此,将OPT组合片段转换为LTS时,会出现两个分支,分别以[cfName,OPT,Ci]和[cfName,
OPT,!Ci]作为过渡迁移标号。其中Ci与!Ci分别表示守卫条件为真与守卫条件为假。当该组
合片段结束时,会通过一个名称为OPT_CF_END的过渡状态节点作为该组合片段的结束标
志,如图6所示。
断变量设定为初始值,接着判断变量的值是否不超过极限值。如果是,则以[cfName,LOOP,
Ci]为过渡迁移标号开始执行组合片段内的交互消息,完成后使用执行动作修改变量的值;
否则以[cfName,LOOP,!Ci]为过渡迁移标号结束循环。在执行完片段内最后一条消息后,需
要重复上一次操作,先判断变量的值是否满足条件,再根据判断结果进行下一次操作。当该
组合片段结束时,会通过一个名称为LOOP_CF_END的过渡状态节点作为该组合片段的结束
标志,如图7所示。
片段转换为LTS时,会出现两个分支,分别以[cfName,OPT,Ci]和[cfName,OPT,!Ci]作为过
渡迁移标号。如果BREAK组合片段属于另一个组合片段(假设为CFb),则当BREAK片段执行完
后,紧跟着BREAK_CF_END状态节点的是所属组合片段CFb结束节点的邻接状态节点;若
BREAK组合片段不属于任何一个组合片段,则BREAK_CF_END状态节点就是全局结束状态节
点,如图8所示。
素映射到定位所得到的代码类上。本发明提出的复合检测方法同时适用于这两个环节,该
复合检测方法通过将约束配置、信息检索、基于方法调用图的检测与人工检测结合起来,提
高模型到代码跟踪的效率与准确率。
表;需要提取的代码信息包括所有模块名称列表、每个模块下所有的包、每个包下所有的
类、每个类中所有的方法以及每个类中所有的内部类。通过采用模糊匹配的原则来完成检
索匹配,完成模型信息与代码信息的相关匹配。
况,将相关类之间的“调用距离”作为一项判断准则,若该调用距离不大于N(默认为5),则认
为当前判断的类与起始基准类存在联系,将其作为匹配结果进行保存。
单纯使用信息检索的方式;Constraint&&IR&&Call Graph,即结合约束配置、信息检索与基
于方法调用图的检测三种方法。
获取到控制流等Log信息。插桩规则包括:
码的实现逻辑可能会被重复多次执行,因此需要从Log中提取可靠性策略一次完整的执行
逻辑信息,便于后续构建代码执行路径的LTS模型。本发明通过对Log文件中每行信息进行
Hash,找到相邻两个完整流程的“入口”,利用该“入口”对应的行数差来获取一次完整流程
所输出的总行数,并以此获得一次完整流程的Log信息。
状态迁移;Log中第一条消息构建的起始状态节点标记为0,后续构建的状态节点使用顺序
递增的数字来标记;Log中最后一条消息,只需要构建状态节点即可,不用构建状态迁移。从
而相比于无法进行可靠性策略的代码跟踪的现有技术,本申请能够通过该构建规则能够实
现可靠性策略的代码跟踪。
会存在分支,因此需要提取出所有的分支路径;而可靠性策略实现代码的LTS由于是基于代
码运行Log构建的,因此其代表代码运行的一条完整路径,不存在额外的分支路径。
代码LTS的分支路径之间的一致性,需要定义一致性规则:
一致性,如图9所示;
型对象的类之间顺序不限)与模型对象顺序保持一致时,满足一致性,如图10所示;
用)、该方法调用同一类中的同一个方法(即递归调用),如图11所示;
径中起始节点的对象保持相同,否则立即返回不一致的检测结果。
图12所示)来设计实现一致性检测算法。
可以通过更改代码运行时条件,产生新的代码执行路径的LTS,进行多次一致性检测。当可
靠性策略模型的LTS分支路径数量较多时,通过改变运行时条件去重新产生代码执行路径
的LTS会耗费太多的时间成本,且可能存在代码运行是路径无法完全覆盖的情况,因此本发
明定义了一个最小的代码执行路径LTS的数量(Minimum Code LTS Number,MCLN)。产生的
代码执行路径LTS数量只有不低于MCLN,满足一致性检测可信度要求,此次可靠性策略模型
LTS与代码LTS之间的一致性检测结果才会认为是准确的。
概率为k,α是显著性水平。一致性检测结果可被接收的最低可信度要求为R,估计的可信度
为R,则置信水平 可计算得到:
策略设计模型的逻辑与源代码中的实现逻辑分别转换为同一种中间模型来判断二者满足
一致性,弥补当前研究中对模型与代码动态一致性检测的缺失;该方法对可靠性策略模型
与实现代码进行动态一致性检测,符合可靠性策略对实现逻辑正确性的要求,提供了针对
可靠性策略更加高效的检测方法及更加准确的检测结果。
UML时序图和标号迁移系统LTS分别进行形式化描述;跟踪模块1304,用于进行可靠性策略
模型到代码的跟踪以获得可靠性策略代码,其中,跟踪包括定位和映射;插桩模块1306,用
于基于可靠性策略代码插桩获得Log文件,其中,Log文件包括可靠性策略代码的执行路径
信息;代码LTS构建模块1308,用于基于Log文件构建代码LTS;提取模块1310,用于基于从软
件系统整体设计模型中分离提取的可靠性策略切面模型,获取可靠性策略UML时序图模型
的关键信息,以构建可靠性策略UML时序图模型,其中,可靠性策略切面模型为UML时序图的
XMI文件;模型LTS构建模块1312,用于将可靠性策略UML时序图模型转换为模型LTS;提取模
块1314,用于提取代码LTS的分支路径作为代码路径,并提取模型LTS的所有分支路径作为
模型路径;以及判断模块1316,用于判断模型路径与代码路径是否匹配。
装置与基于代码跟踪的软件可靠性测试方法相对应,所以为了避免赘述,没有对多个其他
模块进行详细描述。
与代码动态一致性检测的缺失;
型进行判断;
以及
述计算机可读存储介质为磁盘、光盘、只读存储记忆体或随机存储记忆体等。
都应涵盖在本发明的保护范围之内。