测试自动化的软件工程论文

2022-04-15

摘要:该文以分布式软件持续质量保证思想为基础,对软件分布式自动化测试平台的任务调度算法进行了讨论分析,发现其存在的问题。通过引入三种效益函数并结合测试任务调度的特点,提出了新的改进算法,文章给出了改进算法的仿真实验以及评价。虽然新算法在性能上有所改进,但是仍存在不足之处,文章最后提出了今后改进的方向,以使调度算法进一步趋于完善。下面小编整理了一些《测试自动化的软件工程论文(精选3篇)》的文章,希望能够很好的帮助到大家,谢谢大家对小编的支持和鼓励。

测试自动化的软件工程论文 篇1:

高职软件测试课程建设研究

摘要:软件测试是软件的整个生命周期内确定其功能和稳定性的重要措施,在软件的开发阶段软件测试发挥了重要的作用。现在随着互联网技术的进步,各种软件层出不穷,给人们的工作、生活带来了极大的便利。软件种类的增多也就相应的对软件测试专业人才提出了更高的要求。高职软件测试课程为了能够培养更多的专业软件测试人员,必须强化课程建设,采取有效的教学方法,将理论与实践相结合,为社会培养更多的专业人才。

关键词:高职院校;软件测试;课程建设

在一款应用软件从编程开发到最后投入市场应用的完整过程中,软件测试无疑是最重要的步骤,通过软件测试可以发现软件存在问题,然后让软件开发人员进行修复,从而能够让软件稳定的运行。作为高职院校开设的软件测试课程就是为了能够培养专业的软件测试人员。软件测试的理论内容比较丰富,具有很多的专业术语,测试的程序和方法比较复杂,而且测试的工作量巨大,因此高职院校的软件测试课程教学必须采取有效的教学模式和方法,将软件测试的相關理论与软件测试的实践紧密的结合,让高职学生能够从理解软件测试的相关概念人手,逐步的掌握软件测试的原理、方法以及如何使用软件测试工具,只有这样才能够把高职学生培养成软件测试的专业人才,因此高职软件测试课程要以当前的软件行业对于人才的需求出发,探索软件课程建设的新模式。

1目前高职软件测试课程存在的问题

通过对目前软件企业的人才需求进行调研以及高职软件测试专业毕业生的反馈中可以看出,目前的高职软件测试课程在理论建设上,普遍存在的问题就是培养的学生对软件测试知识概念不清,测试的方法不明确,测试用例设计冗余以及功能的覆盖率相对较低的问题,普遍对于“等价类”和“边界值”等测试方法无法很熟练地运用。在软件测试课程设计上,对测试理论的介绍不全面,不能够全面系统的反映软件测试的整个知识体系和结构,导致培养的学生软件测试实践操作能力不佳,测试效果不尽如人意。

1.1软件测试课程理论没有形成完整的体系

目前的高职软件测试课程普遍存在的问题就是理论内容较多,涉及的知识点比较零碎,这样就会让学生在学习的过程中感到无所是从,无法抓住理论学习的重点。作为软件工程课程体系的一门重要内容,软件测试兼具了软件测试的理论和实践的双重功能。课程内容涉及了很多专业的测试理论和测试方法,因此对于高职学生的逻辑思维能力要求较高,如果单纯地为学生灌输测试理论或者测试技巧,而不是将两者有机地结合在一起,就会让学生在学习中无法抓住重点,在脑海中形成完整的知识体系脉络。

1.2学生对软件测试学习兴趣不高

高职软件测试课程的教学在讲解各种测试技巧时,通常都是采用的手工测试的方法,老师讲解的测试案例大都是教材提供的或者是以往开发的一些小程序,学生对于这些软件的功能还没有办法完全理解,对于程序的源代码也不了解,在学习中完全是以完成练习的方式来做测试,导致了学生学习兴趣低下。而且现在的软件开发功能越来越复杂,对于测试的要求也原来越高,对于测试人员各方面知识和能力的要求也与以往有很大的不同,但是现在的软件测试课程教学培养的学生在学习完软件的开发和软件的测试以后,没有形成一套完整的关于软件开发流程的体系,对今后的就业也会产生一定的影响。

1.3课堂教学案例不完备

高职院校的软件测试课程教学老师本身并不是专业的软件设计人员出身,很多老师都没有软件开发的相关经历,因此在测试课程教学的过程中,采用的教学案例大都是一些比较零散的小程序,在学生每次进行软件测试练习时都需要对软件的功能进行重新地了解,因此就无法把学习的重点放到软件的测试方法上和对比分析上,这样就会减弱软件测试实践教学的效果,尤其是一些软件测试需要分阶段的测试技术,包括单元测试、集成测试、系统测试以及验收测试等,这些都要求学生必须掌握连贯的测试流程和测试技术。

2高职软件测试课程建设的改进措施

2.1壮大软件测试教师队伍

软件测试课程教学效果与教师队伍的教学水平息息相关,通常在软件与信息服务专业测试课程当中都是外聘的企业工程师来负责教学任务,而对于软件开发这一类的课程比如“Ja-va面向对象程序设计”“web应用程序开发”以及“Android应用程序开发”等一般都是高职院校的内部老师负责教学,这就导致了软件开发和软件测试成为完全分离的两个教学部分,在软件开发课程的教学当中,老师多是关注与对软件开发语言和开发方法的介绍,很少提及关于软件测试方面的内容,而在软件测试课程教学中,老师则更多的关注软件理论知识和测试技巧,这种相互脱节的教学体系设计让学生很难有一个系统的软件测试知识体系。因此在软件测试课程建设中,对于师资力量的分配要重新考虑,在教师队伍的团队建设当中,要选择软件测试专业实训老师以及软件开发专业老师共同组成软件测试课程的教师队伍,在教师队伍中以实训老师为主导,软件开发老师作为辅助。在教学队伍的选拔方面,由于实训老师比较熟悉软件测试相关的理论和实践,因此选择实训老师要优先考虑熟悉自动化测试软件的具有经验的老师,其他专业老师高职院校可以采用定期培训的方式提升他们对于软件测试理论和功能测试技术的熟悉程度。

2.2软件测试理论教学课程建设

针对软件测试理论对于高职学生无法提升学习兴趣的现状,可以尝试对软件测试理论进行改革,采用创新性的教学方法来提升学生的兴趣,让他们能够主动接受老师讲述的软件测试理论,提升他们自主学习的积极性。比如在理论教学中为了能够开拓学生测试用例的设计思路,除了给学生展示一些常规的登录测试用以外,还可以为学生展示一些非常规的测试用例,比如通过演示黑客攻击的方式和手段来向高职学生展示数据库是如何被入侵和篡改的,让学生的思路能够得到拓展。其次可以采用典型案例教学的方法吸引学生的兴趣,达到灵活运用的目的。比如从一些现实的软件测试中选择一些常用的软件作为测试,让学生一方面可以灵活的掌握所学习到的理论知识,同时也可以让他们学会如何运用所学的知识来指导软件测试的实践,让他们了解一些测试管理工具的使用情况,明白测试人员之间如何协作来实现整个软件的测试过程。最后可以采用个性化的教学方法,利用新型教学模式来因材施教,根据每一位同学在软件测试理论掌握的程度采取不同的教学方式,分成不同的学习小组,每个小组安排的教学任务不同,对于动手能力相对较差的小组,要给予他们明确的测试步骤引导,让他们按照规定的步骤去进行软件测试,逐渐掌握软件测试的技巧;对于一些基础较好,具有个性化编程技术小组的学生,可以针对源代码的白盒测试给予具体的指导;对于软件测试理论基础扎实,进步较快的小组则可以安排一些更高阶的软件测试任务,通过小组内和小组之间的示范带头作用,由浅入深、循序渐进地进行软件测试学习,从而让整个班级的学习能力都有所增长。

2.3软件测试实践教学课程建设

在软件测试实践教学环节可以采用基于“工作过程”的实践教学方式,将教、学、做、考相结合,不断提升软件测试教学的效果。首先是软件测试问题的引入,向学生展示软件存在的一些典型bug,让学生有一个直观的印象,然后针对这些bug提出问题让同学们相互讨论,从而引出相应的知识点;其次进行知识讲解,可以针对不同软件的不同测试过程进行延伸讲解;最后是软件实践,让学生根据本小组的测试对象来解决软件测试中的实际问题,主要是锻炼学生的临场应变能力和创新思维能力。通过以上不同实践方法提升软件测试课堂的教学效果和学生的实践能力。

具体的实践测试环节包括布置任务、分组,然后创设软件测试环境,然后让学生根据软件测试的任务编写软件测试计划,根据测试计划进行软件前台测试和后台测试,最后由老师对测试结果进行验收。软件测试实践环节的准备工作是最重要的,要引导学生在实践之前做好与实践环节相关的理论知识的准备工作,同时要求学生能够根据被测试的软件对象认真地思索实践的内容,并对具体的实验内容来进行设计。在实践中老师要将学生在过程中出现的问题交由各个小组内部讨论,尽量从小组内找出解决问题的办法,对于一些比较困难的问题老师可以给予一定的指导,为学生准备几种不同的方案供他们选择,学生根据所学的软件知识从这些方案中选择最具有性价比的方法。每个小组在完成软件测试实践以后,都要提交一份软件测试计划、总结以及软件测试报告,针对软件存在的具体缺陷来设计解决方案。

