工程实践报告 (2)


北京工业大学软件学院

工程硕士研究生工程实践报告成绩评定书

工程实践报告题目:软件测试技术的研究及应用

注:成绩以优、良、中、及格、不及格计。


一、国内软件测试环境的总体概述... 1

二.实践内容简介... 1

三、如何进行测试... 2

3.1 功能点的细化... 2

3.2 注意测试中的错误集中发生现象... 3

3.3 对文档的测试... 3

3.4 尽可能多的使用非常规的测试... 3

3.5 对测试错误结果一定要有一个确认的过程。... 4

3.6 制定严格的测试计划... 4

3.7 回归测试的关联性一定要引起充分的注意... 4

3.8 测试文档要尽可能详细... 4

3.9 重视交流和沟通... 4

3.10 善于总结... 5

3.11 妥善保存一切测试过程文档... 5

四、工作经验总结... 5

4.1 学会利用网络... 5

4.2 学会动手... 6

4.3 思考自己所作的... 6

4.4 学会利用论坛资源... 6

4.5  学习和你所测试的软件产品相关的知识... 7

五、软件测试行业的前景... 7


软件测试技术的研究及应用

一、国内软件测试环境的总体概述

现在市面上有大量软件测试工程师的职位在公开招聘。实际上北京的几个大的外包公司如文思创新、博彦科技、天海宏业(后被大连海辉并购)、中软等早就已经开始在大张旗鼓地挖抢人才,在北京市场上,对软件测试工程师的需求早就骤然如井喷式爆发。

包括微软公司在内的业界各个软件开发企业在不长的几十年的软件产品开发和服务提供的实践中,都深深认识到软件测试和软件测试工程师在软件开发工程过程中是必不可少的。在早期的“软件作坊”时代中,个人英雄主义盛行,大家崇尚程序员单打独斗的行为。但很明显,现如今已经到了一个新的时代,一个软件作为服务来提供的时代,一个软件系统的复杂性急剧增加的时代,一个成功的软件开发需要大量各有所长在一起相互配合和协作的人群参与的时代,一个多样化的时代。我们站在一个越来越“平”的地球上。在这个时候,在一个团队中,软件开发工程师重要、项目经理重要、测试工程师重要、文档工程师重要……因为少了谁,哪个角色做得不好,都会影响到产品最终如期发布抢占市场先机,都会影响到用户的最终体验——这种影响是生死攸关的。

作为软件开发过程中一个非常重要的环节,软件测试越来越成为软件开发商和用户关注的焦点。完善的测试是软件质量的保证,因此软件测试就成了一项重要而艰巨的工作。

二.实践内容简介

由于公司刚刚才成立了测试小组,整个测试流程还不是很规范,没有使用一些自动化的测试工具,测试人员也就是做一些系统测试,单元测试、集成测试都由开发人员自己完成。毕竟是刚刚开始,会慢慢走向正规的。在这期间我也学会了如何写测试用例,如何管理bug,并且熟悉了一些智能卡方面的业务知识。

我实习所在部门是智能卡部门,主要做智能卡和票务系统方面的项目,例如:沈阳一卡通、淄博城市一卡通、科技馆(新馆)一卡通、科技馆票务系统等等。我的工作就是对这些系统做系统测试。在测试之前,我需要先了解这方面的业务知识,在不了解业务知识的前提下进行的测试也只能测试出纯粹的软件缺陷,而面对眼前出现的业务相关的缺陷,很可能是视而不见,如果这样的话,软件测试的效果会大打折扣。

最近测试组长让我负责测试了淄博城市一卡通广电缴费系统,它包括一卡通中心管理系统、POS机缴费系统、营业大厅缴费系统、联机业务系统。我首先要弄明白这几个模块之间的联系,相互依赖关系。通过一卡通平台和广电业务系统的数据交换、数据同步,实现一卡通系统的广电缴费应用。业务采用联机交易方式,一卡通平台获得交费记录后,将交费信息同步传到广电业务系统中。一卡通中心系统提供异常处理的机制,保证卡钱包扣款或者账户后款交易与后台的数据处理的数据一致性,保证事务的完整性。交费POS采用联机交易方式,查询其应交纳费用,用户确认后,刷卡交费,此种方式和小额消费应用相同。支付方式可以选择扣除一卡通小钱包中的资金,也可以选择采用卡后台钱包账户支付。业务采用联机交易方式,一卡通平台获得交费记录后,将交费信息同步到广电业务系统中。

这些业务知识熟悉了之后才能进行一些非纯功能方面的测试,我也测试出了一些业务方面的bug,例如我把某帐户冻结之后,还可以进行卡账互转,这就是一个很严重的bug。在测试的同时我还会参考需求规格说明书,因为测试的最终目的是要让软件符合用户的需求。

