维护遗留软件使你意识到代码是多么脆弱

令人惊奇的是,软件每天都能正常工作。

我们发明了一些复杂的系统来支撑我们的应用程序,通过层层的抽象来保持它们的运行。

但当你真正停下来思考时,你刚刚构建的应用实际上依赖于某个开源框架。而这个框架依赖于很多其他的开源项目,每一个都有其自己的依赖项。

在几天内,这条依赖链就会过时。底层的包都有了新版本。

几个月内,你需要进行一些依赖更新,因为底层包中存在一些安全或许可证的漏洞。

对于遗留软件来说,升级通常可能会落后好几年。而使应用程序达到最新状态所需的工作是巨大的。

近期的困境

在过去的一周工作中,我开始了一个项目,目标是用现代的依赖关系来更新一个遗留应用程序。

令人惊讶的是,很多事情都可能出错:

  • 我从GitHub拉取了源代码,立即遇到了很多错误,只是为了在本地构建应用。
  • 更新一个包可能会导致它与另一个包的当前版本不兼容。级联更新意味着找到一个新的稳定构建可能会是个挑战。
  • 往往要求会直接冲突。这周我有一个时候,一个包需要 click<8,而另一个包需要 click>8。我要么需要降级一个依赖,要么需要对另一个带有破坏性更改的依赖进行主要版本升级。
  • 当依赖项之间不能很好地相互协作时,可能会出现奇怪的错误。用不匹配的依赖项运行应用可能会导致你之前从未见过的异常,这些异常深藏在包的内部。需要大量的猜测和检查来确保所有人都能和谐地工作。

依赖地狱

我不认识一个软件工程师,没有一个经历过这种挣扎的版本。依赖管理确实很难。

升级、导航破坏性更改、以及在Stack Overflow上花费大量时间来诊断为什么我会得到某些错误。

这使得很多时候,软件能够按照我们的预期工作,这一点更加令人惊讶。再考虑一下,你会意识到为了让你的应用运行,数十个不同的、独立的软件包之间的每一件事都必须恰到好处。

这真是太疯狂了!但这是现代软件的真相。

每周清单

请记住,始终保持学习的态度,并享受编码的乐趣!祝您编码愉快!

如果你喜欢我的文章,点赞,关注,转发!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容