测试人员的工作开展方式
如何开展测试?
如何开展测试,其实我们用得最多的测试方式就是一个线性的过程:获得任务-被测软件分析-制定测试计划-确定测试用例-执行测试-BUG回归。最近在看一本书《软件测试实战:微软技术专家经验总结》中的第一章节的时候否认了上面的线性测试过程方式,而讲了一种更有意思的工作方式。
测试人员的工作方式可以分几个周期去工作:
第一个测试周期:
- 1.显而易见的简单测试开始。
- 2.记录还需要测试什么。
- 3.检查有效用例并观察发生了什么。
- 4.做一些快速测试。
- 5.总结对程序和问题的认识。
第二个测试周期:
- 1.仔细评审对问题报告的反馈,确定哪些值得深入测试
- 2.评审不予修复的问题的意见,可能建议进一步的测试。
- 3.找出上次的测试笔记,加入新笔记,并开始测试。
每个周期可能包含的内容:可测试的新版本、测试、报告问题(BUG)、反思总结等。
在每个周期中,我们测试的项目会面临时间非常紧张的情况,可能常常忘记自己在做什么,每天只是机械的打开禅道,根据以前编写的用例开始执行,但是已经忘记当初编写用例时对业务的不熟悉程度,已经不能适应当前系统的变化。
如何提高测试人员的工作效率往往就要取决于我们对软件和项目的理解程序,在每次测试之前,多问几个为什么?
- 了解业务目标是什么,通过什么方法可以实现业务目标,根据清晰的业务目标是制定测试方案。
- 理解用户的期望,抓住重点,要知道哪些功能绝对不能出错,需要仔细测试,哪些功能的优先级比较高,高效分配测试时间。
- 理解产品架构,阅读产品源代码,确定哪些模块容易出现缺陷,针对不同模块采用有针对性的测试策略。
- 其实最重要的就是回避浪费时间去做没有收益的任务。
- 理解产品元素和项目团队,出现缺陷通过阅读系统日志挖掘问题点,不懂找程序员或测试人员求助。
测试如果可以分方向,有很多种方向测试。比如需求测试、设计测试、过程测试、界面测试、功能测试、接口测试。
1、需求测试
对需求设计的正确性、合理性、实施性进行测试,尽早发现需求中的问题并跟进解决。
2、设计测试
测试人员的设计除了常规的测试计划、测试用例、测试准备等工作外,应包含对系统的设计。设计测试应注重检查系统设计的3个特性,必要性、正确性、最优性。
3、过程测试
(1)分层测试
分层测试强调的是测试的层次感。读者可能有过这种感觉,有层次感的面包比一般的面包口感更好。笔者所在的部门通过分层测试的思想将整个被测系统按照DATA层、API层、UI层进行分割,这样做的优势是什么呢?
测试提前介入是所有项目都提倡的,目的是把问题拦截在前期,降低问题修复成本。分层测试不依赖于完整系统,可以通过直接调用底层接口进行测试,这样就不需要等到整个系统开发完成才能测试。其实,分层测试的思想和自底向上的系统开发模式是不谋而合的;分层测试同时能够体现出精准:我们都知道,离问题产生的地方越近,就越容易触发问题。分层测试的切入点就是层与层之间的接口,从机制上更接近出问题的地方,因此也更容易命中目标,也能直接或间接地降低修复成本。 分层测试中的分层示意图如图1-4所示。
1)DATA层测试:数据层测试首先对数据库中原始数据及聚合数据的准确性进行验证,如精度、数量、存储有无丢失等,在保证这一层质量后进入下一层测试。
2)API层测试:首先需要强调,接口测试也是功能测试的一部分,通过接口调用验证服务器返回数据是否准确,服务端可能会将数据进行运算后返回,通过接口层验证保证数据传输的准确性,保证接口层通过后进入下一层测试。
3)UI层测试:通过覆盖系统所有逻辑路径保证数据展示层的正确。
(2)外部解耦
外部依赖有时是阻碍测试进度的一个主要原因,但是一个系统的运行往往离不开外部系统的依赖,如网络环境、消息依赖和数据依赖等。测试过程中如何降低系统间的耦合度是能否高效进行测试的关键。笔者所在部门通过MQ(Message Queue, 消息队列)消息自动发送组件模拟外部依赖消息,可以解决消息依赖,降低耦合度,该工具适用整个笔者所在部门的业务,如利用该工具模拟机票业务出退票消息,成功摆脱消息依赖,使测试效率及准确性大大提升。
(3)流程仿真
在系统测试过程中,往往有些极端情景或流程很难模拟,或者由于测试环境、数据量不足等原因导致无法进行模拟,但是这些情景或流程有时又非常重要,这就造成测试覆盖不全的情况发生。笔者所在部门通过穿线测试理论得到灵感,将流程主信息进行标记追踪,根据不同情况将流程引导至我们设定的极端情况中,覆盖极端情况,验证系统处理能力,很好地解决了这一难题。
4.界面测试
界面是电商网站与用户交互的最直接的层,界面的好坏决定用户对网站的第一印象。而设计良好的界面能够引导用户自己完成相应的操作,起到向导的作用。同时界面如同人的面孔,具有吸引用户的直接优势,设计合理的界面能给用户带来轻松愉悦的感受和成功的感觉,相反,设计失败的界面,让用户有挫败感,再实用强大的功能都可能在用户的畏惧与放弃中"付诸东流"。既然界面的好坏如此重要,那么在测试过程中界面的测试就变得不可或缺。在具体的工作中,界面的测试应该关注哪些点呢?界面测试如图1-5所示。
(1)导航测试
导航一般位于页面顶部或侧边区域。导航的作用是链接站点内的各个页面。导航测试可以从以下4个方面进行。
1) 导航是否直观?是否易于导航?
2) 导航、链接、页面的结构和风格是否一致?
3) 导航文字是否用词准确?意义表达是否简单和准确?
4) 链接的页面是否准确?
(2)图片测试
图片测试包含图片、动画、边框、颜色、字体、背景和按钮等。图片的测试可以从以下3个方面进行。
1) 需要保证图片有明确的用途,如广告宣传作用,不能存在没有意义的图片。
2) 所有页面中的字体和颜色及页面的设计格式要保持一致。
3) 图片的质量与大小也是需要关注的点。
(3)内容测试
内容测试是检验页面内提供的信息的准确性、正确性与相关性。内容测试可以从以下两个方面进行。
1) 要验证传输的信息是可靠的。
2) 要验证传输的信息语法和拼写是否正确。
(4)展示测试
展示正确性测试是检验页面上所有展示的内容是否正确,大小是否合适,是否符合普适的行为习惯。展示正确性测试可以从以下4个方面进行。
1) 验证提示语是否合理、正确。
2) 验证窗口调整大小后展示是否正确。
3) 验证本地化是否正确。
4) 验证标题、错别字检查。
(5)合理性测试
合理性测试可以从以下3个方面进行。
1) 验证页面布局是否合理。
2) 验证各控件是否合理、是否可编辑。
3) 验证提示页面是否合理。
5、执行正式测试
5.1 功能测试
Web系统功能测试:
A) 控件测试:对于单个逻辑功能,需关注其是否正确实现了需求定义的功能性需求,并需明确该需求是否确实应该在需求中体现。例如,登录功能,需关注其能否正确实现合法数据能够登录,而非法数据拒绝登录。
控件测试-编辑框:需考虑其默认焦点、输入长度、输入内容类型(字母、汉字、特殊符号、脚本代码等)、输入格式限制、能否粘贴输入、能否删除文本等因素。例如,“用户名”字段,测试时需考虑其用户名长度、组成、格式限制、是否重名等情况,测试用例设计时,可利用等价类、边界值方法详细设计。
控件测试-按钮:常规按钮提交请求或实现功能跳转,也可能使用图片或其他控件实现按钮功能。对于按钮而言,一般需考虑其默认焦点、按钮视图、按钮功能、脚本触发等方面。
HTML中的按钮有三种属性:Button[关注本身不具备数据提交传递功能,需绑定脚本]、Submit[关注的是自动提交数据信息]、Reset[关注光标是否位于第一个必填项,且功能实现]。
<input type="button" value="弹出窗口" onclick = " window.open(’/test.hmtl’','_blank')">
<input name="Submit" type="submit" value="" class="us_Submit_reg">
控件测试-图片:图片测试包括图片内容、大小、显示、Alt属性、链接等几个方面。
控件测试-音频[验证自动播放功能是否正常实现,音频文件是否正确,播放插件能否正常启用]、视频[视频除了测试播放控制、播放插件、链接安全性之外,还需考虑视频的压缩格式、数据缓冲情况]、下拉列表[关注其列表值是否正确,是否有重复,选中后能否正确传递、是否可以多选]
控件测试-单选按钮[关注单选按钮是否有默认设置以及选中后能否保存数据]、复选框[多选后能否实现期望的业务功能,如批量设置、批量删除,能否在提交请求时,触发应该触发的脚本代码]、Flash插件
B) 链接测试:被测对象包含很多链接,则可利用Xenu链接测试工具进行。
C) 缓存测试-Cookie:当用户访问一个Web系统后,服务器为了在下一次用户访问时,判断该用户是否为合法用户、是否需要重新登录,或者希望客户端记录某些数据信息时,可设计Cookie以某种具体的数据格式记录在客户端硬盘中。
通常情况下,Cookie可记录用户的登录状态,服务器可保留用户信息,在下一次访问时可显示该用户上一次访问时间,对于购物类网站,也可利用Cookie实现购物车功能。进行Cookie测试时需关注Cookie信息的正确性(服务器给出信息格式),当用户主动删除Cookie信息后,再次访问时,验证能否无须重新登录。电子商务类网站可添加商品信息后删除Cookie,刷新后查看购物车中的商品能否成功清除。
缓存测试-session:会话,在Web系统中表示一个访问者从发出第一个请求到最后离开服务,这个过程维持的通信对话时间。当然,Session除了表示时间外,还可能根据实际的应用范围包含用户信息和服务器信息。当某个用户访问Web系统时,服务器将在服务器端为该用户生成一个Session,并将相关数据记录在内存或文件中,某个周期后,如果用户未做任何操作,则服务器将释放该Session。为了识别每个用户会话,服务器生成Sessionid来标识。
从安全性角度考虑,用户使用软件系统进行业务操作时,除了需提供正确的帐号信息外,还可能需要提供正确的Sessionid,服务器将会对帐号及Sessionid进行验证。以QQ邮箱为例,用户登录成功后,服务器将会产生一个sid来保证该用户的安全性。
缓存测试-Cache:Web系统将用户或系统经常访问或使用的数据信息存放在客户端Cache(缓存)或服务器端Cache中,以此来提高响应速度。与Cookie和Session不同,Cache是服务器提供的响应数据,为了提高响应速度,存放在客户端或服务器端。用户发出请求后,首先根据请求的内容从本地读取,如果本地存在所需的数据,则直接加载,减轻服务器的压力,若本地不存在相关数据,则从服务器的Cache中查询,若还不存在,则进行进一步的请求响应操作。很多时候,服务器用Cache提高访问速度,优化系统性能。在Web系统前端性能测试时,需关注Cache对测试结果的影响。
D) 文件上传下载
测试时需考虑文件上传格式、上传内容、上传后能否正确打开、上传过程中如果出现异常是否有信息提示。对于文件下载则需考虑下载的文件能否正确打开使用、下载过程中能否中断、中断后可否续传、下载保存的文件名是否正确等。
如果上传完成后存在预览功能,测试工程师应当验证该预览是否实现,并且预览的图片是否清晰,软件系统如果对上传的图片进行压缩,测试工程师需保证压缩后的照片清晰可用
E) 表格测试:表格测试一般关注数据显示、翻页、附加功能等几个方面。
数据显示:主要涉及标题栏、数据内容、字符编码、列宽等几个方面。
F) 查询测试:考虑条件组合、结果显示两个方面。
条件组合:正交试验进行用例设计,然后再进行测试。
G) 测试经验库:主要分为功能设计、信息提示、系统交互、容错处理、数据边界等几个部分。
5.2 流程测试
流程测试:被测对象的各个功能通过业务流程贯穿起来运行,模拟真实用户实际的工作流程,从而验证流程的正确性。绝大多数的业务系统由用户管理、权限管理、工作流管理、基础数据维护四大核心组件构成。
流程测试通常分为三个步骤:流程需求分析、流程测试设计、流程测试执行。
5.3 安全测试
安全测试常见的测试关注点以目录设置、口令验证、授权验证、日志文件、Session与Cookie安全、异常操作、SQL注入等为主。
5.4 兼容测试
Web兼容性测试一般分为平台、分辨率、浏览器三个测试方向。
主流PC分辨率为1280*1024 、1366*768、1920*1080等,测试工程师进行PC分辨率测试时可参考此类数据。
分辨率测试是为了保证被测对象在不同分辨率的应用环境下,显示正常,不会出现显示错乱、菜单丢失等现象。
常见的浏览器兼容性缺陷一般有以下几种:
- Javascript无法执行,导致功能失效;
- 字体大小标准不一致,导致不同浏览器字体显示错误;
- 颜色标准不一致,导致不同浏览器颜色显示不一致;
- HTML标签不支持,导致显示错误;
- 格式控制不支持,导致图形显示位置错乱。
5.5 前端性能测试
Web系统前端性能通常关注页面容量、资源数量、传输压缩、本地缓存、请求数量等方面。
页面容量:页面设计规范,如“非首页静态页面含图片字节不超过60KB、全尺寸banner不超过14KB、竖边广告130×300 25KB”等。
5.6 接口测试
接口测试:测试系统组件间的交互,以验证接口间数据传递的正确性与性能是否符合用户需求的测试过程。根据交互类型不同,分为系统内部接口、系统外部接口等两个方面。
系统内部接口:即系统内部各个组件间的数据交互,如用户通过浏览器发送注册信息到服务器,服务器进行验证,以便完成注册过程,这就是一个典型的系统内部接口处理过程。
系统外部接口测试:主要包括第三方登录、支付、物流等方面。系统外部接口测试主要关注接口数据传递的正确性、性能及安全性。
6、软件测试基本功
结合笔者所在团队的实际情况,团队的目标是要能够快速反应,支持业务快速迭代,同时要把测试人员从繁重的重复工作中解放出来,为内外提供赋能,提供好的测试平台、好用的测试工具和高效的测试方法等,这就对测试人员提出了一些新的要求。
1.代码
具备编写代码能力能够提高测试效率,独立或者辅助开发人员定位问题,而不是只报告问题,这也有助于帮助测试人员了解程序过程,完善思维方式,提升测试形象。在测试过程中懂程序的人更能够深入地把程序测试好,通过走读代码发现逻辑上的缺陷、写法上的繁琐带来的性能问题等,达到事半功倍。系统与数据库打交道,程序部署在中间件上,中间件运行在操作系统上,即要懂数据库知识、中间件知识、操作系统知识、硬件知识等内容。
2. 需求
根本在于实现用户的业务需求,客户或者产品的需求变化引起的系统需求的频繁变更。首先应该确定计算机要做什么,需要达到什么样的效果。
3. 工具思维与工具开发能力-运维
具有工具思维可以帮助测试人员敏锐地发现可以节省人力的工作点,具备工具开发能力可以真正实现在繁重的重复工作中解放自己。 测试自动化是一个趋势,不仅包括功能测试自动化,也包括性能测试自动化及测试环境自动化(持续集成),掌握运维手段也很重要。
4. 持续的学习能力,学会思考
持续学习不仅仅是一种态度,更是一种能力。持续学习新的技术和新的思想,了解新的动态趋势等,能够帮助测试人员更好地适应变化,拥抱变化。学会思考这个话题很宽泛,包括规避风险、项目推进、问题解决等测试人员需要的很多其他认知的过程。但是,如果测试人员不能持续学习,那么他的思考也会被限制。只有持续学习,不断思考,才能知道在不可知的未来我们能够提供什么,价值该如何体现。
5. 强大的内心
测试工作是一个不断质疑与被质疑的过程。每天会面对很多繁重的工作,随时随地都可能被别人挑战,还有可能在工作中遭遇质疑及误解,想要将工作进行下去,强大的内心对测试人员来说极其重要。
6. 测试思维
测试思维决定了测试人员能在测试这条路上走多远。测试的核心技能不是测试理论,也不是测试工具,而是测试分析、测试设计、测试架构和测试规划等。"思维主导、技术辅助"一直是笔者所在团队提倡的。学会分析任务,分清优先级,具备统一规划能力,能够使工作达到事半功倍的效果。