演讲嘉宾 | 晋武侠
回顾整理 | 廖 涛
排版校对 | 李萍萍
嘉宾介绍
晋武侠,西安交通大学软件学院副教授。研究领域包括:代码分析、软件架构治理、智能软件工程。获2022年陕西省优博;主持参与多项国家自然科学基金项目、国家重点研发项目等;担任多个国际知名会议期刊审稿人。
视频回顾
打开哔哩哔哩APP,观看更清晰视频
正文内容
在软件生命周期各个阶段,有不同形态的工具辅助开发维护人员的实践活动,提高工作效率。应对代码级问题的方法工具广泛存在,特别是智能化技术使得代码级问题解决成本越来越低。然而,相比代码级问题,架构级问题贯穿软件生命周期,发现难、影响广、代价高。如何分析、定位、解决这类架构级问题呢?西安交通大学副教授晋武侠在第二届OpenHarmony技术大会上进行了精彩分享。
开发者工具贯穿了软件开发的全生命周期,提供了项目管理、原型设计、高效代码开发、自动化测试与集成以及性能监测等能力。随着人工智能技术的快速发展,软件开发者工具从自动化向智能化演进。传统的自动化工具更倾向于执行预定义的、重复的任务,而智能化工具旨在模拟人类的思维过程,做出更复杂的决策。
尤其,智能化技术使得代码级问题解决成本越来越低。然而,相比于代码层问题,架构层问题可能更加棘手,主要有以下特点:
发现难:代码级问题大部分都是01问题,是显性的,能够及时感知,通常影响功能和性能;而架构级问题大部分为非01问题,是隐性的,影响可维护性,会随着演化过程症状逐渐凸显。
影响广:代码级问题往往影响单一模块,大部分修复往往在较小范围内进行;而架构层问题可能影响整个系统,修复经常需要重大设计调整或重构。
成本高:由于架构腐化会导致维护困难、性能下降等问题,使开发团队需要投入更多的时间和资源来解决,增加了开发和维护的成本。此外,如果架构腐化严重到一定程度,可能还需要进行大规模的系统重构。
如何解决架构层问题?本次报告提倡以架构为中心的开发者工具的解题思路,从“根”上促进软件系统长期健康演化。怎样实施以架构为中心?架构管理的复杂性在于依赖的复杂性,基于代码依赖的架构分析旨在利用代码依赖弥补底层代码细节和高层架构之间的鸿沟,从架构视角来分析、定位、解决开发者日常活动遇到的问题,帮助从“根”上提前预警、避免、消除软件的可维护性问题,促进软件系统长期健康演化,提高软件研发效能。
接下来,首先介绍工具底层基础技术(即代码依赖解析)的最新进展;再以开发者日常代码合入为例,分享如何以架构视角定位致使冲突频发的根因;最后以代码重构活动为应用,展示架构驱动的思路如何帮助推荐重构方案,消除潜在架构问题。
核心技术:代码依赖解析
代码依赖解析旨在从软件制品中提取出代码结构性实体或者符号级实体之间的依赖关系。目前,已有的代码依赖解析技术包括:继承体系分析(CHA)、抽象解释、模块摘要分析、深度学习、指向分析(PA)、快速类型分析技术(RTA)、基于中间表示的分析、启发式规则等;已有的代码依赖解析工具或产品包括:、CodeScene、Doxygen、SCITool Understand等。现代编程语言的duck typing、first-class function/class /module、object change等特性使得编程灵活高效,但同时导致代码行为隐匿,使得代码依赖难以准确解析。
为此,作者及其团队提出了多语言代码依赖抽取框架——ENRE,解决了隐式依赖难以精准分析的难题,增强了已有代码静态分析工具的能力。ENRE目前支持C/C++、Java、Python、JavaScript/TypeScript等编程语言的代码静态分析,能够解析出50余类实体和50余类依赖。基于ENRE解析的代码依赖,能够增强已有开发者工具代码度量的准确性,使已有的质量扫描工具减少漏报。
应用一:面向代码合入冲突的架构问题定位
在下游系统基于上游定制开发过程中,由于各原因无法与上游代码同步合并、小步基线升级,下游扩展代码相对于上游代码形成一个长期存在大版本分支。当大版本升级时,势必两个版本分支合并出现代码“冲突爆炸”。现有工作提出了基于K-shot学习和 GPT等预训练模型的自动合并冲突消解方法,侧重于在代码层面解决合并冲突问题,可以有效消解当次冲突。
作者及其团队提出了面向代码冲突的架构问题检测,通过检测上下游代码之间的耦合切面,识别导致冲突频繁的架构反模式。一旦修复这类架构反模式,则可以缓解下次版本升级冲突量,预警冲突,实现风险左移,带来长远效益。
应用二:面向架构一致性的代码重构推荐
重构是在不改变代码外部行为的情况下改进软件系统内部结构的过程。根据最新文献调研,开发人员在重构活动上花费了大量的时间和精力。现有的解决方案主要有:开发者基于IDEA重构工具人工选择重构;基于指标识别消除代码坏味道的自动重构;基于多目标优化算法搜索优化代码质量的自动重构等。上述方法主要集中在解决代码级别的问题,如代码的质量、坏味道等,缺乏解决软件架构层面的问题例如架构不一致。架构不一致性体现在代码的设计架构和实现架构相违背,出现架构漂移,导致软件系统难以维护和健康演化。
面向架构不一致问题,作者及其团队提出了基于代码依赖的架构逆向帮助定位候选重构文件的方法,加速重构方案搜索过程的收敛。例如,如果从代码实现逆向的架构与其包结构之间存在显著差异,这可能代表了关键的架构问题,需要优先进行重构。该方法同时引入了多类前置条件和后置策略,提升重构操作的可行性,减少实时重构的编译错误、运行错误。基于该方法,作者及其团队实现了一个命名为3ERefactor的VSCode插件,为开发者在IDE环境中提供自动化重构方案推荐,从而消除当前代码与目标架构相违约的实现,提升架构一致性。
综上所述,自动化、智能化技术使得代码级问题解决成本越来越低。相比代码级问题,架构级问题贯穿软件生命周期,发现难、影响广、代价高。开发者工具不仅要关注代码级问题,也要关注架构级问题,利用代码依赖填补代码与架构间的鸿沟,基于代码依赖分析、定位、解决软件架构级问题,实现全生命周期的软件架构看护和治理。
E N D
关注我们,获取更多精彩。
原文标题:第二届大会回顾第13期 | 以架构为中心的开发者工具的核心技术与应用
文章出处:【微信公众号:OpenHarmony TSC】欢迎添加关注!文章转载请注明出处。
-
开发者
+关注
关注
1文章
553浏览量
16990 -
OpenHarmony
+关注
关注
25文章
3660浏览量
16156
发布评论请先 登录
相关推荐
评论