最近,我指导了某新员工对某个软件版本进行测试,该软件的主要功能是从数据库中扫描出满足条件的数据以执行相关操作。具体而言,数据库中有10个表(tb_test0~tb_test9),程序要周期性地从第1个表到第10个表中查询数据。为了验证程序处理的数据条数总条数是否正确,需要经常性地手动从这10个表中查找数据条数,并与程序处理的数据条数进行比较。
在每一轮的测试中,这位新员工的做法是在软件运行之前,先依次手动执行10条SQL语句从这10个表中查找数据条数并记录下来,然后将这10个数据加起来的结果存放到电脑上;当软件运行之后,将保存的结果与程序日志中的结果进行比较,看两者是否相等。按照他的这种做法,如果测试了100轮,那么就要手动执行100组如下的SQL语句:
select count(*) from tb_test0
select count(*) from tb_test1
select count(*) from tb_test2
select count(*) from tb_test3
select count(*) from tb_test4
select count(*) from tb_test5
select count(*) from tb_test6
select count(*) from tb_test7
select count(*) from tb_test8
select count(*) from tb_test9
如此重复劳动是否有必要呢?我问该新员工是否有更好的做法来避免这种重复的劳动?他觉得应该有,但是还没有想到。
我们都知道,与人相比,计算机更适合做重复性的操作。具体到本文中提到的这个问题,可以考虑编写一个数据库脚本(更具体来说是一个存储过程)来从10个表中查找数据条数,我们每次只要用很简单的语句来调用这个脚本就能够得到数据总条数。
根据我的这个想法,该新员工编写了如下脚本:
create procedure pr_countnum
as
declare
@numoftable0 int,
@numoftable1 int,
@numoftable2 int,
@numoftable3 int,
@numoftable4 int,
@numoftable5 int,
@numoftable6 int,
@numoftable7 int,
@numoftable8 int,
@numoftable9 int,
@totalnum int
begin
select @numoftable0=count(*) from tb_test0
select @numoftable1=count(*) from tb_test1
select @numoftable2=count(*) from tb_test2
select @numoftable3=count(*) from tb_test3
select @numoftable4=count(*) from tb_test4
select @numoftable5=count(*) from tb_test5
select @numoftable6=count(*) from tb_test6
select @numoftable7=count(*) from tb_test7
select @numoftable8=count(*) from tb_test8
select @numoftable9=count(*) from tb_test9
select @totalnum = @numoftable0+@numoftable1+@numoftable2+@numoftable3+@numoftable4+@numoftable5+@numoftable6+@numoftable7+@numoftable8+@numoftable9
select @totalnum
end
go
print 'create procedure pr_countnum ok'
go
每次运行软件之前,我们只需要执行如下语句:
exec pr_countnum;
即可得到10个表中的数据总条数。
在实际的研发工作中,为什么我们要尽量将重复性的操作让给计算机执行呢?我认为有如下原因:
第一,为了节约宝贵的研发时间。大家都知道,软件行业的从业人员经常加班,他们不是活雷锋,不是他们想加班,而是手上确实有很多事情做不完让他们不得不加班。在时间如此宝贵的情况下,如果你还把时间浪费在做大量重复的事情上,岂不是可惜?把重复的事情交给机器做,至少可以让我们将主要精力集中在重要的、有创意的事情上,做出来的产品的质量也更好。
第二,为了减少出错的机会。人和机器不一样,机器把某件事情重复做上N遍都不会出现问题,而人重复做某件事情的次数越多,出错的概率就越大。特别是涉及到数字的操作,当你重复做上10遍的时候,可能还一切正常,当你重复做上50遍的时候,可能头就已经晕了,这时得到的结果就会有问题了。
第三,为了体现研发人员的素质。就像前面提到的,一个将某个操作手动执行100遍的人和一个调用自己编写的脚本100遍的人,你会觉得谁的素质更高呢?当然是后者。在每天的工作中,我们会和很多的人打交道,如果你给他们留下了好的印象,那么后续的工作也更好开展了。
在实际的软件研发工作中,我们要合理利用资源,力争多、快、好、省地完成自己的工作。