我在做测试之前要先写测试用例,公司用TestDirector来管理测试用例,我需要在TestDirector中先建立需求树,生成测试需求文档;然后根据需求树制定测试用例,生成测试文档;最后执行测试用例,记录bug,生成测试记录文档。Bug发现后,还需要跟踪bug,督促开发人员修复bug,开发人员每修改完一个bug,我都需要再回归测试一下,如果验证通过,则把此bug关闭;反之不关闭。

三、如何进行测试

软件测试虽然辛苦,但是掌握了一定的技巧之后将会事半功倍。 以下是我这段时间做测试的一些技巧总结。

3.1 功能点的细化

       在进行测试前,先将所要测试的功能细分,认真编写测试用例,有针对性的运行功能测试案例,逐个对每个功能细分点进行测试。在每次运行测试案例之前,明确此次运行的目的和预期的输出结果,并要做好记录。

3.2 注意测试中的错误集中发生现象

有一些错误是和程序开发人员的编程水平和习惯有很大关系的。例如程序中的拼写错误,习惯用法等。注意收集并记录这些现象,有助于更快、更多地发现类似的错误。

在程序员刚修复Bug之后的地方,再找一找,往往程序员只修复报告出来的缺陷而不去考虑别的功能在修改时可能会重新造成错误。

3.3 对文档的测试

在我们公司,开发人员写的需求规格说明文档有些地方就和实际系统有些出入,比如:文档中描述系统有某个功能,可是系统做出来之后就没有该功能或者是换成了别的功能,所以对文档测试会及时发现这些问题,促使开发人员及时修改这些问题。

从需求开始测试是测试的一个重要环节。但是往往很多公司都做不到,我们公司就没有做到这一点,总是等到系统开发完成后,才进行测试,发现需求与系统有不符的地方时,就会修改一下需求,让需求跟着系统变。

3.4 尽可能多的使用非常规的测试

充分考虑到各种合法的输入和不合法的输入以及各种边界条件。边界值往往是最容易出现异常的情况,特殊的情况下甚至要制造极端的状态和意外状态,比如网络突然中断,和电源突然断电等情况。大致有以下几种情况: 

① 边界测试,测试用户输入框中的数值的最大数和最小数,以及为空时的情况。 

② 非法测试,例如在输入数字的地方输入字母、特殊字符、空格或者不输入任何东西;在需要输入正数的地方输入负数等。

③ 跟踪测试,跟踪一条数据的流程,保证数据的正确性。

④ 在开始测试之前应保证数据的正确性,然后再从系统中找出各种BUG。 

⑤ 接口测试,程序往往在接口的地方很容易发生错误,要在此模块测试勿掉以轻心。

⑥ 代码重用测试,在开发过程中有些模块功能几乎相同,开发人员在重用代码时可能忘记在原有代码上修改或修改不全面,而造成的错误。

⑦ 突发事件测试,服务器上可能发生意外情况的测试,如网络中断,电源断电等极端的情况。 

⑧ 外界环境测试,有些系统在开发时依赖于另外一个系统,当另外一个系统发生错误时, 这个系统所受到的影响的情况。 

⑨ 系统兼容测试,例如有些程序在IE6能运行正常,到IE5下不能运行。有些程序在WIN2000下能运行,而到WIN98却不能运行。像一些很特别的用户去使用系统,你很有可能发现BUG。

⑩ 用户的易用性测试,往往用户的需求是不断的变化的,而其中的一部份变化的原因,是由用户操作上不方便引起的。

软件测试是软件开发中的重中之重,没有一点可以马虎的。

3.5 对测试错误结果一定要有一个确认的过程。

       一般有A测试出来的错误,一定要有一个B来确认。认真做好测试记录在做完一天的测试记录之后,第二天再根据第一天的测试记录重复测试你会发现有未修正的错误。

3.6 制定严格的测试计划

测试时间安排的尽量宽松,不要希望在极短的时间内完成一个高水平的测试。

3.7 回归测试的关联性一定要引起充分的注意

     在开发人员刚修复Bug之后的地方,再找一找,往往开发人员只修复报告出来的缺陷而不去考虑别的功能在修改时可能会重新造成错误。修改一个错误而引起更多的错误出现的现象并不少见。

3.8 测试文档要尽可能详细

     《测试功能细分表》中的功能点可尽量的详细,如实、详细地记录每次运行测试案例的输入数据,输出数据,出错提示,进行测试的时间,完成测试的时间等,便于以后对测试工作的回溯。公司用TestDirector来管理这些。

