面向软件演化的可靠性分析代数方法

引用本文
张捷,陆阳,张本宏,刘广亮. 面向软件演化的可靠性分析代数方法.
自动化学报, 2021, 47(1):
148-160 doi:
Zhang Jie, Lu Yang, Zhang Ben-Hong, Liu Guang-Liang. Reliability analysis algebraic approach to software evolution. Acta Automatica Sinica, 2021, 47(1): 148-160 doi: 10.16383/j.aas.c180143
http://www.aas.net.cn/cn/article/doi/10.16383/j.aas.c180143
关键词
软件可靠性,软件演化,软件架构,代数方法
摘要
环境和需求的改变导致软件演化发生, 并通常会使软件架构(Software architecture, SA)产生变化.现有的结构化软件可靠性模型对评价软件初始结构设计有不错的效果, 但在软件演化时的实时分析方面有局限性.从软件结构建模出发, 通过使用代数方法将软件演化描述为原子操作序列, 并跟踪分析序列中每一步操作对可靠性的影响, 从而建立基于过程的可靠性分析方法.方法可分析演化关键环节及整体趋势, 用以进一步反馈和约束演化方案设计, 最终达到提高软件产品质量的目的.通过对2个实际算例的深入分析与讨论, 方法的有效性与易用性得到验证.
文章导读
软件演化一直是软件工程领域的挑战性问题.由于客户需求、环境变化、技术进步等原因, 软件有着更新演化的现实需要, 由此带来的开发及管理问题可能非常复杂.针对软件演化的定量分析已经被公认是横亘软件生命周期的最复杂问题之一, 而软件架构(Software architecture, SA)的提出为问题的表述与解决提供了方向.近年来, 通过使用SA相关方法和工具已较好解决了软件演化所带来的障碍、成本等问题, 并且涌现出一些新的观点如演化风格、演化路径等[1-3].但在对软件演化过程的精确描述和完整建模上, 并没有出现公认的一般性方法.需要说明的是, 目前针对演化的研究都是过程性研究, 它基于架构工程师对软件更迭过程的完整监控, 若此工作仅依赖编码人员, 会不可避免地出现架构侵蚀或架构偏移问题[4].一个可行思路是对现有的SA工具进行推广和扩充, 使之能够适用于面向软件演化的过程性分析需要. SA发展至今, 其工具和方法的易用性一直是尚待解决的难题, 如何准确、高效地描述演化需求和过程, 进而使得架构设计者和开发者都可以快速掌握和应用, 有很实际的意义.
另一方面, 脱离架构指导的代码演变极易导致软件设计与实现的错位, 而要修正此类问题往往代价巨大.以目前用户最多的学习管理软件Moodle为例, 它在演化过程中曾经历过重大变化以及大量问题的修复[5].虽然拥有庞大的开发者社群和完整的开发过程记录, 但是此开源项目尚没有清晰的架构设计和演化方案描述.每当新版本发布, 仅用文字记录下哪些新开发的组件被加入, 哪些组件被更改, 工程方法的缺失使得版本更迭脱离了SA设计指导, 很可能最终导致代码实现架构与设计架构的差异.研究已经证实这些差异或称错位情形, 对软件系统的质量指标如可用性、可维护性、可靠性等将产生非常负面的影响[6].
最近的软件演化研究多集中于实证分析, 通过软件度量和失效数据等在演化过程中的变化揭示一般规律.如文献[7]提出通过分析驱动演化的错误报告及变更请求等以评估演化过程质量, 其方法完全基于对过程度量数据的标准化衡量,
利于工具实现.文献[8]利用复杂网络对Linux操作系统演化过程进行实证研究, 通过对前后近1 300个发布版本中所有C函数及其相互调用关系构建有向网络,
展现了网络在规模、入/出度、聚类系数等不同拓扑性质下的演化过程.利用复杂网络拓扑属性分析, 作者揭示了函数模块的各类演化形式,
并指出主要组件函数模块演化的统计学规律.而文献[9]在对2002年∼∼
软件工程活动的主要目的在于开发和维护高质量的软件系统, 对软件演化的定量分析应以提高软件产品质量为出发点.评价软件质量的指标与方法众多, 本文选取可靠性指标进行研究, 这是因为: 1)结构化软件可靠性模型(区别于传统增长类模型)与SA有直接相关性, 它可伴随结构的演变工作, 适用于架构工程师预先评估整个演化过程的质量发展趋势; 2)可靠性的计算基于对软件结构的精确分析, 这与其他软件质量指标相同或相近(如可维护性), 使得研究不失一般性特点.特别地, 当对象为一类安全关键软件系统时, 因其对版本更迭前后的质量抖动更加敏感, 相应的演化需求及演化进程需要更严格的评估及监控, 而可靠性作为最关键的非功能性指标具有重要价值.基于此, 本文站在可靠性的角度分析软件演化过程及其对软件质量的影响, 主要解决以下三方面的问题:
1) 建立模型以准确描述软件结构的演化;
2) 演化过程中对软件可靠性的实时计算;
3) 对演化关键步骤及趋势的分析.
结构化软件可靠性建模研究始于Littlewood[12]的SMP (Semi-Markov
process)模型, 他首先提出单个组件成功执行概率(或称组件可靠性)和在工作流上的组件间控制转移概率是决定系统整体可靠性的两个关键因素.
上述模型和方法的差异在对组件执行时间的处理上, 而本文主要讨论软件演化可靠性分析一般性方法, 倾向使用相对简便的DTMC模型, 以突出需要解决的核心问题是对软件演化的描述与可靠性实时分析.而解决问题的关键在于引入代数方法.通过代数方法将软件演化过程序列化, 并跟踪分析序列中每一步操作, 使得整个演化过程受到完整监控; 同时代数方法本身的精确、轻量、易用等特征也确保了架构设计者的意图能够被开发人员准确理解, 且不会造成他们太多额外的负担.本文余下的内容组织如下:第1节将介绍相关知识背景, 包括软件结构化可靠性分析的主流方法以及简单增量式演化的计算; 第2节给出了结构演化的实例, 说明对其描述的困难程度; 第3节讨论如何使用代数方法构建面向演化过程的序列化模型; 两个算例在第4节中被深入讨论, 以验证代数方法的有效性和易用性.

图

图

图
面向演化过程建模与分析一直是软件工程领域的难点问题.使用代数方法描述软件结构是精确无二义的, 且相较于图形工具在可计算性上具有优势, 适用于可靠性实时分析、计算.将演化过程序列化是本文的创新点.演化各中间版本(步骤)可独立建模, 中间版本前后衔接为完整的演化过程, 从而建立起过程化分析模型.本文方法的有效性与易用性得到了算例验证, 下一步, 将在开源软件项目上开展实证研究, 通过对软件更迭版本依序构建演化代数模型, 并基于设计文档、源代码及代码度量数据获取可靠性建模参数, 用以计算和分析可靠性变化趋势, 以及揭示软件版本演化中的规律性特征和一些重要、易被忽视的中间环节.
作者简介
张捷
合肥工业大学计算机与信息学院博士研究生. 2009年获得同济大学电子与信息工程学院硕士学位.主要研究方向为系统可靠性, 软件可靠性, 可靠性工程.
E-mail:
张本宏
合肥工业大学计算机与信息学院副教授. 2010年获得合肥工业大学计算机应用技术专业博士学位.主要研究方向为分布式控制, 嵌入式系统, 可靠性工程.
E-mail:
刘广亮
合肥工业大学计算机与信息学院博士研究生.主要研究方向为软件可靠性工程与数据挖掘.E-mail:
陆阳
合肥工业大学计算机与信息学院教授. 2002年获得合肥工业大学计算机应用技术专业博士学位.主要研究方向为分布式控制, 可靠性工程, 物联网工程.本文通信作者.
E-mail: