单元测试方法范文

时间:2023-04-05 04:59:53

导语:如何才能写好一篇单元测试方法,这就需要搜集整理更多的资料和文献,欢迎阅读由公务员之家整理的十篇范文,供你借鉴。

单元测试方法

篇1

关键词:遗传算法;模拟退火算法;自动化;单元测试

中图分类号:TP311.53

随着计算机技术的发展,计算机智能技术也逐渐得到了开发应用,生物智能、人工智能以及算计智能的联合应用和优势互补,使智能技术的应用更加有效。随着计算机的普及,软件产品已经深入人们生活工作的各个领域,成为日常工作、生活、娱乐的必不可少的组成部分。而对于软件安全性能的要求则在很大程度上促进了软件测试的发展。软件测试是软件安全性能和良好的使用性能的重要哦保证,贯穿于软甲开发过程的始终,保证软件开发每个阶段的质量。

软件的质量需要经过软件功能测试才能得到保障,而单元测试则是软件功能测试的基础和前提,是软件测试的起步环节。单元测试针对的对象是程序中最小的软件模块,一般是软件开发人员通过编写小段代码,针对被测试代码的某个较小较明确的功能进行测试,看其是否可以正常运行。

1 参数化单元测试

单元测试作为软件测试的起步环节,同时也是不可或缺的环节,对软件的质量起着至关重要的作用。在实际测试中,单元测试代码的手动编写工作是一件极其复杂且耗时的工作,并且所选测试实例不能保证覆盖较大的代码,具有很大的随机性,进而降低单元测试的效率。

参数化单元测试将程序规格与测试用例生成分离,解决了传统单元测试存在的弊端。运用参数化单元测试方法,程序要实现的功能需要人工书写代码,然后测试工具就会通过对测试代码的分析和检测,自动根据测试的实际路径生成对应的实例和测试代码,实现代码的高覆盖率。

2 基于遗传算法的搜索策略

在退火算法的运行过程中溶入遗传算法,称为退火遗传算法,依旧是说,所谓的退火遗传算法,实际上是由退火算法和遗传算法两个部分组成,结合双方各自的优点和特性,所得到的新的综合性计算方法。

2.1 遗传算法依据

遗传算法的提出源于计算机发展初期提出的所谓“人工进化系统”,它是根据生物进化的特点,借鉴优胜劣汰的自然遗传法则,参照达尔文进化论的理论思想而形成的一种不依赖具体问题的直接搜索方法,在运用遗传算法进行数据计算时,不仅要用到进化学的概念,同时也要符合遗传学说的基因遗传原理。

运用遗传算法进行计算时,一般要经过几个基本步骤,即:初始化数据、数据的择优选择、随机对选中的两个数据进行交叉互换、根据遗产学说的基因变异原理所进行的个体数据变异、全局最优收敛,进而得出需要的结论或数据。

2.2 模拟退火算法依据

模拟退火算法是根据固体退火过程和组合优化问题之间的相似性而提出的。在对物质进行加热处理时,物质组成中粒子之间的布朗运动加强,当加热到一定程度时,温度达到物质熔点,固体物质会转化为液体形态。这时,对物体进行退火处理,使温度降低,则物体的粒子运动减弱,并且会逐渐趋于平衡和有序,最终达到物质性质的稳定。

模拟退火算法运用温度参数进行控制,当温度较高时,数据运动变化剧烈,从而使解的区间变化较大,容易接受到较差解;当温度降低,数据运动逐渐减缓时,解的区间也会逐渐趋于稳定,这时候就可以得到较为优良的解果,从而对遗传算法的不足进行弥补。

2.3 退火遗传算法依据

退火遗传算法,是指以遗传算法为主要运算方法,并在运算过程中引入模拟退火算法,使两者达到优势互补,进一步对群体进行优化调整。退火遗传算法可以分为两个组成部分:首先,运用遗传算法的进化理论,产生一个相对较为优良的群体,然后利用模拟退火算法,对群体中的个体进行优化和调整。

(1)针对遗传算子进行改进

所谓遗传算子,是指在遗传算法中,用来维持遗传多样性所使用的算子,遗传多样性是生物或数据演化过程中不可或缺的一个必要性质,遗传算子在遗传算法中类似于自然中的适者生存原则,对于个体的进化会产生巨大的影响。

初始进化阶段,为了保持种群的多样性,便于从中进行选择,应该加大对于个体间相互交叉和互换的概率;在进化的终极阶段,频繁的交叉互换不利于种群的稳定和最优解的产生,因此需要适当地减小个体间的联系和活动,减少最优解的求解难度,缩短求解过程。针对种群中的个体而言,在进行变异操作时,对优势个体进行较小的变异,劣势个体进行较大的变异,可以使其更加趋近于最优解。

(2)合理构造适应值函数

适应值函数可以针对遗传算法的求解过程进行指导,对最优解的数值区间进行限定,在适应值函数的构造过程中,引入关键分支的概念。关键分支,指在选定的路径中,对存在的结点的真实性进行判定,求解过程可能会在这些结点处产生偏离,引发错误,而这些会导致求解过程偏离目标路径的结点,就是关键分支。

适应值函数在遗传算法中是用来区分个体优劣的标准,是进行自然选择的唯一依据。原始适应值函数是对问题最初求解目标的反映。适应值对个体的判断有两个截然相反的情形:适应值越大,个体性能越好和适应值越小,个体性能越好。在遗传算法中,对适应值函数是有限制的,即适应值函数必须为非负数,这就需要选择较大的适应值函数来选择较为优良的个体。

为了使被测数据中每个参数都可以得到评估,根据相关数据对判断结点进行数据转换,在保证个体数据得到充分计算的情况下,不会对程序主体造成破坏

3 实验结果与分析

为了对退火遗传算法的性能进行验证,采用判断三角形的相关测试程序,将退火遗传算法与单纯的遗传算法进行对比,对进化每一代的最大适应值进行记录。

从实验数据可以看出,初始进化阶段,个体的产生具有随机性,在对实验进行多次运行后,可以看出,最高适应值之间差异十分明显。进化过程初期,两种算法的最高适应值都存在较大的波动,而随着遗传的不断进行,退火遗传算法的最大适应值范围逐渐趋于稳定,而遗传算法的最大适应值范围仍不稳定。因此可以得出结论,将模拟退火算法与遗传算法相互配合,可以有效避免单一遗传算法的不足,加快对最优解的计算速度,减少计算所需时间。根据实验的数据,对多次实验的结果进行统一总结,可以看出,相对于单一的遗传算法而言,退火遗传算法的进化速度大大加快,减少了计算时间。

4 结束语

经过实验和分析,我们可以看到,生成高代码覆盖率的测试用例是自动化测试的关键问题,是提高自动化测试性能的主要手段。针对遗传算法存在的缺陷,将遗传算法和模拟退火算法相互结合,实现优势互补,针对群体数据中的遗传算子以及适应值函数作出改进,最终通过对比实验,验证了退火遗传算法的有效性和优越性。

参考文献:

[1]赵慧娟,孙文辉.基于退火遗传算法的单元测试方法[J].计算机工程,2013,39(1):49-53.

[2]杨学红.自动化单元测试概述[J].信息通信技术,2012,(1):66-68.

篇2

关键词关键词:软件工程;软件质量;单元测试;测试框架;面向对向程序

中图分类号:TP302 文献标识码:A 文章编号文章编号:16727800(2013)008004503

0 引言

随着现代软件工程的不断发展,人们对软件质量和生产力的要求越来越高。软件测试技术和框架复用技术作为提高软件质量和生产力的有效手段,近年来倍受人们的重视。

传统的“黑盒”、“白盒”测试技术主要应用于面向过程的程序设计中。随着面向对象技术的发展,这种技术已不能满足软件测试的需要。自动化单元测试框架应用于面向对象单元测试中,通过它来实现单元测试自动化。

单元测试是对软件进行正确性检验的测试工作,是软件设计的最小单位。单元测试的目的主要是发现每个程序模块内部可能存在的错误。程序员的基本职责是单元测试,单元测试能力是程序员基本能力的体现,程序员必须对自己所编写的代码认真负责,软件的质量与程序员的工作效率直接受程序员单元测试能力高低的影响。

