为什么一定要写注释和测试

最近在公司用PHP重写之前的Lua代码,这份Lua代码量不多,3000行左右。但是,我花了不少时间重写。感触非常大,所以想分享一下。

首先,我说一下这份需要重写的代码问题:

1
2
3
4
1. 没有一个测试。
2. 因为功能不断的在增加,加上对代码质量的不重视,复制粘贴的地方太多了。可能只是改了几个传参而已,但是,却复制了整个函数。
3. 多个地方,本来可以用几句话写完的逻辑,可能是因为当时没想到,逻辑写的非常复杂。并且这段复杂的代码没有注释。
4. 整个项目的注释占比太少了,可以说几乎没有。

我针对这几点来说一下。

第一点,没有一个测试。

这是我认为最严重的问题。我个人认为,一个没有测试的项目,经过无数迭代和多人接手之后,必定是屎山。你代码可以写的不好,但是,你必须要尽可能的写足够的测试,来保证你目前的功能都是正常的。

那么,没有测试的话,会导致什么问题呢?

很明显,你不敢去修改一个你不太熟悉的地方,你不知道这么改对不对,会不会影响其他的代码。所以,你可能就会自己去写一遍。甚至来说,你非常熟悉这份代码了,但是,你没有测试,你也不敢去改,因为你改完之后,你确定不了改完后代码后,整个系统正不正常。毕竟,你怕背锅。久而久之,这份代码极其丑陋。后面,你想改也没动力了。

并且,没有测试的话,你完全不敢去升级你使用的框架,除非你头铁。你知道这个框架有bug了,但是,你不知道升级之后,是否会有api不兼容的问题,导致你的项目出其他的bug

所以,没有测试,团队的代码会越来越丑陋。(如果是个人的项目,可能你还能撑得住)

你可能有千万个理由说自己没时间写测试。然而,写一个测试其实要不了多少时间,可能比你在postman等工具手动填充参数要的时间还少。我个人觉得,不写测试,是不热爱编程,没有享受敲击键盘的快感,你是一个喜欢手动完成一些任务的人。

第二点,代码质量问题。

我重写的时候,旧代码有太多的复制粘贴了。但是,我在完全重写之前,我是不敢对代码进行优化的。那么,我是怎么做的,我先按照Lua的代码,一字一句的完全翻译完,旧代码复制了几遍,我就重写几遍。然后,我给我重写后的代码编写足够的测试,然后我才敢进行优化。

那么,如果旧代码有测试会怎么样?我完全可以对旧代码进行重构,然后跑一遍测试,看一看测试是否通过。然后,我再按照优化后的代码进行重写。这样,重写的错误率会大大降低。

第三点,简单的逻辑落地在代码上,就变复杂了。

其实,把简单的逻辑写复杂了还能接收,但是,如果没有对这段复杂的代码进行解释,以后就没多少人能够读懂,写代码的人过久了估计也读不懂。所以,我建议,如果代码被你写复杂了,你一定要在旁边写上注释,解释一下这段代码做了什么。以后,就好按照注释进行代码优化。

第四点,没有注释。

很多人可能说,代码就可以表达意思,实际上我觉得并不可以。就算你有一个好的函数名字,你依然会去点开这个函数来看看,看它到底怎么写的。一旦你点进去 ,那么,很可能你就会被里面的代码给整懵了。你不懂这段代码为什么要这么做,即使你有了更好的点子,你也不敢去改。你怕你的想法和这段代码并不完全一致,一些细节,你可能没有考虑到。

还有一些特殊的if条件,我建议也最好注释一下。因为它可能只在某些特殊的场景才会出现,但是随着我们系统的变化,这个场景可能就不会出现了,那么,我们以后完全可以把这个特殊的代码分支给删了。