导语:如何才能写好一篇单元测试方法,这就需要搜集整理更多的资料和文献,欢迎阅读由公务员之家整理的十篇范文,供你借鉴。
中图分类号: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.
关键词关键词:软件工程;软件质量;单元测试;测试框架;面向对向程序
0引言
随着现代软件工程的不断发展,人们对软件质量和生产力的要求越来越高。软件测试技术和框架复用技术作为提高软件质量和生产力的有效手段,近年来倍受人们的重视。
传统的“黑盒”、“白盒”测试技术主要应用于面向过程的程序设计中。随着面向对象技术的发展,这种技术已不能满足软件测试的需要。自动化单元测试框架应用于面向对象单元测试中,通过它来实现单元测试自动化。
单元测试是对软件进行正确性检验的测试工作,是软件设计的最小单位。单元测试的目的主要是发现每个程序模块内部可能存在的错误。程序员的基本职责是单元测试,单元测试能力是程序员基本能力的体现,程序员必须对自己所编写的代码认真负责,软件的质量与程序员的工作效率直接受程序员单元测试能力高低的影响。
1自动化单元测试框架设计目标
自动化单元测试框架的设计应达到以下目标:首先,框架简单,可以使测试程序的编写更简化。框架使用常见的工具设计,测试工作操作简单;其次,测试框架应能够使除作者以外的其他程序员进行代码测试,并能解释其结果,即将不同程序员的测试结合起来,且不发生相互冲突。最后,测试用例可以复用,可以以现有的测试为起点形成新的测试。
本文将以这些目标为指导,讨论如何用以KentBeck和RalphJohnson提出的“模式产生体系结构”的方式来设计框架系统。自动化单元测试框架的设计思想是从0开始根据设计问题应用设计模式,一个接一个逐步设计,直至获得最终合适的系统架构。其中实现部分采用Java语言来实现,并会使用UML图来表示各种类及类间关系。
2面向对象自动化单元测试分析
自动化测试定义为:管理与实施各种测试活动,包括开发测试脚本、执行测试脚本,这样使验证测试需求更加方便,通过这些脚本实现了自动测试,可以把它称为自动测量工具。使用这种自动测试工具对增量软件集成测试提供了巨大的方便,增加了巨大的价值。每一个新的构件可以重用先前开发的测试脚本,即使需求和软件有变更,作为一个重要的控制机制,自动测试也能够确保每一次重新构建的稳定性与准确性。
3面向对象自动化单元测试框架
自动化测试框架实质是一种自动测试工具,单元测试的核心问题是实现测试自动化。一个完整的自动化测试过程通常包括5个测试活动,分别是测试标识、测试设计、测试实现、测试执行与评估。测试用例针对被测试系统的各项功能准确地开发与设计,而且每一个测试用例都要按顺序执行这5个测试开发活动,测试开发活动如图1所示。
图1测试活动
测试标识与测试设计这两个测试活动主要为智力活动,分别标识测试条件和设计测试用例。测试执行与测试比较这两个活动属于比较机械的活动,它们的功能分别为:执行测试用例、将测试输出结果并与期望输出结果值相比较。前两个活动决定了测试用例的质量,后两个活动适合自动化。在单元测试中,测试执行和测试比较这两个活动要重复多次,测试标识与测试设计通常只执行一次。因此,在单元测试过程中,重复性的活动特别需要自动化执行。
4自动化单元测试设计与实现
首先构建对象来表达基本概念:TestCase(测试用例),然后将对象发送到测试框架,再由测试框架执行,最后报告测试结果。
采用Command命令模式将一个请求封装成一个对象,Command模式可以为每一个操作生成一个与之对应的对象,同时能够给出一个对应的执行方法。这样可以对多个用户请求进行排队,也可以将多个请求记录到日志,并使用不同的请求对客户进行参数化。具体实现方法如下:
其中的run()方法为模式中的执行方法,可以通过继承来重用该类,为了便于在测试失败时能够识别出失败的测试,每一个TestCase在创建时都要给出与之对应的名称,这样即可判断出失败的测试。
图1展示了测试框架组成部分的快照,也展示了应用于TestCase中的标记。
图1测试框架组成部分
5单元测试用例执行流程
在实际测试过程中,构造参数或资源、测试、释放资源为测试的业务逻辑过程。例如,在测试数据库的插入、更新、删除、查询等操作时,首先要对数据库进行连接,然后测试,最后释放连接。这样,在一个TestCase中有多个测试,需要反复书写代码,这增加了测试人员的工作量,不符合设计目标。
建立测试支架即为所有的测试建立一个共同的结构,可以解决以上问题,初始化代码、测试代码和释放资源的代码均放在测试支架上,每次运行测试代码之前,首先都运行初始化代码,最后运行释放资源代码。这样,每一个测试都会和与之对应的支架一起运行,而且测试结果互不影响,每一个结果都不会影响其它的测试结果。这样便实现了代码的复用,大大提高了软件单元测试的工作效率。
以上通过模板方法实现,模板方法的TemplateMethod静态结构如图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.
关键词:Testbed/Tbrun;软件单元测试;嵌入式软件
嵌入式软件作为嵌入式系统的重要组成部分,嵌入式软件质量问题可能会带来设备的损坏和人员的伤亡,因而用户对其质量有较高的要求。软件测试是对软件质量检验的一个非常重要的手段。而软件测试中动态测试最基础的测试就是单元测试。如何开展单元测试以及如何提高单元测试的效率是一个值得研究的问题。
1软件单元测试的要求及重点
软件单元测试是对软件基本组成单元进行测试,测试软件单元是否正确地实现规定的功能,是否满足软件性能和接口要求。并验证程序与详细设计说明的一致性。因此在单元测试时,需要模拟被测单元与其他模块之间的交互,开发驱动模块和桩模块两种辅助模块,构建一个可执行的环境,驱动模块用于模拟被测单元的上层模块,测试执行时由驱动模块调用被测单元使其运行;桩模块用于模拟被测单元在执行过程中所调用的模块。
2Testbed在单元测试中的应用
使用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有效地支持了测试人员的测试工作,相对于完全人工测试提高了测试效率。该工具仍存在不足,还需在实践中不断完善使用方法。
参考文献
2.用户界面测试
通过用户界面测试来验证用户与系统的交互情况。界面测试的目标是确保系统向用户提供适当的访问和浏览被测对象功能的操作。测试方法,为每个窗口创建或修改测试,以核实各个应用程序窗口和对象都可正确进行浏览,并处于正常状态。完成标准,证实各个窗口与基准版本保持一致,或符合接受标准;需考虑的特殊事项,并不是所有定制或第三方对象的特征都可访问。
3.性能测试
4.安全性测试
5.测试结果
功能测试结果:满足环保局功能需求,与需求不相符或者后增加的功能,将在后续版本中加入,本版将不做修改。
【关键词】软件测试白盒黑盒单元测试组装测试确认测试系统测试
一、软件测试的常用方法
1.人工测试的方法
(1)个人复查。个人复查是指程序员自行设计测试用例,对源代码、详细设计进行仔细检查,并记录错误、不足之处等。个人复查主要包括检查变量的正确性、检查标号的正确性、检查子程序、宏、函数、常量检查、标准检查、风格检查、比较控制流、选择、激活路径、对照详细说明书,阅读源代码和补充文档等方面的测试内容。
(2)走查。走查是指测试人员先阅读相应的文档和源代码,然后人工将测试数据输入被测试程序,并在纸上跟踪监视程序的执行情况,人工沿着程序的逻辑走查运行一遍,跟踪走查运行的进程来发现程序的错误。走查的具体测试内容包括模块特性、模块接口、模块的对外输入或输出、局部数据结构、数据计算错误、控制流错误、处理出错和边界测试等方面。
(3)会审。会审是指测试人员在会审前仔细阅读软件的有关资料,根据错误类型清单(根据以往的经验、对源程序的估计等,并在以后测试中给以丰富补充)填写检测表,提出根据错误类型要提出的问题。会审时,由程序设计人员讲解程序的设计方法,由程序编写人员逐个讲解程序代码的编写,测试人员需要逐个审查,提问,讨论可能出现的问题。会审对程序的功能、结构、逻辑和风格都要进行审定。会审的测试内容与“走查”的内容相同。
2.机器测试
(1)定义。机器测试的目的是检查程序的动态性能,检查程序在执行过程中存在的错误。尤其是发现程序在实现功能、逻辑通路、数值计算、数据处理、边界处理、错误处理等方面存在的错误。机器测试分为白盒测试和黑盒测试。
(2)黑盒测试。黑盒测试即功能测试,这种方法是把软件看成一个看不见里面内容的黑盒,在完全不考虑程序内部结构和特性的情况下,测试软件的外部特性。根据软件的需求规格说明书设计测试用例,从程序输入和输出特性上检查程序是否满足设定的功能。黑盒测试常采用的方法是设计适量有效和无效的输入数据进行测试,以期用最小的代价发现最多的错误。
(3)白盒测试。白盒也称结构测试,这是将软件看成一个透明的白盒子,按照程序的内部结构和处理逻辑来选定测试用例,对软件的逻辑路径及过程进行测试,检查它与设计是否相符。
二、软件测试的流程
软件测试虽然是一个独立的阶段,但在实际工作中,测试的流程主要包含单元测试、组装测试、确认测试等阶段。
1.单元测试。单元测试也叫模块测试,单元指清晰定义了子功能的最小单位,如程序的最小编译单位等,是测试工作的第一步,通常单元测试需要编写桩程序及耙程序。单元测试是要保证每个独立的模块完成清晰定义的子功能,发现编码和详细设计的错误。它将整个系统分解,减少测试复杂度,在模块范围定位错误的位置,并且可以多个模块并行测试。测试可以由编码人员也可以由测试人员来完成。测试方法以白盒测试为主,辅以必要的黑盒测试。测试内容包括模块接口、模块内部数据结构、逻辑通路、边界值、出错处理等。
2.组装测试。组装测试也叫综合测试、集成测试、联合测试,它是在单元测试之后需要按照设计时做出的层次模块图把测试模块连接起来,进行组装测试。测试目的是检查能够独立实现子功能的单元模块能否在组装过程中逐级实现组合起来的主功能。测试人员由编码人员和测试人员共同进行。测试方法是黑盒测试。组装测试的策略分为非增式测试和增式测试,增式测试又分为自顶向下、自底向上和混合式三种。
3.确认测试。确认测试也叫合格性测试、验收测试,经过组装测试后,所有模块已连接成为一体,确认测试是将整个软件作为测试对象,进一步检查软件是否符合需求规格说明书的要求。确认测试的目的是检查系统是否能够按预定要求工作。确认测试主要由测试人员完成。确认测试要进行以下几方面的内容:在模拟的环境下,运用黑盒测试的方法,验证测试可包括功能测试、可移植性、兼容性、错误恢复能力、可维护性等性能测试。有些确认测试还将软件配置审查,α测试,β测试也包含进来。
三、结束语
在现实生活中,业界人员所热衷追求的往往是高效的软件开发技能,而高效的软件测试技能却相对为人们所冷落。在当今的大学,计算机专业均没有开设任何软件测试方面的课程,每年毕业进入业界的学生,几乎全无软件测试方面的知识,软件测试的培训与教育并无法满足当今IT产业的需求。随着敏捷开发方法等新一代软件工程概念的风靡,软件编码和测试过程多次迭代,测试人员更积极地参与到软件生命周期的各个阶段中,使得整个项目团队收取事半功倍的成效。编码和测试人员越来越紧密地协同工作,优秀的程序必然需要了解测试的方法和概念,优秀的测试人员所具备的技能也不再是仅仅是对现成的程序进行直观的功能测试,软件测试的涵义和策略日益复杂,软件质量风险控制涉及到愈来愈多的方面。
[1]《浅析软件测试技术现状》李静郭晓磊《光盘技术》2009年第5期
[2]《软件测试:跨越整个软件开发生命周期》(美国)爱弗里特(EverettG.D.)(美国)RaymondMCleod译者:郭耀清华大学出版社
关键词:分类;规则;面向对象;继承;封装;多态
TheStudyofObjectOrientedoftheUnitTestBasedonRule
ZHANGKe-hong
(SchoolofStatistics,LanzhouCommercialCollege,Lanzhou730030,China)
Abstract:TheObjectOrientedoftheunittestdependonrule,whichisrequiredandanalysedbythesoftwaresystemofTestingcase.Thetraditionalunittestsanalysistheinternallogicstructureofprograms,butTheObjectOriented'sunittestIamtalkingaboutstressthetestsoftheinherit,encapsulationanddiversityoftheclassinObjectOrienteddevelopmentbesidesthefunctionoftheones.ThisdocumentdependsonDataMiningofruleclassification.
Keywords:classification;rule;objectoriented;inherit;encapsulationdiversity
面向对象的测试技术是面向对象开发的重要一环,也是软件质量和成熟度的保证。单元测试的指导思想是:能自生编译运行的最小程序单元[4]。这一理论对面向对象开发的软件也是适用的,但它的不足是没有明确在面向对象的测试中把方法还是把类看作单元,如果把方法看作单元会给以类为单元的面向对象的开发和测试带来混乱,所以在软件系统测试用例库的单元测试中以类为单元进行测试。
数据挖掘是指在数据中发现有效的、新颖的、潜在有用的、最终可理解的模式。为了从大量数据的低层数据中抽取高层知识,数据挖掘利用其他学科知识:机器学习、模式识别、数据库、统计理论、人工智能、专家系统中的知识获取、数据可视化,高性能计算等[9]。基于规则的分类是数据挖掘的分类方法中比较有效的一种技术,它是适用于从少量信息和知识中获取有用的信息,它的这一特点也可以在以类为单元进行测试中得到应用,也是对软件测试技术的改进。
1软件系统测试用例库介绍
软件系统的开发工作有很大的工作量,软件测试的工作占有很大的比重,因为软件测试工作存在于软件系统测试用例库软件开发的各个阶段,所以软件测试项目的管理活动也不是锁定在那一个阶段,而是存在于需求分析、概要设计、详细设计、编码阶段、安装与维护的各个阶段[3]。
软件系统测试用例库包括基本测试数据维护、测试信息查询、安全、帮助、测试数据库管理六个模块,通过UML画出软件系统测试用例库的用例图1。
2软件系统测试用例库单元测试中类测试的充分性
类测试充分性是面相对象中类测试的重要条件,也是质量的保障,我们在设计软件系统测试用例库单元测试用例的时候能不能保证对执行的语句每一条都考虑到,能不能找到程序中的每一个Bug,同时也要考虑到相反的问题,那就是在效率优先的前提下有没有必要做到找出所有的Bug,也要考虑到类的继承、多态、封装等特点以及这些特点给测试带来的在传统测试中从没遇到的新困难。为了有效地进行面向对象的单元测试就要考虑类测试的充分性,它有3个标准[6]:
1)基于类的状态转换的充分性:类的状态有很多,在设计测试用例的时候要考虑到要充分考虑了的状态转换,如果在测试用例中没有体现出至少一次的状态转换,那就意味着测试是失败的,同时也要说明就是测完所有的状态也可能存在着Bug。
2)基于限制的充分性:对每一个操作来说它都可能存在前置约束条件和后置约束条件。在设计测试用例时就要考虑到这些约束条件对操作的影响,特别是要注意约束条件出现的可能性。
3)基于路径的充分性:在设计测试用例时还要考虑基于路径的测试是否完全,也就是说在测试用例都执行完时,程序中的每行代码都尽可能执行一边。但此时要强调测试的效率问题。
3基于规则的单元测试技术研究
基于规则的分类法使用一组IF-THEN规则进行分类,其表达式为:IF条件THEN结论,规则的IF部分乘坐规则前件,THEN部分是规则的结论。条件是由一个或多个连接词AND连接的属性测试组成,规则的结论是包含一个类预测,如果给定的测试用例,其规则前件中的条件都成立,则规则前件被满足,说明规则覆盖该测试用例。一般规则的提取有决策树和顺序覆盖算法,规则可以用覆盖率和准确律来评价,其定义为[8]:
和
其中ncovers为规则覆盖的测试用例数,ncorrect为规则正确分类的测试用例数,|D|为测试用例库中D的测试用例数。
通过上述的规则,有关软件系统测试用例库的模糊查询voidCMainDialog::BlurTestSch()
的测试通过voidCMainDialog::OnTest()实现,其主要步骤如下:
voidCMainDialog::OnTest()
{
CTestingSetm_testingset;//定义CTestingSet类的对象
…
if(!m_input.IsEmpty())
if(pare("项目编号")==0)
CMainDialog::BlurTestSch();
MessageBox("选择项目编号关键字成功!");
}
if(pare("优先级")==0)
CMainDialog::BlurTestSch());
MessageBox("选择优先级关键字成功!");
if(pare("是否通过")==0)
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。
从这些数据说明基于规则的分类方法使面向对象的测试的效率方面有很大的提高,这也是对软件测试技术中白盒测试的比较有意义的探索,也是数据挖掘的方法和软件测试技术有益的尝试,从而促进软件测试技术的发展。
从软件的生存周期看,单元测试是指在程序文档结束以后进行的测试,它在测试技术中主要是白盒测试,也就是说它是针对程序的逻辑结构进行的测试。从另一方面来说面向对象的开发技术下的面向对象的测试也是和传统意义的测试有很多的不同点,尤其是面向对象类的继承、封装、和多态给测试造成了很大的困难,所以在本文中结合数据挖掘中的基于规则的分类技术这些特征的设计。又因为不管是传统意义的测试还是面向对象的测试,设计测试的依据是软件系统测试用例库规格说明书、软件系统测试用例库设计文档和软件系统测试用例库使用说明书,如果是设计文档错误,不管哪种测试软件质量就难以保证,当然测试的设计也就没有保障。即使测试以后发现是设计的错误,这时修改的代价是相当昂贵的。因此,较理想的做法是深入了解软件的特点,按软件工程各阶段形成的文档,分别进行严格的审查和测试。总之应通过各种方法和新技术提高测试效率和软件系统测试用例库的健壮性、正确性和有效性!
参考文献:
[1]郭宁.UML及建模[M].北京:清华大学出版社,2007.
[2]国刚,周峰,孙更新.UML与RationalRose2003软件工程统一建模原理与实践教程[M].北京:北京电子工业出版社,2007.
[3]FentonNE,PfleegerSL.软件度量[M].2版.北京:机械工业出版社,2004.
[4]JorgensenPC.软件测试[M].2版.北京:机械工业出版社,2003.
[5]PriestleyM.面向对象设计UML实践[M].2版.北京:清华大学出版社,2005.
[6]古乐,史九林.软件测试技术概论[M].北京:清华大学出版社,2004.
[7]宫云战.软件测试[M].北京:国防工业出版社,2006.
[8]HanJiawei,KamberM.数据挖掘的概念与技术[M].北京:机械工业出版社,2008.
关键词:软件;测试;设计;技术
TechniqueofSoftwareTestandDesign
GUOQun
(LiaoningUniversityofIntemationalBusinessandEconomics,Dalian116024,China)
Abstract:Softwaretest,thestraightforwardandrapidwaytoimprovethequalityofsoftware,isthenecessaryconditionfortheimprovementofthesoftwarequality.Thispaper,introducingthecommonconcept,methodandstepofthesoftwaretest,givesthesolutiontothesoftwaretest.
Keywords: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.
笔者在课堂教学中建立了一套激发学生学习兴趣和发展学生能力的“六项全能”的形成性评价方法,并把这种评价方法和传统的终结性评价方法结合起来对学生进行评价。这“六项全能”的评价方法包括课堂活动评价、单元听写评价、单元测试评价、课文背诵评价、完成作业评价和课堂纪律评价。
一、课堂活动评价
学生参与课堂活动是形成性评价的一个重要内容,课堂活动包括课前haveaspeech,freetalk,在课堂教学过程中开展的groupwork,pairwork,教学游戏,回答上节课所学知识点等活动。在课堂上采用小组评价法,把学生分成若干小组,以小组为单位开展讨论,进行比赛。采用记分制,完成任务的加3分,答错不加分。但是回答上节课所学知识点错了就扣3分。如果是个人完成的给个人加分,如果是小组合作完成的就给小组加分。
二、单元听写评价
把听写和形成性评价方法结合起来使用,帮助学生调控自己的学习过程,使学生获得成就感,培养合作精神。
课堂听写前教师让学生自己在家先听写,可以家长报也可以自己写出汉语再默写。听写的内容是本单元的单词、词组、句子或是课外阅读中的词汇,由学生自己定。课堂听写采用记分制,达到100分的同学加10分,90分以上的加5分,没达到90分的就算不合格,不合格的同学要找课代表重新听写。他们可以找本组组长寻求帮助,也可以找一帮一结的对子弄清楚没写会的内容。重新听写达到90以上的可以补加3分,基础差的同学可以降低标准,达到60分即可加5分。对于重新听写合格的学生,教师应及时给予表扬鼓励,帮助学生建立自信,激发积极学习情感。
三、单元测试评价
单元测试作为阶段性的测试结果是形成性评价的一种形式。教师在完成每个单元的教学后,运用单元测试对学生进行评价。
以上一次期中或期末考试成绩作为评价标准。120分试卷,108分以上的加15分,96分以上的加10分,跟上次比较有进步的同学再加五分。96分以下的同学,跟上次比有进步的加5分。
每次单元测试后,还要求学生进行自我评价,写出试卷分析,对自己试卷的得失进行一个小结。引导学生进行单元测试后的自我评价,对于强化学生对单元重点、难点的掌握起着至关重要的作用。
四、课文背诵的评价
背诵典型的对话或者课文是学习英语、培养语感的一种重要途径。通过背诵帮助学生掌握生词,养成英语思维的习惯,有助于提高听说能力,还可以帮助学生提高阅读理解能力。
五、完成作业评价
德国教育家第斯多惠说过:“教学的艺术不在于传授本领,而在于激励,唤醒和鼓舞。”对于完成作业的评价,笔者主要是通过口头表扬并加分的方式。
对于按时交作业,并且书写认真,正确率高的学生及时给予肯定,并加5分;对于没按时交作业的学生扣5分。收作业的事情让小组长参与,培养他们的责任心。
六、课堂纪律评价
形成性评价要求积极有效的课堂环境,而这与学生良好的纪律有着紧密联系,有时课堂气氛活跃,但课堂纪律却难以控制,因此对课堂纪律评价尤为重要。
对于课堂纪律评价采取记分制,违反纪律一次扣10分。一个月内纪律扣分最多的同学会告知家长共同管理该生。课堂纪律评价不仅要成为约束学生的一种方式,也要成为服务课堂的工具,使其成为提高课堂效率的一种有效手段。
关键词:数学教学步骤认知结构参照系
根据每个单元的知识结构,从小学生的心理特点和认知结构出发,由教师确定每个单元的教学目标,并找准该单元的知识重点,难点及关键,然后根据学生的认知水平,组织有效的课堂教学活动,完成重点、难点及关键的教学,教给学生学习的方法。
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.
Abstract:Withtheincreasingcomplexityofsoftwareengineering,softwareengineeringqualityrequirementscontinuetoimprove.Theteachingofthetraditionalsoftwaretestingcoursecan'tmeettheneedsofthetimes.Fromthetraditionalsoftwaretestingexperimentalteaching,aimingattheexistingproblemsandtheoverallobjectivesoftheexperimentalteachingrequirements,thispaperexploresthesignificanceofprojectdrivensoftwaretestingandexperimentalteachingreform,whichwithreasonabledistributionofthecurriculumsystem,thedistributionofappropriateexperimentalcontent,canmeettherequirementsofpersonneltrainingprogram.
关键词:软件测试;项目驱动;实验教学;教学改革
Keywords:softwaretesting;projectdriven;experimentalteaching;teachingreform
1传统测试课程教学存在的问题
2项目驱动教学的内涵
“项目教学法”最早见于美国教育家凯兹和加拿大教育家查德合著的《项目教学法》。“项目教学法”的理论认为:知识可以在一定的条件下自主建构获得;学习是知识、技能与行为、态度与价值观等方面的长进;教育是满足长进需要的有意识、有系统、有组织的持续交流活动。教育家陶行知先生说过:教、学、做应是一体化的,教、学、做是一件事,不是三件事[2]。
项目教学法由以下内容组成:有一定的教学内容,具有实际应用价值;能将理论知识和实际岗位技能结合起来;与企业实际生产或商业经营等活动有关系;学生可以独立制定计划并实施;学生可以运用所学知识克服、处理在项目工作中出现的困难和问题;有一定的难度,学生在完成过程中能掌握和运用新的知识和技能;要渗透情感、态度、价值观的培养;有明确而具体的成果展示,师生能共同评价项目完成情况和工作成果[3][4]。
3项目驱动的软件测试实验教学的意义
以软件行业发展需要为依托,面向软件开发(敏捷开发)过程中对软件测试人才的迫切需求,以提高教学质量为核心,以教学改革为动力,以实现软件开发与测试的学生知识、能力与素质协同发展为原则,以培养学生实践能力为目标,结合学科优势,以主干课程建设为突破点,开展项目驱动软件测试实验教学改革与研究,构建和实践面向应用型本科软件测试人才的专业实验教学体系。具体的意义可归纳为以下四点:
③以点带面,扩展软件工程专业实验教学体系。通过在主干课程中适当引入综合性实验、设计性实验、软件工程案例分析,可加强学生的实践技能、创新意识和团队精神的培养,提高学生的综合运用能力和竞争力。从长远来讲,这项成果会进一步提高我校该专业的人才综合素质,进一步提高该学科专业综合竞争力。
④扩大毕业生就业率及提高就业档次。通过该项目的建设,希望能推动该学科专业课程体系的优化,改善广州大学该专业本科学生的知识结构,提高软件测试学生的综合素质和专业技能,扩大毕业生就业率及提高就业档次。
不管是站在专业学科建设的角度,还是站在学生培养的角度,从培养“高素质、复合型”的软件测试人才、解决学生就业的目标来看,教学改革研究均具有重要的意义,有必要开展系统、深入的研究。
4项目驱动的软件测试实验教学改革方案
以培养“高素质、复合型”的软件测试人才为目标,以专业主干课程体系优化主干课程教学团队,强化主干课程配套的实践教学环节,构建了理论教学和实践教学相结合的、“测试理论+测试方法+测试工程”三位一体的主干课程培养体系,并开展长期的跟踪实践,努力在应用型创新人才培养模式上形成自身的专业特色,完善“强基础、重能力、多样性、个性化”的人才培养方案。
4.1软件测试的课程体系的建立
随着软件行业对软件测试重视,软件测试对从业人员的要求也越来越高。传统的教学内容已经不能满足就业人员的需要。需对软件测试的课程体系进行扩展、优化。如图1软件测试教改实践课程体系所示。
软件测试基础:本课程从理论和实践两个层面引导学生学习软件测试的基础知识,涵盖软件测试的思想、流程和方法,主要内容包括软件测试的基本概念和基本原理、白盒测试方法、黑盒测试方法以及面向对象软件测试等知识点。
高效单元测试:课程以最典型的单元测试框架JUnit为例讲述了单元测试的方法和最佳实践,介绍了在java软件开发中使用junit进行测试的原则、技巧与实践,深入阐述如何编写自动测试。课程讨论了实践中的测试技术,主要内容包括:用mockobjects进行隔离测试、用ant和maven进行自动构建、Cactus进行容器内测试的方法、对java应用程序、数据库应用程序等进行单元测试,以及ParasoftJtest的使用。
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).