单元测试是一项很重要而且必要的工作。在实际工作中,许多程序员并不愿意对自己编写的代码进行测试。软件开发的工作压力大,大多数程序员们因为没有时间测试自己的代码,使程序的代码质量得不到保证,有些代码还需重新编写,程序员根本没有时间对代码进行测试。自动化单元测试框架能够从根本上解决这个问题,它可以使测试工作变得简单,这样更有助于程序员进行代码开发工作。

1 自动化单元测试框架设计目标

自动化单元测试框架的设计应达到以下目标:首先,框架简单,可以使测试程序的编写更简化。框架使用常见的工具设计,测试工作操作简单;其次,测试框架应能够使除作者以外的其他程序员进行代码测试,并能解释其结果,即将不同程序员的测试结合起来,且不发生相互冲突。最后,测试用例可以复用,可以以现有的测试为起点形成新的测试。

本文将以这些目标为指导,讨论如何用以Kent Beck和Ralph Johnson提出的“模式产生体系结构”的方式来设计框架系统。自动化单元测试框架的设计思想是从0开始根据设计问题应用设计模式,一个接一个逐步设计,直至获得最终合适的系统架构。其中实现部分采用Java语言来实现,并会使用UML图来表示各种类及类间关系。

2 面向对象自动化单元测试分析

自动化测试定义为:管理与实施各种测试活动,包括开发测试脚本、执行测试脚本,这样使验证测试需求更加方便,通过这些脚本实现了自动测试,可以把它称为自动测量工具。使用这种自动测试工具对增量软件集成测试提供了巨大的方便,增加了巨大的价值。每一个新的构件可以重用先前开发的测试脚本,即使需求和软件有变更,作为一个重要的控制机制,自动测试也能够确保每一次重新构建的稳定性与准确性。

3 面向对象自动化单元测试框架

自动化测试框架实质是一种自动测试工具,单元测试的核心问题是实现测试自动化。一个完整的自动化测试过程通常包括5个测试活动,分别是测试标识、测试设计、测试实现、测试执行与评估。测试用例针对被测试系统的各项功能准确地开发与设计,而且每一个测试用例都要按顺序执行这5个测试开发活动,测试开发活动如图1所示。

图1 测试活动

测试标识与测试设计这两个测试活动主要为智力活动,分别标识测试条件和设计测试用例。测试执行与测试比较这两个活动属于比较机械的活动,它们的功能分别为:执行测试用例、将测试输出结果并与期望输出结果值相比较。前两个活动决定了测试用例的质量,后两个活动适合自动化。在单元测试中,测试执行和测试比较这两个活动要重复多次,测试标识与测试设计通常只执行一次。因此,在单元测试过程中,重复性的活动特别需要自动化执行。

4 自动化单元测试设计与实现

首先构建对象来表达基本概念:Test Case(测试用例),然后将对象发送到测试框架,再由测试框架执行,最后报告测试结果。

采用Command命令模式将一个请求封装成一个对象,Command模式可以为每一个操作生成一个与之对应的对象,同时能够给出一个对应的执行方法。这样可以对多个用户请求进行排队,也可以将多个请求记录到日志,并使用不同的请求对客户进行参数化。具体实现方法如下:

其中的run()方法为模式中的执行方法,可以通过继承来重用该类,为了便于在测试失败时能够识别出失败的测试,每一个Test Case在创建时都要给出与之对应的名称,这样即可判断出失败的测试。

图1展示了测试框架组成部分的快照,也展示了应用于TestCase中的标记。

图1 测试框架组成部分

5 单元测试用例执行流程

在实际测试过程中,构造参数或资源、测试、释放资源为测试的业务逻辑过程。例如,在测试数据库的插入、更新、删除、查询等操作时,首先要对数据库进行连接,然后测试,最后释放连接。这样,在一个Test Case中有多个测试,需要反复书写代码,这增加了测试人员的工作量,不符合设计目标。

建立测试支架即为所有的测试建立一个共同的结构,可以解决以上问题,初始化代码、测试代码和释放资源的代码均放在测试支架上,每次运行测试代码之前,首先都运行初始化代码,最后运行释放资源代码。这样,每一个测试都会和与之对应的支架一起运行,而且测试结果互不影响,每一个结果都不会影响其它的测试结果。这样便实现了代码的复用,大大提高了软件单元测试的工作效率。

以上通过模板方法实现,模板方法的Template Method静态结构如图3所示。

其中,setUp方法初始化测试信息,如数据库的连接,cleanUp方法的功能是测试结束后释放资源。runTest方法的功能是进行测试业务逻辑。TestCase的方法的功能为进行测试逻辑框架的设计,run为模板方法。在这里,setUp和cleanUp可以被用来重写,由框架来进行调用。

6 测试结果收集

创建对象TestResult来收集运行的测试结果,实现代码如下:

UTF使软件开发者们更愿意接受测试代码的工作。有种种好处:UIT使测试用例的实现简单、一致且模块化;测试实现与执行的特性支持迭代、增量开发;重新运行测试包的便利使高频率的回归测试成为可能;同时它还能保证单元测试的持久性。此外,单元测试框架UTF也是可扩展的,例如,利用Decorator模式,可以不断向UTF添加新的功能;TestResult类也是框架的一个扩展点。客户能够自定义它们的TestResult类,例如, HTMLTestResult可将结果上报为一个HTML文档等。

参考文献参考文献:

[1] (美)普雷斯曼.软件工程:实践者的研究方法[M].北京:机械工业出版社,2011.

[2] (美)麦格雷戈.面向对象的软件测试[M].北京:机械工业出版社,2002.

篇3

关键词:Testbed/Tbrun;软件单元测试;嵌入式软件

中图分类号:TP311 文献标识码:A 文章编号:1009-2374(2013)18-0027-02

嵌入式软件作为嵌入式系统的重要组成部分,嵌入式软件质量问题可能会带来设备的损坏和人员的伤亡,因而用户对其质量有较高的要求。软件测试是对软件质量检验的一个非常重要的手段。而软件测试中动态测试最基础的测试就是单元测试。如何开展单元测试以及如何提高单元测试的效率是一个值得研究的问题。

1 软件单元测试的要求及重点

软件单元测试是对软件基本组成单元进行测试,测试软件单元是否正确地实现规定的功能,是否满足软件性能和接口要求。并验证程序与详细设计说明的一致性。因此在单元测试时,需要模拟被测单元与其他模块之间的交互,开发驱动模块和桩模块两种辅助模块,构建一个可执行的环境,驱动模块用于模拟被测单元的上层模块,测试执行时由驱动模块调用被测单元使其运行;桩模块用于模拟被测单元在执行过程中所调用的模块。

单元测试重点考虑的测试类型有:(1) 接口测试。接口测试主要检查实参与形参的数目是否相等、实参与形参的属性是否匹配、实参与形参的单位是否一致、传到被调用模块的实参的属性是否与形参的属性匹配、是否把常量当作变量传递等内容。(2)功能测试。功能测试主要是对照软件单元的设计说明,验证软件是否完成了所需的功能。(3)重要执行路径测试。应设计测试用例以发现错误的计算、不正确的比较和不正常的控制流向等错误。在计算中比较常见的错误是:误解或错误处理算术运算的优先次序、混用不同类的操作、计算精度不够等。另外在控制软件执行流程的比较操作中比较常见的错误有:不同数据类型的比较、不正确的逻辑操作符或不正确的优先次序、因精度不够使本应相等的数不相等(如浮点数)等。(4)软件单元的局部数据结构测试。软件单元的局部数据结构是一个主要的错误来源,应设计测试用例来发现不正确的或不一致的数据说明、初始化有错或没有赋初值、不正确的变量名、不一致的数据类型、上溢/下溢或引用错误等类型的错误。(5)错误处理路径测试。一般软件错误处理路径测试应考虑下面几种可能的错误:对错误的描述不易理解、指出的错误并不是所遇到的错误、出错时还没有进行出错处理就先进行系统干预、错误边界条件的处理不正确、描述错误的信息不正确从而不足以确定出错的原因等。(6)边界测试。边界测试是检测软件在其输入/输出域、过程参数、状态转换、功能界限等具有一定范围的边界或端点条件下的运行情况,考核软件的功能或性能在其边界条件下或边界的邻近区域内是否依然满足设计要求。按照上去要求进行单元测试时,为达到要求的覆盖条件,还需采取一定的技术手段对测试覆盖率进行记录和分析,确保达到相应的覆盖率指标。采用TBrun单元级测试工具,能自动产生软件测试驱动、桩模块,提供友好的输入输出人机交互和覆盖率统计功能,能有效提高单元测试的测试效率。

2 Testbed在单元测试中的应用

使用 Testbed/TBrun的基本方法是:设计测试用例;在Testbed/TBrun中加载被测单元文件,通过Testbed/TBrun对被测软件进行源程序自动插装;根据测试用例设定输入和预期的输出,执行插装好的源程序单元;分析输入数据、预期输出和实际输出;得到被测软件在当前的测试用例执行过程中代码的覆盖率。需要注意的是,每执行一个测试用例就需要重新编译并执行。Testbed/TBrun的覆盖率统计只具有累加的功能,因此不能查询每一测试用例执行后的覆盖率信息。在执行完所有的测试用例后会生成一个总的覆盖率文件,Testbed/TBrun通过对覆盖率文件的分析得出软件单元相应语句的覆盖情况,根据这些覆盖情况可以较快确定冗余的测试数据并增补遗漏的测试数据,从而指导新的测试用例设计。在实际应用Testbed单元测试时,需注意以下三个方面:(1)数组和指针类型的变量的输入。数组可以通过在Testbed/TBrun插装后的源代码中插入数组的初始化语句对数组赋值或者在 Testbed/TBrun 环境中对数

组的一部分赋值。因指针不能被直接赋一个地址,所以输入指针可采用映射的方式来赋值,将指针变量映射成相应的自定义变量,然后对自定义变量赋值。在测试执行的过程中,这个自定义变量的值就是指针的输入值。(2)被测单元代码的必要修改。在实际的测试过程中,有的代码单元不能直接使用Testbed/TBrun直接执行测试。须在分析之前对代码单元做少量修改。如Testbed/TBrun 插装源代码时会生成 main()函数,因此被测单元中的 main()函数要改为其他的名称以避免造成名字冲突;Testbed/TBrun 执行分析时会执行被测单元,因此被测单元中的 while(1)之类的死循环结构要去掉,否则分析将无法结束。(3)模块测试后显示最终整体覆盖率,不能查询每一测试用例执行后的覆盖率信息。

3 结语

Testbed有效地支持了测试人员的测试工作,相对于完全人工测试提高了测试效率。该工具仍存在不足,还需在实践中不断完善使用方法。

参考文献

篇4

功能测试主要通过单元测试和集成测试来完成系统的功能测试。单元测试的目的是测试源码中最小单元的代码是否正确处理它该处理的任务。单元测试重点测试了代码中分支比较多的地方,以验证程序是否能根据条件执行相应的分支;并重点测试了代码对于异常情况的处理,以验证代码是否能对于发生的异常情况进行相应的处理;再就是对源码中与数据库相关的代码和涉及用户输入输出的代码进行了重点测试。集成测试是在单元测试的基础上,将已经通过单元测试的软件单元组合起来,组成可以执行的功能单元,然后进行测试。通过测试的子功能单元再通过组合,组成更大一级的功能模块进行测试。集成测试重点测试软件单元的组合能否正常工作,模块之间的组合能否集成起来工作,还要测试构成系统的所有模块组合能否正常工作。集成测试主要有三种测试方案:自底向上进行测试,自顶向下进行测试,以及自底向上和自顶向下结合的方式进行测试。自底向上的集成测试方式是最常使用的方法,这种方式从程序模块结构中最底层的单元模块开始组装和测试。自顶向下的集成测试方式正好与自底向上的方式相反,需要编写桩模块以支撑上层的测试。最理想的方案是能将这两种集成方式结合起来,这样在早期的时候,既能发现重大的问题,又能及早展开人力。但是这种方式实施起来有难度,需要软件开发者一开始要做好合理的策划和设计。由于系统在需求和设计阶段做的工作比较扎实,本系统主要采用了自底向上的集成测试方式:先把最底层的软件单元组合,组成高一级的功能单元进行测试;测试通过的功能单元再进行组合,组成更高一级的模块单元,并对模块单元进行测试;最后,模块单元再集成到系统中进行测试。测试重点集中在各单元与各单元之间的接口和信息交互。

2.用户界面测试

通过用户界面测试来验证用户与系统的交互情况。界面测试的目标是确保系统向用户提供适当的访问和浏览被测对象功能的操作。测试方法,为每个窗口创建或修改测试,以核实各个应用程序窗口和对象都可正确进行浏览,并处于正常状态。完成标准,证实各个窗口与基准版本保持一致,或符合接受标准;需考虑的特殊事项,并不是所有定制或第三方对象的特征都可访问。

3.性能测试

性能测试采用了主观评测和软件评测相结合的方法,先部署上系统,在环保局内部试运行,通过工作人员的使用来了解系统的反应速度是否满足客户的需求。系统的性能需求主要是对系统web访问的response时间和系统负载能力的要求。在性能测试过程中,我们利用Loadrunner模拟用户向系统发送请求,并监控系统的CPU,Memory等参数。

4.安全性测试

本系统采用先登录,后操作的方式。因此,必须测试有效和无效的用户名和密码,并注意到是否大小写敏感。本系统是有超时的限制,也就是说,用户登录后在一定时间内(20分钟)没有点击任何页面,需要重新登录才能正常使用。所以,也必须对其进行测试。

5.测试结果

功能测试结果:满足环保局功能需求,与需求不相符或者后增加的功能,将在后续版本中加入,本版将不做修改。

篇5

【关键词】软件测试 白盒 黑盒 单元测试 组装测试 确认测试 系统测试

一、软件测试的常用方法

软件测试就是在软件投入运行前,对软件需求分析、设计规格说明和编码的最终复审,是软件开发过程的重要组成部分,是软件质量保证的关键步骤。采用面向对象技术进行软件开发产生了两个结果:一是开发出功能更强大更便于用户使用的软件产品,二是生成规模庞大的程序代码和文档,这也必然导致更大规模的软件测试和维护工作。因此,规范化的软件测试势在必行。规范化不只是测试的需求(有效代码量、结构/逻辑的复杂性、高性能/高精确性/高可靠性需求)和消耗资源(人力/时间/测试频度)规模化,更要求在面对规模庞大的软件测试需求,在合理的资源消耗基础上,实施有效的测试。

1.人工测试的方法

(1)个人复查。个人复查是指程序员自行设计测试用例,对源代码、详细设计进行仔细检查,并记录错误、不足之处等。个人复查主要包括检查变量的正确性、检查标号的正确性、检查子程序、宏、函数、常量检查、标准检查、风格检查、比较控制流、选择、激活路径、对照详细说明书,阅读源代码和补充文档等方面的测试内容。

(2)走查。走查是指测试人员先阅读相应的文档和源代码,然后人工将测试数据输入被测试程序,并在纸上跟踪监视程序的执行情况,人工沿着程序的逻辑走查运行一遍,跟踪走查运行的进程来发现程序的错误。走查的具体测试内容包括模块特性、模块接口、模块的对外输入或输出、局部数据结构、数据计算错误、控制流错误、处理出错和边界测试等方面。

(3)会审。会审是指测试人员在会审前仔细阅读软件的有关资料,根据错误类型清单(根据以往的经验、对源程序的估计等,并在以后测试中给以丰富补充)填写检测表,提出根据错误类型要提出的问题。会审时,由程序设计人员讲解程序的设计方法,由程序编写人员逐个讲解程序代码的编写,测试人员需要逐个审查,提问,讨论可能出现的问题。会审对程序的功能、结构、逻辑和风格都要进行审定。会审的测试内容与“走查”的内容相同。