通常软件测试课程一般都是安排在软件开发课程之后,这时学生一般都能够掌握软件测试课程的教学内容,然后在开始软件测试的实践,这样能够更好地促进学生对软件测试体系和结构的掌握。

3结束语

高职院校的软件测试课程建设目的是为社会培养更多软件技术过硬、能力较强、可以满足未来软件开发企业需要的应用型人才,因此在课程设置上要不断增强学生的学习兴趣,科学合理的安排软件测试课程教学内容,提升学生的软件测试实践能力。

作者:蔡红

测试自动化的软件工程论文 篇2:

基于效益函数的软件分布式自动化测试调度算法研究

摘要:该文以分布式软件持续质量保证思想为基础,对软件分布式自动化测试平台的任务调度算法进行了讨论分析,发现其存在的问题。通过引入三种效益函数并结合测试任务调度的特点,提出了新的改进算法,文章给出了改进算法的仿真实验以及评价。虽然新算法在性能上有所改进,但是仍存在不足之处,文章最后提出了今后改进的方向,以使调度算法进一步趋于完善。

关键词:软件质量;分布式软件测试;调度算法;效益函数

A Study of Scheduling Algorithm for Distributed Automatic Software Testing Based on Utility Functions

XU Mei-yang, HONG Mei, QUE Shu, LI Hai-nu

(Computer Science College of Sichuan University, Chengdu 610065, China)

Key words: software quality; distributed software testing;scheduling algorithm;utility function

随着社会的进步与发展,计算机早已渗透到了社会生活的各个方面。人们对于计算机软件质量的要求越来越高,软件技术发展日新月异,高性能的软件正日益运行在由操作系统、数据库系统以及大量复杂硬件组成的网络化平台中,这就使软件工程规模不断扩大,导致了软件测试任务呈几何数增长,从而使本地有限的资源无法在有限的时间内完成如此数量庞大的测试工作。为了解决大规模软件测试中时间与资源有限的问题,美国马里兰大学的Adam Porter教授与范德堡大学的Douglas Schmidt教授为此提出了软件分布式持续质量保障的思想[1],该思想是以利用网络中的空闲资源来进行全天候的测试,用该思想建立起来的软件分布式自动化测试平台,很好地解决了时间与资源有限性的问题[2]。在测试平台中,测试任务调度算法作为其重要的组成部分,主要研究的是如何为任务与资源之间寻找最佳的匹配策略,管理和调度测试任务的执行,从而使测试资源得以合理利用,测试效率得以提高。该文分析并讨论了基于效益函数的测试调度算法的原理与实现方法。

1测试任务调度定义

测试平台将测试任务分配给测试资源进行执行的过程中,需要考虑各种因素[3],任务调度算法就是基于考虑这些因素所实现的一种测试任务最优化划分的方案,因此任务调度算法的优劣性直接影响了软件测试平台完成测试任务的效率。

而平台任务调度算法的实质就是在有m个测试任务等待执行,有n个测试资源是可用的情况下,将m个测试任务以合理的顺序分配给n个测试资源端进行执行。现对任务调度算法中涉及到的定义说明如下:

1)测试工程(Test Project,TP)由测试人员所提交的一个关于测试对象的抽象描述,包括所有测试任务、测试脚本以及测试任务对测试资源的需求等。

2)测试任务(Test Task,TT)测试任务是经由任务划分模块划分完成后所形成的独立可分发调度的任务执行单元,是任务调度的基本单位。

3)测试用例(Test Case,TC)测试用例是为某个特殊目标而编制的一组测试输入、执行条件以及预期结果,以便测试某个程序路径或核实是否满足某个特定需求,体现了测试的方案、方法、技术和策略。内容包括测试目标、测试环境、输入数据、测试步骤、预期结果、测试脚本等。

4)测试脚本(Testing Script,TS)测试脚本是自动执行测试过程(或部分测试过程)的计算机可读指令。测试脚本可以被创建(记录)或使用测试自动化工具自动生成,或用某种高级语言编程来完成。

5)测试资源(Test Resources,TR)测试资源是由分布在不同地域的异构网络资源所组成的,是测试任务的执行端。测试资源是测试任务赖以执行的保证,平台拥有的测试资源的种类和数量越多,测试任务才能够更快更好的得到执行。

2现有任务调度算法

任务调度算法在分布式系统中的重要性显而易见,但是由于各个系统的任务性质之间的差别以及任务调度本身存在的复杂特点,提出一个普遍适用且高效的调度算法并非易事。下面列出了一些常见的任务调度算法[4]。

