没有目标就不会成长!

发布新日志

  • linux下常用svn命令

    小布丁Brave 发布于 2017-03-10 15:27:43

    1、将文件checkout到本地目录

    svn checkout pathpath是服务器上的目录)

    例如:svn checkout svn://192.168.1.1/pro/domain

    简写:svn co

     

    2、往版本库中添加新的文件

    svn add file

    例如:svn add test.php(添加test.php)

    svn add *.php(添加当前目录下所有的php文件)

     

    3、将改动的文件提交到版本库

    svn commit -m “LogMessage“ [-N] [--no-unlock] PATH(如果选择了保持锁,就使用–no-unlock开关)

    例如:svn commit -m “add test file for my test“ test.php

    简写:svn ci

     

    4、加锁/解锁

    svn lock -m “LockMessage“ [--force] PATH

    例如:svn lock -m “lock test file“ test.php

    svn unlock PATH

     

    5、更新到某个版本

    svn update -r m path

    例如:svn update如果后面没有目录,默认将当前目录以及子目录下的所有文件都更新到最新版本

    svn update -r 200 test.php(将版本库中的文件test.php还原到版本200)

    svn update test.php(更新,于版本库同步。如果在提交的时候提示过期的话,是因为冲突,需要先update,修改文件,然后清除svn resolved,最后再提交commit)

    简写:svn up

     

    6、查看文件或者目录状态

    1svn status path(目录下的文件和子目录的状态,正常状态不显示)

    ?:不在svn的控制中;M:内容被修改;C:发生冲突;A:预定加入到版本库;K:被锁定】

    2svn status -v path(显示文件和子目录状态)

    第一列保持相同,第二列显示工作版本号,第三和第四列显示最后一次修改的版本号和修改人。

    注:svn statussvn diff svn revert这三条命令在没有网络的情况下也可以执行的,原因是svn在本地的.svn中保留了本地版本的原始拷贝。

    简写:svn st

     

    7、删除文件

    svn delete path -m “delete test file“

    例如:svn delete svn://192.168.1.1/pro/domain/test.php -m “delete test file”

    或者直接svn delete test.php 然后再svn ci -m ‘delete test file‘,推荐使用这种

    简写:svn (del, remove, rm)

     

    8、查看日志

    svn log path

    例如:svn log test.php 显示这个文件的所有修改记录,及其版本号的变化

     

    9、查看文件详细信息

    svn info path

    例如:svn info test.php

     

    10、比较差异

    svn diff path(将修改的文件与基础版本比较)

    例如:svn diff test.php

    svn diff -r m:n path(对版本m和版本n比较差异)

    例如:svn diff -r 200:201 test.php

    简写:svn di

     

    11、将两个版本之间的差异合并到当前文件

    svn merge -r m:n path

    例如:svn merge -r 200:205 test.php(将版本200205之间的差异合并到当前文件,但是一般都会产生冲突,需要处理一下)

     

    12SVN 帮助

    svn help

    svn help ci

  • 一个网页通用的测试用例(借鉴他人的保存,加注释)

    green_star 发布于 2014-09-30 10:15:14

    具体需求: 有一个登陆页面, (假如上面有2个textbox, 一个提交按钮。 请针对这个页面设计30个以上的test case.)
      此题的考察目的: 面试者是否熟悉各种测试方法,是否有丰富的Web测试经验, 是否了解Web开发,以及设计Test case的能力
      这个题目还是相当有难度的, 一般的人很难把这个题目回答好。
      首先,你要了解用户的需求,比如这个登录界面应该是弹出窗口式的,还是直接在网页里面。对用户名的长度,和密码的强度(就是是不是必须多少位,大小写,特殊字符混搭)等。还有比如用户对界面的美观是不是有特殊的要求?(即是否要进行UI测试)。剩下的就是设计用例了 ,等价类,边界值等等。
      请你记住一点,任何测试,不管测什么都是从了解需求开始的。
      功能测试(Function test)
      0. 什么都不输入,点击提交按钮,看提示信息。(非空检查)
      1.输入正确的用户名和密码,点击提交按钮,验证是否能正确登录。(正常输入)
      2.输入错误的用户名或者密码, 验证登录会失败,并且提示相应的错误信息。(错误校验)
      3.登录成功后能否能否跳转到正确的页面(低)
      4.用户名和密码,如果太短或者太长,应该怎么处理(安全性,密码太短时是否有提示)
      5.用户名和密码,中有特殊字符(比如空格),和其他非英文的情况(是否做了过滤)
      6.记住用户名的功能
      7.登陆失败后,不能记录密码的功能
      8.用户名和密码前后有空格的处理
      9.密码是否加密显示(星号圆点等)
      10.牵扯到验证码的,还要考虑文字是否扭曲过度导致辨认难度大,考虑颜色(色盲使用者),刷新或换一个按钮是否好用
      11.登录页面中的注册、忘记密码,登出用另一帐号登陆等链接是否正确
      12.输入密码的时候,大写键盘开启的时候要有提示信息。
      界面测试(UI Test)
      1.布局是否合理,2个testbox 和一个按钮是否对齐
      2.testbox和按钮的长度,高度是否复合要求
      3. 界面的设计风格是否与UI的设计风格统一
      4. 界面中的文字简洁易懂,没有错别字。
      性能测试(performance test)
      1.打开登录页面,需要几秒
      2.输入正确的用户名和密码后,登录成功跳转到新页面,不超过5秒
      安全性测试(Security test)
      1.登录成功后生成的Cookie,是否是httponly (否则容易被脚本盗取)
      2.用户名和密码是否通过加密的方式,发送给Web服务器
      3.用户名和密码的验证,应该是用服务器端验证, 而不能单单是在客户端用javascript验证
      4.用户名和密码的输入框,应该屏蔽SQL 注入攻击
      5.用户名和密码的的输入框,应该禁止输入脚本 (防止XSS攻击)
      6.错误登陆的次数限制(防止暴力破解)
      7. 考虑是否支持多用户在同一机器上登录;
      8. 考虑一用户在多台机器上登录
      可用性测试(Usability Test)
      1. 是否可以全用键盘操作,是否有快捷键
      2. 输入用户名,密码后按回车,是否可以登陆
      3. 输入框能否可以以Tab键切换
      兼容性测试(Compatibility Test)
      1.主流的浏览器下能否显示正常已经功能正常(IE,6,7,8,9, Firefox, Chrome, Safari,等)
      2.不同的平台是否能正常工作,比如Windows, Mac
      3.移动设备上是否正常工作,比如Iphone, Andriod
      4.不同的分辨率
      本地化测试 (Localization test)
      1. 不同语言环境下,页面的显示是否正确。
      软件辅助性测试 (Accessibility test)
      软件辅助功能测试是指测试软件是否向残疾用户提供足够的辅助功能
      1. 高对比度下能否显示正常 (视力不好的人使用)
  • 如何面试软件测试人员?

    sanwong823 发布于 2015-04-30 14:44:10

    如何面试软件测试人员?

    1.    首先一般都是比较老套点的问题:介绍一下你的经历。

      考察表达能力

    1. 公司产品,具体应用什么编程技术?具体的架构是?具体的应用场景有哪些?

     重点考察测试人员对以往的工作所负责的产品测试,是否具备一定的深度!通常我都是让面试者自己讲述或是在纸上画出具体系统架构的图!

    1. 公司测试团队的规模如何,具体你所处的角色是什么?

    重点考察测试人员在以往的公司测试团队中,具体的工作职责,评判其工作是否与当要求职位是否符合?是否有哪些优缺点?

    1. 请说出一个你以前参与项目,对你测试经验提升很高的,具体是哪方面?

    重点考察测试人员在以往的测试工作中能力提升方面,有哪些?然后重点询问此部分内容,是否测试经验增长,具备一定的深度?

    1. 通常做测试时会碰到,提交的某个bug开发人员不认同你的观点?这时你如何办?

    重点考察测试人员是否坚持自已的价值观?是否具备协调沟通处理问题能力?

    1. 一个项目测试结束,有没什么经验总结?如果有,具体是如何开展的?

    重点考察测试人员对自己能力提升方面,有没有提高总结的地方,从项目中吸取的经验与教训。从中可以看出来,测试人员是否属行自我驱动型人才!

    1. 特定测试技术考察:性能测试,安全性测试,自动化测试等以前有开展过没?如果有,具体是如何实施的?

    重点考察测试人员技术能力,是否在各方面都有所涉及?或是在各方面技术上都有一定深度?当然从中也能看出一个测试人员是否属于是技术路线发展方向!

    1. 如果安排一项测试技术研究工作,你如何应对?

    重点考察测试人员是否具体测试技术专研精神?是否喜欢接受挑战?是否属于以后培养骨干对象?

    1. 某个项目上线后,出现问题,恰巧你是负责的,你如何应对这突如其来的事件?

    重点考察测试人员应对问题的压力,责任感,及如何处理项目上线后的技术问题及应对解决能力。

    1. 有没有看过什么测试书,具体是哪本?带给你的收获是?

    重点考察测试人员是否为测试这个职业肯付出多少?从中也可以看出这个测试人员是否上进心?是否有求知心?我的定义是如果哪个应聘者来面试时,都没系统的看过一本测试书籍,基本上不会录取!

    1. 为什么会选择做测试这份工作?

     重点考察测试人员对待测试工作的态度及是否有发展潜力?面试过很多测试人员,经常见到的回答,自己是女孩子,做测试细心,各位你认为这样回答你会满意吗?其码不是我想要的答案!

    1. 周末放假有什么业余爱好?

     重点考察面试测试人员性格特质,测试工作本身就是复杂且富有技术性的工作,而且不同的职位所需要的测试人员性格品质差异性很大。

    1. 你自己所期待加入的测试团队是什么样的?

    重点考察测试人员在以前测试团队中有哪些不协调?当然最重要的是也能提供给你一些信息,这个员工以后如何更好的管理与沟通!

    1. 你最近3-5年的职业规划是什么?

     重点考察软件测试人员的职业发展方向是否与当前职位招聘相符? 从其中可以侧面看出来其员工稳定性。

     

  • 用户验收测试的一些思考(未完待续)

    暖洋洋 发布于 2014-05-14 15:31:35

    借用练瑜伽的关键要点——

    “松而不懈,直而不僵”

    作为组织用户验收测试的内心理念^_^

     

    进行一些补充,侧重于具体实践的可行性,而非空谈。

     

    一.   用户验收测试的痛点在哪里?

    1.       用户没有时间做验收?

    -----将验收划分成几个阶段,集中验收耗时太久。详见第三部分的第1点:选择合适的时间点。

    2.       与系统测试是否有重复劳动的资源浪费嫌疑?

    -----不要直接就把系统丢给用户去测,不同的时间点采取不同的方式和手段去进行用户验收测试。详见第三部分的第1点和第2点。

    3.       用户验收总是草草收场?

    -----有的时候真的很取决于用户的责任心和专业度。对于重大项目用户验收反而是好做的,因为大家都重视。所以根源还是态度问题,重视程度是怎样的。

    对于小需求,有的时候觉得追着用户做验收既浪费自己时间也未必能收到好的效果或者是否真的有那么大的必要,自己都在怀疑。这是我自己的个性弱点。

    所以,作为测试人员需要不断的去推敲去体会什么样的需求需要什么样的验收,既保持住自己的立场又不失灵活性。甚至对于我自己来说,由于个性的弱点,甚至需要做一些心里斗争,而这恰恰是我觉察自己的最好机会,看到了就释然了,能够更不偏不倚更客观的做事情。

    4.       用户验收应该与系统测试建立哪些区别?用户应该究竟关注什么?

    -----个人认为用户验收与系统测试都需要测试人员去规划,而不是截然分开,直接扔给用户去测做甩手掌柜。根据用户的特点和擅长去规划用户验收。在第三部分有一些思考。

    5.       用户与IT在验收中的分工和界限以及配合度是怎样的?

    -----IT擅长测试效率的提升,比如可以帮助用户划分等价类,但注意不要过多的干涉,否则就体现不出用户验收的价值了,除非你非常确定是一个等价类。对于用户验收效率提升方面,主要体现在测试环境和测试数据方面的规划和及时支持。

    二.   目前我们是怎么做用户验收测试的?

    1.       项目型

    1)  确定用户验收测试的负责人及职责分工

    2)  基于需求的用户验收测试案例

    3)  用户验收测试案例的评审

    4)  用户验收测试准备工作支持

    比如:准备测试用户,测试数据,与系统测试的数据区分开来,便于统计用户验收测试的情况。

    5)  用户验收测试过程的监督和控制

    6)  用户验收测试报告

    2.       常规型

    对于项目型,通常用户方也很重视,会抽调专门的人力参与。

    但是对于常规型的用户验收测试,通常是在最后上线前几天,用户根据时间多少来选择性的测试或者干脆不测。

    三.   我们可以有哪些突破和创新?

    用户验收测试的目的并非是让用户分担测试工作量,也不是让用户共担质量风险。

    用户验收测试的目的是保证上线的产品是用户真正想要的产品。

    背景:用户没有提供规范的需求文档,开发也没有专门的需求分析和系统分析的岗位,用户和开发沟通个大概,开发人员就开始编码,在编码过程中出现各种疑问和细节问题再跟用户沟通。

    测试方如何推动和保证用户验收测试的效果?

    1.       选择合适的时间点

    1)  测试评审完成:

    这个时间点通常开发设计已经完成,测试评审通常会发现更细节的问题或疑问,有可能是需求方面的有可能是设计方面的,用户在这个时间介入主要是针对细节层面的问题和疑问进行解决和反思,有助于开发测试用户三方进一步的对需求进行深入思考,并增加对需求定版的信心。

    2)  测试遍历结束:

    这个时间点通常主要功能和流程能够走通,用户在这时介入可以更清楚更直观的看到需求实现成什么样子,纸上谈兵时如果产生误解,这个时候能够被清晰和及时的纠正或评估风险。

    这个阶段,可能系统还存在一些非严重级别的BUG,对于不那么专业或抓不住重点的用户来说,这时候介入参与用户验收,会对IT有抱怨,而且测试人员还需要花额外的时间解释和沟通,效果不是最好的。

    所以,这个阶段的用户验收可以以测试人员演示和讲解为主,主动告知已经完成到什么地步,还存在什么样的问题。

    3)  系统测试完成:

    这个时间点通常IT测试已经通过,不存在已知的BUG。这个时候,测试人员需要引导用户按照生产场景和角色进入到测试系统进行验收,用户这个时候因为前两个阶段的基础对系统已经较为熟悉,可以尽快上手测试。但是也有可能用户因为前两个阶段对系统已经很有信心了,而不愿意过多投入用户验收测试。

    所以,测试人员要非常强调,用户这个阶段的工作重点是什么,一方面是做最后模拟生产的验收;另一方面准备系统上线的宣导和培训,以及试运行的准备。

    这些貌似与测试无关,但其实是系统能够顺利在生产上运行的关键一环,测试的最终目的是让真实用户能够很好的使用系统,寻找BUG只是保证达到目的的步骤之一,不要在最后一环功亏一篑。

    2.       选择合适的方式

    1)  文档为媒介:分析完需求后要以测试的方法提炼关键要素,抽取要点,尽量将需求结构化。

    2)  系统为原型:对程序实现增加感性认识,测试方对关键功能和规则做演示。

    3)  用户从实际用户的角度体验系统。

    3.       如何有力的支持用户

    1)  衡量用户的业务水平和IT水平,视情况协调资源和安排计划

    2)  评估用户擅长什么?擅长市场洞察,产品策划还是系统操作?让用户发挥他的擅长点去做用户验收。

    3)  支持用户有效率的去做验收,比如IT通过技术手段快速的准备测试数据

    4)  引导用户贴近生产场景去测试,并尽量分析实际的异常业务场景

    5)  引导用户站在业务的全局观和长远规划去思考现有需求的合理性

    4.       简化验收标准

    UAT测试是用户接受度测试,划定重要功能范围,选取关键检查点,用户能够接受即符合验收标准。

    四.   举例-对于统计分析类的需求:

    1.       影响涉众:不同岗位和角色使用数据的方式是否有不同

    2.       不同系统的数据是否会自相矛盾:比如数据在不同系统以不同的展现方式能够查到,要保证不会给数据的使用者造成迷惑,即使在统计口径上有所不同,但不要给使用者造成自相矛盾的感觉。

    3.       总数和明细是否能对上:比如A系统里能查到明细,B系统里能查到总数,要关注总数和明细相符,并分析如果用户发现不同会有什么影响

    4.       对于验收的方法:最好能从前台生成数据或查看数据,从前台验证结果数据是否正确。

     

  • 最全面的公用的测试用例

    wanghuiwan 发布于 2011-12-05 15:39:37

    页面检查
    合理布局
    1、界面布局有序,简洁,符合用户使用习惯 
    2、界面元素是否在水平或者垂直方向对齐 
    3、界面元素的尺寸是否合理 
    4、行列间距是否保持一致 
    5、是否恰当地利用窗体和控件的空白,以及分割线条 
    6、窗口切换、移动、改变大小时,界面显示是否正常 
    7、刷新后界面是否正常显示 
    8、不同分辨率页面布局显示是否合理,整齐,分辨率一般为1024*768 > 1280*1024 >800*600
     
    弹出窗口
    1、弹出的窗口应垂直居中对齐 
    2、对于弹出窗口界面内容较多,须提供自动全屏功能 
    3、弹出窗口时应禁用主界面,保证用户使用的焦点 
    4、活动窗体是否能够被反显加亮
     
    页面正确性
    1、界面元素是否有错别字,或者措词含糊、逻辑混乱 
    2、当用户选中了页面中的一个复选框,之后回退一个页面,再前进一个页面,复选框是否还处于选中状态 
    3、导航显示正确 
    4、title显示正确 
    5、页面显示无乱码 
    6、需要必填的控件,有必填提醒,如 * 
    7、适时禁用功能按钮(如权限控制时无权限操作时按钮灰掉或不显示;无法输入的输入框disable掉) 
    8、页面无js错 
    9、鼠标无规则点击时是否会产生无法预料的结果 
    10、鼠标有多个形状时是否能够被窗体识别(如漏斗状时窗体不接受输入)


    控件检查
    下拉选择框
    1、查询时默认显示全部 
    2、选择时默认显示请选择 
    3、禁用时样式置灰
     
    复选框
    1、多个复选框可以被同时选中 
    2、多个复选框可以被部分选中 
    3、多个复选框可以都不被选中 
    4、逐一执行每个复选框的功能
     
    单选框
    1、一组单选按钮不能同时选中,只能选中一个 
    2、一组执行同一功能的单选按钮在初始状态时必须有一个被默认选中,不能同时为空
     
    下拉树
    1、应支持多选与单选 
    2、禁用时样式置灰
     
    树形
    1、各层级用不同图标表示,最下层节点无加减号 
    2、提供全部收起、全部展开功能 
    3、如有需要提供搜索与右键功能,如提供需有提示信息 
    4、展开时,内容刷新正常 

    日历控件
    1、同时支持选择年月日、年月日时分秒规则 
    2、打开日历控件时,默认显示当前日期
     
    滚动条控件
    1、滚动条的长度根据显示信息的长度或宽度及时变换,这样有利于用户了解显示信息的位置和百分比,如,word中浏览100页文档,浏览到50页时,滚动条位置应处于中间 
    2、拖动滚动条,检查屏幕刷新情况,并查看是否有乱码 
    3、单击滚动条时,页面信息是否正确显示 
    4、用滚轮控制滚动条时,页面信息是否正确显示 
    5、用滚动条的上下按钮时,页面信息是否正确显示 
     
    按钮
    1、点击按钮是否正确响应操作。如单击确定,正确执行操作;单击取消,退出窗口 
    2、对非法的输入或操作给出足够的提示说明 
    3、对可能造成数据无法恢复的操作必须给出确认信息,给用户放弃选择的机会(如删除等危险操作) 

    文本框
    1、输入正常的字母和数字 
    2、输入已存在的文件的名称 
    3、输入超长字符。 
    4、输入默认值,空白,空格。 
    5、若只允许输入字母,尝试输入数字;反之,尝试输入字母 
    6、利用复制,粘贴等操作强制输入程序不允许的输入数据 
    7、输入特殊字符集,例如,NUL及\n等 
    8、输入不符合格式的数据,检查程序是否正常校验,如程序要求输入年月日格式为yy/mm/dd,实际输入yyyy/mm/dd,程序应该给出错误提示。 

    分页
    1、当列表数据较多时是否使用分页控件。 
    2、系统是否都是使用的同一风格的分页控件。
     
    上传功能检查
    上传功能
    1、上传下载文件检查:上传下载文件的功能是否实现,上传下载的文件是否有格式、大小要求、是否屏蔽exe.bat. 
    2、回车键检查:在输入结束后直接按回车键,看系统处理如何,会否报错。这个地方很有可能会出现错误 
    3、刷新键检查:在Web系统中,使用浏览器的刷新键,看系统处理如何,会否报错。 
    4、回退键检查:在Web系统中,使用浏览器的回退键,看系统处理如何,会否报错。对于需要用户验证的系统,在退出登录后,使用回退键,看系统处理如何;多次使用回退键,多次使用前进键,看系统如何处理。 
    5、直接URL链接检查:在Web系统中,直接输入各功能页面的URL地址,看系统如何处理,对于需要用户验证的系统更为重要。如果系统安全性设计的不好,直接输入各功能页面的URL地址,很有可能会正常打开页面。 
    6、确认没有上传资料点上传按钮是否有提示 
    7、确认是否支持图片上传 
    8、确认是否支持压缩包上传 
    9、若是图片,是否支持所有的格式(.jpeg,.jpg,.gif,.png等) 
    10、音频文件的格式是否支持(mp3,wav,mid,等) 
    11、各种格式的视频文件是否支持 
    12、上传文件的大小有无限制,上传时间用户是否可接受? 
    13、是否支持批量上传? 
    14、若在传输过程中,网络中断时,页面显示什么 
    15、选择文件后,想取消上传功能,是否有删除按钮 
    16、文件上传结束后,是否能回到原来界面 

    添加功能检查
    添加功能
    1、正确输入相关内容,包括必填项,点添加按钮,记录是否成功添加 
    2、必填项内容不填、其它项正确输入,点添加按钮,系统是否有相应提示
    3、内容项中输入空格,点添加按钮,记录能否添加成功 
    4、内容项中输入系统中不允许出现的字符、点添加按钮,系统是否有相应提示 
    5、内容项中输入HTML脚本,点添加按钮,记录能否添加成功 
    6、仅填写必填项,点添加按钮,记录能否添加成功 
    7、添加记录失败时,原填写内容是否保存 
    8、新添加的记录是否排列在首行 
    9、重复提交相同记录,系统是否有相应提示 
     
    删除功能检查
    删除功能
    1、选择任意一条记录,进行删除,能否删除成功 
    2、选择不连续多条记录,进行删除,能否删除成功 
    3、选择连续多条记录,进行删除,能否删除成功 
    4、能否进行批量删除操作 
    5、删除时,系统是否有确认删除的提示
     
    查询功能检查
    查询功能
    1、针对单个查询条件进行查询,系统能否查询出相关记录 
    2、针对多个查询条件,进行组合查询,系统能否查询出相关记录
    3、系统能否支持模糊查询 
    4、查询条件全部匹配时,系统能否查询出相关记录 
    5、查询条件全为空时,系统能否查询出相关记录 
    6、查询条件中输入%,系统能否查询出相关记录 
    7、系统是否支持回车查询 
    8、系统是否设置了重置查询的功能

  • 《转》软件测试面试 (二) 如何测试网页的登录页面

    yeziTesting 发布于 2013-08-18 21:38:30

    这个面试题碰到过很多次, 再次总结下来。

      具体需求: 有一个登陆页面, 上面有2个textbox, 一个提交按钮。 请针对这个页面设计30个以上的test case.

      此题的考察目的: 面试者是否熟悉各种测试方法,是否有丰富的Web测试经验, 是否了解Web开发,以及设计Test case的能力

      这个题目还是相当有难度的, 一般的人很难把这个题目回答好。

      阅读目录

      功能测试(Function test)

      1.输入正确的用户名和密码,点击提交按钮,验证是否能正确登录。

      2.输入错误的用户名或者密码, 验证登录会失败,并且提示相应的错误信息。

      3.登录成功后能否能否跳转到正确的页面

      4.用户名和密码,如果太短或者太长,应该怎么处理

      5.用户名和密码,中有特殊字符,和其他非英文的情况

      6.记住用户名的功能

      7.登陆失败后,不能记录密码的功能

      8.用户名和密码前后有空格的处理

      9.密码是否以星号显示

      界面测试(UI Test)

      1.布局是否合理,2个testbox 和一个按钮是否对齐

      2.testbox和按钮的长度,高度是否复合要求

      性能测试(performance test)

      1.打开登录页面,需要几秒

      2.输入正确的用户名和密码后,登录成功跳转到新页面,不超过5秒

      安全性测试(Security test)

      1.登录成功后生成的Cookie,是否是httponly (否则容易被脚本盗取)

      2.用户名和密码是否通过加密的方式,发送给Web服务器

      3.用户名和密码的验证,应该是用服务器端验证, 而不能单单是在客户端用javascript验证

      4.用户名和密码的输入框,应该屏蔽SQL 注入攻击

      5.用户名和密码的的输入框,应该禁止输入脚本 (防止XSS攻击)

      6.错误登陆的次数限制(防止暴力破解)

      可用性测试(Usability Test)

      1. 是否可以全用键盘操作,是否有快捷键

      2.输入用户名,密码后按回车,是否可以登陆

      兼容性测试(Compatibility Test)

      1.主流的浏览器下能否显示正常已经功能正常(IE,6,7,8,9, Firefox, Chrome, Safari,等)

      2.不同的平台是否能正常工作,比如Windows, Mac

      3.移动设备上是否正常工作,比如Iphone, Andriod

      4.不同的分辨率

      软件辅助性测试 (Accessibility test)

      软件辅助功能测试是指测试软件是否向残疾用户提供足够的辅助功能

      1. 高对比度下能否显示正常 (视力不好的人使用)

  • Web测试最容易遗漏的地方

    msnshow 发布于 2013-08-11 13:57:22

    1.浏览器的后退按钮 
      提交表单一条已经成功提交的记录,back后再提交,看系统会如何处理。检查多次使用back健的情况在有back的地方,back,回到原来的页面,再back,重复几次,看是否会报错。
    2.通过修改URL中的参数,向服务器发起请求,看看会有什么样的结果
      利用一些工具,如http watch,可以记录和捕获向服务器发起的URL请求,然后修改其中的参数向服务器发起请求.该功能点可以和安全测试结合起来.
    3.对表单多次提交
      对提交按钮快速多次点击提交,看看会不会在数据库中形成多条记录.网速或响应快时,这点容易被遗漏,但用户的网络可能慢,很容易多次点击提交.如果前端做了处理,试试捕获在提交时生成的URL,绕过页面,再次对服务器发起请求,会有什么结果
    4.光标的跳转
      执行操作后,光标是否停留在合适的位置.如邮箱登录,输完用户名回车后,光标应该跳转到密码框内.细节问题,但是影响用户感受

    5.tab键是否功能正确
      和光标的跳转类似,特别是在有输入项时,查看tab键的焦点顺序是否正确
    6.对全角/半角符号的输入测试
      有输入项时,要考虑全/半角字条的输入,及GBK字符
    7.多版本IE测试

    [转帖] 电子商务网站--界面测试的测试点
    界面是软件,网站 与用户交互的最直接的层,界面的好坏决定用户对软件的第一印象。而且设计良好的界面能够引导用户自己完成相应的操作,起到向导的作用。同时界面如同人的面孔,具有吸引用户的直接优势。设计合理的界面能给用户带来轻松愉悦的感受和成功的感觉,相反由于界面设计的失败,让用户有挫败感,再实用强大的功能都可能在用户的畏惧与放弃中付诸东流。目前界面的设计引起软件设计人员的重视的程度还远远不够,直到最近网页制作的兴起,才受到专家的青睐。而且设计良好的界面由于需要具有艺术美的天赋而遭拒绝。

      目前流行的界面风格有三种方式:多窗体、单窗体以及资源管理器风格,无论那种风格,以下规则是应该被重视的。
    1:易用性:
      按钮名称应该易懂,用词准确,屏弃没楞两可的字眼,要与同一界面上的其他按钮易于区分,能望文知意最好。理想的情况是用户不用查阅帮助就能知道该界面的功能并进行相关的正确操作。

    易用性细则:
    1):完成相同或相近功能的按钮用Frame框起来,常用按钮要支持快捷方式。
    2):完成同一功能或任务的元素放在集中位置,减少鼠标移动的距离。
    3):按功能将界面划分区域块,用Frame框括起来,并要有功能说明或标题。
    4):界面要支持键盘自动浏览按钮功能,即按Tab键、回車鍵的自动切换功能。
    5):界面上首先要输入的和重要信息的控件在Tab顺序中应当靠前,位置也应放在窗口上较醒目的位置。
    6):同一界面上的控件数最好不要超过10个,多于10个时可以考虑使用分页界面显示。
    7):分页界面要支持在页面间的快捷切换,常用组合快捷键Ctrl+Tab
    8):默认按钮要支持Enter及选操作,即按Enter后自动执行默认按钮对应操作。
    9):可寫控制項檢測到非法輸入後應給出說明並能自動獲得焦點。
    10):Tab键的顺序与控件排列顺序要一致,目前流行总体从上到下,同时行间从左到右的方式。
    11):核取方塊和選項框按選擇幾率的高底而先後排列。
    12):核取方塊和選項框要有默認選項,並支援Tab選擇。
    13):選項數相同時多用選項框而不用下拉清單框。
    14):界面空间较小时使用下拉框而不用选项框。
    15):选项数較少时使用选项框,相反使用下拉列表框。
    16):专业性强的软件要使用相关的专业术语,通用性界面则提倡使用通用性词语。

    2:
    规范性:
    通常界面设计都按Windows界面的规范来设计,可以说:界面遵循规范化的程度越高,则易用性相应的就越好。小型软件一般不提供工具厢。

    规范性细则:
    1):常用菜单要有命令快捷方式。
    2):完成相同或相近功能的菜单用横线隔开放在同一位置。
    3):菜单前的图标能直观的代表要完成的操作。
    4):菜单深度一般要求最多控制在三层以内。
    5):工具栏要求可以根据用户的要求自己选择定制。
    6):相同或相近功能的工具栏放在一起。
    7):工具栏中的每一个按钮要有及时提示信息。
    8):一条工具栏的长度最长不能超出屏幕宽度。
    9): 工具栏的图标能直观的代表要完成的操作。
    10):系统常用的工具栏设置默认放置位置。
    11):工具栏太多时可以考虑使用工具箱。
    12):工具箱要具有可增减性,由用户自己根据需求定制。
    13):工具箱的默认总宽度不要超过屏幕宽度的1/5。
    14): 状态条要能显示用户切实需要的信息,常用的有:
    目前的操作、系统状态、用户位置、用户信息、提示信息、错误信息等,如果某一操作需要的时间较长,还应该显示进度条和进程提示。

    15):滚动条的长度要根据显示信息的长度或宽度能及时变换,以利于用户了解显示信息的位置和百分比。
    16):状态条的高度以放置五好字为宜,滚动条的宽度比状态条的略窄。
    17):菜单和工具条要有清楚的界限;菜单要求凸出显示,这样在移走工具条时仍有立体感。
    18):菜单和状态条中通常使用5号字体。工具条一般比菜单要宽,但不要宽的太多,否则看起来很不协调。
    19): 右键快捷菜单采用与菜单相同的准则。
    3:帮助设施:
    系统应该提供详尽而可靠的帮助文档,在用户使用产生迷惑时可以自己寻求解决方法。
    帮助设施细则:
    1):帮助文档中的性能介绍与说明要与系统性能配套一致。(我们的系统帮助文档都是系统的祖先时期的说明,让人困惑)。
    2):打包新系统时,对作了修改的地方在帮助文档中要做相应的修改。
    3):操作时要提供及时调用系统帮助的功能。常用F1。
    4):在界面上调用帮助时应该能够及时定位到与该操作相对的帮助位置。也就是说帮助要有即时针对性。
    5):最好提供目前流行的联机帮助格式或HTML帮助格式。
    6):用户可以用关键词在帮助索引中搜索所要的帮助,当然也应该提供帮助主题词。
    7):如果没有提供书面的帮助文档的话,最好有打印帮助的功能。
    8):在帮助中应该提供我们的技术支持方式,一旦用户难以自己解决可以方便的寻求新的帮助方式。


    4:合理性:
    屏幕对角线相交的位置是用户直视的地方,正上方四分之一处为易吸引用户注意力的位置,在放置窗体时要注意利用这两个位置。
    合理性细则:
    1):父窗体或主窗体的中心位置应该在对角线焦点附近。
    2):子窗体位置应该在主窗体的左上角或正中。
    3):多个子窗体弹出时应该依次向右下方偏移,以显示窗体出标题为宜。
    4):重要的命令按钮与使用较频繁的按钮要放在界面上注目的位置。
    5):错误使用容易引起界面退出或关闭的按钮不应该放在易点击的位置。横排开头或最后与竖排最后为易点位置。
    6):与正在进行的操作无关的按钮应该加以屏蔽(Windows中用灰色显示,没法使用该按钮)。
    7):对可能造成数据无法恢复的操作必须提供确认信息,给用户放弃选择的机会。
    8):非法的输入或操作应有足够的提示说明。
    9): 对运行过程中出现问题而引起错误的地方要有提示,让用户明白错误出处,避免形成无限期的等待。
    10): 提示、警告、或错误说明应该清楚、明了、恰当。
    5:美观与协调性:
    界面应该大小适合美学观点,感觉协调舒适,能在有效的范围内吸引用户的注意力。
    美观与协调性细则:
    1): 长宽接近黄金点比例,切忌长宽比例失调、或宽度超过长度。
    2): 布局要合理,不宜过于密集,也不能过于空旷,合理的利用空间。
    3): 按钮大小基本相近,忌用太长的名称,免得占用过多的界面位置。
    4): 按钮的大小要与界面的大小和空间要协调。
    5): 避免空旷的界面上放置很大的按钮。
    6):放置完控件后界面不应有很大的空缺位置。
    7): 字体的大小要与界面的大小比例协调, 通常使用的字体中宋体9-12较为美观,很少使用超过12号的字体。
    8): 前景与背景色搭配合理协调,反差不宜太大,最好少用深色,如大红、大绿等。常用色考虑使用Windows界面色调。
    9): 如果使用其他颜色,主色调要柔和,具有亲和力与磁力,坚决杜绝刺目的颜色。
    10): 大型系统常用的主色有"#E1E1E1"、"#EFEFEF"、"#C0C0C0"等。
    11): 界面风格要保持一致,字的大小、颜色、字体要相同,除非是需要艺术处理或有特殊要求的地方。
    12): 如果窗体支持最小化和最大化或放大时,窗体上的控件也要随着窗体而缩放;切忌只放大窗体而忽略控件的缩放。
    13):对于含有按钮的界面一般不应该支持缩放,即右上角只有关闭功能。
    14): 通常父窗体支持缩放时,子窗体没有必要缩放。
    15):如果能给用户提供自定义界面风格则更好,由用户自己选择颜色、字体等。


    6:菜单位置:
    菜单是界面上最重要的元素,菜单位置按照按功能来组织。
    菜单测试细则:
    1): 菜单通常采用“常用--主要--次要--工具--帮助”的位置排列,符合流行的Windows风格。
    2): 常用的有“文件”、“編輯”,“查看”等,幾乎每個系統都有這些選項,當然要根據不同的系統有所取捨。
    3): 下拉菜单要根据菜单选项的含义进行分组,並且按照一定的规则进行排列,用横线隔开。
    4): 一组菜单的使用有先后要求或有向导作用时,应该按先后次序排列。
    5): 没有顺序要求的菜单项按使用频率和重要性排列,常用的放在开头, 不常用的靠后放置;重要的放在开头,次要的放在后边。
    6): 如果菜单选项较多,应该采用加长菜单的长度而减少深度的原则排列。
    7): 菜单深度一般要求最多控制在三层以内。
    8): 对常用的菜单要有快捷命令方式,组合原则见8。
    9): 对与进行的操作无关的菜单要用屏蔽的方式加以处理,如果采用动态加载方式——即只有需要的菜单才显示——最好。
    10): 菜单前的图标不宜太大,与字高保持一直最好。
    11): 主菜单的宽度要接近,字数不应多于四个,每个菜单的字数能相同最好。
    12): 主菜单数目不应太多,最好为单排布置。

    13):菜单条是否显示在合适的语境中?

    14):应用程序的菜单条是否显示系统相关的特性(如时钟显示)?

    15):下拉式操作能正确工作吗?

    16):菜单、调色板和工具条是否工作正确?

    17):是否适当地列出了所有的菜单功能和下拉式子功能?

    18):是否可能通过鼠标访问所有的菜单功能?

    19):相同功能按钮的图标和文字是否一致?

    20):是否能够用其他的文本命令激活每个菜单功能?

    21):菜单功能是否随当前的窗口操作加亮或变灰?

    22):菜单功能是否正确执行?

    23):菜单功能的名字是否具有自解释性?

    24):菜单项是否有帮助,是否语境相关?

    25):在整个交互式语境中,是否可以识别鼠标操作?

    26):如果要求多次点击鼠标,是否能够在语境正确识别?

    27):如果鼠标有多个按钮,是否能够在语境中正确识别?

    28):光标、处理指示器和识别指针是否随操作恰当地改变?
    7:独特性:
    如果一味的遵循业界的界面标准,则会丧失自己的个性.在框架符合以上规范的情况下,设计具有自己独特风格的界面尤为重要。尤其在商业软件流通中有着很好的迁移默化的广告效用。

    测试细则:
    1): 安装界面上应有单位介绍或产品介绍,并有自己的图标。
    2): 主界面,最好是大多数界面上要有公司图标。
    3): 登录界面上要有本产品的标志,同时包含公司图标。
    4): 帮助菜单的“关于”中应有版权和产品信息。
    5): 公司的系列产品要保持一直的界面风格,如背景色、字体、菜单排列方式、图标、安装过程、按钮用语等应该大体一致。


    8:快捷方式的组合
    在菜单及按钮中使用快捷键可以让喜欢使用键盘的用户操作得更快一些 在西文Windows及其应用软件中快捷键的使用大多是一致的。
    菜单中:
    1):面向事务的组合有:
    Ctrl-D 删除 ;Ctrl-F 寻找 ;Ctrl –H替换;Ctrl-I 插入 ;Ctrl-N 新记录 ;Ctrl-S 保存 Ctrl-O 打开。
    2):列表:
    Ctrl-R ,Ctrl-G定位;Ctrl-Tab下一分页窗口或反序浏览同一页面控件;。
    3):编辑:
    Ctrl-A全选;Ctrl-C 拷贝;Ctrl-V 粘贴;Ctrl-X 剪切;Ctrl-Z撤消操作;Ctrl-Y恢复操作。
    4)文件操作:
    Ctrl-P 打印;Ctrl-W 关闭。
    5):系统菜单
    Alt-A文件;Alt-E编辑;Alt-T工具;Alt-W窗口;Alt-H帮助。
    6):MS Windows保留键:
    Ctrl-Esc 任务列表 ;Ctrl-F4 关闭窗口; Alt-F4 结束应用;Alt-Tab 下一应用 ;Enter 缺省按钮/确认操作 ;Esc 取消按钮/取

    消操作 ;Shift-F1 上下文相关帮助。
    按钮中:
    可以根据系统需要而调节,以下只是常用的组合。
    Alt-Y确定(是);Alt-C取消;Alt-N 否;Alt-D删除;Alt-Q退出;Alt-A添加;Alt-E编辑;Alt-B浏览;Alt-R读;Alt-W写。
    这些快捷键也可以作为开发中文应用软件的标准,但亦可使用汉语拼音的开头字母。
    9:安全性考虑:
    在界面上通过下列方式来控制出错几率,会大大减少系统因用户人为的错误引起的破坏。开发者应当尽量周全地考虑到各种可能发生的问题,使出错的可能降至最小。如应用出现保护性错误而退出系统,这种错误最容易使用户对软件失去信心。因为这意味着用户要中

    断思路,并费时费力地重新登录,而且已进行的操作也会因没有存盘而全部丢失。
    安全性细则:
    1):最重要的是排除可能会使应用非正常中止的错误。
    2):应当注意尽可能避免用户无意录入无效的数据。
    3):采用相关控件限制用户输入值的种类。
    4):当用户作出选择的可能性只有两个时,可以采用单选框。
    5):当选择的可能再多一些时,可以采用复选框,每一种选择都是有效的,用户不可能输入任何一种无效的选择。
    6):当选项特别多时,可以采用列表框,下拉式列表框。
    7):在一个应用系统中,开发者应当避免用户作出未经授权或没有意义的操作。
    8):对可能引起致命错误或系统出错的输入字符或动作要加限制或屏蔽。
    9):对可能发生严重后果的操作要有补救措施。通过补救措施用户可以回到原来的正确状态。
    10):对一些特殊符号的输入、与系统使用的符号相冲突的字符等进行判断并阻止用户输入该字符。
    11):对错误操作最好支持可逆性处理,如取消系列操作。
    12):在输入有效性字符之前应该阻止用户进行只有输入之后才可进行的操作。
    13):对可能造成等待时间较长的操作应该提供取消功能。
    14):特殊字符常有;;’”><,`‘:“[”{、\|}]+=)-(_*&&^%$#@!
    ,.。?/还有空格。
    15):与系统采用的保留字符冲突的要加以限制。
    16):在读入用户所输入的信息时,根据需要选择是否去掉前后空格。
    17):有些读入数据库的字段不支持中间有空格,但用户切实需要输入中间空格,这时要在程序中加以处理。


    10:多窗口的应用与系统资源:
    设计良好的软件不仅要有完备的功能,而且要尽可能的占用最底限度的资源。
    1):在多窗口系统中,有些界面要求必须保持在最顶层,避免用户在打开多个窗口时,不停的切换甚至最小化其他窗口来显示该窗口。

    2):在主界面载入完毕后自动卸出内存,让出所占用的WINDOWS系统资源。
    3):关闭所有窗体,系统退出后要释放所占的所有系统资源 ,除非是需要后台运行的系统。
    4):尽量防止对系统的独占使用。

    5):窗口能否基于相关的输入或菜单命令适当地打开?

    6):窗口能否改变大小、移动和滚动?

    7):窗口中的数据内容能否使用鼠标、功能键、方向箭头和键盘访问?

    8):当被覆盖并重调用后,窗口能否正确地再生?

    9):需要时能否使用所有窗口相关的功能?

    10):所有窗口相关的功能是可操作的吗?

    11):是否有相关的下拉式菜单、工具条、滚动条、对话框、按钮、图标和其他控制可为窗口可用,并适当地显示?

    12):显示多个窗口时,窗口的名称是否被适当地表示?

    13):活动窗口是否被适当地加亮?

    14):如果使用多任务,是否所有的窗口被实时更新?

    15):多次或不正确按鼠标是否会导致无法预料的副作用?

    16):窗口的声音和颜色提示和窗口的操作顺序是否符合需求?

    17):窗口是否正确地关闭?

  • 【译】测试员,敢问路在何方?来自微软工程师

    omg 发布于 2013-05-10 07:15:20

    【译者注】:

    原作者是Qingsong Yao,他的Linkedin在这里 http://www.linkedin.com/in/qingsongyao,里面有着详细的介绍。

    这里简短摘抄翻译几句:

    MS SQL Server Group — 资深测试员 — 7年

    MS SQL Azure — 资深测试员 — 目前所在项目


    原文发布时间:2012.12.14

    原博文地址:blogs.msdn.com/b/qingsongyao/archive/2012/12/14/tester-s-career-series.aspx


    注意,此文非常长,中文版都有18000多字。请各位在阅读时,放松,保持耐心,带着思考,为自己下个5年谋划谋划。

    思想的启发,至少是黑暗中、迷糊中的一丝灯光。你的职业生涯只能是你自己做主、你自己规划,旁人只能是讲讲自己的经验,给出建议,你能学到什么和做些什么改变,只能靠你的水平。

    在此,我十分感谢Qingsong这篇博文(的确让我有了更多的认识和思考),以及对翻译的指点和修订。

    【正文如下】:


    我已经从事测试工作超过7年,从测试员(SDET)成长为高级测试员(SDET II),最近再从高级测试员成长为资深测试员(senior tester)。在我作为专业测试员的职业生涯中,我曾疑虑过我是否应该转行去做开发,我是否能在其他公司找到另一份测试工作,我们的软件测试员是否有更好的职业前景,以及我们(微软)拥有的测试员是否过多。在这系列博文中,我将给大家分享下我的一些想法,讨论如何才能成为资深测试员,并有一个更好的职业发展。这篇文章是写给我们的测试员和测试经理。我希望我的文章能帮助你深入思考测试和测试员的职业生涯,并希望你有一个更好的职业生涯。本文分为两部分,在第一部分中,我描述了测试员的四条进阶之路;在第二部分中,是我给我们测试员的一些建议。你可以在 这里 下载这篇文章的Word版本。

    注:本文是我之前系列博文的总结,并只是我个人的看法。

     

    目录

    第一部分 - 成为资深软件测试员的四条进阶之路 2

    成为一个专业的QA 2

    成为一个测试架构师 5

    成为一个领域专家 5

    成为一个工具开发人员 8

    转行或继续 9

    结论 12

    第二部分 - 我的一些建议 13

    激情和动力 13

    开放的思想和广泛的兴趣 14

    提升影响力(Making Big Impact) 15

    编码,编码,编码 16

    花时间去思考 17

    了解产品 18

    用不同方式做事 19

    给测试经理的建议 19

    结论 21

    第一部分 - 成为资深软件测试员的四条进阶之路

    在这篇文章中,我认为我们的软件测试员有四条潜在的进阶道路。它们是: 1)成为专业的QA。知道如何使用不同类型的测试工具开展网络测试,性能测试,负载测试和压力测试;  2)成为领域专家。可以像最终用户一样来使用你正在测试的产品;  3)成为测试架构师。可以领导整个团队和整个公司的测试以及质量保证; 4)成为工具和框架的开发人员。可以开发出世界一流的测试工具; 我还将讨论工程师的其他进价道路,比如转行去开发人员或PM,改变你的工作领域。


    成为一个专业的QA

    在本节中,我想讨论成为资深软件测试员的第一条进阶道路,是成为一个专业的软件测试员。在许多公司里,我们称软件测试员为QA(质量保证),QA这种角色在微软成立软件测试员(SDET)这种角色之前,便存在了很长的时间。你可能想知道的质量保证和软件测试员(SDET)的区别是什么。我们的测试员是质量保证吗?

    让我引用这里的QA定义来开始我们的讨论:

    QA 代表质量保证,它是一个框架,以确保在符合规定要求下进行开发和制造产品,例如药品,农药和医疗器械。

    这是一个需要个人成长 ,实现和持续改进的质量体系 ,不,这不仅是另一份工作。事实上,这是一个跟其他工作都不一样的工作。

    作为一个专业QA意味着你会得到一个真正的机会,去影响工作实践和提高质量的标准。这个职位,能够提供多种个人的、职业的发展选择,在不同的项目、过程和地方里扮演不同角色。这是一个真正负责任的职业,同时也要求个人的真正能力。

    你可以从上面的定义看到,QA是一个专业的职位,如牙医,教师一样,它需要自己的技能。在我担任软件测试员的整个职业生涯中,我关注了许多专业QA的博客。比如James Bach , James Whittaker , Elisabeth Hendrickson , Cem Kaner 和许多微软内部测试架构师。他们教会我什么是软件测试,为什么我们需要测试,以及我们如何做测试。那么,他们之间有什么共同的地方吗?他们都是世界上的最好QA。他们都有非常深厚的测试知识,如基于模型的测试(Model Based Testing),探索式测试(Exploratory Testing),生产环境测试(Testing in Production),基于情景的测试(Scenario Based Testing)。他们乐于分享,活跃在社交网络之中,常常把他们想法分享给我们广大的软件测试员。这非常棒,让我们可以看到现在有许多很好的测试技术和技术日新月异的变化。

     

    正如你看到的,成为一个专业的QA,重要的因素不是编码的技能,而是测试的技能。另一方面,软件测试员(SDET)可算是一种专攻的测试用例自动化的软件工程师。换句话说,SDE们(软件开发工程师 - Software Development Engineer)为实现产品而编写代码,而测试员(这里实际指SDET 软件测试开发工程师 - Software Development Engineer in Test)们为自动化测试而编写代码。编码技能,是我们的测试员应有的最重要的技能之一(如果你的代码能力不够强,我预计,微软将不会聘你为测试员)。

    然而,作为一个软件测试员并不妨碍你成为一个专业的QA,反而你还有很多成功的机会。在我们的日常工作​​中,我们有很多机会去学习新的测试方法并可在我们的项目中进行实践再掌握它们。能够深刻得理解测试方法,并能够在你的测试策略中使用它们,对测试项目成功来说是非常重要的。

    那么,如何才能胜任一个专业的QA?你必须做到:

    • 知道并使用不同的测试方法,比如基于模型的测试,探索式测试,用户界面​​测试(UI Testing);
    • 在一些领域有深入的测试知识,比如性能测试,网页(web),手机应用测试,安全性测试(或一个安全专家);
    • 熟悉一些测试工具,比如JUnit,NUnit,MSTest,Selenium或商业QA工具,如HP负载测试工具(HP Load Running),或VSTS负载测试工具;

    让我解释一下,成为一个专业的QA,我们为什么需要第二个和第三个技能。当一个公司想雇用一个QA,他们通常都有一个明确的期望,他们想雇用一个什么样子的QA。由于不同领域的测试方法可能有着显着不同,因此QA趋于更专业,一些QA擅长安全测试,而另一些QA具有网页设计经验。公司想要招聘一些在某些领域内有经验的人,那才能够解决他们的迫切需要。例如,当正在开发一个网站时,我们可能会想雇用一些熟知性能测试、网站基础设施的人,以帮助测试网站的可扩展性。如果你能熟知流行的网络测试工具,那将是你的一大优势。例如,如果你知道Selenium,最流行的Web UI测试工具之一,它会给你在就业市场上的增加你的竞争力。在大公司里工作,比如微软,它同时会带有优势和劣势。就优势而言,你将有机会做不同类型的测试,并培养你相应技能。另一方面,你可能会使用内部测试工具(不公开性质的那些工具)。你也可能只是测试系统里的一小部分(也就是说,你可能对你负责的那块进行了非常深入功能测试),但很少有机会测试整个系统。如果你在一些领域有深厚的功底,如安全领域,或性能领域,你会在未来有更好的职业生涯。

    成为一个专业QA的另一个关键技能,不是测试的技能,而是其他的技能。想象一下你希望加入一家规模较小的公司或初创的公司,只有测试技能,可能无法确保你能应聘上这份工作。但是,如果你能够做些其他工作,如自动化编译版本,搭建Web服务器,创建部署脚本。你将有更大的机会被录用(因为你可能不是全部时间都在做测试,所以,如果你能在同一时间做很多不同的事情,那你将是一个非常不错的候选人)。

    为什么我们应该立志做一个专业的QA,而为什么不干脆永远做一个软件测试员?做一个优秀的软件测试员,是同时需要编码技能和测试技能。然而,我们需要在未来选择一个领域来深入,要么编码要么测试。这真的取决于你是否对软件测试有激情,和是否把它作为一种事业。如果你喜欢测试本身,成为一个专业的QA是一条很适合的职业发展道路。此外,同时拥有编码技能和测试技能将是你去应聘其他公司的QA职位时的亮点之一。另一方面,我也看到很多软件测试员对今天的工作并不满意,而且我认为根本原因是,他们有着工程师的根(engineering root),并不喜欢测试。如果你真的喜欢编码,转行到开发或做更多的测试自动化,测试类库的开发可能是你的方向。在过去,我们曾经有两个独立的角色:SDET,STE(软件测试工程师),一个专注于自动化,另一个专注于测试,和许多公司一样,他们也有类似的角色,如亚马逊,谷歌。我认为这有一定道理。

    我们可能会从上面的定义中注意到的一件事,质量保证是许多行业都有的职位,不仅仅在计算机软件行业。例如,在汽车行业,QA是负责审查我们的汽车是否符合质量要求(meets the quality bar)。不幸的是,在软件行业的QA还不够成熟。今天,几乎没有哪个学院设立软件测试专业或者设置一个软件质量保证的学位。我们中的许多人选择软件测试员作为我们的职业,因为我们被雇用来担任测试员,并不是我们喜欢做测试。我们看到了很多关于测试员(SDET)在公司内外职业发展的博文和文章,我们还将在不久的将来持续看到这种情况。只是因为测试作为一个专业的职业还不够成熟,我可以预言,这里面很快就会发生很大的变化(例如,在必应(Bing)团队中,我们做了一种改革, 没有单独的测试员, 所有人都是软件开发工程师, 每个人都负责自己的程序的质量时,我们采用在生产环境测试(Testing in Production),把测试员的角色调整到更广的服务监测和运营领域中)。

     

    成为一个测试架构师

    在本节中,我想讨论我们如何能够成长成一个测试架构师。在这里,测试架构师不是一个头衔(title),而是一个角色(role)。例如,如果你在很多测试工具 / 框架上都做出了突出的贡献,你可能有一个测试架构师的头衔,你也可能不是一个测试架构师。同样,一些软件测试员在他们的公司中扮演测试架构师的角色,但他们没有一个测试架构师的头衔。

    测试架构师的角色意味着什么呢?在这里,我列出了测试架构师应该着眼的几个重要领域:

    • 定义一个功能的整体测试策略,比如,如何测试一个浏览器,如何测试一个云数据库等;
    • 某个测试领域的专家,如安全性测试,性能测试,云测试;
    • 在团队中引入或发明新的测试方法,如探索性测试,众包测试(crowd sourcing testing);
    • 根据具体情况指导和培养团队;
    • 思考测试的未来和测试员的职业发展的未来,并为未来做好准备;
    • 参与测试相关的活动,如测试访谈,会议,博客;

    怎样才能成为一个测试架构师呢?首先,它不是一个简单的事情,你需要先成为一个专业的软件测试员。作为专业的软件测试员,你会在你的日常工作​​,提高上述的能力,再成长为一个测试架构师。另外,许多架构师都在不同的公司、团队中接触过了不同的项目,所以都是非常有经验。参与到不同类型的项目之中,你总是能得到一些新的想法。最后,你必须有一种能力,即在任何项目中能迅速地适应变化(adopting change),并做出贡献。这个技能对测试架构师来说非常重要。

    今天有一些测试架构师为其他公司提供咨询服务。他们通常有广泛的知识,敏捷开发,项目管理,沟通技巧和风险管理,并帮助拯救许多几乎失败的项目(help to survive many nearly failed projects)。他们是最好的专业软件测试员,并在相关领域中获得了尊重。


    成为一个领域专家

    今天,我想说我们软件测试员的职业生涯中最重要的一条路,就是成为一个领域的专家。我们必须认识到,我们当中许多人最终是不会成为测试工具的开发人员或测试架构师。他们将成为专业的QA,一个领域专家或只是转行到一个新的岗位。就个人而言,我更喜欢你考虑在领域专家这个方向努力。

    领域专家是谁?

    让我来回答这个问题。假设你测试特定的软件测试五年,那你有资格成为一个领域专家吗?答案是不一定,取决于领域专家的定义。

    举例来说,我已经测试了SQL Server六年。我很熟悉数据类型,排序规则(collation),并能编写基本的SQL查询语句。“领域专家”在这种情况下,应该能够设计数据库应用程序或者管理数据库。为什么我这么来定义领域专家,因为它是搞数据库的人在其他公司找工作时一个基本要求(一个数据库开发人员或一个DBA)。我能胜任领域专家吗?我并不这么认为,因为我只知道SQL Server的一小部分。而我对这些都没有经验,比如,设计一个数据库架构(database schema),开发一个使用的数据库的应用程序或者管理大量的SQL Server实例。所以我很难找到一个数据库开发人员的工作或一个DBA的工作。

    正如你可以从上面的例子中看到,“领域专家”是的的确确取决于上下文。如果你在Windows团队中工作,“领域专家”就应该知道安装 / 配置 / 管理Windows或者能够编写基于Windows的软件。如果你在Visual Studio团队中,“领域专家”就应该知道如何使用Visual Studio和.NET编程。如果你在Windows Azure和SQL Azure中,你就应该知道如何通过使用所有可用Windows Azure的技术来构建一个可伸缩的应用程序。从这个意义上说,领域专家,需要你有一个全面理解,而不只是在某一小块里非常深入而已。他同时还关注于最终用户是如何得使用我们正在测试的软件或服务。

    我们为何要成为一个领域专家?

    有一天,你可能会考虑离开目前的职位,你可能选择加入另一个团队或另一个公司。你可能会问自己的一个问题是,从我过去作为一个软件测试员的经验中,学到些什么样的技能,或者我能胜任什么样的职位。不幸的是,今天我们很多的软件测试员只对他们的所负责部分有着深刻的理解,但他们缺乏测试产品应有全面的视野。其中一个原因是,今天我们的测试员过于注重功能性测试,我相信这是我们不太注重用户的使用场景或者我们的最终用户是怎么在使用我们产品。这也是我即使测试了SQL Server六年,我依然没有资格担任一个数据库开发人员或一个DBA的主要原因。

    你可能会问,为什么我们应该考虑成为一个领域专家,或另一种问法,为什么不就永远待在测试角色上。原因是,它会为你的未来打开一个非常宽广的门,让你有一个更好的职业。领域专家的需求将远高于专业的QA,另外补偿金(compensation)也将更高,尤其是当你成为一个解决方案提供者时。

    对微软的软件测试员,更是如此。我们公司有大量的优秀产品,有非常多的客户。对熟悉微软产品,并知道如何打造端到端解决方案的领域专家或专业人士都有着很高的需求。你越了解微软产品,你的职业发展越好。

    给软件测试员的建议

    现在,我想给我们的软件测试员提供一些建议。首先,问问自己,你三年后想成为什么样子的人,要成为一个领域专家,或者想成为一个专业软件测试员。这个问题,我建议你尽早地思考和作出决定。

    然后,如果你想成为一个领域专家,你需要有一个成长计划。这里有一些可以帮助到你的步骤:

    1)选择一个你想专注的领域。我们在微软实在是太幸运了,我们有这么多伟大的产品,因此我们有许多领域可以专注。近年来,IT技术的变化日新月异,我们应该谨慎选择那些IT趋势的领域。在这里,我想有几个你可能有兴趣知道的领域:

    • NoSQL和BigData是数据库管理领域的热点。市场对熟悉NoSQL(例如Hadoop,MongoDB等)的人有着巨大需求。
    • Windows Azure是微软的云计算平台。完全理解的这个系统和知道怎么构建可扩展的系统,将是你的职业发展中的一大优势。
    • Windows Phone和Windows 8是我们下一代的操作系统。能为这些平台构建应用程序,能让你轻松地找到一个开发人员工作。
    • 企业客户希望整合社交网络,office,移动和必应(Bing)搜索以提供更大的生产力。熟悉Office 365,微软其他的产品能够可以让你成为一个解决方案的提供者。

    2)在你的工作中培养你的技能。一旦你有对你想熟悉什么样的领域有一个想法后,你需要培养的相应技能。如果你目前的工作领域不是你的兴趣所在,考虑转到其他团队。此外,做一些副项目(side project),参与车库项目(Garage projects)中做些基层创新始终是一个不错的方式来提高你的技能。作为一个微软的员工,你有着很多优秀的资源可以利用,我强烈建议你发掘,总结你的知识。我强烈建议你​​设定了一个目标,并持续不断地提高你的技能。这是你的事业,你应该认真地投入时间来对待。请看我的其他博文,你可以从中找到另一些提高自己的建议。

    给主管和经理(Lead and Manager)的建议

    亲爱的主管和经理,我希望你能认识到并非你所有的员工,在最后都能成为一个专业的软件测试员。我们应该帮助我们的成员,增长他们的领域知识,并给他们一个更好的职业。有一天,当你的员工决定转行或离开公司时,他们会感谢你提供的机会,以帮助他们学到自己的知识,并感谢微软提供了一个让他们能成长的平台。

    有时,建立一个健康、快乐的团队,比完成的任务更为重要。微软拥有的优秀员工正是我们宝贵的财富。作为主管和经理,我们应致力于让我们的员工感到开心,并有一个更好的职业发展。鼓励人们学习新东西,让员工能在某些领域里投入自己的时间,始终是一个培养员工的不错的方式。你也将认识到,如果这样做,你的员工也会引入一些新东西到他们的日常工作​​中。拥有领域知识和了解顾客如何使用产品,一直对测试都有很大益处,这将是软件测试的趋势。


    成为一个工具开发人员

    今天,许多我们的软件测试员编写了测试类库和测试框架,协助测试自动化和测试运行自动化。在整个公司里我们有很多的测试框架,测试运行系统。编写测试工具是一项重要的技能,它可以帮助我们的软件测试员增加他们的编码能力。如今,很多软件测试员开发测试框架和测试类库。他们和其他开发人员一样写一些代码。测试工具开发人员和软件测试员之间的一个很大区别是,编码技能是开发人员最重要的技能,而对软件测试员来说最重要是测试技能。

    我们的工具开发人员面临的一个挑战是,你应该与使用你所创建的类库的其他人紧密合作,并确保你的确提高了工作效率。请记住,编写工具不是你的目标,让其他人更敏捷才是你的目标。

    我能给想要成为工具开发人员的软件测试员一个建议是,你可以大体上看看,编写一个测试工具跟编写的其他软件是一样的,所以如果你有良好的编码能力,你可以在很多团队中有着潜力无穷的成长,所以不要限制自己去寻找一个软件测试员工作或只编写测试类的工具。

    另一种观点认为,测试工具开发人员和编译器开发人员,UI开发人员或数据库开发人员一样,他们只是在不同的领域具有专业知识的开发人员。这是我之所以把本节的标题写成“成为工具开发人员”,而不是“成为测试工具开发人员”。

    它带来了另一个有趣的观点,就是我们的测试员(SDET)角色实际是专业软件测试员和测试工具的开发人员的混合体。我们希望大家通过编码(开发的角色)来做更多的测试自动化(测试的角色)。但是,在某些情况下,我们发现在这两个领域,我们都不太擅长。它可能潜在地限制我们的软件测试员长期的职业规划。


    转行或继续

    我曾打算写一些建议,关于你是否​​应该留在你目前的职位或转行到另一个其他团队、其他公司的职位。在写下我的想法之前,我想我可以给你一些关于这个主题的参考。

    第一篇文章是一个10年前Interface上发表的一篇文章,标题是“职业生涯?什么职业生涯?”。文章首先说,“你的职业生涯发展是你的责任。”和“你管理着自己的职业生涯。”然后说你,你的经理和微软怎样一起合作,帮助你的成长。这篇文章提供了一系列的问题让你进行思考并回答。根据你的答案,并提供些很好的建议,无论现在是否应该做出改变。我最喜欢它的一部分是,它有很多的探索式(probing)、开放式(open-ended)的问题。例如:

    回顾……

    • 你最享受的是做什么?是什么驱使你投入时间来干得这么漂亮?(What was it about those times that made them so good)
    • 有时你会特别不喜欢你的工作吗?为什么?
    • 去年里你感到最骄傲的成就是什么?
    • 在你开始你的职业生涯后,你的抱负或长期目标有所改变吗?何时?为何?你现在将如何​​描述你的长期目标?
    • 你的价值观是什么(一个主要标准,判断你是如何做事的)?你目前的工作和你的部门(微软)是否符合你的价值观?
    • 你的经理是如何做你的教练?还有谁是你兴趣的好教练?

    展望……

    • 你真正擅长什么?从你的职业生涯中,你最想收获是什么?
    • 当你展望你的职业生涯时,是否有些事情你特别想避免吗?为什么你想避免它们?
    • 你认为在未来十年中你的职业生涯将会出现什么?
    • 你需要什么样的技能或经验来为你下下个工作准备?对于十年的计划,你需要什么样的技能或经验?
    • 你的经理(或微软)可以做些什么来帮助你实现你的目标?你需要从他们身上得到什么,才能使你获得成功?
    • 当你展望你的职业生涯时,有什么是你特别期待的事情吗?理由是什么?
    • 你认为你的下一个工作将是什么?下一个工作之后,你认为你的再下一个工作又将是什么?

    回顾,你会被引导着去思考过去的工作经验。展望,你会被引导着去思考你想成为什么样子。思考这些问题,会真正帮助你整理职业生涯的思路。

     

    然后,第二篇文章是在讨论这个问题,即“是改变的时候了吗?” 。文章列出了职业发展的八大选择模式:广泛(Enrichment),偏向(Lateral),垂直(Vertical),跨职能(Cross-functional),重新调整(Realignment),探索(Exploratory),执行(Peform),和其他的追求(Other Pursuits)。这篇文章讨论了,你是如何在做决策,比如什么时候应该作出改变、什么时候又不是一个合适的改变时间和如何做好你的功课,再做出一个合适的改变。它也列举了很多别人的例子。例如:

    如果你不满意你的工作,不管是因为你不喜欢你现在工作的类型,还是因为你共事的人的价值观或者公司文化跟你不对路,做出改变也许能帮你走出这种状态,但你得先做下功课!Lou Nee Gerard如是说:“跳槽换工作不是一个避难所。做出的改变应该是积极的,应该因为你真正想要去做些什么,而不是去摆脱你不喜欢的事情。”,他曾从行政职务转行到PM。

    当你有一个明确的目标,并你已决定是否投入额外的努力时,这可能需要一个新的挑战(challenge),你应该时刻关注这些潜在机会能不能满足你的目标,并时刻准备采取行动。例如:

    跟你的经理聊聊。根据不同的情况,这可能是一个非常宝贵的步骤或一个你不想采取的步骤。你的经理可能是你最好的支持者并支持你的改变。如果你开始提你想要做的事情和你现在的工作不一样,虽然有些经理可能会感觉受到了威胁,一个优秀的经理会认识到对微软来说,你的成长是一件好事,并尝试与你一起向你的目标努力。

    有时候你和你的经理很可能不是很合拍。这种事难免。如果你不能跟你的经理聊,你可能需要选择另一位导师,来帮助你做决策。

    安排非正式的访谈。现在有不少谈论工作的非正式谈话,比如他们做了什么,他们是如何到达这种水平,什么样的技能才是重要的。你不需要你的经理像针对正式的访谈一样进行审核批准,就能组织安排这样非正式的访谈。这样的访谈实际上有利于微软这个整体:你将了解到更多适合你的职业发展方向和更多微软提供的机会。

    如果你的目标是成长(growth)…… 考虑寻找一个比较成熟的团队并且负责人有着良好的记录。在一个运作良好的团队中工作,你可以学到很多东西,包括何时创新以及如何创新,何时交付和如何交付,以及优秀的团队过程。

    如果你的目标是提升(advancement)…… 考虑一个具有部门的战略价值的初创团队。这些团队开始都比较小,成长非常快。他们可以为你提供快速提升、回报明显的机会。初创团队的风险与机会并存,新团队有更大的升迁机会,但也有较高的风险,其中许多团队是从来没有交付出任何东西,并且他们可能需要在人员不足的情况较长的工作时间。

    看看微软之外。 从我们公司之外的人得到一些建议。设计师和MSTE易用性培训经理 Scott Berkun 说到“真正的职业发展是远比微软大的。你在这里看到的差异和对比,可以帮助你做出更明智的决策;在某些情况下,我们更比其他高科技公司,分层和分级得更多,并在另一些情况下,我们更加开放和灵活。”如果不从外部的角度来看,你会看不清楚在微软你所拥有的优势。

    当你到了一个新的职位时,你想要踏出为未来规划的或者丰富你职业生涯的一步。Barbara Wilson,MSTE领导培训经理,提出了三个试金石,来判断你是不是在踏出正确的一步:

    最后的这份工作。 如果你有一个以上的选择(待在原来地方可能是其中之一),这个试金石才会有效。假设,微软的工作是你最后的这份工作,在你正在考虑的几个选择中,哪些选择将会对你在几年之后想要做的有所帮助?

    例如,如果你希望看到自己进入培训的角色,然后你可以在真正技术相关的和参与到培训他人的两个工作之间做一个选择的话,后者的职位可能是一个更合适的选择。

    我会感到兴奋吗? 问你自己四个问题:我对这个产品或服务会有激情?我能接触到客户吗?我对此职位或团队的问题处理解决感兴趣吗?这个团队的文化和管理理念是否适合我的风格?

    合适吗?问问自己的职位,它能会为你提供些什么,然后再问问自己,你能为你的团队带来什么。如果这两个答案似乎是互补的(complimentary),它可能是一个很好适合你的职位。

    当你完成所有的自我评估和功课后,Brechner建议再做一个测验来判断此举是否正确:“带着你的勇气。”改变有时是非常困难的,即使你已预想过的相关情况。如果你觉得这一个改变,将教会你一些新东西,并且在改变时你感觉还行,那么很可能它就是一个很正确的改变。

     

    结论

    这是第一部分的结尾。除了这四条职业进阶之路,我们还有其他的道路。例如,我们可以成长为测试主管(Lead),测试经理,PM和开发,甚至我们可以找到一个不是计算机领域的职业。作为软件测试员,你对系统有宽广视角,你考虑客户比考虑代码更多,你努力思考为什么我们要开发这个功能,我怎么能确保这个功能就是我们的客户所需要的。你从测试中学到这些技能,可以在你争取未来的职业时给与一些帮助。在接下来的一部分里,我将讨论,我们的软件测试员成长为更优秀的工程师的几个方面。


    第二部分 - 我的一些建议

    在这部分的文章中,我将专注于提供建议,以此帮助你的职业生涯发展。的确改变可能需要一段时间,有一天,你将成为一个资深员工。不断学习,不断思考和壮大自己的兴趣是你的职业成功的关键。我希望本文可以帮助你思考和开始积累你的力量。以我自己为例,我曾只专注于我的项目,只用很少的时间来思考。有一天,我无意中访问了www.infoq.com ,和听到了“被夸大的测试(Testing is Overrated)” 的会谈。阅读后,我把我的想法分享给我的同事们,并认识到,在我工作之外还有这么多出色的信息。我开始阅读这些文章,并借阅测试​​书籍。培养这样的学习和思考的习惯会花费时间,但一旦你有了这样的能力,你会发现,你可以成长得非常迅速。


    激情和动力

    有时,人们每天都做类似的事情就会觉得乏味。他们开始失去激情,感觉自己的职业生涯发展变得缓慢。我们应该如何处理这种情况?我可以给你一些建议。

    • 考虑离开自己的舒适区域。

    一旦你在一个地方里待了很长一段时间,你就有了一个舒适区域,它让你觉得你的工作失去挑战,你的技能不在提高。因此,是时候来改变了。你既可以换到其他公司也可以换到其他不熟悉项目。请大家认真考虑这个问题,因为这对你的职业生涯有重要影响。在未来的博文中,我将详细讨论改变或不改变。在一般情况下,我认为改变是应该的,你应该常常对此进行思考。我看到过很多例子,换到其他团队,并获取到更好的职业生涯。另外,还要考虑到换到其他团队,会给你提供机会,去学习新的、最终将有利于你的技能。

    • 考虑做一些某些副项目(side project)。

    我的第二个建议是,考虑做一些副项目。在过去的几年里,我发现,大家在他们的空闲时间里或主要任务责任外打造的项目往往比资助项目有更大的影响(the side projects which people build during their free time or out of main responsibility tend to have much larger impact that the funded project.)。作为一个专业的工程师,我们应该自我激励,自我组织。如果我所做的事情正是我的兴趣所在,我将会对它充满激情,并会为它做出持续努力。

    • 拓展你的兴趣点。

    我的第三个建议是,试试其他领域的兴趣。例如,当我觉得日常工作很枯燥时,我经常去公司内部微博,了解今天微软内部发生了些什么事。我喜欢阅读 www.infoq.com 的文章,了解公司外部又发生了些什么事。我喜欢阅读谷歌测试博客了解他们正在做些什么。你可以选择一个你特别有兴趣的领域,然后保持这个卓越的习惯,每天都学习些新东西。

    最后,我有一些建议给我们的经理:宏观管理而不是微观管理;给大家一些做其他事情的自由;鼓励大家去尝试不同的机会。我知道我们的承诺,我们的任务必须要完成。然而,让大家愉快和受到激励比交付一个功能更为重要。一个快乐的团队能提供更好的产品,我们都不希望总是压力山大。


    开放的思想和广泛的兴趣

    一旦你在一个地方里待了很长一段时间,在你所在领域你获得了非常深厚的领域知识和测试方法。在这种情况下,我们往往是安于我们现在所做的,并有时还会避免改变。然而,作为一个专业的软件测试员,我们应该始终更宽更广地思考,思考有我们可以采用些什么新技术,思考你所在领域的未来测试技术。在一般情况下,一个优秀的软件测试员应该思考的比我们目前已有的东西更远,并有一些应对更改的计划。

    为什么呢?究其原因是技术变化太快,如果我们不提前考虑,提前做好准备,有一天,当变化发生时,你会发现,你得仓促地面对这么多的挑战。例如,我总在浏览 www.infoq.com  www.dbms2.com ,以此提高我的技能。当我们的团队决定用列存储来实现数据仓库时,我已经知道我们为什么应该这样做的,这个领域中最热门的技术是什么。

    为了培养这样的技能,我们需要的是开放和广泛。我们需要知道公司内部发生了什么事,社区里又发生了什么事。我们应该很开放地聆听和学习别人的想法。我强烈的主张,我们的资深测试员应与其他团队成员保持密切联系,尤其是微软里其他团队,并培养一种学习技术并能迅速吸收的能力。有一天,你会觉得学习的投入将为你的工作带来巨大的回报。

    我可以给你一个例子,我如何做到这一点。就我而言,我订阅了微软内部和外部的大量非常活跃的博客,接收别人的更新。我也参加了会谈和培训,来提高自己。讲座范围可以非常广泛,如云计算中的系统工程方法(service engineering),基于场景的工程方法(scenario focus engineer),即以用户需求为导向的系统开发,等等。通过参加这样的培训,你将收获更广的技术知识。另外,你能知道公司内部发生了什么事。在过去的一年,我就参加了两个$99外训,然后我引入ATDD和个人看板(Personal Kanban)到我们的团队之中。SQL团队中许多成员所使用的技术和ATDD,其实早已被微软内部的很多团队使用过。你可以看到开放和广泛的价值,它能帮助你成长为一个资深测试员。


    提升影响力(Making Big Impact)

    今天,我想谈的另一个话题是作为一个资深测试员,需提升影响力。衡量一个人的成就的重要途径之一就是你对团队,对项目,对客户有多大的影响。我有三个方面提升影响力的建议。

    • 帮助他人的成长

    我们需要意识到,无论你是多么聪明,只靠你自己,你是不可能成功的。你帮助他人成长越多,你越可能会成功。作为一名资深测试员,我总是很喜欢看到初级测试员提高他们的技能,发展他们的职业,我也将提供建议和指导他们,帮助他们成长。就我的心里而言,我认为帮助别人是最重要的事情,我们应该每一天都帮助别人。有很多方法可以帮助他人成长,帮助他们做项目,回答论坛里问题,指导新成员,教他们如何编码和如何测试。对一个团队来说,建立这样的文化氛围是极其重要的,因为大家会感到其他人的温暖,并鼓励分享和学习。最后,我们一个团队一起都能成长起来。

    • 影响他人

    一旦你变得越来越资深,你已经掌握了非常深厚的技术知识,大量的项目经验。你得到别人更多的尊重,成为某一领域内的大牛(GOTO person)。换句话说,你有能力影响他人。如果我们看看,架构师,技术潮人(Techiques Follows),大牛的工程师(Distinct Engineers),他们的观点和思想能影响了很多人,类似这样的能力是他们独一无二的资产。

    你认为我们能够像大牛一样影响其他人吗?我想是可以的。每个人都有一个你擅长的领域。你应该用你的专业知识来帮助人们作出决定,并提供宝贵的建议。例如,对于每一个我参与过的或我学习到的项目,我都对它有些独特的看法,我试图理解为什么我们应该开发这样的项目,我会更多思考为什么我们不使用另一种方式来构建它,我常常把我的想法分享给项目里的所有人然后我们一起再作出决定。我写了大量的博客,分享我的想法,并希望影响更多的人。

    • 更多的跨团队协作

    以我自己为例,在最近几年,我引入ATDD(验收测试驱动开发 - Acceptance Test-Driven Development)到我们的团队,并把它介绍给很多微软内部的其他团队,如Bing,Lync团队。我也参加不同类型的会议和研讨会,了解其他团队是在如何做测试。每当我看到有人做我所熟悉的项目,我也问他们是否需要帮助。

    总之,当你努力提升你的影响力时,你的经验同样也会积累越来越多,你不断成长为一个资深测试员。

     

    编码,编码,编码

    今天,我想讨论一个最重要的技能,我们的软件测试员应该在自己的职业生涯中所掌握,这就是编码。

    • 为什么编码这么重要?

    因为你是软件测试员(SDET),软件测试开发工程师(Software Development Engineer in Test),你是软件工程师。作为一个软件工程师,编码就是每一天你应该做的任务,这是你应该掌握的技能。你可能会问是否编写测试用例没有编码更重要。这里的原因是,编写测试用例可以帮助提高产品的质量,但有时它并没有促进你的职业生涯发展。我可以举我的一个例子。当我刚参加到SQL Server团队之中,我们编写以T-SQL脚本为基础的测试,我很少有机会写编码。因此,我的编码技巧并没有提高。幸运的是,SQL Server的测试团队转移到以编程的方式编写测试,今天,我们的软件测试员的编码时间增加了不少。这是相当不错。当然,有时我们花费太多的时间在编写代码和类库上,而花费较少的时间来写真正的测试用例。这是另一个很大的话题,在这里我就不打算讨论了。

    由于今天我们当中大部分人在编写自动化测试,这意味着我们有很大的机会来提高我们的编码技能吗?答案是不一定。今天我们的测试员做了太多的任务:我们编写测试库,我们验证测试结果,验收产品,我们配置机器和安装新版本进行测试,我们修正我们脆弱的测试,我们创建和关闭缺陷。有时我们花费大量的时间在下载和编译源代码。我们也有其他的任务,如会议,项目跟踪 / 缺陷报告。上述所有任务将需要花费我们每天中的大量时间,而时间提醒着我们,做实实在在编码真得很少,我们的技能提高也非常小。我记得有一天,我曾对我们的测试经理提到过我的梦想——我可以花50%的时间在编码上,他很惊讶,他认为这个数字理应还要大很多。然而,现实是这个数字理应小得多。

    所以,我们该怎么处理这种情况呢?我们应该尽力尝试,改善我们的工程系统,以减少不必要的时间开销,让系统能够安装配置环境,安装测试版本,运行测试,创建 / 关闭的缺陷和退出测试。所有这些应该是自动化的。我们应给自己承诺每天尽可能多得编码。由于你的工作性质,如果你不能做到这一点,你应该考虑换到其他工作。

    小结,请记住编码是一个重要的技能,你应该去提高它。


    花时间去思考

    在最近几天,我试图去理解,我们应该如何去教导和学生如何去学习。我的Ph.D研究经验和最近戴尔·卡耐基培训,为我提供一些想法:

    • 教给他人或分享经验给他人最佳的办法是让他们思考。在你的谈话中不管他们思考了什么,他们至少学到些东西。一个好的实践是鼓励他们说话,与你互动。
    • 思考自身有时可能并不够,我们可能需要实践和应用我们的思考到我们的工作中。

    就研究论文而言,我们的论文大部分沿用了经典的格式,它必须有简介,相关的研究,实验结果和结论。没有实验结果的论文几乎是不可能被发布的。另一方面,论文的本质观点,似乎是不知为何地被隐藏起来或不是那么容易得找出来。我认为这是做研究里一个的问题。

    当我们想要向人们做演示展现点东西时,或者我们想要写点东西教给别人时,同样也有上面的问题。首先,你会花很多时间在研究我应该思考些什么。之后,你头脑中就有些想法了,你会渴望通过写些东西与他人分享,这是一个很棒的方式来概括你的想法。

    最后,我相信资深测试员的价值,是他可以给团队带来的观点 / 技能,而不是他在过去的工作经验。对我们的软件测试员来说,能够努力思考问题,并找出解决方案是一个重要的技能,我希望我们的资深员工应有的最最重要的技能就是思考 ,一个优秀的领导必须首先是一个出色的思考者。

     

    了解产品

    我相信作为一个资深软件测试员,我们应该充分了解我们正在测试的产品。知道产品的方向 / 未来是创建更好的测试的第一步。换句话说,如果我们不理解为什么我们应该构建这个产品和我们将构建怎样的产品,那么我们将不能编写出优秀的测试。

    我们应该更多地参与项目 / 产品的规划,并影响产品的的策略(不仅是测试策略)。请注意,这是我们可以提高产品质量的重要途径之一。如果我们可以发现设计时的缺陷,我们可以节省下很多的时间和金钱,而且甚至比发现大量功能上的缺陷要有价值得多。有趣的是,我相信一个优秀的产品设计和一个正确的方向,会带来更少功能缺陷。过去我参与了大量的改进,我发现,如果是精心设计的功能,我们在实现功能的过程中将看到更少的产品问题 / 缺陷 / 后顾之忧。无论如何,如果该功能没有得到很好的设计,我们不应该去实现这个功能,否则你在执行的功能时会看到很多问题。

    参与产品的设计,也可以帮助我们提高管理 / 构建项目的技能。并提高我们的技术技能,对测试架构师和领域专家的职业道路都是至关重要的。

    了解产品,可以帮助团队成员讲同一种语言,更顺畅地交流。假设有一天,你想加入另一家公司做云计算,当你和你的面试官谈论时,他们可能会问你很多关于云计算的问题。如果我们只知道在服务中如何测试单个组件,你会发现你是缺乏知识 / 思考的,这将影响你未来的职业生涯。然而,如果你知道并思考过IASS,PASS,亚马逊AWS等云计算技术,我敢打赌,你将有更大的机会得到这个职位。对于一家初创公司来说,有一个除测试以外的技能是至关重要的。这始终是一条金科玉律。


    最后,我想分享下Erwin Engelsma的观点:

    “测试能够提高顾客的满意度,前提是你真的知道客户认为什么是真正重要的,并测试了相关的内容。在你的客户几乎不感兴趣的领域,做出很大的改进,虽然是一个值得称道的努力,但是这不会改变他们对产品好坏的看法!”

    - 改进测试时的关键问题 —— Erwin Engelsma。

     

    用不同的方式做事

    有一天,我的经理问我:“Qingsong,当你还在高级测试员级别时,为什么你可以得到出众的评价结果​​”。在高级测试员的阶段,我还没有很丰富的测试知识,对团队的影响也不大。所以,我也想知道是什么让我有这么一个出色的评价结果,答案就是在用不同方式做事情。

    这个问题的一种思考方式是,你如何把你与其他人区分开来。我发现当我被分配了一些任务时,我会额外地做一些我应该做的事情,这使我跟他人不一样,更主要的原因,我提升了影响力,也发展我的职业。这里有一些在过去我曾做过的事情的例子:

    • 当我们计划在SQL Server中增加对日期和时间(Date and Time)的支持时,我花了很多时间来研究日期 / 时间和时区在Windows,Linux,.NET和Win32 API上的支持情况。我曾积极参与到项目的规划和设计中。这就让当我们测试功能时,我就有了一个更好的地位。另外,我在该功能的测试过程中承担了更多的责任,包括构建管理,测试运行管理,在线文档审查,并帮助他人编写测试用例。这些增加了我的知识,还帮我产生了更大的影响。
    • 当我们在SQL Server 2008中实现了稀疏列(Sparse Column)功能之后,在功能提交后我并没有停止思考我们的功能。我曾积极地在内部寻找能够使用我们这个功能的地方。最后,我发现我们团队的VSTS系统可以使用这个功能,所以我和支持团队一起工作,把这个功能部署到系统中去。这样一来,我帮忙提高了团队的业务能力,同时也更好地了解到功能的用户场景。结果就是,我看到这个功能还缺少的一些更细功能。

    最后,我希望你能体会用不同方式做事的意义。如果你有这样的能力,将会帮助你的职业生涯很多。


    给测试经理的建议

    今天,我希望写一篇关于招聘软件测试员的博文。主要读者是我们的招聘经理。这篇博文不是关于如何面试人或决定雇不雇用一个人,我认为这些是具体过程。而我的主要议题将关注为什么,即为什么我们需要聘请一个或多个测试员。

    我不是一个测试经理,当需要更多的人时,我不知道我们的经理给人力资源那边说的原因是什么。也许先让我列一些可能的原因:

    1)我们开始一个新的项目或功能,我们需要建立一个新的开发和测试团队。

    2)我们有一个新的测试主管(test lead),主管应至少管理5~8人。

    3)我们在做项目时,测试资源短缺。

    4)我们的副总裁给测试经理一些名额,如果我们不填上这些名额,就会被“浪费掉”。

     

    我们真的缺乏测试资源吗?

    我总是听人说他们的项目缺乏测试资源。但是,我们真的缺乏测试员?不一定,根本不是。微软内部没有测试资源缺乏的问题,而是资源分配问题。今天,我们的测试通常属于一个组件(component)团队,由一个测试主管带领。他深刻理解他的领域并且测试也做得相当不错,以便发展他的职业生涯。人们往往认为,每一个部门都需要一个单独的测试团队人们往往认为,测试是一个专业的工作,需要深入的了解测试。我们可以以另一个角度来看这个问题。今天,现代的测试框架,如NUnit,XUnit,MSTest和Selenium,编写自动化测试起来是非常容易,做测试并不是真的需要太多的测试知识,尤其是对于白盒测试来说(我相信由开发人员来写白盒测试并尽早地跑起来,那么白盒测试的效果将比黑盒测试大得多)。

    我看到不少的情况是,我们的资深软件测试员对他们负责的组件有着丰富的领域知识,对于这样的组件,深刻理解是必要的。测试查询优化器(query optimizer)就是一个例子。不过,我认为最好的测试员应该把他的知识和测试理念应用到测试类库,让每个人都可以使用它,使得这样的组件测试变得更加容易。在SQL Server中,TestQP和QREL是很好的例子,这两个工具就内嵌了查询优化器和关系数据库的知识。你将你的知识转化为代码后,我觉得你能随意移植到其他团队,我们是没有必要去限制,因为他在这个领域中有着最丰富的知识。

    扩大我们的团队并不意味着我们的业务扩大?

    有时,一个团队从5人扩大到20人甚至更多时,人们感到自豪。然而,这并不意味着,我们的业务扩展了四倍。不应该用人数来衡量经理或团队成功与否。

    你想增加新的测试员来提高团队的工作效率?

    这可不一定。有时,它是成立的,我们的测试员在项目上非常繁忙,我们有一种感觉,添加一个或多个的测试员可以帮助我们,真的吗?如果原因是我们想招人,那完成这个项目之后又该怎么办?我们永久地保留他们。

    下面是一些我给我们招聘经理的建议,如果他想雇用一个新的测试员时:

    1)需要一个测试员时,尝试探索不同的方法来解决这个问题,并把雇用一个新的测试员作为最后的备选解决办法。

    2)如果在项目上我们需要更多的测试员,我们可以从其他的团队调用些测试员吗?

    3)如果我们有太多要做的事情,我们能标清优先级,并放弃部分低优先级的任务吗?

    4)考虑培养一个技术主管,而不是培养一个人事管理主管。我们倾向于培养非常优秀的技术人员成为主管,让他管理更多的人。然而,今天我们的主管,在人事管理和其他的东西上花了太多的时间,他们只是没有时间思考,没有时间去提高他们的技术方面技能。所以,请考虑把我们的主管视为技术主管,这样一来,管理多少并不重要,重要的是能影响帮助到团队的人。

    5)请务必花时间去改善我们的文化,我们的过程和方法。优秀工程是更高生产力的关键。减少我们的技术负债,投入时间去创新。

    6)考虑采用一些指标来衡量测试员或测试的效率,因此,我们可以用更好的方式来作出决定。

    测试新人的职业生涯怎么样?

    这是一个很大的话题,这里我不会说得太多。一种看法是,我们都希望我们的员工能够快速成长,在未来有一个更好的职业。我们都希望我们的测试员可以很轻松地在其他公司找到测试工作,如果他们决定去追求公司以外的机会。然而,今天许多公司的开发人员与测试员比例相对偏低,并且他们相信他们的产品质量不算坏。我希望有人能在就业市场和测试员的水平上做一些研究,我们可以用更多的事实来分析这个问题。


    结论

    这是“成长为资深软件测试员”系列博文的结尾。我希望从我的博客中,你可以学到一些有用的信息,并帮助你决定​​你的职业道路。近年来,计算机技术的变化日新月异。云计算,社交网络,移动都是热点领域。技术的变更同样也需要不同类型的测试技术。我会开始写另一个系列博文——“对测试的未来和软件测试员的职业的未来”。在接下来的段落中,我将列出一些的最新文章,以此回答软件测试的未来是什么,服务领域测试(testing in the service area)的未来是什么,以及对软件测试员的职业生涯有何影响。

     

    “测试的未来”的相关参考文章:

    • 在谷歌2011年的测试自动化会议上,谷歌工程和创新倡导者的主管(Director of Engineering and Innovation Agitator at Google)——Alberto Savoia负责开幕式主题演讲。他认为,我们曾熟知的软件测试已死 - 或至少是垂死的。我与几位同事看了这个视频两遍,大家都觉得这是很警醒的谈话,让我们更严肃地深思测试和事业。我强烈推荐每个测试相关的人去看看这个视频。主题中提到,初创公司对“我们正在做正确的事情吗?”比“我们正在正确地做事吗?”更感兴趣。也就是说,这里的质量真的不是我的软件或者服务是否有缺陷,而是我的想法是不是吸引顾客的最佳想法。这对我们的软件测试员有一定的影响,因为我们太专注于
      “我们正在正确地做事吗?”,并可能导致我们很难在初创公司找到工作。
    • “众包”是最近非常热门的话题。你能想象一家拥有数以十万计的软件测试员的公司吗,它可以帮助其他公司在极短的时间内完成测试。这些兼职软件测试员的薪水和他们找到的缺陷挂钩。他们在不同的地方用不同的语言在不同的设备上运行测试。不同于我们的内部测试,他们像真正的客户般的运行测试。 uTes​​t.com就是这么一个公司,该公司在这个领域相当抢眼,它将会对测试服务和测试移动应用的方式上有着极大影响。在内部,我们有几个团队,包括Bing,Lync,都在积极利用众包来测试他们的功能。对我们的测试员意味着是什么?仍是未知数。
    • James Whittaker , Jason Arbon和Jeff Carollo编写的“ 谷歌怎样进行软件测试 ”,很详细地回答封面的上问题。能在迷雾下看到像谷歌这么一个大型技术公司如何处理软件测试的复杂性,是很具知识性和趣味性。一个有趣的现象是,在此书的出版之前,三位作者都离开谷歌,一位回到微软担任开发主管,和另外两个则加入了uTest.com。下面是 一次访谈 的片断:

    InfoQ:在本书中,你提出了,“不要雇用太多的测试员”,并且在未来里测试工程师的作用在下降。你对此有何回应,公司认为需要更多的角色,以此划分开发人员和质量保证之间的界线?

    为什么你要这样的界线吗?谷歌已经证明编写代码和保证代码优秀的界线是模糊的,其结果就是代码被开发更快,并且潜在缺陷更少。雇用太多的测试员是为开发人员创建了一个依靠,对产品来说这就是有害的。当人们过于纠结自己的角色,会使我懊恼。“我是一个测试员”是一种不健康的心态。“我是一名开发人员”同样也是不健康的心态。当人们停止过多关注自己的角色,开始专注于他们的产品,这才是奇迹发生之时。这时候,每个人都专注于尽一切力量来打造他们能打造的最好的产品。

    InfoQ:对当前那些考虑加入测试相关角色的测试分析师(test analysts)或新毕业生,你能提供最好的建议是什么?可以满足这个角色不断变化的技能。

    对待测试如同开发一般。获取一个CS学位,并擅长CS。证书和行业培训只会教你简单的东西。学习难的东西,并掌握它。软件测试员只做简单的事情,在很长的时间里仍然会被视为二等公民。不想被这样对待吧?那就获取一等的技能。

    • Bing团队的融合工程(Combined Engineering)设想,对服务测试和软件测试员的职业生涯都是非常有趣的。在融合工程,软件开发工程师(SDE)们和软件测试开发工程师(SDET)们合并为一个“工程师”的角色,我们为交付服务而优化,而不是为软件而优化。换句话说,许多测试成为开发者,真正的开发人员只写代码,而不是测试。我认为这可能是服务团队的未来发展方向,今天的测试员可以更专注于监测,基础设施和工具,他们和开发人员是一样的。
    • 我们的生产环境测试(Testing in Production)专家——Seth Eliot,认为TestOps是我们的测试的未来发展道路之一。你可以到这个链接看看相关信息。我认为生产环境测试能真正改变我们如何做测试以及测试员的职业的未来。这是TestOps访谈的一个小段:

    我认为测试领域的一个重要的变化将是我已经谈到过围绕测试服务和生产环境测试。我把它称为TestOps。

    测试员需要摆脱定式思维观念,编写测试 - 运行测试 - 评估结果。我们要使用大量数据(一般是指服务)作为产品的质量信号,而不是用日常运行的测试结果作为质量信号。这包括系统数据,如CPU,API请求,系统响应时间,以及(妥善匿名处理的)用户数据。此外,还包括在生产环境中持续运行时交易发出的数据。这些依然是测试用例,你可以得到持续的可用性和性能状况,而不是只获得每天的失败 / 通过的状态。这是一种技术,但它也必定会改变我们的软件工程。角色的分类与归类(role and specialization versus generalization)的问题,答案是应满足每个团队的具体需要。数据科学家做为工程团队的一部分,就是TestOps方法的一个令人兴奋的结果。

    其他与我们的职业生涯的相关文章:

       
  • 关于面试测试的题目和答案(转载)

    wangsf110 发布于 2013-07-27 17:26:14

    1.怎么做好文档测试?
    仔细阅读,跟随每个步骤,检查每个图形,尝试每个示例,检查文档的编写是否满足文档编写的目的,内容是否齐全,正确,完善.标记是否正确.


    2.白盒测试有几种方法?
    总体上分为静态方法和动态方法两大类。
    静态:关键功能是检查软件的表示和描述是否一致,没有冲突或者没有歧义
    动态:语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径覆盖。

    3.系统测试计划是否需要同行审批,为什么?
    需要,系统测试计划属于项目阶段性关键文档,因此需要评审。

    4.Alpha测试与beta的区别?
    Alpha测试在系统开发接近完成时对应用系统的测试;测试后仍然会有少量的设计变更。这种测试一般由最终用户或其它人员完成,不能由程序或测试员完成。
    Beta测试当开发和测试根本完成时所做的测试,最终的错误和问题需要在最终发行前找到。这种测试一般由最终用户或其它人员完成,不能由程序员或测试员完成。

    5.比较负载测试,容量测试和强度测试的区别?
    负载测试:在一定的工作负荷下,系统的负荷及响应时间。
    强度测试:在一定的负荷条件下,在较长时间跨度内的系统连续运行给系统性能所造成的影响。
    容量测试:容量测试目的是通过测试预先分 析出反映软件 系统应用特征的某项指标的极限值(如最大并发用户数、数据库记录数等),系统在其极限值状 态下没有出现任何软件故障或还能保持主要功能正常运行。容量测试 还将确定测试对象在给定时间内能够持续处理的最大负载或工作量。容量测试的目的是使系统承受超额的数据容量来发现它是否能够正确处理。容量测试是面向数据 的,并且它的目的是显示系统可以处理目标内确定的数据容量。

    6.测试结束的标准是什么?
    用例全部测试。
    覆盖率达到标准。
    缺陷率达到标准。
    其他指标达到质量标准

    7.描述软件测试活动的生命周期?
    测试周期分为计划、设计、实现、执行、总结。其中:
    计划:对整个测试周期中所有活动进行规划,估计工作量、风险,安排人力物力资源,安排进度等;
    设计:完成测试方案,从技术层面上对测试进行规划;
    实现:进行测试用例和测试规程设计;
    执行:根据前期完成的计划、方案、用例、规程等文档,执行测试用例。
    总结:记录测试结果,进行测试分析,完成测试报告。
    8.软件的缺陷等级应如何划分?
    A类—严重错误,包括以下各种错误: 1. 由于程序所引起的死机,非法退出 2. 死循环 3. 数据库发生死锁 4. 因错误操作导致的程序中断 5. 功能错误 6. 与数据库连接错误 7. 数据通讯错误
    B类—较严重错误,包括以下各种错误: 1. 程序错误 2. 程序接口错误 3. 数据库的表、业务规则、缺省值未加完整性等约束条件
    C类—一般性错误,包括以下各种错误: 1. 操作界面错误(包括数据窗口内列名定义、含义是否一致) 2. 打印内容、格式错误 3. 简单的输入限制未放在前台进行控制 4. 删除操作未给出提示 5. 数据库表中有过多的空字段
    D类—较小错误,包括以下各种错误: 1. 界面不规范 2. 辅助说明描述不清楚 3. 输入输出不规范 4. 长操作未给用户提示 5. 提示窗口文字未采用行业术语 6. 可输入区域和只读区域没有明显的区分标志

    9. 当开发人员说不是BUG时,你如何应付?
       开发人员说不是bug,有2种情况,一是需求没有确定,所以我可以这么做,这个时候可以找来产品经理进行确认,需不需要改动,3方商量确定好后再看要 不要改。二是这种情况不可能发生,所以不需要修改,这个时候,我可以先尽可能的说出是BUG的依据是什么?如果被用户发现或出了问题,会有什么不良结果? 程序员可能会给你很多理由,你可以对他的解释进行反驳。如果还是不行,那我可以给这个问题提出来,跟开发经理和测试经理进行确认,如果要修改就改,如果不 要修改就不改。其实有些真的不是bug,我也只是建议的方式写进TD中,如果开发人员不修改也没有大问题。如果确定是bug的话,一定要坚持自己的立场, 让问题得到最后的确认。

    10.你为什么想离开目前的职务?
       因为公司运作情况并不理想,公司需要调整部门体系,公司考虑到缩减部门人员,所以大批量的裁员(有6,7个),这是我的第一份工作,对公司也有较深的 感情,因为在这里我找到了职业理想(就是测试),所以公司需要精简人员,我自愿退出。虽然很舍不得,但我将会有新的发挥能力的舞台。

    11.您认为做好测试用例设计工作的关键是什么?
    白盒测试用例设计的关键是以较少的用例覆盖尽可能多的内部程序逻辑结果
    黑盒法用例设计的关键同样也是以较少的用例覆盖模块输出和输入接口。不可能做到完全测试,以最少的用例在合理的时间内发现最多的问题

    12. 请试着比较一下黑盒测试、白盒测试、单元测试、集成测试、系统测试、验收测试的区别与联系。
      黑盒测试:已知产品的功能设计规格,可以进行测试证明每个实现了的功能是否符合要求。
      白盒测试:已知产品的内部工作过程,可以通过测试证明每种内部操作是否符合设计规格要求,所有内部成分是否以经过检查。
      软件的黑盒测试意味着测试要在软件的接口处进行。这种方法是把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序 的需求规格说明书,检查程序的功能是否符合它的功能说明。因此黑盒测试又叫功能测试或数据驱动测试。黑盒测试主要是为了发现以下几类错误:
      1、是否有不正确或遗漏的功能?
      2、在接口上,输入是否能正确的接受?能否输出正确的结果?
      3、是否有数据结构错误或外部信息(例如数据文件)访问错误?
      4、性能上是否能够满足要求?
      5、是否有初始化或终止性错误?
      软件的白盒测试是对软件的过程性细节做细致的检查。这种方法是把测试对象看做一个打开的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,设计 或选择测试用例,对程序所有逻辑路径进行测试。通过在不同点检查程序状态,确定实际状态是否与预期的状态一致。因此白盒测试又称为结构测试或逻辑驱动测 试。白盒测试主要是想对程序模块进行如下检查:
      1、对程序模块的所有独立的执行路径至少测试一遍。
      2、对所有的逻辑判定,取“真”与取“假”的两种情况都能至少测一遍。
      3、在循环的边界和运行的界限内执行循环体。
      4、测试内部数据结构的有效性,等等。
      单元测试(模块测试)是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。
      单元测试是由程序员自己来完成,最终受益的也是程序员自己。可以这么说,程序员有责任编写功能代码,同时也就有责任为自己的代码编写单元测试。执行单元测试,就是为了证明这段代码的行为和我们期望的一致。
      集成测试(也叫组装测试,联合测试)是单元测试的逻辑扩展。它的最简单的形式是:两个已经测试过的单元组合成一个组件,并且测试它们之间的接口。从这 一层意义上讲,组件是指多个单元的集成聚合。在现实方案中,许多单元组合成组件,而这些组件又聚合成程序的更大部分。方法是测试片段的组合,并最终扩展进 程,将您的模块与其他组的模块一起测试。最后,将构成进程的所有模块一起测试。
      系统测试是将经过测试的子系统装配成一个完整系统来测试。它是检验系统是否确实能提供系统方案说明书中指定功能的有效方法。(常见的联调测试)
      系统测试的目的是对最终软件系统进行全面的测试,确保最终软件系统满足产品需求并且遵循系统设计。
      验收测试是部署软件之前的最后一个测试操作。验收测试的目的是确保软件准备就绪,并且可以让最终用户将其用于执行软件的既定功能和任务。
    验收测试是向未来的用户表明系统能够像预定要求那样工作。经集成测试后,已经按照设计把所有的模块组装成一个完整的软件系统,接口错误也已经基本排除了,接着就应该进一步验证软件的有效性,这就是验收测试的任务,即软件的功能和性能如同用户所合理期待的那样。
  • 在linux下搭建apache服务器,配置虚拟服务器

    pengpengfly 发布于 2013-07-25 11:45:32

    Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一

    1.下面是linux下安装apache的完整过程,系统是redha6.4
    下载httpd-2.2.6.tar.bz2  把httpd-2.2.6.tar.bz2放到/soft 下
    [root@localhost ~]#cd /soft
    [root@localhost soft]#tar -xzvf httpd-2.2.6.tar.gz    //解压apache的压缩包
    [root@localhost soft]#cd httpd-2.2.6     //定位到httpd-2.2.6 文件夹下
    [root@localhost httpd-2.2.6]#ls     //查看显示httpd-2.2.6 文件夹下内容
    [root@localhost httpd-2.2.6]#./configure --help | more    //查看安装apache配置参数
    [root@localhost httpd-2.2.6]#./configure  --prefix=/usr/local/apache  --enable-so    //  配置apache路径
    [root@localhost httpd-2.2.6]#make     //编译apache
    [root@localhost httpd-2.2.6]#make install    //安装apache
    [root@localhost httpd-2.2.6]#cd /usr/local/apache   //进入apache的目录     
    [root@localhost apache]#  cd conf/
    [root@localhost conf]#cp -a httpd.conf httpd.conf-     //备份apache配置文件
    [root@localhost conf]#chkconfig  --list httpd     //查看httpd服务是否已存在
    [root@localhost conf]#chkconfig httpd off    //关闭系统自带了httpd的服务,如果存在httpd服务   
    [root@localhost conf]#service httpd status    //查看自带httpd服务状态
    [root@localhost conf]#/usr/local/apache/bin/apachectl -k start    //linux启动apache命令              
    [root@localhost conf]#netstat -an | grep :80    //查看linux80端口是否开启
    [root@localhost conf]#ps -aux | grep httpd     //linux下查看apache进程
    [root@localhost conf]#cd ../..
    [root@localhost local]#cp /usr/local/apache/bin/apachectl /etc/rc.d/init.d/apache //拷贝apache启动脚本
    [root@localhost local]#vi /etc/rc.d/init.d/apache    // 这里是编辑apache启动脚本
      在开头的#!/bin/sh  下面加上
                  #chkconfig: 2345  85  15  //#号不能少
    [root@localhost local]#chkconfig --add apache    //添加apache服务
    [root@localhost local]#chkconfig --list apache    //列出apache服务
    [root@localhost local]#service apache stop    //停止apache服务
    [root@localhost local]#netstat -an | grep :80     //查看linux的80端口是否关闭
    [root@localhost local]#ps -aux | grep httpd     //查看是否存在httpd服务,若果之前自带httpd服务启动的话会导致新添加的apache服务启动失败
    [root@localhost local]#service apache start    //启动apache服务
    打开http://localhost:80,如果出现的话,那么恭喜你,apache已安装成功


    2.通过不同端口配置多个虚拟服务器
    [root@localhost httpd-2.2.6]#cd /usr/local/apache/conf
    [root@localhost httpd-2.2.6]vim httpd.conf
    加入下面的配置:

    Listen 80                                //通过监听不同端口来区分虚拟服务器
    Listen 8080
    NameVirtualHost 192.168.2.204:80
    NameVirtualHost 192.168.2.204:8080
    <VirtualHost 192.168.2.204:80>
    ServerName www.example1.com
    DocumentRoot "/pic"
    </VirtualHost>
    <VirtualHost 192.168.2.204:8080>
    ServerName www.example21.com
    DocumentRoot "/alarmpic"
    </VirtualHost>
    服务器默认文件夹属性设置
    <Directory "/pic">
        #
        # Possible values for the Options directive are "None", "All",
        # or any combination of:
        #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
        #
        # Note that "MultiViews" must be named *explicitly* --- "Options All"
        # doesn't give it to you.
        #
        # The Options directive is both complicated and important.  Please see
        # http://httpd.apache.org/docs/2.2/mod/core.html#options
        # for more information.
        #
        Options Indexes FollowSymLinks
        #
        # AllowOverride controls what directives may be placed in .htaccess files.
        # It can be "All", "None", or any combination of the keywords:
        #   Options FileInfo AuthConfig Limit
        #
        AllowOverride None
        #
        # Controls who can get stuff from this server.
        #
        Order allow,deny
        Allow from all
    </Directory>

    <Directory "/alarmpic">
        #
        # Possible values for the Options directive are "None", "All",
        # or any combination of:
        #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
        #
        # Note that "MultiViews" must be named *explicitly* --- "Options All"
        # doesn't give it to you.
        #
        # The Options directive is both complicated and important.  Please see
        # http://httpd.apache.org/docs/2.2/mod/core.html#options
        # for more information.
        #
        Options Indexes FollowSymLinks
        #
        # AllowOverride controls what directives may be placed in .htaccess files.
        # It can be "All", "None", or any combination of the keywords:
        #   Options FileInfo AuthConfig Limit
        #
        AllowOverride None
        #
        # Controls who can get stuff from this server.
        #
        Order allow,deny
        Allow from all
    </Directory>

    保存重启服务:service apache restart 
  • 值得考虑的论谈-测试人员与测试工具的关系(转)

    黑鱼白 发布于 2013-06-06 15:14:48

       今天想谈谈测试人员和测试工具的关系问题。

      从02年开始接触测试,我用过了无数的测试工具,通信行业需要的测试工具要比互联网复杂得多,因为需要仿真通信时遇到的各种问题。测试工具可以定制各种消息,各种网络环境,还有各种异常。一般非常专业的测试工具都是需要购买的,价格不菲。基于自动化回归,诺西做过robot,让测试人员通过表格化的方式来写测试用例。手工测试和自动化测试花费的时间比差不多是1:5到1:10(《人件》当中有详细的阐述)。自动化回归发现的bug是相当少的,也没有人会去统计这个数值。我相信除非禁止了手工测试,否则自动化回归发现的bug永远都是相当少的。自动化覆盖率大幅提高的同时,customer pronto的数量也在大幅提高。但我并不清楚其中有没有必然的联系。很值得去分析一下。

      到了互联网企业,测试工具就要简单得多,基本上用于自动化回归。TC的管理也没有通信行业复杂,不需要把用例和需求关联起来,也不需要统计用例对需求的覆盖率。

      互联网企业喜欢自己写测试框架,这可以理解,因为相对来说功能比较大众化,比较简单。用开源的框架就可以了。自己写框架,可以提高响应速度,任何个性化的需求都可以得到快速的满足,这挺好的,对测试人员来说也是一个写代码的锻炼机会。

      但是工具仅仅是工具而已,测试人员会用工具,可以提高测试的工作效率,就够了。测试人员更重要的工作是发现bug,当我需要用工具的时候我就用工具,当我不需要工具的时候,我完全可以不用。

      这么简单的道理,我相信人人都明白的吧。

      可是,现在好像很多人都不明白这个道理了。

      首先,我们来谈谈我们为什么要用工具。有句话叫做,磨刀不误砍柴工,磨刀是为了提高砍柴的效率。对吧?那么,到底是磨刀好呢,还是砍柴好呢?没人care,大家只care最后柴砍得好不好,快不快,多不多。如果只砍柴,不磨刀,柴就会砍得慢。如果只磨刀,不砍柴,那就更糟了,没柴用了。

      我会认为,一个好的樵夫,肯定会重视磨刀,但是磨完了刀他会去砍柴,磨一次刀可以砍好几天的柴。一个好的测试人员,肯定会想办法提高自己的工作效率,善用工具,没有工具的时候会创造工具,但是他还是会专注于测试。

      一个好的管理者,会在乎最后柴砍得好不好,而不是看这个人会不会磨刀。会不会磨刀不重要,重要的是,是不是需要磨刀,需要磨刀的时候才磨刀,不需要磨刀的时候硬要去磨刀,也不是一个好的樵夫。对吗?

      测试人员和测试工具的关系,应该是使用和被使用的关系。一个好的测试人员,更关注于自己的测试工作是否能够高效率的完成。怎么样可以更好地做好自己的工作,就怎么做。没必要做任何工具都要去给别人用,都要做成一个框架,都要有影响力。考量KPI的时候,判断晋升的时候,看这个测试人员做了多少给别人用的工具是毫无意义的。

      我不希望看到测试人员为工具所累,更不希望做工具会成为考量一个测试人员的标准。一个测试人员有好的开发技能不需要体现在做了一个测试框架和测试工具上面,而是需要体现在需求评审的时候拒绝了一个无用的产品,技术评审的时候阻止了一个愚蠢的设计。我记得有个老大曾经说过一句话,测试人员要比开发懂业务,要比业务懂技术。我觉得这句话很靠谱,我也是这么做的。我也常常做工具,只是为了提高效率,但不会以此为目的。有人说过,优秀的程序员需要三个宝贵的品质:懒惰、急躁和骄傲。懒惰就是讨厌重复的工作,重复劳动用自动化来替代,急躁就是不耐烦做复杂繁琐的事情,骄傲就是相信自己能做出最优秀的产品。其实测试人员也是一样的。一个好的测试人员,会用聪明的办法解决自己的问题,会在问题中总结经验教训,会在成功的产品中留下自己的身影。

      所以,当测试人员都争先恐后地去做工具的时候,我感到非常的茫然。这是怎么了?在一个开源框架的基础上做出一个几十或几百人用的日常工具就这么有成就感吗?就这么容易被认同吗?难道去和PD、开发一起做一个几百万或上亿人使用的优秀产品反而没有那么大的魅力了吗?买家和卖家认同你的产品,可以从你的产品中得到服务,得到订单,去改变现状,难道不比做一个日常管理bug和用例,管理自动化回归的测试框架更有挑战,更有意义吗?

      如果你从一个公司的角度看待每一个角色,好的产品经理需要把控产品的定位、设计出满足运营需求的产品,好的开发需要运用自己的技术能力,快速开发出稳定、好用的产品,好的测试需要运用自己的测试技术和经验,及早发现所有的问题并改正。开发向前走,是为了帮助产品经理选择用最好的技术来实现产品。测试向前走,是为了帮助产品经理和开发避免犯错,让错误的代价最小。每一个角色都有自己的价值,每一个角色都很重要。开发需要精通于自己的技术,在技术领域做到最优,测试需要了解每个领域的产品和技术,在每一个环节“say no”。有的时候我甚至觉得做一个好的测试,要比一个好的开发更难。

      但是,现实并非如此。大家总是觉得,创造一个产品很有成就感,说真的,我也常常会这么想。测试只有在一个产品被骂的时候才会被提及,大家会说,这个产品怎么通过测试的,这么烂!但当一个产品很出色时,没有人会说,这个产品的测试太牛了,产品这么好!这就是做一个测试最痛苦的一点。很多同事也问过我同样的问题,怎么样才能体现出一个好的测试呢?记得我刚到互联网公司的时候,有一个开发问我:这里有一百多行代码,你看不看得懂?我当时真不知道该说什么。就好像有一次一个快递问我妈,你会不会写字?我妈当时想跟他说,我清华大学毕业的,你说我会不会写字?后来想想,也懒得说了,就说,会写字。有的时候我也在想,如果我当初不去诺基亚做测试,继续留在VIA做开发,我现在会是什么?至少不会有一天,有个开发问我,你看不看得懂代码。也许正是出于这样的心理,所以测试人员才会热情高涨地去做工具,去参加无线之夜,去参加赛马。是想证明我不是没水平,我不是看不懂代码,我只是选择了测试这个岗位!但这本来就不需要去证明的啊!

      记得当初我参加面试的时候,技术总监问我,你对自己的定位是什么呢?我说,是测试架构。因为在V Model里的每一个环节我都经历过,我知道如何来把控一个产品。我也会带领所有的测试人员向前走,想后走,把产品的质量管起来。

      可是现在,测试人员正在不断地用测试工具来证明自己的价值和能力,公司也在用开发能力来衡量一个测试人员,这让我觉得太拧巴了。这样的衡量标准,让测试人员情何以堪?测试工具不再是工具,而是我的价值所在。工具在,故我在。我是高P,故我做工具。磨刀不再是为了砍柴,而是为了存在。这是不是很可笑呢?

  • 冒烟测试<转>

    chenyue181 发布于 2013-04-25 11:37:32

    1.什么是冒烟测试

    冒烟测试,是对软件基本的功能进行测试,测试的对象是每一个新编译的需要正式测试的软件版本,目的是确认软件基本的功能正常,保证软件系统能跑的起来,可以进行后续的正式测试工作如果最基本的测试都有问题,就直接打回开发部了,所以正式交付测试的版本必须首先通过冒烟测试的考验。

    不做冒烟测试的问题:测试人员直接测的话,测试执行一半或者刚开头,就出现基本功能有问题,无法继续测试下去的情况,这时只能中断测试,返回给开发部进行修改,这样会浪费测试部门的时间和资源

    冒烟测试,只是一个测试活动,并不是一个测试阶段。也就是说,冒烟测试贯穿于测试的任何一个阶段,单元测试里会有冒烟测试、集成测试里会有冒烟测试、系统测试里也会有冒烟测试。

     

    2.基于每日构建冒烟测试

    微软,冒烟测试就是在每日build建立后,对系统的 基本功能进行简单的测试。这种测试强调功能的覆盖率,而不对功能的正确性进行验证。

    冒烟测试一般用于每日构建(Nightly build),构建服务器首先从VSS服务器上,下载最新的源代码,然后编译单元测试,运行单元测试通过后,编译可执行文件,可执行文件若可运行,并能执 行最基本的功能,则认为通过了冒烟测试,这时,构建服务器会把程序打包成安装文件,然后上传到内部网站,第二天一早,测试人员来了以后,会收到构建服务器 发来的邮件提示昨晚是否构建成功。若构建成功,则测试人员进行相关的功能测试

    l基于每日构建冒烟测试的优点主要有:

    1.进度可见并可以控制到1-2天的细粒度,很容易看到进度的偏差

    2.及早的发现开发BUG和缺陷并分析解决,对开发人员的一种监督和促进,提高软件质量

    3.由于将大集成分解到每日构建中的小集成,避免了传统产品集成或集成测试时候出现的严重问题的可能。

    4.在项目中宣灌质量意识,强调第一次就把事情做好,而不是等测试来帮你发现问题

    l基于每日构建冒烟测试也存在一些风险和缺陷,具体主要有

    1.给开发人员太大压力,开发每天都在较紧张环境中工作

    2.需要额外的测试人力资源和每日构建硬件环境的投入

    3.开发人员不能专注,既要分心去修改BUG,又要开发新的功能点

    4.对开发负责人要求更好,需要将功能细化到1-2天的有明确输出的功能点

    5.开发需要投入额外的精力来保证每日构建顺畅

    l基于每日构建冒烟测试适用场景

    1.对进度偏差控制和要求很高的项目

    2.开发检查点和里程碑制定的很细致的项目

    3.采用增量和迭代开发的项目,快速和敏捷开发的项目

    3.基于送测版本的冒烟测试

    这个做法来源于微软的每日build和冒烟测试,只是把粒度放大了。不是做每日build,而是根据版本计划,开发组定期发布送测版本,测试组拿到新的版本先做冒烟测试,测试通过则开始正式测试,不通过就返给开发组。

    这种做法的优点可以避免微软的每日build和冒烟测试做法的一些缺陷,同时也会因粒度粗而有自身的缺点。

    n冒烟测试的实现过程

    a)测试规划阶段:冒烟测试用例的编写,以及测试执行,都是需要时间成本的,故在最初制作项目计划时,就应该识别该任务,并充分考虑其工作。根据项目实际,确定在单元测试,集成测试,系统测试的哪个或哪几个阶段开展冒烟测试。

    b)冒烟测试用例设计:分析系统主要功能和业务流程,编写覆盖这些功能的正向测试用例。如果没有用例就无法跟踪掌握整个冒烟测试的重点,以及各个版本之间的冒烟对比。冒烟测试用例应该随着系统的不断扩展而不断扩展,它不应该是一成不变的。

    c)冒烟测试执行:每个版本发布时,根据版本包含的功能特性,评估需要执行的冒烟测试用例。

    d)冒烟测试结果输出:冒烟测试执行情况,通过的测试用例数,不通过的测试用例数,据此判断是否开始正式的测试。

    n冒烟测试用例应该包含的内容

    a)业务流的测试,保证正常业务链路的通畅。

    b)工作流的测试,主要是测试流程流转是否正常,至于流程步骤的表单内容是否正确则不关注。

    c)关键功能的测试,至少要保证系统运转所需的启动数据,以及一些开关控制正常。

    d)重要基本功能的测试,比如对核心业务有影响的一些增删改等。

    n冒烟测试的入口准则:

    a)软件版本已经发布;

    b)冒烟测试计划和测试用例通过评审;

    c)测试环境准备完毕;

    n冒烟测试的出口准则:

    a)发现的致命和严重类缺陷为0;

    b)一般和建议类缺陷总数/冒烟场景总数 <= 2;

    c)所有必选测试场景的通过率 = 100%;

    d)随即抽取的可选测试场景通过率 > 80%;

    4.冒烟测试自动化

    冒烟测试可以手动执行,可以考虑自动化执行。稳定的系统适合自动化冒烟测试,集成过程中的系统适合手工冒烟测试,因为冒烟测试内容在动态变化,变化中的自动化脚本维护工作量比较大。

    自动化冒烟测试脚本应当遵循的原则

    1、覆盖主要功能;

    2、测试脚本要简单易用;

    3、测试脚本要独立;每个测试脚本要尽可能的独立,每个测试脚本覆盖的测试点要尽可能的单一

    5、要有对测试脚本的设计和说明文档,以便于维护。

    6、测试结果收集留存每一次的测试结果,对比一段时间内的测试结果,可以知道产品那些功能点质量不稳定,如果同一个测试点在一段时间内经常不能够测试通过,那么这一部分的代码十分有必要进行review,可能存在更大的隐患。

    5.XX产品的冒烟测试举例

    XX是一个简单、易用、高效、开放和面向服务的应用集成平台,它对外提供的功能主要体现在可以提供不同的接入和接出协议方式的服务调用。所以,XX的冒烟测试主要是验证XX能够正确提供上述功能。

    XX的冒烟测试用于验证XX多种接入接出协议下的服务调用功能是否正确。

    每次拿到测试版本,先确定要执行的冒烟测试用例,然后执行冒烟测试,记录并分析测试结果:如果冒烟测试通过,则开始后续正式的测试工作。如果测试不通过,则提交对应的bug,同时该版本返给开发组;等到再有新版本或补丁的时候,再次开始冒烟测试。

  • 转 Wireshark图解教程(简介、抓包、过滤器)

    itjavahead 发布于 2013-02-28 15:48:44

      Wireshark是世界上最流行的网络分析工具。这个强大的工具可以捕捉网络中的数据,并为用户提供关于网络和上层协议的各种信息。与很多其他网络工具一样,Wireshark也使用pcap network library来进行封包捕捉。可破解局域网内QQ、邮箱、msn、账号等的密码!!
    wireshark的原名是Ethereal,新名字是2006年起用的。当时Ethereal的主要开发者决定离开他原来供职的公司,并继续开发这个软件。但由于Ethereal这个名称的使用权已经被原来那个公司注册,Wireshark这个新名字也就应运而生了。

    在成功运行Wireshark之后,我们就可以进入下一步,更进一步了解这个强大的工具。

    下面是一张地址为192.168.1.2的计算机正在访问“openmaniak.com”网站时的截图。

    wireshark frontend

    1. MENUS(菜单)
    2. SHORTCUTS(快捷方式)
    3. DISPLAY FILTER(显示过滤器)
    4. PACKET LIST PANE(封包列表)
    5. PACKET DETAILS PANE(封包详细信息)
    6. DISSECTOR PANE(16进制数据)
    7. MISCELLANOUS(杂项)


    1. MENUS(菜单)

    wireshark menus
    程序上方的8个菜单项用于对Wireshark进行配置:

    - "File"(文件)
    - "Edit" (编辑)
    - "View"(查看)
    - "Go" (转到)
    - "Capture"(捕获)
    - "Analyze"(分析)
    - "Statistics" (统计)
    - "Help" (帮助)
    打开或保存捕获的信息。
    查找或标记封包。进行全局设置。
    设置Wireshark的视图。
    跳转到捕获的数据。
    设置捕捉过滤器并开始捕捉。
    设置分析选项。
    查看Wireshark的统计信息。
    查看本地或者在线支持。

    2. SHORTCUTS(快捷方式)

    wireshark shortcuts
    在菜单下面,是一些常用的快捷按钮。
    您可以将鼠标指针移动到某个图标上以获得其功能说明。


    3. DISPLAY FILTER(显示过滤器)

    wireshark display filter
    显示过滤器用于查找捕捉记录中的内容。
    请不要将捕捉过滤器和显示过滤器的概念相混淆。请参考Wireshark过滤器中的详细内容。

    Wireshark图解教程(简介、抓包、过滤器) 返回页面顶部



    4. PACKET LIST PANE(封包列表)

    wireshark packet filter pane
    wireshark packet filter pane
    封包列表中显示所有已经捕获的封包。在这里您可以看到发送或接收方的MAC/IP地址,TCP/UDP端口号,协议或者封包的内容。

    如果捕获的是一个OSI layer 2的封包,您在Source(来源)和Destination(目的地)列中看到的将是MAC地址,当然,此时Port(端口)列将会为空。
    如果捕获的是一个OSI layer 3或者更高层的封包,您在Source(来源)和Destination(目的地)列中看到的将是IP地址。Port(端口)列仅会在这个封包属于第4或者更高层时才会显示。

    您可以在这里添加/删除列或者改变各列的颜色:
    Edit menu -> Preferences

    5. PACKET DETAILS PANE(封包详细信息)

    wireshark packet filter pane
    这里显示的是在封包列表中被选中项目的详细信息。
    信息按照不同的OSI layer进行了分组,您可以展开每个项目查看。下面截图中展开的是HTTP信息。

    wireshark packet details pane

    6. DISSECTOR PANE(16进制数据)

    wireshark packet dissector pane
    “解析器”在Wireshark中也被叫做“16进制数据查看面板”。这里显示的内容与“封包详细信息”中相同,只是改为以16进制的格式表述。
    在上面的例子里,我们在“封包详细信息”中选择查看TCP端口(80),其对应的16进制数据将自动显示在下面的面板中(0050)。


    7. MISCELLANOUS(杂项)

    wireshark miscellanous
    在程序的最下端,您可以获得如下信息:

    - - 正在进行捕捉的网络设备。
    - 捕捉是否已经开始或已经停止。
    - 捕捉结果的保存位置。
    - 已捕捉的数据量。
    - 已捕捉封包的数量。(P)
    - 显示的封包数量。(D) (经过显示过滤器过滤后仍然显示的封包)
    - 被标记的封包数量。(M)

    正如您在Wireshark教程第一部分看到的一样,安装、运行Wireshark并开始分析网络是非常简单的。

    使用Wireshark时最常见的问题,是当您使用默认设置时,会得到大量冗余信息,以至于很难找到自己需要的部分。
    过犹不及。

    这就是为什么过滤器会如此重要。它们可以帮助我们在庞杂的结果中迅速找到我们需要的信息。

    -
    -
    捕捉过滤器:用于决定将什么样的信息记录在捕捉结果中。需要在开始捕捉前设置。
    显示过滤器:在捕捉结果中进行详细查找。他们可以在得到捕捉结果后随意修改。
    那么我应该使用哪一种过滤器呢?

    两种过滤器的目的是不同的。
    捕捉过滤器是数据经过的第一层过滤器,它用于控制捕捉数据的数量,以避免产生过大的日志文件。
    显示过滤器是一种更为强大(复杂)的过滤器。它允许您在日志文件中迅速准确地找到所需要的记录。

    两种过滤器使用的语法是完全不同的。我们将在接下来的几页中对它们进行介绍:



    1. 捕捉过滤器 2. 显示过滤器



    Wireshark图解教程(简介、抓包、过滤器) 1. 捕捉过滤器

    捕捉过滤器的语法与其它使用Lipcap(Linux)或者Winpcap(Windows)库开发的软件一样,比如著名的TCPdump。捕捉过滤器必须在开始捕捉前设置完毕,这一点跟显示过滤器是不同的。

    设置捕捉过滤器的步骤是:
    - 选择 capture -> options。
    - 填写"capture filter"栏或者点击"capture filter"按钮为您的过滤器起一个名字并保存,以便在今后的捕捉中继续使用这个过滤器。
    - 点击开始(Start)进行捕捉。

    wireshark capture options

    wireshark capture options

    语法:
    Protocol
    Direction
    Host(s)
    Value
    Logical Operations
    Other expression
    例子:
    tcp
    dst
    10.1.1.1
    80
    and
    tcp dst 10.2.2.2 3128
    Wireshark图解教程(简介、抓包、过滤器) Protocol(协议):
    可能的值: ether, fddi, ip, arp, rarp, decnet, lat, sca, moprc, mopdl, tcp and udp.
    如果没有特别指明是什么协议,则默认使用所有支持的协议。

    Wireshark图解教程(简介、抓包、过滤器) Direction(方向):
    可能的值: src, dst, src and dst, src or dst
    如果没有特别指明来源或目的地,则默认使用 "src or dst" 作为关键字。
    例如,"host 10.2.2.2"与"src or dst host 10.2.2.2"是一样的。
    Wireshark图解教程(简介、抓包、过滤器) Host(s):
    可能的值: net, port, host, portrange.
    如果没有指定此值,则默认使用"host"关键字。
    例如,"src 10.1.1.1"与"src host 10.1.1.1"相同。

    Wireshark图解教程(简介、抓包、过滤器) Logical Operations(逻辑运算):
    可能的值:not, and, or.
    否("not")具有最高的优先级。或("or")和与("and")具有相同的优先级,运算时从左至右进行。
    例如,
    "not tcp port 3128 and tcp port 23"与"(not tcp port 3128) and tcp port 23"相同。
    "not tcp port 3128 and tcp port 23"与"not (tcp port 3128 and tcp port 23)"不同。



    例子:

    tcp dst port 3128
    显示目的TCP端口为3128的封包。

    ip src host 10.1.1.1
    显示来源IP地址为10.1.1.1的封包。

    host 10.1.2.3
    显示目的或来源IP地址为10.1.2.3的封包。

    src portrange 2000-2500
    显示来源为UDP或TCP,并且端口号在2000至2500范围内的封包。

    not imcp
    显示除了icmp以外的所有封包。(icmp通常被ping工具使用)

    src host 10.7.2.12 and not dst net 10.200.0.0/16
    显示来源IP地址为10.7.2.12,但目的地不是10.200.0.0/16的封包。

    (src host 10.4.1.12 or src net 10.6.0.0/16) and tcp dst portrange 200-10000 and dst net 10.0.0.0/8
    显示来源IP为10.4.1.12或者来源网络为10.6.0.0/16,目的地TCP端口号在200至10000之间,并且目的位于网络10.0.0.0/8内的所有封包。


    注意事项:

    当使用关键字作为值时,需使用反斜杠“\”。
    "ether proto \ip" (与关键字"ip"相同).
    这样写将会以IP协议作为目标。

    "ip proto \icmp" (与关键字"icmp"相同).
    这样写将会以ping工具常用的icmp作为目标。

    可以在"ip"或"ether"后面使用"multicast"及"broadcast"关键字。
    当您想排除广播请求时,"no broadcast"就会非常有用。



    查看 TCPdump的主页以获得更详细的捕捉过滤器语法说明。
    Wiki Wireshark website上可以找到更多捕捉过滤器的例子。

    Wireshark图解教程(简介、抓包、过滤器) 2. 显示过滤器:

    通常经过捕捉过滤器过滤后的数据还是很复杂。此时您可以使用显示过滤器进行更加细致的查找。
    它的功能比捕捉过滤器更为强大,而且在您想修改过滤器条件时,并不需要重新捕捉一次。

    语法: Protocol .
    String 1
    .
    String 2
    Comparison
    operator
    Value
    Logical
    Operations
    Other
    expression
    例子:
    ftp
    passive
    ip
    ==
    10.2.3.4
    xor
    icmp.type
    Wireshark图解教程(简介、抓包、过滤器) Protocol(协议):

    您可以使用大量位于OSI模型第2至7层的协议。点击"Expression..."按钮后,您可以看到它们。
    比如:IP,TCP,DNS,SSH

    wireshark filter expression

    wireshark filter expression

    您同样可以在如下所示位置找到所支持的协议:

    wireshark supported protocols

    wireshark supported protocols

    Wireshark的网站提供了对各种 协议以及它们子类的说明

    Wireshark图解教程(简介、抓包、过滤器) String1, String2 (可选项):

    协议的子类。
    点击相关父类旁的"+"号,然后选择其子类。

    wireshark filter expression

    Wireshark图解教程(简介、抓包、过滤器) Comparison operators (比较运算符):

    可以使用6种比较运算符:

    英文写法: C语言写法: 含义:
    eq
    ==
    等于
    ne
    !=
    不等于
    gt
    >
    大于
    lt
    <
    小于
    ge
    >=
    大于等于
    le
    <=
    小于等于
    Wireshark图解教程(简介、抓包、过滤器) Logical expressions(逻辑运算符):

    英文写法: C语言写法: 含义:
    and
    &&
    逻辑与
    or
    ||
    逻辑或
    xor
    ^^
    逻辑异或
    not
    !
    逻辑非
    被程序员们熟知的逻辑异或是一种排除性的或。当其被用在过滤器的两个条件之间时,只有当且仅当其中的一个条件满足时,这样的结果才会被显示在屏幕上。
    让我们举个例子:
    "tcp.dstport 80 xor tcp.dstport 1025"
    只有当目的TCP端口为80或者来源于端口1025(但又不能同时满足这两点)时,这样的封包才会被显示。



    例子:

    snmp || dns || icmp 显示SNMP或DNS或ICMP封包。
    ip.addr == 10.1.1.1
    显示来源或目的IP地址为10.1.1.1的封包。

    ip.src != 10.1.2.3 or ip.dst != 10.4.5.6
    显示来源不为10.1.2.3或者目的不为10.4.5.6的封包。
    换句话说,显示的封包将会为:
    来源IP:除了10.1.2.3以外任意;目的IP:任意
    以及
    来源IP:任意;目的IP:除了10.4.5.6以外任意

    ip.src != 10.1.2.3 and ip.dst != 10.4.5.6
    显示来源不为10.1.2.3并且目的IP不为10.4.5.6的封包。
    换句话说,显示的封包将会为:
    来源IP:除了10.1.2.3以外任意;同时须满足,目的IP:除了10.4.5.6以外任意

    tcp.port == 25 显示来源或目的TCP端口号为25的封包。
    tcp.dstport == 25 显示目的TCP端口号为25的封包。
    tcp.flags 显示包含TCP标志的封包。
    tcp.flags.syn == 0x02 显示包含TCP SYN标志的封包。
    如果过滤器的语法是正确的,表达式的背景呈绿色。如果呈红色,说明表达式有误。

    wireshark display filter example 表达式正确
    wireshark display filter example 表达式错误
  • 转发:软件测试工具LoadRunner常见问题

    monkeybanana 发布于 2013-02-18 17:16:45

    这个总结的很全面,可以解决新手自学lr工具时遇到的大多数常见问题,很不错,转过来,共享。
    1.LoadRunner录制脚本时为什么不弹出IE浏览器?
      当一台主机上安装多个浏览器时,LoadRunner录制脚本经常遇到不能打开浏览器的情况,可以用下面的方法来解决。

      启动浏览器,打开Internet选项对话框,切换到高级标签,去掉“启用第三方浏览器扩展(需要重启动)”的勾选,然后再次运行VuGen即可解决问题

      提示:通常安装Firefox等浏览器后,都会勾选上面得选项,导致不能正常录制。因此建议运行LoadRunner得主机上保持一个干净的测试环境。

      2.录制Web脚本时,生成的脚本中存在乱码该如何解决?

      录制脚本前,打开录制选项配置对话框Record-Options,进入到Advanced标签,先勾选“Support charset”,然后选择中支持UTF-8。再次录制,就不会出现中文乱码问题了。

      3.HTML-based script与URL-based script的脚本有什么区别?

      使用“HTML-based script”的模式录制脚本,VuGen为用户的每个HTML操作生成单独的步骤,这种脚本看上去比较直观;使用“URL-based script”模式录制脚本时,VuGen可以捕获所有作为用户操作结果而发送到服务器的HTTP请求,然后为用户的每个请求分别生成对应方法。

      通常,基于浏览器的Web应用会使用“HTML-based script”模式来录制脚本;而没有基于浏览器的Web应用、Web应用中包含了与服务器进行交互的Java Applet、基于浏览器的应用中包含了向服务器进行通信的JavaScript/VBScript代码、基于浏览器的应用中使用了HTTPS安全协议,这时使用“URL-based script”模式进行录制。

      4.为什么脚本中添加了检查方法Web-find,但是脚本回放时却没有执行?

      由于检查点功能会耗费一定的资源,因此LoadRunner默认关闭了对文本及图像的检查。要想开启检查功能,必须修改运行时的配置Run-time Setting。

      进入“Run-time Setting”对话框,依次进入“Internet Protocol→Preferences”,勾选Checks下的“Enable Image and text check”选项即可。

      检查执行结果时推荐使用web_reg_find方法。

      5.运行时的Pacing设置主要影响什么?

      Pacing主要用来设置重复迭代脚本的间隔时间。共有三种方法:上次迭代结束后立刻开始、上次迭代结束后等待固定时间、按固定或随机的时间间隔开始执行新的迭代。

      根据实际需要设置迭代即可。通常,没有时间间隔会产生更大的压力。

      6.运行时设置Log标签中,如果没有勾选“Enable logging”,则手工消息可以发送吗?

      Enable logging选项仅影响自动日志记录和通过lr_log_message发送的消息。即使没有勾选,虚拟用户脚本中如果使用lr_message、lr_output_message、lr_error_message,仍然会记录其发出的消息。

      7.LoadRunner 8.0版本的VuGen在录制Web Services协议的脚本时一切正常,而回放时报出错误提示“Error:server returned an incorrectly formatted SOAP response”。这时说明原因引起的?

      造成这种情况的主要原因是LoadRunner 8.0的VuGen在录制Web Service协议的脚本时存在一个缺陷:如果服务器的操作系统是中文的,VuGen会自动将WSDL文件的头改为,因此会有上面的错误提示。

      解决方法:把“LR80WebservicesFPI_setup.exe”和“lrunner_web_sevices_path_1.exe”两个补丁打上即可解决。
     8.VuGen支持Netscape的客户证书吗?

      不支持。目前的VuGen 8.0版本中仅支持Internet Explorer的客户端证书。录制脚本时可以先从Netscape中导出所需的证书,然后将其导入到Internet Explorer中,并确保以相同的顺序导出和导入这些证书。而且,在每台将要录制或运行需要证书的Web Vuser脚本的计算机上都要重复执行前面的过程。

      9.VuGen会修改录制浏览器中的代理服务器设置吗?

      会修改。在开始录制基于浏览器的Web Vuser脚本时,VuGen首先会启动指定的浏览器。然后,VuGen会指示浏览器访问VuGen代理服务器。为此,VuGen会修改录制浏览器上的代理服务器设置。默认情况下,VuGen会立即将代理服务器设置更改为Localhost:7777。录制之后,VuGen会将原始代理服务器设置还原到该录制浏览器中。因此,在VuGen进行录制的过程中,不可以更改代理服务器设置,否则将无法正常进行。

      10.在LoadRunner脚本如何输出当前系统时间?

      LoadRunner提供了char *ctime(const time_t *time)函数,调用参数为一个Long型的整数指针,用于存放返回时间的数值表示。

      调用语句与返回值如下示例:

      typedef long time_t;

      Action()

      {

      time_t t;

      lr_message(“Time in seconds since 1/1/70: %ld”,time(&t));

      lr_message(“System time and date: %s”,ctime(&t));

      }

      输出结果为:

      Time in seconds since 1/1/70: 1185329968

      System time and date:Wed Jul 25 10:19:28 2007

      11.一些Web虚拟用户脚本录制后立刻回放没有任何问题,但是当设置迭代次数大于1时,如果进行回放则只能成功迭代一次。为什么从第二次迭代开始发生错误?

      这种现象多是由于在“Run-time Setting”的“Browse Emulation”的设置中,勾选了“Simulate a new user on each iteration”及其下面的选项“Clear cache on each iteration”这两个选项的含义是每次迭代时模拟一个新的用户及每次迭代时清除缓存。

      由于脚本迭代时,init和end只能执行一次,如果每次迭代都模拟一个新的用户并清除缓存,

    则用户登录信息将一并清除,因此迭代时可能会发生错误。

      12.虚拟客户脚本“Run-time Setting”中的线程和进程运行方式的区别?

      如果选择“Run Vuser as a process”,则场景运行时会为每一个虚拟用户创建一个进程;选择“Run Vuser as a thread”则将每个虚拟用户作为一个线程来运行,在任务管理器中只看到一个mmdrv.exe,这种方式的运行效率更高,能造成更大的压力,时默认选项。

      另外,如果启用了IP欺骗功能,则先在Controller中选中Tools菜单下的“Expert Mode”,然后将Tools菜单下的“Options>General”标签页中的IP地址分配方式也设置为与Vuser运行方式一致,同为线程或进程方式。

      13.在Controller中运行Web相关测试场景时,经常会有很多超时错误提示,如何处理这类问题?

      这主要有脚本的默认超时设置引起。当回放Web脚本时,有时候由于服务器响应时间较长,会产生超时的错误。这时需要修改脚本的运行时配置。

      进入“Run-time Setting”对话框后,依次进入“Internet Protocol→Preference”。然后点击“Options…”按钮,进入高级设置对话框,可以修改各类超时设置的默认值。

      14.为什么Windows系统中的CPU、内存等资源仍然充足,但是模拟的用户数量却上不去?

      在Windows计算机的标准设置下,操作系统的默认限制只能使用几百个Vuser,这个限制与CPU或内存无关,主要是操作系统本身规定了默认的最大线程数所导致。要想突破Windows这个限制,须修改Windows注册表。以Windows XP Professional为例。

      (1)打开注册表后,进入注册表项HKEY_LOCAL_MACHINE中的下列关键字:SystemCurrentControlSetControlSession ManagerSubSystems。

      (2)找到Windows关键字,Windows关键字如下所示:

      %SystemRoot%system32csrss.exe bjectDirectory=Windows

      SharedSection=1024,3072,512 Windows=On SubSystemType=Windows ServerDll=basesrv,1

      ServerDll=winsrv:UserServerDllInitialization,3 ServerDll=winsrv:ConServerDllInitialization,2

      ProfileControl=Off MaxRequestThreads=16

      SharedSection=1024,3072,512关键字的格式为xxxx,yyyy,zzz。其中,xxxx定义了系统范围堆的最大值(以KB为单位),yyyy定义每个桌面堆得大小。

      (3)将yyyy的设置从3072更改为8192(即8MB),增加SharedSection参数值。

      通过对注册表的更改,系统将允许运行更多的线程,

    因而可以在计算机上运行更多的Vuser。这意味着能够模拟的最大并发用户数量将不受Windows操作系统的限制,而只受硬件和内部可伸缩性限制的约束。


  • 教你如何做LoadRunner结果分析

    tjaclina 发布于 2013-02-18 18:00:01

    测试工具 性能测试 LoadRunner

      【IT168 技术文档】1.前言:

      LoadRunner 最重要也是最难理解的地方--测试结果的分析.其余的录制和加压测试等设置对于我们来讲通过几次操作就可以轻松掌握了.针对 Results Analysis 我用图片加文字做了一个例子,希望通过例子能给大家更多的帮助.这个例子主要讲述的是多个用户同时接管任务,测试系统的响应能力,确定系统瓶颈所在.客户要求响应时间是1 个人接管的时间在5S 内.

      2.系统资源:

      2.1 硬件环境:

      CPU:奔四2.8E

      硬盘:100G

      网络环境:100Mbps

      2.2 软件环境:

      操作系统:英文windowsXP

      服务器:tomcat 服务

      浏览器:IE6.0

      系统结构:B/S 结构

      3.添加监视资源

      下面要讲述的例子添加了我们平常测试中最常用到的一些资源参数.另外有些特殊的资源暂时在这里不做讲解了.我会在以后相继补充进来。

      Mercury Loadrunner Analysis 中最常用的5 种资源.

      1. Vuser

      2. Transactions

      3. Web Resources

      4. Web Page Breakdown

      5. System Resources

      在Analysis 中选择“Add graph”或“New graph”就可以看到这几个资源了.还有其他没有数据的资源,我们没有让它显示.

      具体实例教你如何做LoadRunner结果分析

      如果想查看更多的资源,可以将左下角的display only graphs containing data 置为不选.然后选中相应的点“open graph”即可.

      打开Analysis 首先可以看的是Summary Report.这里显示了测试的分析摘要.应有尽有.但是我们并不需要每个都要仔细去看.下面介绍一下部分的含义:

      Duration(持续时间):了解该测试过程持续时间.测试人员本身要对这个时期内系统一共做了多少的事有大致的熟悉了解.以确定下次增加更多的任务条件下测试的持续时间。

      Statistics Summary(统计摘要):只是大概了解一下测试数据,对我们具体分析没有太大的作用.

      Transaction Summary(事务摘要):了解平均响应时间Average单位为秒.

      其余的看不看都可以.都不是很重要.
    【注】 51Testing授权IT168独家转载,未经明确的书面许可,任何人或单位不得对本文内容复制、转载或进行镜像,否则将追究法律责任。

    内容导航

      4.分析集合点

      在录制脚本中通常我们会使用到集合点,那么既然我们用到了集合点,我们就需要知道Vuser 是在什么时候集合在这个点上,又是怎样的一个被释放的过程.这个时候就需要观察Vuser-Rendezvous 图.

      具体实例教你如何做LoadRunner结果分析

      图1

      可以看到大概在3 分50 的地方30 个用户才全部集中到start 集合点,持续了3 分多,在7 分30 的位置开始释放用户,9 分30 还有18 个用户,11 分10 还有5 个用户,整个过程持续了12 分.

      具体实例教你如何做LoadRunner结果分析

      图2

      上面图2 是集合点与平均事务响应时间的比较图.

      注:在打开analysis 之后系统LR 默认这两个曲线是不在同一张图中的.这就需要自行设置了.具体步骤如下:

      点击图上.右键选择merge graphs.然后在select graph to merge with 中选择即将用来进行比较的graph.如图3:

      具体实例教你如何做LoadRunner结果分析

      图3

      图2 中较深颜色的是平均响应时间,浅色的为集合点,当Vuser 在集合点持续了1分后平均响应时间呈现最大值,可见用户的并发对系统的性能是一个很大的考验.接下来看一下与事务有关的参数分析.下看一张图.

      具体实例教你如何做LoadRunner结果分析

      图4

      这张图包括Average Transaction Response Time 和Running Vuser 两个数据图.从图中可以看到Vuser_init_Transaction(系统登录)对系统无任何的影响,Vuser 达到15 个的时候平均事务响应时间才有明显的升高,也就是说系统达到最优性能的时候允许14 个用户同时处理事务,Vuser 达到30 后1 分,系统响应时间最大,那么这个最大响应时间是要推迟1 分钟才出现的,在系统稳定之后事务响应时间开始下降说明这个时候有些用户已经执行完了操作.同时也可以看出要想将事务响应时间控制在10S 内.Vuser 数量最多不能超过2 个.看来是很难满足用户的需求了.

      做一件事有时候上级会问你这件事办得怎么样了.你会说做完一半了.那么这个一半的事情你花了多少时间呢?所以我们要想知道在给定时间的范围内完成事务的百分比就要靠下面这个图(Transaction Response Time(Percentile)

      具体实例教你如何做LoadRunner结果分析

    图中画圈的地方表示10%的事务的响应时间是在80S 左右.80S 对于用户来说不是一个很小的数字,而且只有10%的事务,汗.你觉得这个系统性能会好么!

      实际工作中遇到的事情不是每一件事都能够在很短的时间内完成的,对于那些需要时间的事情我们就要分配适当的时间处理,时间分配的不均匀就会出现有些事情消耗的时间长一些,有些事情消耗的短一些,但我们自己清楚.LR 同样也为我们提供了这样的功能,使我们可以了解大部分的事务响应时间是多少?以确定这个系统我们还要付出多少的代价来提高它.

      Transaction Response Time(Distribution)-事务响应时间(分布)

      显示在方案中执行事务所用时间的分布.如果定义了可以接受的最小和最大事务性能时间,可以通过此图确定服务器性能是否在可接受范围内.

      具体实例教你如何做LoadRunner结果分析

      很明显大多数事务的响应时间在60-140S.在我测试过的项目中多数客户所能接受的最大响应时间也要在20S 左右.140S 的时间!很少有人会去花这么多的时间去等待页面的出现吧!

      通过观察以上的数据表.我们不难看到此系统在这种环境下并不理想.世间事有果就有因,那么是什么原因导致得系统性能这样差呢?让我们一步一步的分析.

      系统性能不好的原因多方面,我们先从应用程序看.有的时候我不得不承认LR 的功能真的很强大,这也是我喜欢它的原因.先看一张页面细分图.

      具体实例教你如何做LoadRunner结果分析

      一个应用程序是由很多个组件组成的,整个系统性能不好那我们就把它彻底的剖析一下.图片中显示了整个测试过程中涉及到的所有web 页.web page breakdown中显示的是每个页面的下载时间.点选左下角web page breakdown 展开,可以看到每个页中包括的css 样式表,js 脚本,jsp 页面等所有的属性.

      在select page to breakdown 中选择页面.

      具体实例教你如何做LoadRunner结果分析

      见图.

      在 Select Page To Breakdown 中选择http://192.168.0.135:8888/usertasks 后,在下方看到属于它的两个组件,第一行中Connection 和First Buffer 占据了整个的时间,那么它的消耗时间点就在这里,我们解决问题就要从这里下手.

      具体实例教你如何做LoadRunner结果分析

      具体实例教你如何做LoadRunner结果分析

      也有可能你的程序中client 的时间最长.或者其他的,这些就要根据你自己的测试结果来分析了.下面我们来看一下CPU,内存.硬盘的瓶颈分析方法:

      首先我们要监视CPU,内存.硬盘的资源情况.得到以下的参数提供分析的依据.
           %processor time(processor_total):器消耗的处理器时间数量.如果服务器专用于sql server 可接受的最大上限是80% -85 %.也就是常见的CPU 使用率.

      %User time(processor_total)::表示耗费CPU的数据库操作,如排序,执行aggregate functions等。如果该值很高,可考虑增加索引,尽量使用简单的表联接,水平分割大表格等方法来降低该值。

      %DPC time(processor_total)::越低越好。在多处理器系统中,如果这个值大于50%并且Processor:% Processor Time非常高,加入一个网卡可能会提高性能,提供的网络已经不饱和。

      %Disk time(physicaldisk_total):指所选磁盘驱动器忙于为读或写入请求提供服务所用的时间的百分比。如果三个计数器都比较大,那么硬盘不是瓶颈。如果只有%Disk Time比较大,另外两个都比较适中,硬盘可能会是瓶颈。在记录该计数器之前,请在Windows 2000 的命令行窗口中运行diskperf -yD。若数值持续超过80%,则可能是内存泄漏。

      Availiable bytes(memory):用物理内存数. 如果Available Mbytes的值很小(4 MB 或更小),则说明计算机上总的内存可能不足,或某程序没有释放内存。

      Context switch/sec(system): (实例化inetinfo 和dllhost 进程) 如果你决定要增加线程字节池的大小,你应该监视这三个计数器(包括上面的一个)。增加线程数可能会增加上下文切换次数,这样性能不会上升反而会下降。如果十个实例的上下文切换值非常高,就应该减小线程字节池的大小。

      %Disk reads/sec(physicaldisk_total):每秒读硬盘字节数.

      %Disk write/sec(physicaldisk_total):每秒写硬盘字节数.

      Page faults/sec:进程产生的页故障与系统产生的相比较,以判断这个进程对系统页故障产生的影响。

      Pages per second:每秒钟检索的页数。该数字应少于每秒一页Working set:理线程最近使用的内存页,反映了每一个进程使用的内存页的数量。如果服务器有足够的空闲内存,页就会被留在工作集中,当自由内存少于一个特定的阈值时,页就会被清除出工作集。

      Avg.disk queue length:读取和写入请求(为所选磁盘在实例间隔中列队的)的平均数。该值应不超过磁盘数的1.5~2 倍。要提高性能,可增加磁盘。注意:一个Raid Disk实际有多个磁盘。

      Average disk read/write queue length: 指读取(写入)请求(列队)的平均数Disk reads/(writes)/s:理磁盘上每秒钟磁盘读、写的次数。两者相加,应小于磁盘设备最大容量。

      Average disk sec/read:以秒计算的在此盘上读取数据的所需平均时间。Average disk sec/transfer:指以秒计算的在此盘上写入数据的所需平均时间。

      Bytes total/sec:为发送和接收字节的速率,包括帧字符在内。判断网络连接速度是否是瓶颈,可以用该计数器的值和目前网络的带宽比较Page read/sec:每秒发出的物理数据库页读取数。这一统计信息显示的是在所有数据库间的物理页读取总数。由于物理 I/O 的开销大,可以通过使用更大的数据高速缓存、智能索引、更高效的查询或者改变数据库设计等方法,使开销减到最小。

      Page write/sec:(写的页/秒)每秒执行的物理数据库写的页数。

    内容导航
    1. 判断应用程序的问题

      如果系统由于应用程序代码效率低下或者系统结构设计有缺陷而导致大量的上下文切换(context switches/sec显示的上下文切换次数太高)那么就会占用大量的系统资源,如果系统的吞吐量降低并且CPU的使用率很高,并且此现象发生时切换水平在15000以上,那么意味着上下文切换次数过高.

      具体实例教你如何做LoadRunner结果分析

      从图的整体看.context switches/sec变化不大,throughout曲线的斜率较高,并且此时的contextswitches/sec已经超过了15000.程序还是需要进一步优化.

      2. 判断CPU瓶颈

      如果processor queue length显示的队列长度保持不变(>=2)个并且处理器的利用率%Processortime超过90%,那么很可能存在处理器瓶颈.如果发现processor queue length显示的队列长度超过2,而处理器的利用率却一直很低,或许更应该去解决处理器阻塞问题,这里处理器一般不是瓶颈.

      具体实例教你如何做LoadRunner结果分析

      %processor time平均值大于95,processor queue length大于2.可以确定CPU瓶颈.此时的CPU已经不能满足程序需要.急需扩展.

      3. 判断内存泄露问题

      内存问题主要检查应用程序是否存在内存泄漏,如果发生了内存泄漏,process\private bytes计数器和process\working set 计数器的值往往会升高,同时avaiable bytes的值会降低.内存泄漏应该通过一个长时间的,用来研究分析所有内存都耗尽时,应用程序反应情况的测试来检验.

      具体实例教你如何做LoadRunner结果分析

      图中可以看到该程序并不存在内存泄露的问题.内存泄露问题经常出现在服务长时间运转的时候,由于部分程序对内存没有释放,而将内存慢慢耗尽.也是提醒大家对系统稳定性测试的关注.

      附件:

      CPU信息:

      Processor\ % Processor Time 获得处理器使用情况。

      也可以选择监视 Processor\ % User Time 和 % Privileged Time 以获得详细信息。

      Server Work Queues\ Queue Length 计数器会显示出处理器瓶颈。队列长度持续大于 4 则表示可能出现处理器拥塞。

      System\ Processor Queue Length 用于瓶颈检测通过使用 Process\ % Processor Time 和 Process\ Working Set

      Process\ % Processor Time过程的所有线程在每个处理器上的处理器时间总和。

      硬盘信息:

      Physical Disk\ % Disk Time

      Physical Disk\ Avg.Disk Queue Length

      例如,包括 Page Reads/sec 和 % Disk Time 及 Avg.Disk Queue Length。如果页面读取操作速率很低,同时 % Disk Time 和 Avg.Disk Queue Length的值很高,则可能有磁盘瓶径。但是,如果队列长度增加的同时页面读取速率并未降低,则内存不足。

      Physical Disk\ % Disk Time

      Physical Disk\ Avg.Disk Queue Length

      例如,包括 Page Reads/sec 和 % Disk Time 及 Avg.Disk Queue Length。如果页面读取操作速率很低,同时 % Disk Time 和 Avg.Disk Queue Length的值很高,则可能有磁盘瓶径。但是,如果队列长度增加的同时页面读取速率并未降低,则内存不足。

      请观察 Processor\ Interrupts/sec 计数器的值,该计数器测量来自输入/输出 (I/O) 设备的服务请求的速度。如果此计数器的值明显增加,而系统活动没有相应增加,则表明存在硬件问题。

      Physical Disk\ Disk Reads/sec and Disk Writes/sec

      Physical Disk\ Current Disk Queue Length

      Physical Disk\ % Disk Time

      LogicalDisk\ % Free Space

      测试磁盘性能时,将性能数据记录到另一个磁盘或计算机,以便这些数据不会干扰您正在测试的磁盘。

      可能需要观察的附加计数器包括 Physical Disk\ Avg.Disk sec/Transfer 、Avg.DiskBytes/Transfer,和Disk Bytes/sec。

      Avg.Disk sec/Transfer 计数器反映磁盘完成请求所用的时间。较高的值表明磁盘控制器由于失败而不断重试该磁盘。这些故障会增加平均磁盘传送时间。对于大多数磁盘,较高的磁盘平均传送时间是大于 0.3 秒。

      也可以查看 Avg.Disk Bytes/Transfer 的值。值大于 20 KB 表示该磁盘驱动器通常运行良好;如果应用程序正在访问磁盘,则会产生较低的值。例如,随机访问磁盘的应用程序会增加平均 Disk sec/Transfer 时间,因为随机传送需要增加搜索时间。

      Disk Bytes/sec 提供磁盘系统的吞吐率。

      决定工作负载的平衡要平衡网络服务器上的负载,需要了解服务器磁盘驱动器的繁忙程度。使用 Physical Disk\ %Disk Time 计数器,该计数器显示驱动器活动时间的百分比。如果 % Disk Time 较高(超过90%),请检查 Physical Disk\ Current Disk Queue Length 计数器以查看正在等待磁盘访问的系统请求数量。等待 I/O 请求的数量应当保持在不大于组成物理磁盘的主轴数的 1.5 到2倍。

      尽管廉价磁盘冗余阵列 (RAID) 设备通常有多个主轴,大多数磁盘有一个主轴。硬件 RAID设备在“系统监视器”中显示为一个物理磁盘;通过软件创建的 RAID 设备显示为多个驱动器(实例)。可以监视每个物理驱动器(而不是 RAID)的 Physical Disk 计数器,也可以使用 _Total 实例来监视所有计算机驱动器的数据。

      使用 Current Disk Queue Length 和 % Disk Time 计数器来检测磁盘子系统的瓶颈。如果Current Disk Queue Length 和 % Disk Time 的值始终较高,可以考虑升级磁盘驱动器或将某些文件移动到其他磁盘或服务器。

  • 【QTP】等待页面加载的几种方法

    黑羽祭 发布于 2013-02-05 13:40:57

    在脚本的编写过程中,经常会遇到脚本执行太快,导致页面还没有加载完毕,而脚本却已经执行到下面N条,为了避免这样的情况,列举了几种等待页面加载的方法:

    1

    File-->Settings-->Run-->Object synchronization中设置,默认时间是20秒。也就是说QTP会在20秒内不断的查找对象,如果在20秒内,页面控件出现,则能正常进行,超过20秒就要报错了。

    虽然加长超时时间是一种方法,但还是推荐下面几种方法。

     

    2


    Browser(":=").Navigate "http://www.baidu.com"
    Browser("百度一下,你就知道").Page("百度一下,你就知道").Sync
    msgbox "Over"

    这种方法最简单,直接在Page对象后,家个Sync,会等待页面加载完成后再执行下面语句,但有时候也不好使。

     

    3


    Browser(":=").Navigate "http://www.baidu.com"
    Browser("百度一下,你就知道").Page("百度一下,你就知道").WebEdit("wd").WaitProperty "visible"True100000 
    msgbox "Over"

    100秒的时间内,等待wd对象的visible属性,visible属性变为true,则执行下面语句。

    最后的100000单位是毫秒,如果在100000毫秒=100秒。

     

    4


    Browser(":=").Navigate "http://www.baidu.com"
    Do
        wait 0,500
    Loop Until Browser("百度一下,你就知道").Page("百度一下,你就知道").WebEdit("wd").Exist(0.5)
    msgbox "Over"

    这也是我比较喜欢的方法,要用什么控件,判断下是否存在,也可以直接写成函数,达到复用。

     

    5


    Set oIE = CreateObject("InternetExplorer.Application")
    oIE.Visible = True     '设置可见
    oIE.Navigate "http://www.baidu.com"        '跳转URL
    '等待IE页面加载完毕
    While oIE.Busy :Wend

    msgbox "Over"

    这也是一种方法,有点类似【4】,不同的是用了点DOM,大家参考一下吧。

     

    6

    如果上面的都不会,下面的是终极奥义,只有1句话


    wait 100     '你懂的

     




    .

     

  • 【转】软件测试工程师面试

    yanfang_zheng 发布于 2013-01-12 14:26:26

    辅导学员简历面试,发现还是有不少人思路不是特别清晰,也不知道该如何准备一次完美的面试。下面总结了关键的12个问题,能够比较完美地回答好这12个或者12类问题,相信能够给自己的面试带来很大的帮助:

    第一个问题:自我介绍(心理学首因效应告诉我们第一印象非常重要),自我介绍最重要的是能够在面试官心目中留下一个好的第一感觉。说得更直白一点是让面试官舒服。但是我发现很多人就是直接简单的介绍了一下过去的经历,但是实际上一方面过去的经历没有很好的让人发现优点。其实面试好比相亲,你想说什么不重要,重要地是人家想听什么。比较好的自我介绍套路是这样:“您好,我叫XXX,很高兴能获得这次面试机会,今天来面试是想证明自己是最合适的人选,另一个方面是获得您的认可,结合我过去的工作学习经历,我自信我能符合咱们公司的认可,接下来您看是我继续介绍我做过的项目,还是您问您关心的问题?”

    第二个问题:项目介绍(项目经验直接决定一个人能否胜任一份工作,企业更应该看重一个人解决问题的思路和具体能力),项目介绍部分最重要的思路是应该先整体后局部,介绍整体的时候要有量化的数据(从项目度量的五大维度:规模,包括项目代码规模,需求规模、用例规模,工作量,进度,质量和成本),然后是整体的测试流程,然后再是角色与职责,接下来是项目中自己的特色,比如做得最好的是、遇到最大的困难时、最差的是,最后是心得体会。

    第三类问题:数据库方面知识,最基本的要求是数据库记录的增删改查(insert、delete、update、select),表结构的增删改查(create、drop、alter、describe)、存储过程、触发器等。

    第四类问题:linux操作系统相关,最基本的目标是熟悉常见的50个命令,比如find命令(-name、-type、-perm、-user、-group、-ctime、-atime)等,熟悉vi、熟悉linux搭建测试环境。比如LAMP环境搭建。

    第五类问题:缺陷相关知识,最基本的是缺陷跟踪的流程(流程的基本要素),整体的流程,最好能在纸上给面试官画出来(尤其是男面试官,从男人好色的角度来看,写得很清楚很重要),缺陷单的属性,至少能列出20个属性,每个属性的意义,如何描述好缺陷单,缺陷单描述的5C原则,比如缺陷重现步骤应该 complete。如何描述一个你认为的最经典的bug单。

    第六类问题:用例相关,最基本的包括用例的格式要素,用例设计工程方法论,每个方法要求(方法的背景,操作步骤,优缺点、适应范围,与其他用例方法如何配合),在项目中如何利用测试用例设计工程方法。如何评价、评审测试用例,评审从哪些维度?要设计好测试用例需要哪些方面的知识结构,比如技术、业务、方法。

    第七类问题:软件测试流程,系统测试相关规范和标准的流程:熟悉产品/项目,需求评审,测试需求,测试计划,测试方案,测试用例,预测试,第一轮正式测试、第二轮回归测试、第三轮测试,测试报告,测试总结,测试指南。

    第八类问题,网络相关,最基本的网络基础知识,比如TCP/IP协议。

    第九类问题,测试工具,包括三个大的类型,第一类是性能测试工具、自动化测试工具、测试管理类工具。最起码的要求是熟悉工具的使用。

    第十类问题,给你一个软件,比如QQ、QQ斗地主,你如何去测试,这类问题基本的思路是,从软件质量模型、测试工具、测试方法、测试流程、探索式测试等角度先宏观解决,然后再具体微观讲解用例如何设计等。

    第十一类问题,一个优秀/卓越的软件测试工程师应该具备哪些能力与素质,素质方面包括沟通、五心工程师、追求完美等;能力方面大家可以参考我以前的一篇文章http://www.51testing.com/?uid-94273-action-viewspace-itemid-15176

    第十二类问题,最后一个问题,面试官一般会问,您还有什么想问的吗?还有什么想了解的吗?总体上来说最重要的是留下一个好的近因效应,就好比相亲的时候,分手离开的时候,留下好的最后的印象,基本的思路应该分三种情况,第一种是面试官对你满意,自己也感觉不错的情况下,先表示感谢,然后积极主动的问题,比如,非常感谢您给的这次机会,但是我还是想问,如果我有下一轮面试,我想知道知道是什么时候,我应该再做哪些方面的准备。第二种情况是面试官和自己感觉都一般般,感觉自己是鸡肋,这个时候说不说很重要,基本的套路是,非常感谢面试官给的这个机会,坦白地说我对自己今天的面试表现不是非常满意,还可以表现得更好,但是如果我还是非常想得到这个机会,您能否给我一些建议。第三种情况是面试情况非常糟糕,这种情况下,很少有人能说出感谢,但这恰恰体现一个人的风度。基本的思路是,不管怎么样,还是得感谢您给的机会,让我自己认识到自己的不足,坦白地说我离这个岗位的要求还有些距离,但是我还是想知道,如果将来我还想来咱们公司面试,您能否给点具体建议。

    总结,面试是一个相亲的过程,相亲的成败取决于很多要素,但是好的、充分地准备,能够让我们更加从容地和主动的去面对压力与挑战,而不是简单地把自己变成超市里面的菜,供人挑选。
  • 【转】谈谈我理解的软件测试的核心价值

    senlin222 发布于 2013-01-04 16:40:53

      随着公司组织架构的调整,战略调整,产品的实现技术不断变化,现在的测试人员可以说是什么都可以干。

      有些人做产品,有些人做平台,有些人做工具......

      有些人有点象专职开发,有些人有点象专职运营......

      Facebook,google的一些敏捷测试理念中,测试人员应该致力于提出测试解决方案,研究各种测试工具为主,具体的测试执行工作,由coding的开发同学去做。

      变化后面也有很多不变的,测试手段无外呼白盒测试黑盒测试,静态测试,动态测试,单元测试,集成测试,系统测试安全测试性能测试等等。那些奋斗在一线的测试工程师的工作内容实则没有什么大的变化,访谈的结果是大家觉得自己也没有成就感,工作很累。

      这一切都让我迷惑了,很多人象我一样也迷惑了,测试人员的核心价值到底是什么?

      测试人员的职业发展是什么?特别是focus在业务上的测试人员的核心价值是什么?在这里仅表达下我个人的观点,欢迎大家一起拍砖。

      ● 核心价值一:测试设计能力

      最基本的也是最重要的价值就是测试设计。无论是采用白盒,黑盒,手工还是自动化等不同的方式,精华都在测试设计中。测试设计能力入门容易,做深难,需要耐得住寂寞,不断的学习积累,同时需要的知识面非常广。

      下面几点可以提升测试设计能力:

      1、对产品的熟知程度

      2、对用户的了解程度

      3、技术实现/依赖产品/中间件/DB设计/缓存机制/安全机制等技术的深入了解程度

      4、产品运行环境(包括服务端,客户端,浏览器,系统并发量,吞吐量等)

      5、bug回溯(定位/分析)

       非常值得一提的是bug回溯,是一项非常有意义的活动。很多公司特别重视线上bug的预防,分析,却忽略了线下bug的回溯。而实际上,大家都有这样的 印象,发现bug的不一定是你设计的TC,而是在执行TC时发散的其他测试场景。通过bug原因分析,可以更精准的帮助你识别易出问题的点。而且现在的技 术,环境都是多样性的,总会出现一些你意想不到的bug,它的存在一定是有原因的。这些东西需要通过bug回溯不断的积累。

      Bug回溯  与测试设计形成良性循环

      ● 核心价值二:制定测试策略

      大家都知道测试是不能穷举的。在有限的人力、时间、资源情况下,如何更快,更全面的覆盖被测对象,是需要策略的。

       我记得以前天彤说过,专家级的测试工程师可以对被测对象进行“精准爆破”,非常认同。对于象淘宝这么庞大复杂的系统来说,如果不能做到精确设计,精确测 试,为了保障大用户量大数据量的并发下,想最大程度的规避可能出现的风险,让测试同学以眉毛胡子一起抓的方式进行测试就是在劳民伤财。

      不同产品,不同的团队,产品成熟度,人员的成熟度,所采用技术的成熟度等等,都可能导致测试策略的不同。制定测试策略的过程,就是对当前的项目、团队进行量体裁衣。

     影响测试策略的因素:

      △ 项目类型。如:新产品,完善功能,重构型的,底层升级,数据库升级,不同的项目类型,测试重点也不同,采用的测试工具和测试类型也不尽相同

      △ 产品成熟度。主要考虑产品的业务是否稳定,成熟。是属于创新型,试水产品,是否是成熟行业,需求明确稳定等等?

      △ 使用研发技术和研发平台。采用新的研发工具,新的研发技术,还是公司成熟的技术,工具,使用什么样的数据库设计,包括产品的设计思想,产品架构等

      △ 团队能力及默契度。稳定型团队?新团队?半新半旧,人员技术能力如何?人员特点如何?(特别需要说明的是,通过bug回溯可以发现团队开发或测试人员的技术能力,代码质量,业务掌握情况,逻辑清晰等这些个人特质,针对不同的人可以在测试时做不同的重点验证)

      △ 研发模式。采用什么研发模式,传统的瀑布,还是敏捷,迭代等。这种研发模式以往常出现的问题是什么?该模式在该团队的运行是否成熟,稳定?

      △ 产品线上运行环境。包括服务端和客户端的运行环境,负载机制,缓存机制,服务器分布等

      △ 产品线上并发量,吞吐量等指标。关注目前指标及增长趋势

      △ 产品使用用户。使用产品的用户人群众分布?目前的使用满意度如何?用户的计算机使用水平如何?用户反馈的最大问题是什么?用户的使用习惯是什么?竞争产品在用户中的优势是什么?

      △ 测试过程保障。上线前测试依赖的环境、数据、技术、平台、工具保障,有现成的,还是需要开发?

      测试策略的方面

      △ 测试类型

      △ 各种测试类型的测试程度、测试通过/停止标准

      △ 使用测试技术

      △ 依赖平台、工具

      在工作中,大家对一些事情存在一些误区:

      1、编码能力。我们不盲目崇拜编码能力,而是随着测试手段不同,测试深入程度不同,需要我们有能力去识别代码中存在的风险,对产品的技术实现有更深入全面的掌握,才能更有针对性的进行测试,所以,我们必须具备编码能力。

      2、创新。我们不能为了创新而创新,而是在工作过程中,技术结合业务,为解决实际的问题自然而然的生长出来的新东西。这个创新一定是解决我们工作中的问题或用户的问题的。

      3、工具。工欲善其事,必先利其器,随着我们被测试对象的复杂化,多样化,使用技术的差异化,一些常规手段无法测试的内容,一些重复的劳动密集 性的事务,需要让工具代替手工去做,自然而然的就会产生工具。所以,我们不是迷信工具,也不是崇拜工具,工具是为我们服务,带来价值的。如果这个工具不能 给我们带来价值,就算做一个工具,没有人使用,又有什么意义呢?

      在实现测试设计与测试策略制定过程中,我们为解决实际问题自然会生出一些工具,平台,我们要鼓励大家用创新的思维去思考和解决问题,这样的产出是非常有价值的。

  • 转在国外做软件测试工作的体会

    smalllin 发布于 2013-01-04 16:53:01

    在国外做软件测试工作的体会  

    2011-08-14 12:53:50|  分类: 技术类|字号 订阅

      经常在网上看到有在国内从事软件测试的同行抱怨:测试不受重视,测试管理混乱,产品质量差等问题。说到底这都是管理上的问题。

      我想谈谈自身的经历。

      我毕业后在外包公司工作,客户是一家美国公司,产品发展前景挺好,也有一笔不菲的风险投资。我想说说他们的测试管理制度。

      首先,他们有一个很好的资源共享平台,我们叫Wiki,上面包括每一个版本的任务,每一项任务的开发负责人及测试负责人,相关的Spec以及其他开放文档。而且,每当这一版本的任务快完成时,下一版本的任务的雏形就出来了。

      其次,开发和测试严格按照软件生命周期执行。

      第一阶段:

      需求出来后,开发和测试同步进行,开发完成代码实现,测试完成test outline和test case,这些文档都会上传到Wiki上。我们在理解Spec和完成testcase的时候,会及时提出自己的问题,这些问题一般在第二天就能从开发人员得到反馈。而test outline和test case最终完成后也要经过开发人员的验证,有时他们会提出自己的意见,测试要点和一些你未曾想到的case。

      第二阶段:

      新功能的测试阶段,测试提交bug,开发修改bug,这一过程由JIRA管理。

      第三阶段:

      回归测试:

      每一个版本的下半阶段都是做回归测试,这是一个比较漫长的过程,一般分两部分,一是执行所有的case(一万之多,有赶超两万之势),二是执行任意测试。在执行case的时候,我们还要同时更新case,有些是更新内容,有些是添加新的bug,有些case可能会过时。当然,新的bug也会提交到JIRA。在这个阶段,测试人员会安排在不同的平台上测试。可以说,在做回归测试的时候,测试覆盖率极高。

      第四阶段:

      预发布版本测试:

      做完回归测试会形成一个较稳定的版本作为预发布版本,预发布版本会被部署到另一台测试服务器上。这时候需要在不同平台上做一次QL(Quick Look)及任意测试。预发布版本上一般不会再迁入changlist,除非在此之上发现了较严重的bug,就会有新的r2的预发布版本以及再一次的测试。

      第五阶段:

      内部测试:

      新版本发布前一两天可以说是全民皆兵,公司里大大小小所有人都进行测试,包括CEO。(当然CEO不会自己来报bug,她会把问题反馈给我们的技术副总裁)。当然他们所报的bug也会成为我们的谈资。作为测试人员,我们不仅追求bug数量,更要追求bug被fix的概率。当发现一个bug时,首先我们得确定它不会成为won't fix或invalid的问题,并且它can be reproduced,然后它不会duplicate某个已有的bug,如果这个已有的bug已经被close了,就应该reopen它。而这些非测试部的人不管三七二十一,看到是个问题的就报,一天下来新加的bug数就该让相关的开发人员头疼死了。好在这些问题都会一个个地得到它们应有的解决方式。

      第六阶段:

      产品发布测试:

      产品发布前会在和产品环境相同的服务器上做一次QL(Quick Look)和任意测试,产品发布后又会在产品服务器上做一次QL(Quick Look)和任意测试。

      第七阶段:

      测试整理:

      这一阶段主要是整理在这一版本生成的测试文档和测试用例,新功能的用例和一些之前未覆盖的用例会被导入测试用例管理工具。

  • 转 谈谈测试覆盖率

    zhouxn1022 发布于 2012-12-25 16:16:26

    转自http://www.51testing.com/html/88/n-830688.html


      上次说到了测试金字塔,阐述了测试的重要性,测试的重要性显而易见:保证代码功能的正确性的。今天我们要说的是测试覆盖率这个属性,此属性在软件开发项目中经常被用作衡量项目质量好坏的指标之一。可能我们对测试覆盖率这个属性一直存在误解,我们看看大师Martin Flower对测试覆盖率的看法。


      我不止一次听到有些人在说他们不知道测试覆盖率该用来做什么,或者有些人说会以他们的测试覆盖率感到自豪。这些说法都不是测试覆盖率的所表达的意义。测试覆盖率是一个发现项目中未测试代码的一个很有用的工具;但是却并不是一个有用的衡量项目中测试用例质量的工具。



      我们先看看另一个观点,我经常听到人说:

      你的项目不能发布如果测试覆盖率少于87%。

      还有人说:

      你必须使用测试驱动开发(TDD)并且测试覆盖率必须是100%。

      一位明白人曾经说过:

      我期望测试覆盖率能很高。有时候管理者需要这个。这两者之间的差异是微妙的。--Brian Marick

      如果项目中指定要求一定的测试覆盖率,开发者会尽力去达成。不过问题是,开发者很容易达成覆盖率这个数字,用低质量的测试用例,最差的情况你会发现项目中的测试用例都是assert(true)(我们称之为空用例)的。但是即使你有很多非空用例,你也会发现这些用例很难发现代码中的问题。

      从编写代码的角度来说,编写测试用例是一件很费脑精的事情(不会比写功能代码轻松)。测试驱动开发是一个很好的工具,但是仅仅测试启动开发不能帮助你写出高质量的测试用例。如果你写测试代码时候,考虑比较周全,你会期望测试覆盖率达到80%或90%,但是我很怀疑100%,100%只能让对测试覆盖率这个数字感兴趣的人们开心,而完全不知道100%的内容。

      人们关注测试覆盖率这个数字的原因是他们想知道项目测试是否充分。很低的测试覆盖率,如低于50%,很确定是有问题的;但是很高的测试覆盖率并不表示代码测试很充分。是否充分测试这个问题很复杂,并不是一个测试覆盖率数字就能回答的。我的观点是,如果下面两点成立,你项目的测试覆盖率就比较充分:

      ● 发布的版本中bug很少。

      ● 你非常反感改某些代码因为你害怕改动会引入bug

      为了测试覆盖率,有时候你会写很多测试用例,过多的测试用例不仅对提高测试质量没有用并且还会提高维护成本。当你删除一些测试用例后发现测试还是充分的,就说明你的测试用例过量了。但是这个很难衡量。测试用例过量的一个比较明显的特征是测试用例执行很慢。还有就是当你改动一处代码,需要改动很多处测试代码的时候,可能你的测试用例过量且重复了。

      因此又回到初始的问题:测试覆盖率的意义是什么?它能帮你找到项目中未测试到的代码,每天执行测试用例来发现项目中未测试的代码,是很有价值的。你是否会感到忧虑如果又代码未被测试?

      如果你的测试用例在某些方面很脆弱,覆盖率能够发现;如果你的测试用例在某些方面很脆弱,覆盖率不能发现。 --Brian Marick
261/212>
Open Toolbar