2.机器测试

(1)定义。机器测试的目的是检查程序的动态性能,检查程序在执行过程中存在的错误。尤其是发现程序在实现功能、逻辑通路、数值计算、数据处理、边界处理、错误处理等方面存在的错误。机器测试分为白盒测试和黑盒测试。

(2)黑盒测试。黑盒测试即功能测试,这种方法是把软件看成一个看不见里面内容的黑盒,在完全不考虑程序内部结构和特性的情况下,测试软件的外部特性。根据软件的需求规格说明书设计测试用例,从程序输入和输出特性上检查程序是否满足设定的功能。黑盒测试常采用的方法是设计适量有效和无效的输入数据进行测试,以期用最小的代价发现最多的错误。

(3)白盒测试。白盒也称结构测试,这是将软件看成一个透明的白盒子,按照程序的内部结构和处理逻辑来选定测试用例,对软件的逻辑路径及过程进行测试,检查它与设计是否相符。

二、软件测试的流程

软件测试虽然是一个独立的阶段,但在实际工作中,测试的流程主要包含单元测试、组装测试、确认测试等阶段。

1.单元测试。单元测试也叫模块测试,单元指清晰定义了子功能的最小单位,如程序的最小编译单位等,是测试工作的第一步,通常单元测试需要编写桩程序及耙程序。单元测试是要保证每个独立的模块完成清晰定义的子功能,发现编码和详细设计的错误。它将整个系统分解,减少测试复杂度,在模块范围定位错误的位置,并且可以多个模块并行测试。测试可以由编码人员也可以由测试人员来完成。测试方法以白盒测试为主,辅以必要的黑盒测试。测试内容包括模块接口、模块内部数据结构、逻辑通路、边界值、出错处理等。

2.组装测试。组装测试也叫综合测试、集成测试、联合测试,它是在单元测试之后需要按照设计时做出的层次模块图把测试模块连接起来,进行组装测试。测试目的是检查能够独立实现子功能的单元模块能否在组装过程中逐级实现组合起来的主功能。测试人员由编码人员和测试人员共同进行。测试方法是黑盒测试。组装测试的策略分为非增式测试和增式测试,增式测试又分为自顶向下、自底向上和混合式三种。

3.确认测试。确认测试也叫合格性测试、验收测试,经过组装测试后,所有模块已连接成为一体,确认测试是将整个软件作为测试对象,进一步检查软件是否符合需求规格说明书的要求。确认测试的目的是检查系统是否能够按预定要求工作。确认测试主要由测试人员完成。确认测试要进行以下几方面的内容:在模拟的环境下,运用黑盒测试的方法,验证测试可包括功能测试、可移植性、兼容性、错误恢复能力、可维护性等性能测试。有些确认测试还将软件配置审查,α测试,β测试也包含进来。

三、结束语

在现实生活中,业界人员所热衷追求的往往是高效的软件开发技能,而高效的软件测试技能却相对为人们所冷落。在当今的大学,计算机专业均没有开设任何软件测试方面的课程,每年毕业进入业界的学生,几乎全无软件测试方面的知识,软件测试的培训与教育并无法满足当今IT产业的需求。随着敏捷开发方法等新一代软件工程概念的风靡,软件编码和测试过程多次迭代,测试人员更积极地参与到软件生命周期的各个阶段中,使得整个项目团队收取事半功倍的成效。编码和测试人员越来越紧密地协同工作,优秀的程序必然需要了解测试的方法和概念,优秀的测试人员所具备的技能也不再是仅仅是对现成的程序进行直观的功能测试,软件测试的涵义和策略日益复杂,软件质量风险控制涉及到愈来愈多的方面。

参考文献:

[1]《浅析软件测试技术现状》 李静 郭晓磊 《光盘技术》2009年第5期

[2]《软件测试:跨越整个软件开发生命周期》 (美国)爱弗里特 (Everett G.D.) (美国)Raymond MCleod 译者:郭耀 清华大学出版社

篇6

关键词:分类;规则;面向对象;继承;封装;多态

中图分类号:TP311文献标识码:A文章编号:1009-3044(2010)08-2010-02

The Study of Object Oriented of the Unit Test Based on Rule

ZHANG Ke-hong

(School of Statistics, Lanzhou Commercial College, Lanzhou 730030, China)

Abstract: The Object Oriented of the unit test depend on rule,which is required and analysed by the software system of Testing case. The traditional unit tests analysis the internal logic structure of programs, but The Object Oriented's unit test I am talking about stress the tests of the inherit, encapsulation and diversity of the class in Object Oriented development besides the function of the ones.This document depends on Data Mining of rule classification.

Key words: classification; rule; object oriented; inherit; encapsulation diversity

面向对象的测试技术是面向对象开发的重要一环,也是软件质量和成熟度的保证。单元测试的指导思想是:能自生编译运行的最小程序单元[4]。这一理论对面向对象开发的软件也是适用的,但它的不足是没有明确在面向对象的测试中把方法还是把类看作单元,如果把方法看作单元会给以类为单元的面向对象的开发和测试带来混乱,所以在软件系统测试用例库的单元测试中以类为单元进行测试。

数据挖掘是指在数据中发现有效的、新颖的、潜在有用的、最终可理解的模式。为了从大量数据的低层数据中抽取高层知识,数据挖掘利用其他学科知识:机器学习、模式识别、数据库、统计理论、人工智能、专家系统中的知识获取、数据可视化,高性能计算等[9]。基于规则的分类是数据挖掘的分类方法中比较有效的一种技术,它是适用于从少量信息和知识中获取有用的信息,它的这一特点也可以在以类为单元进行测试中得到应用,也是对软件测试技术的改进。

1 软件系统测试用例库介绍

软件测试项目的管理活动包含测度、度量、估算、风险分析、进度安排、跟踪和控制[6]等,而软件测试项目管理的基本内容是计划、组织和监控,从另一个角度来说它有八个工作领域,即测试范围管理、时间管理、成本管理、质量管理、人力资源管理、沟通管理、风险管理和过程管理[10]。

软件系统的开发工作有很大的工作量,软件测试的工作占有很大的比重,因为软件测试工作存在于软件系统测试用例库软件开发的各个阶段,所以软件测试项目的管理活动也不是锁定在那一个阶段,而是存在于需求分析、概要设计、详细设计、编码阶段、安装与维护的各个阶段[3]。

在软件系统每一个测试阶段,需要设计与之相关的测试用例,而测试用例设计和执行是软件系统测试工作的核心,直接关系到测试的效率、结果,也是工作量最大的任务之一,同时BUG的管理一般由数据库系统来支持,如果在软件系统中没有很好的测试管理系统也就不能提高测试的效率。软件系统测试用例库的建设也是基于上述目标,当然测试用例库的建立有利于跟踪和统计执行测试结果的报告 ,也有利于实现软件系统测试用例的标准化、回归测试和系统的质量分析。

软件系统测试用例库包括基本测试数据维护、测试信息查询、安全、帮助、测试数据库管理六个模块,通过UML画出软件系统测试用例库的用例图1。

2 软件系统测试用例库单元测试中类测试的充分性

类测试充分性是面相对象中类测试的重要条件,也是质量的保障,我们在设计软件系统测试用例库单元测试用例的时候能不能保证对执行的语句每一条都考虑到,能不能找到程序中的每一个Bug,同时也要考虑到相反的问题,那就是在效率优先的前提下有没有必要做到找出所有的Bug,也要考虑到类的继承、多态、封装等特点以及这些特点给测试带来的在传统测试中从没遇到的新困难。为了有效地进行面向对象的单元测试就要考虑类测试的充分性,它有3个标准[6]:

1) 基于类的状态转换的充分性:类的状态有很多,在设计测试用例的时候要考虑到要充分考虑了的状态转换,如果在测试用例中没有体现出至少一次的状态转换,那就意味着测试是失败的,同时也要说明就是测完所有的状态也可能存在着Bug。

2) 基于限制的充分性:对每一个操作来说它都可能存在前置约束条件和后置约束条件。在设计测试用例时就要考虑到这些约束条件对操作的影响,特别是要注意约束条件出现的可能性。