1)OLB(Opportunistic Load Balancing)随机负载平衡算法

该算法的主要思想是并不考虑待分配任务的执行时间的长短以及其对资源的需求,而直接把待分配任务随机地分配给任一个可用资源。该算法具有思想简单、调度效率高、一定程度上保证了负载平衡等优点,由于未考虑到待分配任务的需求以及任务的其他因素,当一个任务被分配给并不能满足其执行条件的资源时,该任务就无法得到顺利执行,从而导致测试任务的失败。

2)MCT(Minimum Completion Time)最早完成时间算法

MCT是以任意顺序分配作业到具有最早完成时间的节点上,而不考虑该节点上的计算资源是否对此作业具有最小执行时间,适合于要求快速响应的任务。该算法有可能因为被分配的任务占用资源时间过长而导致任务完成的代价过大,也就是比较浪费计算资源。

3)Min-Min(Minimum - Minimum computing time)算法和Max-Min (Maximum–Minimum completion time)算法

Min-Min算法首先将需要调度的作业组成一个作业集合,然后计算任务集内每个任务的最短完成时间。调度过程中,从作业集中选取最具有最短执行时间任务调度到使之最快完成的主机上执行,然后从任务集合中删除该任务,重复以上操作直到任务集为空。Max-Min算法同Min-Min算法非常类似,二者都需要计算每个任务在任何可用资源上的最早完成时间,不同的是Max-Min算法选择将最早完成时间最大的任务映射到对应的资源上。Min-Min算法和Max-Min算法的映射规则会使得更多任务映射到某一个或几个资源上,从而使得整个分布式系统中可用资源的负载不平衡。

3基于效益函数的测试调度算法

上节介绍的任务调度算法,并不能够完全解决任务调度所碰到的问题。最突出的就是现有的任务调度算法所处理的任务对象以及资源对象都是基于小数量的,而对于数量大的任务,现有算法并不能够较好的完成工作。如果将现有的任务调度算法直接应用到测试平台中,虽然能够完成测试任务的分配,但是由于其低下的效率,最终将导致测试平台中存在着大量的测试任务等待执行而造成测试任务的拥堵,而在测试任务执行端也会有大量的空闲资源未能够加以利用,从而使得测试任务的进度过慢。

因此,针对本平台中的任务调度的特点,需要有针对性地设计一种新的任务调度算法来解决上述问题。

3.1引入三种效益函数[5]

通过对上节介绍的任务调度算法进行研究,发现在min-min算法的基础上引入效益函数,可有效地对任务调度过程进行调节,使测试任务执行的效率得到较大提高。为此,引入了三种类型的效益函数:

3.1.1硬性级效益函数

time_utilityhard(m,n)=ì

(1)

此效益函数的含义是:

如果测试任务Tm无法在测试任务所规定的截止时间之前完成,那么将不会获得任何效益,如果能够成功完成,则其效益值为1。

其中,TCm,n指的是测试任务Tm在测试客户端资源Rn上的期待完成时间,TDm指的是测试任务Tm截止执行的时间。

3.1.2软性级效益函数

time_utilitysoft(m,n)=ì

(2)

此效益函数的含义是:

如果测试任务Tm无法在测试任务所规定的截止时间之前完成,使得执行时间超过了规定时间,那么其获得的效益值是按照一定的方式进行计算之后而获得的,并不是为0;而在测试任务能够成功的在其规定时间之内完成时,则其效益值为1。

其中函数中的TCm,n指的是测试任务Tm在测试客户端资源Rn上的期待完成时间,TDm指的是测试任务Tm的截止执行时间。λc是一个常数,满足λc>0。

3.1.3尽力级效益函数

time_utilitybest_effort(m,n)=e-λb*TCm,n

(3)

此效益函数的含义是:

如果测试任务Tm需要在一个很长的时间内才能够完成,那么测试任务会给资源带来一定的效益,但是并不会很多,但是假设测试任务能够在一个很短的时间内就可以完成,那么资源就会得到更大的效益。

其中的TCm,n指的是测试任务Tm在测试客户端资源Rn上的期待完成时间,λb是一个常数,满足条件λb>λc(λc是软性级效益函数中的常数)。

3.2改进的调度算法描述

在Min-Min算法的基础上,通过效益函数的引进,可以解决调度效率低下的问题。引进效益函数后的改进调度算法描述如下:

1)把待测任务集合中的任务分为三种[6],以供调度算法进行调度:C1是具有硬性级的调度测试任务的集合,C2是具有软性级的调度测试任务的集合,C3是具有尽力级的调度测试任务的集合。

2)在对测试任务进行调度的时候,首先会调度C1中的测试任务,然后再调度C2中的测试任务,最后调度C3中的测试任务。

