在计算机发展的历史长河中,尽管时光荏苒,技术迭代更新,但似乎无人能编写出完全无bug的完美软件。成为第一个做到这一点的传奇人物的可能性,似乎微乎其微。对此,我们不妨先从小处着眼,思考如何在细节上降低bug出现的概率。
我们常常听到这样的观点:长篇文章容易出错,而短如短信的文字则精确无误。那么,是否可以将长篇的代码拆分成若干短小精悍的章节,每章节控制在三千字以内,甚至进一步拆分成数百字的段落?这样的拆分或许可以降低出错率。
对于初级bug,它们往往源于程序员的疏忽。不仔细阅读需求文档和设计文档,导致实现的结果偏离预期轨道。这类问题显然与程序员的职业素养有关。从简单的拼写错误到复杂的逻辑失误,程序员在编写代码时的不认真都会引发诸多问题。而当QA测试出这些bug时,责任自然归属开发者。
业务逻辑bug则是一场集体灾难,涉及需求方的沟通问题。从需求方表述不清,到需求分析师误解意图,再到设计师未能深入理解并进行设计评审,最后到缺乏与需求方的确认环节,每一个环节都可能出现问题。
深度逻辑bug更为棘手,责任不能单一归咎于某个人。设计、开发和QA环节都可能涉及。这类bug往往隐蔽性极强,QA难以测出,只有在系统上线稳定运行后才会露出端倪,解决起来相当棘手。
性能缺陷bug则需要逐层追究责任。开发能力不足、设计不合理、架构不科学都可能引发系统性能问题。bug的数量与系统复杂度和开发时长成正比,而与程序员对系统的熟悉程度成反比。即使是经验丰富的程序员,面对复杂系统也难免出错。
人类并非完美生物,错误总是难以避免。即使是简单的打字录入,也存在1-3%的错字率,更何况是编写源代码这种更为复杂的工作。在研发过程中,足够的成本投入和开发商对质量的重视固然重要,但bug的数量主要还得依赖测试,而测试的充分性则取决于需求的质量。偶尔会有程序员因水平欠佳而被发现,但大多数时候,他们在充分的测试下会迅速露出原形。
回想上古时期,书籍后附的勘误表告诉我们何处出现了错误。面对编程中的bug,我们需要学会自我反思,是怪自己不小心触雷,还是怪他人不负责任挖下的坑?如果一个程序员鲜少出现bug,那或许是因为他尚未遇到那些难以预料的问题和挑战。对于程序员而言,bug不仅是挑战也是成长的催化剂。遭遇、解决、成长,循环往复,bug逐渐减少。毕竟,谁规定程序员不能犯错呢?他们天生就是为了解决bug而生的人种啊!最大的挑战或许在于项目的成败与程序员的直接关系——当大厦倾倒时,作为搬砖者的程序员或许也不清楚发生了什么。这种不确定性或许正是编程生涯中最难以捉摸的bug吧! |