3) 基于路径的充分性:在设计测试用例时还要考虑基于路径的测试是否完全,也就是说在测试用例都执行完时,程序中的每行代码都尽可能执行一边。但此时要强调测试的效率问题。

3 基于规则的单元测试技术研究

基于规则的分类法使用一组IF-THEN规则进行分类,其表达式为:IF 条件THEN 结论,规则的IF部分乘坐规则前件,THEN部分是规则的结论。条件是由一个或多个连接词AND连接的属性测试组成,规则的结论是包含一个类预测,如果给定的测试用例,其规则前件中的条件都成立,则规则前件被满足,说明规则覆盖该测试用例。一般规则的提取有决策树和顺序覆盖算法,规则可以用覆盖率和准确律来评价,其定义为[8]:

其中ncovers为规则覆盖的测试用例数,ncorrect为规则正确分类的测试用例数,|D|为测试用例库中D的测试用例数。

在设计软件系统测试用例库类的测试用例时,用基于规则的思想考虑路径的测试是否完全,也就是说在测试用例都执行完时,程序中的每行代码都尽可能执行一遍。但此时要强调测试的效率问题。例如:软件系统测试用例库的模糊查询void CMainDialog::BlurTestSch(),主要是关键字KEY填写和四个查询类别的选择,四个查询类别是项目编号(XMBH)、优先级(FIRST)、是否通过(YN)、和时间(TIME),优先级又包括致命(D)、严重(S)、一般(U)、微小(M),用决策树提取模糊查询的规则如表1。

通过上述的规则,有关软件系统测试用例库的模糊查询void CMainDialog::BlurTestSch()

的测试通过void CMainDialog::OnTest()实现,其主要步骤如下:

void CMainDialog::OnTest()

{

CTestingSet m_testingset;//定义CTestingSet类的对象

if(!m_input.IsEmpty())

{

if(pare("项目编号")==0)

{

CMainDialog::BlurTestSch();

MessageBox("选择项目编号关键字成功!");

}

if(pare("优先级")==0)

{

CMainDialog::BlurTestSch());

MessageBox("选择优先级关键字成功!");

}

if(pare("是否通过")==0)

{

CMainDialog::BlurTestSch();

MessageBox("选择是否通过关键字成功!");

}

if(pare("时间")==0)

{

CMainDialog::BlurTestSch();

MessageBox("选择时间关键字成功!");

} }

else

{CMainDialog::BlurTestSch();

MessageBox("请填写查询关键字成功!");

} }

通过测试程序的运行,我们发现通过基于规则的分类方法设计的测试用例是非常有效的,例如在本次测试中设计测试数据集D=10,其中规则2时人为设计的错误的规则,主要用于XMBH为空的测试。

它们的覆盖率为:ncovers(1)=…= ncovers(9)=1/9。(下转第2021页)

(上接第2011页)

它们的正确率有区别,主要是规则2覆盖两个测试用例,它的正确率 ncorrec(2)=1/2,其余的正确率是 ncorrec(1)=1/1,ncorrec(3)=…= ncorrec(9)=1/1。

从这些数据说明基于规则的分类方法使面向对象的测试的效率方面有很大的提高,这也是对软件测试技术中白盒测试的比较有意义的探索,也是数据挖掘的方法和软件测试技术有益的尝试,从而促进软件测试技术的发展。

4 结束语

从软件的生存周期看,单元测试是指在程序文档结束以后进行的测试,它在测试技术中主要是白盒测试,也就是说它是针对程序的逻辑结构进行的测试。从另一方面来说面向对象的开发技术下的面向对象的测试也是和传统意义的测试有很多的不同点,尤其是面向对象类的继承、封装、和多态给测试造成了很大的困难,所以在本文中结合数据挖掘中的基于规则的分类技术这些特征的设计。又因为不管是传统意义的测试还是面向对象的测试,设计测试的依据是软件系统测试用例库规格说明书、软件系统测试用例库设计文档和软件系统测试用例库使用说明书,如果是设计文档错误,不管哪种测试软件质量就难以保证,当然测试的设计也就没有保障。即使测试以后发现是设计的错误,这时修改的代价是相当昂贵的。因此,较理想的做法是深入了解软件的特点,按软件工程各阶段形成的文档,分别进行严格的审查和测试。总之应通过各种方法和新技术提高测试效率和软件系统测试用例库的健壮性、正确性和有效性!

参考文献:

[1] 郭宁.UML及建模[M].北京:清华大学出版社,2007.

[2] 国刚,周峰,孙更新.UML与Rational Rose 2003 软件工程统一建模原理与实践教程[M].北京:北京电子工业出版社,2007.

[3] Fenton N E,Pfleeger S L.软件度量[M].2版.北京:机械工业出版社,2004.

[4] Jorgensen P C.软件测试[M].2版.北京:机械工业出版社,2003.

[5] Priestley M.面向对象设计UML实践[M].2版.北京:清华大学出版社,2005.

[6] 古乐,史九林.软件测试技术概论[M].北京:清华大学出版社,2004.

[7] 宫云战.软件测试[M].北京:国防工业出版社,2006.

[8] Han Jiawei,Kamber M.数据挖掘的概念与技术[M].北京:机械工业出版社,2008.

篇7

关键词:软件;测试;设计;技术

中图分类号:TP311.52文献标识码 A 文章编号:1009-3044(2007)17-31323-02

Technique of Software Test and Design

GUO Qun

(Liaoning University of Intemational Business and Economics,Dalian 116024,China)

Abstract:Software test, the straightforward and rapid way to improve the quality of software, is the necessary condition for the improvement of the software quality. This paper, introducing the common concept, method and step of the software test, gives the solution to the software test.

Key words:software; test; design; technique

1 引言

在大型软件开发过程中,人们使用了许多保证软件质量的方法分析、设计和实现软件。但由干问题的复杂性,人们对客观事物认识的局限性及软件开发人员配合不协调等因素,因而在软件开发过程中难免有各种各样的错误。如果在软件投入生产性运行之前,没有发现并纠正软件中的大部分错误,则这些错误迟早会在生产过程中暴露出来,那时不仅改正这些错误的代价更高,而且往往会造成很恶劣的后果。因此,一定要高度重视软件测试工作。软件测试是为了发现故障而执行程序的过程。其目的是以尽可能少的时间和人力发现并改正软件中潜在的各种故障及缺陷。所以,在软件投入运行之前必须进行软件测试,以尽可能多地发现软件中的故障,提高软件可靠性。

2 软件测试定义

软件测试就是在软件投入运行前,对软件需求分析、设计规格说明和编码的最终复审,是软件质量保证的关键步骤。软件测试是为了发现错误而执行程序的过程。或者说,软件测试是根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例(即输入数据及其预期的输出结果),并利用这些测试用例去运行程序,以发现程序错误的过程。正确认识软件测试的定义是十分重要的,它决定了测试方案的设计。软件测试只能查找程序中的错误;不能证明程序中没有错误。

3 软件测试方法

怎样对软件进行测试呢?有两种方法。一种称为黑盒测试:如果知道了产品应该具有的功能,可以通过测试来检验是否每个功能都能正确使用,也叫功能测试;它是在程序的接口进行的,把软件看成是一个黑盒,测试时仅仅关心如何寻找出使程序不按要求运行的情况,是最基本的测试法。另一种称为白盒测试:如果知道产品内部工作过程,可以通过测试来检验产品内部动作是否按照规格说明书的规定正常进行,也叫结构测试。它是把软件看成装在一个透明的白盒子里,就是完全了解程序的结构和处理过程,按照程序内部的逻辑测试程序,检验程序中的每条通路是否都能按规定要求正确工作。

4 软件测试步骤

一个大型软件系统通常由若干个子系统构成,每个子系统又由若干个模块构成。软件测试分以下几个步骤:

(1)单元测试:又称模块测试,是针对软件设计的最小单位――程序模块,进行正确性检验的测试工作。其目的在于发现各模块内部可能存在的各种差错。单元测试需要从程序的内部结构出发设计测试用例。多个模块可以平行的独立进行单元测试。