3)判断客户资源是否能够满足测试任务的测试需求,如果所有的客户资源均无法满足测试任务的需求,则放弃此测试任务的执行;如果存在资源能够满足测试任务的需求,则执行下一步;

4)由上节中所引入的三个效益函数来计算测试任务在所分配的客户资源上进行测试所能够获得的效益值,然后执行下一步;

5)如果同时存在很多资源能够满足待测试任务的执行条件,那么比较一下由哪一个资源进行测试能够得到最大的经济效益,然后选择将测试任务分配给能够得到最大效益的测试任务执行客户端,然后将该序列记录下来[7];

6)对于效益值相同的序列对,则比较该两项测试任务执行时间的大小,然后选择将测试任务分配给执行时间小的测试资源进行执行;

7)反复执行步骤3-6,直到所有的测试任务均完成。

改进后的算法流程如图1所示。

4基于效益函数的测试调度算法实验验证和结果分析

该文的改进调度算法是在Min-Min算法的基础上改进得来的,为了验证改进调度算法的有效性,需要对算法进行性能评估,将改进算法与Min-Min算法的性能进行对比实验。

4.1实验环境介绍

本实验采用的是由澳大利亚墨尔本大学所开发的算法实验模拟器GridSim来完成对算法在各种情况下的性能模拟实验。Grid? Sim模拟器可以进行网格调度算法的模拟,用户通过使用模拟器所提供的method来完成模拟文件的编写,从而完成整个调度算法的实验模拟过程。

GridSim的模拟特性[8]:

1)从网络应用的模拟角度:在GridSim中使用的是虚拟程序,它通过理论计算来对应用的时间花销进行分析,从而能够更好的完成大量实验的模拟工作。

2)从网络中间件的模拟角度:在资源管理方面,GridSim为了更好的对资源的异构性进行模拟,提出了资源的“空间共享”以及“时间共享”的概念。在GridSim中,其信息服务与任务调度都是属于集中式的。

3)从网络资源的模拟角度:GridSim可以模拟计算能力和网络带宽。

4)从使用特性的角度:由于GridSim是基于SimJava来实现的,所以它使用的是纯Java语言。GridSim支持可视化并提供API,需要用户编程来实现网络环境的模拟工作。

4.2模拟实验步骤

1)创建网格资源点;

PE1=new PE(id,capability);//创建资源对象。

PEList peList=new PEList( );//创建资源列表对象

peList.add( PE1); //将资源加入列表

Machine machinel=newMachine(id,pelist);//创建资源列表

2)创建资源与任务;

GridResource gridRes =new GridResource (name,baud rate,seed, resConfig,peakLoad,offPeakLoad,holidayLoad,Weekends,Holi? days);//创建网格资源对象,参数分别表示资源名称、带宽、seed、资源特性、负载等信息。

Gridlet gridletl=new Gridlet(id,length,configuration,dependent);//创建Gridlet对象,id表示任务号,length表示任务的计算量,con? figuration表示任务的配置要求,dependent表示任务的依赖属性。

3)编写任务调度算法,开始进行算法模拟实验;

class min-min extends GridSim //继承GfidSim类

{public void body()//在body()编写新算法

}

GridSim.startGridSimulation();

4)模拟结束,输出任务完成情况。

private static void printGridletList(GridletList list);

4.3模拟实验结果分析

在本次实验中,为了与传统min-min算法进行比较,GridSim随机构造了m个任务和n个资源,其中任务共分为三大类:硬性级时效性任务、软性级时效性任务以及尽力级时效性任务。在每次运行程序的时候,可以通过命令行参数来设置任务数目,以及任务中所需要的配置参数。设置任务数为500,资源数为250,该情况下任务调度情况的模拟实验结果如图2所示:

图2测试任务调度的时间对比

从图中可以看出,两种算法均能够完成调度任务,但是由于在改进算法中考虑了任务的执行效益,相比于传统min-min算法,改进调度算法能够更好的完成任务的调度,表现出了相对于min-min算法更好的性能。

5结束语

该文通过引入效益函数,使传统的任务调度算法性能上得到了一定的改进,但是基于异构网络的新特性,该改进算法仍有不足之处,还有许多问题需要解决。这些问题主要包含以下几个方面:

1)有关分布式持续质量保证方面的研究还有待深化,基于此思想的分布式自动化测试调度算法还有待完善,比如测试任务的划分以及测试任务的结果的分析与收集等。

2)由于异构网络的复杂性,对于执行失败的任务,有必要分析其原因,如何收集信息并正确的定位出错原因也有待研究。

3)对于大任务量的实时状态以及任务结果如何做到快速查询也是亟待解决的问题之一。

