天津众齐软件股份有限公司 天津 300385
摘要:随着经济的发展,我国的软件行业的发展也有了一定的改善。软件是相对于硬件而存在的,硬件是可以直观感觉到、触摸得到的物理产品,软件则是逻辑的、知识性的产品集合,是对物理世界的一种抽象,或者是某种物理形态的虚拟化。软件是智慧和知识的结晶。软件工程学出现后,软件开发被视为一项工程,以工程化的方法来进行规划和管理软件的开发。统计表明。在典型的软件开发项目中,软件测试工作量往往占软件开发总工作量的40%以上。而在软件开发的总成本中用在测试上的开销要占30%到50%。
软件测试是根据软件开发各阶段的规格说明和程序的内部结构而精心设计一组测试数据,并利用这些测试数据运行程序,以发现程序错误的过程。按阶段进行测试(单元测试、集成测试、系统测试、验收测试)是一种基本的测试策略,在测试过程中应该依据每一个阶段的不同特点,采用不同的测试方法和技术,制定不同的测试目标。
单元测试是测试执行过程中的第一阶段,单元测试是对软件基本组成单元进行的测试,测试对象是软件设计的最小单元——模块,通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。进行单元测试的原因是:错误发现越早,成本越低,越到后期复杂度越高,发现解决BUG就越困难,成本也就越高。确保各单元模块被正确地编码是单元测试的主要目标,但是单元测试的目标不仅要测试代码的功能性,还需确保代码在结构上可靠且健全,并且能够在所有条件下正确响应。在单元测试中既会用到静态测试技术,有时也会运用黑盒与白盒等动态测试技术。
关键词:单元测试;软件测试;应用分析
引言
软件设计测试方法有各种技术。实践表明,使用每种方法均可设计出一组有用的测试方案,但没有一种方法足以产生一组完善的测试方案。对每种方法而言,均有自身特长,因而用一种方法设计出的测试方案对某些类型的错误可能容易发现,但对另一些类型的错误不一定容易发现。所以,在实际工作中,总是把它们结合起来使用,形成综合的测试策略,以满足不同测试阶段和不同程序的需要。不过,软件测试过程必须分步骤进行,每个步骤在逻辑上是前一个步骤的继续。大型软件系统通常由若干个子系统组成,每个子系统又由许多模块组成。大型软件系统的测试步骤基本由以下四个步骤组成:单元测试、集成测试(组装测试)、确认测试和系统测试。单元测试出于首要位置,显得特别重要。
1使用TDD测试驱动开发
测试驱动开发[1]是由Kent Beck倡导的一种以测试为中心的开发方法,它要求在开始编程之前首先编写测试代码,然后只编写使测试通过的功能代码,通过这种方式以测试驱动开发。这种方法使得代码的设计思路清晰、代码整洁,保证了其做且只做应该做的事。Kent Beck团队为此开发的xUnit测试框架使得该方法的使用更加方便。
在TDD开发中遵循:不可运行->可运行->重构的一个反复过程。首先我们编写测试代码,这时的测试代码是不可运行的,甚至于连编译都通不过,然后我们写最少的代码尽快让测试通过,为了让测试尽快通过我们甚至可以采用一些看起来不合情理的方法,然后进行重构,消除重复设计,优化设计结构,如此反复进行最终得到我们所需的整洁可用的代码。在这种开发方式生成的代码具有高的可维护性和较高的质量保证。
2应用分析
2.1静态测试
静态测试技术是单元测试最重要的手段之一,静态测试就是对软件的源代码进行研读,查找错误或收集一些度量数据,并不需要对代码进行编译和执行,适用于新开发的和重用的代码。主要有走查、审查和评审。
(1)走查。走查(walk through)是一种使用静态分析方法的非正式评审过程。
走查过程是由被指定作为测试员的小组成员提出一批测试实例,让与会成员充当计算机,对每个测试实例用头脑来执行程序,在纸上或黑板上监视程序的状态。大多数走查中,在怀疑程序的过程中所发现的缺陷比通过测试实例本身发现的缺陷更多。
(2)审查。审查(inspection)是一种正式的检查和评估方法。它是用逐步检查源代码中有无逻辑或语法错误的办法来检测故障,可以认为它是拿代码与标准和规范对照的补充,因为它不但需要软件开发者自查,而且要组织代码检查小组进行代码检查。检查过程所采用的主要技术是设计与使用缺陷检查表。首先由程序编写小组成员逐句阐明程序的逻辑,在此过程中可由程序员或测试小组成员提出问题,追踪缺陷是否存在,然后利用缺陷检查表来分析讨论。会议后把发现的缺陷填入表中交给程序开发小组。如发现重大缺陷,那么在改正缺陷之后,还要重新开审议会议。审查结束后要完成《静态分析错误报告》。
(3)评审。评审(review)通常在审查会后进行,审查小组根据代码审查的错误记录来评估该程序,决定是否需要重新进行审议。《静态分析错误报告》中必须写明错误的类型、影响域、位置和原因等,需交给程序编写者并同时存档。
3数据库测试
软件开发中比较流行分层架构,即将软件划分成多层,包括负责界面交互的表示层、负责处理业务逻辑的业务逻辑层、负责数据持久化的数据访问层。其中数据访问层中的DAO(数据访问对象)负责业务逻辑中对象的数据存取。数据的存取方案可以是多种多样的,但目前使用较多的还是关系型数据库。在这种关系型数据库做存储的系统中,DAO对象要负责和数据库管理系统进行交互。
单元测试中为依赖于外部系统的单元做测试是一件比较痛苦的事,为了消除这种依赖可以采用Stub或Mock技术,但如果要测试的对象就是DAO对象,这个问题就无法再回避。由于数据库是一个公共资源,如果测试过程中不加控制就很容易使其处于一种不可控的未知状态,使不同的测试之间相互干扰。为了在测试过程中始终保持数据库处于一种已知的可控状态,就要在DAO对象测试的过程中对测试数据库进行管理,为此在对DAO对象进行测试时要遵循以下过程:(1)对数据库当前状态进行备份;(2)为本测试准备数据;(3)进行测试;(4)将数据库恢复到测试前的状态。
目前比较成熟的数据库测试框架如:Dbunit,Unitils 等会提供的一些工具可以使我们更方便的完成数据库的备份恢复、测试数据的初始化等工作,从而使我们能够把更多的注意力集中在如何设计、编写单元测试和功能代码上来。
结语
以上测试方法各有所长,每种方法都可设计出一组有用的测试用例,用这组测试用例可以比较容易地发现某种类型的错误,却不易发现另一种类型的错误,因此在实际测试中,应结合各种测试方法,形成综合策略。单元测试的目的在于发现各模块内部可能存在的各种差错。测试的方法一般采用白盒法,以路径覆盖为最佳准则,且系统内多个模块可以并行地进行测试。单元测试强调细节;强调逻辑顺序;强调每个路径、接口和组织。
软件测试中单元测试首当其冲,但这是不够的,必须形成综合的测试策略,一般的做法是,用黑盒法设计基本的测试方案,再利用白盒法补充一些必要的测试方案。具体地说,可用以下策略结合各种方法:
(1)在任何情况下都应该使用边界值分析的方法。
(2)必要时用等价划分法补充测试方案。
(3)必要时用错误推测法补充测试方案。
参考文献:
[1]徐福祯.计算机软件测试方法及应用实践[J].信息与电脑(理论版),2018(02):14-16.
[2]朱冬玲.基于先进工作过程的软件测试课程教学[J].电脑与电信,2013(11):33-34.
[3]陈站华.软件单元测试[J].无线电通信技术,2003(05):50-51.