发布新日志

  • 登录测试用例

    jh_soft 发布于 2013-03-19 16:18:06

    统将给出正确的示信息;
    前置条件:存在正确的用户名和密码;
    登录页面正常装载;
    用例设计:
    一.界面测试
    测试用例        用例目的:该用例用来测试在登录界面用户能否正常登录;

    若出现错误的信息系统将给出正确的示信息;
    前置条件:存在正确的用户名和密码;
    登录页面正常装载;
    用例设计:
    一.界面测试
    界面正常装载后,检视页面是否符合规范       

    1.页面title是否正确;
    2.页面的默认焦点是否控制在用户名输入框中;
    3.TAB键能否控制;
    4.未登录状态下,页面的其他按钮(非登陆/取消按钮)不可选或选择无效

    5. 取消按键不可用;

     

    二.登录测试
    输入正确的用户名和正确的密码
    用户名:mm
    密 码:mm
    鼠标点击登录        正常登陆,转入对应的系统页面

    用户名:mm
    密 码:mm
    直接回车键(Enter)进行登陆        正常登陆,转入对应的系统页面

    输入正确的用户名和正确的密码,但未区分大小写
    用户名:Mm
    密码:Mm
    区分大小写,显示出错信息,不能正常登陆


    输入正确的用户名和错误的密码
    用户名:mm
    密  码:dw54f

    出现密码错误的提示并清空输入框
    用户名:mm
    密  码:¥§£(即在密码中输入特殊符号)
    提示密码中存在特殊符号或者在输入特殊符号时系统自动消除/不能输入


    输入错误的用户名和正确的密码
    用户名:jiew11
    密  码:mm
    出现用户名不存在或错误的提示并清空输入框
    用户名:jie¥§(在用户名中输入特殊符号)
    密  码:mm       

    提示用户名中存在特殊符号或者在输入特殊符号时系统自动消除/不能输入


    输入错误的用户名和错误的密码
    用户名:jiew11
    密  码:dw54f
    出现用户名不存在或密码错误的提示并清空输入框

    不输入用户名和密码/或均为空格,直接点击登录       

    用户名:
    密  码:       

    出现“请输入用户名、密码”的提示框

    只输入用户名,密码为空/或为空格       

    用户名:mm
    密  码:       

    出现“请输入密码”提示框
    用户名为空/或为空格,只输入密码       

    用户名:
    密  码:mm        出现“请输入用户名”提示框

    三.异常测试
    输入用户名或密码;点击取消;       

    用户名:jiew11
    密  码:dw54f

    清空输入框


    四.备注说明
    1.在登录WEB页面也可以进行变态性的测试,比如不停的点击登录按扭,或多个人同时登录(可用loadrunner进行压力模拟)
    2.现在的一般登录页面都会有验证码,同样的可以和上面类似的设计测试用例,但是由于在安全性上影响不大,故不在详说。(验证码测试用例举例:大小写,空值,错误输入等等)
    3.登录的安全性测试:
    a) 是否可以不登陆而直接浏览某个页面等。
    b) Web应用系统是否有超时的限制,也就是说,用户登陆后在一定时间内(例如15分钟)没有点击任何页面,是否需要重新登陆才能正常使用。
    c) 为了保证Web应用系统的安全性,日志文件是至关重要的。需要测试相关信息是否写进了日志文件、是否可追踪,以防止被黑客截取。
    d)  当使用了安全套接字时,还要测试加密是否正确,检查信息的完整性。
    e)  服务器端的脚本常常构成安全漏洞,这些漏洞又常常被黑客利用。所以,还要测试没有经过授权,就不能在服务器端放置和编辑脚本的问题。
    f)  有的在线登录系统会有“找回密码”,这样我们在测试是就一定要注意找回密码的条件(找回密码条件安全级应等同于或高于密码安全级)和此时的网络安全性。
    4. 登录在易用性上要求也是较高的,以次我们也可以参照用户的观点以及安全性上考虑给出一个标准:
    a)  界面的美观程度
    b)  按扭的设置和排列
    c)  输入提示的人性化考虑
    d)  错误提示的准确性
    e)  验证码的清晰度和复杂程度
    进一步的信息        关于自动化测试工具在登录性能测试上的缺陷及解决办法
    现在越来越多的网站为了安全性或是防止Spam的侵害,采用了验证码的校验技术。简单地说,验证码就是在进行登录或是内容提交的时候,页面上会随机出现一个人工可识别,但机器不可识别的验证字符串(一般是采用背景、扭曲等方式产生的图片),要求登录或是提交内容时同时输入这个验证码。
    验证码可以有效防止对口令的刺探和所谓的网络推广软件带来的大量的Spam内容,目前已经被许多Internet或是Intranet应用接受为标准的实现方式。但对性能测试来说,这种验证码又带来了很大的问题。
    最突出的问题是,性能测试工具本身是自动化工具,由于这种验证码采用的是“防止自动化工具尝试”的方法,因此,在录制了脚本之后会发现,很难对脚本进行调整,以使其适应验证码验证的需要。对这个问题,我个人的看法是,基本上可以考虑从三个途径来解决该问题:
    1、第一种方法,也是最容易想到的,在被测系统中暂时屏蔽验证功能,也就是说,临时修改应用,无论用户输入的是什么验证码,都认为是正确的。这种方法最容易实现,对测试结果也不会有太大的影响(当然,这种方式去掉了“验证验证码”这个环节,不过这个环节本来就很难成为系统性能瓶颈)。但这种方法有一个致命的问题:如果被测系统是一个实际已上线的系统,屏蔽验证功能会对已经在运行的业务造成非常大的安全性的风险,因此,对于已上线的系统来说,用这种方式就不合适了;
    2、第二种方法,在第一种方法的基础上稍微进行一些改进。第一种方法带来了很大的安全性问题,那么我们可以考虑,不取消验证,但在其中留一个后门,我们设定一个所谓的“万能验证码”,只要用户输入这个“万能验证码”,我们就验证通过,否则,还是按照原先的验证方式进行验证。这种方式仍然存在安全性的问题,但由于我们可以通过管理手段将“万能验证码”控制在一个小的范围内,而且只在性能测试期间保留这个小小的后门,相对第一种方法来说,在安全性方面已经有较大的改进了;
    3、如果安全性对应用来说真的是至关重要的,不容许有一丝一毫的闪失,那我们还可以用更进一步的方法来处理这个问题。一般的性能测试工具(loadrunner等)都能够调用外部的组件接口,因此,可以考虑获得“验证码验证”部分的实现,写一个验证码获取的代码,在测试脚本中进行调用即可。
    在我看来,第二种方法用得比较多,对未上线系统系统的内部性能测试,有时候也用第一种方法。但要提醒的是,如果针对的是已上线系统,无论用哪种方法,测试完成后,都必须立刻将应用恢复,并对系统进行一次安全审计,以免在测试期间被他人入侵。第三种方法用得比较少,而且具体上还依赖于验证组件是否能提供这样的接口,以及获取验证码开发的难度。

     

    补充汇总:
    功能测试:(这个肯定要先说的咯)
    1.正确的用户名和密码登陆
    2.错误的用户名错误的密码、正确的用户名错误的密码、错误的用户明错误的密码,弹出相应的提示信息
    3.提示信息是否正确,比如我密码错了提示无此用户...那就瞎了~
    4.页面跳转的测试,人家输错了直接关闭就不好了~或者人家输对了自动跳转到相应页面(是相应页面不是单纯的跳到主页呦~)
    5.多用户同账号登陆的情况...嘿嘿~没多少人想到吧...至于是否允许,那要看需求了~
    6.账号和密码位数的检查,强制输入超过规定长度的字符,比如利用复制粘贴等
    7.就像51testing论坛~我以为登陆账号和昵称是两码事呢~结果在这里昵称只能用账号...
    8.出现各种情况再次进行登陆,比如用户关闭网页,有的系统点x关闭浏览器和点击系统提供的登出是不一样地~再用户进行ie清理,看看会出现啥状况?3楼的竟然想到断电...用得着么?
    9.cookie或者其他技术保留登陆信息的时间检查,别人家选择保留1个月,结果1周就没了...

    界面测试:
    1.账号和密码的字符检查,是否允许双字节?这就涉及到本地化测试了~
    2.各控件的布局是否整齐,控件的大小是否合适,文字字体大小格式颜色是否美观等等...
    3.提示信息是否友好美观,总不能带脏字吧...

    性能测试:
    1.无非就是响应时间,页面显示时间,资源的占用...要像迅雷那样页面显示半天,资源又占那么多~不说了~郁闷~

    安全性:
    1.cookie的安全性检查
    2.错误次数的控制(像工行的网银3次密码不对当天就进不去了...哼)
    3.密码的安全性,是否用*号隐蔽或者别的类似的隐蔽方式,并且考虑密码被盗去的可能性,比如在注册的时候我们就对其密码进行强中弱鉴定~并提示用户...
    界面正常装载后,检视页面是否符合规范       

    1.页面title是否正确;
    2.页面的默认焦点是否控制在用户名输入框中;
    3.TAB键能否控制;
    4.未登录状态下,页面的其他按钮(非登陆/取消按钮)不可选或选择无效

    5. 取消按键不可用;

     

    二.登录测试
    输入正确的用户名和正确的密码
    用户名:mm
    密 码:mm
    鼠标点击登录        正常登陆,转入对应的系统页面

    用户名:mm
    密 码:mm
    直接回车键(Enter)进行登陆        正常登陆,转入对应的系统页面

    输入正确的用户名和正确的密码,但未区分大小写
    用户名:Mm
    密码:Mm
    区分大小写,显示出错信息,不能正常登陆


    输入正确的用户名和错误的密码
    用户名:mm
    密  码:dw54f

    出现密码错误的提示并清空输入框
    用户名:mm
    密  码:¥§£(即在密码中输入特殊符号)
    提示密码中存在特殊符号或者在输入特殊符号时系统自动消除/不能输入


    输入错误的用户名和正确的密码
    用户名:jiew11
    密  码:mm
    出现用户名不存在或错误的提示并清空输入框
    用户名:jie¥§(在用户名中输入特殊符号)
    密  码:mm       

    提示用户名中存在特殊符号或者在输入特殊符号时系统自动消除/不能输入


    输入错误的用户名和错误的密码
    用户名:jiew11
    密  码:dw54f
    出现用户名不存在或密码错误的提示并清空输入框

    不输入用户名和密码/或均为空格,直接点击登录       

    用户名:
    密  码:       

    出现“请输入用户名、密码”的提示框

    只输入用户名,密码为空/或为空格       

    用户名:mm
    密  码:       

    出现“请输入密码”提示框
    用户名为空/或为空格,只输入密码       

    用户名:
    密  码:mm        出现“请输入用户名”提示框

    三.异常测试
    输入用户名或密码;点击取消;       

    用户名:jiew11
    密  码:dw54f

    清空输入框


    四.备注说明
    1.在登录WEB页面也可以进行变态性的测试,比如不停的点击登录按扭,或多个人同时登录(可用loadrunner进行压力模拟)
    2.现在的一般登录页面都会有验证码,同样的可以和上面类似的设计测试用例,但是由于在安全性上影响不大,故不在详说。(验证码测试用例举例:大小写,空值,错误输入等等)
    3.登录的安全性测试:
    a) 是否可以不登陆而直接浏览某个页面等。
    b) Web应用系统是否有超时的限制,也就是说,用户登陆后在一定时间内(例如15分钟)没有点击任何页面,是否需要重新登陆才能正常使用。
    c) 为了保证Web应用系统的安全性,日志文件是至关重要的。需要测试相关信息是否写进了日志文件、是否可追踪,以防止被黑客截取。
    d)  当使用了安全套接字时,还要测试加密是否正确,检查信息的完整性。
    e)  服务器端的脚本常常构成安全漏洞,这些漏洞又常常被黑客利用。所以,还要测试没有经过授权,就不能在服务器端放置和编辑脚本的问题。
    f)  有的在线登录系统会有“找回密码”,这样我们在测试是就一定要注意找回密码的条件(找回密码条件安全级应等同于或高于密码安全级)和此时的网络安全性。
    4. 登录在易用性上要求也是较高的,以次我们也可以参照用户的观点以及安全性上考虑给出一个标准:
    a)  界面的美观程度
    b)  按扭的设置和排列
    c)  输入提示的人性化考虑
    d)  错误提示的准确性
    e)  验证码的清晰度和复杂程度
    进一步的信息        关于自动化测试工具在登录性能测试上的缺陷及解决办法
    现在越来越多的网站为了安全性或是防止Spam的侵害,采用了验证码的校验技术。简单地说,验证码就是在进行登录或是内容提交的时候,页面上会随机出现一个人工可识别,但机器不可识别的验证字符串(一般是采用背景、扭曲等方式产生的图片),要求登录或是提交内容时同时输入这个验证码。
    验证码可以有效防止对口令的刺探和所谓的网络推广软件带来的大量的Spam内容,目前已经被许多Internet或是Intranet应用接受为标准的实现方式。但对性能测试来说,这种验证码又带来了很大的问题。
    最突出的问题是,性能测试工具本身是自动化工具,由于这种验证码采用的是“防止自动化工具尝试”的方法,因此,在录制了脚本之后会发现,很难对脚本进行调整,以使其适应验证码验证的需要。对这个问题,我个人的看法是,基本上可以考虑从三个途径来解决该问题:
    1、第一种方法,也是最容易想到的,在被测系统中暂时屏蔽验证功能,也就是说,临时修改应用,无论用户输入的是什么验证码,都认为是正确的。这种方法最容易实现,对测试结果也不会有太大的影响(当然,这种方式去掉了“验证验证码”这个环节,不过这个环节本来就很难成为系统性能瓶颈)。但这种方法有一个致命的问题:如果被测系统是一个实际已上线的系统,屏蔽验证功能会对已经在运行的业务造成非常大的安全性的风险,因此,对于已上线的系统来说,用这种方式就不合适了;
    2、第二种方法,在第一种方法的基础上稍微进行一些改进。第一种方法带来了很大的安全性问题,那么我们可以考虑,不取消验证,但在其中留一个后门,我们设定一个所谓的“万能验证码”,只要用户输入这个“万能验证码”,我们就验证通过,否则,还是按照原先的验证方式进行验证。这种方式仍然存在安全性的问题,但由于我们可以通过管理手段将“万能验证码”控制在一个小的范围内,而且只在性能测试期间保留这个小小的后门,相对第一种方法来说,在安全性方面已经有较大的改进了;
    3、如果安全性对应用来说真的是至关重要的,不容许有一丝一毫的闪失,那我们还可以用更进一步的方法来处理这个问题。一般的性能测试工具(loadrunner等)都能够调用外部的组件接口,因此,可以考虑获得“验证码验证”部分的实现,写一个验证码获取的代码,在测试脚本中进行调用即可。
    在我看来,第二种方法用得比较多,对未上线系统系统的内部性能测试,有时候也用第一种方法。但要提醒的是,如果针对的是已上线系统,无论用哪种方法,测试完成后,都必须立刻将应用恢复,并对系统进行一次安全审计,以免在测试期间被他人入侵。第三种方法用得比较少,而且具体上还依赖于验证组件是否能提供这样的接口,以及获取验证码开发的难度。

     

    补充汇总:
    功能测试:(这个肯定要先说的咯)
    1.正确的用户名和密码登陆
    2.错误的用户名错误的密码、正确的用户名错误的密码、错误的用户明错误的密码,弹出相应的提示信息
    3.提示信息是否正确,比如我密码错了提示无此用户...那就瞎了~
    4.页面跳转的测试,人家输错了直接关闭就不好了~或者人家输对了自动跳转到相应页面(是相应页面不是单纯的跳到主页呦~)
    5.多用户同账号登陆的情况...嘿嘿~没多少人想到吧...至于是否允许,那要看需求了~
    6.账号和密码位数的检查,强制输入超过规定长度的字符,比如利用复制粘贴等
    7.就像51testing论坛~我以为登陆账号和昵称是两码事呢~结果在这里昵称只能用账号...
    8.出现各种情况再次进行登陆,比如用户关闭网页,有的系统点x关闭浏览器和点击系统提供的登出是不一样地~再用户进行ie清理,看看会出现啥状况?3楼的竟然想到断电...用得着么?
    9.cookie或者其他技术保留登陆信息的时间检查,别人家选择保留1个月,结果1周就没了...

    界面测试:
    1.账号和密码的字符检查,是否允许双字节?这就涉及到本地化测试了~
    2.各控件的布局是否整齐,控件的大小是否合适,文字字体大小格式颜色是否美观等等...
    3.提示信息是否友好美观,总不能带脏字吧...

    性能测试:
    1.无非就是响应时间,页面显示时间,资源的占用...要像迅雷那样页面显示半天,资源又占那么多~不说了~郁闷~

    安全性:
    1.cookie的安全性检查
    2.错误次数的控制(像工行的网银3次密码不对当天就进不去了...哼)
    3.密码的安全性,是否用*号隐蔽或者别的类似的隐蔽方式,并且考虑密码被盗去的可能性,比如在注册的时候我们就对其密码进行强中弱鉴定~并提示用户...
  • WEB测试之网页测试

    黑鱼白 发布于 2013-03-12 17:20:32

    Web Page Fundamentals(网页基本原理)-网页包含的元素还是网页的一些特征,相对于传统的光盘媒质,网页元素有其特别的元素和不同。很多网页都有但是不局限于以下的基本元素:

    1.大小各异色彩缤纷N多不同字体的文字。

    2.图像和相片

    3.文字和图像超链接

    4.广告

    5.下拉菜单

    6.可以添加文字的表单

    还有就是一些高级的动态功能:

    1.可以让用户随意改变显示位置的功能(自定义布局- Customizable layout)

    2.用户可以选择其感兴趣的新闻(自定义内容- Customizable content)

    3.动态下拉菜单

    4.动态替换的文字

    5.根据分辨率而变化的动态布局和可选内容

    6.对不同浏览器,不同的版本,不同的硬件和软件平台的兼容

    7.许多增强可用性的隐藏的格式,标签和内嵌信息

    黑盒测试Web测试中的应用

    文字- (Text)

    1.对网页的测试有时候很想是对文本的测试,需要根据用户的水平,相关术语,内容,还有拼写错误,还有一个就是要看看那些信息是否已经是过时的。在这里要注意的是,不要依靠拼写检查器,因为他不能检查图片的文字还有表带等……

    2.对于一些特别有用的信息,例如Email,地址,邮编,电话等……需要加倍留意。最与每个网页的标题也要认真细看。

    3.还有一个很容易被忽略的地方就是ALT信息,就是我们把鼠标移动到一个图标上的弹出提示。

    4.还有就是用不同的分辨率看看文字有没有变化。因为这里有可能出现一种问题就是,可能一段文字在特定的分辨率下显示是好的,换个分辨率就变得支离破碎了。

    超链接- (Hyperlinks)

    1.看是否那些超链接都是正确的。会不会一个“注册”的超链接,最后就链接到了退出页面了。

    2.如果是一个在线发EMAIL的窗口,那么就写个EMAIL看他能不能发信出去并且收信人是收到的。

    3.注意检查,防止出现孤立的页面(orphan pages)。有可能这个页面没有出口或者没有入口或者两者都没有。

    图像- (Graphics)

    1.看图像有没有被正常的load出来

    2.如果图像和文字是弄到一起的,注意看那些在图像周围的文字有没有很好的换行,有没有文字被那个图像遮住了。

    表单- (Forms)

    1.看表单的布局有没有问题,是不是有些文本框没有跟说明的文字对齐

    2.文本框能否正确输入内容,例如一个要填入邮编号码的文本框里面看能否输入数字

    3.看看是不是所有字段都是必填的。如果有某些是必填的话,看看他们是否真的有效

    其他杂项- (Miscellaneous)

    1.如果有计数器,那么需要对之进行测试

    2.如果是有搜索功能,要把这个站内搜索和搜索引擎的搜索分辨清楚

    灰盒测试(Gray-Box Testing)Web测试中的应用

    灰盒测试就是用黑盒的方法,就是不管里面是怎么弄的,反正我只看功能,然后有结合白盒测试的技术,站在一个比较高的角度看这个软件是如何运作的。书中说一个网页比较适合灰盒测试,因为HTML本身不是一种编程语言,只是一种标记语言,比较容易理解。一般来说灰盒测试会在集成测试的执行过程中用到,多数由程序员来执行啦~

    白盒测试在网页在Web测试中的应用

    现在这个年头,已经没有人用静态网页了,有也是通过一些编程语言来动态生成的吧。白盒测试主要对以下进行测试:

    1.动态内容- (Dynamic Content)

    2.基于数据库内容的页面- (Database-Driven Web Pages)

    3.程序生成的页面- (Programmatically Created Web Pages)

    4.服务器性能和负载- (Server Performance and Loading)

    5.安全性- (Security)

    配置测试和兼容性测试- (Configuration and Compatibility Testing)

    配置测试是一个检查你的软件在不同软硬件平台上以及不同的配置下能否正常工作的过程

    兼容性测试是一个检查你的软件跟其他软件能否和平共处的过程

    一些需要注意的东西:

    1.硬件平台- (Hardware Platform)

    2.浏览器软件及其版本- (Browser Software and Version)

    3.浏览器插件- (Browser Plug-Ins)

    4.浏览器选项- (Browser Options)

    5.分辨率和色深- (Video Resolution and Color Depth)

    6.文字大小- (Text Size)

    7.网速- (Modem Speeds)

    可用性测试在Web测试中的应用

    可用性测试估计是提的比较多的吧。我记得以前看过一本书叫《Don't let me think》。里面就是讲述了一些提高可用性的方法还有设计原则之类的。《软件测试》这本书提到了10个最容易犯错点:

    1.Gratuitous Use of Bleeding-Edge Technology-滥用先进技术,其实做IT这个大家都知道技术更新的很快,但是一般商用的软件都不会选择最新版本或者最前沿的技术,就好像JAVA都出到1.6了但是很多开发团队还是在用1.4。稳定压倒一切啊。

    2.Scrolling Text, Marquees, and Constantly Running Animations-不要搞的整个页面动来动去的,因为用户看的是内容,看的是内容是否有价值,而不是花里胡哨的飘来飘去的文字。

    3.Long Scrolling Pages-一个页面拉啊拉~拉半天都不到底。

    4.Non-Standard Link Colors-前面都说过了,标准是要去跟的,不要随便改动,就好像一般链接是蓝色的那么就蓝色吧,特别大的标题做成红色是合理的,什么不好的事情做成黑的也是合理的,但是如果出现绿色di……那么就好像有点不合理哦。

    5.Outdated Information-过时的内容,这个有可能出现在邮件地址,电话号码的地方。

    6.Overly Long Download Times-过长的下载时间,一般用户的忍耐性都是有限,而且现在SB电信搞什么包月改为240小时,时间就是金钱啊。估计没人喜欢看着浏览器的进度栏干瞪眼。

    7.Lack of Navigation Support-缺乏导航支持。有些页面有进没有出,或者不能方便的返回上层页面。

    8.Orphan Pages-孤立的页面。没法进,万一不幸进了还没法出。

    9.Complex Website Addresses (URLs)-这个要看当时注册了个啥域名了。。。

    10.Using Frames-框架的确受人鄙视,不过不知道为什么哦,Rational ClearQuest就用的Frame


  • 给初学loadrunner朋友的建议

    c_r_u_e_l 发布于 2012-11-29 16:17:56

    摘要:随着Internet的普及与迅速发展,企业业务量的迅速加大,数据大集中成为一种趋势,IT系统承载的负荷越来越重,系统性能的好坏严重的影响了企业对外提供的服务质量。从而对IT系统的性能进行测试和调优引起企业的重视,进而性能测试工程师成为IT市场的”香悖悖”,并且性能测试有着极高的技术挑战。于是吸引了大量的测试爱好者来学这方面的技术,而一谈到性能测试很多人便会想到鼎鼎大名的LoadRunner这款优秀的性能测试工具,然而到这里问题就产生了?
      关建字:LoadRunner 性能测试 网络基础编程语言数据库操作系统
      LoadRuner与性能测试的关系:LoadRunner初学者的误点:把LoadRunner神化了。很多初学LoadRunner的朋友认为掌握了使用LoadRunner这款性能测试工具,就能够做性能测试了。常在网上看到好多人在学习怎么去使用这款优秀的性能测试工具,本来学习怎么去使用LoadRunner这个工具没有错,却把LoadRunner神化了,”天真的”以为它什么都能做,以为学会了LoadRunner的使用就能做性能测试了。尽管用了大量的时间学会了如何使用LoadRunner录制脚本,如何进行关联,如何进行参数化,如何设置集合点等等?可到头来,性能测试还是不会做。为什么?对于产生的性能报告不知道怎么去分析?不知道如何利用得到的分析报告分析出系统存在的瓶颈?不知道如何进行性能调优?像这些事光会使用LoadRunner是做不到的?说白了LoadRunner只是我们做性能测试的一个工具,它并不是万能的,是死的,具体怎么做还得依靠人去操作与分析。会使用LoadRunner的人,并不一定会做性能测试,会做性能测试的人并不一定都会使用LoadRunner。LoadRunner只是一个性能测试工具而已。我们应该意识到,测试工具只是性能测试中的一部分,仅是为达到性能测试目的而采用的一种手段
      性能测试与系统性能的关系:高性能,高安全的系统,不是测试出来的,而是构架,设计,编写出来的。当然在这里我并不否认性能测试的重要性,甚至可以说没有经过性能测试的系统,一定不会是优秀的系统,软件是人开发出来的,而人总是会出错的,所谓智者千虑,必有一失……要想做好性能测试,在软件系统需求,设计,编写代码的这些阶段就应该进行性能测试,而不仅仅是系统测试这个阶段才去做性能测试,性能测试应该贯穿于整个软件开发周期中。
      对初学LoadRunner朋友的建意:常看到网上一些网友发贴子问,怎么对性能测试产生的结果进行分析?测试系统时怎么去选择合适的协议?对于发这些贴子的人我想请问你?你能够详细的说下HTTP协议吗?TCP建立连接和释放连接的过程是怎样进行的?什么是协议?协议是用来做什么的?在OSI参考模型中各层的作用?数据库中产生并发的冲突的原因?不要太依赖于LoadRunner工具本身的学习,而去忽略计算机其它基础知识的学习,我们更应该去掌握一门编程语言,良好的网络基础知识,计算机原理与操作系统知识,数据库知识。这些是我们去学习怎么去使用LoadRunner前提与基础。。
      1、为什么要掌握一门编程语言
      其一,大家在使用LoadRunner时常会遇到一些不能录制脚本的情况发生,或者需要录制一些复杂的脚本,这时候我们就必须手动的开发脚本。其二LoadRunner虽然强大,易于使用,可是它却属于商业软件,价格昂贵,并且代码不开源,我们无法了解LoadRunner具体的实现细节,甚至我们会怀疑LoadRunner收集的性能数据准确吗?它有是如何实现的等等,而这些我们通过LoadRunner的帮助文档无法得知。性能测试工具并不只有LoadRunner,做性能测试还有许多优秀的性能测试工具可以选择,像JMeter,Curl-Loader等等这些非常优秀的开源工具,在全能上虽然并不上LoadRunner,但在某些方面却比LoadRunner还要强大。例如Curl-Loader这个工具,它虽然支持的协议不多,但是对于http协议它最高能产生10万的并发用户,这是LoadRunner远远所不及的。并且这些工具代码是公开的,我们能够从这些代码中去分析具体实现的细节,并且还可以自已编写代码,增强软件的功能,这也是成为性能测试高手的一条途径。LoadRunner好比我们的Windows操作系统,易于使用,功能强大,代码封闭,论全能比Linux要强大。我们的开源性能测试工具好比Linux操作系统代码开源,不易于使用,但很多方面比我们的Windows要强大。也许这个时候有人会问对于初学者学哪门语言最好最有前途C,C++,VB,JAVA,C#?其实每一种语言能够生存下来,自有其生存的道理,每一种语言都有自已优势和缺点,并且编程语言具有相通信,学好了一门,再去学另外的编程语言,非常快就能上手。对于初学者我建意学习C语言,理由有很多,例如很多优秀的开源性能测试工具就是用C语言开发的…。当然不管选择什么编程语言,或者数据库,或者操作系统,我们不要去想学哪门最好,学哪方面最有前途。我们更应该结合自身的情况,选择最合适的,而不是选择最好的。
      2、为什么要掌握计算机原理和操作系统知识
      论坛上常会看到这些问题?LoadRunner中线程与进程的关系?在什么时候用到它们,怎么区别用线程还是进程呢?LoadRunner录制产生了乱码怎么解决?怎么去发现内存泄漏?对那些发贴问这些问题的朋友,我依然想请问你你知道进程和线程的概念吗?知道进程有几种状态吗?知道进程间的通信是怎么进行的吗?死锁,进程与线程的区别这些概念你明白吗?如果你连内存的概念,内存的作用,内存泄露的概念都搞不清楚,你怎么去发现内存泄露?如果这些你都不知道,自然就不知道怎么去做性能测试分析?一些网友录制脚本常常会产生一些莫名奇妙的错误?还震震有词的说这是LoadRunner的原因。其实要说到底要解决这些问题就必需得有良好的计算机原理和操作系统知识。弄清了进程和线程的区别,你自然就明白了使用进程资源使用高,但安全性要强于线程,线程资源利用率少,使用线程能在一个负载生成器上运行更多的Vuser,但可能存在安全问题。LoadRunner录制产生了乱码怎么解决?为什么会产生乱码,你知道什么是字符集吗?什么是编码吗?字符串在我们内存中有是如何存放的?ASCII编码,ANSI编码,UNICODE编码它们的区别是什么?这些都是操作系统的基础基础。掌握好了这些你自然明白LoadRunner中产生乱码的原因。当然计算机原理和操作系统的基础知识还有很多得掌握的知识。像操作系统的体系架构、操作系统的重要基础概念,内存管理、存储/文件系统、驱动/硬件的管理。要做好性能测试计算机原理和操作系统知识必不可少。
      3、为什么要有良好的网络基础
      经常在51testing论坛中看到很多人发贴子。像LoadRuner中为什么要进行关联?LoadRunner测试系统时如何选择协议?LoadRunner中的如何进行IP欺骗?等等。这些问题随便一搜就能发现大量的贴子,其实说到底这些问题和LoadRunner的关系并不是很大,要去解决这些问题并不在于你对LoadRunner这个工具使用是否熟练,而在于我们网络基础知识是否扎实。例如第一个问题LoadRunner中为什么要进行关联?相信很多朋友都知道HTTP协议知道它是超文本传输协议,但是对于一些新手往往不能够详细的说出HTTP具体的内容,像HTTP工作的原理,HTTP协议为什么要使用基于TCP的协议而不使用UDP的协议,HTTP工作在OSI参考模型的哪一层?在HTTP协议上数据是怎么传输的等等。而只有当我们明白了这一切,自然而然就会明白为什么要使用关联,到最后你会发现这些问题其实根LoadRunner关系并不是很大。HTTP协议本质上是无状态的;对页面的每个请求都将被视为新请求,而且默认情况下,来自一个请求的信息对下一个请求不可用。在传统的Web编程中,这通常意味着在每一次往返行程中,与该页及该页上的控件相关联的所有信息都会丢失。例如,如果用户将信息输入到文本框,该信息将在从浏览器或客户端设备到服务器的往返行程中丢失,为了使用浏览网页,页与页是相互联系不去丢失这些信息,于是了就从现了Cookie,Session,查询字符串等等保持状态的技术。什么是Cookie?什么是Session?Cookie和Session有是怎么工作的?当我们明白了这些,很多的问题就自然而然的明白了,像这些都是基础的知识和LoadRunner关系大吗?不大。
      Cookie是一些少量的数据,这些数据存储在客户端文件系统的文本文件中,或者存储在客户端浏览器会话的内存中。Cookie包含特定于站点的信息(像用户名密码以及我们在网站一些个性化的设置等等),这些信息是随页输出一起由服务器发送到客户端的。如果浏览器使用的是cookie,那么所有的数据都保存在浏览器端,比如我们登录以后,服务器设置了cookie用户名,那么当你再次请求服务器的时候,浏览器会将用户名一块发送给服务器,这些变量有一定的特殊标记。服务器会解释为cookie变量,所以只要不关闭浏览器,那么cookie变量一直是有效的,所以能够保证长时间不掉线。。如果设置了的有效时间,那么它会将cookie保存在客户端的硬盘上,下次再访问该网站的时候浏览器先检查有没有cookie,如果有的话,就读取该cookie,然后发送给服务器。这些是Cookie的工作过程,常看到论坛上一些朋友发贴子问使用LoadRunner时录制到了一些Cookie的信息,它是用来做什么的,看起来很烦可不可以把它删除掉?明白了这些细节的知识,你自然能明白那个Cookie的信息能不能删除掉。如果web服务器端使用的是session,那么所有的数据都保存在服务器上,客户端每次请求服务器的时候会发送当前会话的SessionId,服务器根据当前SessionId唯一地标识在服务器上包含会话数据的浏览器,以确定用户是否登录或具有某种权限。不同的用户发送请求Web服务器会随机发送一个唯一的SessionID。而我们使用LoadRunner录制时它会把我们SessionID写死,所以导致出错。这时候就得使用关联了,这样不仅明白了LoadRunner怎样使用关联,而且还明白了为什么要使用关联?对于LoadRunner测试系统时如何选择协议?这个问题也是网络论讨的比较多的问题。要解决这个问题同样得依靠我们的扎实的网络基础,而不是对LoadRunner使用的熟练程度,首先我们得了解LoadRunner录制时的工作原理了,LoadRunner的录制和QTP不一样,它不关心你的对象识别什么的,不关心你的什么界面之类的,不关心你使用什么语言编写的,LoadRunner有一个Agent进程,来专门监控客户端和服务器之间的通信,然后用自己的函数进行录制。LoadRunner录制的时候关心的是通信包,是客户端和服务器之间的数据包。说到这里,大家就比较清楚了,为什么有的时候不能录制呢?因为,协议不认识,导致LoadRunner截获的数据包不能解析,所以录制下来是空的。所以我们得熟悉什么是协议,熟悉OSI参考模型,OSI参考模型中各层的作用,TCP协议栈各层的作用,熟悉TCP,UDP,ICMP等等协议。当我们明白了这些网络的基础知识后我们自然会明白应该如何去选择协议。另外关于LoadRunner中的如何进行IP欺骗?要解决这个问题同样得有良好的网络基础知识。其实当我们理解了IP地址的格式,IP地址的分类,子网掩码的概念,以及知道怎么去进行非标准子网的划分方法,掌握了这些原理的东西,那么具体怎么在LoadRunner中如何进行IP欺骗,就非常简单了。当然网络基础知识并不只是上面的而已,还包括路由器,交换机,加密技术等等这些基础的网络知识,这些远远比我们去学习怎么去使用LoadRunner更重要。
      4、为什么要掌握数据库知识
      数据库的重要性我想是不言而喻的,性能测试产生的一个非常大的原因是因为数据大集中的趋势,测试从某种意义来讲就是对数据测试,而我们企业的核心数据是放在数据库中的。现在大型的WEB应用程序,都采用多层结构,像典型三层,用户界面层,数据逻辑层,数据层。而数据层,而数据层对我们整个WEB应用程序的性能是非常大的,对数据库的基础知识不懂,我们怎么去进行性能测试分析?怎么知道确定性能产生的瓶颈是否是数据库的原因,如何对系统进行调优?例如数据库模型设计不合理,一条坏的SQL语句就能影响到整个WEB应用程序的性能,所以熟悉SQL语句,建表,索引,存储过程,事务,触发器,并发等这些基础知识是必需得掌握的。
      路漫漫其修远兮,吾将上下而求索:性能测试难点不在于Loadrunner工具本身,难在对整个系统的全局把握,而对全局的把握你就必需得有丰富的知识面。并不是学好了LoadRunner的使用就能做性能测试。目前,国内性能测试领域正处于起步阶段,要做好性能测试还需学习更多的知识,技术性和非技术。性能测试这条路充满着挑战,也充满着机遇。但正如鲁迅先生所说这世上本来没有路,走的人多了,也就成了路。最后祝愿喜爱性能测试的爱好这条道路上能够不鸣则已,一鸣惊人,不飞则已,一飞冲天。
     
  • 教你如何写测试用例

    zhangling_ellen 发布于 2012-11-06 17:56:54

    测试用例的主要来源有:
    1) 需求说明”及相关文档
    2)相关的设计说明(概要设计,详细设计等)
    3)与开发组交流对需求理解的记录(可以是开发人员的一个解释)
    4)已经基本成型的UI(可以有针对性地补充一些用例)
    简而言之,所有你能得到的项目文档,都尽量拿到。
    从所得到的资料中,分解出若干小的“功能点”,理解“功能点”,编写相应的测试用例。
    1.2用例的组织方式
    不同的公司有不同的做法,原则上,只要方便管理和跟踪,怎么组织都可以的。
    用例可以按大的功能块组织,如查询功能模块的用例,可以组织在一起,打印模块的测试用例,可以另外组织在一起。在没有专门的测试用例管理工具的情况下,用例执行后会产生2种状态:“通过”、“失败”——这样加上“未执行”的用例的状态,共3种状态。即从“未执行”用例中执行一个用例后,该用例状态应为“失败”或“通过”。将同一状态的用例组织在一起。至于用例文件格式,可以是.DOC或.XLS(如果有专门的测试用例管理工具另当别论)。
    1.3用例与其他材料的关联方式
    测试用例面临的比较大的风险有:需求的变更、设计的修改、需求的错误和遗漏等等。
    由于用例的主要来源是需求和设计的说明,所以对用例的跟踪其实就是对需求和设计的跟踪,需求和设计的变更势必引起测试用例的变更。如前所说,将分解的功能点编号,与相应的用例联系起来。例如,你可以列一个表格,列出各个(编号的)功能点和测试用例间的关联关系。这样,当需求和设计发生变化时,你只需要跟踪“功能点”是否变化,是否增加了新的功能点。
    重要和困难的是,不手头的资料和信息一定要是最新的。
    1.4用例应包含的信息
    一个优秀的测试用例,应该包含以下信息:
    1) 软件或项目的名称
    2) 软件或项目的版本(内部版本号)
    3) 功能模块名
    4) 测试用例的简单描述,即该用例执行的目的或方法
    5) 测试用例的参考信息(便于跟踪和参考)
    6) 本测试用例与其他测试用例间的依赖关系
    7) 本用例的前置条件,即执行本用例必须要满足的条件,如对数据库的访问权限
    8) 用例的编号(ID),如可以是 软件名称简写-功能块简写-NO.。
    9) 步骤号、操作步骤描述、测试数据描述
    10)预期结果(这是最重要的)和实际结果(如果有BUG管理工具,这条可以省略)
    11)开发人员(必须有)和测试人员(可有可无)
    12)测试执行日期
    2、测试用例模板和例子
    该范例已经包含一个测试用例的模板。
    项目/软件 技术出口合同网络申领系统 (企业端) 程序版本 1.0.25     
    功能模块名 Login  编制人   xxx     
    用例编号- TC-TEP_Login_1  编制时间   2002.10.12     
    相关的用例 无         
    功能特性 用户身份验证         
    测试目的 验证是否输入合法的信息,允许合法登陆,阻止非法登陆         
    预置条件 无  特殊规程说明  如数据库访问权限     
    参考信息 需求说明中关于“登陆”的说明         
    测试数据 用户名=yiyh 密码=1
    操作步骤 操作描述  数 据 期望结果 实际结果 实际结果  测试状态(P/F)
    1  输入用户名称,按“登陆”按钮。  用户名=yiyh,密码为空  显示警告信息“请输入用户名和密码!”     
    2  输入密码,按“登陆”按钮。  用户名为空,密码=1 显示警告信息“请输入用户名和密码!”     
    3 输入用户名和密码,按“登陆”按钮。 用户名=yiyh,密码=2 显示警告信息“请输入用户名和密码!”     
    4 输入用户名和密码,按“登陆”按钮。 用户名=xxx,密码=1 显示警告信息“请输入用户名和密码!”     
    5 输入用户名和密码,按“登陆”按钮。 用户名=xxx,密码=2 显示警告信息“请输入用户名和密码!”     
    6 输入用户名和密码,按“登陆”按钮。 用户名=空,密码=空 显示警告信息“请输入用户名和密码!”     
    7 输入用户名和密码,按“登陆”按钮。 用户名=yiyh,密码=1 进入系统页面。     
    8 输入用户名和密码,按“登陆”按钮。 用户名=Admin,密码=admin 进入系统维护页面。     
    9 输入用户名和密码,按“登陆”按钮。 用户名=yiyh'',密码=1 显示警告信息“请输入用户名和密码!”     
    10 输入用户名和密码,按“登陆”按钮。 用户名=yiyh,密码=1'' 显示警告信息“请输入用户名和密码!”     
    11 输入用户名和密码,按“重置”按钮。 用户名=yiyh,密码=1 清空输入信息     
    测试人员    开发人员     项目负责人 
    3、测试用例设计的误区
    1、能发现到目前为止没有发现的缺陷的用例是好的用例:
    首先要申明,其实这句话是十分有道理的,但我发现很多人都曲解了这句话的原意,一心要设计出发现“难于发现的缺陷”而陷入盲目的片面中去,忘记了测试的目的所在,这是十分可怕的。我倾向于将测试用例当作一个集合来认识,对它的评价也只能对测试用例的集合来进行,测试本身是一种“V&V”的活动,测试需要保证以下两点:
     程序做了它应该做的事情
     程序没有做它不该做的事情
    因此,作为测试实施依据的测试用例,必须要能完整覆盖测试需求,而不应该针对单个的测试用例去评判好坏。
    2、测试用例应该详细记录所有的操作信息,使一个没有接触过系统的人员也能进行测试;
    不知道国内有没有公司真正做到这点,或者说,不知道有国内没有公司能够将每个测试用例都写得如此详细。在我的测试经历中,对测试用例描述的详细和复杂程度也曾有过很多的彷徨。写得太简单吧,除了自己没人能够执行,写得太详细吧,消耗在测试用例维护(别忘了,测试用例是动态的,一旦测试环境、需求、设计、实现发生了变化,测试用例都需要相应发生变化)上的时间实在是太惊人,在目前国内大部分软件公司的测试资源都不足的情况下,恐怕很难实现。但我偏偏就能遇到一些这样的老总或者是项目负责人,甚至是测试工程师本身,全然不顾实际的资源情况,一定要写出“没有接触过系统的人员也能进行测试”的用例。
    在讨论这个问题之前,我们可以先考虑一下测试的目的。测试的目的是尽可能发现程序中存在的缺陷,测试活动本身也可以被看作是一个Project,也需要在给定的资源条件下尽可能达成目标,根据我个人的经验,大部分的国内软件公司在测试方面配备的资源都是不足够的,因此我们必须在测试计划阶段明确测试的目标,一切围绕测试的目标进行。
    除了资源上的约束外,测试用例的详细程度也需要根据需要确定。如果测试用例的执行者、测试用例设计者、测试活动相关人对系统了解都很深刻,那测试用例就没有必要太详细了,文档的作用本来就在于沟通,只要能达到沟通的目的就OK。
    在我担任测试经理的项目中,在测试计划阶段,一般给予测试设计30% - 40%左右的时间,测试设计工程师能够根据项目的需要自行确定用例的详细程度,在测试用例的评审阶段由参与评审的相关人对其把关。
    3、测试用例设计是一劳永逸的事情;
    这句话摆在这里,我想没有一个人会认可,但在实际情况中,却经常能发现这种想法的影子。我曾经参与过一个项目,软件需求和设计已经变更了多次,但测试用例却没有任何修改。导致的直接结果是新加入的测试工程师在执行测试用例时不知所措,间接的后果是测试用例成了废纸一堆,开发人员在多次被无效的缺陷报告打扰后,对测试人员不屑一顾。
    这个例子可能有些极端,但测试用例与需求和设计不同步的情况在实际开发过程中确是屡见不鲜的,测试用例文档是“活的”文档,这一点应该被测试工程师牢记。
    4、测试用例不应该包含实际的数据;
    测试用例是“一组输入、执行条件、预期结果”、毫无疑问地应该包括清晰的输入数据和预期输出,没有测试数据的用例最多只具有指导性的意义,不具有可执行性。当然,测试用例中包含输入数据会带来维护、与测试环境同步之类的问题,关于这一点,《Effective Software Test》一书中提供了详细的测试用例、测试数据的维护方法,可以参考。
    5、测试用例中不需要明显的验证手段;
    我见过很多测试工程师编写的测试用例中,“预期输出”仅描述为程序的可见行为,其实,“预期结果”的含义并不只是程序的可见行为。例如,对一个订货系统,输入订货数据,点击“确定”按钮后,系统提示“订货成功”,这样是不是一个完整的用例呢?是不是系统输出的“订货成功”就应该作为我们唯一的验证手段呢?显然不是。订货是否成功还需要查看相应的数据记录是否更新,因此,在这样的一个用例中,还应该包含对测试结果的显式的验证手段:在数据库中执行查询语句进行查询,看查询结果是否与预期的一致。
    4、测试用例在软件测试中的作用
        1、指导测试的实施
        测试用例主要适用于集成测试、系统测试和回归测试。在实施测试时测试用例作为测试的标准,测试人员一定要按照测试用例严格按用例项目和测试步骤逐一实施测试。并对测试情况记录在测试用例管理软件中,以便自动生成测试结果文档。
        根据测试用例的测试等级,集成测试应测试那些用例,系统测试和回归测试又该测试那些用例,在设计测试用例时都已作明确规定,实施测试时测试人员不能随意作变动。
        2、规划测试数据的准备
    在我们的实践中测试数据是与测试用例分离的。按照测试用例配套准备一组或若干组测试原始数据,以及标准测试结果。尤其象测试报表之类数据集的正确性,按照测试用例规划准备测试数据是十分必须的。
    除正常数据之外,还必须根据测试用例设计大量边缘数据和错误数据。
        3、编写测试脚本的"设计规格说明书"
        为提高测试效率,软件测试已大力发展自动测试。自动测试的中心任务是编写测试脚本。如果说软件工程中软件编程必须有设计规格说明书,那么测试脚本的设计规格说明书就是测试用例。
        4、评估测试结果的度量基准
        完成测试实施后需要对测试结果进行评估,并且编制测试报告。判断软件测试是否完成、衡量测试质量需要一些量化的结果。例:测试覆盖率是多少、测试合格率是多少、重要测试合格率是多少,等等。以前统计基准是软件模块或功能点,显得过于粗糙。采用测试用例作度量基准更加准确、有效。
        5、分析缺陷的标准
        通过收集缺陷,对比测试用例和缺陷数据库,分析确证是漏测还是缺陷复现。漏测反映了测试用例的不完善,应立即补充相应测试用例,最终达到逐步完善软件质量。而已有相应测试用例,则反映实施测试或变更处理存在问题。
    5、试用例编号规则
    目的:好的测试用例编号,可以更好的去了解此项用例所针对的模块,也有助于记忆和新用例的增加。
    规则:测试用例编号采用“版本+细类+编号”的形式。
    备注:其中“版本”为设计此测试用例的软件版本。
    “细类”为小模块中的汉字头一个字母,以最多5个字母为标准。
    “编号”为BUG用例的编号,以4位为标准,依次递增。
    例如:引导系统V2.01版本中,候车点设置,用例编号可以书写为:
              2.01_HCDSZ_0001
  • 【心得】阿达聊软件测试

    黑羽祭 发布于 2012-10-12 10:19:43Digest 3

    前阶段为公司内刊发表了一篇小文,谈了下软件测试的内容,今天也共享到我的微博上,感兴趣的同学可以看一下:

     

    本次很荣幸的由我来写一篇稿子。

    在做软件测试工程师的这几年,收获了不少,对软件测试这一职业的理解也随着工作经验有这更加深入的了解,在这里写一篇关于“软件测试”的小文,发表一下我个人的一些拙见,供大家探讨学习之用。

     

    软件测试

    什么是软件测试?其实现在很多人对软件测试这一职业不是很了解,不知到底什么是软件测试。

    关于软件测试的定义有很多种,我个人觉的比较符合的是:“使用人工或者自动手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别”。由于现在软件发展的十分迅速,软件的复杂度也越来越高,所以软件测试现在也变的原来越重要,软件测试贯穿于整个软件生命周期,软件测试并不局限于程序测试,它还包括对相关的需求、文档的测试,也包括一些多样化的回归测试、压力测试、性能测试等。

    关于软件测试理论知识在很多书中都有详细的描写,这里就不摘抄了。但是根据我的经验,想要做好软件测试,深入了解软件测试的理论知识是必不可少的,很多很多实际遇到的问题,都是由于对软件测试的理论知识的不了解造成的。

    测试心理

    做好一名软件测试人员,调整好心理是必须的。

    1)“创造者”与“破坏者”

    在心理上,软件开发和测试最大的区别在于前者是“创造者”而后者是“破坏者”。

    对于“创造者”而言,在心理上是不会对自己“创造”出来的产品进行破坏,就像每个人都会很爱惜自己的手工作品。而对于“破坏者”,心理上应该是属于乐于看到自己测试的系统“崩塌”的场面,就像拿着别人的手工作品摔砸扔来证明那个手工不行一样。

    又如在实际应用中,开发人员会说:“这个功能我测过好几遍了,没有问题了”,但测试软件却还是能在这个功能里挑出很多的问题,原因在于,开发人员测试时,心理上的关注点放在了“证明这个功能点可行”上,往往会无意识的绕过一些可能会引起问题的操作;而测试人员的关注点放在了“使这个功能点不行”上,会尝试各种可能造成问题的操作。所以“破坏者”需要利用你所有可知的测试策略与方法,对软件进行不同程度的“破坏”,检查各种状况下,软件的处理方式与系统的能力。

    2)“第三方视角”&“好奇心”

    以第三方的眼光看软件产品是测试人员与开发人员在进行测试时最大的区别。除了“第三方的视角”,测试人员在心理上还要时常保持“好奇心”,随着测试的深入,测试人员应不满足于现有的测试成果,“好奇心”会让我想知道每次点击操作背后系统正在做些什么,驱使我去找程序员问个究竟或者看他们的代码是怎么写的,看看能否进一步优化系统;“好奇心”会让我想弄清楚究竟多少用户同时操作,系统就会崩溃,能否应付系统上线后的正常使用;“好奇心”会驱使我在想用户如果来使用软件的时候会如何操作,会遇到什么样的问题,会不会觉得繁琐。有了“好奇心”,才能让系统在上线前就做了更加完备的测试。

    3)“兴趣”

    “兴趣”也是关键,做过软件测试工作的人知道,软件测试有时候是一个很繁琐枯燥的工作。比如测试一个表单填写提交的功能,需要使用不同数据进行填写并提交,所以非常有可能出现的情况是,这一星期,每天8小时的工作就是坐在电脑前,不停的做着“填写表单并提交”这样的简单机械时劳动,这时,“兴趣”是能让我摆脱枯燥的方法。兴趣是最好的老师,如果对测试工作真正感兴趣的,就会不断地研究测试相关的理论知识、技能技巧、工具等。就如上面说的“提交表单”测试,你可以把它当成一种挑战,目标是搞垮它,这时,就可以尝试各种各样测试方法:尝试不同的填写数字、在填数字的地方写英文、在写英文的地方写中文、将必填处留空提交、在填写框中复制上一篇10W字的文章、上传附件处上传各式各样的格式文件、上传50MB以上的图片文件、使用QTP反复快速操作、使用QTP Object对象方法篡改页面控件属性提交、使用Loadrunner模拟大量用户同时提交、提交的时候拔掉网线、用SnifferHttpWatch抓包进行观察等等,有太多的方法可以尝试,再使出浑身解数后,发现不知不觉中,已对表单的各种场景进行了模拟测试,提交了大量表单,时间也觉得一个星期都不够了呢。用一个比喻来说的话,如James A. Whittaker的《How to Break Software》说的,“像小时候我们拿上一个小玩具,可能就是一个陀螺,甚至是一个拖把,我们也会玩上半天也不会感到厌烦。我们会变着花样来玩它,我们扮演各种角色,把它当成道具,玩得不亦乐乎。现在的测试工作是什么,测试的对象有时候就是个玩具,只不过有些看起来过于严肃而已。如果我们能把软件当成玩具来玩,那么我们可能不会那么快就认为测试已经可以停止了。因为还有那么多有趣的玩法还没尝试。如果实在是玩腻了,还大可以把玩具狠狠地甩在地上,用脚踩几下,看它有什么反应。这也是一种测试方法!你是在进行破坏性测试!把你的小脚踏车一边又一边地从斜坡上冲下来,每次装上不同重量的东西,看装上哪一种东西会最快。哈哈,原来你是在做压力测试!”

     

    PS:经常有初入软件测试的人发邮件给我问,说做软件测试是如此的枯燥无味,而且很难在一个软件中找到更多的BUG了,或是开始抱怨回归测试的无聊时,我都会告诉他,你还没找到软件测试的“兴趣”。非常有幸的,我发现了“它”,它让我工作到现在仍能在软件测试中找到无限的乐趣与挑战,也是它,迫使我学习更多的知识。

     

    测试方法

    测试的方法太多了,不是我一篇小文能够全部概括的,在这里,我就说一些最基础的测试方法。

    如测试一个登录界面。有用户名和密码框,确定和重置按钮。用户名和密码长度要求为6-12位。

    1)冒烟测试

    我们测试的时候,最先需要使用正确的账号登录一遍,这叫“冒烟测试”,“冒烟测试”的作用是判断一个功能模块的最基本功能是否实现,如果“冒烟测试”能通过,则继续进行深入的测试,如果不过,则不继续进行测试。

    冒烟测试是测试的第一步,当发现软件连最基本的功能都无法实现的时候,应立即终止测试,交于开发处理问题,而不是继续测试,放慢了整体研发速度。

    2)边界值& 等价类

    当“冒烟测试”过了,则可以进一步进行测试了。这里需要用到“边界值”和“等价类”的测试思想。何为“边界值”?边界值的概念是输入稍高于其边界值及稍低于其边界值的一种测试方法。往往会在边界值的地方发生错误或与需求文档要求的不符合。如例子中,假设限定用户名长度只能为6-12位,则我们需要分别对长度为5位、6位、7位、11位、12位、13位这6种长度进行测试,这就是“边界值”法。何为“等价类”?等价类是一种数学上的概念,在这里是将一个测试点划分为多种类的集合,如:还是长度只能为6-12位的问题,使用等价类的方法可以划分为三类:1是小于6位的情况,26-12位的情况,3是大于12位的情况。测试的时候,需要在这三类情况中各举出一套测试数据进行测试。这就是“等价类”。

    从概念上来看,边界值和等价类的方法很好理解,这是软件测试中,最最基础的测试方法,但能真正活用于测试项目中的的确不多。从不少的来信中看到,其实还是有很多很多的测试人员不知道这两种测试方法,更不用说活用。但如电影中最厉害的大招往往是最基础的招式,小说中最厉害的人往往只是扫地僧,烹饪中最能看出能力的往往是炒蛋炒饭一样。看一个测试人员的基础和能力,看他写的测试用例就知道了。能活用与最简单的测试方法,才是最有效高效的测试。

    3)错误猜想

    猜,这也是一种测试方法,这也是用的最多的一种测试方法。当然,不是胡猜,而是有依据的猜。往往经验丰富的测试人员能“猜”到更多有可能产生问题的情况,写出更加有效的测试用例。刚刚的登录例子,可以“猜”在能正常登陆的账号前或后加个空格,看看是否能正常登录;可以“猜”输入空的用户名和密码进行登录的情况;可以“猜”在登录框中粘贴进大于保存用户名变量类型的字符个数;可以“猜”在注册一些带有奇怪字符或是超出字库范围的文字后能否正常登录;可以“猜”登录瞬间关掉页面检查SeverSession是否释放等等,能猜的内容很多很多,随着经验的增长和对系统越发的熟悉,会“猜”到更多测试方案。

    4)场景法

    这也是在平时用的比较多的方法,定义不同的场景,进行有规律的测试。主要用于检查流程等,可使用在有较多分支流程中进行测试。

    5)失败测试

    纯粹为了破坏而设计和执行的测试用例称为失败测试。可考察系统超出需求范围时的行为。

     

    测试方法太多太多,这里就不一一阐述了,但是上面5种,是用的最基础也是用的最多的方法。

     

    测试用例

    测试用例的重要性不用多了,能规范化测试,记录所有可能出现的问题,随着对测试用例的扩充,能越来越达到完备的测试。关于测试用例,我想说的是两点,“预期结果”与“测试数据”。

    1)预期结果

    测试用例中必须要写的中,最重要的一项是预期结果,我在指导一些网友写的测试用例的时候,发现这点很难有做的很好的。往往刚接触测试的人员会在预期结果一栏中写入诸如“登录正确”、“提交失败”等这样简单的预期结果。殊不知这样的写法和没写是差不多的,因为当另一个测试人员进行测试的时候,完全不知道“登录正确”时的表现形式,应写明页面上显示了些什么,那个角落会有什么样的显示,数据是否真正写到了数据库中而“提交失败”需写明失败提示到底是什么,是否有弹出框,是有错误图标等等的详细内容。

    在预期结果中不要出现如“查看弹出框中内容是否有图片”这样的有两层意思的句子,即不要出现“是否”。因为这样的书写,在别人看来是“查看弹出框中内容是有图片”是预期结果还是“查看弹出框中内容没有图片”是预期结果,这个看来只有写这条测试用例的人自己知道了。

    2)测试数据

    测试数据需要完整,如在某输入框中输入数据,需要写明需要输入的内容是什么,是“abcdefg”还是“1234567”,输入的账号也需要写明是什么账号,而不是写“输入正确的账号”,在别人测试过程中,是不知道什么才是正确的账号。如果这个账号不会变动(如管理员账号),则在测试数据中需写明“输入账号:admin,密码:123456”,如账号是常变动的(如用户账号),需在测试用例的前置条件中申明账号的可用性,如前置条件中写“系统存在账号为user123,密码为123456789的用户”,这时在测试数据中就可以写“试用账号user123,密码为123456789进行登录”。

    总之,写测试用例的时候,注意仔细与严谨。时常检查自己写的测试用例别人是否也能看懂。小组中有多么测试人员的,需要时常对测试用例进行评审,从而保证测试用例的高质量。

     

    BUG

    提交BUG也是一门功课,既要简单易读,又要能说明问题。所以需要在BUG单中写清楚复现的步骤,错误出现的频率,严重性和优先级,一个BUG单讲述一个问题,不可将多个问题写于同一篇BUG单中,BUG单中需注意语气,不得带有情绪,如果BUG存在争议,需要提供证据进行证明,如需求说明说,可以咨询需求人员,如果什么都没有可以参考行业软件规范。

    我谈一下我在实际项目中遇到的一些问题,一次参加客户方关于提交BUG单规范的会议,发现了如下问题:

    1)客户方想只使用一个数值,来定义严重性和优先级。真是不应该的,严重性和优先级是两个不同的概念,严重性高的BUG不一定优先级就高,而严重性低的BUG很有可能优先级是最高的。如一个很少用的功能在一定的操作下会导致程序无响应,但是决定在下一个版本再进行修复,则它的严重性虽然是高,但是优先级确是低,而一个马上要投入使用的功能点中,页面上显示的标题不正确不影响使用,虽然严重性是低,但优先级确实高。像这样的情况使用一个数值便很难描述出BUG的严重情况和优先情况。

    2)客户方的部分测试人员认为一张表单上的3种不同类型的问题可以写在一个BUG单上。这也是不可以的,有时候虽然是一个页面上的,但有可能3个错误点是由3个不同的开发人员开发的。这时,让一个开发修改完成而两个开发未修改时,无法正确调整BUG单状态,导致测试进度收集也不完全,很难定位到还有多少问题需要修改。

    3)客户方将BUG的数量和测试人员的效益与开发员工的效益挂钩,这个在管理中也是万万不可以的。会导致大量BUG冗余;开发修改大量严重程度非常低的小BUG导致延缓整个项目的进度;很少有测试人员会花更多的时间去找难以发现的BUG;造成开发和测试之间如仇家等等的问题。

     

    自动化

    在进入公司后,客户方就交给了我一个非常艰巨的任务,要做现有系统的自动化测试平台。还好对QTP比较熟悉,到目前为止,已经写好BPM 1.0系统的自动化测试框架,和不少表单脚本,并将BPM 1.0的脚本经过修改后,复用至BPM 2.0版本。

    如何进行自动化测试框架的搭建,我会在以后的文章中写明。

    所以在这里,我说几点关于自动化测试的一些简单的知识和我的一些经验。很明显,自动化测试从字面上来理解,就是让电脑自动完成所需要的测试内容。如填写表单的测试,我可以预先将所要填写的内容写好,然后下班后,让电脑自动逐条进行填写,提交,记录测试的结果。看似很酷,但需要考虑的问题很多,最主要的是,需要有一定的编程基础,毕竟,脚本是要靠“写”的。在很多网友来信中发现,很多人对自动化的理解和自动化所能做的功能有一点偏差。主要有以下几点:

    只要开发出强大的自动化测试脚本,就能将测试人员解放出来。其实不是的,很多的测试都是靠手工进行测试,自动化只是辅助。比如页面的排版是否好看,第一次测试时遇到的各种各样的问题,因为开发做了较大的改变等等一些问题时,自动化的执行就会失败。

    对于需求会经常修改的系统如何进行自动化脚本的编写。对于这样需求会经常变动的系统,就不能开展自动化测试,还是老老实实的进行手工测试吧。

    在软件测试理论知识还不是很牢固的情况下,不要进行自动化。对软件测试和自动化测试的错误理解会导致后期自动化进行十分的困难且根本没办法维护脚本。

    在软件版本还没有稳定的情况下,不要进行自动化

    领导不支持的情况下,不要进行自动化

    系统中测试对象基本可以正常识别的情况下才进行自动化脚本的编写。

    自动化测试一般的情况下是用来证明软件能正常运行,而不是用在证明软件这么操作一定会出错上。

    记住,自动化测试最主要的是提高工作效率,正确的使用是,用1天开发一个脚本能用3个月的测试,而不是花3个月开发出一个很牛的脚本来测试1天,非常多初学者会范这个错误,我曾经也范过。

     

    分析

    学会分析数据也是软件测试中必要的一项。优秀的软件测试人员能通过各种数字,得到当前系统的各种信息。在性能测试中,分析数据显得尤为重要,一个做金融保险类系统性能测试的前辈和我说过,做性能测试,用使用Loadrunner,编写脚本设计场景,学的话几个月就能搞定,但是分析执行脚本后的数据,可能需要2-3年的工作经验,才能看到你想看到的信息。

    说些简单常用的,通过分析BUG数据,就发现很多有用的信息。如:当系统刚刚开发完成,交给测试人员进行测试的时候,BUG数量一定是呈上升趋势,如果上升趋势不明显,一定是还没有做更完善的测试,说明需要投入更多的测试,随着测试的进行,BUG数量会成下降趋势,经过开发的几次调整,测试的几轮复测,BUG数量走势会在经过几次小波动后,趋于稳定,通过这些数字,就可以清楚的了解测试的进度,测试何时需要加强,何时可以退出,何时可以自动化的介入,何时可以开始进行性能测试压力测试等。

    同样的BUG单的数据,通过BUG单上模块进行分类进行分析,会发现80%BUG会出现在20%的模块中,这也是经典的“二八原则”,对于拥有80%错误的20%模块,测试人员需要进行更多的测试,很有可能有更多的错误藏在这20%的模块中。这样可以划分出测试的轻重,从而能更加好的计划出测试投入的时间。

     

    书写和演讲

    测试人员平时会遇到很多需要书写文档的地方,如:测试计划文档、测试总结报告、测试用例、自动化测试用例、自动化测试报告、性能测试报告等,也需要开不少的会议,进行较多的报告演讲。这些也是一个测试人员不可缺少的素质。

    我总结的经验就是:写报告要有理有据,图文并茂,提出一个点,需要给出足够的证据与分析过程来进行描述,而不是只写一个结论,要保证除测试人员外,开发、需求、架构人员也能从报告中,获取到相应的信息。至于演讲,尽量不要使用专有名词,简单明了,多做比喻,证据充足,由浅入深,才能让听的人接受你的观点,认同你的分析是正确的,能获得更多的帮助者与用户者,在日后的工作中,展开会更容易的多。

     

    作为一名系统测试人员,还需要做到细心、耐心,多注意细节。平时也需要多做学习:系统的、网络的、软件的、硬件的、数据库的、语言的等等。总结也是必不可少的,把学到的、用到的知识,都记录下来,会对以后的工作带来非常多非常多的便利。

    好了,也写了不少了,希望我写的东西,能对一些刚进入测试行业的、已进入测试行业的和一些像了解测试行业的一些开发一些帮助。

    希望志同道合的朋友可以平时多交流,共同学习软件测试。


     欢迎志同道合之人一同学习。

    QQ:370464196

    Email:cydblack@163.com

    陈永达

  • 也谈谈测试用例编写

    没翅膀的飞鱼 发布于 2012-10-22 23:31:26

    最近一直在更新和新增测试用例,对测试用例设计也有了更深的理解。以前写过关于测试用例设计方法方面的文章,这里就不介绍各个设计方法了。主要总结下测试用例设计思路及策略。

    测试用例设计可以从两个思路入手:按功能点和按业务流。这两则的主要区别是一个是从单个功能点考虑进行测试用例设计,一个是从把各个功能点串联起来形成业务流方面考虑进行测试用例设计。当我们要对一个模块进行测试用例设计时,要首先分析该测试模块的特点及业务,确定是按功能设计测试用例好点,还是按业务流设计测试用例好点,还是一个为主,一个为辅?从功能点进行测试用例设计容易把各个模块独立出来,减小了各模块之间相互的影响,各模块之间的交互可能考虑的较少,但是我们提交给用户的是整个产品,各模块之间必然有数据交互,所以只从功能方面考虑是不足的,需要业务流做补充。我惯用的测试思路是先以功能点设计为主,就是以单个功能点作为设计切入点,覆盖到测试模块各个独立的单个功能点,然后用业务流进行补充,把各个功能点串起来。这样的好处是能够尽可能的覆盖测试模块的各个点及各个功能点之间的交互,借用一个前辈的话:“把每条业务流程比作竖线,功能线比作横线,那么功能点就是横线和竖线的节点,这样整个用例就是一张大网,我们可以随时向网中添加横线或竖线,使得覆盖率不断增加,漏网之鱼越来越小。”但是这种策略比较耗时。这里要考虑测试用例颗粒度问题,相信只要设计过测试用例的人员都考虑过这个问题,也是设计测试用例前必须要确定的问题,个人感觉测试用例的颗粒度取决于时间和可重用性。时间比较好理解,可重用性最好的例子就是多个build的项目。

    其实关于按功能点或业务流进行测试用例的设计,我感觉是人为的划分,有时候想想一个流程走下来肯定完成的是一个功能,那这是不是从功能点考虑的体现呢?验证一个功能时,也应该是一系列操作,走多个业务,那这是不是业务流的体现呢?所以个人感觉设计测试用例时,非要说你是从业务流考虑的还是从功能点考虑的没有意义,有意义的就是设计出高水准的测试用例,而不是从语义上争得的死去活来(工作中遇到过),要有自己的设计思路。

    最近设计测试用例发现使用思维导图是个不错的方法(强烈推荐使用),用思维导图罗列出测试点(从需求中提取),寻找思路及策略,编写测试用例,不断完善细化测试用例,扩大测试用例的覆盖面。

    最近跟测试同行讨论,设计测试用例时经常遇到学习的测试用例设计方法应用不到实际的测试用例中。我也遇到过这个问题,现在测试用例设计中也存在这个问题,我们知道测试用例设计方法的目的就是减少测试用例,使测试活动处在可控的范围之内,但是这是有风险的,好多领导为了避免风险就要求我们尽可能的用穷尽的方法设计测试用例以及执行测试用例,遇到这种情况也没有办法,听领导的呗,但是有时你也会发现使用穷尽的笨方法可以发现使用减少测试用例的方法发现不了的问题以及相关的注意点,感觉这个对新员工特别有帮助,能够全面详细的了解一个产品。有时候想想要是我是领导,时间允许的情况下,我也会要求自己的组员尽可能的详细的测试产品,呵呵。当然也有些模块或者产品的确不需要使用测试用例设计方法,只需要考虑特殊场景即可。个人认为不应该让这些方法理论什么的束缚住自己的思维,不要为了使用而使用,也应该考虑测试模块特点,实际测试环境,时间等等。

    Ps:今天看了下阅读器,发现订阅同行的博客有了不少更新,好久没有查看了,批评下自己,要多看看前辈的文章,扩展知识面,不给自己找借口。

  • 测试执行负责人经历之经验总结一

    没翅膀的飞鱼 发布于 2012-10-12 08:21:39

    做过几个项目的测试执行负责人,有自己单独负责测试的小项目,也有89个人组成的团队进行的大项目测试,以下总结下测试执行负责人的职责和整个项目把控过程中的注意事项。实际项目测试活动主要有三部分组成:测试计划,实际测试和总结文档,以下也主要从这三个部分来介绍。 

    测试计划

    当老大告知要来一个项目,并让我们作为测试执行负责人时,欣喜之余也要开始着手准备工作,也就是制定我们的测试计划。首先要询问老大,开发人员对应的项目负责人是谁,测试执行周期多长,测试人员有哪些,环境资源能提供多少。接下来就是与开发人员项目负责人沟通,要来的项目是个全新项目还是维护项目,测试的重点是什么,如是进行主要功能测试还是详细测试等等,项目什么时候过来,有无产品需求说明书或说明文档,各个模块对应开发人员是谁及联系方式等等。在这个过程中要特别注意几点(这也是工作中遇到的问题):项目中的功能可能有些是直接从其他开发团队引进的,如图片服务器,当我们发现图片服务器bug时,上报bug时对应的开发责任人是谁,如果是其他组的开发人员,负责人是否提前与他们沟通,毕竟这不是他们本组的项目,可能出现不接或者不处理情况;召开测试和开发人员会议,或者直接与开发人员负责人沟通,统一对bug的定义,之所以这么说是因为我遇到过一个接口测试的项目,开发人员提供一个demo,让我们测试接口调用是否正常。我是临时接的这个项目,之前已测试几轮,因为不能看源码,就与开发人员沟通,因为有些缺陷看起来是提供的demo问题,但是接口有返回码,函数对输入值的具体处理或者是否处理我们不知道,为避免遗漏bug,如我们不能判断是demo问题还是程序问题就都上报,他们最终同意这个处理意见,通过这种策略测试,发现了一些前两轮没有发现的问题。

    当我们与老大和开发人员负责人沟通过之后,就开始执行测试计划,这里要强调下要注重制定测试计划过程,而不是测试计划文档结果。首先要进行任务分配,任务分配前要与各测试成员先沟通,了解下情况。就拿前阶段负责的项目来说,包括我自己有9个人参加项目测试,有个是经验丰富的老员工,个是刚入职的新人。因为对老员工平时的能力及负责的模块都很了解,与他们沟通后,就把相关的主要模块分配到个人,新员工主要是测试次线模块和学习。分配完任务后,制定测试方案,制定测试说明文档,测试说明文档包括项目的简单介绍,测试策略,测试重点,测试进度安排,各个测试人员负责模块,各个模块对应开发人员及联系方式,测试时间等说明,然后邮件发给各个测试人员。如果能联系到销售人员或者技术支持人员更好,邀请他们给我们测试人员讲解用户使用习惯及用户关注的主要功能,避免我们对主要功能的把握有偏差(可惜一直没有做起来)。

    接下来就是具体的准备工作了,这个过程是所有测试人员都参与的,如阅读相关文档,编写测试用例(老员工编写,新员工学习),评审测试用例,搭建测试环境等,这里略过。

    实际测试

    实际测试直接决定测试质量。作为测试执行负责人,我们大多数情况下也是参与测试的,执行负责人与测试执行人的区别就是要放眼于整个项目,把控整个项目的进度,这意味着你要承担更多职责。还是拿上面的项目来说,首先安排冒烟测试,我们知道冒烟测试的侧重点和观察点是项目的主要功能是否有问题,是否影响后续测试,根据冒烟测试结果评估风险,判断项目是否进入系统测试。但是对于新员工来说,什么是主要功能不是很好把握,如果有整理的有冒烟checklist好办,没有的话就很纠结,当时我就给他们讲解冒烟测试,如何去测试,有什么问题问老员工,让老员工辅导新员工,但是如果冒烟测试时间很紧的话,还是有点力不从心,老员工也没有那么多时间,真心感觉到基础的培训很有必要。接着进入系统测试,当时提出让每个测试成员每天反馈执行进度及发现的主要bug,这样方便把控项目,实时调节人力资源。但是有些同事可能工作太忙很容易忘记写,没办法只能硬着头皮每天一个一个去问执行进度怎么样,能不能按时完成测试任务等等。我得出的结论就是:作为测试执行负责人,能调节大家的积极性最好,不行的话,同事不积极,你就得积极。把发现的重大问题及时向上级反映,并每天报告测试进度,让领导知道你在做什么,做到什么程度。

    经手过几个项目发现,有些老同事执行测试时,不按照测试用例来走,完全按照自己的思路来走,这个问题我也想过,如果按照执行用例来走,提高不了老员工的积极性,不按照测试用例走,可能是测试用例是自己写的,每个测试点他们都知道,但是又怕同事遗漏测试点,到现场有问题。我自己的解决方法是等项目功能稳定以后按测试用例详细测试一遍,后面几轮按照员工自己执行策略来测,涉及到回归测试用例筛选和探索式测试等等。说是这么说,但是有些同事不是这么做的,感觉这个问题还是没有很好的解决,还在思考具体的解决方法,等待大侠指点。

    实际执行中还遇到新员工看不懂测试用例的情况(真心感觉到测试用例很重要,特别是团队中有新人),一般测试用例都是老员工来写,新员工执行。这里主要有两个原因,一是测试用例写的不详细明了,如是这种情况,及时更新测试用例;二是新人对业务不熟悉,可通过老员工给新员工讲解业务流程或实际测试前让开发人员给测试人员进行简要培训解决。主要还是编写出高质量的测试用例最重要,我一直认为测试用例的颗粒度取决于时间和用例的可重用性,测试用例是一定要写的,时间紧的话至少有个主要功能checklist,这也是工作成果物展示的一部分。具体测试用例的编写就不介绍了,这里要提醒下编写测试用例的人员,你们编写的测试用例的质量及语言描述真的很重要。

    还有就是与开发沟通问题,有些开发人员不是很好沟通,特别是新人与开发人员沟通时会遇到各种问题,这时测试执行负责人充当中间协调者的角色,一边向同事了解情况,一边与开发人员沟通,实在不行,就上报给老大,让老大跟开发人员老大沟通,现实中发现一个很奇怪的问题:测试人员软开发人员就硬,测试人员强硬点开发人员就很客气。当然和气最好,呵呵呵

    总结文档

    测试结束后,所有测试人员要上交测试用例执行报告或测试记录,测试执行负责人汇总后形成测试报告和总结,分析bug趋势及原因;编写主要问题说明,分析其风险,并反馈给上级和开发人员。整理出开发人员犯的低级错误,如reopenbug,给的程序有毒,打包有误等等,提交给老大,让老大与开发负责人沟通,避免犯同样的错误,影响我们的测试。

    测试结束后测试活动,我总感觉组内少了一个很重要环节:bug分类分析,持续跟踪。多数同事对提交的bug很少跟踪,提交了就提交了,没有尽量确保提交的bug修复了。缺少对bug没有分类,如哪些是功能问题,哪些是UI问题,哪些是控件问题,这样可以为下轮测试提供参考。还有就是开发人员置成Not A bug的缺陷,是测试人员理解错误还是开发人员的问题,以免下次犯同样的错误。这也是自己以后应该注意的地方。(个人感觉这个问题还是小组老大出面处理好点,因为我发现测试执行负责人的权利不够,呵呵)

     

    名称之所以为经验总结一,我想刚作为测试执行负责人不久,对测试执行负责人的职责及项目各个阶段的把握和掌控还有很多不足和需要提高的地方,但愿明年再写一篇总结二,对测试执行负责人的职责有不一样的看法和更多的经验总结。

  • 如何抓住测试主线及确定主要功能?

    没翅膀的飞鱼 发布于 2012-09-05 23:42:00

    最近一直在思考以下两个问题:

    1.       每个项目每个Build测试执行过程中如何把握测试主线?

    2.       哪些属于测试模块的主要功能?对于测试人员有哪些途径去积累判断测试模块的主要功能?

     

    对于第一个问题,看起来很简单,但是执行起来不容易,有时即使对于有经验的测试人员也很容易在测试过程忽略掉每一轮测试的重点,陷入一个小模块进行详细测试,而忽略了对这轮测试总体测试侧重点的把握。所谓测试主线就是该轮测试我们的测试重点,如冒烟测试我们主要看测试模块主要功能在正常情况下能不能实现,影不影响项目进入系统测试;本地化测试时,当主要功能较稳定时,我们关注的更多的是字符,乱码,拼写,提示信息,标点等等是否已本地化;测试后期我们更多的是验证bug,而不是进行详细的系统测试。实际测试中,我经常看到同事对每轮的测试主线把握的不是太好,如我们公司对每个项目每轮测试都要进行冒烟测试,在冒烟测试问题反馈中,经常看到上报的有些小的控件问题,如按钮没有完全展示出来,输入框对特殊字符及快捷键没有做处理等,这些确实是问题,但是这不是我们进行冒烟测试的初衷;一个项目的最后一个Build有时会看到同事会提好多建议,提建议固然很好,但是我们应该清楚,最后一个Build测试重点一般主要放在验证上轮Bug上,对于建议应该在前几个Build来提,而不是最后一轮,因为最后一轮意味着项目要投向市场,面临着市场压力,即使提了建议,开发人员为了保持主要功能的稳定性及降低风险,一般也不会修改这些建议的。

    那么我们如何知道每轮测试的侧重点?拿我们公司来说,每轮测试都会有更新文档和本轮测试重点描述的相关文档;如果没有这方面的文档,这时候就可以去询问测试项目负责人或测试执行负责人。当我们知道该轮测试重点后,结合测试时间,大致划分下每个时间段测试哪些模块,具体执行中牢记本来测试重点,从负责的整个测试模块来把握测试主线,尽量避免被一个小模块拖累了整个项目的测试进度。

     

    关于第二个问题:哪些属于测试模块的主要功能?我的理解是这里的主要功能是由用户的使用频率和这个功能失效对用户的影响共同决定的,举个简单例子,我们经常提到的UI测试,一般UI的关注点在于美观性,控件类等问题,如进入tab页后信息的展示,这个对功能的使用没有影响(功能已经实现),但是用户进行相关操作时直接就可以看到这些信息如何的展示,用户看到和使用到的频率很高,如果信息的展示不是很好,就会直接影响用户对我们产品的使用信心。决定主要功能的是用户,所以对于测试人员有哪些途径去积累判断测试模块的主要功能也是从如何了解用户习惯展开的,总结了以下途径:

    1、               直接与用户接触了解用户使用习惯,了解用户主要关注哪些模块,这些模块这些点就是我们所说的主要功能。(对于我们公司很少有这种机会)

    2、               关于1是个很理想的状态,但是大多数情况下,我们测试人员是很少有机会接触到用户的。这个时候可以间隔性的请技术支持或者销售人员给我们介绍用户主要关注哪些模块及哪些问题的出现会使用户非常恼火以及现场问题收集等等,技术支持和销售人员对于用户的了解一般会比我们测试人员多。(这个途径也像老大建议过,但是一直没有做起来,导致现在对现场问题及用户习惯处在模模糊糊的状态)

    3、               看需求,这里的需求有产品需求说明书和用户需求说明书,通过需求说明书我们就可以知道用户的需求,优先级等,这些也是我们判断是否是主要功能的依据。

    4、               经验,这个主要就看我们对测试模块的熟悉程度。大家可能有这个经验,就是一个模块测试久了,对这个模块的总体把握,哪些相对重要在心里会有大致的区分,这个就要求我们在测试执行过程中,其他时间多了解我们的测试项目,哪些是主线,哪些是次线。(这种途径个人感觉存在一定风险,有时只是自我感觉是不是主要功能,实际上是不是-----

    5、               向以前测试该模块的测试人员学习,询问;向小组领导请教,一般测试领导对模块主要功能的把握比较准

    6、               看产品使用说明书,当我们刚接手一个新模块时,还没有对该模块形成所谓的经验,这时候我们可以看看使用说明书,了解该模块,使用说明书一般是技术支持人员来写(我们公司如此,其它公司不太清楚),写的角度也可能是从用户角度出发,对我们对一个模块主要功能的判断有一定的启示意义。

    测试过程中,也遇到对主要功能把握不准的情况,请教老员工,老员工说过最多的就是:经验。其实我很反感这句话,对于新人能不能告诉我们掌握主要功能的途径,或者说经验积累的方法,通过哪些途径去积累这些经验,而不是动不动就那经验来显摆,这样才能让新员工快速积累这方面的经验,抓住主要功能,少走些弯路,快速成长起来,这里谴责下这些不负责任的老员工,呵呵。

    以上只是自己的一点看法,如测试前辈有更好的途径和建议,请指导,共同进步,谢谢
  • 测试流程梳理

    没翅膀的飞鱼 发布于 2012-08-29 20:00:31

    主要针对半年测试工作中测试流程的梳理

        根据各项目测试任务过程中自己的总结和学习,这里介绍下测试各阶段的注意点。虽然以前也对测试各个阶段做了总结,但是感觉很散很乱,这里就整合一下以前的总结,根据整个测试项目的测试执行流程,希望能给作为测试执行新人在执行测试各阶段任务时提供一点参考,也算是对工作半年后的工作总结。(主要是结合本公司的测试流程来讲)

       一个项目的到来首先要进行的是冒烟测试,所谓冒烟测试就是系统在进入全面详细的测试前进行的预测试,测试过程不像系统测试那样详细深入的按照测试用例来测试,冒烟测试的时间一般都比较短,要准确判断一个项目能不能进入详细的测试,保证发布出来的版本基本功能都能实现,冒烟测试对测试人员的要求很高,冒烟测试可以说是麻雀虽小五脏俱全。测试人员要知道哪些是该版本要完成的主要功能,优先级较高的测试用例有哪些,哪些测试点容易导系统或者软件崩溃,这些都需要一定的测试经验。对于不同轮次的冒烟测试,测试侧重点也不同,对于前几轮冒烟测试,主要关注项目的主要功能点,优先级别较高的功能点;对于即将发布前的一轮,主要是验证一下以前的bug是否都已修复,主要功能是否正常。执行完冒烟测试,判断版本是否可以进入系统测试,可以把自己的冒烟测试结果反馈给负责人,负责人做决定;自己心中也应该有度量标准:有人总结说:执行冒烟测试没通过的测试用例占冒烟测试总用例的20%左右,表示冒烟测试不通过。我认为此时也应考虑没有通过测试的功能点的重要性。

       如果项目冒烟测试没有出现大的问题,就可以进入系统测试。从产品进入系统测试到产品发布,一般都是要经过多轮系统测试。对于前几轮测试应该把主要的测试点集中在新增功能及更新的功能点以及主要功能点上,对于一些深入的细节方面的测试可以放到接下来的几轮中来测试。如果按照测试用例一条条的执行,时间可能来不及,有些项目主要功能点没有测试到,到产品后期发现严重的bug,那么修复缺陷的代价是比较高的。这里也有一个问题就是可能产品一轮一轮的测试,越到后面轮次的测试时间越紧,因为每轮都要进行主要功能的测试和验证上轮发现的bug,可能一些深入的细节方面的测试还是没有时间来测试,这个就需要测试人员合理安排自己的测试时间,并且通过测试工具或者引入新的测试方法来提高自己的测试效率,花较短的测试时间保证测试覆盖率和产品质量。

       测试过程中,要与小组内其他测试人员时刻保持沟通,整个测试部基本上都是多人测试同一个测试对象,相互负责的模块之间都有直接或间接的联系,一个人执行测试用例的过程中可能会对其他人负责的模块测试有影响。例如在执行BS配置客户端组织资源模块测试用例中,增加修改删除设备,服务器等操作,就会对负责录像管理,报警管理等模块的人员的测试结果有影响。当出现BUG时,要分析可能是哪些问题引起的,排除已知设备,SDK等方面的原因,要及时与其他人员沟通,是不是其他人员的操作影响了自己负责模块的测试结果等,试着学习分析定位问题。发现BUG时,总结下是不是这个BUG与已上报的BUG是同一个原因引起的;当自己在执行测试用例时发现其他测试人员负责模块的BUG时,要告知,看看这个问题他有没有发现。在测试过程中,所有的测试人员就是一个team,要相互沟通相互帮助协作完成任务。

        当执行完某个模块的测试用例时,总结下BUG容易出现在哪些地方,与测试过该模块的老员工交流,问问当他测试这个模块时,发现的BUG主要集中在哪些地方,是不是与自己一致,如果不一致的话,再测测老员工说的那些容易出现问题的地方,是不是自己执行测试用例时遗漏了,还是那些问题已经被修正过。执行完测试用例后,查看编写的测试用例有没有遗漏点,时间允许的话,还可以从网上收集些相关模块的测试资料,学习其他公司测试人员测试相同模块时的测试注意点,与我们公司测试点比较,发现共同点和不同点,不断完善和维护我们的测试用例,并将其用在自己的测试过程中,更好的保证公司产品的质量。

       一个项目一轮一轮的测试可能会产生厌倦,在最后几轮的测试中可以引入探索式测试,一则可以作为系统测试的补充,提高测试覆盖率;二则可以增加测试的乐趣,提高测试热情。探索式测试简单的说就是: 测试人员根据应用程序所提供的信息自由发挥,不受限制,不受任何约束的探索程序的各种功能,主要强调测试人员个人自由和责任的测试方法。运用探索式测试方法准备测试一个模块时,分析该模块的特点和以前用各方法的有效性来确定运用哪种全局探索式测试方法,把总体测试策略确定下来;在测试过程中,学会使用局部探索式测试法,辅助测试执行测试中即时做出决定,注重测试中如何做抉择,应注意的测试细节等。把全局探索式测试各方法做成checklist,查看系统测试,执行的系统测试用例中的遗漏点,这样可以强化测试对象的使用场景,不受任何限制去测试,也让测试更有乐趣,更能提高测试覆盖率,保证产品质量。

       在我们执行系统测试过程中,确定测试对象哪个模块使用哪种测试法,将测试对象功能与测试技术方法结合起来,达到匹配平衡。特别是针对升级版本项目,要给予持续关注,刚开始时,运用各种测试法,然后跟踪,找出各模块哪个测试法最有效,可以以发现的bug数来衡量测试法的有效度,利用测试策略来组织实际测试。这样在接下来的版本测试中,可以更有效更有针对性的去执行测试方法,提高测试质量和效率。作为测试人员要留意身边的点滴,把生活与工作结合起来,把生活中的经验用到测试中来,毕竟我们生活的时间比测试的时间要长十几年甚至于几十年,总结经验,认真留意,强化测试场景,学会总结测试方法,构建适合自己的测试方法。
    -----写于2011年末
  • 一年工作回顾及总结

    没翅膀的飞鱼 发布于 2012-08-26 10:27:56

    一年回顾:

    去年74号入职到现在已经有一年零2个月了,一直想写下一年工作回顾及总结,但是每次打开文档时总是以各种理由推后,一来是想写的太多但是又不知从哪里写起,二来是总想把自己的一年工作经历写的真实好看一点,以至于推到现在才写这个总结及回顾,昨天一个大学玩的比较好的同学跟我讲起了他的创业,我也趁今天好好回顾总结下过去的一年,想到哪就写到哪吧。

    本人是自动化专业,踏入测试这个行业还得从大学计算机四级说起,大学有大量的空闲时间,于是就问学长考什么证有用,也为毕业找个好工作做准备,学长告诉我测试是个新兴的职位,考软件测试工程师对以后进入这个领域很有帮助,于是就报考了计算机四级(软件测试工程师),最后也顺利拿到证书;正是因为考这个证对软件测试有了基本的认识,但是这些认识只是理论知识的了解,实际的测试技能几乎为0。大四开始找工作,因为大三去一家公司当技术员实习生,对本专业的行业实在不敢兴趣(主要还是不喜欢进车间听大型机器的声音,呵呵呵),在干净的办公室对着电脑工作一直是我所向往的,也自认比其他应届生对测试领域多了解一些,就有意无意的投软件测试这个职位,。找工作很顺利(得意一下),拿到的offer也很多,有格力,华为,美的,科大讯飞,京东方,最后经过多方面考虑去了科大讯飞。在科大讯飞实习一个月,让我学到了很多,更关键的是认识了现在的女朋友,呵呵呵。科大讯飞的测试有点像敏捷测试流程,主要进行集成测试,测接口,使用各种脚本语言,给我印象最深刻的是在实习期间,我们部门老大跟我讲:我们公司的自动化程度已经达到100%,当时不是太明白,现在想起来感觉有点吹嘘,更有点扯。因为这个公司是个快速发展中的公司(公司总测试人员有150人左右,测试人员规模还是很大的),所以对新人来说进步很快,这个快主要是我根据我与女朋友比较得出的,我们两个都是去年毕业的,现在她能熟练掌握性能测试,功能自动化测试以及对整个测试项目的把控,现在她自己也带了几个小弟,独立负责一个产品线的测试。想想刚刚毕业一年就可以负责一个产品线的测试,在我现在的公司里几乎是不可能的。听女朋友讲天天加班,导致离职率很高。后来因为找到了工资更高的公司,于是就跳到现在的公司。

    在现在的公司主要负责平台系统测试,B/SC/S架构的都测,但是主要以web测试为主,包括系统测试,稳定性测试,性能测试。刚来公司负责的第一件事情就是测试环境维护,首先是装系统,大学都是用系统集成盘来装,像驱动什么的都不要自己动手去下,但是测试需要一个纯净的操作系统,要用纯净的系统盘装好系统,然后根据PC机主板及网卡,显卡,声卡,芯片组等去下载相应的驱动安装,这些听起来很简单也很容易,但是要是同时管理40台左右的PC机就不那么简单了,于是去学习系统备份,恢复,封装,再把备份的镜像做个备份中心集中起来管理;为防止病毒感染影响测试及杀毒软件与测试项目的兼容性问题,采用共享及U盘禁用方法解决,测试中跑出问题学习判断是不是环境引起的(有些PC机很老了),如果是机器的问题判断是什么问题引起的:虚拟内存不足,配置不够,内存条有问题,显卡坏了等等。因为长期进行测试环境搭建,也掌握了哪些测试机适合进行哪方面的测试,测试环境搭建需要注意哪些问题,什么样的测试需要什么样的环境等,现在组内所有项目测试环境基本上都是我搭建的,对于测试过程中遇到的环境问题现在自己也基本能搞定,最近重新学习操作系统相关知识,希望对操作系统有更深入的认识。

    一年来看过的书也有20来本吧,学习的东西很泛,但是都不是很深入,这个可能跟大学没有掌握相关知识有关,学习了计算机网络,操作系统,数据库,HTML以及测试中需要的一些知识技能:需求评审, 需求分析,需求提取,测试分析,测试用例设计以及测试执行,缺陷跟踪,对探索式测试,安全测试,稳定性测试,性能测试,自动化测试也了解一些;这些知识的学习基本上都是自己工作之余自学的,实际工作中学到的业务知识很多,但是要是讲到纯技术方面的不是很多。一年的工作经历让我对测试和工作认识很多,测试被认为是没有技术含量的工作,这个有没有技术含量不是别人定义的,是我们自己定义的,如我经常鼓励自己的话就是:我们发现bug,开发人员修改bug,开发人员可以用不同的方法修改bug,我们也可以用不同的方法发现bug,天天点点鼠标,只要你能点出bug,点出别人不能发现的bug,你就是一个好的tester;软件中不是没有bug,只是我们还没有找到发现bug 的方法。一年来对测试项目各个阶段的把握和掌握很有自己的心得,如需求提取方法,测试点分析,测试用例设计以及具体执行过程中注意的问题,bug上报注意事项等等,也许好多人会说这些是一个测试人员最基本的要求,但是并不是每个人都会对自己的测试方法进行改进,测试过程进行优化。

    一直以来都想把新学习到的知识运用到实际测试中,向领导建议整个组的测试流程改进,现场问题收集,测试用例的更新简化(公司的测试用例设计几乎用的都是穷尽的方法),增加数据库测试等等,但是一直没有做起来,有时候明明知道这样做能够更好的进行测试,更有实际意义,也更有效率但是就是不做,真不理解。

    最近也一直在反思自己一年的表现,感觉一年来进步是进步了,但是技术的提升没有想象的那么快,有时候真的很急。但是想想技术本来就是一个积累的过程,不可能一蹴而就,需要自己坚持积累,坚持学习,不断总结,调整好自己的心态,工作中要学习的还很多,需要自己用心去发现问题,去学习优秀员工良好的测试心态,为人处事的心态,慢慢的把自己沉淀下来,去除测试小生的鲁莽向心态沉稳的测试大牛迈进。

    一年总结:

    优点:

    1、    经常逛测试论坛和QQ测试交流群,跟同行交流,了解测试领域新技术

    2、    每天保持阅读书籍的习惯,学习新的技术,引入到实际测试中

    3、    善于总结,反思自己的测试方法及建立适合自己的测试方法

    4、    能够按照设定目标坚持学习、

    不足:

    1、    心态还不是太成熟,需要提高,不要把什么事情都写在脸上,不要什么话都说

    2、    与老员工的交流不够,没有充分利用什么资源学习测试技巧

    3、    学习的东西泛而不深,需要深入某一方面学习

    需要牢记:

    1、    不在其位不谋其政

    2、    说话张弛有度

    3、    学习的东西为现在所用,不要为跳槽做准备

    4、    不被嘲笑的梦想是不值得追逐的,加油

  • 这到底是不是Bug?

    没翅膀的飞鱼 发布于 2012-04-22 10:05:08

    感觉这篇文章不错,针对发现的一个问题是不是bug时的一些解决方法,值得学习,就以原创形式转载,请大家见谅,也谢谢作者Tester Chen分享。

    随着软件行业的快速发展,以及客户、市场的高要求,软件本身的复杂度、要求不断提高。这一现象也直接导致以前只有大中型公司才配备的测试人员,现在在越来越来越多的小型公司也开始出现。
    小公司测试人员的出现,一方面是为了适应产业的发展需求;另一方面也是为了提升产品质量、加强公司的竞争力,保证公司不被市场所淘汰。但这样一来也就直接增加了公司的管理、人力及资金成本(测试人员的薪水虽然相对比开发人员低,但也是一个不小的数字);最后因为小公司制度及管理的欠缺,暴露出很多问题,往往直接或间接的导致开发、和测试的不和谐,这也是我们今天讨论的话题。

    这个是缺陷!这个不是缺陷!
    对于是不是缺陷这个话题往往被很多人很厌恶,大家都厌恶谈论这个话题,因为谈及他往往令人不愉快,但很多的时候他却在我们身边真实发生。
    测试人员认为某个情况是缺陷,但开发人员认为这个不是缺陷,而争论具体的情形在需求中也没有明确的描述,公说公有理,婆说婆有理,说不清了!如果只是开发、测试对于工作上理解的差异还好,但往往争执由此开始,矛盾也就由此产生,不和谐的气氛由此埋下种子。

    出现上述的情况的原因有几种:
    ①公司在没有对原始需求进行评审、整理、并书面化形成文档(需求也是需要测试的,这点很重要)
    ②公司完全没有需求这一档子事,完全在没有需求的情况下进行开发、测试(走一步看一步的情况)
    ③开发、测试对需求的理解存在差异(开发、测试没有良好的沟通)
    ④需求本身的定义存在二义性(与①相关,没有对需求进行测试)
    ⑤个人的性格与情绪

    问题出现了,如何解决?
    不管是开发人员还是测试人员
    ①思想要保持统一的认知,我们所做的都是为了公司,为了我们的产品,任何的争论都不存在任何的个人感情与感情色彩
    ②出现问题时,都要先从自身找原因,很多时候往往是因为我们自己的简单思维而导致,所以,当你在工作中对某个事情存在疑问时,多问自己几个为什么,再向他人请教,或回复他人
    ③我们讨论的只是问题,不直接关系到个人的工作能力与工作作风,人非圣贤,有错就改,并不失面子

    当无法确认是否为缺陷时,测试人员
    ①发现无法确认的缺陷时,如果有其他的测试人员可以征求其他测试人员的意见(同行评审,同行评审往往能发现80%的问题),如果彼此都认为此应该是缺陷时,可以找到相应的开发人员进行讨论。如果开发人员同意你们的意见,则可以提交缺陷,着手修复(如涉及比较重大的业务逻辑时应该要向上级汇报,申请确认)
    ②如果开发(甚至多位开发人员)对缺陷不认可时,我们可以向测试组长(或测试总监)请教,请求对缺陷进行确认,如果领导和开发人员都认为此不是缺陷,并且无修复的必要时,我们可以保留我们的意见,同时记录下此缺陷(到后期如果有时间再进行评审)
    ③如果测试组长(或测试总监)也认为此是缺陷,但在无论如何解释的情况下开发人员仍不认可时,我们可以由测试组长(测试总监)与开发项目经理(技术经理)进行交涉、确认,最终确认缺陷情况
    ④如果有必要,我们可以邀请开发、测试、需求(如果有)、产品(如果有),甚至技术总监(CTO)进行开会(需求或缺陷)评审
    ⑤最后,也是最重要的一条,不管是开发,还是测试,都不要越级汇报

    另外,有部分许多公司把缺陷作为开发人员和测试的员的业绩指标,在某些大公司这些确实是在施行、也是可行的,但在中小型公司或管理达不到CMMI4或5的情形时,我个人不赞同那样的作法。因为你不是他,你就做不到他……
    而你那样做产生的直接结果就是让开发和测试从此不和谐,彼此勾心斗角,何必呢?!

    最后,要相信办法总是比问题多,每一个问题都有至少一个解决办法!

    原文链接:http://www.cnblogs.com/hncjp1989/archive/2012/04/14/2447533.html

  • 测试环境搭建及维护

    没翅膀的飞鱼 发布于 2012-04-14 17:22:17

    搭建良好的测试环境是执行测试用例的前提,也是完成测试任务顺利完成的保证。测试环境大体可分为硬件环境和软件环境,硬件环境包括测试必须的PC机,服务器,设备,网线,分配器等硬件设备;软件环境包括数据库,操作系统,被测试软件,共存软件等;特殊条件下还要考虑网络环境,比如网络带宽,IP地址设置等。

    搭建测试环境前后要注意以下几点:

    1> 搭建测试环境前,确定测试目的

    即是功能测试,稳定性测试,还是性能测试,测试目的不同,搭建测试环境时应注意的点也不同。比如要进行功能测试,那么我们就不需要大量的数据,需要覆盖率高,测试数据要求尽量真实,这对硬件环境配置的好坏要求不是太苛刻,为提高覆盖率,就要配置不同的硬件环境。如要进行性能测试,就需要大量的数据,测试数据应尽可能的达到符合实际的数据分配,这时可能需要大量的设备来给测试对象施加压力,要提前准备大量设备。

    2> 测试环境时尽可能的模拟真实环境。

    这个要求对测试人员要求很高,因为很多测试人员没有去过用户使用现场,要完全模拟用户使用环境根本不可能。这时我们就应该通过技术支持人员,销售人员了解,尽可能的模拟用户使用环境,选用合适的操作系统和软件平台,了解符合测试软件运行的最低要求及用户使用的硬件配置,了解用户常用的软件,避免所有配置所有操作系统下都要进行测试,没有侧重点,浪费时间。这样一方面,可以在测试执行过程中发生软件产品与其他协同工作产品之间的兼容性,避免软件发布给用户之后才发现的问题;另一方面也可以用来检验产品是不是用户真正需要的。多说情况下,测试环境都是真空环境,完全纯净的平台,测试时,没有问题,一旦拿到现场,与其它软件并存,硬件配置等原因,问题多多,这个就是搭建测试环境时没有考虑用户的使用环境。

    3>确保无毒环境

    我测试过几个项目都是因为搭建的测试环境感染病毒,导致测试软件经常出现莫名的崩溃,运行不起来等现象,导致测试中断。这是杀毒是必要的,但是杀毒的时间也应掌握好,具体可按照下列步骤:选择PC-à安装操作系统—>安装杀毒软件杀毒—>安装驱动程序及用户常用软件及浏览器à杀毒à安装测试软件—>杀毒,安装测试软件后杀毒,要注意如果我们不是使用正版杀毒软件,很可能我们安装的测试软件的一些文件被当做可疑文件或者病毒被清除,导致测试软件直接不可用。要确保杀毒软件正版,如果不是正版,建议在安装测试软件前,卸载掉杀毒软件。测试过程中,要注意U盘的使用以及测试环境与外网的控制。每次使用U盘前,要在其它机器上先杀毒;当测试环境与外网联通时,不建议使用共享方式互访测试机。当小范围PC机与外界隔离起来做测试环境时,可以禁掉可移动存储设备的使用,只允许一台PC使用,这台PC机上安装杀毒软件,进行资料传送时,先拷贝到这台机器上杀毒,然后以共享的方式进行资料的传送。经过这些措施可以很好的防止病毒感染测试环境,确保无毒环境。

    4>营造独立的测试环境

    测试过程中要确保我们的测试环境独立,避免测试环境被占用,影响测试进度及测试结果,比如设备连网后,是不是其他测试组也在共用,这样就可能影响我们的测试结果。有时开发人员为确定问题会使用我们的测试环境,这样会打乱我们的测试活动,更严重的是影响测试进度。为避免这种情况,测试人员在提交缺陷单时,提供详细的复现步骤以及尽可能多的信息。让开发人员根据缺陷单,在开发环境中复现和定位问题。

    5>构建可复用的测试环境

      当我们刚搭建好测试环境,安装测试软件之前及测试过程中,对操作系统及测试环境进行备份是必要的,这样一来可以为我们下轮测试时直接恢复测试环境,避免重新搭建测试环境花费时间,二来在当测试环境遭到破坏时,可以恢复测试环境,避免测试数据丢失,重现问题。构建可“复用”的测试环境,往往要用到如ghostDrive Image等磁盘备份工具软件;这些工具软件,主要实现对磁盘文件的备份和还原功能;在应用这些工具软件之前,我们首先要做好以下几件十分必要的准备工作:

    A.确保所使用的磁盘备份工具软件本身的质量可靠性,建议使用正版软件;

    B.利用有效的正版杀毒软件检测要备份的磁盘,保证测试环境中没有病毒

    C. 对于在测试过程中备份时,为减少镜像文件的体积,要删除掉Temp文件夹下的所有文件,要删除掉Win386.swp文件或_RESTORE文件夹,这样C盘就不至于过分膨胀,选择采用压缩方式进行镜像文件的创建,可使要备份的数据量大大减小;

    D. 最后,再进行一次彻底的磁盘碎片整理,将C盘调整到最优状态。

    对于刚安装的操作系统,驱动程序等安装完成之后,测试程序安装之前,也要进行备份工作,这样可以防止不同项目交叉进行时,当使用相同操作系统时,直接恢复即可。

    完成了这些准备工作,我们就可以用备份工具逐个逐个的来创建各种组合类型的软件测试环境的磁盘镜像文件了。对已经创建好的各种镜像文件,要将它们设成系统、隐含、只读属性,这样一方面可以防止意外删除、感染病毒;另一方面可以避免在对磁盘进行碎片整理时,频繁移动镜像文件的位置,从而可节约整理磁盘的时间;同时还要记录好每个镜像文件的适用范围,所备份的文件的信息等内容。

    测试环境的搭建和维护处在重要的位置,它的好坏直接影响测试结果的真实性和准确性。维护测试环境需要大量的精力,不是一个人能完成的,需要我们大家积极配合。
  • 常用测试用例设计方法之间的微妙联系

    没翅膀的飞鱼 发布于 2011-12-11 19:32:16

    最近半个月利用工作之余一直学习常用的测试用例设计方法:等价划分法,边界值法,域分析法,输出域分析法,场景法,正交试验法,组合分析法,分类树法,因果图法,判定表法,状态迁移法,错误推测法等,学的有点杂,感觉也有点乱,最近几天一直在思考这些常用设计方法之间到底存在着何种关系,又有什么不同。

    总体给我的感觉就是测试用例的设计思路是:先从穷举法开始,如果测试特性输入不是太多,我们可以用穷举法把每一种可能的情况都测试一遍,以达到100%的覆盖率,但是我们知道,在测试行业,达到100%的测试覆盖率几乎是不可能的。一是现实中测试特性的输入一般都是很多,用穷举法测试代价太大,执行起来也不现实;二是即使是很少的测试特性输入,但是要把现实中的各种情况都测试一遍,执行起来也比较困难。这个时候,就出现了各种测试用例设计方法,利用这些方法对大量的测试用例进行裁剪,达到我们可以接受的范围,当然这是以牺牲测试充分性为代价的,我们要做的就是用尽可能少的测试用例来达到最大的测试充分性。这里要注意尽可能少的测试用例不是指越少越好,有时候我们为了提高测试覆盖率,就不得不增加测试用例数;这里指将测试用例裁剪到我们现实中可以执行完成的范围,达到这个范围后,再考虑测试覆盖率的问题,在测试用例数和测试覆盖率之间寻求一种平衡。

    先来看等价划分法,它是对系统的输入域进行等价划分为若干部分,然后从这若干部分中选择少数测试输入数据代表该部分执行测试,以减少大量的测试用例。使用此方法我们有4个有用的分解数据的启发式关注点:数值的范围,变量的相似度,唯一数值和特定数值。但是用这种方法设计的测试用例不充分,因为它没有考虑输入域划分时的边界情况,这时就可以用边界分析法对其进行补充,以提高测试覆盖率。为达到上面同样的效果,有人将等价划分法和边界值分析法结合起来便形成了现在的域分析法,域分析法通过引入上点,离点和内点的概念可以用更少的测试用例达到与等价类和边界值分析法相同的测试效果。为了提高测试的充分性,可以在测试过程中引入输出域分析法对测试用例进行必要的补充。

    这里简要说一下域分析法与输出域分析法的关系,域分析法是针对输入域进行的,输出域分析法是通过输出反推输入,以达到对测试特性输入域的测试进行补充,提高测试覆盖率。

    上面的设计方法主要是针对单个因子输入的情况,但是现实中我们经常遇到需要覆盖多个变化参数因子的场景测试,更多的是要求对各组合的测试。组合分析和正交试验法就是对多输入因子的设计方法,组合分析原理是每个参数的每个值只需要和其他参数至少配对一次就行了,侧重在随机组合,即把每个因子的状态列出来,用PICT工具完成随机组合,把这些组合转化为测试用例;而正交试验法更多是对任意多个因素取值组合实施“等概率”覆盖,以便我们得到的实验样本均匀的分布在样本空间,即把每个因子的状态罗列出来,对其进行加权,为减小测试用例,删减权值较小的,再对照正交表,把各因子的状态填到正交表中,即可得到各测试用例。有时候,分类树方法也可以用在多因子输入设计测试用例中,先对各因子对象进行分析,然后分析每个因子的输入空间,对其输入空间进行分类,画出分类树,组合测试用例,这个过程中掺杂着对单个因子输入情况的测试用例设计方法:等价类,边界值以及域分析法。对于多个变化参数因子的场景测试也可以用分类树法,先识别出测试对象并分析输入空间,再对测试对象的输入空间进行分类,最后画出分类树组合测试用例。分类树法更加直观,再辅以分类树工具CTE,设计测试用例更加方便实用。

    以上不管是对单个因子输入还是多因子输入情况的测试用例分析方法,更多的关注的是对输入域的分析。这些分析方法不需要深入了解测试对象的执行流程及各输入因子以及输入输出之间的联系,但这会给后期执行测试用例带来一些麻烦,当执行测试用例过程中,如果发现了bug,不好定位问题,各测试因子之间的联系不直观,不知道哪个环节出现了问题。这时可以用一些侧重于图形化或者流程的测试用例设计方法,如流程分析法,因果图法,判定表,状态转换法等。

    对于系统测试,感觉流程分析法与状态转化法,除了在画流程图和状态转换图中遵循的规则不同外,差别不大。可能流程分析法,更多关注流的流向,状态转换法注重测试对象的各个状态和转换条件,有时候感觉状态转换法要考虑的测试对象更多,这两种方法都要求对测试对象的执行流程很熟悉。各个因子之间的关系也很直观明了,有助于对后期执行测试用例发现BUG后,定位bug。

    因果图法一般是和判定表结合使用的,因果图法的结果就是产生判定表。对于多输入因子的测试对象,先标识输入和输出(包括各种情况)----》画出因果图----》将因果图转换为判定表---》简化判定表-----》生成测试用例。这个过程中也可以单独使用判定表,根据条件桩和动作桩写出各种条件项和动作项,这个过程跟穷举法类似,然后通过把无效的测试用例去除,并把相似的列进行合并,减少测试用例。单独使用判定表过程简单,但是对各输入因子之间,输入输出之间的约束关系不够直观明确;使用因果图法+判定表的结合方法,过程有点繁琐,但是输入输出,以及输入和输出之间的因果关系,输入和输入之间的约束关系比较明确。这个要根据个人喜好,选择其设计方法。

    最后介绍下场景法和错误推测法,这两种方法可以对采用上面方法设计的测试用例进行补充,以达到充分测试。软件是用事件触发达到控制流程的,事件触发时的情景形成场景,而同一事件不同的触发顺序和处理结果形成事件流,这个事件流就是场景法。有些人认为场景法可以作为独立的测试用例设计方法,我不赞同这种看法,场景法要求测试人员充分发挥对用户实际业务场景的想象,但是人毕竟不是机器,再缜密的想象也很难设计出覆盖性较强的测试用例,可以把它作为其他他测试用例设计方法的补充,利用测试人员的实际业务场景的想象思维,对测试用例的遗漏点进行必要的补充。错误推测法,是一种基于测试人员经验和直觉来推测软件中可能存在的各种错误,从而有针对性的设计测试用例的方法。利用错误推测checklist,对测试用例进行补充。

    通过上面分析知道,当穷举法设计的测试用例在现实中不可能执行时,我们就应该采用其他设计方法在尽量不影响测试覆盖率的情况下对测试用例进行裁剪。各种方法有各种方法的特点,使用时考虑的角度,考虑的点不同,总的来讲就是在设计测试用例中,不断的优化设计流程,用最少的测试用例达到最大的测试覆盖率。上面只是对常用测试用例简单做了总结,要深入了解还得在实际项目测试中不断去摸索,思考,总结。

    写于2011-11-20

  • 探索式测试学习笔记之二:全局探索式测试法

    没翅膀的飞鱼 发布于 2011-12-11 19:30:27

    上一篇介绍局部探索式测试主要是帮助测试人员在执行测试用例时或者无测试用例时动态进行各式各样的局部决定,面对的是测试对象的一个测试点或者小的测试模块。这篇主要介绍全局探索式测试法,主要关于测试人员在全局方面所必须做出的各种决定,做出全局目标,用于指导以后的测试过程。

    我们知道探索式测试的目标是:

    1》  找出缺陷

    2》  强迫软件展现其能力

    3》  证明软件实现了哪些功能

    Whittaker又把全局探索式测试叫做漫游测试,把我们测试对象,比喻成我们将要旅游

    的一个城市。根据我们要访问城市各区域的目的,把城市各区域有分为:商业区,历史区,娱乐区,旅游区,旅馆区和破旧区。相应的把我们的测试对象,根据各模块的功能及特性,分为:商业区测试类型,历史区测试类型,娱乐区测试类型,旅游区测试类型,旅馆区测试类型和破旧区测试类型。

    商业区测试类型:

    对于测试来讲,商业区就是软件的启动及关闭代码之间,并包含用户所要使用的软件特性和功能,侧重于测试对象的主要功能及特性。

    主要测试方法有:

    1》               指南针测试法:主要要求测试人员通过阅读用户手册,场景及产品需求进行相关的测试

    2》               卖点测试法:对那些能够吸引用户的特性进行测试,至于哪些特性能够吸引用户,可以向销售人员咨询,或者拜访客户。

    3》               地标测试法:主要是寻找测试点,明确测试项,这里的测试点就是地标

    4》               极限测试法

    5》               快递测试法:要求测试人员专注于数据,即数据从输入到输出展现给客户或页面过程中,数据执行的流程。了解一个测试输入项输入后,经过哪些流程后展现给用户的,这些流程能否正确执行。

    6》               深夜测试法:当我们不对测试对象操作时,测试对象能否会自动完成各种维护任务,将数据归档,自动记录发生的异常情况等

    7》               遍历测试法:通过选定一个目标 ,然后使用可以发现的最短路径来访问目标包含的所有对象。测试中不要求追求细节,只是检查哪些明显的东西。

    历史区测试类型:

    指遗留的代码,或者在前几个版本就已经存在的软件特性,也指那些用于修复已知缺陷的代码,侧重于老的功能和缺陷修复代码。

    1》  恶邻测试法:对bug扎堆的地方进行遍历测试法及详细测试。

    2》  上一版测试法:检查那些在新版本中无法再运行的测试用例,以确保产品没有遗漏必需的功能。

    3》  博物馆测试法:重视老的可执行文件和那些遗留代码。

     

    娱乐区测试类型:

    在测试那些辅助特性。

    1》               配角测试法:测试中调节自己的测试注意力,使测试细化,具体,确保配角得到应有的重视。

    2》               深巷测试法:测试最不可能被用到或是那些最不吸引用户的特性。

    3》               通宵测试法:这个方法很容易和深夜测试法混淆,但是测试侧重点不同,深夜测试法是测试测试对象的自动处理能力;而通宵测试法是测试软件的长时间运行后,各功能模块是否正常,有点像稳定性测试。

     

    旅游区测试类型:

    快速访问测试对象的各种功能。有点像遍历测试法

    1》               收藏家测试法:收集执行一个测试点后的所有输出。确保能观察到软件生成的任何一个输出。

    2》               长路径测试法:确定测试目标,在到达目的地之前尽量多地在应用程序中穿行。把埋在应用程序最深处的界面作为测试目标。

    3》               超模测试法:GUI测试

    4》               测一送一测试法:测试同一个应用程序多个拷贝的情况。测试程序同时处理多个功能要求时,是否正常,各功能之间同时处理时,是否会相互影响。

    5》               苏格兰酒吧测试法:花一些时间参与用户之间的讨论,了解测试对象所处行业信息,深入理解测试对象。

     

    旅馆区测试类型:

    测试那些经常被忽略和测试计划中较少描述的次要及辅助功能。

    1》  取消测试法:启动相关操作,然后停止它。查看测试对象的处理机制及反应。

    如:esc键,取消键,回退键,shift+F4,关闭按键或者彻底关闭程序(从任务管理器中杀进程),重复同一个操作。

    2》  懒汉测试法:做尽量少的实际工作,让程序自行处理空字段及运行所有默认值。这个有点像深夜测试法。

     

    破旧区测试类型:

    对于这个区域的测试模块,就是输入恶意数据,破坏软件,修改配置文件等。

    1》  做一个破坏者,测试各种异常情况

    2》  反叛测试法:输入最不可能的数据,或者已知的恶意输入

    又分为:逆向测试法,歹徒测试法,错序测试法

    3》  强迫症测试法:重复测试

     

    终于介绍完了全局探索式测试法,测试中运用这种方法,可以使我们的测试更有趣,更有针对性,指导性。确定测试对象那个对象用那个测试法,将测试对象功能与测试技术方法结合起来,达到匹配平衡。特别是针对升级版本项目,要给予持续关注,刚开始时,运用各种测试法,然后跟踪,找出各模块哪个测试法最有效,可以以发现的bug数来衡量测试法的有效度,这样在接下来的版本测试中,可以更有效更有针对性的去执行测试方法,提高测试质量和效率,再辅以其他测试法提高测试覆盖率。这需要测试人员的用心观察,总结,经验很重要。

        学习完全局探索式测试法后,感觉作为测试人员要留意身边的点滴,把生活与工作结合起来,把生活中的经验用到测试中来,毕竟我们生活的时间比测试的时间要长十几年甚至于几十年,总结经验,认真留意,强化测试场景。
  • 探索式测试学习笔记之一:局部探索式测试法

    没翅膀的飞鱼 发布于 2011-12-11 19:27:17

    什么是探索式测试?

    简单的说就是: 测试人员根据应用程序所提供的信息自由发挥,不受限制,不受任何约束的探索程序的各种功能。主要强调测试人员个人自由和责任的测试方法。

    探索式测试的缺点是:测试人员可能在测试过程中没有重点,有些模块可能会重复测试,而有些会遗漏掉。

    这时必要的指导方法显得尤为重要,在指导方法的引导下,我们测试人员在测试过程中应时刻明确到底要测什么,实现什么功能。

    也就是说探索式测试是强化用户使用场景,测试过程多种多样,各种途径,各种方法,但是测试的目标要明确,测试程序的什么功能。

    探索式测试的指导方法主要有局部探索式测试法和全局探索式测试法,这里主要介绍局部探索式测试法。

    局部探索式测试法是辅助测试人员在测试执行测试中即时做出决定,注重测试中如何做抉择,应注意的测试细节等。

    局部探索式测试法在测试过程中应用应注意事项:

    1.   用户输入

          细节注意点:

    1>   开发人员喜欢编写正常功能代码,不喜欢编写错误处理代码。测试过程中应关注在错误输入发生时,应用程序的处理机制。

    2>   仔细阅读每一条错误提示信息,使用提示信息来引导测试深入

    3>  对于输入筛选器,检查是否实现了正常的功能,是否可以绕过屏蔽器等

    4>  对于空泛的通用错误提示信息,要反复测试相关模块,继续使用刚才引发异常的输入数据或者小修改,查看程序运行状况

    5> 合法输入和非法输入,常规输入和非常规输入,一般字符和特殊字符

     注:所有和ctrlaltesc等按键组合的字符都算特殊字符;每一个操作系统,编程语言,浏览器和运行时环境都会有一些特定的保留词,他们具有特殊的含义,对于测试输入框,应键入这些保留词。如widows下就有一些保留的设备名称:LPT1COM1AUX等。

    6> 默认输入和用户输入   可以进行默认值得删除,留下一个空白字段,查看程序处理机制

    7> 学会使用输出指导输入

    2.代码路径

    3.用户数据

         细节注意点: 1> 测试中药在很短的时间内,模拟产生实际使用时的大量数据

                           2> 尽量逼真的模拟用户数据的相互关系和结构

                          3>注意用户隐私的问题

    4.运行环境

      测试对象与具体应用程序的关系及相互作用。运行环境总体来说就是使用的操作系统和当前的配置
  • 求职面试问题巧妙回答

    andyfly_001 发布于 2011-02-26 12:53:58

    1、请你自我介绍一下自己好吗?
    回答提示:一般人回答这个问题过于平常,只说姓名、年龄、爱好、工作经验,这些在简历上都有。其实,企业最希望知道的是求职者能否胜任工作,包括:最强的技能、最深入研究的知识领域、个性中最积极的部分、做过的最成功的事,主要的成就等,这些都可以和学习无关,也可以和学习有关,但要突出积极的个性和做事的能力,说得合情合理企业才会相信。企业很重视一个人的礼貌,求职者要尊重考官,在回答每个问题之后都说一句“谢谢”,企业喜欢有礼貌的求职者。
    2、你觉得你个性上最大的优点是什么?
    回答提示:沉着冷静、条理清楚、立场坚定、顽强向上、乐于助人和关心他人、适应能力和幽默感、乐观和友爱。我在北大青鸟经过一到两年的培训及项目实战,加上实习工作,使我适合这份工作。
    3、说说你最大的缺点?
    回答提示:这个问题企业问的概率很大,通常不希望听到直接回答的缺点是什么等,如果求职者说自己小心眼、爱忌妒人、非常懒、脾气大、工作效率低,企业肯定不会录用你。绝对不要自作聪明地回答“我最大的缺点是过于追求完美”,有的人以为这样回答会显得自己比较出色,但事实上,他已经岌岌可危了。企业喜欢求职者从自己的优点说起,中间加一些小缺点,最后再把问题转回到优点上,突出优点的部分,企业喜欢聪明的求职者。
    4、你对薪资的要求?
    回答提示:如果你对薪酬的要求太低,那显然贬低自己的能力;如果你对薪酬的要求太高,那又会显得你分量过重,公司受用不起。一些雇主通常都事先对求聘的职位定下开支预算,因而他们第一次提出的价钱往往是他们所能给予的最高价钱,他们问你只不过想证实一下这笔钱是否足以引起你对该工作的兴趣。
    回答样本一:我对工资没有硬性要求,我相信贵公司在处理我的问题上会友善合理。我注重的是找对工作机会,所以只要条件公平,我则不会计较太多。
    回答样本二:我受过系统的软件编程的训练,不需要进行大量的培训,而且我本人也对编程特别感兴趣。因此,我希望公司能根据我的情况和市场标准的水平,给我合理的薪水。
    回答样本三:如果你必须自己说出具体数目,请不要说一个宽泛的范围,那样你将只能得到最低限度的数字。最好给出一个具体的数字,这样表明你已经对当今的人才市场作了调查,知道像自己这样学历的雇员有什么样的价值。
    5、你对加班的看法?
    回答提示:实际上好多公司问这个问题,并不证明一定要加班,只是想测试你是否愿意为公司奉献。
    回答样本:如果工作需要我会义不容辞加班,我现在单身,没有任何家庭负担,可以全身心的投入工作。但同时我也会提高工作效率,减少不必要的加班。
    6、如果通过这次面试我们录用了你,但工作一段时间却发现你根本不适合这个职位,你怎么办?
    回答提示:一段时间发现工作不适合我,有两种情况:①如果你确实热爱这个职业,那你就要不断学习,虚心向领导和同事学习业务知识和处事经验,了解这个职业的精神内涵和职业要求,力争减少差距;②你觉得这个职业可有可无,那还是趁早换个职业,去发现适合你的,你热爱的职业,那样你的发展前途也会大点,对单位和个人都有好处。
    7、谈谈你对跳槽的看法?
    回答提示:①正常的“跳槽”能促进人才合理流动,应该支持。②频繁的跳槽对单位和个人双方都不利,应该反对。
    8、工作中难以和同事、上司相处,你该怎么办?
    回答提示:①我会服从领导的指挥,配合同事的工作。②我会从自身找原因,仔细分析是不是自己工作做得不好让领导不满意,同事看不惯。还要看看是不是为人处世方面做得不好,如果是这样的话我会努力改正。③如果我找不到原因,我会找机会跟他们沟通,请他们指出我的不足,有问题就及时改正。④作为优秀的员工,应该时刻以大局为重,即使在一段时间内,领导和同事对我不理解,我也会做好本职工作,虚心向他们学习,我相信,他们会看见我在努力,总有一天会对我微笑的。
    9、你对于我们公司了解多少?
    回答提示:在去公司面试前上网查一下该公司主营业务。如回答:贵公司有意改变策略,加强与国外大厂的OEM合作,自有品牌的部分则透过海外经销商。
    10、最能概括你自己的三个词是什么?
    回答提示:我经常用的三个词是:适应能力强,有责任心和做事有始终,结合具体例子向主考官解释,
    11、你的业余爱好是什么?
    回答提示:找一些富于团体合作精神的,这里有一个真实的故事:有人被否决掉,因为他的爱好是深海潜水。主考官说:因为这是一项单人活动,我不敢肯定他能否适应团体工作。
    12、作为被面试者给我打一下分?
    回答提示:试着列出四个优点和一个非常非常非常小的缺点(可以抱怨一下设施,没有明确责任人的缺点是不会有人介意的)。
    13、你为什么要离开原来的公司?
    回答提示:①回答这个问题时一定要小心,就算在前一个工作受到再大的委屈,对公司有多少的怨言,都千万不要表现出来,尤其要避免对公司本身主管的批评,避免面试官的负面情绪及印象。建议此时最好的回答方式是将问题归咎在自己身上,例如觉得工作没有学习发展的空间,自己想在面试工作的相关产业中多加学习,或是前一份工作与自己的生涯规划不合等等,回答的答案最好是积极正面的。②我希望能获得一份更好的工作,如果机会来临,我会抓住。我觉得目前的工作,已经达到顶峰,即有升迁机会。
    14、你欣赏哪种性格的人?
    回答提示:诚实、不死板而且容易相处的人、有“实际行动”的人。
    15、你通常如何对待别人的批评?
    回答提示:①沈默是金,不必说什么,否则情况更糟,不过我会接受建设性的批评。②我会等大家冷下来再讨论。
    16、怎样对待自己的失败?
    回答提示:我们大家生来都不是十全十美的,我相信我有第二个机会改正我的错误。
    17、你为什么愿意到我们公司来工作?
    回答提示:对于这个问题,你要格外小心,如果你已经对该单位作了研究,你可以回答一些详细的原因,像“公司本身的高技术开发环境很吸引我。”、“我同公司出生在同样的时代,我希望能够进入一家与我共同成长的公司。”、“你们公司一直都稳定发展,在近几年来在市场上很有竞争力。”、“我认为贵公司能够给我提供一个与众不同的发展道路。”这都显示出你已经做了一些调查,也说明你对自己的未来有了较为具体的远景规划。
    18、对这项工作,你有哪些可预见的困难?
    回答提示:①不宜直接说出具体的困难,否则可能令对方怀疑应聘者不行。②可以尝试迂回战术,说出应聘者对困难所持有的态度——工作中出现一些困难是正常的,也是难免的,但是只要有坚忍不拔的毅力、良好的合作精神以及事前周密而充分的准备,任何困难都是可以克服。
    19、如果录用了你,你将怎样开展工作?
    回答提示: ①如果应聘者对于应聘的职位缺乏足够的了解,最好不要直接说出自己开展工作的具体办法。②可以尝试采用迂回战术来回答,如“首先听取领导的指示和要求,然后就有关情况进行了解和熟悉,接下来制定一份近期的工作计划并报领导批准,最后根据计划开展工作。”。
    分析:这个问题的主要目的也是了解应聘者的工作能力和计划性、条理性,而且重点想要知道细节。如果向思路中所讲的迂回战术,面试官会认为回避问题,如果引导了几次仍然是回避的话,此人绝对不会录用了。
    20、你希望与什么样的上级共事?
    回答提示:①通过应聘者对上级的“希望”可以判断出应聘者对自我要求的意识,这既上一个陷阱,又是一次机会。②最好回避对上级具体的希望,多谈对自己的要求。③如“做为刚步入社会的新人,我应该多要求自己尽快熟悉环境、适应环境,而不应该对环境提出什么要求,只要能发挥我的专长就可以了。
    分析:这个问题比较好的回答是,希望我的上级能够在工作中对我多指导,对我工作中的错误能够立即指出。总之,从上级指导这个方面谈,不会有大的纰漏。
    21、与上级意见不一时,你将怎么办?
    回答提示:①一般可以这样回答“我会给上级以必要的解释和提醒,在这种情况下,我会服从上级的意见。”②如果面试你的是总经理,而你所应聘的职位另有一位经理,且这位经理当时不在场,可以这样回答:“对于非原则性问题,我会服从上级的意见,对于涉及公司利益的重大问题,我希望能向更高层领导反映。”
    分析:这个问题的标准答案是思路①,如果用②的回答,必死无疑。你没有摸清楚改公司的内部情况,先想打小报告,这样的人没有人敢要。
    22、为什么选择我们公司?
    回答提示:曾经在报章杂志看过关于贵公司的报道,与自己所追求的理念有志一同。而贵公司在业界的成绩也是有目共睹的,而且对员工的教育训练、升迁等也都很有制度。
    分析:去面试前先做功课,了解一下该公司的背景,让对方觉得你真的很有心想得到这份工作,而不只是探探路。
    23、谈谈如何适应办公室工作的新环境?
    回答提示①办公室里每个人有各自的岗位与职责,不得擅离岗位。②根据领导指示和工作安排,制定工作计划,提前预备,并按计划完成。③多请示并及时汇报,遇到不明白的要虚心请教。④抓间隙时间,多学习,努力提高自己的政治素质和业务水平。
    24、除了本公司外,还应聘了哪些公司?
    回答提示:很奇怪,这是相当多公司会问的问题,其用意是要概略知道应徵者的求职志向,所以这并非绝对是负面答案,就算不便说出公司名称,也应回答“销售同种产品的公司”,如果应聘的其他公司是不同业界,容易让人产生无法信任的感觉。
    25、你还有什么问题要问吗?
    回答提示:企业的这个问题看上去可有可无,其实很关键,企业不喜欢说“没问题”的人,因为其很注重员工的个性和创新能力。企业不喜欢求职者问个人福利之类的问题,如果有人这样问:贵公司对新入公司的员工有没有什么培训项目,我可以参加吗?或者说贵公司的晋升机制是什么样的?企业将很欢迎,因为体现出你对学习的热情和对公司的忠诚度以及你的上进心。
    26、如果你被录用,何时可以到职?
    回答提示:大多数企业会关心就职时间,最好是回答“如果被录用的话,到职日可按公司规定上班”,但如果还未辞去上一个工作、上班时间又太近,似乎有些强人所难,因为交接至少要一个月的时间,应进一步说明原因,录取公司应该会通融的。

  • 如何进行WEB测试2

    piaolingxue423 发布于 2010-05-17 18:15:00

    和文本的对齐方式可能与打印出来的东西不一样。测试人员至少需要验证订单确认页面打印是正常的。

    4.6 组合测试

    最后需要进行组合测试。600x800 的分辨率在 MAC 机上可能不错,但是在 IBM 兼容机上却很难看。在 IBM 机器上使用 Netscape 能正常显示,但却无法使用 Lynx 来浏览。如果是内部使用的 web 站点,测试可能会轻松一些。如果公司指定使用某个类型的浏览器,那么只需在该浏览器上进行测试。如果所有的人都使用 T1 专线,可能不需要测试下载施加。(但需要注意的是,可能会有员工从家里拨号进入系统) 有些内部应用程序,开发部门可能在系统需求中声明不支持某些系统而只支持一些那些已设置的系统。但是,理想的情况是,系统能在所有机器上运行,这样就不会限制将来的发展和变动。

    采取措施:根据实际情况,采取等价划分的方法,列出兼容性矩阵

    5 安全测试

    即使站点不接受信用卡支付,安全问题也是非常重要的。Web 站点收集的用户资料只能在公司内部使用。如果用户信息被黑客泄露,客户在进行交易时,就不会有安全感。

    5.1 目录设置

    Web 安全的第一步就是正确设置目录。每个目录下应该有 index.html main.html 页面,这样就不会显示该目录下的所有内容。我服务的一个公司没有执行这条规则。我选中一幅图片,单击鼠标右键,找到该图片所在的路径"…com/objects/images"。然后在浏览器地址栏中手工输入该路径,发现该站点所有图片的列表。这可能没什么关系。我进入下一级目录 "…com/objects" ,点击 jackpot。在该目录下有很多资料,其中引起我注意的是已过期页面。该公司每个月都要更改产品价格,并且保存过期页面。我翻看了一下这些记录,就可以估计他们的边际利润以及他们为了争取一个合同还有多大的降价空间。如果某个客户在谈判之前查看了这些信息,他们在谈判桌上肯定处于上风。

    5.2 SSL

    很多站点使用 SSL 进行安全传送。你知道你进入一个 SSL 站点是因为浏览器出现了警告消息,而且在地址栏中的 HTTP 变成 HTTPS。如果开发部门使用了SSL,测试人员需要确定是否有相应的替代页面(适用于3.0 以下版本的浏览器,这些浏览器不支持SSL。当用户进入或离开安全站点的时候,请确认有相应的提示信息。是否有连接时间限制?超过限制时间后出现什么情况?

    5.3 登录

    有些站点需要用户进行登录,以验证他们的身份。这样对用户是方便的,他们不需要每次都输入个人资料。你需要验证系统阻止非法的用户名/口令登录,而能够通过有效登录。用户登录是否有次数限制? 是否限制从某些 IP 地址登录? 如果允许登录失败的次数为3,你在第三次登录的时候输入正确的用户名和口令,能通过验证吗? 口令选择有规则限制吗?  是否可以不登陆而直接浏览某个页面?

    Web应用系统是否有超时的限制,也就是说,用户登陆后在一定时间内(例如15分钟)没有点击任何页面,是否需要重新登陆才能正常使用。

    5.4 日志文件

    在后台,要注意验证服务器日志工作正常。日志是否记所有的事务处理? 是否记录失败的注册企图? 是否记录被盗信用卡的使用? 是否在每次事务完成的时候都进行保存? 记录IP 地址吗? 记录用户名吗?

    5.5 脚本语言

    脚本语言是常见的安全隐患。每种语言的细节有所不同。有些脚本允许访问根目录。其他只允许访问邮件服务器,但是经验丰富的黑客可以将服务器用户名和口令发送给他们自己。找出站点使用了哪些脚本语言,并研究该语言的缺陷。还要需要测试没有经过授权,就不能在服务器端放置和编辑脚本的问题。最好的办法是订阅一个讨论站点使用的脚本语言安全性的新闻组。 

    6 接口测试

    在很多情况下,web 站点不是孤立。Web 站点可能会与外部服务器通讯,请求数据、验证数据或提交订单。

    6.1服务器接口

    第一个需要测试的接口是浏览器与服务器的接口。测试人员提交事务,然后查看服务器记录,并验证在浏览器上看到的正好是服务器上发生的。测试人员还可以查询数据库,确认事务数据已正确保存。

    这种测试可以归到功能测试中的表单测试和数据校验测试中

    6.2 外部接口

    有些 web 系统有外部接口。例如,网上商店可能要实时验证信用卡数据以减少欺诈行为的发生。测试的时候,要使用 web 接口发送一些事务数据,分别对有效信用卡、无效信用卡和被盗信用卡进行验证。如果商店只使用 Visa 卡和 Mastercard 卡, 可以尝试使用 Discover 卡的数据。(简单的客户端脚本能够在提交事务之前对代码进行识别,例如 3 表示 American Express4 表示 Visa5 表示 Mastercard6 代表Discover)通常,测试人员需要确认软件能够处理外部服务器返回的所有可能的消息。  

    这种情况在远程抄表中可能会体现到

    6.3 错误处理

    最容易被测试人员忽略的地方是接口错误处理。通常我们试图确认系统能够处理所有错误,但却无法预期系统所有可能的错误。尝试在处理过程中中断事务,看看会发生什么情况?订单是否完成?尝试中断用户到服务器的网络连接。尝试中断 web 服务器到信用卡验证服务器的连接。在这些情况下,系统能否正确处理这些错误?是否已对信用卡进行收费?如果用户自己中断事务处理,在订单已保存而用户没有返回网站确认的时候,需要由客户代表致电用户进行订单确认。

    采取措施:在理解需求的基础上,充分发挥想象力,尽量比较全面的列出各种异常情况

    7 结论

    无论你在测试 internetintranet 或者是 extranet 应用程序,web 测试相对于非 web 测试来说都是更具挑战性的工作。用户对 web 页面质量有很高的期望。在很多情况下,就像业务功能一样,页面用于维护和发展公共关系,所以第一印象非常重要。

  • 如何web项目测试1

    piaolingxue423 发布于 2010-05-17 17:28:28

    Web工程过程中,基于Web系统的测试、确认和验收是一项重要而富有挑战性的工作。基于Web的系统测试与传统的软件测试不同,它不但需要检查和验证是否按照设计的要求运行,而且还要测试系统在不同用户的浏览器端的显示是否合适。重要的是,还要从最终用户的角度进行安全性和可用性测试。然而,InternetWeb媒体的不可预见性使测试基于Web的系统变得困难。因此,我们必须为测试和评估复杂的基于Web的系统研究新的方法和技术

    本文将 web 测试分为 6 个部分

    • 功能测试
    • 性能测试(包括负载/压力测试)
    • 用户界面测试
    • 兼容性测试
    • 安全测试
    • 接口测试

    本文的目的是覆盖 web 测试的各个方面,未就某一主题进行深入说明。

    1 功能测试

    1.1 链接测试

    链接是Web应用系统的一个主要特征,它是在页面之间切换和指导用户去一些不知道地址的页面的主要手段。链接测试可分为三个方面。首先,测试所有链接是否按指示的那样确实链接到了该链接的页面;其次,测试所链接的页面是否存在;最后,保证Web应用系统上没有孤立的页面,所谓孤立页面是指没有链接指向该页面,只有知道正确的URL地址才能访问。

      链接测试可以自动进行,现在已经有许多工具可以采用。链接测试必须在集成测试阶段完成,也就是说,在整个Web应用系统的所有页面开发完成之后进行链接测试。

     

    采取措施:采用自动检测网站链接的软件来进行。

    推荐软件:

    Xenu Link Sleuth 免费 绿色免安装软件

    HTML Link Validator 共享(30天试用)

     

    1.2 表单测试

    当用户通过表单提交信息的时候,都希望表单能正常工作。

    如果使用表单来进行在线注册,要确保提交按钮能正常工作,当注册完成后应返回注册成功的消息。如果使用表单收集配送信息,应确保程序能够正确处理这些数据,最后能让顾客能让客户收到包裹。要测试这些程序,需要验证服务器能正确保存这些数据,而且后台运行的程序能正确解释和使用这些信息。

    当用户使用表单进行用户注册、登陆、信息提交等操作时,我们必须测试提交操作的完整性,以校验提交给服务器的信息的正确性。例如:用户填写的出生日期与职业是否恰当,填写的所属省份与所在城市是否匹配等。如果使用了默认值,还要检验默认值的正确性。如果表单只能接受指定的某些值,则也要进行测试。例如:只能接受某些字符,测试时可以跳过这些字符,看系统是否会报错。

    1.3 数据校验

    如果系根据业务规则需要对用户输入进行校验,需要保证这些校验功能正常工作。例如,省份的字段可以用一个有效列表进行校验。在这种情况下,需要验证列表完整而且程序正确调用了该列表(例如在列表中添加一个测试值,确定系统能够接受这个测试值)

    在测试表单时,该项测试和表单测试可能会有一些重复。

    1.21.3的采取措施:第一个完整的版本采用手动检查,同时形成WinRunnerQTP)脚本;回归测试以及升级版本主要靠WinRunnerQTP)自动回放测试。

    1.4 cookies测试

    Cookies通常用来存储用户信息和用户在某应用系统的操作,当一个用户使用Cookies访问了某一个应用系统时,Web服务器将发送关于用户的信息,把该信息以Cookies的形式存储在客户端计算机上,这可用来创建动态和自定义页面或者存储登陆等信息。

      如果Web应用系统使用了Cookies,就必须检查Cookies是否能正常工作。测试的内容可包括Cookies是否起作用,是否按预定的时间进行保存,刷新对Cookies有什么影响等。如果在 cookies 中保存了注册信息,请确认该 cookie能够正常工作而且已对这些信息已经加密。如果使用 cookie 来统计次数,需要验证次数累计正确。

    采取措施:

           1 采用黑盒测试:采用上面提到的方法进行测试

    2 采用查看cookies的软件进行(初步的想法)

    可以选择采用的软件

    IECookiesView v1.50

    Cookies Manager v1.1

          

    1.5 数据库测试

    Web应用技术中,数据库起着重要的作用,数据库为Web应用系统的管理、运行、查询和实现用户对数据存储的请求等提供空间。在Web应用中,最常用的数据库类型是关系型数据库,可以使用SQL对信息进行处理。

    在使用了数据库的Web应用系统中,一般情况下,可能发生两种错误,分别是数据一致性错误和输出错误。数据一致性错误主要是由于用户提交的表单信息不正确而造成的,而输出错误主要是由于网络速度或程序设计问题等引起的,针对这两种情况,可分别进行测试。

    采取措施:暂时没有更好的测试方法

           考虑结合到1.21.3的测试中

     

    1.6 应用程序特定的功能需求

    最重要的是,测试人员需要对应用程序特定的功能需求进行验证。尝试用户可能进行的所有操作:下订单、更改订单、取消订单、核对订单状态、在货物发送之前更改送货信息、在线支付等等。这是用户之所以使用网站的原因,一定要确认网站能像广告宣传的那样神奇。

    采取措施:深刻理解需求说明文档

    1.7 设计语言测试

    Web设计语言版本的差异可以引起客户端或服务器端严重的问题,例如使用哪种版本的HTML等。当在分布式环境中开发时,开发人员都不在一起,这个问题就显得尤为重要。除了HTML的版本问题外,不同的脚本语言,例如JavaJavaScript ActiveXVBScriptPerl等也要进行验证。

    暂时没有方法测试,可以多参考一点讨论组内的更新信息

    2 性能测试

    2.1 连接速度测试

    用户连接到Web应用系统的速度根据上网方式的变化而变化,他们或许是电话拨号,或是宽带上网。当下载一个程序时,用户可以等较长的时间,但如果仅仅访问一个页面就不会这样。如果Web系统响应时间太长(例如超过5秒钟),用户就会因没有耐心等待而离开。

      另外,有些页面有超时的限制,如果响应速度太慢,用户可能还没来得及浏览内容,就需要重新登陆了。而且,连接速度太慢,还可能引起数据丢失,使用户得不到真实的页面。

    2.2 负载测试

     

    负载测试是为了测量Web系统在某一负载级别上的性能,以保证Web系统在需求范围内能正常工作。负载级别可以是某个时刻同时访问Web系统的用户数量,也可以是在线数据处理的数量。例如:Web应用系统能允许多少个用户同时在线?如果超过了这个数量,会出现什么现象?Web应用系统能否处理大量用户对同一个页面的请求?

    2.3 压力测试

    负载测试应该安排在Web系统发布以后,在实际的网络环境中进行测试。因为一个企业内部员工,特别是项目组人员总是有限的,而一个Web系统能同时处理的请求数量将远远超出这个限度,所以,只有放在Internet上,接受负载测试,其结果才是正确可信的。

      进行压力测试是指实际破坏一个Web应用系统,测试系统的反映。压力测试是测试系统的限制和故障恢复能力,也就是测试Web应用系统会不会崩溃,在什么情况下会崩溃。黑客常常提供错误的数据负载,直到Web应用系统崩溃,接着当系统重新启动时获得存取权。

      压力测试的区域包括表单、登陆和其他信息传输页面等。

     

    负载/压力测试应该关注什么

    测试需要验证系统能否在同一时间响应大量的用户,在用户传送大量数据的时候能否响应,系统能否长时间运行。可访问性对用户来说是极其重要的。如果用户得到系统忙的信息,他们可能放弃,并转向竞争对手。系统检测不仅要使用户能够正常访问站点,在很多情况下,可能会有黑客试图通过发送大量数据包来攻击服务器。出于安全的原因,测试人员应该知道当系统过载时,需要采取哪些措施,而不是简单地提升系统性能。

    瞬间访问高峰
    如果您的站点用于公布彩票的抽奖结果,最好使系统在中奖号码公布后的一段时间内能够响应上百万的请求。负载测试工具能够模拟 X 个用户同时访问测试站点。

    每个用户传送大量数据
    网上书店的多数用户可能只订购 1-5 书,但是大学书店可能会订购 5000 本有关心理学介绍的课本? 或者一个祖母为她的 50 个儿孙购买圣诞礼物(当然每个孩子都有自己的邮件地址) 系统能处理单个用户的大量数据吗?

    长时间的使用
    如果站点用于处理鲜花订单,那么至少希望它在母亲节前的一周内能持续运行。如果站点提供基于 webemail 服务,那么点最好能持续运行几个月,甚至几年。可能需要使用自动测试工具来完成这种类型的测试,因为很难通过手工完成这些测试。你可以想象组织100 个人同时点击某个站点。但是同时组织 100000 个人呢。通常,测试工具在第二次使用的时候,它创造的效益,就足以支付成本。而且,测试工具安装完成之后,再次使用的时候,只要点击几下。

    采取措施:采用测试工具WAS、ACT协助进行测试

    3 用户界面测试

    3.1 导航测试

    导航描述了用户在一个页面内操作的方式,在不同的用户接口控制之间,例如按钮、对话框、列表和窗口等;或在不同的连接页面之间。通过考虑下列问题,可以决定一个Web应用系统是否易于导航:导航是否直观?Web系统的主要部分是否可通过主页存取?Web系统是否需要站点地图、搜索引擎或其他的导航帮助?

      在一个页面上放太多的信息往往起到与预期相反的效果。Web应用系统的用户趋向于目的驱动,很快地扫描一个Web应用系统,看是否有满足自己需要的信息,如果没有,就会很快地离开。很少有用户愿意花时间去熟悉Web应用系统的结构,因此,Web应用系统导航帮助要尽可能地准确。

      导航的另一个重要方面是Web应用系统的页面结构、导航、菜单、连接的风格是否一致。确保用户凭直觉就知道Web应用系统里面是否还有内容,内容在什么地方。

      Web应用系统的层次一旦决定,就要着手测试用户导航功能,让最终用户参与这种测试,效果将更加明显。

    3.2 图形测试

    Web应用系统中,适当的图片和动画既能起到广告宣传的作用,又能起到美化页面的功能。一个Web应用系统的图形可以包括图片、动画、边框、颜色、字体、背景、按钮等。图形测试的内容有:

      (1)要确保图形有明确的用途,图片或动画不要胡乱地堆在一起,以免浪费传输时间。Web应用系统的图片尺寸要尽量地小,并且要能清楚地说明某件事情,一般都链接到某个具体的页面。

      (2)验证所有页面字体的风格是否一致。

      (3)背景颜色应该与字体颜色和前景颜色相搭配。

      (4)图片的大小和质量也是一个很重要的因素,一般采用JPGGIF压缩,最好能使图片的大小减小到 30k 以下

     

    5)最后,需要验证的是文字回绕是否正确。如果说明文字指向右边的图片,应该确保该图片出现在右边。不要因为使用图片而使窗口和段落排列古怪或者出现孤行。

     

    通常来说,使用少许或尽量不使用背景是个不错的选择。如果您想用背景,那么最好使用单色的,和导航条一起放在页面的左边。另外,图案和图片可能会转移用户的注意力。

    3.3内容测试

    内容测试用来检验Web应用系统提供信息的正确性、准确性和相关性。

      信息的正确性是指信息是可靠的还是误传的。例如,在商品价格列表中,错误的价格可能引起财政问题甚至导致法律纠纷;信息的准确性是指是否有语法或拼写错误。这种测试通常使用一些文字处理软件来进行,例如使用Microsoft Word"拼音与语法检查"功能;信息的相关性是指是否在当前页面可以找到与当前浏览信息相关的信息列表或入口,也就是一般Web站点中的所谓"相关文章列表"

    对于开发人员来说,可能先有功能然后才对这个功能进行描述。大家坐在一起讨论一些新的功能,然后开始开发,在开发的时候,开发人员可能不注重文字表达,他们添加文字可能只是为了对齐页面。不幸的是,这样出来的产品可能产生严重的误解。因此测试人员和公关部门一起检查内容的文字表达是否恰当。否则,公司可能陷入麻烦之中,也可能引起法律方面的问题。测试人员应确保站点看起来更专业些。过分地使用粗体字、大字体和下划线可能会让用户感到不舒服。在进行用户可用性方面的测试时,最好先请图形设计专家对站点进行评估。你可能不希望看到一篇到处是黑体字的文章,所以相信您也希望自己的站点能更专业一些。 最后,需要确定是否列出了相关站点的链接。很多站点希望用户将邮件发到一个特定的地址,或者从某个站点下载浏览器。但是如果用户无法点击这些地址,他们可能会觉得很迷惑。

    3.4 表格测试

    需要验证表格是否设置正确。用户是否需要向右滚动页面才能看见产品的价格?把价格放在左边,而把产品细节放在右边是否更有效? 每一栏的宽度是否足够宽,表格里的文字是否都有折行?是否有因为某一格的内容太多,而将整行的内容拉长?

    3.5 整体界面测试

    整体界面是指整个Web应用系统的页面结构设计,是给用户的一个整体感。例如:当用户浏览Web应用系统时是否感到舒适,是否凭直觉就知道要找的信息在什么地方?整个Web应用系统的设计风格是否一致?

    对整体界面的测试过程,其实是一个对最终用户进行调查的过程。一般Web应用系统采取在主页上做一个调查问卷的形式,来得到最终用户的反馈信息。

      对所有的用户界面测试来说,都需要有外部人员(与Web应用系统开发没有联系或联系很少的人员)的参与,最好是最终用户的参与。

     

    采取措施:手动测试,参与人员最好有外部人员

    4 兼容性测试

    4.1 平台测试

    市场上有很多不同的操作系统类型,最常见的有WindowsUnixMacintoshLinux等。Web应用系统的最终用户究竟使用哪一种操作系统,取决于用户系统的配置。这样,就可能会发生兼容性问题,同一个应用可能在某些操作系统下能正常运行,但在另外的操作系统下可能会运行失败。

      因此,在Web系统发布之前,需要在各种操作系统下对Web系统进行兼容性测试。

    4.2 浏览器测试

    浏览器是Web客户端最核心的构件,来自不同厂商的浏览器对Java,、JavaScript ActiveX plug-ins或不同的HTML规格有不同的支持。例如,ActiveXMicrosoft的产品,是为Internet Explorer而设计的,JavaScriptNetscape的产品,JavaSun的产品等等。另外,框架和层次结构风格在不同的浏览器中也有不同的显示,甚至根本不显示。不同的浏览器对安全性和Java的设置也不一样。

      测试浏览器兼容性的一个方法是创建一个兼容性矩阵。在这个矩阵中,测试不同厂商、不同版本的浏览器对某些构件和设置的适应性。

     

    4.3 分辨率测试

    页面版式在 640x400600x800 1024x768 的分辨率模式下是否显示正常? 字体是否太小以至于无法浏览? 或者是太大? 文本和图片是否对齐?

    4.4 Modem/连接速率

    是否有这种情况,用户使用 28.8 modem下载一个页面需要 10 分钟,但测试人员在测试的时候使用的是 T1 专线? 用户在下载文章或演示的时候,可能会等待比较长的时间,但却不会耐心等待首页的出现。最后,需要确认图片不会太大。

    4.5 打印机

    用户可能会将网页打印下来。因此网也在设计的时候要考虑到打印问题,注意节约纸张和油墨。有不少用户喜欢阅读而不是盯着屏幕,因此需要验证网页打印是否正常。有时在屏幕上显示的图片和

  • WEB网站系统测试点

    piaolingxue423 发布于 2008-10-10 13:23:36

    感觉对WEB网站系统总结的很全哦,转载过来看一下

    1. 页面链接检查:每一个链接是否都有对应的页面,并且页面之间切换正确。可以使用一些工具,如LinkBotPro、File-AIDCS、HTML Link Validater、Xenu等工具。LinkBotPro不支持中文,中文字符显示为乱码;HTML Link Validater只能测试以Html或者htm结尾的网页链接;Xenu无需安装,支持asp、do、jsp等结尾的网页,xenu测试链接包括内部链接和外部链接,在使用的时候应该注意,同时能够生成html格式的测试报告。如果系统用QTP进行自动化测试,也可以使用QTP的页面检查点检查链接。

    2. 相关性检查:

      Ø 功能相关性:删除/增加一项会不会对其他项产生影响,如果产生影响,这些影响是否都正确,常见的情况是,增加某个数据记录以后,如果该数据记录某个字段内容较长,可能会在查询的时候让数据列表变形。

      Ø 数据相关性:下来列表默认值检查,下来列表值检查,如果某个列表的数据项依赖于其他模块中的数据,同样需要检查,比如,某个数据如果被禁用了,可能在引用该数据项的列表中不可见。

    3. 检查按钮的功能是否正确:如新建、编辑、删除、关闭、返回、保存、导入,上一页,下一页,页面跳转,重置等功能是否正确。常见的错误会出现在重置按钮上,表现为功能失效。

    4. 字符串长度检查: 输入超出需求所说明的字符串长度的内容, 看系统是否检查字符串长度。还要检查需求规定的字符串长度是否是正确的,有时候会出现,需求规定的字符串长度太短而无法输入业务数据。

    5. 字符类型检查: 在应该输入指定类型的内容的地方输入其他类型的内容(如在应该输入整型的地方输入其他字符类型),看系统是否检查字符类型。

    6. 标点符号检查: 输入内容包括各种标点符号,特别是空格,各种引号,回车键。看系统处理是否正确。常见的错误是系统对空格的处理,可能添加的时候,将空格当作一个字符,而在查询的时候空格被屏蔽,导致无法查询到添加的内容。

    7.特殊字符检查:输入特殊符号,如@、#、$、%、!等,看系统处理是否正确。常见的错误是出现在% ‘ \ 这几个特殊字符

    8. 中文字符处理: 在可以输入中、英文的系统输入中文,看会否出现乱码或出错。

    9. 检查信息的完整性: 在查看信息和更新信息时,查看所填写的信息是不是全部更新,更新信息和添加信息是否一致。要注意检查的时候每个字段都应该检查,有时候,会出现部分字段更新了而个别字段没有更新的情况。

    10. 信息重复: 在一些需要命名,且名字应该唯一的信息输入重复的名字或ID,看系统有没有处理,会否报错,重名包括是否区分大小写,以及在输入内容的前后输入空格,系统是否作出正确处理。

    11. 检查删除功能:在一些可以一次删除多个信息的地方,不选择任何信息,按“delete”,看系统如何处理,会否出错;然后选择一个和多个信息,进行删除,看是否正确处理。如果有多页,翻页选,看系统是否都正确删除,并且要注意,删除的时候是否有提示,让用户能够更正错误,不误删除。

    12. 检查添加和修改是否一致: 检查添加和修改信息的要求是否一致,例如添加要求必填的项,修改也应该必填;添加规定为整型的项,修改也必须为整型.

    13. 检查修改重名:修改时把不能重名的项改为已存在的内容,看会否处理,报错.同时,也要注意,会不会报和自己重名的错.

    14. 重复提交表单:一条已经成功提交的纪录,返回后再提交,看看系统是否做了处理。对于Web系统来说,可以通过浏览器返回键或者系统提供的返回功能。

    15. 检查多次使用返回键的情况: 在有返回键的地方,返回到原来页面,重复多次,看会否出错。

    16. 搜索检查: 有搜索功能的地方输入系统存在和不存在的内容,看搜索结果是否正确.如果可以输入多个搜索条件,可以同时添加合理和不合理的条件,看系统处理是否正确,搜索的时候同样要注意特殊字符,某些系统会在输入特殊字符的时候,将系统中所有的信息都搜索到。

    17. 输入信息位置: 注意在光标停留的地方输入信息时,光标和所输入的信息会否跳到别的地方。

    18. 上传下载文件检查:上传下载文件的功能是否实现,上传文件是否能打开。对上传文件的格式有何规定,系统是否有解释信息,并检查系统是否能够做到。下载文件能否打开或者保存,下载的文件是否有格式要求,如需要特殊工具才可以打开等。上传文件测试同时应该测试,如果将不能上传的文件后缀名修改为可以上传文件的后缀名,看是否能够上传成功,并且,上传文件后,重新修改,看上传的文件是否存在。

    19. 必填项检查:应该填写的项没有填写时系统是否都做了处理,对必填项是否有提示信息,如在必填项前加“*”;对必填项提示返回后,焦点是否会自动定位到必填项。

    20. 快捷键检查:是否支持常用快捷键,如Ctrl+C、 Ctrl+V、 Backspace等,对一些不允许输入信息的字段,如选人,选日期对快捷方式是否也做了限制。

    21. 回车键检查: 在输入结束后直接按回车键,看系统处理如何,会否报错。这个地方很有可能会出现错误。

    22.刷新键检查:在Web系统中,使用浏览器的刷新键,看系统处理如何,会否报错。

    23.回退键检查:在Web系统中,使用浏览器的回退键,看系统处理如何,会否报错。对于需要用户验证的系统,在退出登录后,使用回退键,看系统处理如何;多次使用回退键,多次使用前进键,看系统如何处理。

    24.直接URL链接检查:在Web系统中,直接输入各功能页面的URL地址,看系统如何处理,对于需要用户验证的系统更为重要。如果系统安全性设计的不好,直接输入各功能页面的URL地址,很有可能会正常打开页面。

    25.空格检查:在输入信息项中,输入一个或连串空格,查看系统如何处理。如对于要求输入整型、符点型变量的项中,输入空格,既不是空值,又不是标准输入。

    26.输入法半角全角检查:在输入信息项中,输入半角或全角的信息,查看系统如何处理。如对于要求输入符点型数据的项中,输入全角的小数点(“。”或“.”,如4.5);输入全角的空格等。

    27.密码检查:一些系统的加密方法采用对字符Ascii码移位的方式,处理密码加密相对较为简单,且安全性较高,对于局域网系统来说,此种方式完全可以起到加密的作用,但同时,会造成一些问题,即大于128的Ascii对应的字符在解密时无法解析,尝试使用“uvwxyz”等一些码值较大的字符作为密码,同时,密码尽可能的长,如17位密码等,造成加密后的密码出现无法解析的字符。

    28.用户检查:任何一个系统,都有各类不同的用户,同样具有一个或多个管理员用户,检查各个管理员之间是否可以相互管理,编辑、删除管理员用户。同时,对于一般用户,尝试删除,并重建同名的用户,检查该用户其它信息是否重现。同样,提供注销功能的系统,此用户再次注册时,是否作为一个新的用户。而且还要检查该用户的有效日期,过了有效日期的用户是不能登录系统的。容易出现错误的情况是,可能有用户管理权限的非超级管理员,能够修改超级管理员的权限。

    29.系统数据检查:这是功能测试最重要的,如果系统数据计算不正确,那么功能测试肯定是通不过的。数据检查根据不同的系统,方法不同。对于业务管理平台,数据随业务过程、状态的变化保持正确,不能因为某个过程出现垃圾数据,也不能因为某个过程而丢失数据。

    30.系统可恢复性检查:以各种方式把系统搞瘫,测试系统是否可正常迅速恢复。

    31.确认提示检查:系统中的更新、删除操作,是否提示用户确认更新或删除,操作是否可以回退(即是否可以选择取消操作),提示信息是否准确。事前或事后提示,对于Update或Delete操作,要求进行事前提示。

    32.数据注入检查:数据注入主要是对数据库的注入,通过输入一些特殊的字符,如“’”,“/”,“-”等或字符组合,完成对SQL语句的破坏,造成系统查询、插入、删除操作的SQL因为这些字符而改变原来的意图。如select * from table where id = ‘ ’ and  name = ‘  ’,通过在id输入框中输入“12’-”,会造成查询语句把name条件注释掉,而只查询id=12的记录。同样,对于update和delete的操作,可能会造成误删除数据。当然还有其它一些SQL注入方法,具体可以参考《SQL应用高级SQL注入.doc》,很多程序都是基于页面对输入字符进行控制的,可以尝试跳过界面直接向数据库中插入数据,比如用Jmeter,来完成数据注入检查。

    33.刷新检查:web系统中的WebForm控件实时刷新功能,在系统应用中有利有弊,给系统的性能带来较大的影响。测试过程中检测刷新功能对系统或应用造成的影响(白屏),检查控件是否回归默认初始值,检查是否对系统的性能产生较大影响(如每次刷新都连接数据库查询等)。

    34.事务检查:对于事务性操作,断开网络或关闭程序来中断操作,事务是否回滚。

    35.时间日期检查:时间、日期验证是每个系统都必须的,如2006-2-29、2006-6-31等错误日期,同时,对于管理、财务类系统,每年的1月与前一年的12月(同理,每年的第1季度与前一年的第4季度)。另外,对于日期、时间格式的验证,如2006年2月28日、2006-2-28、20060228等。日期检查还要检查日期范围是否符合实际的业务,对于不符合时间业务的日期,系统是否会有提示或者有限制

    36.多浏览器验证:越来越多的各类浏览器的出现,用户访问Web程序不再单单依赖于Microsoft Internet Explorer,而是有了更多的选择:Maxthon、Firefox、Tencent Traveler等,考虑使用多种浏览器访问系统,验证效果。

    37.安装测试:对于C/S架构的系统,安装程序的测试是一个重要方面,安装程序自动化程度、安装选项和设置(验证各种方案是否都能正常安装)、安装过程中断测试、安装顺序测试(分布式系统)、修复安装及卸载测试。

    38.文档测试:主要是对用户使用手册、产品手册进行测试,校验是否描述正确、完整,是否与当前系统版本对照,是否易理解,是否二义性等。

    39.测试数据检查:事实告诉我们,测试数据比代码更有可能是错的,因此,当测试结果显示有错误发生的时候,怀疑代码错误前要先对测试数据检查一遍。

    40.请让我的机器来运行:在某些项目中,出现一个病态的问题:系统没有问题呀,它在我的机器上是能够通过的。这就说明了其中存在着和环境相关的BUG。“是否所有的一切都受到了版本控制工具的管理?”、“本机的开发环境和服务器的环境是否一样?”、“这里是否存在一个真正的BUG,只不过是在其他的机器里偶然出现?”。所有的测试必须在所有系统要求的机器上运行通过,否则的话,代码就可能存在问题。

    41.Ajax技术的应用:Ajax有很多优点,但也有很多缺点,如果利用优点、避免缺点,是我们对新的Web2.0应用的一个挑战。而Ajax的应用最直接的问题就是用户体验,用户体验的效果直接关系到是否使用Ajax技术。“会做,并不意味着应该做、必须做”,这就是对Ajax技术的很重要的注解。

    42.Ajax技术的应用:Ajax采用异步调用的机制实现页面的部分刷新功能,异步调用存在异常中断的可能,尝试各种方法异常中断异步的数据调用,查看是否出现问题。在这里遇到的一个问题就是对日期控件的操作,已经如果页面数据较多的时候的刷新。

    43.脚本错误:随着Ajax、IFrame等异步调用技术的发展,Javascrīpt技术也越来越受到开发人员的重视,但Javascrīpt存在调试困难、各浏览器存在可能不兼容等问题,因此在Web系统中,可能会出现脚本错误。同时,脚本错误造成的后果可大、可小,不能忽视。

  • 用户名密码的测试方法(别小看哦)

    movestar 发布于 2010-08-20 10:27:18

    别小看了这个用户名密码这么简单的输入框。可测试的内容还是很多的,并且引发的问题也有很多种类。下面就说一说他的测试方法。

    一、用户注册

    只从用户名和密码角度写了几个要考虑的测试点,如果需求中明确规定了安全问题,Email,出生日期,地址,性别等等一系列的格式和字符要求,那就都要写用例测了~

    以等价类划分和边界值法来分析

    1.填写符合要求的数据注册: 用户名字和密码都为最大长度(边界值分析,取上点)

    2.填写符合要求的数据注册 :用户名字和密码都为最小长度(边界值分析,取上点)

    3.填写符合要求的数据注册:用户名字和密码都是非最大和最小长度的数据(边界值分析,取内点)

    4.必填项分别为空注册

    5.用户名长度大于要求注册1位(边界值分析,取离点)

    6.用户名长度小于要求注册1位(边界值分析,取离点)

    7.密码长度大于要求注册1位(边界值分析,取离点)

    8.密码长度小于要求注册1位(边界值分析,取离点)

    9.用户名是不符合要求的字符注册(这个可以划分几个无效的等价类,一般写一两个就行了,如含有空格,#等,看需求是否允许吧~)

    10.密码是不符合要求的字符注册(这个可以划分几个无效的等价类,一般写一两个就行了)

    11.两次输入密码不一致(如果注册时候要输入两次密码,那么这个是必须的)

    12.重新注册存在的用户

    13.改变存在的用户的用户名和密码的大小写,来注册。(有的需求是区分大小写,有的不区分)

    14.看是否支持tap和enter键等;密码是否可以复制粘贴;密码是否以* 之类的加秘符号显示

    备注:边界值的上点、内点和离点大家应该都知道吧,呵呵,这里我就不细说了~~

    二、修改密码

    当然具体情况具体分析哈~不能一概而论~

    实际测试中可能只用到其中几条而已,比如银行卡密码的修改,就不用考虑英文和非法字符,更不用考虑那些TAP之类的快捷键。而有的需要根据需求具体分析了,比如连续出错多少次出现的提示,和一些软件修改密码要求一定时间内有一定的修改次数限制等等。

    1.不输入旧密码,直接改密码

    2.输入错误旧密码

    3.不输入确认新密码

    4.不输入新密码

    5.新密码和确认新密码不一致

    6.新密码中有空格

    7.新密码为空

    8.新密码为符合要求的最多字符

    9.新密码为符合要求的最少字符

    10.新密码为符合要求的非最多和最少字符

    11.新密码为最多字符-1

    12.新密码为最少字符+1

    13.新密码为最多字符+1

    14.新密码为最少字符-1

    15.新密码为非允许字符(如有的密码要求必须是英文和数字组成,那么要试汉字和符号等)

    16.看是否支持tap和enter键等;密码是否可以复制粘贴;密码是否以* 之类的加秘符号

    17.看密码是否区分大小写,新密码中英文小写,确认密码中英文大写

    18.新密码与旧密码一样能否修改成功

    另外一些其他的想法如下:

    1 要测试所有规约中约定可以输入的特殊字符,字母,和数字,要求都可以正常输入、显示正常和添加成功

    2 关注规约中的各种限制,比如长度,大否支持大小写。

    3 考虑各种特殊情况,比如添加同名用户,系统是否正确校验给出提示信息,管理员帐户是否可以删除,因为有些系统管理员拥有最大权限,一旦删除管理员帐户,就不能在前台添加,这给最终用户会带来很多麻烦。比较特殊的是,当用户名中包括了特殊字符,那么对这类用户名的添加同名,修改,删除,系统是否能够正确实现,我就遇到了一个系统,添加同名用户时,如果以前的用户名没有特殊字符,系统可以给出提示信息,如果以前的用户名包含特殊字符,就不校验在插入数据库的时候报错。后来查到原因了,原来是在java中拼SQL语句的时候,因为有"_",所以就调用了一个方法在“_”,前面加了一个转义字符,后来发现不该调用这个方法。所以去掉就好了。所以对待输入框中的特殊字符要多关注。


    4 数值上的长度 之类的,包括出错信息是否合理
    5 特殊字符:比如。 / ' " \ </html> 这些是否会造成系统崩溃

    6 注入式bug:比如密码输入个or 1=1

    7 登录后是否会用明文传递参数

    8 访问控制(不知道这个算不算):登录后保存里面的链接,关了浏览器直接复制链接看能不能访问。

361/212>

数据统计

  • 访问量: 282
  • 日志数: 1
  • 建立时间: 2008-10-25
  • 更新时间: 2009-03-20

RSS订阅

Open Toolbar