论文部分内容阅读
如今的软件系统已经广泛应用于人们日常生活的各个领域,然而,开发出可靠和正确的软件系统依然是一个巨大的挑战。形式化方法使用基于数学符号的形式规范描述系统,使得设计开发人员能够对系统进行严格的形式化描述、分析和验证,提高系统的可靠性和正确性。模型驱动工程作为当前工业界主流的软件系统开发方法,主要理念也是要提高开发的抽象层次,将模型作为核心,强调规范语言、分析方法和工具的实用性,确保软件的行为是适当的和正确的。作为模型驱动工程的重要组成部分,统一建模语言UML已经成为业界用于建模的事实标准,却因为本身缺乏精确的形式语义定义,使得对UML模型进行形式验证变得十分的困难。更重要地,软件设计通常是个增量迭代的精化过程,但在目前的研究工作中,缺少普遍认可的对模型精化关系的形式化规范定义,也缺少相关实用性工具的支持,难以确保在逐步求精的开发过程中模型精化的正确性。本文的工作致力于结合形式化方法和模型驱动工程两个领域,以UML2.0动态行为图(序列图和状态图)为研究对象,提出将基于定理证明器Coq的机械语义和验证引入到UML软件设计模型的形式语义验证和精化研究中。通过元模型层次的自动转换原型工具的协助,使得语义中的任何细节都能表示为定理证明器Coq中的严格定义,形成机械语义定义,作为分析和验证的基础;将模型间的精化关系在定理证明器Coq中进行形式化定义,对精化关系的典型属性进行定理证明,对软件设计模型之间是否符合精化关系进行机械验证;在此基础上,提出了一套可机械验证的软件设计模型精化框架,为提高增量式软件设计开发过程的可靠性提供了支持。本文的主要创新点有:·提出了在定理证明器Coq中实现UML序列图和状态图的机械语义,并对语义及重要属性进行形式验证的方法。目前,基于定理证明器Coq对各种基础软件(如编译器、操作系统、关系型数据库等)的语义进行形式描述,证明其正确性是一个研究热点,是提高软件质量的一个切实可行的方向,也促进了学术界新的研究领域“机械语义”的形成。UML序列图和状态图属于UML动态行为图,是用于对软件动态行为建模最为核心的图,目前的研究工作大多针对UML的静态模型,特别是类图进行研究,而对UML动态模型提供严格语义并进行验证推理的研究显得不足。本文提出使用Coq中的归纳类型定义UML序列图和状态图模型,使用Coq中的归纳谓词定义序列图的指称语义和状态图的操作语义,形成机械语义,以利用Coq的高阶逻辑证明系统对序列图和状态图模型进行结构归纳推理。本文实现的UML序列图指称语义,涵盖了常用的组合片段操作符;对UML状态图操作语义的实现,则能够支持卫式条件的使用,可以刻画状态的进入/退2出动作,支持历史状态记录机制,支持层间转移,具备转移的优先级判断机制,并可以描述非终止性的语义情况,是较为全面完整的操作语义定义。在实现机械语义的基础上,可根据需求对模型上的有意义的属性进行定理化的描述,定理的证明确保了属性的正确性,也使得模型语义分析检查成为机械验证过程。·给出了UML序列图和状态图模型精化关系的形式定义,使用定理证明器Coq证明了精化关系的重要属性。软件模型的精化是实现模型驱动开发中增量式软件设计和开发的基础,精化在完全形式化的规范语言中有着的严格定义,然而对于半形式化的UML语言,不直接支持精化,也缺乏对精化关系的确切定义,使得对模型精化正确性的验证难以进行。本文给出了UML序列图和状态图的模型精化关系的形式定义,使用Coq中的归纳谓词实现了精化关系定义,证明了所提出的序列图模型精化关系具备白反性、传递性和上下文不敏感性,所提出的状态图模型精化关系具有自反性、传递性和行为保持性的属性。传递性意味着在设计过程中,可以通过验证每一步精化的正确性来检验多步精化的正确性。上下文不敏感性意味着模型可以用组件的方式进行精化。行为保持性则保证模型在精化之后,在增加了新的功能的同时,仍能保持原有的语义转换。这些重要属性为增量式的软件设计开发提供了理论依据,也使得模型精化的正确性成为可机械验证的过程。·提出了一套可机械验证的软件设计模型精化框架。在此框架中,使用转换工具自动将UML模型转换为定理证明器Coq中的抽象语法,结合机械语义定义,实现对UML模型重要属性的形式分析和验证,以及模型精化过程中的正确验证。该框架具备良好的通用性和扩展性,有助于提高模型驱动工程的可靠性和正确性。本文采用Kermeta工具,设计并实现了元模型层次的从UJML图到Coq抽象语法规范的转换工具。该工具工作在UML的元模型层,使得转换结果符合序列图和状态图在Coq中的抽象语法定义,为分析验证工作提供了便利,提高了本文所提出的可机械验证的软件设计模型精化框架的可行性。