遗留代码现代化的5个技巧

开始一个新的开发项目总是很令人兴奋, 但是一些最有趣和最具挑战性的项目需要在 嵌入式系统通常可以成为现代化旧代码库的方法。有这样 目前市场上已生产的许多产品 十年甚至十年或更长时间。这些代码库虽然功能强大且 功能丰富,通常是用不太适合的技术编写的 现代软件开发。例如,我经常遇到 非常成功,但是写在单个文件中,整体式实现 因为那是10、15或20年前的做法。

团队经常因诸如此类的原因而与遗留代码库作斗争 as:

  • 功能的绝对数量和代码大小 (如果不是几百万行,则为100,000行代码)
  • 应用程序代码与 hardware
  • 过时的工具和开发流程
  • 无法有效部署新开发人员 在代码库上工作

虽然可能有一种诱惑,只是从头开始 从头开始,时间和金钱投资完全可以从头开始 不切实际。在这篇文章中,我们将研究团队可以提供的一些技巧 然后开始现代化其遗留代码项目。

提示1–审核您的申请代码

在尝试现代化任何旧版代码库之前, 团队应审核代码库。审核可以由公司团队执行 成员,但我经常发现第三方的外部观点可以提供 提供更多的见解并克服内部偏见和意见 在团队中发展。审核可以帮助团队准确地了解 他们的代码目前有效,必须使用什么代码。

审核的输出应该是几倍。首先,作为 我们已经讨论过,团队应该了解当前代码库的位置 站立。这应该包括了解当前的架构(或缺乏 其),功能,功能目的和复杂性。二,主要清单 应该开发代码库现代化方面的挑战。可能有 关键代码区域,功能等,需要仔细考虑和 努力现代化。这些应提前取消。最后, 输出应足以为如何现代化 代码库。这些建议应易于制作成软件 可以与未来功能开发集成的现代化计划 产品开发工作使代码与时俱进。

提示2–生成功能列表和依赖图

我发现至少有两个有用的功能 对现代化代码库非常有用的相关资源; 功能列表和依赖关系图。

功能列表可以由自动化工具生成, 列出所有功能

在代码库中,并根据 它们所驻留的模块。单个文件应用程序将只有一个 列表,其中细分为5个模块的应用程序将包含5个列表。一种 函数列表对于需要模块化的单片应用程序很有帮助 因为功能列表可用于确定哪些功能组合在一起 并应分为一个单独的模块。 

功能依赖图也可以自动生成, 它可以帮助团队了解哪些功能正在调用哪些功能, 它们如何相互联系。依赖图非常有助于理解 功能耦合,这对识别功能非常有帮助 彼此相关的它们也可以用来尝试确定 代码中存在自然界限的地方,以便软件可以开始 分层。他们还可以展示糟糕的建筑设计,并帮助指导 重新编写代码,以便在相似区域之间存在清晰的边界 诸如硬件驱动程序,应用程序业务规则之类的问题。

提示3–模块化应用

如今,仍然有很多代码仍然存在 作为一个整体的,单个模块的代码库编写,这就是所有内容 main.c.现代化(如代码库)的第一步是模块化 应用。分解应用程序可以:

  • 开始建立关注点分离
  • 简化代码合并过程,允许多个 开发人员可以轻松地在项目上工作
  • 允许开发人员对模块拥有所有权
  • 加快发展

当然还有更多的优势,但是分手 将应用程序放入包含相似功能的内聚模块中 实现代码现代化的漫长道路。

模块化也无需严格要求 封装的现代实现。我今天仍然知道开发人员 开发应用程序会将他们正在处理的所有内容都放入main.c中。 代码工作后,他们将其分解为单独的模块。不是我的 首选的开发方式,但我已经看到他们在此方面取得了巨大的成功 技术。相同的概念可以应用于大型旧项目,只是 没有一个单独的功能可以分开,但是有十年的功能 和功能。首先采取婴儿的步骤。 

提示4–放开事物“是”或“被”的样子

事情如何完成以及如何完成 产品到达今天的位置,但是他们不会帮助它到达现在的位置 需要走。团队经常陷入“过去”和“过去”的循环中 不断影响着开发人员思考事情发展的方向。在 为了成功更新代码库,了解如何 一切都在代码中,但开发人员需要放手才能做到 发展“将是”。我不能告诉你我看到球队跳了多少次 起来,无法前进,因为他们的思维定格在事物的状态 在他们的旧架构和实施中,他们不仅允许 影响力,但限制了他们未来的能力 developments. 

提示5–通过增量改进实现现代化

使代码库现代化的一种方法是 逐步改进。我经常看到尝试做出重大改变的团队 他们的遗留代码对其进行现代化。不幸的是,经常发生巨大变化 导致严重的错误和努力。而不是试图建立巨大的结构 一次更改所有内容,或从头开始重写所有内容,团队可以 一起制定产品现代化计划,其中概述了将要进行的改进 制作了多个软件版本。

我经常建议团队从低落的果实开始。 细微的变化会使球滚动并且可以有明显的改善 立即。这些变化可能是这样的:

  • 降低功能复杂度
  • 模块化任务关键代码
  • 分离和隔离应用程序 硬件相关代码

每个版本或每个版本的微小增量更改 sprint,可以对代码进行重大改进而不会带来不利影响 对产品功能开发的影响。

结论

在今天的帖子中,我们刚刚介绍了如何 您可以开始现代化遗留代码库。认识到这一点很重要 如果要正确完成现代化,现代化将不会很快或一夜之间完成。 成功的现代化工作将是渐进的,但好处可以是 如果团队专注于低悬垂,高价值的领域,那几乎是瞬间的 在代码审核中标识。

4 thoughts 上 “遗留代码现代化的5个技巧”

  1. “还可以自动生成功能依赖关系图,它可以帮助团队了解哪些功能正在调用哪些功能以及它们之间的关系。”

    亲爱的雅各布,

    您对可以基于源文件生成此类依赖关系图的工具有什么建议?
    我只能找到Doxygen + Graphviz作为可行的选择,有时却没有’t显示整个调用层次结构,并且仅在doxygen文件内部生成不可编辑的图形。
    是否有其他工具,更可取的是开源软件(免费软件)?

    在此先感谢您,并祝您在2020年有了一个良好的开端-

    最好的祝福
    弗洛里安

    1. 当我想做这样的事情时,我通常会使用“理解”。有一些开放源代码工具,例如Doxygen和Graphviz,但是它们通常无法完全正常运行,正如您提到的那样,它们并没有’t使您可以轻松浏览整个层次结构。我的’我们发现产生任何真正有用的东西都是商业产品。

      1. SourceTrail很好,谢谢。 Netbeans也具有类似的功能,但可能更有限。右键单击函数名称,它具有显示调用图选项。

发表评论

您的电子邮件地址不会被公开。 必需的地方已做标记 *

该网站使用Akismet减少垃圾邮件。 了解如何处理您的评论数据.