开始一个新的开发项目总是令人兴奋的,但在嵌入式开发中,一些最有趣和最具挑战性的项目往往是如何更新遗留代码库。目前市场上有很多产品已经生产多年,如果不是十年或更长时间。这些代码库虽然功能强大且功能丰富,但通常使用不太适合现代软件开发的技术编写。
团队经常因遗留代码库而苦苦挣扎,原因如下:
功能和代码大小的绝对数量(如果不是数百万行代码,则为 100,000 行)
应用程序代码和硬件之间的紧密耦合
过时的工具和开发流程
无法有效地部署新开发人员来处理代码库
虽然可能很容易从头开始,但完全从头开始的时间和金钱投资可能是不现实的。在这篇文章中,我们将研究团队可以遵循的几个技巧来更新他们的遗留代码项目。
技巧1 – 审核你的应用程序代码
在尝试对任何遗留代码库进行现代化改造之前,团队应该审核代码库。审计可以由公司团队成员执行,审计可以帮助团队准确了解他们的代码当前所处的位置以及他们必须使用的内容。
审计的输出应该是多倍的。首先,嵌入式开发团队应该了解代码库当前的位置。这应该包括了解当前架构(或缺乏架构)、特性、功能目的和复杂性。其次,应制定代码库现代化的主要挑战清单。可能存在需要仔细考虑和努力进行现代化的关键代码区域、功能等。这些应该提前调用。最后,输出应该足以为如何使代码库现代化提供建议。这些建议应该很容易被制作成一个软件现代化计划,该计划可以与未来的功能开发集成,以使代码与产品开发工作保持同步。
技巧2 – 生成函数列表和依赖图
至少有两个有用的函数相关资源对于代码库的现代化非常有用;函数列表和依赖图。
可以通过自动化工具生成功能列表并列出所有功能。它们位于代码库中,并根据它们所在的模块进行组织。单个文件应用程序将只有一个列表,其中分解为 5 个模块的应用程序将包含 5 个列表。函数列表对于需要模块化的单片应用程序很有帮助,因为函数列表可用于确定哪些函数组合在一起并应分组到单独的模块中。
函数依赖图也可以自动生成,它可以帮助团队了解哪些函数正在调用哪些函数以及它们之间的关系。依赖图对于理解函数耦合非常有用,并且对于识别彼此相关的函数也非常有帮助。它们还可用于尝试确定代码中的自然边界存在于何处,以便软件可以开始分层。他们还可以展示糟糕的架构设计,并帮助指导重新编写代码,以便在硬件驱动程序、应用程序业务规则等类似问题的领域之间存在清晰的界限。
技巧3 – 模块化应用程序
今天有很多代码仍然是作为一个单一的、单模块的代码库编写的,嵌入式开发团队对代码库等进行现代化改造的第一步是模块化应用程序。拆分应用程序可以:
开始创建关注点分离
简化代码合并过程,允许多个开发人员轻松地在项目上工作
允许开发人员对模块拥有所有权
加快发展
当然还有更多优势,但是将应用程序分解为包含类似功能的内聚模块将大大有助于代码现代化。
模块化也不需要从严格的、封装的、现代的实现开始。相同的概念可以应用于大型遗留项目,只是没有一个单独的功能可以分开,而是十年的特性和功能。
技巧4 – 通过增量改进实现现代化
使代码库现代化的一种方法是逐步进行改进。很多团队试图对其遗留代码进行重大更改以使其现代化。不幸的是,戏剧性的变化往往会导致戏剧性的错误和努力。与其试图一次性进行巨大的结构更改,或者从头开始重写所有内容,不如团队可以制定一个产品现代化计划,概述将在多个软件版本上进行的改进。
建议团队从容易实现的目标开始。很多小的变化,可以立即有明显的改善,这些变化可能是这样的:
降低功能复杂度
模块化关键任务代码
分离和隔离应用程序和硬件相关代码
每个版本或每个 sprint 的微小增量更改都可以显着改进代码,而不会对产品功能开发产生不利影响。
结论
在今天的文章中,我们刚刚介绍了如何开始对遗留代码库进行现代化改造。重要的是要认识到,如果要正确完成,更新不会很快或一夜之间完成。成功的更新工作将是渐进式的,但如果嵌入式开发团队专注于代码审计中确定的低风险、高价值领域,收益几乎是立竿见影的。
发表评论 取消回复