直面bug,而后反思

新公司,自我来,产品迭代了 2 个版本。2 个版本中我都去做了难度与复杂度较高的任务,很棘手也挺闹心。每个版本提测后,大大小小的 bug 多达 30~40 个,为此被测试怼过,被组长怀疑过,也被负责人找去谈话过。哎,心里有怨气,有委屈,这不是我一个人造成的呀!但事实摆在眼前,我无力狡辩,也懒的去花功夫去说服他人,算了,先自我反省吧。

一定要理清楚需求

必须弄清楚需求,越仔细越好。在没搞清楚需求前,写的代码,大部分不能用,是后续要删除的。如果不想删除,就会想方设法在此基础上,来完成以后的需求,就不会去仔细分析该正确的需求,去设计更合理的实现方法,达到可复用,易维护的最低标准。总之,越加越乱,越改越难,越来越复杂难懂,越来越不知所措,维护成本也必然越来越高。久而久之,一定会破罐子破摔,东补西凑,代码写的能混过测试即可。后面谁维护,谁倒霉呗。 理清需求,做的无用功就少了。提测时,才被检测出问题,多半会因没有充足的时间去改,自然会投机取巧,随便胡弄。

理清需求后,别急动手,多思考如何更好的实现,并画流程图

了解需求后,别急着写代码。好好思考下如何去实现?有几种可行方式,并画出每种方式的流程图。每种方式的有那些优点、缺点、难点?要实现所需技能难不难?自己掌握了没?如果没有,如何去学习了解,花费多少时间?流程中涉及到的方法,是否之前有能复用的?如果没有,新写的方法,是否符合单一原则,能否被更好的复用?流程中如何设计数据结构,怎样设计更容易理解,更好操作?该功能,能被拆封的更小吗?能直接复用之前组件吗?后续要添加,调整,怎样更容易?假若每个人都能以此理想化的方式,实现需要,编写代码,那么版本迭代将会越来越容易。而非像现在一样,每一次的版本迭代,不论是添加新需求,亦或是修改之前功能,复杂度和难度陡增,牵扯的部分,要考虑的地方越来越多,另外,因为没有编写测试代码,,隐藏 bug 无以计数, 远比发现的多啊。

编写代码,要有规范,并且要坚持符合规范,不能有丝毫的纵容

代码是不会欺骗人的,所以你也别去想着如何能欺骗它。找份高质量的代码规范,一以贯之的按规范编写,无形中会少犯很多错误,渐渐的也会养成好的编码习惯和思考方式。例如,如何给变量命名?如何给函数命名?循环、分支结构如何编写?不要使用魔幻数值或字符等;因为有规范,就有了评判对错的参考物,且易于去更改,会易形成习惯。之后得心顺手了,甚至能以平静或开心的心态编去编写代码了。千万不能有丝毫的纵容,当心“破窗理论”,千里之提,毁于蚁穴呀。

摒弃侥幸心理,坏事一定会发生的

很多时候明明知道编写的代码,小概率会出错,要改,则要花费过多的时间、精力去思考和完善。这时惰性和侥幸心理会选择不改不完善,或者打个 TODO 标签,标记以后有时间会去完善。那么,不到被测试测出,或因有问题影响用户正常使用,是不会去改的。因为不被强制要求改的话,我怎么会去花时间看前面代码,去抵制侥幸心理作祟,这对正常人来讲也是很难的。别再心存侥幸了,踏踏实实的,把问题考虑全了,所有的可能性都考虑到了,这是一种本事,既然想到了,就去做好它。善始善终,圆满无暇真真的难呀。

尽量去编写测试用例,编写可测试的代码,得到好代码

如果你对自己写代码没把握,没自信,害怕提测,且总是有许许多多本可避免的 bug,则需要开始去编写测试代码了。写代码之前,思考并设计,理清功能点的输出和输入,编写测试用例,再在测试代码的约束下,编写的代码,就会更加高内聚低耦合,更高质量。同时,在后期可依托测试,进行持续重构,而不用担心破坏原有的代码逻辑。只有持续的重构,才能有高质量的好代码。其实,编写测试用例,是一个很好的思考并设计代码的过程,好的测试用例,是代码正确性的保障。

拆解需求,自顶向下的划分功能模块,编写可复用的代码

世间万物都是结构化的。用结构化的思维去看待事物,思考问题。需求更是如此,大需求,由各种各样的小需求以某种结构,组合而成。所以,在遇到复杂的需求时,学会拆解成多个独立的小需求,小需求再拆解成更小的需求,真到不能拆解为止。把需求自顶向下的划分成独立的模块,再去实现各独立模块的功能。因为模块独立,不但可独立编写,独立测试,更能在以后根据需求组装,服用。

多沟通,不会则问,发问前,多想多准备

白纸黑字,有图有据,你和产品对需求的理解也是有偏差的。多沟通,确保双方所理解的是相同的。与人交流,交往一样如此呀。别去费时费力的推测他人了,也别以为自己的理解,他人也应该如此理解才对,其实不然,人与人是真的不同,差距大到难以想象。学会去理解他人,尊重他人,多沟通,勤沟通,很多问题不会发生,很多烦心事也会迎刃而解。
不会,搞不明白,就问问明白的人,自我的理解思考多是狭隘,容易受阻,遇死胡同。在像他人发问前,多准备,要多想,具体要问什么?真正阻隔自己的是什么?是否搞明白它,其他的问题也可解决?如果真是如此,要好好反省对比自己,为何会受阻?为何自己会那些去想?那样想的由来是什么?为什么自己不能如明白人一样思考问题呢?我有种体会,人必须要在 对与错中 不断的去自我反省,为何走到了错的路上?怎样思考,怎样走才能走到对的路上?对与错的分叉路,是否有路标指引呢?我相信是有的,那么要如何去辨别呢?