——我们在变化中成长。假设你拒绝了变化,那么,你就拒尽了新的美丽和新的机遇。
初始软件测试
“这是一个杯子,主要用来喝水的,它的质量应该如何考量?”
这是在进入上家公司面试时,测试主管问我的题目,相关的回答已经有点模糊,但从这个问题可以大概了解到,测试主管在考察我的测试思维。
其次,如何去准确获取、表现这些需求,即相关指标数据是多少。如要知道大小、高度、容积,得用到相关测量工具,如尺子、圆规。要知道温度承受范围,可能要用到温度计等。
在完成测试工作期间,测试设计、执行之前必须清晰了解原始需求(包括隐性需求),再之后需要有对应的测试方案,需要执行哪些类型测试,要用到什么测试工具等。
很感谢当初测试主管对我测试工作的指导,不仅仅是在具体的技能培训上,还在其他的工作当中对我测试思维的引导。
功能测试实践
面试过后进入公司,最开始接触的项目是国税门户网站,所进行的测试工作是主要是功能测试,如测试用例编写、执行,测试报告反馈。当时对所谓的软件生命周期都很模糊,感觉我只要做好自己的测试任务就好了,其他的东西由上级安排就好。现在想想真的好白,白痴的白。在接下来的一年时间,让我真正接触到了项目开发、交付的实际生产过程,简而言之就是,工作任务是无止境的,永远有数不尽的需求要开发、测试,有茫茫多的Bug要跟踪。 如何在这中间保持自己清晰的定位显得至关重要。 由于在项目组中只有我一个测试人员,那么结果就是,“测试的事情就都是我的”,好像很厉害的样子。但我还只是小白啊。
“某某某,过来一下,这是这个版本修改的内容,大概是要在某月某日完成,你过(看)一下。”
“哦”。
到了测试执行,发现问题后提交给开发同事,开发回复:“设计如此。”
“哦”。
快要上线了,项目经理问:“某某某,现在系统的测试情况怎么样,能不能上线?”
“应该差不多吧”
......
测试主管了解之后,跟我强调了几点:
1、测试的依据,需求基线要清楚,要尽早参与;
2、测试要有计划方案,要有用例设计,不能随意的开展;
3、Bug的跟踪,要有自己的主见、原则;
4、测试结果的把握,要有结果分析。项目的上线,要综合你的以上测试过程,结合目前的情况总结报告,甚至是项目经理也要听取你的意见。你的角色不仅是测试,也是质量保证。
当然,以上的情况只是测试中遇到问题的一点点,如沙漠中的一粒沙(这孩子究竟怎么过来的),但也让我认识到测试是独立的、重要的。
在后来的项目测试工作中,践行测试主管传递的思想原则的同时,我并行了解相关测试书籍、工具、技能,结合工作进行相关实践,逐渐地我的测试能力越来越强。
在省国税外派了一年,之后测试过程中更加有条理、原则、规范。但也仅是个人自觉的约束,很多过程并没有按照软件开发周期的标准来执行,如测试用例、测试报告有时候会在发布版本后才编写(虽然公司也通过了CMMI3),即测试的质量保证更多的依赖个人的素质。并且,当时个人认为测试的业务熟练更多决定于对系统功能本身的熟悉和测试设计执行的熟悉,认识到错误并且有意识改变是在地税的定点联系企业管理系统和电子办税服务厅的测试过程。
之后,进入到地税的定点联系企业管理系统项目组进行测试。当时项目已快要进入验收阶段,甲方要求的功能基本都有实现,但在交付时甲方却不满意,在一些功能的易用性和系统界面展示上提了很多要求,导致整个系统最后框架、原型都换了一遍,而且限定修改的时间很短(又是一个加班加点的开始),最后甚至项目负责人都换了。
总结了下,有几个方面问题:
1、既定清晰的需求都有按要求实现,只不过实现方式不合甲方胃口,如图表不够丰富,只有概要,没有详细。
2、系统界面没有统一的样式,甲方不客气的说像草稿。
3、流程没有体现甲方日常工作内容、步骤。
4、风控系统很肤浅,指标不实用。
在这个测试过程中,我比较正式地参加甲方组织的各种需求讨论会议,期间也认识到原始需求到需求基线其实还是有设计落实过程的,其把握的度就要看负责人或产品经理的灵性了。作为测试人员,在需求评审过程中就要对比原始需求(要详细了解具体日常工作内容,行业特殊性等)和需求基线的不同,给予自己的意见,在测试过程中不时提醒自己。而对需求的理解是否深刻,有时候不是参加正式需求评审就能达到的,还需要深入到用户实际的工作场景,了解实际业务和流程。而对于自己无法准确把握(风控系统),用户又无法准确提供的需求就要定好界限,实现到什么程度。最后,好用的软件不仅是功能的实现,一个界面样式都能让你从头再来。原计划短期内交付的项目,由于后续各种修改需求一直到了次年3月,才基本结束相关测试活动。
完成定点联系企业管理系统的测试之后,我进入了电子办税服务厅项目组,在这里个人的业务掌握程度得到认可。首先,对核心系统(电子办税服务厅接口调用提供方)的相关业务(文书、申报等)熟悉,并与对应系统的中软项目组人员都可以打成一片(也是吸取在陕西时沟通不顺的教训,详细后面性能测试提到)。其次,对电子办税厅的需求理解充分,得益于当时的需求人员耐心引导(为了税务事业,头发都花白了的同事),最后是自己对相关系统的后台数据表结构都比较熟悉。出现问题之后,能快速的理清思路,定位原因。问题出现之后,当你有理有据的跟相关负责人沟通时,他们也会心悦诚服。在经过一年多的团队配合之后项目组启动跟金三对接工作(要2个月完成,又是看星星赏月亮的好时光),项目经理将接口联调的任务交由我负责,也是看在我对原有两方系统及人员的了解。
性能测试实践
测试当然不仅有功能测试。第一次接触性能测试也是在国税门户项目组,只不过测试对象不是国税门户网站。其实那个软件系统的具体业务我都不太清楚(惭愧),只知道是叫一户式查询系统。当时虽然了解过性能测试的原理,但是具体如何开展还是有点懵逼。在测试主管的协助指导下(说是一步一扶都不过分),艰难完成。
在此,额外截取下当时某个业务场景测试的结果数据(没有找到曲线图了,发一下当时用表格记录的数据,你没看错,是5并发时间95s!!!)
执行这次测试之后,了解到同性能测试如下相关信息:
1、系统的部署组成,相关的服务器有哪些(此时还不知道具体的网络拓扑结构)。
2、相关场景的选择依据。
3、工具的使用,脚本的录制。
4、主要性能指标。
5、基于工具结果的简单分析。
原谅我当时的简单朴素,能把握的就这些了。
后续的项目测试过程中,也有从事性能测试相关经历,如税企通项目(C/S架构)、省国税门户网站等,但真正让我记忆深刻并且获益良多的是地税的网上申报项目。
网报项目的相关合作方有多个,网络、防火墙、CA认证服务、核心申报等分别是不同的公司负责交付,如果测试过程中有出现问题,往往不好定位是谁的责任。
在这种情况下,了解系统的网络部署拓扑结构尤为重要,之后才是具体的测试场景开展
具体的测试场景开展:
1、熟悉了解网络拓扑图,相关机器、服务器的物理及网络部署,为之后进行分层次测试做好准备。
2、并发数的计算,按照计算公式C=nL/T(C代表并发数,n代表平均在线人数,L代表场景操作时间,T代表场景考察时间)是比较理想化的,由于项目并没有相关措施监控,因此难以获取到平均在线人数、操作时间等具体参数。这时就要结合实际系统使用情况考虑。如系统纳税人总数及申报总数,每月申报时间(1日到15日,一般最后一周或者3天为大多数),每天申报时间(上午9:00-12:00以及下午14:00-17:00)等信息去计算出每秒事务吞吐量即可得到并发数(事务吞吐量*业务场景时间)。
3、根据实际业务选择需要测试的业务功能场景。
4、性能测试场景,如系统最大并发数,单个节点最大并发数,不同网络接入点最大并发数,稳定性测试等。
5、其他指标如响应时间、资源使用。
......
确定以上方案和指标之后再进行具体的准备和执行。
执行过程中,当然不会那么顺利,开始从系统最外围即外网进行测试,结果不理想,那么就要定位原因,过滤出指标差的业务场景,然后单独测试,此时相关场景加上时间戳信息,再在各个服务器上采集日志,之后为了确认真实,再更换不同服务器地址进行测试对比不同接入点的结果。最后再拿具体的结果给对应的合作方讨论分析。
整体的设计方案执行下来,花了不少的时间。
具体执行测试时,公司内部的功能还算顺利,到分层测试时就比较麻烦。第一是需要在不同的办公地点进行(不能直接访问IP),项目组办公室、税局机房、联通机房等,还记得在机房呆过一个晚上之后,汗渍都是绿的。遇到问题找合作方沟通时,响应速度跟指标差的场景一样--慢。当然,自己的沟通方式也是有缺点的,比如跟合作方说你的系统有问题,不能仅是口头形式,要包含具体证据(报错日志、测试结果报告等),并且定下解决时间,必要时还需要甲方在场。
但不管如何,最终是完成了原定的测试目标。过程是艰辛的,但让我在今后的做事方式更加有条理、按步骤、踏实、耐心。
变化中成长
走过堤岸,有依依杨柳,迈入田野,是无边麦浪。人总会经历不同的旅途风景,在变化之间获得不同的成长见识。
第一份工作经历形成了我对测试的基本认识及工作方式,接到测试任务之后就会条件反射的设想需要开展的测试类型,相关方案。但对于这些工作是否可以更标准化、工程化的开展还只是一个朦胧的概念。
之后重新更换测试工作,工作开始并没有什么不同,只是测试执行之前要求必须编写测试用例。但随着时间的推移,让我体验到了不一样的氛围。
测试要尽早开始,并且排除随意性,有计划的进行,这是软件测试基础理论的原则之一。在公瑾,软件开发过程有比较完善的流程,期间测试人员要经过需求评审、测试用例评审、预测试评审(提交测试前的评审,由开发演示实现的功能)、测试报告评审等。在需求评审之后,要有详细的测试分析、用例,并且列入任务计划进行监控,用例的执行结果也可随时查看,了解测试进度。
落地手工功能测试的同时,我们在持续进行自动化功能测试和性能测试工作。
在很多公司看来,自动化测试是一个比较矛盾的事情,总要考量人力消耗和迭代发布版本维护原有脚本的成本。在没有建立自动化测试体系前,只能沦为个人兴趣或者形式。
我们的自动化测试工作到目前已经走过2年时间,自动化功能测试覆盖率达到95%以上,期间进行自动化测试的同学经历了从无到有,再到完整,并且常态化执行。现在使用Selenium分布式运行多台设备上的脚本,可以快速执行完原有功能的测试用例。在业务功能越来越复杂,测试用例越来越多的情况下,功能自动化测试的地位就越明显。
而对于性能测试,也变得相对易于开展。相关系统的用户使用场景数据可以轻松获取(比如并发数计算),测试执行也已经形成了一个常态化机制,不是经过某次测试之后就不再进行,或者优化后再次测试还需要人工再做一次。目前的接口性能测试和系统性能测试在确定业务场景和脚本后,具体的运行设计方案为自动每天执行,执行结果通过报表(不是测试工具本身的报表,而是测试结果保存到数据库后按照要求重新整理输出报表)展现,相关负责人可以通过结果进行选择性优化,然后再继续测试。
不管是功能自动化测试,还是接口、系统性能测试,我们都已实现工程化、自动化的工作方式,也践行了软件测试中经常提及的测试应该要持续进行的原则。
很容易发现,以前是一个人在摸索中战斗,不断的爬坑的测试过程,现在是工程化、自动化的在持续推进优化改进的过程。个人对体系趋势,优劣不言而喻。
以下是个人测试经验中的一些观点:
1、尽量把测试往前推,尽早发现,降低修复成本;
2、测试的目的不是发现Bug,而是预防Bug的发生;
3、通过各种技术手段和流程改进,逐步的解放公司内部测试人员,让他们把精力放在对产品的把握上。
特别是第2、3点,已经重新定位测试人员。而我们正在进行建设的自动化测试平台(ATP),她减低功能自动化测试的技术门槛,整合各种类型测试工作,及时反馈测试分析结果,提高测试效率的同时,将真正释放测试人员的能力,实现以上标准将不再是空谈。虽然我们现在不能说我们的测试工作已经达到这样的标准,但起码我们现已经走在正确的道路上。只要方向是对的,那么就一定会到达目标。
当然,不管有多好的工作起点平台,测试人员的素质才是决定最终测试质量的保证。在从原有重复的工作方式中解放后,测试人员的综合素质如所处行业知识、测试思维、测试设计方案都影响到具体的测试结果,这些都是工具、平台无法取代的。
测试勉励
IT工作是辛苦的,软件测试当然也不例外。每天执行用例、跟踪Bug,还要与开发、产品同学争吵PK,与人斗其乐无穷~但正是因为这些默默的付出,你让一场本该在用户面前发生的灾难,提前在自己面前发生了,你是否有一种救世主的感觉?你拯救了用户,也拯救了这一软件,避免了她被撇弃、卸载的命运。