(2)组装测试:又称集成测试,通常,在单元测试的基础上,需要将所有模块按照设计要求组装成为系统。这时需要考虑的问题是:在把各个模块连接起来时,穿越模块接口的数据是否会丢失;一个模块的功能是否会对另一个模块的功能产生不利的影响;各个子功能组合起来,能否达到预期要求的父功能;全局数据结构是否有问题;单个模块的误差累积起来,是否会放大,从而达到不能接受的程度。

(3)确认测试:又称有效性测试。它的任务是验证软件的功能和性能及其他特性是否与用户的要求一致。首先要进行有效性测试以及软件配置复审,然后进行验收测试和安装测试,在通过了专家鉴定之后,才能成为可交付的软件。

(4)系统测试:是将通过确认测试的软件,作为整个基于计算机系统的一个元素,与计算机硬件、外设、某些支持软件、数据和人员等其他系统元素结合在一起,在实际运行(使用)环境下,对计算机系统进行一系列的组装测试和确认测试。系统测试的目的在于通过与系统的需求定义作比较,发现软件与系统定义不符合或与之矛盾的地方。

5 软件测试的策略

测试过程按4个步骤进行,即单元测试、组装(集成)测试、确认测试和系统测试。如图1所示。

图1 软件测试的过程

开始是单元测试,集中对用原代码实现的每一个程序单元进行测试,检查各个程序模块是否正确地实现了规定的功能。然后,把已测试过的模块组装起来,进行组装测试,主要对与设计相关的软件体系结构的构造进行测试。为此。在将一个一个实施了单元测试并确保无误的程序模块组装成软件系统的过程中,对正确性和程序结构等方面进行检查。确认测试则是要检查已实现的软件是否满足了需求规格说明中确定了的各种需求,以及软件配置是否完全、正确。最后是系统测试,把已经经过确认的软件纳入实际运行环境中,与其他系统成分组合在一起进行测试。

6 结束语

软件测试是保证软件可靠性的主要手段,是软件开发过程中最艰巨、最繁重的任务。软件开发人员要明确软件测试的目标,掌握软件测试的方法、策略,选用最少量的高效测试数据,做到尽可能完善的测试,从而尽可能多地发现软件中的问题。降低软件测试的成本,提高软件测试效率。开发出用户满意的高质量的软件。

参考文献:

[1]张海藩.软件工程导轮[M].北京:清华大学出版社,1992.6.

[2]郑人杰,等.实用软件工程[M]. 北京:清华大学出版社,1997.4.

篇8

笔者在课堂教学中建立了一套激发学生学习兴趣和发展学生能力的“六项全能”的形成性评价方法,并把这种评价方法和传统的终结性评价方法结合起来对学生进行评价。这“六项全能”的评价方法包括课堂活动评价、单元听写评价、单元测试评价、课文背诵评价、完成作业评价和课堂纪律评价。

一、课堂活动评价

学生参与课堂活动是形成性评价的一个重要内容,课堂活动包括课前have a speech,free talk,在课堂教学过程中开展的group work,pair work,教学游戏,回答上节课所学知识点等活动。在课堂上采用小组评价法,把学生分成若干小组,以小组为单位开展讨论,进行比赛。采用记分制,完成任务的加3分,答错不加分。但是回答上节课所学知识点错了就扣3分。如果是个人完成的给个人加分,如果是小组合作完成的就给小组加分。

二、单元听写评价

把听写和形成性评价方法结合起来使用,帮助学生调控自己的学习过程,使学生获得成就感,培养合作精神。

课堂听写前教师让学生自己在家先听写,可以家长报也可以自己写出汉语再默写。听写的内容是本单元的单词、词组、句子或是课外阅读中的词汇,由学生自己定。课堂听写采用记分制,达到100分的同学加10分,90分以上的加5分,没达到90分的就算不合格,不合格的同学要找课代表重新听写。他们可以找本组组长寻求帮助,也可以找一帮一结的对子弄清楚没写会的内容。重新听写达到90以上的可以补加3分,基础差的同学可以降低标准,达到60分即可加5分。对于重新听写合格的学生,教师应及时给予表扬鼓励,帮助学生建立自信,激发积极学习情感。

三、单元测试评价

单元测试作为阶段性的测试结果是形成性评价的一种形式。教师在完成每个单元的教学后,运用单元测试对学生进行评价。

以上一次期中或期末考试成绩作为评价标准。120分试卷,108分以上的加15分,96分以上的加10分,跟上次比较有进步的同学再加五分。96分以下的同学,跟上次比有进步的加5分。

每次单元测试后,还要求学生进行自我评价,写出试卷分析,对自己试卷的得失进行一个小结。引导学生进行单元测试后的自我评价,对于强化学生对单元重点、难点的掌握起着至关重要的作用。

四、课文背诵的评价

背诵典型的对话或者课文是学习英语、培养语感的一种重要途径。通过背诵帮助学生掌握生词,养成英语思维的习惯,有助于提高听说能力,还可以帮助学生提高阅读理解能力。

对于课文背诵的评价,可采取小组合作的方式进行评价。在班上选出8个英语背诵小组长,组长先在教师这背。组员找组长背,不会读的先向组长请教。全班基本完成后再进行抽查,检查和督促组长的工作。采用记分的方式,在规定时间背完的同学可以加5分,抽查过关的同学再加3分。对于英语基础较差的学生,降低要求,让他们看着课文的汉语背。无法看汉语背出的同学,只要求朗读。

五、完成作业评价

德国教育家第斯多惠说过:“教学的艺术不在于传授本领,而在于激励,唤醒和鼓舞。”对于完成作业的评价,笔者主要是通过口头表扬并加分的方式。

对于按时交作业,并且书写认真,正确率高的学生及时给予肯定,并加5分;对于没按时交作业的学生扣5分。收作业的事情让小组长参与,培养他们的责任心。

六、课堂纪律评价

形成性评价要求积极有效的课堂环境,而这与学生良好的纪律有着紧密联系,有时课堂气氛活跃,但课堂纪律却难以控制,因此对课堂纪律评价尤为重要。

对于课堂纪律评价采取记分制,违反纪律一次扣10分。一个月内纪律扣分最多的同学会告知家长共同管理该生。课堂纪律评价不仅要成为约束学生的一种方式,也要成为服务课堂的工具,使其成为提高课堂效率的一种有效手段。

对于“六项全能”的评价方法,每个单元进行一次统计,由两名英语课代表分工记载和统计“六项全能”评价的分数。总分排前15名的学生评为优秀学生,再选出10名有进步的学生。在班级表扬栏公布,并且在家长QQ群中表扬信息。每个月进行一次小结,给总分排名前15名的学生颁发小小奖励。

篇9

关键词:数学 教学步骤 认知结构 参照系

中图分类号:G623.5 文献标识码:A 文章编号:1673-9795(2014)02(c)-0102-01

根据每个单元的知识结构,从小学生的心理特点和认知结构出发,由教师确定每个单元的教学目标,并找准该单元的知识重点,难点及关键,然后根据学生的认知水平,组织有效的课堂教学活动,完成重点、难点及关键的教学,教给学生学习的方法。

1 确定教学目标,把握教学内容

制定单元教学目标,实际上是为单元教学定方向。方向能否定得正确,关键在于能否根据数学的学科特点,正确处理好整体与部分,知识与能力的关系,使所定目标切实具有科学性、准确性和可测性。一旦所定目标具有上述“三性”,就能真正成为教师组织教学活动,判断教学效果,调控教学过程的出发点和参照系。这样目标备课,教学就会因方向明确而少走弯路。

2 抓关键、教给学生方法

首先弄清该单元所涉及的知识在新与旧、难与易,相互制约方面有哪些联系,找准其中起关键作用的知识。其次在认真研究这一关键知识与哪些旧知识有密切联系的基础上,拿出3~5分钟做好对旧知识的复习。一旦确认学生已经具备了学习新知识的认知前提,就要把重点、难点知识的教学放到中心位置,采用适合儿童智力活动规律的教学方法组织各种形式的教学活动,甚至使绝大多数学生对这一知识达到充分地理解,较好地掌握。

