“你们做的软件有没有可能不出现错误?”
“不能,软件总会有缺陷的,我们能做的是出现错误之后能够及时修正。”
“那是你们不够认真和细心,只要投入足够多的精力和时间,总能避免错误的。“
“微软那么多顶级的程序员,那么多的用户帮忙测试,但他们的Windows系统、Office软件照样经常出现错误。”
”那还是投入的问题,只能说做出完美软件的代价太大,和收益不成正比,而不能说不可能避免错误。你如果对更上级领导说你的软件一定会有错误,你让他们怎么想?“
“领导教训的很对,这么说的确不合适!”
前些年,有一次和刚调入部门的顶头上司交流时,产生了上述对话,当时我还在想,外行的领导就是不了解实际情况,软件怎么可能避免错误呢?这也太理想化了。如果软件可能没有错误的话,那还要ITIL运维标准体系做什么,还要那么多的维护人员做什么,之所以有这么多运维从业者,不正是因为软件的错误不可避免么?
多年之后渐渐觉得,那是我自己思维上的狭隘性在作怪,总是喜欢从技术角度去考虑问题,对于管理用途的软件并且投入非常有限的情况下,我说的话的确也是事实,却很难让人接受。这不是能不能避免错误的问题,而是态度和沟通交流技巧上的问题。
刚学会编程那几年,单位的信息化水平还很低,作为内部程序员,写软件都是单打独斗一条龙服务到底,后来大项目中所有的那种业务咨询、架构设计、代码编写、美工、测试、数据库以及中间件等种种详细的分工完全没有。
所以每次写完一段代码,或者改好一个功能之后,便简单的点几下,如果没有问题便匆匆交给用户使用了。程序员总是有一种莫名的自信,觉得自己写的代码怎么可能会有错误呢,所以每当用户说自己用的有问题时,我总会首先怀疑:“是这家伙不会用吧!”
有时候就索性跑到用户那里,看着用户是怎么用软件的,然后就觉得用户的确是在乱操作,有的因为输入特殊字符报错,有的因为输入的内容过多报错,有的因为没有输入内容报错......你们咋就不能按照我设想的那种好好地操作呢?
不久之后就觉得自己的想法其实很可笑,站在用户的角度,输入什么样的内容是他们具体工作的需要,软件就是要支持各种各样的场景,而不是用户要去迁就你的软件。不过仍旧有很多程序员会觉得是用户有问题,他们不懂技术。
那时候我们对软件的容忍度其实还是挺大的,就像在文章开头提到的那样对自己说:“错误不可避免”。
后来软件做的越来越复杂,很多错误堆积在一起,有的甚至直接导致用户不再想使用这些软件。测试就慢慢成了项目中最大的瓶颈。这也是缺陷无法避免的重要原因,用户不愿意耗费太多时间在那里做一些虚拟的数据,想着尽快真正的用上软件。
其实缺陷真的是没法避免的么?或许一个大型的软件不可能面面俱到,但在一些关键的功能环节上,有的软件却必须做到丝毫不差。例如像火车调度的软件,电厂隔离的软件,真是容不得半点马虎。
不过有时候也要讲究一个投入产出比,对于一些企业内部的管理性软件,有的流程很复杂,复用率又比较低,出错的后果也没有那么严重。自然就没有那么多的必要去消除零缺陷。
网友评论