时间:2022-12-31 16:06:08
开篇:写作不仅是一种记录,更是一种创造,它让我们能够捕捉那些稍纵即逝的灵感,将它们永久地定格在纸上。下面是小编精心整理的12篇软件测试项目总结,希望这些内容能成为您创作过程中的良师益友,陪伴您不断探索和进步。
关键词:软件测试;软件工程;认识误区;持续改进
中图分类号:TP311文献标识码:A文章编号:1009-3044(34)-1997-02
1 引言
随着市场对软件质量的不断提高和国内软件测试行业的逐渐发展,软件测试不断受到重视,有越来越多的软件企业更加重视软件测试,并已经形成了一套基本的软件测试流程。然而,认识误区的存在需要我们进一步改进软件测试过程。
2 软件测试概述
软件测试就是在软件投入运行前,对软件需求分析、设计规格说明书和编码的最终复审,是软件质量保证的关键步骤。一般按四个步骤进行,即单元测试、集成测试、确认测试和系统测试及发版测试。随着软件危机的频频出现,人们已经开始认识到测试开始的时间越早,测试执行的越频繁,所带来的整个软件开发成本的下降就会越多。所以,软件测试在软件项目实施过程中的重要性日益突出。
3 软件测试过程中的认识误区
3.1 软件开发完成后进行软件测试
人们一般认为,软件项目要经过以下几个阶段:需求分析,概要设计,详细设计,软件编码,软件测试,软件。据此,认为软件测试只是软件编码后的一个过程,这是不了解软件测试周期的错误认识。软件测试是一个系列过程活动,包括软件测试需求分析,测试计划设计,测试用例设计,执行测试。因此,软件测试贯穿于软件项目的整个生命过程。在软件项目的每一个阶段都要进行不同目的和内容的测试活动,以保证各个阶段的正确性。软件开发与软件测试应该是交互进行的,否则,测试的时间将会很短,测试的覆盖面将很不全面,测试的效果也将大打折扣。
3.2 测试过程不够完善
在软件开发领域,确实存在一些东西看起来要比另外一些东西难测试一些,但是远非无法测试。只不过这种不可测试性不是由于被测试的软件内部的过紧耦合造成的,而是和外部某些很难测试的部分耦合过紧,从而表现出被测试的软件本身很难测试。这些很难测试的部分比较常见的有:图形界面、硬件、数据库等。
3.3 强调测试用例设计得越详细越好
在确定测试用例设计目标时,一些项目管理人员强调测试用例“越详细越好”。这种做法和观点最大的危害就是耗费了很多的测试用例设计时间和资源,可能等到测试用例设计、评审完成后,留给实际执行测试的时间所剩无几了。因为当前软件公司的项目团队在规划测试阶段,分配给测试的时间和人力资源是有限的,而软件项目的成功要坚持“质量、时间、成本”的最佳平衡,没有足够多的测试执行时间,就无法发现更多的软件缺陷,测试质量更无从谈起了。
3.4 追求测试用例设计“一步到位”
现在软件公司都意识到了测试用例设计的重要性了,但是一些人认为设计测试用例是一次性投入,测试用例设计一次就“万事大吉”了,片面追求测试设计的“一步到位”。这种认识造成的危害性使设计出的测试用例缺乏实用性,或者误导测试用例执行人员,误报很多不是软件缺陷的“Bug”,这样的测试用例在测试执行过程中“形同虚设”,难免沦为“垃圾文档”的地步。
4 软件测试过程的持续改进
4.1 计划与风险
项目计划对项目过程的实施有着直接的指导作用,它的重要性是不言而喻的。对于软件测试来说,测试计划也是指导后续测试工作的基础,只有对过程中各任务进行更详细的计划,才有利于在测试过程中对项目进度的把握有一个明确的目标;同时,风险策略的制定,也有利于对及早对测试过程中可能遇到的问题做出分析,以便在问题出现时能够尽可能的减少规避风险的成本。
4.2 评审
在测试过程中的每个阶段结束前,都会输出一些资源,文档、用例等等,这些资源往往是下一个测试阶段或软件开发的下一个环节执行的依据。评和审是结合在一起的,每个角色根据自己对项目的了解,从各自角度来审核测试报告的充分性,对质量风险发表各种见解。最终,对报告的规范性也要进行考察。另外,也最好根据实际情况组织会议评审来对一定规模的问题统一评审。
4.3 文档
文档的编写对于测试人员来说是一个十分重要的任务,深入的、充分的投入测试的测试人员能写出高质量的测试文档。所以,测试文档的质量,往往反映了测试人员执行测试的广度和深度。而在文档的编写方面,首先必须形成统一规范;另外,针对不同项目的测试,可以适当对文档标题、内容进行简化。总之,文档模板一旦形成,必须严格遵守。
4.4 方法与策略
测试方法和测试策略,测试的重中之重。测试的策略一般要求从全局方面对测试的阶段、每个阶段的测试类型进行考虑、定义。而测试的方法更多是体现在一个具体的测试中,采取怎样的测试思路。另外,在测试过程中,对资源的协调也非常关键,需要能保证测试资源充分利用,每个测试人员都有适度并且相当的工作量。
4.5 总结测试经验
在测试的过程中,测试人员应该及时总结发现的错误并归类,标明经常容易出错的地方,将意见提交项目经理,审核后,制定出一份统一标准并提供给开发人员,这样就可以提前避免错误、避免重复错误和重复测试,提高测试效率。不仅如此,项目结束后的各项总结报告将是项目的后期维护或二次开发的宝贵参考资料。
4.6 缺陷分析、度量
对测试活动过程中发现的缺陷进行分析、度量,寻找软件开发过程中存在的问题,并持续改进开发过程,提高质量。缺陷的分析、度量从时间上分为两个方面,首先是在软件开发过程中发现的缺陷进行分析、度量;然后就是,对软件产品后,对用户提出缺陷进行统计、分析。
5 结论
测试是用来保证软件开发过程的高效性,以及保证开发出来的软件产品的高质量和可用性的。软件开发本身就是一件非常困难的事情,这也决定了有效的测试是非常重要的环节,我们要加强对软件测试的关注,使大家对于测试首先有一个正确的认识,避免误区的存在,并积极探索测试方法的持续改进问题,真正使软件测试真正起到它应有的作用。
参考文献:
[1] 郑人杰.计算机软件测试技术[M].北京:清华大学出版社,1992.
[2] Fewster M,Graham D.软件测试自动化技术[M].北京:电子工业出版,2000.
关键词:软件测试;分阶段教学;案例驱动教学;双证教育;校企合作
中图分类号:G420 文献标识码:A 文章编号:1009-3044(2012)30-7258-02
近几年来,计算机信息技术发展迅速,我国的IT行业开始向国际化、规范化迈进。以往只重视软件开发而忽视软件测试的情况正在改变,软件测试行业开始迅速发展。
国外小一些的软件企业,软件开发与测试人员之比基本上是1:1,微软公司更是达到了1:2,软测试人员规模远超过开发人员的规模[1]。尽管一些国内大型软件企业开始重视软件人才的合理配置,但有的企业其比例也就只有10:1。软件测试工程师闹人才荒[2],中高级测试员紧缺的现象已十分明显。
据统计,国内软件测试工程师的缺口为20万人左右,这一点从51JOB的招聘信息中可见一斑。近两年,软件测试工程师的需求和待遇都达到了历史新高。
然而与当前软件测试行业如火如荼的现状极不协调的是当前软件测试培训领域的现状[3],从事软件测试工程师培训的专业机构寥寥无几,而且价格昂贵。大学里几乎没有软件测试专业,部分院校开设《软件测试》这门课程面临三方面的问题,一是软件测试教材知识片面。二是内容枯燥,学生不感兴趣。三是教师教学经验严重不足。面对软件测试人才的社会需求紧迫性,人才培养单位应该扩大软件测试人才培养规模,总结软件测试知识点,改革教学方法,培养学生兴趣,提高培养质量。
1 软件测试课程教学方法探讨
针对以上问题,在教学中应采取以下解决方法:
1.1 融合软件测试知识点,分阶段教学
目前,国内的软件测试教材只涉及了部分基本理论知识,不够全面,介绍的软件测试工具也相对落后一些。针对这种情况,任课教师首先要融合多本软件测试书籍内容,总结出软件测试所涵盖的知识点,更新软件测试发展情况。
其次,根据学生学习过程分阶段教学[4]。第一阶段是基础阶段,让学生掌握软件测试基础理论知识和软件测试核心技术,以及常用测试工具的操作。第二阶段是项目综合实训提高阶段,在掌握基础理论的前提下,加强综合测试技术在项目实训中的运用,针对不同的开发阶段,撰写各开发阶段相应的文档,并制定相应的测试计划,设计典型测试用例,使用不同的软件测试技术和测试工具,完成不同的测试目标。最后是培养学生自主学习阶段,介绍软件测试最新的技术与发展方向,引导学生对基本技术向纵深方向思考。同时向学生提供软件测试方面重要的会议、杂志、论坛、网站,引导学生课下查阅学习资料,鼓励学生自我学习。
1.2 改革教学方法,采用案例驱动教学
大部分高职院校学生基础差、学习积极性主动性不强、自制力不高。在课堂教学活动中,如果继续采用传统教学方法,很难激发学生学习兴趣。应该采用案例教学方法[5],将《手机信息管理系统》、《学生图书借阅系统》、《学生信息管理系统》等案例资料发给学生,学生拿到案例后,在教师的引导下,课下先要进行消化,然后查阅各种他认为必要的理论知识,理解知识并思考提出解决问题的方法。课上教师答复学生的问题,并引导学生更深层次的思考。通过这种方法充分调动学生的学习积极性,提高其学习兴趣,使学生既学会理论知识分析又学会用理论知识解决实际工程的问题。
1.3 采用软件测试项目综合实训的实验教学模式
开设综合性的软件测试课程实验,按软件企业项目管理和开发模式,进行软件测试项目实训[6],培养学生的创新意识与实践能力。将班内学生分成若干个测试小组,每小组成员不超过7人,每组分配不同的软件项目,如工资管理系统、图书管理系统、学生信息管理系统、酒店预订系统等。小组成员模拟与体验软件测试工程全过程工作职位和角色,使学生全过程适应工作职位的要求。
各项目小组在测试项目过程中,针对不同的开发阶段,撰写各开发阶段相应的文档,并制定相应的测试计划,设计典型测试用例,使用不同的软件测试技术和测试工具,完成不同的测试目标,并进行回归测试,以实现软件测试各单项专业知识与技能整合运用的目标。在整个测试过程可以体现“学以致用”的思想,实现理论与实践相结合。
各项目小组通过演练项目开发,不仅让同学们切身体会到软件开发的整个过程,还让同学们对软件开发中各个角色有充分的了解,同时也更深刻的体会到团队合作的重要性。
1.4 加强校企合作
坚持“走出去,引进来”的思想,经常邀请企事业、软件公司里一线软件测试人员或软件测试组长和项目经理,来学校为学生做定期讲座,或定期对教师进行培训。也可以利用假期或其他时间,安排教师学生进软件公司,一起跟进项目开发测试。目前本校已经连续两年安排教师学生去齐鲁软件园,进公司一起进行项目开发测试工作。效果不错,参加实训的软件项目综合实训的教师软件开发测试能力有较大提高,并且学到一些最新最实用的软件开发测试技术。
1.5 改革课程考核方法
软件测试这门课程兼具理论与操作,目前大部分院校考核方式与理论考试为主,这种考核方式会促使部分学生考前抱佛脚,考前死记硬背,降低学生学习的积极性。除了理论考核之外,还应注重学生综合知识和应用能力方面的考核。建议课程考核应该包含平时作业、课堂表现(发言与讨论)、实验、综合实训、理论考试这几部分。采用这种考核方式,促使学生加强对知识的理解和运用,课堂踊跃发言,提高学习的主动性和创造性,以及动手操作能力。
1.6 适当加入一些最新的游戏测试
高职院校学生大部分的课余时间都是泡在网吧里玩游戏,有很多同学一有时间就玩手机游戏。学生对最新的游戏内容比较感兴趣,游戏测试也是软件测试的一方面,教师可以在课堂教学中加入一些游戏测试内容,提高学生的学习兴趣。
1.7 采取双证教育
实行“双证教育”模式[7],将学历教育与技能学习无缝对接,学生毕业后不仅能获得国家劳动部高级职业技能认证证书、拥有扎实的操作技能,同时还将获得国家承认大学学历证书。双证教育使学生专业能力更强、职业素养更高、综合素质更好、更符合企业用人标准。
测试工程师有高级测试工程师、中级测试工程师、初级测试工程师。根据高职学生的能力特点,应该把高职学生定位在初级和准中级测试工程师,具有一定的设计方案的编写能力,能利用测试工具完成一定的测试任务,并能够执行功能测试。
2 总结
通过在本校近五六年的软件测试教学实践,发现软件测试教学方法需要不断改进,融合软件测试知识点分阶段教学,采用案例驱动和双证教育模式,加强校企合作和教学实践这些措施能较好地提高学生学习兴趣和动手操作能力,教学质量也有较大提高。软件测试人才培养刚刚起步,很多工作处于摸索阶段,需要学校、教师和学生的共同努力,为社会培养出大批合格的软件测试人才。
参考文献:
[1]程茂,温静,吴玉洁.《软件测试》课程的教学研究[J].河北师范大学学报/教育科学版,2010(4):117-120.
[2] .
[3]赵斌.软件测试技术经典教程[M].北京:科学出版社,2011(3).
[4]葛汉强.高职《软件测试》课程分层教学之实践[J].职业教育研究,2011(8):105-107.
[5]邵谨荣.高职院校《软件测试》课程的案例教学探讨[J].职教论坛,2011(4):53-54.
【关键词】软件测试;工作过程;课程设计
1.课程的定位与教学设计
1.1 课程定位
《软件测试》课程作为软件专业二年级下学期的专业课,它的前导课程是《数据库设计》、《数据结构》、《软件工程实施》,后续课程是课程实训及毕业实习。通过本课程的学习,使学生加深对软件测试基本理论和基本方法的理解与应用,能熟练使用常用软件测试工具,并能运用软件测试工具完成应用软件的测试工作,提高学生对软件的测试与维护能力,并进一步培养学生的的团队协作能力。
1.2 课程设计思路
软件测试是高职计算机软件专业学生在以后的工作岗位上要用到的核心技能。因此,本课程应该作为专业必修课程和核心课程,重点培养学生在以后的工作岗位上所需的职业能力:白盒测试、黑盒测试、自动化功能测试与性能测试。
《软件测试》课程的总体设计思路是,转变传统的学科课程模式,不再以知识传授为主,构建以工作任务为中心的企业培训体系,引入企业项目,让学生在真实的企业项目中完成相应的工作任务,从而储备相关的专业知识,发展职业能力。授课内容重点突出对学生职业能力的培养。课堂上不再单纯地只讲授理论知识,而是围绕实际工作任务的需要来选取,这充分考虑了高职学生动手能力强,理论知识薄弱的特点。
2.教学设计
2.1 教学情境设计
本课程小组通过学院专业指导委员会、重庆亚德科技、重庆大佳、重庆港澳大家等软件公司的企业技术人员进行实际调查,制定了适合高职学生的软件测试课程体系与职业能力,确定了软件测试课程典型的教学情景与子情景,在教学情景中给出具体的工作任务、工作方法以及要求学生掌握的知识与技能等,在教学中贯彻理论实践一体化的教学模式,做到教、学、做三结合,充分体现工学结合的优势,培养学生的职业素质。本课程的5个工作过程及11个典型工作任务如表1所示。
2.2 教材设计
(1)教材应充分考虑软件测试的实践特性,以工作任务为导向,引入必须的软件测试理论知识,让学生在实际测试的过程中,循序渐进地掌握必要的理论知识。
(2)编写的内容要以项目驱动为原则,以企业的实际案例、场景模拟、工作过程录像为载体,增强课后的能力拓展,并根据高职学生的职业能力所需知识的深度和广度来编写,并在具体的工作任务中使学生逐渐形成团队协作意识。
(3)教材应突出软件测试技术的实用性、前瞻性和开放性,不能只是简单地介绍一些技术上的操作,而忽略了软件学生所需的职业能力,在教材中应融入软件测试技术中所用到的新规范、新技术、新标准、新工具、新知识,让学生能系统地掌握软件测试的前沿知识。
(4)教材应充分引领学生主动、积极地去学习,因此,文字表述要简明扼要,内容展现应图文并茂,内容应详略得到。
2.3 教学方法设计
由于本课程的主要教学内容涉及白盒测试、黑盒测试、自动化功能测试与性能测试等操作性很强的教学环节,必须通过课程实训才能达到对项目作规范需求分析的培养目标。具体教学方法设计如下:
(1)全班学生分为N个项目小组,3人一小组,1人任组长,组长要求协调沟通能力比较强。
(2)在教学过程中应加强学生对软件总体的测试能力,采用任务驱动教学,注重以任务引领,提高学生学习兴趣;
(3)组建软件外包中心,引进企业项目,让学生真实地体验在软件公司的测试流程。外包中心作为理论实践一体化教室,达到理论和实际不脱节。
(4)教学过程中可参考软件测试评师考试中规定的知识要求和技能等级职业标准。
(5)教师模拟企业的项目经理,必须具有开拓精神,带领团队完成工作任务,并在完成工作任务的过程中,探索基于工作过程的职业教育新模式,培养学生的软件测试能力,构建软件测试知识体系。
2.4 教学评价设计
(1)突出过程评价,结合课堂提问、实作测试、课后拓展、任务考核等手段,加强实训教学环节的考核,并注重平时考核。
(2)强调目标评价和理论与实践一体化评价,注重引导学生进行学习方式的改变。
(3)每个项目小组在完成课程后,要将所学的内容做ppt,汇报本小组项目完成的情况以及体会。
(4)实行学习过程的过程化考核。平时作业、期中与期末考试均采用上机实训的方式考核,对于不合格者,在团队的协作帮助下持续练习,直至过关。这样可以督促学生不断地练习,真正提高动手能力。
(5)课程的学期成绩=平时作业(10%)+上课考勤(10%)+小组项目测试情况(30%)+小组ppt总结情况(10%)+期末成绩(40%)
3.课程资源的开发与利用
(1)围绕软件测试课程,收集教师和学生必备的软件测试工具,制作适宜教学的多媒体教学课件。
(2)组建软件外包中心,搭建实训工作平台,为学生实训提供真实的工作环境,从而提高其职业素养。
(3)要充分开发网络课程,让学生在课余时间可以自主学习,弥补学生课本知识的不足。
(4)充分利用和开放实训中心,将教学与实训合一,将理论与实践合一,满足学生综合能力培养的要求。
(5)积极利用电子书籍、电子期刊、数字图书馆、校园网、各大网站等网络资源,使教学内容从单一化向多元化转变,通过企业技术人员的指导,课程教师的辅导,使学生知识和能力的拓展成为可能。
4.课程的实施效果
(1)基于项目化的授课内容
建立软件外包中心,引入企业项目内容,软件测试的授课内容紧紧围绕企业项目的典型工作任务开展,学生的能力与素质参照软件测试工程师的岗位要求,让学生真实感受企业环境,就业零距离上岗。
(2)基于过程化的授课方式
老师授课不再单纯地讲解理论,完全按照企业的软件测试流程开展,制定规范的软件测试计划、编写测试用例、利用测试工具测试、编制测试报告,有利于学生养成职业化的学习习惯与工作习惯。
(3)基于理论实践一体化的教学设备
学生在软件外包中心上课以及实验,真正实现了“做中学,学中做”的企业工作环境。
(4)基于能力化的学习评价
学生的评价不再单纯地以理论考试为依据,而是从学生的软件测试专业能力、利用软件测试工具的能力、团队沟通协调能力进行综合地评价。
参考文献
[1]郑泳.基于工作过程系统化的高职《软件测试》课程设计[J].漯河职业技术学院学院,2010(9).
[2]程茂,温静,吴玉洁.《软件测试》课程的教学研究[J].河北师范大学学报,2010(4).
[3]蔡建平.开源软件测试实践教学方案设计[J].计算机教育,2011(3).
关键字:软件测试;实践课程体系;项目实训
0 引言
《软件测试技术》是软件工程本科专业的一门实践性很强的课程,适合采用讲练结合的方式开展相关教学,即让学生多上机操作,逐渐提高软件测试用例设计、开发能力以及软件测试的整体管理能力。然而在实际实践教学过程中,教师普遍感觉有不少不尽人意的地方,主要表现在理论与应用脱节,所学知识与社会需求差距较大,学生积极性不高等。
1 软件测试行业现状和学生认知水平
媒体报道,国内开发人员与测试人员的比例是8∶1,而国际公认的行业标准实际上是1∶1,这一点上国内测试行业与国外的差距比较大。随着软件行业的蓬勃发展,用户对软件的质量要求越来越高,导致软件开发企业软件测试的工作量也越来越大,因此自动化软件测试已经成为项目测试的一大趋势[3]。并受到原来越多的重视。
软件测试课程一般到大三才开设,而大学高年级学生往往偏重于对技术的学习,因为技术往往是可以现学现用的,对于理论性较强的软件工程知识反而不太感兴趣了。实际教学过程中关于软件测试流程、团队等工程化内容的描述往往让学生觉得比较抽象且教条化,然而这些工程化知识又是学生毕业后适应当下的软件行业需求所必要掌握的。
2 现有软件测试课程体系存在的问题
现有软件测试技术课程重点讲授的是理论基础知识,含离散数学、图论和测试基础知识以及测试用例,开发各阶段的具体应用往往被忽视,使用自动化测试工具方面的内容尤其缺乏。高校对实践课程的重视程度普遍不够,软件测试实践课开展不足且不规范。教师大量精力放在讲授测试用例设计方法上,实践中的使用这些测试用例却较少。实验案例通常有NextDate问题、三角形问题等,都是一些课本上常见的,设计也较单一,缺乏真实性,难以提升学生的技能,学生往往觉得枯燥乏味。毕业后学生普遍反映,软件测试工程理论知识教的很全,但就是不知道怎样灵活应用;相反,在企业经过一段时间的测试工作实践后发现,工作中真正需要的知识并未掌握。
目前,相关配套的软件测试实验教材比较缺乏,实验内容基本是由任课教师自行设计。这对于教学经验丰富的教师问题不是很大,但对于没有实际项目开发经验作为支撑的年轻教师,就无法把握如何采用恰当的用例来验证相关理论知识,也难以设计出实用的实验内容,学非所用,导致学生无法掌握今后实际工作所需的基本技能。即使是教学经验丰富的教师也大多缺乏实战,尽管能很好的教授理论知识,但由于缺乏合适的实践教材,加上实验条件等各种因素制约,也难以的对学生进行系统全面的实践培训,导致高校重理论轻实践成为普遍现象。因此,软件测试课程的教学顺应社会需求显得格外迫切,必须面向企业,了解岗位要求,而不是“闭门造车”。让学生能学到适合企业所需的技能,毕业后可以以一个“经验者”的身份进入人才市场。
3 《软件测试技术》实践课程体系研究
3.1 课程构建原则
高校应以软件测试所需的知识、技能为先导构建相应的课程体系,充分调研软件测试工作的具体内涵,仔细研究对应的知识、技能以及素质要求,课程内容也应强调当前以及未来就业所需掌握的基本知识、技能,体现知识、技能和素质三者的结合[6]。
根据该专业人才培养的定位以及行业内需求,在建设具有特色的软件测试课程时建立实验、实训和实习等不同层次的实践课,通过多项目的练习,提高学生专业技能及分析、解决问题的能力。
3.2 实践课程教学探究
在软件测试技术实践课程环节,引入具有企业背景项目的实训。通过这些真实测试案例的引入,结合人才市场的需求,充分体现出工学结合的特点。通过对实际项目的操作,使用相关测试工具,完成对各目标的测试,提升学生的测试能力同时积累相关工作经验。
我们可以在教学过程中引入一个贯穿整个教学过程的具体测试案例的教学法。首先,组织学生进行随机分组,每个小组5~6个人,给每个组起一个名称。要求每个小组在课程实施前完成同一个模拟软件“小区物业管理系统”的开发。模拟软件开发完成后,由各个小组交叉测试其它小组开发的软件。在测试课程中,要求学生对软件系统进行单元测试、功能测试、集成测试和系统测试,找出问题并解决问题。
该教学方法主要有以下明显的优点:
1)软件测试前期的课程有《基于Web的Java开发设计》,同步开设的课程有《J2EE企业级应用开发》,所以在实践环节我们选择“小区物业管理系统”作为测试对象,能让学生快速具备软件开发的能力,以及掌握软件系统测试所需的技术。
2)每个人都喜欢挑别人的错误,相互测试对方所开发的系统,可以形成竞赛,有利于发现问题,能发挥学生的积极性,提高效率。同时也便于组织课堂讨论以及对各小组实践结果的评价。
3)学生通过一整套测试课程的参与,能够了解一个具体项目的完整测试过程是个什么样子,真实展现了实际工作中软件测试的方法和要求。
但由于学时和学生能力的制约,在本实验课程中,主要针对还只是初、中级测试人员,主要是为了帮助毕业生在踏上岗位后可以顺利从事不太复杂的测试工作打下坚实的基础。对于高级别测试以及测试管理之类的工作,比如制定测试计划、各种设计的论证、测试结果的评估和总结,恐怕还需要经相当长时间的实战,累积足够的经验才能胜任。这些工作经历,仍然不是课堂所能提供的,我们的目标就要是培养出具备从事这项工作潜能的新手。有关这方面的内容,我们也只能够在理论教学中予以概述,不在实践课中安排具体实验。
为了适应实践课程需要,我们设计了8项实验内容,该设计旨在让学员通过实训,将来以一个“经验者”的身份进入人才市场。该项目模拟“企业项目管理者”培养“新人”的模式来安排实验进度和内容。虽然现实中软件测试是始终贯穿于软件生命周期中的,但对于未参加过工作的大学生来说,从培养人才的角度出发,模拟“企业项目管理者”通常还是按如下流程培养人才:单纯性测试的实施、测试环境建立、测试设计等等,按照单元测试集成测试系统测试的顺序逐步深入实践,并在提供的测试案例中人为的加入一些缺陷,以便学员在测试时去发现、分析、修改这些缺陷[7]。因此,我们专门设计了表1所示的实验内容。
通过以上8个实验内容的实践,可以让学员掌握单元测试以及集成测试的具体实现方法,熟悉各种测试工具的运用,了解系统测试的实施。经过这些实际训练,学生将来以初级测试工程师的身份投入到测试工作中。
4 总结分析
实践证明,软件测试技术实践课程体系研究针对软件测试行业及人才的特点要求,把行业、企业对人才的要求转化为教学中的具体目标。从知识、能力、素质多方面全方位提升学生的就业竞争力,设置合适的实践教学内容和方法,一定程度上改变了教师的教学状态和学生的学习状态,达到了预期目标。
参考文献
[1]2007首届中国软件测试从业人员调查报告[DB/0L],2007
[2] 钟素芬, 叶明芷. 软件测试应用性人才培养模式的探索与实践[J]. 北京联合大学学报(自然科学版),2007(9).
[3] 钟元生. 软件测试实践教学特色的构建实践[J]. 电化教育研究,2006(10):62-65.
[4] 胡宏银. 软件测试课程教学方法探讨与实践[J]. 计算机教育,2007(6):11-12.
[5] 李绘卓,唐峻,范勇.基于案例的软件测试实验教学[J].电脑知识与技术,2009,27(5):7820-7821.
【关键词】软件测试 技术 管理
随着经济社会的不断进步和信息技术产业的持续发展,我国的软件业逐步成为了信息技术产业的灵魂与核心。然而与同属于亚洲的印度相比,我国在全球软件业的整体地位还远远落后,印度目前位列全世界的前五个软件方面供应大国之一,在计算机的软件出口方面地位仅在美国之后、位列世界第二。在促使印度的软件业得以快速成长和发展的原因当中,注重软件的质量是印度软件业能够攻取成功的一个关键性因素,印度的软件企业在世界上所获得的质量认证也是全球最多的。所以,提升软件的质量能够大大地推动我国的软件业的快速发展。而软件的测试是把好软件的质量关口的一个重要的环节,属于软件的开发周期当中占据较大比重的一项内容。然而在开发时间延续中,对软件的缺陷修复的代价会十倍速地增长。所以,加强软件的测试工作研究,对于提升软件产品项目的质量,推动我国软件行业和企业持续健康发展具有十分重要的意义和作用。本文简要介绍了软件测试的目的和分类,深入阐述了促进软件测试技术自动化的措施,研究提出了加强软件测试管理的对策和建议,希望对于推进软件测试的研究和实践工作能够起到一定的帮助和借鉴作用。
1 软件测试概述
软件测试指的是软件产品在投放市场前,对于软件产品所进行的需求的分析,设计的规格和编码等内容的复审,是确保软件产品质量的关键性步骤。
1.1 软件测试的具体目的
软件测试的具体目的决定着如何来组织进行测试工作。通常情况下软件测试工作的目的主要有:一是为发现程序的错误从而进行测试,二是测试用以证明软件的程序存在错误,并非证明该程序不存在错误;三是好测试其功能在于可以发现以前没有发现的一些错误等等。因此,必须关注测试的具体目的,进行测试用例的选择时要遵循经济性原则。
1.2 软件测试分类
软件测试通常可以分为黑盒式测试与白盒式测试两种类型。黑盒式测试就是将软件系统当作黑盒子而不去考虑相关程序内在的逻辑,按照需求规格的说明书要求对程序功能进行检查,看能否达到功能说明的要求。白盒式测试就是允许实施测试的人员根据程序内部的逻辑结构和相关信息进行测试用例的设计与选择,测试程序逻辑的路径。按照前后的过程分类,测试步骤可分成:单元测试,组装(集成)测试,确认测试及系统测试等。
2 促进软件测试技术自动化的措施
2.1 软件传统测试方法的主要问题
一是重复性较强。在功能增加及缺陷修复时均可能修改程序的代码,对改变过的代码进行测试就要反复地执行测试用例,用手工进行重复操作会增加出错率;二是测试的周期过长,手工重复测试将会使软件的测试周期延长;三是测试内容不够全面,修改代码之后,手工进行测试会忽略对关联内容的相应测试;四是不能测试不可视的组件,服务器端重要的程序代码均处于逻辑层,而采取手工进行测试的方法无法判断逻辑层相应内容。
2.2 软件测试自动化技术措施
一是生成测试个案,采用相应的编程语言编制短小程序用以形成测试的输入,以使自动化的测试和结果的核对程序更易于控制与操作。二是对测试进行写控制,对单元的测试及集成的测试会采取单机运行的方式,然而对系统的测试及回归式测试,则可会用到多台设备在网络环境下运行,以节省时间。 三是对测试的结果和标准化输出进行对比,输出的数据量情况和数据的格式对于对比速度有着直接的影响,应当编制特殊软件将测试的结果和标准化输出进行对比。四是利用对比软件,分类、分析记录及通报不符合的测试工作结果。五是产生测试总体统计报表,以增强过程管理工作的质量,节省数据统计时间。
3 加强软件测试管理的对策和建议
3.1 强化软件测试的过程管理
测试需求阶段中,就明确软件测试的对象与范围,测试负责与项目组成员应充分沟通,对各种资料进行收集整理,对各阶段测试工作需求进行分析,把测试内容细分成测试的需求,并保证其测试的可行性。测试计划阶段中,主要的任务就是按照测试需求来制定测试的计划,计划内容应包括:测试的环境、进度、用例及风险的分析等等。测试执行的阶段中,应完成测试的实施与过程的监控。在缺陷跟踪的阶段中,主要是及时报告软件的缺陷,跟踪修改的进展情况。
3.2 强化对软件测试突出问题的管理
一是防范思维定势的问题。克服测试人员由于太过熟悉测试的软件,从而建立起惯性的思维,造成测试的次数越是多,其发现缺陷机会反而越少的情况;防范方法是:测试人员不断编制测试新程序及测试的用例,从而发现更多缺陷;还可用新人进行软件的测试。二是防范定位效应的问题。测试人员的定位效应就是对于已测试功能不能进行认真的测试,由于疏于防范,可能会使缺陷一起存在;解决此问题方法为完整地实施测试用例,或者组织测试的人员进行交叉式的测试。
3.3 强化测试团队的管理
严格员工考核,测试负责人定期组织项目组成员谈话,定期评定做过什么和怎样去做,做好测试人员的绩效考核。加大培训力度,系统学习相关领域的基础和业务知识,强化日常培训,深入学习特定的项目及技术,全面提升测试团队的整体素质和能力。针对测试人员流动带来的影响,建立相应的健全培训工作机制,促进新任员工可以尽快地适应测试工作。
4 结语
综上所述,软件测试工作是软件在投放市场使用前,对于软件产品编码的实现,设计的规格及需求的分析等内容所进行的最后一次审查,是软件项目开发的一个重要的环节,对于软件质量发挥着基础保障的作用。因此,必须高度重视和加强软件测试工作,不断总结技术经验,持续完善管理措施和办法,以提升软件产品的质量、推动软件研发企业持续健康发展。
参考文献
[1]杨亚南,孙忠林,李艳.软件自动化测试浅谈[J].科技信息,2007(24).
[2]肖新凤.Web应用程序性能测试技术的研究及应用[J].科技信息,2010(27).
[3]张军威.浅谈如何以软件测试推动军工软件工程化[J].硅谷,2011(14).
【关键词】激励教学法 软件测试 教学改革
【项目基金】北京师范大学珠海分校教学改革项目(项目编号:201245)。
【中图分类号】G642 【文献标识码】A 【文章编号】2095-3089(2013)12-0247-02
软件质量是一个直接影响软件产业应用发展的关键因素,软件测试作为一个提高软件质量的重要手段和衡量软件质量的唯一标准,得到了越来越多的重视。然而,目前我国软件测试人才匮乏,其中主要的原因是这个行业对从业人员,尤其是对软件测试工程师的要求很高。目前我国软件测试人才主要依靠企业、IT培训机构和高校培养三方面,靠企业和IT培训机构突击培养出来的人才往往基础理论知识不够扎实,在向高层次人才发展的过程中会碰到难以突破的瓶颈。
鉴于这种情况,许多高校都开设了软件测试的课程,有的学校还开设了软件测试方向或软件测试专业。以我们信息学院为例,2008年开设了独立的软件测试的课程,2010年将软件测试作为软件工程专业的一个专业方向,其专业课程包括“软件测试方法与技术”、“软件测试自动化”、“软件测试管理”和“软件质量保证”。这些软件测试专业课程的实践性和综合性都很强,尤其是“软件测试自动化”这门课程,除了要熟悉相关的测试理论,了解数据库、网页设计、程序设计等软件开发方面的基础知识,还要求掌握先进的开发及测试的方法和技术,并能熟练运用常用的自动化测试工具。这些特点使得常规的教学方法和手段难以取得良好的教学效果,因此高等学校培养出来的软件测试人员存在着理论和实践脱节、独立解决问题能力和综合应用能力不足等问题。
1.软件测试专业课程教学存在的问题
目前,高校的软件测试专业课程的教学大都采用课堂教学辅助以上机练习的方法,培养出的学生虽然有着较强的理论根底,但对于如何将这些理论运用到千变万化的实际工作中去却知之甚少,理论和实践严重脱节,学生的独立解决问题能力和综合应用能力不足。
许多教学研究人员和专业教师也注意到了测试专业课程教学中存在的问题,并针对这些问题提出了一系列教学改革的方法。其中项目驱动的方法是[1]在教学的过程中师生共同实施一个完整的项目,使学生的综合应用能力得到了提高,因而在软件测试专业课程教学中得到了广泛的应用[2],也取得了不错的效果。但是,这种课堂授课+上机实验+课程项目的教学方法对软件测试专业课程来讲,还存在着一定的局限性,主要表现在以下几个方面:
1.1缺乏真实的被测对象
在教学中使用的项目和案例中,被测对象通常是一些简单模拟的应用软件,测试场景,测试用例和bug也往往是模拟的。使用这类模拟的软件、测试用例和bug对学生进一步理解概念和方法有一定的帮助,但往往不利于学生体会真实测试工作的复杂性和测试工作的价值,学生综合应用能力的提高受到了很大的限制,学习兴趣也难以调动。
1.2缺乏对新知识的掌握
软件开发和测试技术日新月异,在就业压力日益增加的今天,学生不仅需要学习基础知识,还要掌握行业的最新发展趋势。对于软件测试这种高应用性的学科来说,最新的、最实用的技术和方法是在不断的实践中总结出来的,课堂授课+上机实验+课程项目这种局限于校园的教学方法很难满足学生和老师对新知识的掌握,也难以激发学生的学习热情,更不利于开拓学生的视野,培养他们独立解决问题的能力。
1.3缺乏对测试工作的热情
目前,软件行业里流传着软件测试工作的门槛低、收入低,经过简单的培训就可胜任的错误言论。其实,在软件测试行业刚刚兴起,软件测试还是手工进行的时候,这种情况是存在的。但随着软件开发技术的发展,软件变得越来越复杂,测试的方法和技术也有了进一步提高,低技术含量的单纯手工测试已经不能满足需求了,测试工作的回报也有了大幅度地提高。然而,这种低门槛低收入的说法却一直流传了下来,加上前面提到的过于简单的被测对象和没能及时更新的测试技术,都使得学生对软件测试工作认识不足,进而缺乏足够的热情。
2.改革措施
根据上一节提出的当前软件测试专业课程教学方法的局限性,我们提出了将激励教学法应用到软件测试专业课程教学工作中的解决方案。具体的说,就是在课程中引入企业发起的校园竞赛。
2.1激励教学法
激励教学法,就是教师根据学生的不同情况,运用各种有效手段,激发、鼓励学生的进取精神、竞争精神和创造精神,提高学生的学习积极性、主动性,使其思想行为朝着教学计划所期望的方向发展的方法[3]。然而,对大学高年级的同学来讲,一般的方法和手段并不能对他们起到真正的激励作用,为此,我们采用“校园竞赛”这种与所学课程和未来职业规划联系密切的方式来激发同学们学习的积极性,同时也能提高他们独立解决问题和综合应用的能力。
2.2校园竞赛
在软件测试专业课程的教学中,校园竞赛是激励教学法中的激励机制,因此校园竞赛设计的好坏,直接影响到激励教学法实施的效果。
和大多数校园竞赛不同,激励教学法中的校园竞赛是和某一软件测试课程紧密联系的,但竞赛内容却不失实用性,参赛者也不仅仅局限于学习课程的学生。这样,不但对课程的学习有很大的帮助,也能更多地吸引其他同学。最重要的是,竞赛的优胜者可以获得进入企业实习和工作的机会,这种激励方式可以有效地激发同学们学习的兴趣。
为了使激励教学法在软件测试专业课程的教学中取得良好的效果,在竞赛的设计方面,应着重注意以下几点:
2.2.1真实的被测对象
竞赛中使用的被测对象应该是企业中正在开发或运营的真实产品,在竞赛的过程中,企业一线的软件测试工程师应亲自指导,使学生犹如置身于一个实际的工作环境中。这从根本上解决了高校培养的软件测试人员理论和实践脱节、缺乏实战经验的问题,极大地提高了学生的综合应用能力。
2.2.2及时更新技术知识
在竞赛的过程中应定期地举办一系列技术讲座,邀请企业的专家学者来学校和同学们面对面地交流。这些业内专家不仅会带来国内外最先进的测试技术,还可对如何将这些技术应用到实际工作中去做详细的讲解。这不仅让学生加深对理论学习重要性的认识,激发他们的学习兴趣,更从另一个侧面强化他们把理论应用到实践中去的能力,并且使同学们对企业的管理和工作方式有更深入、更具体的了解,为今后走向社会打下坚实的基础。
2.2.3竞赛题目的难度要适中
对学生专业兴趣的培养和鼓励不能仅仅靠真实被测对象和新技术的更新,还要注意竞赛题目的难易程度,要根据学生的整体知识水平和能力做相应调整。太简单了会失去挑战性,太困难了会使他们产生畏惧心理,两者都不利于激发他们对测试工作和测试课程学习的热情。
3.方案实施
激励教学法首先在“软件测试自动化”课程上进行了实施。“软件测试自动化”是软件测试方向的必修课、其他方向的选修课,参加课程学习的同学主要为大三软件工程专业的学生,他们一般至少学过一门软件测试课程,具备一定的软件测试的基本知识,同时对数据库、网页设计、程序设计等软件开发方面的基础知识有一定的了解。
根据“软件测试自动化”课程的特点,结合脚本程序在测试工作中应用越来越广泛的趋势,校园竞赛的主题定为“自动化测试脚本编程”,被测试的对象为公司正在开发运行的一个性能监控工具。
竞赛分三个阶段进行:
第一阶段为热身运动。企业提供详细的操作步骤与说明,帮助参赛者了解比赛进行的方式与完成的步骤,也了解被测试对象的功能。
第二阶段为实际演练。在这个阶段,参赛者需要运用所学到的技能,结合自动化测试的理论及工具,来完成精细的自动化代码设计任务。
第三阶段为实战考验。参赛者需要完成实际的软件测试自动化编码工作,编写真正的自动化测试脚本,搭建自动化测试框架,并让其跑在真正的被测产品上。
为了扩大校园竞赛的影响,专家讲座以课外科技讲座的形式进行,竞赛结果的评定由企业和教师共同进行。
4.结语
激励教学法针对高等学校培养的软件测试人员存在的理论和实践脱节、独立解决问题能力和综合应用能力不足等问题,克服了当前软件测试专业课程教学经常出现的缺乏真实测试对象、知识更新不及时和对测试工作热情不高带来了弊端,对培养应用型、外向型、复合型的专门测试人才起到了积极的作用。经过对“软件测试自动化”课程教学的实施,证明了该方法是切实可行、效果显著的,不但可以在软件测试专业课程中进行应用,经过改进,完全有可能在其他类似的课程(如软件工程)中加以推广。
参考文献:
[1]焦瑞.项目导向法初探[J].中国科技创新导刊,2010(13):36 - 36.
[2]赵晓君,黄艳,邓璐娟. 项目驱动法在“软件测试理论”课程教学中的应用[J]. 中国电力教育,2013(7): 101-102.
关键词 软件测试 实践教学 测试工具
中图分类号:TP311.53 文献标识码:A
1 软件测试课程教学现状及分析
1.1 软件测试课程教学现状介绍
软件测试是软件工程专业本科生的一门重要的必修课程。在本校的课程设置中为56学时,其中理论教学为32学时,上机实践为24学时,由于软件测试的各个环节分别对应于软件工程的相应环节,使得软件测试课程的内容庞杂,而其实践环节也相应地具有内容杂,任务重的特点。
软件测试的教学目标是通过理论及实践教学,让本科生熟悉软件测试的工作流程、常用软件测试方法及常用工具的使用及软件测试过程管理。
教学过程中的主要参考书目为机械工业出版社出版,原著为Paul C.Jorgensen,韩柯等译的《软件测试(原书第2版)》,原书的英文名为《Software Testing A Craftsman''s Approach(Second Edition》。授课基本流程基本也是依据以上教材的流程,首先介绍软件测试的概论,介绍什么是软件测试,软件测试的意义、软件测试的基本流程和基本概念等内容。接着介绍贯穿全书的软件测试需要的示例以及软件测试所需要的基本理论知识,包括测试人员使用的离散数学及图论相关知识。介绍完以上知识以后,按照软件测试流程依次介绍单元测试、集成测试和系统测试的测试用例开发方法和技术。其中在单元测试部分分别介绍单元测试部分的黑盒测试和白盒测试内容,黑盒测试部分包括边界值测试、等价类测试和基于决策表的测试,在白盒测试部分介绍路径测试、数据流测试等结构性测试方法的测试用例开发技术。介绍完以上内容以后,又介绍了面向对象的软件测试方法。
课程的上机实践基本上也是配合上课的流程进行安排,在相应的知识点介绍以后,安排学生按照指定的技术开发测试用例以进行测试活动,附带掌握相应的软件测试的各种管理和自动化工具。
1.2 软件测试课程教学现状分析
通过以上教学流程的描述结合以往毕业生工作以后反馈,可以总结其教学过程的特点为:通过系统的学习,同学们基本上能掌握软件测试用例开发的各种技术要点,对所有的知识点都有所触及,通过学习同学们基本上能够掌握各种实用的软件测试用例的开发方法,也能将各种方法应用于实际软件测试中。
而在实际软件测试实践中,软件测试工作具有以下特点:
首先,依据测试工作越早开展越有利的原则,软件测试一般从开发的初期就开始介入。例如在开发初期,需要编制测试计划进行时间人员和物力上的计划;在需求分析阶段需要进行软件测试的系统测试用例的开发;在设计阶段需要进行集成测试用例的开发,随着设计粒度越来越细,相应的路径及数据流集成测试用例也向下扩展;到达软件编码阶段,主要依据相应白盒技术进行单元测试用例的开发。其次,现代化的测试管理技术需要利用软件全面管理软件测试过程中的环节,包括测试计划的建立及管理、测试用例的管理、测试过程评价管理等。最后,因为人力资源成本的提高及各种技术限制,各种自动化的软件用例的运行软件的使用越来越多等。
通过比较教学过程及实际软件测试的开发过程很容易发现以往教学过程具有以下限制:
首先,没有将软件测试作为软件开发的有机部分进行介绍,而是将软件测试过程从软件开发过程中割裂开来。知识点没有按照实际应用过程展开,容易造成同学们掌握各个知识点,却无法形成知识实际应用能力。其次,缺少相应的测试管理软件的介绍和实践,影响了同学们对软件测试管理的重要性的认识。最后,教学课程缺乏同学们比较感兴趣的各种软件测试自动化工具的介绍。降低了同学们的学习兴趣。
2 软件测试课程教学改革方法探讨
通过上文的现状介绍和分析,针对以上教学方法进行改造,同时本着扬长避短的原则,在中国石油大学(华东)软件工程专业2009级软件测试课程教学过程中进行了教学改革。
教学改革的契机为本校软件工程专业和IBM公司开展教材合作编写项目,软件测试作为软件开发的重要部分获得了空前的发展良机。
具体的有利因素可以概括为:首先,学校向IBM公司购买JAZZ开发平台及相应的专业软件测试管理软件。通过和业界领先的最新的软件测试管理软件接触,了解了最新的软件测试管理理念;其次,通过IBM公司对教工的业务培训,了解了IBM公司的各种软件测试工具的使用情况;最后,通过本文作者共同努力,将平时用于开发的实际应用软件例如体育公共课管理软件等进行整合,用于软件测试用例的案例教学。
有了以上基础前提以后,结合以上有利条件,教改的主要做法如下:首先进行案例化教学,通过自己开发的软件这样生动的实例向同学们介绍软件开发过程中的软件测试的重要性和各种原则,避免了介绍知识的空洞和乏味,提高了同学们的学习兴趣;其次,在案例化教学的指导思想下,重新安排各个教学点的教学顺序,主要脉络为依照软件开发的实际流程,首先介绍系统用例开发技术,然后介绍继承测试用例开发,到最后介绍单元测试用例开发方法。在运行测试用例的过程中,充分结合IBM公司提供的各种软件测试用例运行工具,使得学生能够活学活用。最后,充分利用IBM的软件平台,介绍业界领先的软件管理工具的使用,使得学生学习兴趣得到极大提高。
通过以上的教学改革,理顺了教学和实践的关系,使得教学过程紧密联系实际软件的开发过程,同学们对软件测试课程的理解得到了加深。
3 结论及下一步工作
通过上文对教学现状的总结,以及针对教学现状的利弊进行分析,本文充分利用外部优势大胆进行了软件测试的教学改革,取得了预期的改革目标。同时也注意到改革工作才刚刚开始,还有很多需要完善的地方。接下来的工作主要包括:进一步丰富用于软件测试教学的案例及密切关注业界测试技术的最新发展以用于教学。总之,本文的教改工作达到了预期的目标,使得同学们对于软件测试的理解较之以前更加条理化、系统化和实用化。
参考文献
[1] 匡青.高职院校软件测试课程教学改革探索[J].现代商贸工业,2010.3.
关键词:软件测试;能力培养;教学理念;培养模式;探索实践
中图分类号:TP311 文献标识码:A DoI: 10.3969/j.issn.1003-6970.2012.03.009
Explore and Practice of Training the Ability for Software Test Talent
CaI Jian-ping
(School of Software Engineering Beijing University of Technology, Beijing 100101, China)
【Abstract】According to the requirements of Ministry of Education for training software talents, Aim at the software engineering features, and as a breakthrough for shortage of talent on software test, the paper analysis the employing demand of IT enterprises, study the training target of software testing talents and the training demand on the ability, explore a good method of the ability training for software test talents. Based on this, we actively undertake many practice activities about the ability training for software test talents, for example, concise the teaching philosophy of training software testing talent, build the new pattern of training the ability for software test talents, constitute a general outline for software test course, write corresponding book, establish laboratory, etc.
【Key words】software testing; ability training; Teaching Philosophy; Training Pattern; Explore and Practice
0 引 言
软件测试是软件工程的一个重要分支,是软件质量保证的重要基础。现代软件测试与传统的软件测试不一样,它是贯穿软件工程整个生命周期(从需求分析、软件设计、代码开发,一直到最后测试、验收和维护),涉及各种软件开发技术、应用技术以及测试技术,覆盖软件各种应用领域(如桌面软件、网络应用、信息系统、电子服务、嵌入式系统、数字娱乐等),面临不同的专业领域知识,所要求的投入与软件开发相比规模同等甚至更高。另外,软件测试是一项需具备较强专业技术、学习和创新能力的工作,软件测试人员除了需要有一定的软件测试实践经验外,必须要具有缜密的逻辑思维能力、全面的技术能力、各种测试工具的使用能力、敢想敢干的创新能力,要有较强的责任心和团队合作精神以及出色的沟通能力等专业素质。要成为一名合格的软件测试人才需要经过严格系统化的专业培养,并且在专业培养过程中一定要结合软件测试专业化的特殊要求,强调软件测试人员的工程实践能力。
目前,很多高等学校仅仅是在计算机专业或软件工程专业中设置一些软件测试课程,还没有提高到软件测试专业化人才培养这个层面。北京工业大学软件学院率先在这方面进行了探索和实践,将能力培养作为软件测试人才培养的重要内容和突破口,提出了“用工具,促能力”的教学理念,积极探索软件测试课程的改革与实践,最终建立通过学习和使用软件测试工具进行软件测试能力培养的新模式。并在此基础上,开展课程建设、教材建设、实验室建设等工作,取得了较好的效果。
1 “用工具,促能力”的教学理念
工程实践能力是计算机专业,特别是软件工程专业的基本要求之一。计算机技术或软件工程技术涉及到大量的知识内容,包含各种开发和应用技术,覆盖许多应用领域,需要有很强工程实践能力。对于我们在校的本科学生,由于从高中到大学,一直在学习,缺乏实际项目经历。如果按照传统的课堂传授理论知识的方法进行教学,辅助一般的实验,会让学生感到枯燥、乏味,提不起兴趣。
为此,北京工业大学软件学院要求在软件工程本科专业的培养计划中加大计算机基础课程和软件工程专业核心课程的实践教学环节(包括配套的课程设计,独立的实践课程,以及小学期的集中实训等),并特别在软件测试课程的实践教学上进行了大胆的改革和创新,提出了“用工具,促能力”进行软件测试人才能力培养的教学理念。该教学理念的核心思想是通过要求学生熟练地使用各种软件测试工具,来掌握软件测试相关知识、技术、方法和管理流程,提高软件测试的工程实践能力,提升软件测试的专业化水平。
熟练地使用软件测试工具能带来如下好处:
1)提高工作效率。
软件测试的工作量很大(据统计,测试会占用到40%的开发时间;一些可靠性要求非常高的软件,甚至会占到60%);另外,测试中的许多操作是重复的、非智力性的和非创造性的,但要求准确细致。最后,那些固定的、重复性的工作,可以由测试工具来完成,这样就使得测试人员能有更多的时间来计划测试过程,设计测试用例,使测试进行的更加完善。
2)保证测试的准确性。
手工测试常会犯一些人为错误。为此需要投入大量的时间和精力;而工具的特点是能保证测试的准确性,防止人为疏忽造成的错误。
3)有些测试很难开展,必须使用工具(如性能测试等)。
测试工具可以执行一些手工难于执行,或者是无法执行的测试。这是因为软件测试工作相当复杂,要求非常严格,很多测试在手工测试环境是无法完成的。
4)测试工具很好地保证测试工作的规范性和一致性。
软件工程最重要的内容就是管理,软件测试同样也是将管理放在第一位。
5)测试工具体现了先进的测试思想、方法和技术。
掌握并熟练地使用软件测试工具,能够快速和有效地掌握或巩固所学的软件测试的思想、方法和技术;运用软件测试工具开展软件测试工作,能够有效地提升解决软件测试中遇到的各种问题,增强软件测试的实战能力。
事实上,“用工具,促能力”的教学理念非常适合在工程化要求较高的软件工程核心课程中进行示范,予以推广。
2 探索软件测试人才能力培养的新模式
我们在“用工具,促能力”的教学理念指导下,对以软件测试人才能力培养为目标的教学方法与教学模式进行积极地探索和实践,确定了软件测试课程教学的知识体系以及学习和使用软件测试工具进行软件测试能力培养的实践教学体系,制定了软件测试课程教学大纲和实践教学课程大纲,从而建立软件测试课程教学及能力培养的新模式。
我们这里所说的软件测试人才能力培养新模式主要是指我们在对软件工程本科学生的软件测试能力培养过程中,强调“用工具,促能力”的教学理念,以开源软件测试工具为基础,结合精选的教学案例,大胆地将测试工具的掌握和测试工具的应用作为实践教学的重点,强化学生软件测试专业知识的掌握,促进学生软件测试实践能力的培养。这种实践教学的新模式,通过不断的探索和实践,充分得到学生的认可。学生通过软件测试工具的使用,大大提高了参与实践的兴趣,对软件测试相关的理论知识有了更深入的理解和掌握,运用工具解决测试项目实际问题的能力得到了加强。
2.1 软件测试人才能力培养的课程建设
软件测试人才培养专业性强,人员素质高,这要求我们必须科学地对软件测试课程体系进行论证,并按照软件测试人才能力培养新模式的要求制定出教学大纲。目前,学院在软件测试课程体系的设置上分三个层次:理论课程―软件测试,实践课程―软件测试课程设计,创新学分―软件协同测试。贯穿这三个层次的主线是软件测试工具,即通过软件测试工具在不同软件测试项目中的使用,强化学生知识的掌握和能力的培养,并按照工具使用流程要求,培养学生专业职业素质。
2.2 基于开源软件的软件测试实验室建设
软件测试课程对工程实践要求极高,对学生动手能力要求极强,因此软件测试实验室的建设,软件测试工具的配备除了支撑教学外,还是“用工具,促能力”教学理念的贯彻和通过学习和使用软件测试工具进行软件测试人才能力培养新模式的实施最重要的保证。
考虑到软件测试贯穿软件工程整个软件生命周期,涉及各种软件开发技术、应用技术以及测试技术,覆盖软件各种应用领域,需要用到多种测试技术、方法和测试类型。因此要建设能够让学生或受训人员全面参与这些实验或实践的软件测试实验室,特别是全面配置商用软件测试工具,这几乎是不可能的。首先,除一次性投入满足数十位学生同时上机进行实验或实践的要求外,经常性的升级维护费用就会让条件优越的高校或培训机构难以承受,更不要说大多数条件不优越的高等院校。另外,如果完全依靠商用软件测试工具开展软件测试的实践教学,除了面太窄、投入太高外,我们很难推广和普及在这方面取得的实践教学成果。
为此,我们提出了以主流的开源软件测试工具为基础,进行软件测试实验室建设的解决方案。该方案覆盖软件测试的各个阶段和各种类型,保证了国内许多院校在办学条件不足,实验教学经费有限,无法全方位引进商用软件测试工具的情况下,仍然能够很好地开设软件测试实践类课程。
实际上,我们在软件测试实践能力培养过程中,一直是要求学生使用开源测试工具。这是因为:
①开源测试工具的使用,特别是测试环境的建立,能够促使学生接触各种开源工具,如操作系统、服务器、数据库、页面开发语言、绘图、邮件等,培养他们搭建平台的综合能力。
②采用开源测试工具搭建测试环境开展测试工作,更有利于学生学习和理解软件开发技术和软件测试原理,提高学习兴趣。
③学生通过使用开源测试工具,除了完成课程设计所规定的测试任务外,还能够清楚地了解这些测试工具对测试技术和测试方法的支持以及这些工具在应用中存在的问题,并可以尝试自己动手改进这些测试工具。
2.3 软件测试课程配套的教材建设
为使教学理念真正得到贯彻,能力培养模式真正得到实施,必须解决与之配套的教材问题。为此,我们编写了《软件测试大学教程》、《软件测试实验指导教程》以及《嵌入式软件测试实用技术》3本教材。这3本教材不仅是课程的配套教材,而且还是软件测试课程建设和教学研究及改革等成果的最终表现,也是软件测试能力培养新模式实施的基石。《软件测试大学教程》已被北京市教委推荐为“十二五”普通高等教育本科国家级规划教材(待评审);另外,《软件测试实验指导教程》全面介绍了支持各种软件测试类型的开源软件测试工具的主要功能、应用流程及实际案例,涉及到测试管理、缺陷管理、代码分析、单元测试、系统测试、性能测试以及软件综合评测等重要实践内容。该教材配套有近1GB内容的DVD光盘,光盘中存放有覆盖软件测试不同阶段和不同类型的大量开源软件测试工具及配套的实践教学案例,保证了国内许多院校在办学条件不足,实验教学经费有限,无法全方位引进商用软件测试工具的情况下,仍然能够学习和推广我们的教学成果;最后,学术专著《嵌入式软件测试实用技术》对软件工程应用领域嵌入式软件的测试活动开展提供了专业支持。
上述教材的出版及使用,能够使我们的教学理念真正得到贯彻,教学大纲真正得到落实,教学新模式真正得到实施,实践教学的探索及改革有据可查,有迹可循。
2.4 软件测试精品课程的建设
精品课程的建设能够推动优质教育资源的共享、教学理念的宣传和教学模式的普及与推广,使学生得到最好的教育,从而全面提高教学质量。
软件测试课程自2009年评为北京工业大学校级精品课程以来,一直在努力开展精品课程相关内容的建设,积极申报北京市精品课程。通过近几年的软件测试精品课程建设,很好地推动了优质教育资源的共享,以及实践教学理念的宣传和实践教学模式的普及与推广。
软件测试课程在建设过程中,对教学内容、教学方法进行了如下的改革:
①在整个本科和工程硕士教学计划和培养方案的基础上,进行课程体系、教学内容及实验和实践环节整体配套和优化的教学改革;
②重视基础理论,采用案例驱动式教学方式,加强实践教学环节,注重基本技能训练与工程能力的培养;
③密切软件开发技术及测试技术应用最新动态,设计实践教学案例,增强课程内容的针对性和时效性;
④将软件测试课程理论教学与软件测试课程设计、软件协同测试等实践教学和创新学分整体考虑,努力达到培养高素质、专业化软件测试人才的要求;
⑤为使软件测试课程达到既定目标,开展了配套的教材建设。
总之,精品课程教学内容突出全生命周期软件测试概念、软件质量分析手段、现代软件测试技术、主流测试工具应用以及典型应用测试方法等,帮助学生了解和掌握现代软件测试的各种原理、方法和技术,并能够选择合适的软件测试工具进行相关测试。这些举措为培养学生今后成为高素质、专业化的软件测试人才打下很好的基础,许多学生毕业后在IT企业能够很好地从事软件测试工作。
软件测试精品课程网站是按照北京市精品课程网站建设要求建设的。网上的内容除了课程概况、课程内容、练习作业、教学课件、参考资料以及全程录像。由于软件测试课程包含有实践性教学,因此本网站包括实践教学指导等。除此之外,本网站还包括软件测试课程全面教育教学研究和改革的思路、方案和成果。可以说,本网站内容完整、资源丰富,其成果具有可示范性和可推广性。
软件测试课程建设得到北京世纪超星信息技术发展有限责任公司的大力支持,该公司将本课程作为优秀学术成果(超星名师讲坛――超星学术视频)进行了全程的录像和系统的整理,部分录像资源可在超星网上观看或下载,网址是: video.省略/playvideo.aspx?id=31475。另外,超星公司已授权我们可将本课程的完整学术视频放在学校精品课程网站上,使教师和学生共享其资源。
3 软件测试人才能力培养模式的实践
软件测试课程在不同的院校其设置是不一样(如理论课或理论课+实验课,学时、学分等)的,北京工业大学软件学院在软件工程专业本科生的教学计划中将软件测试课程设为专业必修课,其课程设置包括理论课及实验课(课程设计)两部分。理论课32学时,16周完成,每周2学时,最后参加学校考试周的闭卷考试。课程设计是期末小学期2周集中进行,共60学时。
3.1 课程设置情况
软件测试课程自2005年开设以来,就依据“用工具,促能力”的教学理念开展本文所提到的软件测试人才能力培养的新模式进行教学,讲授了8轮次,学习人数达500多人。
无论是软件测试理论课实验、软件测试课程设计,还是创新学分――软件协同测试,都是以软件测试工具为核心,结合精心设计的测试案例,使学生从测试需求、测试环境建立、测试策略、测试技术应用、测试用例设计与执行、测试结果分析,以及缺陷跟踪管理与测试报告文档撰写等方面完成实验内容和课程设计内容。
3.1.1 软件测试理论课程的实验大纲
软件测试理论课中安排了6个学时的实验内容,包括三个方面的内容(每部分内容2学时):代码静态检测、Java单元测试Junit、Gtk+界面测试。
3.1.2 软件测试课程设计大纲
软件测试课程设计按照《软件测试实验指导教程》开设了6大类型的软件测试项目,每个类型的测试项目要求学生同时使用主流的开源测试工具,体会先进和成熟的软件测试技术,提高学生的实战能力。
类型1:以测试过程管理为主,实验重点是缺陷管理、测试管理以及缺陷管理与测试管理的集成。涉及到的开源工具主要有Mantis、Bugzilla、Testlink、Testopia等。
类型2:以程序的静态分析为主,实验内容是程序理解、代码静态分析。涉及到的开源工具主要有Oink,Eclipse PTP/ CDT,以及分析Java代码的多种工具(如Findbugs、PMD、Checkstyle、Valgrind、Prefast等)。
类型3:以单元测试为主,实验内容是基于支持测试驱动开发(TDD)的单元测试框架xUnit的C/C++功能测试和C/C++及Java的覆盖测试。涉及到的开源工具主要有CppUnit、EclEmma、Gcov等。
类型4:以图形界面测试为主,基于单元测试框架对Java GUI进行测试,对网页进行测试。涉及到的开源工具主要有JFCUnit、HttpUnit、JWebUnit等。
类型5:以性能测试为主,除了继续在单元测试框架的基础上对Java应用进行单元性能测试外,重点是对Web应用系统进行整体的性能测试。涉及到的开源工具主要有p-unit、JMeter、WebLoad等。
类型6:以软件综合评测为主,对南京大学的EASTT工具进行综合应用(可辅助使用Panorama++试用版),全面了解软件评测的思想、方法和要求。
软件测试课程设计的考核内容包括:建立测试环境,运行测试工具,编写测试例子,加载被测程序,执行测试用例,分析测试结果,撰写测试总结报告(报告字数不少于1万字),最后登台汇报(PPT演讲)。
通过撰写报告和登台PPT汇报,培养学生的逻辑思维、归纳总结、论文撰写、多媒体制作以及登台演讲能力。3.1.3 软件协同测试创新学分大纲
软件协同测试创新学分实践课程主要是由教师布置具体的较大型软件测试项目,模拟多人异地得测试活动,让学生体验软件测试各个阶段进行协同的关键要素。包括测试需求分析、测试计划制定、测试用例设计、测试用例执行、测试结果收集以及测试资源和测试过程管理等各个环节的协同要求,学生通过协同分工完成整个课程任务,并在测试实践中总结方法,创新性的提出软件协同测试的解决方案。
3.2 实践效果
基于“用工具,促能力” 的教学理念下的软件测试人才能力培养的新模式在内容组织上做到了既能够调动学生专业兴趣,使其感到软件测试的实用性和挑战性,又加强了学生软件测试的实际动手能力。软件测试课程以主流的开源软件测试工具应用为基础,以实战能力培养为目的,易于教师开展软件测试的各项实践教学活动,而且学生对这种形式的实践教学反映非常好,学生参与实验的热情非常高,学生经过实践后收获非常大、能力提高非常快,学生为实践收集或设计的案例非常丰富,部分学生撰写的实践总结报告水平也非常高。另外,学生结合分组实践内容的安排,进行针对性地软件测试实践活动,同时也可以方便不同层次的学生根据自己的能力、时间和兴趣选择相关的实践内容进行自学和实践,进一步地拓展自己的专业知识和专业技能,为今后的职业生涯规划打基础。
企业对我们所取得的成果给予了认可。北京应用软件产品质量监督检验中心与学院签署了战略合作协议,确定在软件测试人才培养(如软件测试培训、实训及实习)、软件测试科研、软件协同测试平台建设以及嵌入式软件测试等基础建设方面开展合作。
2009年,北京工业大学软件学院所获得的北京市软件工程实践教学示范中心其建设内容主要是软件工程及其相关专业核心课程的实践教学及其学生的能力培养。按照什么样的理念和模式开展这些课程的实践教学,软件测试课程“用工具,促能力”的教学理念和在该教学理念指导下的软件测试人才能力培养模式做了一个很好的实践和回答。
4 结束语
目前计算机学院或软件学院学生的软件测试人才培养一直是高等院校计算机人才或软件人才培养的一个“短板”,一直缺少好的教学理念和教学模式。因此,开展软件测试人才能力培养的教学理念及培养模式的探索与实践是一件非常有意义的工作。对于这项工作,有关专家给与了充分的肯定,他们认为:软件测试人才能力培养的教学理念和新模式强调软件测试工具使用的重要性,同时重视教学实验成本和教学的灵活性,所有实验和实践活动的内容组织均以开源软件测试工具为主。通过实际测试项目的开展和工具的使用,能够使学生掌握软件测试的基本方法、技术和流程,提高他们的动手能力。而且这种教学理念和培养模式具有示范性和推广性。
参考文献
[1] 柳永坡. 让软件测试实验和实训课程轻松地走进高校或培训机构――介绍《软件测试实验指导教程》[J].计算机教育,2010(13):158.
[2] 柳永坡. 软件测试大学教程:软件测试课程专业教材[J].计算机教育,2010(12):158.
[3] 蔡建平. 开源软件测试实践教学方案设计[J]. 计算机教育,2011(6):103-108.
[4] 蔡建平. 软件测试大学教程[M]. 北京:清华大学出版社,2009,09.
一、工作数据
我于xx日入职,在这4个月的工作中,我从开始进入公司配置xx安装环境到xx,再到现在完全测试的xx工作。
二、工作总结
作为一名软件测试人员,我的工作内容是:主动寻找公司的软件产品中可能的缺陷以及不合理的地方,并及时反馈给开发同事,保证公司的软件交给客户是比较理想没有明显缺陷的状态。
在公司测试的日常工作,思想汇报专题主要由两部分组成:一是与实施同事交流讨论,总结实施同事提交的并提交给开发修改、全程跟踪,直到关闭。二是按照流程细致的分析软件可能存在的缺陷,及时反馈给开发同事。在4个月的时间里,我由测试xx转到测试xx,下面对我的工作做一个总结。
1、xx测试。刚来公司,测试经理给我非配的是一台惠普的新台式机,运行速度很快,用起来很舒服,很喜欢。第一个星期主要是学习xx的业务流程和安装部署xx财政端和单位端的测试环境。在xx的帮助下我配置了6月到8月份,我主要测试的是xx版本,财政端测试的模块主要有:票据管理、收入管理、基础资料、单位对账、统计报表、票据查询、以及系统管理等模块;测试单位端主要是与财政端相关模块。测试的用户有:省财政厅、xx县、xx县。
2、xx测试。到了八月底,由于黄石非税项目组的xx*的项目任务比价紧,我遍参加进入了xx的测试小组,与xx、xx一起并肩战斗!由于xx功能不够稳定,测试工作进度受开发的影像,进度时快时慢,工作状态也反复无常。我调整好状态,及时与开发的同事沟通,把没有及时跟新出现的直接与开发交流,避免了测试工作的反复。测试xx的过程中由于开始业务不熟悉,请教xx,她都耐心的帮我解答。
三、工作中存在的问题以及解决办法
刚走出校园初次接触软件测试这个全新的行业,我就对这份工作产生了极大的好奇,在工作的过程中,不断的和同事交流,学习工作技巧,工作到今天,工作技能有了很大的进步,但是,随着工作的日益进展,也出现了些困惑和工作难题。
1、部门间同事交流不是很充分。前期测试xx感觉交流还比较充分,因为xx版本是一个稳定的版本,性能比较稳定,用户提出的都很深入比较少,实施、测试、开发就有充分的时间讨论、分析需求、最终合理的解决。但是转到测试xx后就明显感觉交流的时间不够,我想是因为xx的项目时间赶得太急,这段时间资源有限,整个项目组必须拿宝贵的时间解决最重要的事情,所以需要项目的每个成员做好全心的投入,每个细节和问题及时沟通,这样才能保证项目开发流程的顺畅,最后完成任务。我想我在紧急项目测试的这个方面还要注意方法。
2、由于个刚走出校门的大学生,项目经验比较少,也很欠缺对行业技术的把握。我要加紧学习,才能更好的满足不断变化的深入的测试工作。
四、近期工作计划及职业规划
1 软件开发和软件测试
软件开发和软件测试都是软件工程定义里的重要阶段。软件开发是根据用户要求建造出软件系统或者系统中的软件部分的过程。软件开发人员主要工作是对用户需求进行分析,根据需求分析进行系统设计、程序编码、单元测试和软件缺陷的修复。
软件测试是根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例(包括输入数据与预期输出结果),并利用这些测试用例运行软件,以最少的人力、物力和时间找出软件中潜在的各种错误和缺陷的过程。在软件投入运行前,软件测试对软件需求分析、设计规格说明和编码最终复审,是软件质量保证的关键步骤。
2 软件开发和软件测试的关系
在软件项目团队中,软件开发和软件测试都是其重要的项目成员,两者都有共同的目标就是实现用户需求,保证软件高品质的交付到用户手中。有开发就会有测试,开发人员先实现软件,测试人员对软件进行测试找出程序错误和缺陷,并提交开发进行修复。软件开发和软件测试通过这样互相合作,逐步解除软件隐藏的程序错误和潜在风险,使软件产品更逼近于用户需求。
软件开发和软件测试的工作交集就是软件缺陷,在软件缺陷的定义和处理上往往容易发生意见分歧。在这个时候,作为软件测试人员,如何处理和应对好和软件开发的关系,保持高效的团队协作能力就显得尤为重要。
3 软件测试对软件开发关系的处理方法及技巧
3.1 尊重开发成果
作为测试人员要保持良好的心态,要尊重开发的工作成果。有的测试人员接到开发提交测试的软件,在开始测试后碰到这样那样的问题,有的可能是显而易见的问题时,就会心生抱怨,甚至言语上抨击开发人员技术水平低,单元测试没做好,这样很容易导致开发人员对测试人员的反感和抵触,造成两者关系紧张。其实,你要理解开发人员也是在时间紧,任务重,经过加班加点的情况下开发出来的程序,有错误那是肯定的,我们测试人员的职责就是要帮助他们找到软件里面的 Bug,帮助他们改进软件质量。所以,测试人员要保持好的心态,理解开发人员的辛劳,尽好测试职责努力帮助他们。
3.2 提交缺陷技巧
日常工作中测试与开发打交道最多的莫过于在软件缺陷的定义和处理上了。怎样能够让开发人员更乐于接受测试提交的缺陷并改进它,测试人员要注意以下几点:
3.2.1 换位思考,多站在开发人员的角度想
开发人员将软件提交测试后,他们最焦急等待的测试结果基本上都是系统逻辑跑不跑得通,数据流转是否正确。测试人员在这方面就要注意测试技巧和提交Bug的优先顺序。测试时优先按业务流程测试整个系统逻辑,把影响系统逻辑的错误找出来优先提交给开发人员,这时候的开发人员会很喜欢修改这些问题。测试中碰到一些不影响系统逻辑的Bug我们先暂且记录下来,待第一批都修改完毕,测试才提交如界面美观、输入输出控制等改进型的Bug,这样有主次的提交 Bug顺序,开发更易于接受。
3.2.2 Bug描述要清晰准确
测试人员发现的BUG是开发人员改进的重要依据,好的Bug描述对于正确的和高效的解决Bug非常重要。测试人员在描述Bug时,语言要简明准确,杜绝使用“好像、有时、偶尔、几分钟、一段时间”等模糊词语;描述的内容不是越多越好,只要提供有利于开发人员快速定位的必要信息即可。具备一定开发经验,水平较高的测试人员还能通过错误现象,定位程序可能出错的地方,提出问题查找的方向。
3.2.3 避免提交重复和无效的Bug
测试人员在遇到Bug时,要先进行问题分析,这个问题是独立出现还是整个系统都普遍存在,如果是普遍问题,只需要提交一个Bug即可。过多的同一问题根源的Bug会令开发人员厌烦。另外,测试人员不但要熟悉业务需求,还要熟悉软件系统的操作和使用,提交由于操作错误而非程序问题引起的Bug,容易导致开发对测试失去信任。如果测试人员在不确定是否Bug的时候,可先向开发人员进行询问确认。
3.3 注重沟通
(1)测试人员与开发人员最容易产生分歧的就是对缺陷的定义,这时候面对面的讨论比在即时通讯工具上数十个来回的争论来得直接、有效、清晰。讨论的时候,测试人员应说说自己的测试方法,让开发明白你的测试内容和做法都是站在用户的角度去测试和看待问题。
(2)不要期望所有的Bug都会被开发人员修复,浪费太多的时间去争论一些不影响系统本质的非关键点反而会得不尝失,应该允许开发人员保持不同的观点,问题可留待下个版本完善。
(3)平时多与开发人员交流,了解他们负责的模块和实现方法,这样有助于自己对系统有更深入的认识,改善测试方法和测试技巧,帮助开发改进软件质量。
4 总结
软件测试与软件开发保持良好的合作关系,能够使项目团队具备更高的凝聚力,极大的提升团队协作能力,是顺利、高效的实施软件项目的有力保障。
关键词:代码审查;嵌入式软件;检查单
0 引言
随着嵌入式系统软件功能的日益强大,其规模和复杂性也日益增加,进行专业化的高效的软件测试的要求越来越迫切,挑战性也越来越强。软件测试的目标就是要尽可能早一些找出缺陷,并且确保缺陷得以修复从而保证软件的质量。
软件测试按照是否执行软件代码分为动态测试和静态测试,静态测试方式又分为基于软件工具的静态分析和基于人工分析的代码审查。一般认为代码审查是一种高效的软件测试手段,可以比动态测试更有效地发现某些特定类型的缺陷,且实施时无需特别条件,成本较低。工程实践表明,代码审查是发现软件缺陷、提高软件质量和可靠性的有效手段,该阶段发现的软件缺陷数目占整个软件测试周期发现缺陷总数的40%~60%[1]。
1 代码审查概述
1.1 代码审查定义
代码审查是一种正式的评定技术。由除作者之外的某人或某一小组仔细检查软件代码,以找出故障和违反开发标准之处以及其他一些问题。软件代码审查的目的是检查代码和设计的一致性、代码执行标准的情况、代码逻辑表达的正确性、代码结构的合理性以及代码的可读性[2]。
1.2 代码审查过程
1.2.1 个人审查
在进行软件代码审查之前我们要求先完成软件静态分析,这有利于软件测试人员在后续代码审查时对软件建立宏观上认识,在审查中容易做到有的放矢,更易于发现软件代码中的缺陷。具体表现在:
1)软件静态分析是通过专业软件静态分析工具对程序结构、数据结构、代码品质等在非运行状态下的分析,它提取了软件大量的静态内部信息,比如违背编码规则、子程序模块、调用/被调用关系、扇入/扇出数等,可以为代码审查提供辅助参考信息,依据现有的度量模型定量地评价软件的内在质量[3];静态分析的查错功能是编译系统不能替代的,因此,有必要在编译通过之后及其它静态测试开始之前,进行静态分析。
2)编程准则检查是静态分析的重要组成部分,也是以往代码审查具体检查项的规范化总结。编程规则的许多条款以前是代码审查检查单中的内容,但依据人的检查工作量大且往往会遗漏,现在上升为专业工具检查,大大提高了检查的效率和准确性。软件中编程准则的违背往往是缺陷引入最可能的地方,但并不是违背住处必定是功能缺陷之处,这还需要再进行分析。代码审查就要对使用工具所做的静态分析的结果进行验证。
个人审查时测试人员要仔细阅读代码和相关材料,结合静态分析的结果对软件代码进行审查,同时还要对照代码检查单,记录下发现的问题及明显缺陷。
1.2.2 会议审查
由组长、资深程序员、程序开发人员与专职测试人员组成测试小组,在一起以会议的形式进行代码审查。审查首先由程序开发人员逐条语句讲述程序的逻想结构。在讲述的过程当中,小组的其他成员应提问题、判断是否存在错误,同时对照代码检查单进行分析讨论,对讨论的各个问题形成结论性意见。
利用代码检查单对软件进行审查是代码审查过程的一个重要部分,如果想发现和改正程序中的每一个缺陷,就必须遵照一个精确的规程。检查单可以帮助确保遵循这个规程。本文针对C语言代码的检查部分,列出检查单中常见的错误类型:
1)一致性错误:一致性错误主要是检查设计的所有功能是否都已经编码,以及所有的代码是否都可对应到设计文档。
2)数据引用错误:数据引用错误是指使用未经正确初始化用法和引用方式的变量、常量、数组、字符串或记录而导致的软件错误。
3)数据声明错误:数据声明错误是指不正确地声明或使用变量和常量。
4)运算错误:计算错误是基本的数学逻辑问题,计算无法得到预期结果。
5)比较错误:小于、大于、等于、不等于、真、假。比较和判断错误很可能是边界条件问题。
6)控制流错误:控制流程错误的原因是编程语言中循环等控制结构未按预期的方式工作。它们通常由计算或者比较错误直接或间接造成。
7)子程序参数错误:子程序参数错误的来源是软件子程序不正确地传递数据。
代码审查的目的就是为了产生合格的代码,代码审查过程中正确地使用代码检查单可以用较少的时间更好的发现程序中的缺陷,同时根据测试经验和代码审查中发现的错误也可以补充完善检查单,为后续软件测试提供有价值的参考。
2 代码审查实践
2.1 嵌入式软件特点
嵌入式软件是基于嵌入式系统设计的软件,它是由程序以及文档组成。嵌入式软件同通用软件的区别主要表现在以下几方面:首先,与通用的软件有很强的兼容性不同,嵌入式软件只能运行在特定的目标机上,与其所属的目标机系统有很强的耦合性,软件的实现细节和目标机系统的结构、I/O端口配置等都有关系;其次,由于嵌入式系统计算机应用要求,需要在规定的时间内完成处理功能,这就要求嵌入式软件要有很强的实时性;另外,嵌入式实时系统对外部事件的响应一般都是通过中断来处理的,其对中断的处理方式直接影响到系统的实时性能。但在实际应用中,由于中断的复杂性,不可能进行充分的测试,而只能通过充分的中断分析来弥补。因此,嵌入式软件的测试应有别于通用的软件。
2.2 嵌入式软件代码审查实践
在我院相关产品中,嵌入式软件占了绝大多数,而嵌入式软件又是最难测试的一类软件,表现在其实时性强、I/O通道少、开发工具昂贵、内存不丰富、与硬件紧密相关、CPU种类繁多等[4],且嵌入式软件比普通软件对可靠性的要求更高,因此有必要对嵌入式软件的测试技术做深入的研究。本人结合我院代码审查工作情况,总结了多个嵌入式产品软件的测试结果及经验,归纳出在嵌入式软件代码审查中,除常见错误类型之外还应着重检查的内容:
2.2.1 初始化检查
主要检查在系统软件工作开始时,系统的软件硬件是否都处于一个完备的、正确的初始状态。检查项目有:
1)软件在初始化时是否确保禁止、互锁和安全逻辑的配置,并保证满足异常限制条件。
2)加电初始化的系统状态是否和所有外部接口的初始状态规定相符合。
3)软件是否将可置换单元初始化,启动和置于某个已知的安全状态。
4)所有不使用的RAM、寄存器(包括可编程逻辑芯片的共享RAM,寄存器)是否初始化。
5)非正常条件下系统是否初始化。
2.2.2 接口检查
主要检查是否会因为接口处理不当导致软件功能的错误或损失,甚至硬件的损坏。检查项目有:
1)接换数据的以下特征:信源、信宿、类型、格式、协议、传输速率、分辨率、吞吐量。
2)外部系统来的复杂数据,考虑可能的失效模式。
3)数据采集的频率和外部数据的变化率是否相适应。
4)数据采集的分辨率和外部数据的精度是否相适应。
5)串行通讯的异常处理的适合性。
2.2.3 中断处理检查
主要检查是否会因为中断处理不当导致软件性能下降,死锁和数据腐败。检查项目有:
1)检查软件中用到的中断,分析它们的属性,比如是属于定时中断、周期性中断还是随机中断;是偶发的还是频繁的;是系统内部的还是系统外部的。
2)检查中断之间的关系,中断的优先级分配;中断之间是否有约束机制,如A中断必须在B中断之后出现等。
3)中断的处理流程,中断入口的保护;中断出口的恢复;中断执行时间是否合适;开中断的时机是否恰当。
4)中断的嵌套,中断控制初始化是否和硬件电路相容,是否和系统功能要求一致;可能发生的最大嵌套次数;是否有自嵌套的情况;是否会丢失低级中断;是否会发生死锁。
5)资源竞争检查,有无共享的缓冲区、变量和I/O端口存在,读、写处理有否冲突;有无同时出现的中断申请。
6)异常情况的处理,是否采用了防止干扰引起中断误触发的措施,发生误触发或丢失中断对系统功能有什么影响。
7)对中断信号的确认处理和硬件电路是否一致。
2.2.4 与时间特性有关的检查
主要检查是否会因为处理不当导致软件功能的时间特性下降错误或功能紊乱。检查项目有:
1)在超过正常响应时间时,是否有适合的保护机制。
2)对与时间相关的功能,例如滤波、积分、延迟、迭代等,是否有算法超时保护机制。
3)采样周期是否考虑了干扰信号的频率。
4)不使用空操作或空循环来做延时。
5)不使用大的多重if-then-else 和多重case结构。
2.2.5 安全性可靠性的处理检查
检查为提高系统安全性和可靠性的处理措施是否合适。检查项目有:
1)检查出现硬件失效,导致系统失效的软件故障的情况下,或者软件检测到一个与当前运行模式不一致的配置时,软件是否有能力将系统置于某个安全状态。
2)采取的检错、防错、纠错和容错措施是否有效,并且没有副作用。
3)对关键功能的所有不期望事件,是否都有处理要求且措施合适。
2.2.6 重用代码检查
在有延续性的产品中,代码或组件重用是很常见的现象,当代码或组件的重用方式与原来的设计者或开发者的意图不同时,重用可能就是不恰当的。重用检查项目有:
1)检用代码是否有依赖性,如果代码要依赖其它完成特定任务的东西,而新的程序不完成那个任务,代码就不能正常工作。
2)检用代码与新程序的集成,如果新的程序中定义的变量、给定的常量或指针,不是被重用的模块所期望的,也会造成代码的重用错误。
实践证明,以上这些检查内容可以有效地发现代码中存在的缺陷,是常用测试内容的有益补充,能显著地提升软件测试的效果。
3 结论
本文介绍了软件代码检查单中的常见错误类型,列举了嵌入式软件因为其特殊性而应着重检查的内容,两者结合对嵌入式软件进行代码审查,可在有限的软件测试周期内对程序的正确性、规范性、一致性、中断处理、时间特性、安全性可靠性等方面进行有效的检查。通过使用该方法在实际工程项目中发现了众多的软件缺陷,效果显著,从而提高了整个测试工作的效率。
参考文献:
[1] Oliver Laitenberger. Studying the Effects of Code Inspection and Structural Testing on Software Quality[J].
[2] 许聚常,朱国庆,尹平等.GJB/Z141军用软件测试指南.中国人民总装备部.2004.
【关键词】软件测试;测试方法;黑盒测试
随着软件产业的迅速发展,软件产品的质量已成为软件企业生存与发展的关键。软件缺陷自软件诞生的那一日起就跟随着出现,软件测试就应运而生。随着软件内容和结构的不断丰富,软件缺陷也日趋多样化,引起更为严重的质量问题。软件测试方法的研究正是本着提高软件质量,降低软件缺陷的影响。随着人们对软件质量的重视,软件测试也不断得到加强和持续发展。
1、软件测试的定义
软件测试应该是以查找软件缺陷为目标的一种过程,测试用例设计和缺陷管理是软件测试中提高缺陷查找效率和缺陷处理效率的两个有效手段。软件测试依靠的是强大的逻辑和条理性来完成工作,也同时存在着一定的风险。软件的应用形式多样,输出和实现功能的方式也不止一种,而产品设计中缺乏客观的标准,就使得软件缺陷的标准也变的多样,没有任何一种方式能够对软件进行完全测试。这样,就无法通过软件测试显示隐藏的软件缺陷,只能尽量查找软件缺陷,找到的软件缺陷越多,说明软件本身的缺陷就越多,同时尚有在测试过程中被发现和断定的缺陷,这也是软件测试的局限性。
2、软件测试的基本方法
软件测试过程包含几个阶段:测试需求的分析和确定;测试计划;测试执行;测试记录和跟踪;回归测试;测试总结和报告。狭义的测试是指在代码编写完成后对代码进行测试,而广义的测试开始于需求阶段,伴随着设计、实现阶段。如测试需求规格说明书,测试设计框架等。可以从不同角度来划分软件测试方法。
2.1静态测试和动态测试
软件测试从是否需要执行被测软件的角度,可以将软件测试分为静态测试和动态测试。静态测试是指依据需求规格说明书、软件设计说明书、源程序做结构分析、流程图分析、符号执行,对软件进行分析、检查和测试,不实际运行被测试的软件,约可找出30%到70%的逻辑设计错误。这种方式不通过程序运行就能够寻找代码中的缺陷或对程序中的代码进行评估,可以由人来操作,发挥了人的逻辑思维的优势或测试经验,能够批量性地发现问题,并直接定位到缺陷或错误的具置。静态测试可以分为静态分析和代码走查。静态分析是一种计算机辅助静态分析方法。主要对程序进行控制流分析、数据流分析、接口分析和表达式分析等。静态分析的对象是计算机程序,程序设计语言不同,相应的静态分析工具也不尽相同。代码走查是一种人工测试方法,它一般依靠有经验的程序员根据需求分析、设计规格等来执行。动态测试是指通过运行软件来检验软件的动态行为和运行结果的正确性。动态测试有两个基本要素:被测试程序和测试数据。必须生成测试数据来运行被测试程序,取得程序运行的真实情况、动态情况,进而进行分析测试质量依赖于测试数据。
2.2黑盒测试、白盒测试、灰盒测试
从测试是否针对系统的内部结构和具体实现算法来看,可以将软件测试分为黑盒测试、白盒测试、灰盒测试。
黑盒测试又称功能测试,数据驱动的测试或者基于规格说明书的测试。黑盒测试可以从软件的功能为起始,根据功能的需求说明测试所用的方式,并依据该方式的需求来运行被测试的程序。从名字上来解释,就是将软件看成是不透明的黑盒子,对于盒子内部的结构不理会,只关注软件的实用功能,并对这些功能进行测试。
白盒测试又称结构测试,玻璃盒测试或基于覆盖的测试。相比较于黑盒测试,它更关注于软件内部逻辑结构,其测试的重点是测试用例的覆盖程序结构的程度。白盒测试,是将软件比作透明可见的盒子,测试人员可以根据程序内部的逻辑结构来设计测试用例,来测试程序的逻辑路径。
灰盒测试,也称跟踪法测试,是指介于白盒测试和黑盒测试之间的一种测试方法,它关注输出对于输入的正确性,同时也关注内部结构形式的程度,它跟踪程序的运行过程,特别是输入数据在程序中的“流程”。比如,测试人员输入数据后,软件会将其转换为代码并通信至服务器,服务器经过一系列的处理,将数据传送给客户端,并最终显示给测试者。灰盒测试能够对整体的过程进行追踪,对每一步的数据进行测试。。但较白盒测试而言,灰盒测试没有深入解析程序的结构,但也不像黑盒测试那样只关注输入和输出,它也关心程序中间的某些流程是否正确。
3、软件测试用例设计
传统软件测试用例设计是从软件的各个模块的算法细节得出的,而面向对象的软件测试用例则着眼于适当的操作序列,以实现对类的说明,主要有基于故障的测试、基于脚本的测试和类层次的分割测试等形式。
3.1基于故障的测试
软件系统最终是以实现用户的需求为目的的。基于故障的测试是从模型分析开始,逐步来测试软件可能发生的故障,为了确定故障的类型和存在方式,一般设计用例去执行代码。基于故障的测试核心问题是测试者怎么来判定错误的性质。“可能的错误”可以是意料之外的结果,不正当的操作,错误的引用等。如果是操作不当引起的错误或故障还需要对操作进行检查,排除操作因素引起的故障。这种方法除用于操作测试外,还可用于属性测试,确定其对于不同类型对象行为是否赋予了正确的属性值。
3.2基于脚本的测试
基于脚本的测试主要关注用户的需求,并从用户任务中找出用户要做什么及去执行。这种基于脚本的测试有助于在一个单元测试情况下检查多重系统,所以基于脚本用例测试比基于故障测试更实际也更复杂。
3.3类层次的分割测试
类层次的分割测试可以减少用完全相同的方式检查类测试用例的数目,这与传统测试中的等价类划分测试很相似。类层次的分割测试主要分为:基于状态的分割,按类操作是否改变类的状态来分割;基于属性的分割,按类操作所用到的属性来分割;基于类型的分割,按完成的功能分割。
4、结束语
软件设计中出现的缺陷是无法完全消除的,却可以通过软件测试来降低缺陷的发生,随着市场对软件质量要求的提高,软件测试在软件开发中的地位越来越重要。软件测试的最终目的不是为了找出软件设计中的错误和故障,而是通过测试来发现缺陷,找出缺陷的分布特征和出现的规律,以期在新的开发项目中寻找更优的方式来避免缺陷的出现,改进设计结构,同时也能够通过设计有针对性的检测方法,改善软件测试的有效性。
参考文献