显而易见,抓关键,主要包括两层意思:一是研究教材的知识结构,找准在整个单元教学中能牵一发而动全局的重点、难点知识的教学,使学生切实掌握学习本单元的方法。

例如:北师大版小学数学四年级下册,第二单元认识图形中,教学重点:认识直角三角形,锐角三角形,等腰三角形和等边三角形等,三角形的内角和等于180°,三角形任意两边的和大于第三边。难点是:三角形内角和的探索,三角形任意两边的和大于第三边的探索。

让学生体会先“量一量,算一算”产生猜想,再“拼一拼,折一折”进行验证的数学思想方法,体会通过操作获得一些数据,并整理分析数据,从中归纳出结论。

3 抓自学,让学生自己解答

自学,是学生在教师辅导下的学习。

由于学生在第二步的单元教学中,已经初步掌握了学习该单元的方法,因而进入第三步后,教师的主要任务就变成了有计划,有目的地深入到学生的自学中去,认真观察学生是怎样运用已掌握的方法去解答数学题的。及时发现学生在解答过程中存在的问题,并根据反馈情况进行及时恰当的辅导。

学生自学时,往往会出现这样一种现象:他们原以为已经掌握了重点、难点知识。在自学时,又会遇到若干意想不到的困难和障碍,暴露出个别学生对方法并未真正掌握。这就需要教师有的放矢地采取得力措施,组织学生再学习、再思考。在这个反复的、曲折的思维过程中,教师的辅导是举足轻重的。因为恰当的启发、点拨,可以指导学生及时走出迷谷,避免浪费时间,保证学生在课堂上做更多的题,从而培养学生运用关键知识解决实际问题的能力,达到熟能生巧,运用自如。

4 抓练习,让学生举一反三

学生通过自学,初步掌握了该单元的知识,但要培养学生思维的灵活性和深刻性,还要通过抓练习,让学生多层次,多角度,多形式地练习,做到举一反三。这种练习可分为三类:

(1)基本题。即与课本例题相似,且难度基本相同的单项练习题目。进行这种练习,目的是让学生进一步巩固和熟练单元的基础知识,切实完成识记与理解这两个层次的学习任务。

(2)变式题。源于例题,但形式与例题不尽相同,而解法与基本题又大致一样的练习题。练习此类题目,可以深化本单元所学的知识,逐步使学生形成技能技巧,有利于培养学生的分析,判断能力。

例如:第五单元小数除法练习四第10题。

10:哪种食用油便宜些?

第一种:每瓶2.5千克 花35.00元

依据:单价=总价÷数量

35÷2.5=14(元)

第二种:有两瓶油

大瓶3千克 小瓶0.5千克

共需:48.30元

48.3÷(3+0.5)=13.8(元)

所以买第二种合算。

(3)综合题。将本单元所学知识与有关知识混合编排而成的综合型和智力型。做此类题,能培养学生解决实际问题的能力,使知识能灵活运用;能让学生把本单元学到的知识与有关旧知识联系起来,形成知识体系,标志着已完成综合运用这一教学目标。

如:找座位(总复习)。

这道题综合考察学生的小数加、减、乘、除计算的能力(见图1)。

5 单元测试,及时评价学习情况

先根据单元教学目标,分类编制单元标准测试题,再于该单元学完之后,进行单元测试,以检验各层次教学目标的达成情况。编制可测性强的单元测试卷,是第五步骤的主要工作。在编制单元测试卷时,特别应注意以下三点:

(1)题型多样。既有考察基础知识的填充、判断、选择题,又有考察各种能力的计算题、操作题和应用题。

(2)覆盖面广。单元测试题能充分反映本单元教学目标的各个方面,有利于对学生的学习情况进行全面性诊断。

(3)呈阶梯状。既有与“识记、理解”相对应的基本题,又有与“简单应用”相对应的综合题,还有少量难度较大的能考查创新能力的思考题。

通过测试,可以从识记、理解、应用的不同层次上准确反馈出学生的学习情况。使教师能据此采取相应措施,及时进行矫正和补救,有的放矢地对学生进行重新讲解和点拨,从而收到事半功倍的效果,使学生能扎实熟练地掌握并应用所学的知识。

参考文献

[1] 张景中,曹培生.从数学教育到教育数学[M].中国少年儿童出版社,2011.

篇10

Abstract: With the increasing complexity of software engineering, software engineering quality requirements continue to improve. The teaching of the traditional software testing course can't meet the needs of the times. From the traditional software testing experimental teaching, aiming at the existing problems and the overall objectives of the experimental teaching requirements, this paper explores the significance of project driven software testing and experimental teaching reform, which with reasonable distribution of the curriculum system, the distribution of appropriate experimental content, can meet the requirements of personnel training program.

关键词:软件测试;项目驱动;实验教学;教学改革

Key words: software testing;project driven;experimental teaching;teaching reform

中图分类号:G642.0 文献标识码:A 文章编号:1006-4311(2017)03-0226-03

0 引言

软件测试在很早以前就是软件工程里的一个课程。但近几年来才被国内的软件行业及软件公司所重视。因而出现需要大量软件测试人员的需求。所以国内的很多高校因市场的需求,开设了相关的软件测试专业或方向。但很多学校的开设的软件测试的课程只停留在基本理论的学习,或者测试工具的介绍上,以至于毕业出来的学生只能满足最底层的测试工作。而较高要求的测试岗位很难招到人。所以培养“高素质、复合型”的软件测试人才,是学校的当务之急,软件测试的教学改革势在必行[1]。

1 传统测试课程教学存在的问题

教学课时少,课程结构单一。传统软件测试是以软件工程原理的一个章节来讲的。讲课的课时也就4个学分。老师授课只是对测试基本的概念及流程作讲解,内容偏重理论且抽象。学生理解和掌握难度比较大,在实际测试工作中无法入手。现如今对软件测试的工作越来越重视,对软件测试的工作要求越来越高。如此单一教学内容,让学生今后胜任软件测试的相关工作是不现实的。

重理论,轻实践。传统软件测试课程的教学一直以任课老师讲授以主,学生被动接受知识,在理论的教学过程中,授课老师重点讲解软件测试的基本概念、原理及方法。但软件测试的相关课程在实践方面要求有较强的动手的实践能力。如在讲解黑盒测试、白盒测试中的测试方法来设计测试用例时,实际使用过程中需要结合多种方法来保证测试用例的完整性,这需要引入实际的生产案例来练习。再如在讲解单元测试、集成测试时,在讲解单一类的测试、容器内的测试、数据库持久层的测试时,如果老师在授课时只是讲理论,没有引入实际的生产案例,学生很难体会到课程的挑战和乐趣,缺少主观主动性,学习效果较差。这样的教学质量难以保证,学生很难学以致用。

2 项目驱动教学的内涵

“项目教学法”最早见于美国教育家凯兹和加拿大教育家查德合著的《项目教学法》。“项目教学法”的理论认为:知识可以在一定的条件下自主建构获得;学习是知识、技能与行为、态度与价值观等方面的长进;教育是满足长进需要的有意识、有系统、有组织的持续交流活动。教育家陶行知先生说过:教、学、做应是一体化的,教、学、做是一件事,不是三件事[2]。

项目教学法由以下内容组成:有一定的教学内容,具有实际应用价值;能将理论知识和实际岗位技能结合起来;与企业实际生产或商业经营等活动有关系;学生可以独立制定计划并实施;学生可以运用所学知识克服、处理在项目工作中出现的困难和问题;有一定的难度,学生在完成过程中能掌握和运用新的知识和技能;要渗透情感、态度、价值观的培养;有明确而具体的成果展示,师生能共同评价项目完成情况和工作成果[3][4]。

3 项目驱动的软件测试实验教学的意义

以软件行业发展需要为依托,面向软件开发(敏捷开发)过程中对软件测试人才的迫切需求,以提高教学质量为核心,以教学改革为动力,以实现软件开发与测试的学生知识、能力与素质协同发展为原则,以培养学生实践能力为目标,结合学科优势,以主干课程建设为突破点,开展项目驱动软件测试实验教学改革与研究,构建和实践面向应用型本科软件测试人才的专业实验教学体系。具体的意义可归纳为以下四点:

