程序员改bug命的11个深层原因

189 阅读5分钟

讲动人的故事,写懂人的代码

程序员其实也想一次性把代码写好,不想一直改bug。

因为改bug属于计划外的工作,会让原来排满的工作计划完不成,领导又不允许延期,所以导致加班。

谁愿意加班呢。但下面的11个深层因素,让他们不得不一直改bug,也就是一直在加班。

这就是程序员的加班命

DALL·E 2024-03-18 08.07.16 - Imagine a scene that vividly illustrates the life of a programmer, overwhelmed by the need to constantly address bugs in their code, leading to endles.webp

1 业务的复杂性

软件开发往往是为了解决实际业务问题,而现实世界的业务需求通常复杂多变。

即使最初的设计考虑周全,随着业务的发展和市场的变化,原有代码可能无法满足新的需求,导致需要不断修改和调整。

比如,原来用户退出微信群,会在群里显示“XX已退出群聊”信息。

但后来产品经理觉得可以不显示这条信息,那么之前显示信息,就是bug了。

有人说,把这个当作新需求排入计划,不就不加班了?

理应如此。但有些急功近利的领导,会在要”摇摇领先“的愿景趋势下,把这个新需求,当作紧急bug,硬生生插入当前发布的变更列表。

但又不把其中相等工作量的某个其他变更拿掉做替换。

结果你懂的。加班搞呗。

2 架构设计的耦合性

在软件架构设计时,过度耦合会导致一个模块的改动影响到其他模块,从而增加了修改代码的复杂性和风险。

理想的架构设计应该是模块之间低耦合、高内聚,但在实际开发过程中很难做到完美。

程序员经常踩的坑,就是几个业务都合用一个数据库,导致牵一发而动全身。

比如改动了业务A的数据库字段且测试通过,结果上线发现业务B挂了。

为啥不测试业务B?

3 上线急迫与测试不足

在追求快速上线的压力下,可能会牺牲充分测试的时间,导致软件上线时存在未发现的bug。

此外,即使进行了测试,在时间压力下也难以覆盖所有使用场景。

比如测试人员经常抱怨开发3个月的项目上线前却只给他们1天时间测试。

这只是打比方,大概就是这么个意思。

4 测试场景不完备

由于现实世界的多样性和复杂性,很难设计出完全覆盖所有场景的测试用例。

这就意味着总有一些边缘情况可能在实际使用中被触发,导致bug的出现。

5 基础设施和配置的复杂性

软件需要在特定的基础设施上运行,这些基础设施自身的复杂性及其配置可能会引入额外的问题。

6 开发人员变动

团队成员的变动可能导致知识传递不完整,新成员对项目的理解可能需要时间,这也可能导致错误的产生。

7 协作问题

产品经理、开发人员与测试人员之间如果沟通不畅,可能会导致测试不充分或者对问题的理解存在偏差。

8 开发流程问题

如果需求分析、开发、测试、上线流程不够规范,或协作不良,就很容易造成漏洞或低效。

比如需求沟通不充分、测试资源不足、上线流程草率等,都会埋下 bug 祸根。

9 质量与进度的平衡

在项目管理中,质量、成本和时间是三个关键的变量。

往往在时间压力下,领导可能会牺牲软件质量以满足进度要求。

10 编程语言的限制

不同的编程语言有其优势和局限,比如C++虽然功能强大,但在内存安全并发编程方面有一定的短板,这可能导致在使用这些语言开发软件时更容易遇到某些类型的问题。

11 最后一个原因,往往是人的因素

无论多么优秀的团队,总会因为时间压力、技术盲区、或其他人为疏忽而引入 bug。

毕竟人无完人,bug在所难免。

有朋友说,还有一个原因,就是“防御性编程”。

防御性编程就是程序员为了防止自己被炒鱿鱼,故意把代码写得只能自己理解,别人很难看懂。这样不就离不开他了吗?

但做过大型企业应用软件系统的人都知道,代码已经是“诗山”了,还有必要做防御性编程吗?

想想这些代码,寿命大多有10年以上,开发人员大多是外包。

这意味着代码已经不知道换了多少人的手。

每个人都只管自己负责的那块能跑通就行。

至于bug嘛,留给下一个接锅侠。

诗山代码就是这么来的。

如果你赞同我的观点,欢迎点赞和转发。

如果你不赞同,欢迎留言,说说你的看法呗。