1、软件测试经验分享,,1.上份工作的概述,我2012年毕业开始一直是从事测试工作, 对于测试的理解 就是保证产品的质量,按时交付产品。 上一份工作的主要内容是测试一个数据卡 和App 。上网卡它主要是一个usb dongle 。和我们的U 盘形状有点类似 如下图,使用USB作为总线接口,同时也设计有一个保护USB的专用盖帽。它有自动安装功能,将它插到电脑上会自动弹出一个安装的光盘,将软件安装好以后 就可以使用,它主要用在Windows 和Mac上面 。主要的功能就是 拨号上网、发短信、也有一些辅助的功能如 打电话、搜网、设置profile 、流量统计、在线升级、声音的设置等,1.上份工作的概述,
2、我们的app主要是用来控制我们的Y800 的,Y800如下图,Y800设备里插上sim卡然后通过转包转换成wifi 的形式 ,相当于一个移动wifi 设备。最多可以连接10个人。 App 的测试环境包括Android和ios(iPhone 和ipad),手机连上Y800,然后打开app 可以用来 拨号上网 、发短信、设置上网时间、设置使用流量、自动断开、流量提醒。,2.学到的东西-负责测试一个项目的流程,2.1开工 2.2测试组的会议 2.3写Test Plan 2.4写测试设计和测试用例 2.5启动测试 2.6写质量日报 2.7Test Report 2.8测试过程中需要注意的点,2.学到的
3、东西-负责测试一个项目的流程,2.1开工 首先是有软件项目经理组织会议讨论软件的需求 ,参与的人员有开发测试和scm, 需求讨论完成后分工指派开发负责人和测试负责人 ,并将具体的模块分给开发 。开发负责人评估开发时间,确定日期,测试负责人评估测试时间,确定日期。作为一名测试人员从这次会议里我们就知道了: (1)测试需求文档(开会前软件项目经理也会提前发给我们) (2)开发的参与人员,各自负责的模块,等到测试的时候碰到bug 可以直接找他们 (3)测试的时间 。,2.学到的东西-负责测试一个项目的流程,2.2测试组的会议 如果这个项目有我作为测试负责人 ,我就要在开工后及时的组织测试组的会议,比
4、如2013年12月1号开工,我们最好也当天开个会。主要是讨论下测试模块的分配,要在开发的这段时间内把测试用例写好。2.3写Test Plan 开完测试组的会议以后作为测试负责人 就要写个Test plan 的文档 ,文档的内容要包含 编写的目的、模块的分配、写测试设计的时间、 Pre-alpha 、alpha 、beta 版本的时间节点、测试资源的申请 (如数据卡、sim卡)、测试环境、各个版本的发版准则 等2.4写测试设计和测试用例 根据开会讨论后的分配 每个人负责自己的模块 ,要写一下测试设计 和测试用例。 然后发出来互相review,2.学到的东西-负责测试一个项目的流程,2.5启动测试
5、 当开发完成大部分功能以后 就要启动测试 开始daily build(每日构建)每日构建的标准就是这个软件能够安装 重要的功能已经实现。不会crash 可以跑起来。因为我们都是有时间点的 所以可以在测试的头一天把测试邮件给准备好,新的修改点加到项目管理系统里面(项目管理系统是我们添加项目管理项目和提bug的地方)2.6写质量日报 开始daily build 以后我们就开始测试了,作为测试负责人要在每天下班前发送质量日报 给相关的人。 质量日报的内容 主要是描述下现在有多少个P0、P1、P2 的bug ,一共的bug 、今天提交的bug 已经今天closed 和总共close bug 以及bug
6、 的趋势图,2.学到的东西-负责测试一个项目的流程,2.7Test Report 当一个项目完成了一个里程碑要发测试报告 ,比如说我们完成了alpha 版本的测试 就要在完成的那天发下测试报告,让大家知道这个进度,如果在发版本的前一天 还有一些P0 的bug 没有解决,要发邮件提醒开发 。测试报告主要 包括 软件的基本信息、修改点的验证。质量情况,是否满足发版标准、遗留的一些严重问题 和所有bug 的bug 列表。2.8测试过程中需要注意的点 作为测试负责人 要经常和开发和软件项目经理沟通,问一下项目进展的状况,有没有需求变更是自己不知道的,测试的时候碰到一些不概率性的网问题最好保留现场 把开
7、发叫过来看看。发邮件的时候要注意检查下写的内容是否正确 尤其是日期。,3.学到的东西-测试设计和测试用例的编写,软件测试中最重要的因素是设计和生成有效的测试用例。无论软件测试进行的如何具有创造性、如何完全,也不能保证软件中不存在任何错误在测试的过程中我们依赖的就是我们的测试设计和测试用例了。在写测试用例的时候我们一定要看需求文档 ,根据需求来写测试用例,由于测试时间的限制我们就要提高测试的效率,可以使用一些有价值的测试方法如 等价类划分、边界值。错误推断等。我们当时写测试用例相对简单些 ,dashboard产品是我们部门一直在做的,所以可以参考以前的一些case ,然后优化下。当我们在测试过程
8、中碰到一些新的问题市可以写把这些case 加到 我们的测试用例里面 ,app对于我们起步较晚是从2013年8月左右开始做的,不过功能和dashboard有类似的地方,我们就参考以前的测试用例还有上网搜集些资料 ,如去百度文库 和51testing 网站去看下,还有就是互相找些资料分享下去写测试设计 和case。 在我的工作中90%的是黑盒测试,10%的是白盒测试。对于黑盒测试,黑盒测试不需要去关注软件的整体架构及其编码细则,只需要通过构造一些合理的输入(操作),来观察软件的实际结果或现象(输出),从而判定是否存在问题,需求文档是黑盒测试的主要依据。在测试中主要用到的测试方法有 等价类划分、边界
9、值分析、因果图分析、错误测试。对于等价类划分设计测试用例主要有两 个步骤:(1)确定等价类 (2)生成测试用例。 举个例子,一条中文短信可输入67个字 ,那么它的有效等价类就是 167 ,其中1和67就是边界值。当我们测试的时候 1和67之间的数字都是等价的,我们可以挑一个测试就可以了。对于边界值我们要测下1 和67 ,还要测试下无效的等价类,看看有没有对他们做限制 。,3.学到的东西-测试设计和测试用例的编写,因果图是一种形式语音,用自然语言描述的规格说明可以转换为因果图。因果图实际上是一种数字逻辑电路,确定其中的因果关系。举个例子 ,比如我选择2g manual 搜网,注册成功后界面上就应
10、该显示2g ,显示3g就是错的。 还有 比如说我pin码上锁了,这个时候去发短信就应该是失败的,如果还能发送成功就是错误的。 错误猜测主要是一项依赖 于直觉的非正规的过程,其基本思想是列举可能犯得错误或错误易发情况。比如我们测试dashboard的版本时 ,有好几个版本都在mac电脑上都会出现安装后卸载再次安装失败的情况,还有app测试的时候set monthly data plan 不生效 ,或者是发短信短信列表在ios上初始化不出来等问题。对于白盒测试 我主要是测试Y800的硬件,我们对于Y800的测试是用黑盒和白盒相结合的测试方法来测的。一开始我们的app 没有做好就先用python脚本
11、对它测试。测试的时候是在mac电脑上 ,通过wifi 连接Y800,将写好的脚本放到测试框架里面跑。跑完以后结果可以直接在框架里面看到。测试的目的是看看那些API 接口有没有实现。这些API 接口是开发定义的 ,是xml格式的 。一个api 接口是由request 和response 两部分组成的。里面有一些参数,response 里面会有一个判断返回是否正确的参数 errorcode.对于一些简单的case 我们可以直接看errorcode的值来判断case是否跑成功,如果errorcode=0则成功,若等于其它值就失败。我主要负责的是短信模块、较量值以及电池的状态,短信的接口有获得短信列表
12、、发送短信、获得短信发送的状态。短信列表里面短信的状态、删除短信、短信的条数、未读短信的条数。,3.学到的东西-测试设计和测试用例的编写,测试的时候我们一般是有预设条件的,就是说我们知道自己的期望结果,然后如果跑出来的和期望结果不一致 就说明错啦。接口和接口之间还有联系的我们可以在一个case里面调用其它case里面的方法 。只要写的时候按照框架的规范来就行。比如说我要删除短信,就首先要获得短信的列表然后再去删除。 在测试获得短信的发送状态的时候也是,发送的状态收sending、failed、success ,我们就要先调用发短信的接口如下:对于测试电池电量就要注意它的状态是否正确。总的来说白
13、盒测试也是按照我们的测试用例来写case 把他们变成python语音,去实现 用到的方法也是有等价类划分、边界值、压力测试。我觉得白盒测试做压力测试很好做,但是它测试的比较单一,一般都是一个模块一个模块的测试,有些交叉测试的写起来就比较复杂。UI上面的问题也测试不到。,4.学到的东西-系统测试概述,4.1功能测试 4.2健壮性测试 4.3矩阵测试 4.4UI测试 4.5兼容性测试(IOT) 4.6性能测试 4.7临界测试 4.8可靠性测试,4.学到的东西-系统测试概述,4.1功能测试 这是软件测试工作中最核心和最基本的一项测试,该测试的主要内容是检查软件是否符合需求定义,并通过构造正常的操作来
14、检查软件的动作是否正确;在这个测试里,正确性是最最重要的软件质量要素。 软件功能按照可见性可以分为两类:显性功能和隐性功能。隐性功能就好像是地下党员,你在共产党员的花名册里永远找不到他们的名字。 显性功能:指在菜单里可以看得到的功能 隐性功能:指在菜单里看不到的功能 举个例子,电话本的显性功能有增加、编辑、删除、拨打等,这些功能可以在电话本的菜单里面看得到,姓名列表排序则属于一个隐性功能,因为在电话本的菜单里没有这样一个子菜单,但它却是一个实实在在的功能 在实际的测试过程中,显性功能通过菜单遍历可以很容易地进行无遗漏的测试,但是隐性功能却很容易为我们所忽略!一个有效的解决办法是去检查软件的功能
15、定义列表(Feature List),从这个列表里面找出那些隐性的功能。,4.学到的东西-系统测试概述,4.2健壮性测试 这项测试主要是检查软件对异常操作的容错能力,异常操作通常要考虑异常输入操作及异常条件两个方面 小时候看电影发现,日本鬼子往往一枪就over了,八路军打一枪顶多流几滴血,仍然能够冲锋陷阵,这说明八路军的健壮性比日本鬼子的健壮性要强 软件的很多功能的实现是有很多隐含的条件的,在健壮性测试中,要检查当这些条件不满足的时候软件的反应 我们举一个SMS的例子,当我们将一个3000条短信的文件放到数据卡里面然后重启dashboard crash。 橘生淮南为之橘,橘生淮北为之枳,这说明
16、橘的健壮性太差,4.学到的东西-系统测试概述,4.3矩阵测试矩阵测试是使软件处于一个特定的状态,然后构造一个异步事件,检查当这个异步事件发生时软件的性能 根据事件的来源,异步事件可以分为外部事件和内部事件 外部事件举例:SMS到达、来电呼入、非关机状态拔电池等 内部事件举例:低电告警、自动关机等,4.学到的东西-系统测试概述,4.4UI测试 这里主要测试软件的易用性、用户界面的友好性及美学性。 UI测试遵循的原则: 求美原则,检查在UI的布局里,各种要素是否能传达一种美感,布局是否合理,色彩是否合谐,”科技美学化“不是一句挂在墙上印在纸上的口号,而应该成为实实在在的行动 正确性原则 一致性原则
17、,同样的一个功能的UI在不同的情景(scenario)所呈现的方式应该保持一致 普遍性原则,4.学到的东西-系统测试概述,4.5兼容性测试(IOT) 测试dashboard对不同地区SIM卡的兼容能力,这部分尤其在STK中表现的很突出,我们经常可以发现一些异地的SIM卡中的STK菜单中会有乱码,这就是兼容性不好造成的 测试dashboard 在不同的操作系统上是否都可以正常的使用,4.学到的东西-系统测试概述,4.6性能测试 性能测试从负荷及容量两个方面考虑,有些教材把这个测试叫做压力测试,内容是一样的,换汤不换药 考察Y800在高负荷状态下的运行情况。所谓高负荷,就是多个功能快同时在运行,使
18、CPU资源高负荷地运转。 考察Y800在满容量状态下的运行情况。在测试前,应设法使内存全部存满,然后在进行一些相应的操作,观察Y800的性能情况。4.7临界测试 所谓临界测试,就是指数据在保存、删除、传送、发送时或者这些动作即将发生时,考察软件对外部干扰事件的处理情况。 例如,在即将删除一条短信息时收到一条新信息,但删除的却不是刚刚选定的那条信息,而是刚刚收到的这条新信息!,4.学到的东西-系统测试概述,4.8可靠性测试 可靠性是指在一定的环境下、在给定的时间里,软件不发生故障的概率。 可靠性本来是硬件领域的术语,比如某个电子设备在刚开始工作时挺好的,但由于器件在工作中其物理性质会发生变化(如
19、发热),慢慢地系统的功能或性能就会失常。 软件在运行过程中不会发生象硬件那样的物理变化,但是并不代表软件现在运行是正确的,那它一辈子运行也是正确的,说不定哪一天它就不正常了。很多小朋友在小的时候是个好孩子,但并不代表他老了还是个好爷爷,“小学宝贝蛋,中学靠边站,大学吃鸭蛋”,这样的情况也不时不可能!软件中司空见惯的“内存泄漏”与”误差积累“等问题不是一时办会儿就能测试出来的,需要一个较长时间的观察。 时隐时现的问题一般都属于可靠性问题,纠错的成本非常高。当工程师十万火急地感到问题现场时,问题消失了;等工程师离开后,问题又出现了,仿佛敌进我退一般! 内部人员试用是执行可靠性测试的有用的方法,但一
20、定要管理好,否则试用就变成滥用了。,5.专项测试,有时候由于工作的需要我们也会进行专项测试,记得我在工作中负责的专项测试有 电池电流的测试和软件在线升级的测试。 当时电池电流的测试目的:一是测我们的第二代Y800和第一代y800电池的差距的。二是看看app会不会对Y800的电池增加负荷 ,三是去看看Y800在不同情况下它的待机时间有多久 。这个为了精准的测试,我们领导帮我们联系了实验室。使用仪器测试了下。这次我们遇到的一个问题是上网的时候新旧Y800的待机时间差特别多,主要是我们测的的方法有问题,后来我们采取同时开始然后观看同一段视频的方法测试,解决了问题。 在线升级的专项测试是由于我们的fo
21、ta 服务器进行了更新,所以测试下对我们软件的在线升级有没有影响,改善后的服务器是不是更好用,下载的速度有没有得到提高等。测试的时候主要是测试的环境我们要把所有有的mac系统和windows系统都跑下 ,mac系统要测10.5-10.9 。window 要测试 win7、win8 、winxp。除了这两个我们还进行了 samba client 和dlna 的专项测试,这两个主要测试上传下载文件 能否正常访问等等。,6.测试工具的使用,我们主要使用的测试工具有TPST、QPST、QXDM、Armlog、Research Download、Switchtools、Sublime text. TPS
22、T、QPST :这两个主要是用来烧录版本的,TPST 可以用来烧录.img格式的版本,qpst 可以烧录.bhd 文件文件的版本 。QPST 还可以配合QXDM抓log QXDM :主要是用来抓Firmwarfe log 的。如果该问题不是软件的问题而是硬件的问题就要使用QXDM来抓log。 Armlog、Research Do wnload:Armlog 类似于qxdm ,Research Download类似于tpst ,区别是平台不一样。Armlog、Research Do wnload用于展讯平台,TPST、QPST、QXDM用于高通平台。Switchtools:切换工具。用来切换端口
23、,烧录的时候要用它来切换端口。 Sublime text: 自动化的时候会用到。将框架放到sublime text 里面然后跑case。,7.兼职软件项目管理,2013年11月份左右由于项目过多,软件项目经理忙不过来,就从部门里面选人兼职软件项目管理方面的工作,领导给了我一次机会,我觉得算是一种换位,让我们可以站在不同的位置考虑问题这个很重要。我负责的是其中一个dashboard项目,主要工作就是要和深圳的同事还有我们海外的客户一起沟通交流项目需求、工作进度、和深圳的配合。硬件和产品定义是深圳做的,我们负责软件 ,然后组合起来卖给客户。从这份工作中我也学到了很多东西。 (1)不要把问题bloc
24、k 到自己这里。有时候项目会不往前走 原因会有很多 有可能是客户不着急 、需求变更、产品定义那边没有给出proposal 、软件开发进度慢、测试资源不够等等。如果原因是出在自己这边就一定要及时解决。如果是出.于自己能力范围的话可以和直接领导反应说明情况,让大家知道 。 (2)要常和深圳的同事沟通。首先弄清楚核心成员,不要到项目都快结束了还不知道有问题要找谁 ,要知道各个方面的负责人,如要是缺少user manual 就要找PDM,如果是硬件有问题就要找FW SPM ,不知道的话可以问PM .经常和PM沟通看看客户那边有没有新的动态,多问问多听听PM的意见,他们的经验比较丰富 ,PM是整个项目的
25、负责人。 (3)要始终记得我们是一个团队的。有时候大家会有些分歧,或者有的环节做事做到不够好,他们可能项目很多,根本不会特别在意你这个项目,这个是时候就要积极主动的去催。,7.兼职软件项目管理,不管怎么说大家的目标是一样的,都希望做成这个项目,按时交付给客户。可是要记得你自己手里就这一个所以就要更努力。 (4)及时反馈客户的问题。在项目中经会遇到需求变更,这个时候就要重新制定计划,而且要把这些变化告诉开发和测试人员,重新讨论出一个时间点把产品交付给客户。 (5)注意时间的安排。在给客户时间的时候如果客户没有说deadline ,那就说明不是很着急,可以给自己多留一个到两个星期的时间,以免会有特
26、殊的事情发生 (6)多问。 第一次负责项目其实有很多不懂的地方,不过由于地理位置优越,我后面就是软件测试项目经理,当时大家也很熟悉了,已经一起工作一年多了吧所以很多不懂的地方他给了我很多的帮助。 (7)团结同事。当时做这个项目的时候我们都很熟悉了,大家平时的关系就很好。所以交流下来也很融洽,有质疑的地方都会及时的和我说,我也会把开发的疑惑反馈给客户,因为有些我也不懂。嘿嘿。 (8)总结 最后我们这个项目在今年3月底顺利完成交付给客户,那段时间有时候晚上都睡不好,总是在想一些问题和第二天要做的事情,人都有点神经质了,不过还好最好的结果是好的 。,8.软件测试的心得,我觉得做软件测试很多的方法都是
27、相通的,剩下的就是做事的方式和一个人的态度。 (1)要有正确的态度,服从领导的安排。当你开始测试的时候就想着肯定没问题,这个态度就是错的,应该想这个软件肯定有好多bug等着我们提的。当领导分配我们任务的时候,他们肯定是考虑过的,有他们的想法才让你去做,所以对于我而言就是配合按时把任务完成。 (2)团队合作。我们是一个team ,如果大家一起努力 效果肯定比一个人单枪匹马的效果要好,我和坐我对面的同事经常一起合作完成任务,他比我早来公司一年很多地方也比我知道的多,给了我很多的帮助。我们可以经常交流下自己测的的模块,大家也会互相的帮助。 (3)积极主动。我们的测试项目会蛮多的 ,所以每个人都要负责
28、几个项目,当你手里的项目比较少的时候可以积极的去要一些新的项目,还有当在测试的时候有些不懂的需求点要要问清楚,不能不懂装懂。 (4)善于总结。在工作中多多少少都会碰到一些那你以前没有遇到过的情况,如测试的过程中发现的新的case ,当我们无法直接测试某个场景时要更改配置文件,更改的方法,如何在mac上抓log ,如何烧录firmware ,如何通过工具写填充和联系人,如何开启或导出app log 等等。,8.软件测试的心得,这些我们都可以记录下,还有当一个项目完成了以后,也可以写写总结,人的记忆力有限的,可以在文档里记录下测试的时候用的哪一种数据卡,测试的过程中的测试用例的集合起来。测试中发现
29、的新的问题,深圳那边的测试反馈的问题,测试中遇到的困难。 (5)善于回头检查,回顾知识点。这是我的缺点。我喜欢记录自己遇到的问题也写了很多文档,可是写完了以后 就几乎不会看了。而且写的比较凌乱,一个项目分了好多文档没有去归纳整理。 (6)把自己清空,重新开始。我认识一个做ui 设计的同事,有次吃饭的时候他告诉我们要去台湾旅游把自己放空下。我觉得大概的意思就是说当我们工作了半年左右可以去旅行一次,然后放空自己 ,要有一种归零的心态。 (7)学习新的知识点 。这个也是我的缺点。现在的科技很发达,每天都有很多的新的知识,所以我们也要充实自己,一周或一个月最好能看一本数,还有多去测试论坛看看,我们之前
30、的组长有荐我们去51testing 论坛 。我还看到我的一个做开发的同事有去听一些讲座。好像是ios 开发者大会吧 ,这些都是值得我学习的地方。 (8)善于分享。比如测试时候你掌握了一种新的方法可是未必我们组的人都知道了。这个时候就可以分享下,我觉得我们组长对我有很大的影响,她经常会分享一些测试相关的文档给我们。,8.软件测试的心得,(9)不要和开发争吵。测试的目的是发现问题,所以测试是破坏性的,而开发是建设性的,就好像开发人员在砌墙,测试人员在推墙一样,测试和开发在这一点上是对立的,开发人员总是愿意欣赏软件的成功之处,不愿意看到他的失败之处。所以有的时候就会为了一个bug 产生分歧,但是争吵是解决不理问题的。我在测试的时候有时候也会和开发因为一个问题闹矛盾 ,不过这个只是浪费时间不会解决问题。测试和开发的最终目标都是为了高质量的产品,从这一点来讲,测试和开发又是统一的。,