随着互联网的发展,软件的角色变得越来越重要,以至于我们的世界现在严重依赖于它。软件在各种操作中起着关键作用,从将卫星送入轨道到管理庞大的供应链网络。无论是在驾驶汽车、乘坐飞机还是购买杂货时,我们都会依赖它。
然而,尽管出现了专门的角色,如用户体验专家和质量保证工程师,以尽量减少软件中的错误数量,但随着软件解决方案的数量持续增长,人们仍然会遇到性能和可用性问题。本文旨在探讨这种持续的质量危机背后的原因,并揭示为何尽管取得了进步,但软件质量仍然是一个关键问题。
我如何定义质量?对于软件来说,质量有很多定义。我个人认为,质量包括功能性、可靠性、可用性和安全性。在功能方面,软件是否提供了用户实现目标所需的所有必要特性?是否还需要依赖其他软件?Facebook是一个很好的例子,它需要两个应用程序来使用平台(新闻提要)和聊天功能,即使Web应用程序在同一URL上提供这两个功能。另一个例子是游戏行业。在我大学时期,我从未听说一款游戏需要20个补丁才能玩。现在,游戏公司发布他们的产品,但它仍然像beta版本一样。他们通常会在发布后的前两天发布两个补丁,使其可玩。该行业的表现不佳,价格也在上涨。
最后,最重要的方面之一是安全性。如今的软件有许多依赖项,而我们都清楚管理这些依赖项并保持其更新有多困难。即使是自动工具,如Renovate或Dependabot也无法确保新主要版本的向后兼容性。这使开发人员的工作变得更加困难,他们经常被迫手动处理这些依赖项升级。但是,在他们完成之前,攻击者可能会利用旧依赖项的漏洞窃取用户数据。这些违规行为不仅是公司面临法律行动的不便,也是对最终用户的威胁。每天都有数千GB的用户数据,如电子邮件、密码甚至电话号码被丢弃在暗网论坛上。这就是我们在全球范围内看到垃圾邮件呼叫激增的主要原因。
有人反驳我的观点,说有效的软件团队现在需要遵循最新的最佳实践来维护质量。TDD(测试驱动开发)、事件驱动架构、严密测试、直接推送到主分支等玄学概念将帮助您的团队持续交付并保持质量水平达到顶峰。让我们退一步分析这些建议来自何处?
软件工程领域的一位思想领袖是马丁·福勒。许多工程师盲目地接受他提出的任何东西。我在许多公司看到了这种趋势,尤其是在那些吹嘘自己无与伦比的工程文化的邪教组织中。这些人带来的价值接近零,这反映在他们提供的软件中。
随着这些编程语言的出现以及许多公司发布的框架数量的增加,抽象级别的提高逐渐消除了工程师对其正在使用的技术有深入理解的需求。他们不再需要那样了。不要误会我的意思,这也有其优点。事实是你变得更有效率,而且学习曲线更快。然而,过度依赖这些工具可能会导致工程师缺乏对底层原理的理解,这对调试、优化和理解抽象的局限性至关重要。
总的来说,我认为由于缺乏专注、假工程师和对底层原理理解不足,软件已经破裂。我很好奇人工智能如何加剧当今软件中的质量问题。我打赌几年后情况会变得更糟,优秀的工程师可能会因为他们的平庸同行更善于表达自己的想法和传播行业内的假大师们提出的想法而被迫离开这个行业。