论文部分内容阅读
为了保障软件的生命力和竞争力,软件架构演进贯穿着软件的整个生命周期。开发人员通过软件架构演进实现新功能增加、故障修复、性能提高等目的。但随着软件规模的增加和软件架构复杂度的上升,软件架构的演进难度逐步增加。为了顺利达成架构演进需求,如何保障软件架构具有可持续演进性成为了一个至关重要的问题。软件架构可演进性评估是有效判断当前软件架构是否具备可持续演进性的一种方法。为了有效的实施软件架构可演进性评估,通常需要完成如下三个步骤:1)获得有效的软件架构作为评估过程的输入;2)建立软件架构可演进性评估模型和评估方法;3)实施评估并检验评估结果的有效性。为此,评估者需要关注软件架构如何获取、软件架构可持续演进性如何评估、基于评估结果如何定位架构腐蚀原因、以及基于可持续演进性和架构腐蚀评估结果如何重构软件架构四个方面的研究,这样可以实现从初始架构开始,通过演进性评估和架构重构,以及再评估、再重构的软件架构持续演进过程。但现实情况是,这四个方面的研究还存在以下几个问题:(1)在获取有效软件架构方面,现有方法主要基于源代码恢复软件架构,但单一数据源难以保障获得的软件架构的精确性;并且当恢复大型系统的软件架构时,恢复效率较低。(2)在架构可演进性评估方面,现有方法主要采用的是定性的评估方法,这种评估方法取决于评估者是否有丰富经验,并且评估过程需要人工干涉,无法做到实时、自动化、客观的评估;另外,现有的可演进性评估主要是评估软件架构的演进能力,无法对软件架构演进效果进行评估。(3)在架构腐蚀评估方面,一方面,现有的细粒度变更检测方法不能很好地支持版本间的变更检测,所以也不能很好地分析版本间的变更对架构腐蚀的影响;另一方面,架构腐蚀的根本原因在于代码腐蚀,而目前软件架构腐蚀评估方法的研究对象是软件较高层次的抽象,没能很好地把高层次抽象和代码关联起来,导致提供的架构腐蚀原因的分析结果只能是粗粒度的。(4)在架构重构方面,现有的软件架构重构方法没有考虑架构重构前后的一致性问题,导致的结果是:虽然重构过程不错,但重构效果难以保障。为了解决上述问题,本文从架构恢复、架构可演进性评估、架构腐蚀评估和架构重构四个方面对软件架构可持续演进性评估技术展开研究。主要内容与贡献如下:(1)针对所恢复的架构准确性低的问题,本文从源代码和目录中提取信息,获取更多的架构信息,实验结果表明,本文方法提高了所恢复的架构的准确性;针对大规模程序的架构恢复效率低的问题,本文基于依赖结构和依赖类型对文件依赖图预处理,降低所需要聚类的对象的数量,实验结果表明,本文方法提高了架构恢复效率。(2)针对定性评估方无法保障评估结果客观性的问题,本文提出了基于架构内部属性评估架构可演进性,并实现自动化评估;针对缺少架构演进效果评估的问题,本文提出基于架构演进原则达成性度量架构的演进效果评估方法,并基于评估结果和演进日志对架构持续演进提出具有针对性的演进建议。(3)针对当前方法不支持版本间变更检测的问题,本文提出了基于多层次程序分析树的版本间变更检测方法,实验结果表明,该检测方法具有较高的查全率和查准率;针对目前架构腐蚀评估方法的评估结果粒度较粗的问题,本文采用多层次变更检测方法,逐层定位架构腐蚀原因,实现基于语句变更分析架构腐蚀;针对大型程序变更条目较多不具有全部修复的可行性问题,本文构建架构腐蚀修复的成本效益模型,并提供各个腐蚀点的修复优先级。(4)针对源代码和架构间一致性难以保障的问题,本文提出了基于源代码变更的架构协同演进方法和基于架构变更的源代码协同演进方法,实验结果表明,这两个方法能有效的保障源代码和架构之间的一致性。