注释和测试:提高代码质量,避免代码灾难

47 阅读4分钟

测试注释先行

写代码的时候,你有没有这种感觉?写着写着不知道怎接下来做什么了,越写心越慌?我知道你肯定看过很多这样段子

  1. 程序员不写注释才是牛的。
  2. 不写注释是常态
  3. 写注释的程序员先下岗

我今天劝你写注释和测试,我不是因为知道教科书让我们写注释,我才人云亦云的说写注释是好习惯,而是因为我对写注释写测试最近深有体会。

在我们开始写一个项目的时候,很多人是迫不及待的就开始搭脚手架,创建数据库,写增删改查等等的编码部分,可是这样的坏处是,你往往要写1000行代码的同时还要修改500行并且删除200行代码。这样其实是很费时间的,而且写代码的时候,你的脑子其实是混沌的,很多决定是拍脑门决定的。拍脑门意味着啥?不言而喻!!!

正例

我先举一个正面的例子。

我在做一个数据库的设计,内容大致是使用SQL创建关于汽车租赁项目的数据库(7张表),我本可以直接上手就来写SQL的,但是我还是老老实实的从画概念图开始的,之后是画物理实现的图,最后才是使用SQL创建数据库。这样给我带来的好处是,设计完后过了一段时间,在最后被其他人审查时,我仍然可以通过画概念图和物理设计图来清楚地讲给对方,并且发现错误后,很快就能改正。

反例

下边是一个反例,这个反例是我目前还在经历的例子。我现在看见这个项目就感觉嗓子里一堆shit。有苦说不出,而且还要硬着头皮继续前行。

这是写一个自定义语言的编译器的项目。看我公众号的老朋友知道我最近一直在写关于编译器的文章,没错我不能按时间写Tiny语言编译器的原因就是我在写另一个编译器。我现在感觉如鲠在喉。

可以看到一开始的代码几乎是没有测试的。

一开始写的时候,就没有认真读语言定义部分,很大程度上凭借的是对JAVA和C语言的理解,而我要写的是一个自定义语言的编译器。所以现在已经在写语义分析部分了,Lexer部分还需要偶尔改动。 Parser 部分更别说了,因为测试不严谨,bug还有一堆。(目前状态,重构没可能了,能跑就行)

目前这个项目已经有了15000行左右的提交,大家可以想象,15000行的项目在没有完备测试的情况下,继续往下的后果。这感觉应该就像一个马车在山路上跑几天几夜不停止,马车随时有散架的风险。至于为什么不写测试?原因有二:

  1. 嫌麻烦
  2. 没开好头

其本质原因还是自己本来不太清楚具体实现,只知道大致的方向,这也导致越写越迷茫

今天晚上呢,我老老实实的写了部分测试,代码覆盖率已经很高了,如图所示:

这无疑提高了我的自信心。我也发现些测试的过程其实就是我思考的过程,如果测试不知要测什么条件,那就老老实实写好注释,结果是注释和测试都有了,自己的思路也清楚了

网上的段子当当笑话就好了,可别当真。不写注释的程序员,我认为极少可能是大牛,很大可能是懒人,迷糊的人。至于测试,自己的项目,没人帮忙的情况下,就自己写测试,只有测试写好了,才能证明你的设计很完美,如果测试很难写下去,说明你的设计不科学,去看看设计模式吧

个人切身体会,可能不太准确,请大家批评指正。