3.9 重视交流和沟通

      包括和程序开发人员的交流,同是测试人员之间的交流,网上技术论坛和网友的交流,和客户的交流等。多思考,多交流,多提问,通过多种沟通交流的途径,可以少走很多弯路,同时可以学到很多东西。

3.10 善于总结

       在测试过程中发现的所有问题,异常情况,发现程序开发人员易犯,常犯的错误,各种有价值的经验教训,使用系统和操作数据库时发现或者学到的技巧,使用测试工具时的心得等等,我都会随手记录在笔记本或者电脑上。这些都将是我今后工作中可以参照的珍贵资料,同时也会成为自己的宝贵经验。

3.11 妥善保存一切测试过程文档

       便于测试的重现,事后的跟踪,工作的回溯,总结,报告等都要依赖这些测试文档。 

四、工作经验总结

虽然做测试工作没多长时间,但是自己也有一些小小的经验。

4.1 学会利用网络

刚进入测试领域,面对浩瀚的网络世界,当时如刘姥姥进大观园,什么都新奇,什么都想要,从网上下载很多测试的教程,测试技术文档之类,恨不得把所有的好东西收集到手中,其实有些在他人看起来就是垃圾一堆。当时觉得有了这些“武林秘籍”成为测试高手指日可待。
  一次项目经理分配任务,觉得依靠手中的秘籍很快会完成,不料短短的时间,所有的一切变成了马奇诺防线。解决问题很慢,思路不清晰,项目经理在对我施压的过程中教会了我终身难忘的一招,学会利用网络寻找要解决问题的答案,从此百度、Google、51testing论坛成了我的最爱,关键字成了我变化的招数。在软件测试工作中,他帮我解决了很多疑难问题,解答了很多令我迷惑的地方,只要你耐心找,答案就在身边。
  我总结了一下利用网络搜索引擎的技巧:
  ① 组合搜索
  每次搜索某个文件,如果只给出一个单词进行搜索,经常会出现成千上百万计的匹配网页。然而如果再加上一个单词,那么搜索结果会更加切题。
  ② 选择表述内容的词组
  一般我在网页搜索引擎的时候,选择一些可以表达我要查找内容的关键词组,用来缩小搜索范围,从而找到搜索结果是最好的办法。运用词组搜索涉可以先先简单地输入一个问题作为词组搜索,如果仍然找不到合适的,那就用多个可以表达要查询内容的关键字进行查询。  

4.2 学会动手

   参加软件测试工作后,随着工作经验的增长自我感觉越来越好。一次针对公司的新的软件功能进行测试的时候,像往常一样“随手”测试出了几个Bug,然后“仔细”的填写了Bug单(这个 Bug 的现象已经出现了很多次了)。这时候测试经理走过来,新复查了一下填写的 Bug .他在重现我的 bug 的过程中,简化了我的输入变化,bug 神奇的又出现了,同样的现象,他关闭软件重新变化输入,扩展出10几个变化后,软件不动了,内存不断上升。终于他找到了产生软件的 Bug 的原因,然后对我说“寻找 Bug 要准确定位,我们开发团队是一个整体,时间是等量的,时间不在你身上浪费,就是在他身上浪费。如果测试人员每次发现的 bug 描述不清楚,并且多个问题潜在的错误原因是一个,虽然操作可能稍微有些变化。这样开发人员在重现 bug 的时候他要调试跟踪判断,很花费时间,而整且效率低。如果测试人员发现 bug 的时候多动手可以更加准确的定位 bug 步骤和原因,给开发人员最精确的步骤和准确的描述,这样个团队才能高效,所以需要大家协作。” 
   在以后的日子里,每次解决问题的时候我都记得多试验几次,多尝试。只要再多动手实验一次就可以达到目的了。

4.3 思考自己所作的

  刚开始入行的时候,总是思考如何做好软件测试。认为公司的测试流程混乱总是很郁闷,认为自己学不到东西,如何才能测试好产品,常说心动不如行动,以前看到古龙小说中经常出现的场景无名小子不断挑战高手,总结积累。我总结了有些经验是实战中得到的,所以不断尝试引入新的测试流程然后评估,这个过程虽然很痛苦,但是从中积累了不少经验。这段时间让我学习到了很多东西,接触了智能卡的一些业务知识、测试管理工具。由于工作中经常写报告反倒养成了总结教训的习惯,因为纸面上的东西是永远也忘不掉的。在写的过程中可以不断补充扩展,整个过程是思想升华的过程。

