天天看点

软件质量控制之难 之我见 测试篇

做软件几年下来,感觉做软件不难,做个好软件,----难.  做个高质量的好软件,---非常难.

难在哪里呢?

做软件不难,软件工程--难.

每个程序员都会写程序,写出的程序质量就不一而论了...

新手程序员写的程序肯定有很多的缺陷和bug. 健壮性也很差...

1.像 sql注入,脚本注入,特殊字符,等等,这些问题新手肯定不会去考虑..因为新手都不知道还有这些问题存在... -->经验+知识欠缺

2.程序的执行状态...执行过程中的各种可能遇到的问题比如断电,短线.等等....老程序员也不可能完全把握... ---> 思考欠缺

3.找不到对象,程序执行着就出错了.. 蹦出的错误,直接把程序挂掉.... 一出错整个程序没法运行下去... --->系统设计欠缺 

4.新的需求加进来的, 程序改起来要人命... -->也是系统设计对变更的考虑欠缺.

这些错误都是难免的.

只不过老程序员写起来会自然而然的想到以前出过的错误,可能会出现的情况..自然写一些代码对之进行屏蔽...

目前来看,要想写出一个好的,质量高的程序...只有把所有的错误都犯一边...下次再写的时候就会注意了!!-----My God... 这需要多少长的时间啊...

所以说老程序员,值钱就值钱在写的程序.比别人考虑的多一点...

但是也有另外一个方法可以控制住软件的质量,那就是测试.把做好的软件测试一遍...

测试合格,软件不就合格了吗??

测试的越严密越广泛,则程序的质量越高..

所以有这么一个概念叫做,,测试覆盖度... 一个测试可以测试系统中百分之多少的功能和bug... 当然最好一个测试就能测试完100%的功能和bug

再来分析下看,抛开测试覆盖度不讲,,单讲要测试的内容有哪些吧.

比如 

安全方面的 sql注入测试,脚本注入测试. 等等..

功能方面的 单个模块的测试,模块组合集成后的测试.软件操作流程测试,

界面方面的,人机交互优化..用户心理测试...

bug方面的测试,

稳定性方面的测试..

安装方面的测试...

运行支撑环境的测试....

硬件需求方面的测试....

...

...

...

需测试面之广,不是一个人两个人能完成的...(我不是专业做测试的,,恕我 列举不出那么多测试项...)

更重要的是,这些测试项,是每一个高质量的软件都需要经过的测试.

只有,完善的高密度的测试才能产出高质量的软件...(当然也得软件通过才行...只测不改不如不测,废话)

所以软件测试的门道也很多的...(又是废话)

软件和硬件同样是要做测试的,为什么硬件质量要相对可靠..,软件则是另外一幅景象?

原因有很多.

第零个:也是最根本的问题,程序是程序员写出来的,程序员是人,人是会犯错的,所以程序会出错是在所难免的.软件出错也在所难免..

(这里,问大家一个问题,上帝会不会犯错? 我认为会,要不然他制造的我们怎么老会犯错?? 还是他老人家根本就不存在?)

第一个:最大的问题:: 软件工程是一个沙滩上造大楼的艺术活..(请参见我的另外一篇文章<< 2011年论计算机系统的未来发展方向 ――硬件篇>>) 任何一个方面的缺陷或bug 都会对软件造成很严重的影响.

第二个:待测试的项目太多了,相对而言,硬件需要测试的项目则要相对的简单的很多...只要测试几项.最多几十项..而软件则需要几百项,甚至上千项..项目越大,软件越复杂,待测试的项目就越多...而且往往随着复杂度和功能度的增长会成倍数增长.

第三个:软件工程多数属于项目型,软件项目具有一次性的特点..这样一来对应的软件测试项也是一次性的.测试不可重用,测试成本要相对高很多.

第四个:软件测试工具可重用的太少: 只有对那种泛化的.比如sql注入 等 非功能性的bug 有专门的测试工具,而这种测试工具往往也只能专门的针对一直或几种bug进行测试...相比较而言,硬件测试则要专业和可重用的多

第五个:通用软件测试工具太难写. 因为软件是需要计算机语言来写的.现在的计算机语言太多,对软件测试工具的发展来说是一个很大的挑战...不可能一个测试工具能完成所有语言的测试..

第六个:通用软件测试工具难与软件进行对接..虽然有.JUnit,NUnit 这种单元测试工具还需要软件工程师自己进行测试逻辑的编写...(我就不爱写测试逻辑,太麻烦!而且往往测试逻辑跟不上需求的变更.)

第七个:软件需求不稳定,测试也就不稳定..重新测试的几率太大,,人不是机器,不适合做重复劳动...而且有厌烦情绪...导致测试项不稳定...(经常会出现这种情况.. 我问:测试好了没? 弟兄们异口同声:"测好了,没问题!"  我心里那个无语啊...:"还不如不问,没问题就是最大的问题!!我那帮兄弟根本就没测, 当然这是态度问题,但是也是有原因的,谁想老是做重复劳动??反正我也不想测!")

第八个: 还没想到, 这个没想到不是我没想到,是测试人员没想到,还有这样的或那样的bug.....因为人不是神嘛,,是神也不一定,,根据推理他老人家不是也有缺陷嘛??他老人家肯定也没想到我们也会犯错..

第九个:真的暂时没想到..(想到后留个言哦,可惜凑不齐十个了)..

在需求稳定的情况下.根据以上九个问题,我们总结出来一个小结论,,

软件工程的质量难在 测试..

而现在的软件测试只有3种形式的测试,

一种是软件开发人员自己写的单元测试..

二是软件公司请的专业做测试的测试员,目前国内多数是女孩子做做手动测试..

三是外包给专业软件测试公司,,

也有一些软件测试工具比如,针对sql注入的扫描工具.防止死链接的扫描工具...

郑桂良 2012-1-6 

转载请挂俺的大名哦...