4)由GridSim模拟器试验可以看出,虽然本hg文中的改进算法有效的提高了任务的调度效率,但是由于数据的不均衡性,使得性能并没有达到预想的效果,且算法的动态性适应也不足,因此对于任务调度算法仍需进一步研究。

(下转第2520页)

参考文献:

[1] Memon,A.Porter,C.Yilmaz,A.Nagarajan,D.C.Schmidt,andB.Natarajan.Skoll:Distributed Continuous Quality Assurance[C]//Proceedings of the 26th IEEE/ACM,International Conference on Software Engineering, (Edinburgh, Scotland), IEEE/ACM,2004.

[2]石柱.软件质量管理[M].北京:航空工业出版社,2003.

[3]闫会强,许静.分布式软件测试系统的设计与实现[J].南开大学学报:自然科学版,2003,36(4):50.

[4]李国微,王洪亚.分布式实时数据库并发控制[J].小型微型计算机系统,2003,24(6):1021-1024.

[5]王志平,熊光泽.实时调度算法研究[J].电子科技大学学报, 2000,29(2) :205- 208.

[6]曲绍云.分布式异构系统中任务调度问题的研究[D].青岛:青岛大学,2005.

[7]王岁花.一种新型快速排序算法的设计与实现[J].河南师范大学学报,2002(2).

[8]孟宪福.分布式环境下任务调度模型研究[J].大连理工大学学报, 2006(6).

作者:许眉扬 洪玫 阙舒 李海怒

测试自动化的软件工程论文 篇3:

提高中小软件公司测试水平的见解

摘要:本文介绍了中小软件公司提高软件测试水平的一些见解。包括思想方面,管理实施的方面,及技术的方面。

关键词:软件测试 软件工程,质量

Views on Raise the Level of Small&Medium Software Companies Test

Zhou Pijian

(GangXi NanNing YingTai Career Training School,Nanning530022,China)

Abutract:This article describes the small and medium-sized software companies to improve software-testing level of insight.Including the management,implementation and technical aspects.

随着软件技术的发展,软件测试的地位越来越被人们重视,测试技术的发展也日新月异,甚至出现了专门的软件测试公司。在这样的潮流下,我国的软件公司受到了很大的冲击,没有测试就没有质量的观念被越来越多的管理者所认识,对我国软件行业中占据主导地位的中小软件企业来说,硬件,环境,人力等各方面力量相对不足情况下,不可能向微软等大公司那样去实施软件测试,那如何在现有的条件下进行改善呢?根据自己以前所在公司的一些测试经历,总结了一些经验,希望对我国中小软件公司的测试发展提供一些新的思路。

软件测试作为软件工程的一个有机组成部分,其过程就是以发现错误,检验是否满足需求为目标。在软件投入生产性运行之前,尽可能多地发现软件中的错误并修正,才可保证软件的质量。据有关统计,在整个软件开发的成本中,测试上的开销要占40%到50%。放眼世界,好的IT公司对软件测试的重视程度也发生了新的变化;美国硅谷地区,凡是软件开发企业或是设有软件开发部门的公司,都有专门的软件测试单位,其中软件测试人员的数量相当于软件开发工程师的四分之三,负责软件测试的质量保证经理的职位与软件开发的主管是平行的;作为软件行业老大的微软公司,在其内部,软件测试人员与软件开发人员的比率一般为1.5—2.5左右,从其软件开发的成功实践过程表明这种人员结构的配比是非常合理和正确的;在软件产业发展较快的印度,软件测试在软件企业中同样拥有举足轻重的地位。由此可见软件测试是多么地重要!

相对而言,我国的现状是:软件开发行业主要由中小型软件公司组成,在人员数量上少则不到十来人,多则几十人,却少有上百人的。由于人员数量的不足,很多公司把软件测试放在了一个可有可无的地位,据了解,大多软件公司存在这样一种状况:技术部十来个开发人员,而竟没有一个专职测试人员,等到软件产品将要交付给客户时,则对整个产品进行交互测试,而测试的工作常常是胡乱地交给市场部的销售员或维护员去瞎折腾,常常会发现很多错误,甚至是低级的BUG,由于整个过程省去了中间的测试,很多时候造成无法找出错误的原因,使得软件产品的生产不得不修改计划,影响了最后交付的时间,很多时候使得开发过程混乱、无序。造成了很大的损失。另外,即使是有专职测试人员的公司,其测试人员的数量、地位、待遇、重视等都远远不及开发人员。因而造成软件测试都是不足的,开发出来的软件产品存在相当多的漏洞,软件产品的质量得不到保证上,甚至交付产品后还常常从不断地从客户处得到BUG,造成了很不好的影响。 因此,加强软件测试,特别是中小软件公司的软件测试及水平是提高产品质量的重中之重,是企业要立足于市场的根本。

