由 扬
[摘要]软件开发过程必须伴有质量保证活动,而软件测试是最至关重要的质量保证活动,使质量控制的最重要手段[1]。从软件加密,数据加密,性能问题,极限业务数据测试,精确度的测试,临界值的测试,测试的目的等几个方面分析软件测试的重要性。
[关键词]软件开发软件测试
中图分类号:TP3文献标识码:A文章编号:1671-7597(2009)0820041-01
我认为,软件测试不只是简单的找出程序中的Bug,而是通过测试,能够合法的面向市场,并且有更强大的生命力在市场中生存下去。如何才能更好的生存下去呢?于是引出一个话题:
一、软件加密问题
软件加密这个范围有点大,涉及面也比较广,很多人就想不到软件测试与软件加密会有什么关系,当然每个人的水平不同,所能想到事情的深度与广度也不同。我举个很简单的例子,比如说某些商用软件,必须要会员注册后才能正常使用的,当然了注册是需要花费一定的金钱的,这样从事软件开发的公司才会有利润的回报。如果这款很受欢迎的软件在面市第二天,就被高手给破解掉了,也就是成为了目前网上所说的破解版,绿色版,并且破解后,软件原有的功能完全能正常使用,那么,你想想,还会有人花钱注册正版软件吗?当一款软件失去了大部分客户群体时,这个软件虽然还有人在使用,但是,它已经注定会慢慢的被“市场先生”无情的淘汰。至于软件如何加密/解密以及测试方法,不是本文涉及的内容,就不多说了。在此只是说明,通过软件测试,提升软件自身的加密程度,是非常重要的。
二、数据加密问题
数据的加密与软件测试又有什么关系呢?在这个通信技术飞速发展的年代、网络无所不在的年代,如果数据加密不严格,导致数据流失,会造成多么大的影响呢?
第一是客户信息方面的泄漏。如果客户的个人信息,比如说联系方式等数据流失出去,那么你的客户,很可能会接到一些骚扰电话,收到一些烦人的垃圾信息,这还是小问题,如果因为数据的流失导致客户被一些犯罪份子敲诈勒索,那么,软件开发公司是需要负法律责任的。
第二是这一套软件系统本身的数据泄漏。如果有一些与软件本身相关的数据泄漏,你的一些竞争对手就要偷笑了。他们完全可以从这些数据中,分析出这套软件的开发思路,以及你们公司的软件开发、设计思路,从而在以后的竞争中轻易的将你击败。因此可以得出结论,如果软件测试过程中,忽视或是轻视了数据加密深度的问题,很可能在不久的将来,造成软件开发公司被迫面临倒闭。
三、性能问题
一个合格的软件,并不是完成客户所有的需求,就OK的。比如一个在线购物的网站,一千人同时在线交易,没问题,两千人时就有点迟钝,达到五千人时,整个网站就崩溃了,这肯定是不行的。当然了,这只是单纯的从运行效率上阐述这个问题的。除此之外,还应该考虑到操作性是否合理的问题,网络购物的客户,无非就是想图个方便,如果一个网络购物的网站,操作流程比直接去商场购物更加复杂,更加的浪费时间,那么,是否应该把这种情况定性为“可操作性差”呢?假如说,运行通畅了,操作流程也简单化了,那么,是否应该考虑软件的可移植性问题?是否存在在windows系统下运行完全正常,在Linux系统下就根本无法正常运行的情况呢?
四、极限业务数据测试
有开发经验的人都知道,一个软件系统前台界面,输入的数据,在后台都是用一些变量进行存储的。首先,根据不同的业务需求,软件开发人员对应的选择一些合适类型去定义这个变量,比如说:整型,单、双精度型等。不同的类型,能存储的数据长度也是不尽相同的。假如说,A类型的变量,最大能存储的数据长度为10个字节,但是从业务逻辑来讲,最大出现的数据也就是9个字节的长度。按照正常的业务处理来说,本系统是不会出现问题的。但是,万事总有些考虑不周全之处,突然有一天,出现了一笔意料之外的业务定单,出现了10个字节以上的数据,这样就完全可以很轻松的令整个软件系统崩溃。
五、精确度的测试
第一,依据上文,因为可以用不同类型存储数据,导致了某些本应该相等的数据,在一定的情况下,出现了不相等的逻辑假象。比如说:0与0.00。这两个数据,在网络传输的过程中,如果是按照字符串的形式来传输的,那么他们两个是不相等的。如果用不同的数据类型保存后,然后转成同样的数据类型,再进行比较,又变成相等的。
第二,因为不同的类型的精度不同,在大量的数据计算过程当中,导致数据的丢失,以致不能得正确的结果。举例说明,A类型精确度为小数点后两位,B类型精确度为小数点后四位。那么以A类型定义的变量与B类型定义的变量分别存储相同的数据0.4501,那么存储后得到的结果分别是A=0.45,B=0.4501。表面上看,A与B的结果相差只有0.0001,但是想想,如果有一百万条这样的数据进行加法运算,那么最后得到的结果相差是多少?对于某些系统而言,这样小小的差距,绝对是致命的。比如说:科研相关方面的系统,银行方面的系统等等。
六、临界值的测试
举个典型的例子,数值:0。经常有些业务用这个数值来做判断。比如说,注册申请时,数值大于0时表示“申请成功”,否则表示“申请失败”;软件的版本控制时,数值等于0表示“试用版”,否则表示正式版等等。于是,对于软件开发人员而言,对于存在这些业务的测试时,经常需要考虑以下五个测试点:0本身;极近值,正数1(+1),负数1(-1);极远值。比如说,正数9999999999,负数9999999999。如果临界值没有严格的进行测试,那么如果软件开发人员,把A>=0写成A>0,这样的话,本来一个合法的数据0,变成了非法数据,从而得到了错误的结果。以此,也体现了临界值测试的重要性。
七、测试的目的
有人说,测试的目的,无非是找出系统中存在的Bug,这有什么难的。此话不然。如果真是这么简单,那岂不是非计算机行业的人士,也可以过来做测试?那还要专业的人士做什么呢?我个人认为,软件测试的目的,找到系统中存在的Bug,那只是最基础的工作,把系统中表面的、隐藏的Bug全部清理掉之后,应该进一步的考虑一下,系统是否真正的合理。理论来讲,任何事物的存在,都有其不可避免的缺陷存在。所以,我们需要通过测试,尽量的减少系统的缺陷,或是减少一些相对比较大的缺陷的存在,这也就是所谓的“缺陷测试”。
软件测试技术,因为软件开发技术的快速更新,而需要不断提升测试技术与理论,才能真正的完成测试任务及使命[2]。软件测试工作看上去简单,而实际上,并不是所有人都能很好的完成的工作,是一个需要不断总结的工作,是一个需要不断提升技术才能灵活掌握的工作。
软件测试工作,绝对不简单。
参考文献:
[1]佟伟光,《软件测试技术》,人民邮电出版社,2005年7月,10-11.
[2]郭耀,软件测试实践:成为一个高效能的测试专家,清华大学出版社,2008.11.21.
[3]郭耀,软件测试:跨越整个软件开发生命周期,清华大学出版社,2008.8.22.