柏文琦
(湖南省计量检测研究院,长沙 410014)
随着信息科学的快速发展,特别是计算机技术在各行各业逐渐得到普遍的应用。在现代社会中,人们在生活、劳动、科研及教育等众多领域都引入了计算机软件,且对其的依赖性越来越强。同样,在现代计量检测工作中,计算机技术与很多计量仪器的结合,开辟了全新的、先进的工作方法和研究领域。在实际的计量工作中,计算机软件已经成为一种智能的、自动化的计量仪器。然而,由于软件是由人来设计开发的,其实际功能不可能完美无缺,一些人为的错误或疏忽不可避免,导致计算机软件在实际的应用中可能会出现这样或那样的错误,给生产生活造成不必要的麻烦,甚至是无可挽回的经济损失。因此,在软件投入使用之前应对其进行认真、科学和全面的测试,尽早发现软件中的缺陷,并采取措施对其进行改进,避免将软件的错误带入实际的生产、生活中。通常来讲,在软件开发的总开销中,软件测试开销将达到30%~50%,若再加上软件投入使用后,由于软件本身的缺陷而导致的软件维护开销,软件开发将会有40%以上的成本和时间要花费在软件测试上,在一些极端的情况下,软件测试的费用甚至会超出软件开发其他步骤费用总和的若干倍。由此可见,软件测试在软件开发过程中具有非常更重要作用,特别是将计算机软件应用于计量测试这样对准确度要求较高的量化工作领域时,软件测试的地位就显得更为重要了。
在计量工作中,科学仪器具有非常重要的作用,通常一流的科学研究往往都依赖于一流的科学仪器。随着计算机科学技术的快速发展,人们已经逐渐接受这样的一个事实:“计算机软件就是仪器、就是设备”[3]。从仪器操作人员的角度来看,所有的操作过程直接接触的不再是传感器、电流、电压等客观物体或参数,而是变成了触摸屏、选择菜单、按钮等事先由软件设置好的程序,以前计量测试过程中所用到的传感器、电桥等都被封装在软件的背后,使操作人员无需也无法知道传感器的反馈电压是多少等等这类信息,软件自动的将这类信息转换成我们能读得懂的形式展现,软件就像外衣一样包裹着仪器。
近年来,随着计算机技术的应用领域不断拓宽,软件应用规模的不断扩大及复杂性的不断增加,ISO、ANSI及IEEE等众多关于软件测试和质量控制的国际标准相继问世,使软件测试和软件质量得到了广泛的关注。人们逐渐意识到软件测试不单单是发现错误,还应包括对软件质量的评价,是保证软件质量的重要手段。2004年,IEC和ISO的第一联合技术委员会在软件工程标准术语中将“软件测试”定义为:是为标识软件问题及缺陷,评价并改进软件质量而进行的活动。即软件测试并不仅仅是单纯找出软件系统的错误,还要包括对缺陷的评价以及如何改进,因此测试是一个贯穿于软件开发过程始终的、科学的质量控制过程。
传统计量测试是对某个系统进行测定,判断其性能是否满足需求,或者确定实际结果与预期结果之间的差别,与软件测试技术的主要区别在于测量的对象不同。因此,软件测试是传统计量测试的拓展与延伸,是现代计量技术的重要分支。计算机技术与传统计量测试技术的交叉融合构成了现代软件测试技术的基础。
由于软件开发各个阶段工作的复杂性与多样性,及各阶段工作人员间工作的配合关系,使得开发的每个阶段都可能有错误产生。因此软件测试不是软件开发过程中的某个独立的阶段,而是贯穿于软件开发各个阶段的一个过程,应坚持在各个阶段进行详细的测试及技术评审,尽早发现并预防错误。软件测试的W模型能够具体地表现出软件测试与软件开发的同步性,如图1所示。
完整的测试用例包括测试的输入数据和这些输入数据所对应的预期输出结果。在设计测试用例时,还应考虑其合理及不合理的输入条件。在软件设计的合理范围内能够验证软件的输入条件是合理输入条件;在软件设计的合理范围之外的、临界的、异常的输入条件是不合理输入条件。用不合理的输入条件对软件进行测试能够检测软件的完整性及容错能力,常常会比合理输入条件发现更多、更全面的错误。
图1 软件测试的W模型
由于在软件开发中,可能会由于对问题的说明不清或表达有歧义而引起误解,导致错误,这种情况一般开发人员自己很难发现。另外从心理角度来讲,开发人员一般都不希望自己的程序会出错。因此,软件测试工作一般应由开发组成员以外的工作人员来完成,这样会更有效、更客观。
软件测试方法可以分为静态测试和动态测试两大类。
3.1.1静态测试
静态测试主要是对被测软件进行特性分析,要是手动测试,采用不在计算机上运行被测试的软件的其他手段达到测试目的。静态测试能够有效地发现软件中30%~70%的编码错误和逻辑错误。
3.1.2动态测试
动态测试需要在计算机上运行被测试软件,通过输入相应的测试用例,判定执行结果的合理性,对被测软件的可靠性、有效性及正确性进行判断。动态测试包括“白盒”测试和“黑盒”测试2种方法。
1)“白盒”测试主要从细节出发进行测试,为检查被测软件的分支及循环的有效性,为每条逻辑路径分别设计测试用例。一般选用最有效,即产生错误的可能性最大的路径进行测试,因此,在“白盒”测试中,合理地设计测试用例是至关重要的。
2)“黑盒”测试主要从整体出发,在软件界面上进行软件测试,并不考虑软件的处理过程及内部结构。其作用是判断被测软件的功能是否具有可操作性及有效性,即软件是否能够正确接收数据,并输出合理的结果等。
在实际进行软件测试时,应在不同阶段为找出不同类型的错误而合理地选用“白盒”测试和“黑盒”测试,二者应相互补充,而不能相互替代。
此外,根据测试的自动化程度,还可将软件测试分为自动测试和手动测试。软件测试最初都是手动进行的,随着软件规模的不断增加,自动测试逐渐凸显出其优越性,而渐渐被广泛认可。软件自动测试效率高、开销低、还能完成手工测试难以实现的测试。
软件测试过程一般包括以下4步:单元测试、组装测试、确认测试及系统测试,图2给出了简单的测试流程图。
图2 软件测试流程图
3.2.1单元测试
单元测试是根据设计要求,对被测软件的每个功能对应的独立程序块进行测试,通过对各个单元进行检查,判断该功能能否满足设计需求。一般在某一程序模块的编程完成后,直接由程序员进行相应的单元测试,往往采用“白盒”测试的方法对程序内部结构进行检查,重点发现代码的编写错误,并加以解决。
3.2.2组装测试
单元测试成功完成后,在将若干程序模块组装成系统时,对各模块间的接口及通讯进行的检查称为组装测试。一般有两种方法:增式和非增式方法。把待测试的模块组装到已测好的模块组上进行测试的方法为增式方法;把所有已通过单元测试的模块组合成整个系统,然后再对该系统进行统一测试的方法为非增式方法。一般在基本完成了软件开发编码工作后,由负责不同模块的开发人员一起完成组装测试。
3.2.3确认测试
确认测试也可称为有效性测试,主要用来验证软件的配置是否合理、软件功能是否完善以及性能是否满足用户的所有需求。系统测试通常根据软件需求说明书,通过黑盒测试法进行测试,在实际测试过程中,将通过确认测试的软件与支持软件的数据、计算机硬件、外设及相关人员等结合在一起,通过实际运行对整个系统进行测试。通常应有最终用户代表进行实际的系统测试。
现代计量技术及计算机技术的发展与应用,使得软件测试技术越来越广泛地应用到生产生活的各个方面。但在我国的计量领域,软件测试技术的发展还很落后,这就需要相关工作者认真研究、努力创新,争取为计量工作及软件测试工作开拓出新的局面。
[1]薛赛男,赵伟.软件测试技术——计量测试技术的新领域[J].计量技术,2003(5)
[2]厨煜,周国庆,奚文骏.软件测试技术概述[J].中国测试技术,2005,3(3)
[3]黄俊.浅谈具有计量特色的软件测试人才培养[J].计算机教育,2008,18:070
[4]聂长海.关于软件测试的几点思考[J].计算机科学2011.02(11)
[5]薛冲冲,陈坚.软件测试研究[J].计算机系统应用.2011(2)
[6]张云岗,刘春茂.软件测试技术浅析[J].技术与市场.2011(2)