要如何提高中小软件公司的软件测试水平呢?就我的经历而言,一是把软件测试的认识和管理提高到相当的高度;二是提高测试技术。特别是认识和管理提高到位了,产品的质量就会改善很多。

其一,软件企业要从思想上的发生转变,每个员工都要意识到软件测试不仅是在软件开发完成后执行,而且是在软件开发的各个阶段都要参与执行。在此基础上提高自动化软件测试手段才能提高软件的质量。因此,对软件开发来说,其重心不仅要关注设计、编码阶段,更要关注在测试等关键点上。作为领导,这一点要带头领悟到。

我所在的公司老板和项目经理曾经做过这样一种方案:快速完成所有的编码,完成后进行所谓的测试,测试出现问题后再进行修改,以为这样能达到最快的速度和质量,但是,事实证明,没有把测试分发到代码制作的各个环节,最后的结果是发现一大堆的错误,甚至有些是至命的错误,使得产品根本无法在计划的时间内完成,造成时间不足,修改程序时匆匆忙忙,甚至不能按正常流程走,使得产品做得很粗糙,递交到客户手中后还发现相当多的问题,给后期的维护造成了很大的困难,记得当时我们的客户遍布全区,维护的工作量非常大,经常超出原来的维护计划,造成成本上成倍增加,给公司带来了很大的损失。基于这种现象,公司的领导在后一版的开发中,加大了测试的力量和过程,使得后一版不仅在规定的时间内完成,效果也比上一版好得多,在成本上也节省了很多。真的是体会到了“将测试渗入到软件开发的各个阶段”的多多好处。

在中小软件企业中存在这样一种现象:很多企业会喜欢让那些经验最少的新手、效率低下的开发者或不适合干其他工作的人去做测试工作,认为这样可以最佳的利用资源,因为在他们的观念中存在这样的理念:测试是没有技术含量的,只要多用用软件就可找到错误。正是这样的理念造成了企业测试水平低下,成本花费高。如要改变这种情况,就得好好的认识什么是测试,一个合格的测试工程师应具有那些基本素质?

以下是针对企业当前情况,对测试工程师基本素质进行了如下的总结:

1. 态度上:对软件测试要有浓厚的兴趣,有耐心,有意力。

2. 技术能力:

(1) 具备计算机的基础知识和测试专业知识这样的技术能力

(2) 有一定的编程经验,程序相当于程序员

(3) 能从使用者的角度出发,根据开发使用的设备、技术等特点来设计测试用例

3. 沟通能力:能很好地合项目经理、开发人员、客户、市场人员沟通,从沟通中归纳出有用的信息

4. 严谨、敢于承担责任、稳重的做事风格:测试中要考滤多方面,发现错误要正确面对,急时纠正。

5. 具有怀疑与进取的精神:不能以常规的思路来做,要设计一些非常规的、相反的测试用例,没有怀疑和进取的精神那只能是原地踏步,没有进展

6. 善于自我总结、自我督促,积极学习:测试是一种即繁琐又枯燥无味的工作,做多了你会觉得似乎一成不变,不总结,督促自己那就会陷入一种做事无动力的状况,积极学习不断出现的新的测试工具。

其二,管理要加强,软件测试管理不能随意、简单地做,不能没建立有效、规范的体系就动手测试,哪出问题就先补救哪,因为这会把测试人员常被弄得疲惫不堪,很多时间被耗费在单调无聊的补救工作上,使得测试人员失去了兴趣,陷入瓶颈,工作效率、能力不仅得不到提高,甚至是下滑。而建立有规划的,可行的软件测试管理体系能使用测试人员事半功倍,提高工作效率,进而提高产品的质量。那么,如何建立呢?我认为除了参照国际著名软件公司的做法,更主要的还是结合自身的特点、软件开发的体系、测试人员的技术特点与行为习惯等等建立一套符合自身公司体系。目前,很多小公司的人手不是很足,要建一个和软件工程中所描述的测试体系是非常不现实的,就我看来,除了公司本身要设立单独的测试岗位,到少一个测试经理,一个测试员外,开发人员还得担负一定的测试任务。测试经理主要参与测试的规划和过程管理以及设计阶段的测试,测试员主要是负责测试用例的编写和相应的编码测试,而开发人员在完成自己的编码任务后,则参与到单元测试来,配合测试人员完成相应的测试工作。整个过程中要求开发和测试要合协,要测试经理与项目经理做好协调,一起参与项目的调研,需求分析并认真地做好文档测试,因为把好这关,源头正了,下面也就好做了。在实际过程中不论遇到什么困难,都要按照规定的步骤来实现,不能跳过去。一旦出现违反规定的作法,不论什么原因,公司都要给予惩罚。相信经过这样的实施,测试的框架就基本上建起了。

