【译文】为什么软件质量不如十年前
自互联网诞生之初,软件的作用就变得越来越重要,以至于我们的世界现在严重依赖软件。从将卫星送入轨道到管理庞大的供应链网络,软件在各种运作中都不可或缺。在我们的日常活动中,无论是驾驶汽车、乘坐飞机,还是购买日用品,都离不开软件。
随着软件解决方案数量的不断增长,由软件错误引发的事故也会相应增加。但是,如果您在科技公司工作或日常工作依赖软件,您可能会经常注意到性能和可用性方面的问题。
为什么会出现这种情况呢?尽管设立了用户体验专家和质量保证工程师等专门职位,努力将软件中的错误数量降到最低,但现代软件的复杂性仍起着重要作用。即使做出了这些努力,该行业仍然面临着重大挑战。本文旨在探讨这一持续质量危机的根本原因,揭示为什么尽管取得了进步,软件质量仍然是一个关键问题。
什么是质量?
关于软件的质量,有很多定义。就我个人而言,我会从以下几个方面来定义质量:功能性、可靠性、可用性和安全性、
就功能性而言,软件是否为用户实现其目标提供了所有必要的功能?是否还需要依赖其他软件?在消费软件方面,Facebook 就是一个不符合功能性要求的糟糕例子。你需要一个应用程序来使用提供新闻源的平台,还需要另一个应用程序来使用聊天功能,尽管网络应用程序在同一个网址上提供这两种功能。视频游戏行业是一个不同的例子,但仍适用于消费软件。我在大学时代玩电子游戏时,从未听说过一款游戏需要打 20 个补丁才能玩。现在,游戏公司推出了他们的产品,但给人的感觉仍像是测试版。他们通常会在推出后的头两天发布 2 个补丁,使其可以玩。这个行业似乎已经完全崩溃了,价格也在不断上涨。
在可靠性方面,它必须是可靠的,停机时间或错误最少。这包括从故障中恢复的能力和维护数据完整性的能力。有许多报告显示,云服务或其他关键软件不够可靠。例如,2023 年,谷歌支持论坛上充斥着用户抱怨数据从谷歌驱动器中消失的报告。我个人认为,将数据存储在云端比存储在移动硬盘上更安全。但事实肯定不是这样!
从可用性的角度来看,软件必须方便用户使用,不能过于复杂,而且性能要好。我生活的地方,金融业在经济中占据了很大的比重。银行和投资公司在这里拥有巨大的权力和近乎无限的资源。尽管如此,它们的移动银行平台却是个笑话!滞后、复杂、不直观的用户界面,让我在使用时总是感到沮丧。甚至他们的反馈表也无法使用,每当我尝试提交时就会出现 500 错误。
最后,最重要的一点是:安全性。如今的软件有很多依赖关系,我们都知道管理这些依赖关系并保持它们的最新版本是多么困难。即使有 Renovate 或 Dependabot 这样的自动工具,各种库的提供商也无法确保其新的主要版本的向后兼容性。这就给开发人员的工作增加了难度,他们往往不得不手动处理这些依赖升级。然而,在他们设法做到这一点之前,攻击者可能已经利用旧的依赖性漏洞窃取了用户数据。这种漏洞不仅给公司带来不便,可能面临愤怒用户的法律诉讼,而且对最终用户也是一种危险。每天都有成千上万 GB 的用户数据,如电子邮件、密码甚至电话号码,被倾倒在暗网论坛上。这就是我们注意到世界各地垃圾电话激增的主要原因。
什么坏了?
既然我已经定义了什么是质量,那么下面我就谈谈我个人对当今软件问题的看法。我必须提醒你,在这一部分中,你会看到很多直接提到人或群体的地方。毋庸讳言,我无意将我们所处的混乱局面归咎于任何人、任何团体或行业。我只是想根据我在这个行业 10 多年的工作经验,谈谈我的看法。这只是基于趣闻轶事的个人观点,因此,请不要以任何方式进行辩解或针对个人。
现在,能力危机影响着整个世界。由于我们每天都要面对大量的娱乐活动,人们实在是太分心了。每个人的注意力都在下降,以至于我们无法集中注意力超过几分钟。
根据我的经验,这个问题在年轻人中非常普遍。我有幸与 Z 世代中的杰出人士共事,但他们中的大多数人都无法完成任何事情。这并不是因为他们缺乏经验,而是因为他们在本该完成工作的时候,却一直在玩手机,看没完没了的视频,甚至玩游戏。有时你会觉得自己是在和一个瘾君子共事。不只是我,有科学研究表明,这个年龄段的人对社交媒体的沉迷程度很高。
人们无法再集中精力和时间来正确处理复杂的任务,这就导致了更多的错误、更多的可用性问题,以及对工作和软件开发人员使命的专注度降低。
有人反驳说,如今高效的软件团队需要遵循最新的最佳实践来保持质量。TDD、事件驱动架构、密闭测试、直接推送到主程序和其他深奥的概念将帮助你的团队持续交付并将质量保持在最高水平。让我们回过头来分析一下这些建议的来源?
马丁-福勒(Martin Fowler)是软件工程领域的思想领袖之一。许多工程师盲目追随他提出的一切建议。我在很多公司都看到了这种趋势,尤其是在那些吹嘘自己拥有无与伦比的工程文化的邪教组织中。许多这样的组织都会构建微服务,即使他们的软件领域复杂度不高,软件本身预计也不会有太大的扩展性。他们会这么做,因为他们的 “上帝 “让他们这么做。但是,他和其他这样的领导者是如何变得如此有影响力的呢?他们一定是自己构建了世界一流的软件,对吗?
我到处搜索马丁-福勒创建的软件。没有任何开源软件,也没有任何已发布的闭源软件宣传说是他开发的。所以我又要问:他是如何变得如此出名的?很简单,因为他满足了平庸工程师的渴望:争议。
如今,构建软件已不再是工程问题。而是为工作选择正确的设计模式。这是高级编程语言盛行的结果,在高级编程语言中,不再需要考虑内存分配等复杂问题。这使得软件工程职业平民化,几乎人人都有机会。这不是真正有激情的人才能做的事情。主要的影响是,标准降低到了这样的程度,你的团队中甚至会有一些人每天都不写代码,但他们在关于是否应该使用 TDD 的无休止争论中的影响程度却受到了非技术经理的高度赞赏。这些人带来的价值接近于零,这反映在他们交付的软件上。
随着这些编程语言的出现,以及许多公司发布的大量框架,抽象程度在不断提高。这使得工程师逐渐不再需要深入了解他们正在使用的技术。他们只是不再需要了。别误会我的意思,这有其自身的优势。事实上,你可以获得更高的工作效率,而且现在一切都有了更快的学习曲线,这些都是巨大的成就。但是,增加对这些工具的依赖可能会导致工程师对底层原理缺乏深刻理解,而这对于调试、优化和理解抽象的局限性至关重要。
总而言之,我认为软件的崩溃主要有以下几个原因:缺乏关注、虚假的工程师,以及缺乏对抽象概念背后的深刻理解。我真的很好奇,人工智能会如何加剧我们现在看到的软件质量危机。我敢打赌,再过几年,情况会变得更糟,优秀的工程师会被平庸的同行挤出这个行业,因为他们可能更喜欢发表意见,宣扬这个行业的伪大师们提出的观点。
本文文字及图片出自 Why is software quality worse than a decade ago
你也许感兴趣的:
- 低质量软件的最大“祸根”:虚构问题!
- 软件质量控制技巧
- 苹果遭铁杆粉丝吐糟:软件水平江河日下
- 【外评】电脑从哪里获取时间?
- 【外评】为什么 Stack Overflow 正在消失?
- Android 全力押注 Rust,Linux 却在原地踏步?谷歌:用 Rust 重写固件太简单了!
- 【外评】哪些开源项目被广泛使用,但仅由少数人维护?
- 【外评】好的重构与不好的重构
- C 语言老将从中作梗,Rust for Linux 项目内讧升级!核心维护者愤然离职:不受尊重、热情被消耗光
- 【外评】代码审查反模式
你对本文的反应是: