图1展示了一个通用的补丁管理流程。无论更改的程度如何,更新软件系统都可以在线或离线进行。如图1所示,补丁准备、提供补丁、应用补丁、测试补丁以及可能删除补丁(如果适用)是关键步骤。补丁准备的技术取决于原始源代码是否可用。源代码补丁本质上是**的、逻辑上统一的代码编辑,用于改进或修复某些功能、漏洞或漏洞。现代代码版本控制系统通常跟踪这些编辑作为代码提交。完全访问应用程序源代码使得开发全面和灵活的更改成为可能。然而,基于源代码的修补程序的主要缺点是需要重新编译整个应用程序以包括所需的更改。根据软件包的大小,重新编译步骤本身可能需要相当长的时间。
运行时软件补丁旨在更新给定软件系统,同时保留运行进程和会话。如果不可避免地需要停机,运行时补丁方法侧重于最小化中断时间。周等人[3]将运行时补丁定义为“一种动态更新软件的方法,有效降低了软件升级常常伴随的停机时间和不便”。与传统的补丁方法相比,运行时补丁主要是二进制导向的,因为程序的运行二进制实例是在内存中修改的。代码的二进制表示需要在运行时用新的(即修补的)版本替换[3,23]。除了修补二进制的内存版本外,还必须相应地修补磁盘副本,以便在任何将来的重启中修补的行为保持**。
这则补丁增进了游戏的稳定性,修复了一些遇到的崩溃问题,此外还降低了某些CPU和GPU的故障问题。根据外网一些测试的报告显示,这个补丁的确提高了游戏的整体性能,Steam玩家只需在启动游戏时下载此补丁即可。
为了确保用户体验的连续性,必须维护机上活动与更新代码之间的兼容性。引入显著外部可观测变化的修补程序可能会导致与外部观察者的预期不兼容。因此,运行时修补系统的任务之一是实现代码和数据的兼容性,或者至少在补丁部署之前检测潜在的不兼容性。处理原始代码和补丁代码之间的潜在不兼容性需要确定不兼容性的范围(即补丁效果的可观测范围)和类型(即哪些方面变得不兼容)。例如,如果检测到某些不兼容性,补丁应用可能会被完全停止或推迟。检测最具破坏性的补丁可以帮助减少相关停机时间和服务中断。考虑到行为变化兼容性的上述问题,我们进一步讨论未来的研究方向,这些方向可能有助于解决原始代码和补丁代码之间不同方面的这些问题。
补丁和更新之间的区别没有普遍接受的正式定义。然而,普遍理解是引入新功能的软件变更称为更新(或升级)。相反,修复现有错误或漏洞的小改动被称为补丁。或者,一些版本控制系统松散地将软件兼容性定义为补丁和更新之间的分界线。然而,即使是较小的错误修复补丁也可能破坏与先前版本的兼容性,使得基于兼容性的区分在实践中不足。无论使用的术语是什么,补丁和更新本质上都涉及从简单到相当复杂的代码修改。
其他