①优化测试相关专业主干课程体系,打造以项目驱动软件测试实验教学的专业特色。测试相关主干课程体系优化与专业课程实验教学改革是项目的核心。专业主干课程体系的建设能直接反映专业课程建设的目的和培养目标,是提高人才素质和保障教育质量的核心环节,也是衡量教学水平和教学质量的重要标志[5]。因此,面向软件工程和软件实践背景,开展“项目驱动软件测试实验教学”,对于丰富和完善软件测试课程教学改革,培养适应软件测试行业中“高素质,高要求”的复合型、应用型管理人才,打造学科专业特色,形成学科专业竞争力,具有重要价值。

②以主干课程教学组织与团队建设为着手点。制定主干课程建设的方案和措施,通过课程示范作用,带动本专业相关其他课程的建设与改革。狠抓主干课程教材的选用与编写、教学大纲的制定、应用案例的编写、教学内容的精选、教学手段与教学方法的改革等环节,夯实了主干课程建设的基础,并为该专业今后教学改革奠定基础。

③以点带面,扩展软件工程专业实验教学体系。通过在主干课程中适当引入综合性实验、设计性实验、软件工程案例分析,可加强学生的实践技能、创新意识和团队精神的培养,提高学生的综合运用能力和竞争力。从长远来讲,这项成果会进一步提高我校该专业的人才综合素质, 进一步提高该学科专业综合竞争力。

④扩大毕业生就业率及提高就业档次。通过该项目的建设,希望能推动该学科专业课程体系的优化,改善广州大学该专业本科学生的知识结构,提高软件测试学生的综合素质和专业技能,扩大毕业生就业率及提高就业档次。

不管是站在专业学科建设的角度,还是站在学生培养的角度,从培养“高素质、复合型”的软件测试人才、解决学生就业的目标来看,教学改革研究均具有重要的意义,有必要开展系统、深入的研究。

4 项目驱动的软件测试实验教学改革方案

以培养“高素质、复合型”的软件测试人才为目标,以专业主干课程体系优化主干课程教学团队,强化主干课程配套的实践教学环节,构建了理论教学和实践教学相结合的、 “测试理论+测试方法+测试工程”三位一体的主干课程培养体系,并开展长期的跟踪实践,努力在应用型创新人才培养模式上形成自身的专业特色,完善“强基础、重能力、多样性、个性化”的人才培养方案。

4.1 软件测试的课程体系的建立

随着软件行业对软件测试重视,软件测试对从业人员的要求也越来越高。传统的教学内容已经不能满足就业人员的需要。需对软件测试的课程体系进行扩展、优化。如图1软件测试教改实践课程体系所示。

软件测试基础:本课程从理论和实践两个层面引导学生学习软件测试的基础知识,涵盖软件测试的思想、流程和方法,主要内容包括软件测试的基本概念和基本原理、白盒测试方法、黑盒测试方法以及面向对象软件测试等知识点。

高效单元测试:课程以最典型的单元测试框架JUnit为例讲述了单元测试的方法和最佳实践,介绍了在java软件开发中使用junit进行测试的原则、技巧与实践,深入阐述如何编写自动测试。课程讨论了实践中的测试技术,主要内容包括:用mock objects进行隔离测试、用ant和maven进行自动构建、Cactus进行容器内测试的方法、对java应用程序、数据库应用程序等进行单元测试,以及Parasoft Jtest的使用。

WEB项目应用测试:由浅入深、全面、细致地阐述了如何使用开源测试工具来完成Web自动化测试,便于学生轻松掌握Web自动化测试的原理、方法和实际操作。课程将教如何使用Selenium、WebDriver、Jmeter、Badboy搭建起一整套稳定、高效、低成本的自动化测试平台。结合应用实例展示web应用项目测试的过程。

软件测试质量与保证:软件测试质量与保证是面向软件测试方向一门专业必修课,在学习软件测试基础理论与技术的基础上,加强对软件质量的认识及质量保证的重视,主要从软件质量的概述、软件质量工程体系、软件质量度量、软件可靠性测试、软件质量标准、全面质量控制等多方面展开对软件质量保证的深入学习。

性能测试与优化管理:从测试项目实战需求出发,讲述了性能测试技术和软件性能测试工具应用的实战知识。引入项目案例,详细讲述性能测试方案实施、性能测试计划制定、性能测试用例设计、性能测试脚本开发、性能总结、性能优化管理及相关交付文档。

软件测试综合项目实训:本课程综合应用软件测试方向各门专业课程,以一个实际案例贯穿整个教学过程,使学生对软件测试的过程有深刻地理解,包括测试需求的获取、制定测试计划,设计测试用例,测试执行、测试缺陷、测试评估及报告,并在实训过程中加强对团队协作的体会及文档的协作能力。

移动应用程序测试:本课程将从实际应用角度出发,以智能终端和4G业务规划为基础,介绍手机测试的方法和实践技术,主要内容;手机设备软硬件的现状与趋势,手机软件测试用例设计技术与方法,手机软件体系结构与手机软件测试技术和常用测试工具。

4.2 项目驱动实验教学的实施方针

由于课程深度的不同,项目驱动实验教学的方针与过程也不同。其主干课程项目驱动实验教学的实施方针如下:

《软件测试基础》由于是基础课程,课程涉及的基础概念比较多,且为低年级的学生。所以实验教学的案例要以单独、经典的小应用实例为主,以巩固和强化理论知识为目的。

《高效单元测试》软件测试专业课。课程涉及代码级软件测试方法与技术。课程从应用程序的角度可分为三个方面的单元测试:表示层单元测试、运用层单元测试、数据层单元测试。从这三个方面再拆散成若干个小实验以便对应相应的理论知识。在实验案例选择的原则要以高年级完成的课程设计或毕业设计为主,其原因是这样的项目实例学生能更好的理解,上课的更有效果。

《WEB应用项目测试》软件测试专业课。课程主要讲解Web自动化测试的原理、方法和实际操作及测试工具的使用。在项目驱动实验教学实例的选取了一些比较完善并同学比较熟悉的系统,比如学院的信息管理系统或学院的邮件系统。学生对这些系统的业务比较了解。做自动化测试比较容易上手。

《软件测试综合项目实训》是一个以实际案例贯穿整个教学过程,以学生为主,教师为辅的综合项目实训课程。在实验教学的实例选取上要求要接近企业的工作要求。所以项目组在设计用例时,直接向相关校企合作单位,要来需求和被测项目,并设计成实验教学,以便学生在最接近现实的环境中作项目实训。

《移动应用程序测试》软件测试选修课。课程主要讲解移动测试的原理、方法和实际操作及测试工具的使用。在项目驱动实验教学实例的选取上,把学校组织参加比赛的移动应用项目拿来测试,这个项目影响较广,学生对业务比较了解也比较。

5 小结

如何正确处理系统性理论知识体系与学生实际能力培养之间的矛盾?其解决的基本途径是:重视实际能力培养,强化软件测试工程案例教学,重视课程配套的课内课外各种实践教学,强化学生人文素质培养。只有这样,才能解决学生专业知识面过窄、适应能力差、满足不了高要求的根本问题。如何搞好主干课程体系建设和主干课程师资队伍建设,其解决的基本途径是:以测试相关主干课程和教学团队建设着手点,建立完善的主干课程体系,发挥主干课程的带动效应,可达到以点带面效果,解决课程教学内容不先进、教学方法单一、教学手段落后、教师业务能力不强等问题。

参考文献:

[1]宰光军,任两品,刘燕.复合型软件测试人才培养模式的探索与创新[J].计算机光盘软件与应用,2012(20).

[2]张世泽,刘同先,丁升选,吕淑敏.浅议项目教学法在我国的发展、应用和建议[J].教育教学论坛,2014(50):168-169.

[3]郑春瑛,郭伟青.项目教学法在管理信息系统课程中的应用探讨[J].中国职业技术教育,2007(22).