李慧珠
(北华大学师范分院,吉林市 132013)
2008年,北京奥运会门票面向境内公众第二阶段预售正式启动。上午一开始,公众提交申请空前踊跃。上午9时至10时,官方票务网站的浏览量达到了800万次,票务呼叫中心热线从9时至10时的呼入量超过了380万人次。由于瞬间访问数量过大,技术系统应对不畅,造成很多申购者无法及时提交申请。这个新闻从一定程度上反映出,奥运官方票务网站系统存在一定的缺陷。造成这一缺陷的主要原因就是本文所涉及到的“软件测试”技术。
“软件测试”技术在我国IT领域也属于一个新兴的部分,“软件测试”从目前发展来看已经不是以前单纯依附在软件开发过程中的一个可有可无的部分,而是发展到了一个专门的行业。尽管“软件测试”经过了几十年的发展,已经得到了长足的发展,但是与软件开发与日剧新的发展技术,可以发现“软件测试”的技术发展还是比较缓慢。软件开发技术的快速提高受益于计算机硬件高速发展、计算机编程语言和高级开发工具的创新,无论是开发效率还是工作上的效率都有了极大的提高。软件开发不再是早起的机器语言和汇编语言的开发方式,跨越了结构化的编程语言,进入面向对象的时代,开发人员的编程能力得到了极大的释放。“软件测试”技术,在工具上不断改善,但是没有创新革命性的发展。测试人员大部分还是要依赖手工的测试。“软件测试”技术受到越来越多人的重视,但大部分测试方法和理论还都是基于20世纪的研究结果。“软件测试”技术发展受到制约的另一个重要原因与企业对“软件测试”的资金投入也有很大的关系。根据CSIP在2007年的一个关于软件质量现状的调研分析报告指出:目前国内绝大部分的软件企业在软件质量控制方面,每年都会投入固定资金。但是投入的资金比例集中在全年研发或运维资金总额的投入还是偏低。
“软件测试”技术是软件质量保障的重要环节。软件测试人员除了需要针对软件进行测试,还需要掌握软件质量保证的相关知识。实际工作中,在很多软件企业中,软件质量部门的QA人员与测试人员是一体的。任何一种产品的好坏都是基于质量,软件作为一种特殊产品其质量也需要特殊量化处理。ISO组织关于质量定义:“一个实体的所有特性,基于这些特性可以满足明显的或隐含的需求。而质量就是实体基于这些特性满足需求的程度”。关于软件质量的定义可以看出软件测试工程师在测试过程中,应该善于从用户角度出发,设身处地为用户考虑,看用户需求什么,我们的软件系统能否很好的满足了系统软件用户的需求(包括明显的和隐含的需求)。
软件开发环节中最主要的软件质量活动包括软件质量保证和软件测试两个重要组成部分。软件开发企业中基本的软件质量组织一般包括软件测试部门和软件质量保证部门,也有的企业出于管理方便和资本控制角度考虑,将2个部门合并为一个部门。软件质量保证部门通常需要的工作内容包括:指导监督软件工程项目按照过程实施;对软件工程项目进行度量、分析,增加软件工程项目的可视性;审核软件产品,评价软件产品和过程质量目标的契合程度;进行软件工程项目的缺陷分析,缺陷预防活动,发现过程的缺陷,提供决策性参照,促进软件开发过程的改进。其中,软件质量保证和软件质量控制都对提高软件工程项目质量和竞争力不可缺少的管理办法。现在很多软件开发企业在这是软件质量保证部门,同时把软件测试工程师作为部门中的软件质量保证工作。这样也会有很多软件测试工程师误以为自己的工作就是软件质量保证工作,而实际上经验告诉我们,软件质量的保证不是能靠软件测试就能保证的。
软件测试是软件开发阶段完成后,只能保证暴露查出软件系统的缺陷,但是因为软件错误已经发生,因此对软件工程项目造成的损失是不可避免的。而真正软件质量要想得到有效的提高,需要从软件设计开始,需要从软件开发的缺陷中学习经验,找出并总结错误发生的原因,制定出相应的纠正预防错误,从而保证在相同或者下一个相同的软件开发环节不出现错误。以上这些就是软件质量保证和软件测试技术的区分。
“软件测试”技术从产生之日起就有着不同的理解。有认为“软件测试”是为了证明软件是正确的,也有认为“软件测试”是为了证明软件存在错误。“软件测试”技术的理解目前大多基于Glen Myers和Hetzel两位学者的论点。Glen Myers认为“软件测试”是为了发现错误而执行软件程序的过程,一个成功的测试可以发现迄今为止尚未发现的错误。而Hetzel的观点是认为“软件测试”技术是对软件建立信心的一个过程。对软件进行的测试越多、越充分,人们对使用该软件的信心就越强。“软件测试”技术也存在两面性,按照测试目的分类:一类是为了验证程序能正常工作的测试。一类是为了证明程序不能正常工作的测试。软件测试工程师要验证软件程序没有缺陷需要有一定依据。而证明软件程序不能正常工作就很容易了,只要查找出软件程序的错误,就证明软件程序是错误的。但是,想要找到软件程序所有的错误也是不容易的事情,因为软件程序错误会随着程序的修改变的越来越少,同时也会变的越来越隐性,难以发现。
“软件测试”技术在快速开发中,很少有人提出来广泛讨论。“软件测试”技术是一种服务,软件测试工程师对软件产品进行学习探索,这样可以给软件开发提供一个良好的决策方向。
在软件测试中,需要遵循的原则:
1、Good enough原则
2、Pareto原则
3、尽可能早开发原则
4、在发现比较多错误的地方需要投入更多的测试
5、同化效应
“软件测试”是一门需要终身学习的学科,早起的“软件测试”雏形就是在软件开发过程中的软件调试。软件工程师通过在代码中设置断点,变量在内存中变化信息来判断软件程序是否工作正常,现代的高级软件开发工具中依然保持了这种传统方式。现代软件快速开发技术中的单元测试需要自己写测试过程。白盒测试技术也是早起的一种“软件测试”技术,白盒测试技术在一些不能轻易运行程序来实验的程序有很大的帮助。随着网络技术的发展,软件从单机发展到基于网络互助工作模式,这样的条件下促进了新的“软件测试”技术的出现。软件测性能测试、压力测试也突显出重要性。近年来的黑客时间经常出现在媒体的报道中,“软件测试”中的安全测试技术也越来越重要。
在很多情况下,有一些人认为“软件测试”技术没什么技术含量,甚至是可有可无的软件功能,只要懂得使用就行了。很多软件测试工程师喜欢讨论黑盒测试和白盒测试的区别,这点也体现在一些软件企业在招聘软件测试工程师的过程中。黑盒测试定义是:把软件产品当成是一个黑箱,这个黑箱有入口和出口,测试过程中只需要知道网黑箱输入什么信息,知道黑箱输出什么信息就可以了。不需要了解黑箱里面具体的运行过程。黑盒测试方便了软件测试工程师,使其不用去了解和学习软件程序的功能和结构。测试人员只需要向用户那样操作软件程序就可以了。例如,银行的存储系统在测试的时候就可以采用黑盒测试方式,不考虑内部结构代码,只要保障系统工作正常就可以了。但是如果只从用户角度考虑软件的操作测试能否保证安全么?答案是很明显的。黑盒测试就存在一定的安全隐患。对某个针对安全性要求比较高的系统软件来时,软件开发人员在设计程序的时候会考虑到记录系统日志,在软件运行过程中的重要系统参数记录在系统日志中。以保障系统的测试能够得到内部的更多可靠数据。这中观察内容运行数据的测试方式就不属于黑盒测试的范围了。白盒测试的定义是:一种以理解软件内部结构和程序运行方式为基础的“软件测试”技术。通常需要跟中调试一个输入信息在软件程序中经历了哪些处理过程,这些处理过程是否正确响应。在一些软件测试工程师中对白盒测试看法是认为白盒测试只有非常了解代码的测试人员才能做的。但是根据定义来看有些白盒测试不需要软件测试工程师对代买有多少了解,使用一些专门的软件测试工具可以帮助获取软件程序内部信息。在实际工作测试中,应该综合应用黑盒测试和白盒测试,按照实际情况采取不同的测试组合技术达到最优测试结果。
手动测试和自动化测试是“软件测试”技术的两种方向。本文不讨论两者的区别,孰优孰劣。关键是在合适的情况下采用合适的测试手段。自动化测试技术是“软件测试”中为了提高测试效率的一个发展方向,随着软件技术的高速发展,“软件测试”工具软件也有这创新性的进步,软件测试工程师利用测试工具软件来完成一些重复性的工作。软件测试的一个重要特征就是重复性,重复性的工作容易是测试人员产生厌倦的心理。自动化测试方式就可以很好的解决这个问题。手动测试效率方面不如自动化测试,但也有着不可替代的测试技术。由于测试人员具有很强的智能化判断,相对于自动化测试的工具是机械的,缺乏思维逻辑的测试方式。测试用例的设计方式上:软件测试工程师的经验和对软件Bug的预判能力是自动化测试不可替代的。界面和用户体验的测试:人的主观审美和心理体验是自动化测试不可替代的。但是自动化测试有着自己很强的优势,自动化优势借助了计算机的能力,可以不断重复工作,保证对大数据的精确计算。
“软件测试”技术的发展一定是伴随着软件开发技术的发展,现在的“云”技术和“大数据”技术也同样在促进新的“软件测试”技术。“大数据”技术是现在炙手可热的技术,从一个角度来说它是软件开发中的一个重要技术。“大数据”技术也在很大程度上跟软件质量和软件测试有着很大的关系。传统的软件测试流程是:设计测试用例;自动化测试;运行测试;对比测试值和实际值得到相应结果。在大数据和云计算的大环境下这样的测试流程可能面临着很大的隐患。基于云计算和大数据环境下的软件测试意味着可以降低硬件投入成本,测试软件环境投入成本以及软件程序生命周期的运维成本。在云存储下,有很多资源可以直接用于“软件测试”。
[1]聂长海.关于软件测试的几点思考[J].计算机科学,2011,(2).
[2]张新华,何永前.软件测试方法概述[J].科技视界,2012,(16).