其三,测试的实施过程要强调流程,否则,常常也会是事与愿违。

1. 在初始开发阶段,测试经理要和项目经理参与总体设计,协商并拟订开发规范,并交给由开发人员和项目管理人员评审。根据提出的意见,对规范进行修改,并提交高层审核。这样可发挥各方面的积极性,对公司领导而言,他们的参与加强了对整个开发的监督;对于开发人员而言,由于是他们提出的,就不会出现把发现错误的责任全部推给测试人员,甚至作到提前预防错误、减少潜在危险的发生,测试人员也会加深地规范的理解,相互间的牵制,保证了开发的质量。

2. 形成需求分析后,测试经理要对分析报告做一个详细的测试,根据需求的实际内容招集相关的人员,包括市场、开发、测试的人员,有可能也请来客户,由项目经理对各项各条给予适当的讲解,与会人员对提出的问题,提出不足,并给予评介,特别是把握计划中的不变与可变的地方,并由此做出测试的标准。例如:设计报表时是要设计灵活变化的还是要一层不变的?得从参与会议的市场、维护人员及请来的客户处了解客户的实际使用情况,包括年龄、计算使用水平、业务水平等。

3. 在单元测试时要把开发人员的“白盒测试”与测试人员的 “黑盒测试”相互配合。

4. 集成测试:通过化整为一的方法来进行,主要以黑盒的方式来进行。记住两模块接合好后就得马上测试,通过后才能与第三模块接合。

5. 验收测试:多方人员参与,包括市场,用户,专职维护人员。这时主要改善界面的统一性,美观性,易用性。

6. 加强文档测试,测试人员要加强与开发人员的沟通,对开发人员提供的文档加以细化,做到重点突出,内容规范,例如:模块的描述使用功能流程图、数据流程图及用例来描述,这使用整个过程理清思路、逻辑性加强,更易于阅读。在详细程度上可简略些,但随着开发过程的深入要进一步完善,因为这些文档都是单元测试中的标准。

7. 加强人的主观能动性,不论是手工还是自动的方式,都要参与评审,以人的实际为重。

其四,根据公司软件产品的特点,有针对性地对提高测试人员的测试技术和技巧,不要盲从。下面从两个方面加以描述:

1. “白盒测试”要把握如下:

(1) 正确性测试:检查软件的功能是否符合规格说明。一般通过减少枚举的次数,寻找合适的等价区间。如(A,B)是命题F(X)的一个等价区间,在(A,B)中任意取X1进行测试。如果F(X1)错则在整个区间上都错,如正确,则都正确。

(2) 边界值测试:用定义或者等价区间的边界值进行测试。如测试f(x)=√x的一段程序,凭直觉等价区间就是(0,1)和(1,+∞)。可取经x=0。5以及x=2。0进行等价测试。现取x=0以及x=1进行边界。

(3) 容错性测试:测试异常条件下的行为。如输入错误的数据类型,输入域之外的数值。

(4) 性能和效率:测试运行速度和对资源的利用率。

(5) 易用性测试:。一般以用户不翻阅手册就可使用软件为目的。

2. “黑盒测试”,要把握如下:

(1) 等价类划分:设计测试用例要以需求规格说明书为依据,把说明中对输入和输出的要求加以区别和分解。即把程序的输入域划分成若干部分,然后从每个部分中选取少数代表性数据当作测试用例,没有必要用穷举测试。

(2) 边界值分析:选择等价类边界的测试用例来测试。对边界附近的处理必须给予足够的重视,,加强这方面常常可以取得良好的测试效果。特别地,一旦发现的错误就得及时更改,更改后重新测试。

综上所述,是对中小软件企业提高测试的一些行之有效的见解,但不一定适用于所有的软件企业,因为各软件企业存在的问题不同,所处的情况也不同。希望以上的见解可以给大家一些提示,达到提高各自的测试水平。

参考文献:

[1]朱少民.全程软件测试[J].电子工业出版社,2007

[2]微软的软件测试之道 Alan Page KenJohnston Bj Rollison 机械工业出版社,2009

[3]王宇.软件测试的实现和理想[J].中国计算机报,2003

[4]王立福.软件工程[J].北京大学出版社,2009

[5]张大方,李炜.软件测试技术与管理[J].湖南大学出版社,2007

[6]李静,郭晓磊.浅析软件测试技术现状[J].软件测试网,2009

作者:周丕健

上一篇:传统文化广告招贴设计论文下一篇:案例教学初中生物教学论文