4.4 学会利用论坛资源

   其实测试新手兵和测试高手之间的区别,往往是不会利用现有资源。在论坛中我们会看到很多新手不断的提问,但是有很多问题其实都是已经别人提过了,或者已经有解决方案的。所以经常会看到 “测试高手”的身影,并且不提问题,而且还能“锄强扶弱”,是测试新手的救命稻草。好像是高手们无所不能,其实摘掉这层耀眼的光环,他们并没想像得那么厉害,只不过通过自己的搜索找到的答案,然后帮助其他人。当然也有很多人都是通过自学,然后在论坛中交流得到了很多经验,高手其实也是因为善于思考问题,亲自动手解决问题。所以动手和利用论坛资源的过程中他们也在不断提高。
  很多时候看到论坛中有人提问,问题描述不清,很多人看了很困惑。因为题目不清晰,而且高手字样吓阻了很多人。其实问问题也是个思路整理的过程,描述清晰,让人理解清楚,才能望文知意,让人知道你当前发生问题的环境,才能让那些想帮你的人解决问题,否则给人无从下手的感觉,解决问题效率不高。

4.5  学习和你所测试的软件产品相关的知识

   要想成为好的测试人员,还要了解你要测试的软件的相关知识。要了解软件产品的架构是什么样的。要了解软件的市场需求,在接触软件之初要可以多看看用户的反馈信息,这些才是用户最关心的,也是你在测试中需要注意的问题,满足客户是最大的需要。但是了解软件需求之后要学会要多读些软件系统的技术文档,软件设计文档,这些文档可以帮助你了解产品如何工作。还有多看看公司 Bug 库中的问题,这些存在的问题可以帮助你了解软件产品那些地方存在缺陷,软件系统那些地方会出现错误。软件是运行在一个大环境中,如果对系统不熟悉,那么有些问题你不能从一个更广阔的层面考虑,学习操作系统的知识,有助于你发现缺陷,定位问题更加准确。比如软件运行在 Windows 或者 Linux ,如果你不懂操作系统,你就无法建立测试环境,有些时候软件的组件发生问题,就是你系统配置造成的,对系统不熟悉,你会把外在原因归结为软件本身。所以要学习关于和软件系统相关的知识,比如编程,网络,数据库等。不一定你要学习到多好的程度,只是通过这些扩展的知识面,你可以在发现问题,解决问题上不会局限在狭小的圈子里。
  和一切相关的人员交流,不同的交流渠道,获取消息是不同的,角度也不同。和客户交流,你会在测试中从客户的角度发现问题;和开发人员交流,你会了解开发人员怎么实现软件功能的;和项目管理人员交流,你会知道开发进度以及遇到的困难。

五、软件测试行业的前景

近日有媒体报道“软件测试行业人才需求缺口20万”,在如今“就业难”的大环境下,尤其是在金融危机席卷全球,大批企业裁员降薪的情况下,软件测试行业是否真的逆势而上,有如此巨大的人才需求呢?
  国内开发人员与测试人员的比例是8∶1,而国际公认的行业标准实际上是1∶1,这一点上国内测试行业与国外的差距比较大。实际上,为了保证软件质量,从项目开始测试人员就要介入,要了解客户需求,参与项目评审,把握测试要点。如果测试人员数量少,软件质量是得不到保证的。因此测试行业的确需要大量人才,尤其是性能测试,自动化测试和有丰富测试经验的人才更加稀缺。”
   现在国内的软件测试行业仍处于发展阶段,但是,从长远发展角度来看,测试还是需要高端人才。据我了解,有些学校已经开设了软件测试专业。随着测试行业将越来越规范,未来需要的也将是一支专业的队伍,没有良好测试技能的人将被淘汰。”
  另外,在实际工作中也存在这样一种现象:有不少测试人员感到测试团队在整个项目团队中不受重视,常常感觉比开发人员低一头,针对这种现象,贺炘道出了个中原因,“一是开发人员使软件从无到有,有很大的成就感。二是管理上的问题,目前测试行业处于发展阶段,高端人才的确较少,不能有效定位到深层次的问题。三是高层更看重研发、销售,而不重视测试。”
  对于如何改善这一现状需要做到以下三方面:一是测试人员自身要提高综合能力,多积累经验,定位深层次的问题;二是要取得高层领导的支持;三是要用事实说话,严把产品质量关。

对于测试工程师个人来说,最关心的还是个人职业发展的问题。其实,开发有什么样的岗位,测试也有就相对应的岗位,比如开发有架构师,测试也有测试架构师,也需要从整体架构考虑怎么做测试。国内公司一般会有初级、中级、高级测试工程师、项目经理、部门经理。当然也有一些公司已经有比较完善的体系,比如性能测试领域,除了初级、中级、高级测试人员之外,还有测试专家,性能测试分析师,架构师。近几年国内的测试行业也在逐步规范,分工越来越细,我相信测试行业发展也会越来越好。

相关推荐