发布新日志

  • 自动化实施方案

    2010-05-12 11:43:33

    如何规划和实施一个成功的自动化测试任务,我们需要一个能够遵循的过程。这里我们引入PERALPursposeEvaluationArchitectureRun and DebugLink with manual test)模型。

     

    第一步 Purspose(目标):如何建立一个务实明确的自动化测试目标?

     

    1.       选择自动化还是手工测试

     

    一般自动化测试引入条件:
       
    项目没有严格的时间压力
       
    具有良好定义的测试策略和测试计划(知道要测试什么 ,知道什么时候测试
       
    对于自动化测试你拥有一个能够被识别的测试框架和候选者
       
    能够确保多个测试运行的构建策略
       
    多平台环境需要被测试
       
    拥有运行测试的硬件
       
    拥有关注在自动化过程上的资源
       
    被测试系统是可自动化测试的
    如下条件适宜采用手工测试:
       
    没有标准的测试过程
       
    没有一个测试什么、什么时候测试的清晰的蓝图
       
    在一个项目中,你是一个新人,并且还不是完全的理解方案的功能性和或者设计
       
    你或者整个项目在时间的压力下
       
    在团队中没有资源或者具有自动化测试技能的人· 没有硬件

     

    2.       正确估算分析自动化测试效益

     

    引入自动化测试的目的在于降低测试成本,提高测试效率。而要确定在什么情况下自动化真正降低了测试成本则需要根据公式来进行估算。

    手工与自动化测试的成本平衡点测试次数计算:成本平衡点测试次数=测试代码开发时间/(手工测试所需时间-自动化测试所需时间)

    当测试迭代次数大于平衡点测试次数,自动化才能体现其真正的价值。

     

    3.       正确选取自动化测试实施对象的范围

     

    获得自动化测试最大的收益成本比是自动化测试的最终目的。选择哪部分测试案例进行自动化测试,应该以成本最小而受益最大的原则,因此,应具备以下两个特点:

    (1)       测试对象应该是被测试软件系统中比较稳定的功能模块,很少变化甚至最好不变,这样就能减少自动化测试的维护成本。

    (2)       测试案例应该是执行比较频繁的,这样转化为测试程序后,执行次数也是频繁的,会增大自动化测试的收益。

    因此通常情况下,对于优先级较高,执行频率也搞的核心功能,应该被优先考虑进行自动化测试,而其他功能则可依然采取手工测试

     

    第二步 Evaluation(评估):如何量化评估自动化测试规模并选择合适的工具?

     

    俗话说:“工欲善其事,必先利其器”,工具对自动化测试的成败是一个非常关键的因素,选择合适的工具会使我们进行自动化测试事半功倍。

    从技术的角度考虑,要做出准确的评估,我们必须要弄清楚以下两点:

    (1)       测试项目的软件特征和测试特征

    (2)       同族各种工具的细微差别,包括支持程度、可扩展性等等

    以上都是从技术角度出发阐述的,在现实中我们并不是想选择哪个工具就能选择的,但掌握前面两点对于项目自动化的实施同样是至关重要的,例如:实施自动化过程中遇到问题,你能根据对项目和工具的了解快速地确定是哪方面的原因造成的。

     

    第三步 Architecture(构建):如何构建和设计自动化测试?

     

    自动化测试绝对不能理解成测试工具简单的录制与回放过程。实际上,从实现成熟度来说,自动化测试分五个级别:

    级别

    说明

    优点

    缺点

    用法

    一级

    录制和回放

    自动化的测试脚本能够被自动的生成,而不需要有任何的编程知识

    拥有大量的测试脚本,当需求和应用发生变化时相应的测试脚本也必须被重新录制

    当测试的系统不会发生变化时,实现小规模的自动化

    二级

    录制、编辑和回放

    减少脚本的数量和维护的工作

    需要一定的编程知识;频繁的变化难于维护

    回归测试时,用于被测试的应用有很小的变化

    三级

    编程和回放

    确定了测试脚本的设计,在项目的早期就可以开始自动化的测试

    要求测试人员具有很好的软件技能,包括设计、开发

    大规模的测试套件被开发、执行和维护的专业自动化测试

    四级

    数据驱动的测试

    能够维护和使用良好的并且有效的模拟真实生活中数据的测试数据

    软件开发的技能是基础,并且需要访问相关的测试数据

    大规模的测试套件被开发、执行和维护的专业自动化测试

    五级

    使用动作词的测试自动化

    测试用例的设计被从测试工具中分离了出来

    需要一个具有工具技能和开发技能的测试团队

    专业的测试自动化将技能的使用最优化的结合起来

     

    综合现有的技术储备和实践困难度考虑,我们将根据四级-数据驱动测试的程度引入自动化测试。因而我们需要设计一个便于实施的自动化框架来支撑整个过程,具体框架目录设计如下:

    1.       公共函数库 (存放不同项目都可能会用到的函数,例如数据比对函数)

    2.       公共脚本库 (存放项目中不同功能可能会用到的脚本、函数,例如登录脚本)

    3.       项目脚本库 (存放项目的核心功能脚本)

    4.       数据驱动库 (存放各脚本、函数中所需的驱动数据,当前以Excel形式保存)

    5.       GUI对象库 (存放项目中会用到的所有对象集合)

     

    第四步 Run and Debug(开发调试):如何开发和调试自动化测试?

     

    自动化脚本的开发一样要遵循开发的原则。

    1.       高内聚和低耦合的模块实现原则

    (1)       高内聚是指每个案例函数的功能应该尽可能简单和单一

    (2)       低耦合是指每个案例函数之间的依赖关系要尽可能地小

     

    2.       数据驱动原则

    对于自动化测试开发来说,数据驱动问题尤其要注意。因为测试人员开发经验不足,使用工具来录制回放脚本,hardcode(脚本中的常量)问题容易被忽略,而hardcode问题又会是脚本维护的工作量加大。

     

    第五步 Link with manual test(与手工测试链接):如何将自动化测试与手工测试进行有效地整合?

     

    “自动化测试”的重点在“测试”,而“自动化”只是一种手段。自动化测试的意义在于保证产品的稳定性,而手工测试则在产品稳定性满足的基础上负责验证容错性、安全性等非核心功能,两者各司其职,互补长短。

    Purpose阶段,我们出于最大成本收益比的角度考虑,只选取了核心功能进行自动化测试的实施,而大部分测试案例依然采用手工的方式来运行。我们需要通过有效的工具或方法(初期可以使用需求跟踪表来确定哪些实施了自动化测试,哪些采用手工测试),来管理和执行项目自动化实施部分与手工测试部分,最终将其测试结果整合成一份完整的产品测试报告。

     

     

     

      

     

    参考资料:

    《软件自动化测试框架设计与实践》——柳胜 编著

    自动化实施方案——张向芳、李 华、 姜英伟著

  • 2009-9月至10月面试经历

    2009-11-29 00:34:13

           8月初从原公司离职回杭州后,以办理户口迁移为“借口”给自己放了一个月的假。这期间原本想自己先回顾一下测试方面的理论知识,可最后不得不承认,自己不是主动学习的料。

           9月初回到杭州,开始正式投简历,第一周磨磨蹭蹭地投了几家,只得到了一次面试机会,第二周开始大量投递简历,中间出现了一周的空档期(估计是投了简历后,目标公司需要一周时间消化和安排),第三周临近结束与第四周就是频繁的面试之旅了。

    1.       浙江中控技术股份有限公司

    环境状况:有独立的园区,办公环境有些阴暗,所用办公电脑显示器还以纯平为主,测试部门MM占大部分,据其介绍目前有软、硬件测试工程师30多人。

    面试过程:首先填写了一份个人信息表,之后按要求在40分钟还是1小时内完成了一份200多道题的心理测试题(注:个人认为主要是测试面试者的性格及智力状况),随后开始了平生最大阵仗的面试(注:56个人一起面我)。

    面试内容:主要被提问到,为什么离开原来公司?要求介绍以前的工作经历,并在过程中随机提问跟工作有关的问题。

    结果/印象:出师未捷!估计主要是我的心理测试结果偏向于活泼(对该测试准确度抱怀疑态度)和跳槽频繁致使失败。

    2.       阿里巴巴网络技术公司(滨江总部)【外包面试】

    环境状况:有独立园区,而且面积挺大,建筑和设施很具现代气息,两个字形容:气派。

    面试过程:首先做了1个小时(也有可能是90分钟,记不清了)的笔试题,然后面试。

    面试内容:笔试部分主要是用例的设计、SQLLinux方面的题目;面试部分主要轮番的被问及具体的工作中的测试设计,问的很细,细到要把所有可能情况都考虑进去。

    结果/印象:简直可以用“狼狈”两个字来形容,笔试因准备不足,答的不好。面试中别问及的用例设计内容,又因为以前公司更本不会去考虑那么细,所以常被问的无语。个人感觉该部门在于质量方面的要求非常严苛,黑盒做到如此程度确实值得尊敬。

    3.       淘宝网【外包面试】

    环境状况:在一座高级的写字楼中,会客环境非常清新简约,两个字形容:时尚。

    面试过程:首先是每个人1分钟的自我介绍,然后要求写下包括自己在内的所有面试者的名字(当时就懵了,一个也没写出来),之后按要求完成一份面试题,最后是即兴设计环节。

    面试内容:笔试部分主要是平时与电脑相关的使用常识以及一些相关的知识,好些问题蛮偏门的;面试部分主要是一道即兴设计题,和测试没有直接关系,主要考验理解与反应能力,具体题目就不透露了,估计他们长期靠这道题选拔人才呢。

    结果/印象:只能用“出乎意料”来形容这次面试,结果可想而知了。淘宝以这种面试来选取平时注意细节,而临场反应能力又较强的人,我可以理解,但是否真能选出测试方面的人才就很难说了。

    4.       现在所在的公司

    5.       恒生电子股份有限公司

    环境状况:一座很有特点的写字楼,办公环境很宽广,工作环境很宽松,可以用两个字形容:舒适。

    面试过程:首先在大厅填了一份个人信息表,然后被安排直接面试

    面试内容:主要通过面试者的自我工作介绍,在其中随机提问,问的问题也相对尖锐,如果回答的不够清晰,面试官会一直抓住不放,直到你给出满意的答案或承认欠考虑为止。最后被问及是否有炒股,是否使用过电子商务购物。

    结果/印象:没戏!估计还是老毛病,测试设计没有达到其精细度要求,并对其主要测试业务不了解。恒生给我最大的印象就是“舒适”,在等待面试官召见的过程中,发现他们有专门提供员工休息的场所,并还配有糖果、饼干、咖啡等食品。

    6.       天格科技(杭州)有限公司

    环境状况:在一座中高档的写字楼里拥有数个不连续的工作间,主要从事网站的开发与运营,据介绍有测试人员10个左右。

    面试过程:首先给了一份所谓的笔试题(除了开发知识就是质量知识),拒绝作答之后,他们的一个主管安排我填了一份个人信息资料,然后安排了一个人对我进行测试知识面试。

    面试内容:笔试部分只有两道,一道是用例设计,另一道是微软的智力面试题;面试部分被要求介绍了自己的工作内容及经历

    结果/印象:只能说面试完之后,我心情很差,并不是因为面试的结果怎么样,而是觉得是浪费时间,连个健全的面试过程都没有,把面试当儿戏。

    7.       聚光科技(杭州)有限公司

    环境状况:有独立的园区,比较大,不过结构比较传统。据了解其软件测试部门有13人,到国庆之后扩展到15人。

    面试过程:填写了一份个人信息表,一份性格测试题,一份测试笔试题,之后经过了测试组长、测试主管、开发主管这三面。

    面试内容:笔试部分中的性格测试题挺有意思,如果如实填写,基本能够测试出面试者的性格状况(个人感受:挺准的);测试相关的内容主要是测试知识、SQLLinux知识;面试主要谈了以前工作的内容,回答一些与以前工作相关的问题。

    结果/印象:通过。该公司主要做环保仪器,软件方面主要做环保系统,待遇不错,三年测试工作经验可以给到6万到7万一年。最后我拒绝了这家公司,一是因为工作地点在滨江,二是觉得在纯软件公司会更有发展。

     

    总结:整个面试过程中,感觉杭州的软件公司对于测试人才的需求还是比较强劲的,不过也主要是面向3年测试工作经验与重点大学相关专业毕业的研究生。随着面试旅程的延续,容易产生妥协心理,所以最好不要选择离职后再找工作;如果已经离职了,也要相信自己,勇敢地坚持到最后。

    心得:面试没有通过是因为你没有找到合适你的位置,而软件公司如此之多,必定有适合你的岗位。

  • 《测试的经验与教训》13

    2009-10-28 16:35:41

    ------当心测试中的不关我事理论

     

    看到这句话后我就一直在嘀咕,我在工作中是否也有这种想法。不过想了半天,也没有想出一个现实的案例,但对于这句话我也有些想法:

    从责任角度来看,在国内,目前大多公司还没有完善的软件过程管理制度,一些责任不明确是很正常的就如我原来呆过的一个部门,经理的办事风格就是,系统上线后出了问题,必定会将所有涉及人员拉过去罚站并且加以声色俱厉的教育。其实这其中就体现一个道理,软件开发是个团队的事情,出了问题谁都逃不出责任,因此软件测试工作中是不应该出现不关我事的想法的,毕竟就目前来说,测试在人们眼里就是质量把关者。

    从沟通与协作角度来看,友好性的沟通、指出问题,能够加强团队之间的合作默契,哪怕合作过程中关系不融洽的,也会在经常性的交流中淡化矛盾。不关我事常常是意气使然。以前在工作过程中碰到一个同事,他给我的感觉是慢半拍而且爱理不理的,主管安排并让我转达的事项,他总是不给明确答复,工作一拖再拖。与他合作的期间我似乎也想不去管他,爱什么时候做你就什么时候做,不过最后我还是不得不时常追踪进度,毕竟是合作,他不动,我也动不了。不过后来交流的多了,相互间了解程度加深了之后,我也渐渐没有了之前对他的那些感官,反而觉得他是个挺有意思的人。

  • SVN1.6.6安装心得

    2009-10-27 19:46:29

    为彻底解决SVN客户端和服务器版本之间的不一致(公司原本使用的是Subversion-server-1.5.3+TortoiseSVN-1.6.2)而引起的CruiseControl自动从SVN上获取代码的版本冲突,我特地从SVN官网上下载了同是1.6.6-win32的客户端和服务器安装包.

    在网上找了安装配置说明,具体配置记录如下:

    1.Subversion1.6.6版本的安装包自带了Apache2.2.13,所以无需额外安装Apache服务器。下载地址是(需要注册后再下载)

    2.一路默认安装,如果需要修改仓库根目录或者Apache2.2.13端口可以自行修改为自己想要的,Apache默认端口为80Subversion默认仓库存储路径为C:\svn_repository。安装的过程中会自动将SubversionApache注册成服务,安装完成后重启一下电脑,运行services.msc查看服务,可以看到 “CollabNet Subversion Apache”“CollabNet Subversion svnserve”两个服务已经自动启动,如果不想让他们自动启动,可以修改为手动启动。

    注:安装结束时没有提示重启电脑,但重启之前Apache服务无法启动,提示“The requested operation has failed!”

    3.重启电脑后运行C:\Program Files\CollabNet\Subversion Server\httpd\bin“ApacheMonitor.exe”打开Apache控制台,可以看到控制台的状态栏有如下内容:
    Apache/2.2.13 (Win32) DAV/2 SVN/1.6.6

    4.运行命令提示符cmd
    cd C:\Program Files\CollabNet\Subversion Server
    svnadmin create c:\rep

    //
    svnadmin命令创建名为rep的仓库(这条命令成功后,在rep下会出现很多文件夹和文件)
    cd C:\Program Files\CollabNet\Subversion Server\httpd\bin
    htpasswd -cm c:\rep\user.txt admin

    //
    htpasswd命令创建用户(admin),同时生成密码认证文件,c参数为createm参数为MD5加密方式
    New password: ******
    Re-type new password: ******
    Adding password for user admin  
    //
    加入用户成功
    htpasswd -m c:\rep\user.txt test
    //
    htpasswd命令创建用户(test),注意如果在这时加入c参数会覆盖掉之前创建的用户及文件。
    New password: ******
    Re-type new password: ******

    Adding password for user test   //
    加入用户成功

    5.C:\rep下新建文本文件access.txt。建议用UtralEditEditPlus编辑工具打开,若用记事本打开,注意不要勾上格式里的自动换行,输入以下内容:
    [/]
    admin = rw
    test = r
    * =

    6.UtralEditEditPlus编辑工具打开C:\Program Files\CollabNet\Subversion Server\httpd\conf下的httpd.conf文件,
    找到115行和116行的代码如下:
    115 LoadModule dav_module       modules/mod_dav.so
    116 LoadModule dav_svn_module     modules/mod_dav_svn.so

    116行下面加入如下一行代码,这行代码就成为了117行:
    LoadModule authz_svn_module   modules/mod_authz_svn.so

    文件最后面的信息如下:
    <Location /svn>
    DAV svn
    SVNParentPath C:\svn_repository
    </Location>

    修改为:<Location /rep>
    DAV svn
    SVNPath C:\rep
    AuthType Basic
    AuthName "Subversion Repository"
    AuthUserFile "C:\rep\user.txt"
    AuthzSVNAccessFile "C:\rep\access.txt"
    Require valid-user
    </Location>


    7.通过ApacheMonitor控制台在任务栏右下角的图标的Restart命令重新启动apache,用IE打开http://localhost/rep,输入用户名admin与密码,这时应该可以看到
    rep - Revision 0: /
    ---------------------------------- 
    //
    说明经配置成功了

    以上内容摘录至 http://bbs.pmlife.net/viewthread.php?tid=20219

     

    作为初次配置带有apacheSVN的新人,我在过程中犯了以下几个错误:

    1.     没有正确理解apache在安装SVN中的作用。

    正解:网上查询得到的结果如下

          Subversion有两种运行方式,一种是基于Apache Http Server另外一种是Subversion Standalone Server。下面我讲解的是基于Apache Http ServerSubversion,这样做几个好处
    A.
    能使用WebDAV协议。
    B.
    能使用浏览器作为客户端工具浏览源码仓库。
    C.
    可以很容易的支持到SSPIWindows域认证)和LDAPAD?),这些都是Apache本身就支持的。
    D.
    能得到比较完善的Apache安全认证系统,比如SSL加密连接。

    2.     在修改httpd.conf文件中的SVNPath路径时没有正确加以理解,错误地理解成了安装过程中默认的C:\svn_repository

    正解:我实际创建的文件库路径是C:\rep

    3.     采用了手工的方式启动了SVN服务(svnserve –d –r C:\rep

    正解:实际上SVN安装完成并重启后,“CollabNet Subversion Apache”“CollabNet Subversion svnserve”两个服务已经自动启动了,可以直接使用客户端或浏览器进行访问。如:http://192.168.3.99:80/rep/

    因此之后对SVN使用中,系统报出 authentication failed.以及后来出现的"Could not open the requested SVN filesystem"错误。

     

    2009-10-29 上午)

    今天又碰到一个新的问题,本机访问SVN正常,但内网其他机子无法访问,提示 OPTIONS of 'http://xxxx/rep': could not connect to server (http://xxxx)

    正解:查了一个多小时的原因,最后才经同事提醒,防火墙影响了访问,关闭防火墙后就能正常访问了。

  • ccnet.config配置文件

    2009-10-22 11:38:12

    <cruisecontrol>

             <!—自动编译的项目名称及编译结果存放、显示的路径 -->

        <project name="PerMerchant" queue="Q1" queuePriority="1">

          <workingDirectory>F:\Integration\TEST\WorkingDirectory</workingDirectory>

          <artifactDirectory>F:\Integration\TEST\Artifacts</artifactDirectory>

    <webURL>

    http://192.168.3.99/ccnet/server/local/project/TEST/ViewLatestBuildReport.aspx

    </webURL>

          <modificationDelaySeconds>10</modificationDelaySeconds>

             <!—

    以下是SVN源码控制部分,其中autoGetSource="true"表示CCNET可以自动从SVN上获取代码

    -->

          <sourcecontrol type="svn" autoGetSource="true" >

                <!—如果没有默认记住登陆帐号与密码就需要添加帐号密码的输入-->

            <trunkUrl>svn://192.168.3.99/Testes/</trunkUrl>

            <!—SVN上下载的代码存放地址-->

            <workingDirectory>F:\test\source</workingDirectory>

            <timeout units="minutes">10</timeout>

          </sourcecontrol>

             <!—

              以下触发事件的设置CCNET60秒检查一次SVN是否有变动,其中buildCondition = "IfModificationExists"表示如果SVN有变动存在的情况就进行Build

              -->

          <triggers>

            <intervalTrigger

              seconds="60"

          buildCondition="IfModificationExists" />

          </triggers>

             <!—

             以下是编译的任务执行设置

             -->

          <tasks>

            <nant>

              <executable>F:\nant-0.86-nightly-2009-05-05\bin\NAnt.exe</executable>

                       <!—指明.build文件的存放的绝对路径-->

              <baseDirectory>F:\test\source\PerMerchant</baseDirectory>

              <targetList>

                <target>run</target>

              </targetList>

              <buildTimeoutSeconds>1800</buildTimeoutSeconds>

            </nant>

    </tasks>

    <!—

    以下是发布设置

    -->

    <publishers>

            <buildpublisher>

              <sourceDir>F:\test\source\PerMerchant</sourceDir>

              <publishDir>F:\Integration\TEST\Artifacts\deliverables\</publishDir>

              <useLabelSubDirectory>true</useLabelSubDirectory>

            </buildpublisher>

       </publishers>

      </project>

     

    </cruisecontrol>

  • 持续集成环境搭建(CCNET+SVN+NANT)

    2009-10-22 11:31:45

     

    以下为对于VS2008开发的项目的自动编译环境

    工具:

    CruiseControl.NET 1.4.4.75

    Nant 0.86

    SVN 1.5.3

    TortoiseSVN

    VS2008

    IIS

     

     

    下载与安装:

     

    1.      安装IIS

    2.      下载并安装CruiseControl.NET(过程中会自动在IIS上新建一个名为“ccnet”的网站),完成后可以在开始”->CruiseControl.NET下启动CruiseControl.NET,这样就可以通过http://localhost/ccnet这个地址访问CCNET的网站了。

    3.      下载并安装VS2008

    4.      下载并安装Nant0.860.86之前的版本都没有显示支持Framework3.5,因此不确定在没有1.12.0的基础下是否能够正常使用)

    5.      下载并安装TortoiseSVN

     

    环境变量设置:

     

    /*nant.exe执行文件的路径*/

    Path  F:\nant-0.86-nightly-2009-05-05\bin  

    /*MSBuild.exe执行文件的路径*/

    VSMSBUILD_HOME  C:\Windows\Microsoft.NET\Framework\v3.5\   

    配置:

    1.     ccnet.config文件的配置

    详见ccnet.config范例

     

    2.     .build文件的配置

    详见.build文件配置范例

     

     

  • Loadrunner性能测试学习经历-2

    2009-03-30 14:01:32

    问题概述:

    部门的一个重要系统随着用户量的不断增加,系统架构各个部分的性能瓶颈都在不断显现,比如:WEB服务器的IIS当机(并发连接用户数过大)、数据库死锁、签核引擎调用失败等等。因此现阶段该系统的开发团队在从各个不同角度提升性能,但困难处在于无法准确地获知性能提升的状况如何。由于前期的扩展性方面的欠缺,后期性能的提升是个艰巨而痛苦的过程。

    WEB服务器的IIS当机(并发连接用户数过大)问题目前正在解决中,由于第一次使用负载均衡技术,一切实施及其效果都在摸索过程中,而由于没有直接参与,因此我就不做细说,如果后期对其有进一步的了解,我再加以整理公布。我这里主要介绍的是另一个问题,即签核引擎调用失败的问题。

    该系统的签核引擎是一个WEB Servers服务,系统在签核单据时调用该服务以达到证书签核的目的,而现在的问题就是在这个过程中,由于用户并发量过大,经常会有部分用户在部分单据签核过程中出现签核失败的情况。开发人员对签核引擎的程序及其服务器配置均进行了调整,为了验证其是否目前的性能状况,需要对其进行性能测试。

    解决过程:

    原本以为这个测试过程很简单,只要请开发人员写一个简单的HTML页面调用签核引擎,记录其成功与失败数及其相关的各方面性能数据就可以了。而事实证明性能测试光知道工具使用是远远不够的,因为我最终没有找到如何记录成功与失败数的办法,其中尝试了加文本检查点(无法同时检查两种状态的页面,而我又不知道其是否可以抓取到非静态文本内容多次尝试后均失败),也想过在录制的脚本中加入计数变量(发现我并不知道如何在录制的函数内插入语句,也许根本就不能插)。

    通过了以上的失败之后,我苦恼了好几天,最后我不得不找寻自己撰写脚本代码的方法(前面之所以没有直接用这种办法是因为我对其一无所知),最终通过这种方法解决了以上的脚本问题,而且比录制更为的简单明了。

    解决办法:

    寻找.NET的脚本撰写插件(不要在网上到处找,因为它就在LR9.1的安装包里有),安装后,在VS2005环境中使用C#语言撰写脚本

    using System;

    using System.Runtime.InteropServices;

    using Com.Foxconn.Ca.Esign;

    using Com.Foxconn.Ca.Esign.PdfSigner;

     

    namespace LoadRunnerUser2

    {

        /// <summary>

        /// Summary description for VuserClass.

        /// </summary>

        [ClassInterface(ClassInterfaceType.AutoDual)]

        public class VuserClass

        {

            LoadRunner.LrApi lr;

     

            public VuserClass()

            {

                // LoadRunner Standard API Interface ::             DO NOT REMOVE!!!

                lr = new LoadRunner.LrApi();

            }

     

            // ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

            public int Initialize()

            {

                           return lr.PASS;

            }

    // ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

            public int Actions()

            {

                string ID;

     

                PdfSigner signer = new PdfSigner();

                ID = lr.eval_string("{username}");

    //     这里的参数化曾花费了我近一天的时间,因为网上资料实例中用"<>"而我在LR中一直用的是“{}”,而其中我来去折腾了很多次,过程基本记不清了,只不过确定了这里用“{}”才真正起到参数化的效果

                string temp0 = signer.SignByName2(ID, "Sign1", "熊罡", "FOXCONN CA");

                if (temp0 == false)

                {

                    lr.end_transaction("ttt", lr.PASS);

                }

                else

                {

                    lr.end_transaction("ttt", lr.FAIL);

                }

    //     这里并没有真正起到统计成功与失败总数的作用,这个问题需要进一步通过摸索去验证实现方式(在函数中使用变量计数显然存在问题,因为会有很多虚拟用户同时调用这个脚本)

                return lr.PASS;

            }

            public int Terminate()

            {

                           return lr.PASS;

            }

        }

    }

     

    经验与教训:

    1.      永远都不要去害怕未知的事物,勇敢地去做起来,碰到问题就去解决问题,人人都是这么过来的。

    2.      要做好性能测试,仅仅是知道工具如何使用是远远不够的,只有真正了解其工作方式、原理及其执行后的结果,你才算是熟悉了工具的使用。

     

    注:如果有人知道如何解答我上文中的问题的,请务必赐教。谢谢!

  • Loadrunner性能测试学习经历-1

    2009-03-30 11:08:23

    前不久,安装了LR9.1,面对着比LR8.0更为强大的功能,我又燃起了进一步学习它的欲望。

    以后的笔记中我主要会记录一些探索中发现的问题及相关的解决办法,以此记录学习的过程,同时希望能够给看到这些内容的人一些启示或帮助!

    问题:

    在本机上安装了LR9.1后,使用WEBHTTP/HTML)协议开启录制时,浏览器无法开启,最后只能强行关闭。

    解决过程:

    对于这个问题,之前一直以为是安装过程中出了问题,因此在其它相同操作系统的机子上进行了安装,发现一切功能正常。于是重装了LR9.1,最后问题仍然存在。这个过程中我也一直怀疑IE出了什么问题,比如损坏了或者其它原因,不过并没有想到验证的办法。直到时隔2周之后,突然想到去网上查询相关的解决办法,才在一个51testingBBS中发现了相同的问题,并看到了确切的原因所在。原来罪魁祸首是第三方插件(我曾在本机上安装了浏览器的一个英文翻译插件)。

    解决办法:

    IE的高级选项相关的设置,把启动第三方浏览器扩展(需要重启)选项去掉。

    经验与教训:

    1.      通过这个小问题的解决,再一次印证了网络的强大,有问题只要选对关键词,通常都能找到你想要的答案。

    2.      环境对软件的影响非常的频繁,这也是为什么经验对于解决问题会这么重要的原因之一,这也同时证明了“随便找一个人就可以做测试”的观点是不正确的。发现问题,解决问题,需要很多相关知识及经验的积累。

  • 改变习惯要注意的十三个问题【转载】

    2009-02-12 16:42:48

    来源:译言网

    我在过去的两年半的时间里,从改变习惯中学到了很多,从戒烟,到开始跑步、学习衍射几何理论、坚持素食主义到早起。当然,还有很多,但我先告诉你大概情况。


    我学到的不仅仅是改变习惯时,应该做什么,通过我失败的例子,我也学到了不应该做什么。

    我发现,失败和成功对于人的进步是同样重要的,特别是改变习惯的时候。这不是个简单的任务,我肯定每个人都尝试过戒掉某些习惯,或者增加某些好习惯,并失败了。关键是,在失败后不要仅仅是放弃,而是要重设你的决心,分析哪里出错了,为什么,并为下次克服这些障碍制定好计划。

    我在一次又一次的失败中坚持那样做了,我愿意分享一些我所学到的克服这些困难的方法。


    在动机中开始。在习惯中坚持。——吉姆·润

    1、一口气开始两个或更多的习惯。

    大家都这么做过。我想开始早起,接着去晨跑,然后吃健康食品,变得更有条理,然后每天写作…… 全部一起!不管我们对这些目标有多么大的热情,同时开始两项习惯已经足以让我们品尝失败了。我曾尝试过。很多次。成功当然是有可能的,但对于我们这些难以改变习惯的人来说不是这样(我想大家都一样)。我估测过,如果你每次只集中于一项习惯,每次一个月,你的成功率会提高三到四倍。将你的全部精力集中于那项习惯的改变,当你的身体适应了,就可以开始下一个。一次击倒一个。

    2、不把计划写在纸上。

    醒过来,跳下床,大声喊道:“我今天要做一个改变!”,这很简单。谁没这么做过?(边注:如果你不是独住,你的室友或家人可能不会对你的大喊表示赞赏)不过我们应该告诉自己,不管我们在脑中对改变习惯的呼唤声有多大,也不足以让我们改变自己。你要写下你的目标。写下开始的日期。写下结束日期(推荐你写30 天)。写清楚你将要做什么。写下你会如何对自己负责,给自己的奖励是什么,有什么障碍,你的触发条件是什么。以及其他。重点:将计划写在纸上并坚持下去(不要把计划丢进你的收件箱,你会找不到它的!)


    3、只有半桶水的决心。

    我有一段时间也这么做过:我会说,“我想我今天要戒烟。”然后我会扔掉我的那包香烟(我已经戒烟了,所以这应该是过去式,不过我懒得改时态)。接着我会坚持到我忍不住了(经常是半天!)然后我就投降并再去买一包。接着我会内疚一会直到我再次产生了一点戒烟决心。那没有用。你必须下全部的决心。也就是将决心告诉全世界。说真的——将它写在博客上,告诉你的家人,朋友,同事,半陌生人——那些你在高校的杂货店碰到时会互相拥抱,但因为忘记了名字,所以只能叫对方“伙伴”的人。告诉的人越多越好。公布你的全部计划。并复制两份放在你的桌子和冰箱上。严肃的向你的孩子做出保证(我戒烟的时候这对我挺有效)。

    4、没有人支持。

    你经常会发生动摇。当你需要鼓励,你会向谁寻求呢?如果你想不出好的答案,那你就得好好想一想了。如果你有一个重要的人,那将是个不错的选择,不过你应该寻求更多的支持者。可能是你的妈妈,姐妹,最好的朋友,你的老板。可能是一个或几个网友。但最好的方法是加入一个互助小组,或加入一个性质相同的在线论坛。向他们展示你的决心,并在遇到困难的时候请求他们的帮助。许诺在遇到困难时给他们打电话。把这条写在计划书中。

    5、没有思考自己的动机。

    这个词别人称之为约束,我称之为动机。为什么你要约束自己去做某些事?因为你有正确的动机。当你失去了动机,你就失去了约束。在你开始改变习惯之前,想清楚你的动机。你为什么要改变?当你忘记了理由,还有什么能让你坚持下去?对公众的许诺当然是你的一个大动力,但你也需要内在的动力。把这些写进你的计划书里。

    6、没有意识到障碍。

    每个习惯的改变都是一条布满了障碍的小路。不幸的是,我们总是遇到障碍就放弃。如果你曾失败过,那么想一想挡住你的是哪些障碍。若你从未试过改变这项习惯,做些调查并读一些过来人的成功或失败的例子,找出你可能会遇到的障碍。想好克服这些障碍的计划。举个例子,我在外面吃饭时难以正常饮食。当我出去吃饭时我该怎么做?我有什么战略?我要在真正外出前相同这些,如果在欲望面前你还没有好的计划,那就太晚了。

    7、没有记录你的进步。

    在改变习惯时,你可以不写日志,不过写日志可以提高你成功的几率——那么你为什么不这么做呢?不使用你所拥有的全部助力是很难成功的。一份日志可以提醒你始终如一。它让你明白你在做什么。它给你动力,因为你总希望能记录下自己好的行为。它可以让你在那些你许过诺言的人们面前约束好自己。

    8、不能约束自己。

    说道自我约束,它在公众义务中的重要性排第二。在你的博客里面发一个大公告但不坚持下去是不够的。比如说,我曾向大家宣布了我的塑身计划,但我还建立了一个关于训练的小博客,这会让我约束自己。我每天都报告自己的进步,不管我失败了还是成功了。看看我的“训博”。就算你没有博客,你也要建立一个约束自己的体系——可以把你的日志张贴在你的工作场所,或把进步用电子邮件传递给你许过诺的人。

    9、不知道自己的触发条件。

    这是改变习惯的关键。每个习惯至少有一个触发条件——一个迅速引发这个习惯的事件。有些习惯的触发条件不只一种——比如,我抽烟的触发条件包括起床,吃饭,性爱,紧迫事件,去外面喝酒等等。每当这些事件发生后,很少例外,我都会抽烟,或者产生想要这样做的强烈欲望。与触发条件联系的越紧密,习惯就越强大。所以若你想打破一个习惯,就要了解所有的触发条件(把它们记录一段时间),然后为所有的触发条件创造一个好习惯以代替坏习惯。比如,当我有压力时,可以用跑步取代抽烟。当你想开始一个好的习惯,比如说锻炼,那么你需要一个每天都会发生的触发条件(或者发生的频率足够你的需求)。像锻炼,你可以在每天早上喝过咖啡后锻炼(如果你每天都在同一时间喝咖啡的话),或者下班后,如果你每天在同一时间下班的话。把你的触发条件写入计划书,并与之行动一致 ——当触发条件发生时,马上开始那件习惯,每一次。与触发条件联系的越不紧密,习惯就越难养成。 

    10、没有阅读。

    我发现,改变每一个习惯,阅读尽量多的书籍都是很重要的,不管是改变前还是改变中。我会先做调查,找出成功的策略,潜在的障碍,有用的工具这些能帮我成功的东西。在我改变习惯时,我仍会阅读它们——博客,杂志,书籍,论坛,成功故事——来帮助和激励我。

    11、过快的变换目标。

    我们经常开始改变习惯,然后在一两个星期后换成别的目标。习惯不会这样就改变,我们浪费了所有时间去试着开始一个新的习惯,并在其成为习惯前放弃。这样不行,我们应该坚持最少30天,并尽量与之融为一体。

    12、不能紧密结合。

    这一点我已经提了很多次了,但它还是应当被写下,因为它很重要。如果你把一个习惯同一个触发条件紧密结合,那么每次触发条件发生后,你都会迅速做这个习惯。如果你时做时不做,你不会形成习惯。试着尽可能的不要漏掉一次,因为一旦你漏掉了一次,你就会被诱惑着漏掉第二次,然后第三次,然后你什么都得不到。

    13、一失败就放弃。

    可是,如果你漏掉了一次,或两次三次,不要放弃。找出你漏掉的原因,并拟好克服这个障碍的计划。然后让习惯与触发条件紧密结合,直到这个习惯根深蒂固。如果你放弃了,你就被失败打倒了。如果你重新有了决心,并从失败中学习,失败就会变成成功的助力。就像我曾说过的,失败通往成功的台阶。

    只要我们不断重复,那么优秀将不再是一个行为,而是一个习惯。——亚里士多德

  • 自我激励的二十种方法【转载】

    2009-02-12 15:59:36

    作者:Steve Chandler  来源:世界经理人杂志

    在我们不断塑造自我的过程中,影响最大的莫过于是选择乐观的态度还是悲观的态度。我们思想上的这种抉择可能给我们带来激励,也有可能阻滞我们前进。

        清晰地规划目标是人生走向成功的第一步,但塑造自我却不仅限于规划目标。要真正塑造自我和自己想要的生活,我们必须奋起行动。莎士比亚说得好:"行动胜过雄辩。"

        一旦掌握自我激励,自我塑造的过程也就随即开始。以下方法可以帮你塑造自我,塑造那个你一直梦寐以求的自我。

     树立远景 迈向自我塑造的第一步,要有一个你每天早晨醒来为之奋斗的目标,它应是你人生的目标。远景必须即刻着手建立,而不要往后拖。你随时可以按自己的想法做些改变,但不能一刻没有远景。

    离开舒适区 不断寻求挑战激励自己。提防自己,不要躺倒在舒适区。舒适区只是避风港,不是安乐窝。它只是你心中准备迎接下次挑战之前刻意放松自己和恢复元气的地方。

    把握好情绪 人开心的时候,体内就会发生奇妙的变化,从而获得阵阵新的动力和力量。但是,不要总想在自身之外寻开心。令你开心的事不在别处,就在你身上。因此,找出自身的情绪高涨期用来不断激励自己。

    调高目标 许多人惊奇地发现,他们之所以达不到自己孜孜以求的目标,是因为他们的主要目标太小、而且太模糊不清,使自己失去动力。如果你的主要目标不能激发你的想象力,目标的实现就会遥遥无期。因此,真正能激励你奋发向上的是,确立一个既宏伟又具体的远大目标。

    加强紧迫感 20世纪作者Anais Nin(阿耐斯)曾写道:"沉溺生活的人没有死的恐惧"。自以为长命百岁无益于你享受人生。然而,大多数人对此视而不见,假装自己的生命会绵延无绝。惟有心血来潮的那天,我们才会筹划大事业,将我们的目标和梦想寄托在Denis Waitley(丹尼斯)称之为"虚幻岛"的汪洋大海之中。其实,直面死亡未必要等到生命耗尽时的临终一刻。事实上,如果能逼真地想象我们的弥留之际,会物极必反产生一种再生的感觉,这是塑造自我的第一步。

     撇开朋友 对于那些不支持你目标的"朋友",要敬而远之。你所交往的人会改变你的生活。与愤世嫉俗的人为伍,他们就会拉你沉沦。结交那些希望你快乐和成功的人,你就在追求快乐和成功的路上迈出最重要的一步。对生活的热情具有感染力。因此同乐观的人为伴能让我们看到更多的人生希望。

    迎接恐惧 世上最秘而不宣的秘密是,战胜恐惧后迎来的是某种安全有益的东西。哪怕克服的是小小的恐惧,也会增强你对创造自己生活能力的信心。如果一味想避开恐惧,它们会象疯狗一样对我们穷追不舍。此时,最可怕的莫过于双眼一闭假装它们不存在。

     做好调整计划 实现目标的道路绝不是坦途。它总是呈现出一条波浪线,有起也有落。但你可以安排自己的休整点。事先看看你的时间表,框出你放松、调整、恢复元气的时间。即使你现在感觉不错,也要做好调整计划。这才是明智之举。在自己的事业波峰时,要给自己安排休整点。安排出一大段时间让自己隐退一下,即使是离开自己挚爱的工作也要如此。只有这样,在你重新投入工作时才能更富激情。

    直面困难 每一个解决方案都是针对一个问题的。二者缺一不可。困难对于脑力运动者来说,不过是一场场艰辛的比赛。真正的运动者总是盼望比赛。如果把困难看作对自己的诅咒,就很难在生活中找到动力。如果学会了把握困难带来的机遇,你自然会动力陡生。

    首先要感觉好 多数人认为,一旦达到某个目标,人们就会感到身心舒畅。但问题是你可能永远达不到目标。把快乐建立在还不曾拥有的事情上,无异于剥夺自己创造快乐的权力。记住,快乐是天赋权利。首先就要有良好的感觉,让它使自己在塑造自我的整个旅途中充满快乐,而不要再等到成功的最后一刻才去感受属于自己的欢乐。

    加强排练 先"排演"一场比你要面对的珲要复杂的战斗。如果手上有棘手活而自己又犹豫不决,不妨挑件更难的事先做。生活挑战你的事情,你定可以用来挑战自己。这样,你就可以自己开辟一条成功之路。成功的真谛是:对自己越苛刻,生活对你越宽容;对自己越宽容,生活对你越苛刻。

    立足现在 锻炼自己即刻行动的能力。充分利用对现时的认知力。不要沉浸在过去,也不要耽溺于未来,要着眼于今天。当然要有梦想、筹划和制订创造目标的时间。不过,这一切就绪后,一定要学会脚踏实地、注重眼前的行动。要把整个生命凝聚在此时此刻。

    敢于竞争 竞争给了我们宝贵的经验,无论你多么出色,总会人外有人。所以你需要学会谦虚。努力胜过别人,能使自己更深地认识自己;努力胜过别人,便在生活中加入了竞争"游戏"。不管在哪里,都要参与竞争,而且总要满怀快乐的心情。要明白最终超越别人远没有超越自己更重要。

    内省 大多数人通过别人对自己的印象和看法来看自己。获得别人对自己的反映很不错,尤其正面反馈。但是,仅凭别人的一面之辞,把自己的个人形象建立在别人身上,就会面临严重束缚自己的危险。因此,只把这些溢美之词当作自己生活中的点缀。人生的棋局该由自己来摆。不要从别人身上找寻自己,应该经常自省并塑造自我。

    走向危机 危机能激发我们竭尽全力。无视这种现象,我们往往会愚蠢地创造一种追求舒适的生活,努力设计各种越来越轻松的生活方式,使自己生活得风平浪静。当然,我们不必坐等危机或悲剧的到来,从内心挑战自我是我们生命力量的源泉。圣女贞德(Joan of Arc)说过:"所有战斗的胜负首先在自我的心里见分晓。"

    精工细笔 创造自我,如绘巨幅画一样,不要怕精工细笔。如果把自己当作一幅正在描绘中杰作,你就会乐于从细微处做改变。一件小事做得与众不同,也会令你兴奋不已。总之,无论你有多么小的变化,点点都于你很重要。

    敢于犯错 有时候我们不做一件事,是因为我们没有把握做好。我们感到自己"状态不佳"或精力不足时,往往会把必须做的事放在一边,或静等灵感的降临。你可不要这样。如果有些事你知道需要做却又提不起劲,尽管去做,不要怕犯错。给自己一点自嘲式幽默。抱一种打趣的心情来对待自己做不好的事情,一旦做起来了尽管乐在其中。

    不要害怕拒绝 不要消极接受别人的拒绝,而要积极面对。你的要求却落空时,把这种拒绝当作一个问题:"自己能不能更多一点创意呢?"不要听见不字就打退堂鼓。应该让这种拒绝激励你更大的创造力。

    尽量放松 接受挑战后,要尽量放松。在脑电波开始平和你的中枢神经系统时,你可感受到自己的内在动力在不断增加。你很快会知道自己有何收获。自己能做的事,不必祈求上天赐予你勇气,放松可以产生迎接挑战的勇气。

    一生的缩影 塑造自我的关键是甘做小事,但必须即刻就做。塑造自我不能一蹴而就,而是一个循序渐进的过程。这儿做一点,那儿改一下,将使你的一天(也就是你的一生)有滋有味。今天是你整个生命的一个小原子,是你一生的缩影。

        大多数人希望自己的生活富有意义。但是生活不在未来。我们越是认为自己有充分的时间去做自己想做的事,就越会在这种沉醉中让人生中的绝妙机会悄然流逝。只有重视今天,自我激励的力量才能汩汩不绝。

        原文摘自100 Ways to Motivate Yourself一书。作者1996年登记版权。Career Press出版社(Franklin Lakes,NJ 07417)出版。赵鹏译。

        作者Steve Chandler系一名作家、公共演说家兼企业培训人员,专为美国和加拿大的企业和非赢利组织举办各种培训和研讨会。

  • 《测试的经验与教训》8

    2009-02-11 13:22:33

     

    ------测试员关注失效,客户才能关注成功

     

    我很喜欢文中的那个希腊神话所说:“测试者在孤岛上,注定要不停地寻找不会存在,也不应该存在的东西,深信成功会为神带来不幸。”

    我对这句话的理解是只要信念坚定,哪怕是神也抗不住!自勉~~

     

    只要了解测试的人都知道,证明软件有错才是测试的王道。我也不去牵强地再去组织要关注失效理由了,就简单地举个例子,高速公路两旁都有护栏,而它们并不是行车的功能要求,路面就可以满足行车的需要,但为什么还要护栏呢?通过一段时间的测试可以知道,一般情况下,程序员在主体功能的实现上是不会有什么大的错误的,而经验老道的程序员几乎不会再主体功能的实现上出错,所以个人认为测试如果只是去验证主体功能可用,那么测试这个职业就不会被独立出来并得以发展。

    以上的道理很多人都明白,也许和你合作的开发人员也明白,但现实和理论还是有一定差距的,测试员要较好地关注失效还是会被很多因素所限制,我遇到的主要有:

    1.      管理机制的不合理、不完善

    测试人员和开发人员是开发团队里的最大的矛盾体,在软件开发的过程中出现争论、互不相让是很正常的事情,而如果公司内部没有对应的评判人员(测试或开发经理),或者有评判权的人做了评判但并不重视,那问题就很有可能被搁置。也许这时作为测试者也只有将这个问题提交给需求人员,由其判定并加入到下一轮开发的需求中去了。

    2.      项目发布时间紧,任务重

    有时一个项目从开始到结束的时间很紧,而在项目计划中又出现了严重的偏差,而最终被牺牲的往往就是测试时间,一般的测试员不可能去和公司的利益对抗,服从是唯一的选择。这种情况下,测试员很难有多少时间去关注失效,通常只能在证明功能可用的情况下,把剩余的时间安排在验证重点功能是否会失效上。

    3.      客户性质所导致的质量意识

    客户性质这个表述我不确定是否正确,我想说的就是提出开发要求的客户是内部的(集团内部的其它部门)还是外部的,如果是内部的,常常会比较注重软件开发完成的时效,而如果出现小的质量问题,又都通过客服加以解决,有情绪但不会造成丢单危险,这也就造成了团队质量意识的随意,小问题往往不会被关注,常遇到开发人员的回应就是“用户不会这样操作”,当你苦口婆心地阐述万事皆有可能,防患于未然,那么得到的答复会是“等用户提出这个问题再改吧”。

  • 《测试的经验与教训》11

    2009-02-11 13:20:41

     

    ------通过测试并不能保证质量

     

    其实这句话我已经不止一次看到了,每次看到这一思想,我就想把它宣导给我们老板,让他有个正确的认识。但我没有这样做,因为我没有想到好的阐述方式并找到合适的机会,而且对于独裁的老板,他会认为他的思想境界远高于你,就像他的口头禅:“我不想听你解释,你只要按照我的意思去做就可以了”

     

    那些没有认识到“通过测试并不能保证质量”的主管们,在软件出了问题时,第一个想到的就是测试的问题,我对他们的这个条件反射表示理解,但也非常的忧虑,因为这会直接导致最终测试人员的绩效不好,而这也容易形成一个恶性循环。

     

    而团队中也并非仅仅主管会不理解,客服人员最先埋怨的对象往往也是测试人员,因为表象显示的就是客服电话多,客户的问题没有测出来,那责任就应该是测试人员的了。当然对于他们的不满还是比较容易转移的,只要合理的解释说明,那么他们也会理解的。

     

    而要扭转测试员的这一尴尬境地,解释或者自我检讨只能治标,就像作者所说的质量保证要来自整个项目团队,建制、建全软件开发过程,保证每一个节点、每一个阶段的质量,才是治本之道。

     

    附注:

    有一篇名为《需求与测试》的文章里有这么一段话:“其实我们有时候会抱怨需求为什么会考虑不周全,可是换个角度想想,我们认可程序会存在bug,那么需求同样也会有。这就像是一场接力赛,需求是第一棒,开发是第二棒,测试是第三棒,每一棒的交接都有上一棒的辛苦付出,也只有彼此信任和共同的努力,才能最终传递胜利。”

     

  • 《测试经验与教训》7

    2009-02-10 17:30:14

    ------询问一切,但不一定外露

     

    从作者的表述中有两点最基础的观点:

     

    1.      做好测试就需要问问题

     

    对于这一点,本人也只是在一次与需求人员的沟通经历中偶然认识到这一点的。国内很多软件公司在需求部分管理的都比较粗略,有些只是些简单的功能点描述,因此在对这些描述的理解中我们必然会产生大量的疑问。有时需求人员对一个需求的描述存在多种实现情况,我们就要问他们:客户想要的是哪种实现情况?有时新增一个重要功能,在不知道他的实现改动了哪些部分,会对哪些功能产生影响时,就需要咨询开发人员。

    而我们换一个角度来说,假如一个软件公司在需求方面做的很好,文档很齐全,也同样有问题需要问,毕竟文字并不能表述出所有内容,需求撰写人也无法将软件的全貌完整展现出来。所以就像文中最后所说的,如果你提不出问题你就最好停下来,因为很可能你对这个软件的需求了解的并不深刻,会将隐患带人到测试中去。

     

    2.      提问需要讲究技巧

     

    对于提问的技巧我今天碰巧特意查了相关的内容,并摘抄了一篇《提问的艺术》。

    在实际工作中,你面对的人各式各样,有些人比较热情,你问什么他只要知道都会回答你,遇到这种人只能说你运气太好了;有些人比较平淡、严肃,而且很忙,你要问他们问题,你就必须好好思考一下问题的质量和表达是否清晰了,因为如果你连续问两三个比较低级(例如随便百度一下就能查到的)的问题,那你就会遭致他的反感了,更甚者会被教育;而面对那些高傲的人,问的艺术就要更高深了,因为一般情况下,他根本不鸟你,需要找机会、找时机甚至找借口问他们相关的问题,语言上更是马虎不得,否则一个小小的失误就会将好不容易争取来的提问机会给夭折了。

  • 提问的艺术

    2009-02-10 13:53:34

     

    摘至 百度知道 http://zhidao.baidu.com/question/43559121.html

     
    在当今世界里,当提出一个技术问题时,你能得到怎样的回答?这取决于挖出答案的难度, 同样取决于你提问的方法 。

    不想掩饰对这样一些人的蔑视--他们不愿思考,或者在发问前不去完成他们应该做的事。这种人只会谋杀时间--他们只愿索取,从不付出,无端消耗我们的时间,而我们本可以把时间用在更有趣的问题或者更值得回答的人身上 。

    提问之前

    在提出技术问题前,检查你有没有做到:

    1. 通读手册,试着自己找答案
    2. 在FAQ里找答案
    3. 在网上搜索
    4. 向你身边精于此道的朋友打听

    当你提出问题的时候,首先要说明在此之前你干了些什么;这将有助于树立你的形象:你不是一个妄图不劳而获的乞讨者,不愿浪费别人的时间。如果提问者能从答案中学到东西,我们更乐于回答他的问题。

    怎样提问

    用辞贴切,语法正确,拼写无误

    我们从经验中发现,粗心的写作者通常也是马虎的思考者 ,回答粗心大意者的问题很不值得,我们宁愿把时间耗在别处。更一般的说,如果你的提问写得象个半文盲,你很有可能被忽视。

    使用含义丰富,描述准确的标题

    大约50字以内的主题标题是抓住资深专家注意力的黄金时机。
    1. 谨慎明确的描述症状。
    2. 提供问题发生的环境。
    3. 说明你在提问前是怎样去研究和理解这个问题的。
    4. 说明你在提问前采取了什么步骤去解决它。
    5. 罗列最近做过什么可能有影响的硬件、软件变更。

    话不在多

    你需要提供精确有效的信息。这并不是要求你简单的把成吨的出错代码或者数据完全转储摘录到你的提问中。如果你有庞大而复杂的测试条件,尽量把它剪裁得越小越好。

    明白你想问什么

    漫无边际的提问近乎无休无止的时间黑洞。最能给你有用答案的人也正是最忙的人。如果你明确表述需要回答者做什么,就最有可能得到有用的答案。这会定出一个时间和精力的上限,便于回答者集中精力来帮你。

    别问应该自己解决的问题

    这些问题得由你来搞定,你会从中学到东西。你可以要求给点提示,但别要求得到完整的解决方案。

    去除无意义的疑问

    别用无意义的话结束提问,例如“有人能帮我吗?”或者“有答案吗?”。
    首先:如果你对问题的描述不很合适。其次:由于这样问是画蛇添足,别人会很厌烦你,而且通常会用逻辑上正确的回答来表示他们的蔑视,例如:“没错,有人能帮你”或者“不,没答案”。

    谦逊绝没有害处,而且常帮大忙

    彬彬有礼,如果你有很多问题无法解决,礼貌将会增加你得到有用答案的机会。
  • 《测试的经验与教训》6

    2009-02-06 13:52:53

     

    ------跟着程序员走

     

    本段内容个人理解为作者想表达测试人员与开发人员的紧密关系,两者有效的切合达到很高的工作效率。

    不过毕竟作者只是表达了这个观点,其中具体实现还是有很多的难点存在,我大致阐述一下我在工作中遇到的问题:

    1.      测试人员的反馈并不能被开发人员尽早地接受

    鉴于开发任务紧,我一般都会要求开发人员完成一部分功能后就发布测试。当我在测试中发现问题后,通过缺陷管理工具或者将问题汇总以邮件方式发送给开发人员后,开发人员通常会将这些问题的解决排在完成其他功能之后,因而这个反馈环路中就会存在断层。

    2.      毫无把握的等待不断地磨灭测试人员的积极性

    由于缺陷提交后并不确定开发人员何时才会进行修改,主动权在开发人员的手中,长期的被动使得测试人员的激情被逐渐磨灭。

    3.      重复地沟通、反复的跟催,浪费着测试人员大量的时间

    不规范的公司,测试人员的处境往往都是很尴尬的,既要在规定的期限内保证测试的质量,又长期处于被动的位置,还不能跟开发人员闹僵,一个缺陷一个缺陷地解说,时不时地询问修改状况,常常又只能等待,最终大家的时间都在被浪费,更严重的是因此遗留在软件内的缺陷无法及时、有效地被发现。

    上面的这些状况在长期得不到改善的情况下,作为测试人员就会有一种测试只是开发的附属的感觉,这必然会严重影响部门测试的进一步发展。

     

    本人由于同时肩负着QCSEPG成员的角色,因此一直希望通过制定有效、简明的机制改善以上状况,但由于部门的实际状况的制约,机制并不能很快被验证,只有一边做着持续改进的努力,一边等待着更好的时机的到来。(这里的时机指的外部环境的变化及主管对团队管理的重视)

  • 《测试的经验与教训》15

    2009-02-06 11:30:12

     

    ----别指望任何人会理解测试,或理解测试员需要什么条件才能搞好测试

     

    读到这则经验短文时我粗浅地认识到了几点:

     

    1.      原来每一个团队所面临的问题都是类似的;

    2.      原来我一直处于在一种理想的状态中,即期待着其它角色的理解(虽然还不完全赞同书中的论断);

    3.      文中有一个很形象的比喻:测试员的解释(向客户解释测试)就像是流感疫苗,有利于健康而又不那么痛苦,但是疫苗的作用会逐渐衰退,必须一遍又一遍地解释。

     

    按照作者的说法,在读完之后认真思考后,我确实从中找到了3个关键点:

     

    a. 测试员受管理层和程序员的决策的很大影响

    从事测试工作以来,我都非常明确地知晓,测试员光靠自己是无法做好测试工作的,其它角色的配合状况从一定层面上注定这测试的成败。我之前非常希望部门可以建立一套完整的交互机制来减少甚至消除这方面的影响,但看来这个想法还是有很大的理想化成分,这过程中涉及的事项好像并非生硬的工具和制度所能够控制的。交互的机制和工具仅仅起到的也许只是个辅助的作用。

    b.测试员可以向管理层和程序员提出要求帮助的方式来完成测试工作

    这点在测试工作中有一定的体会,因为本身我就处于没有明确需求,只有个框架的情况下展开的测试,如对系统的了解、数据的来源等等,都需要程序员的帮助,之前我一直认为这不是个合理的方式,所以我一直没有深入地考虑过,但现在想来,这个过程也许在很多公司,很长一段时间内都可能会存在,所以有必要总结出一些东西。例如一份问题清单,以此向其它角色要求帮助,将这个过程条理化。

    c. 测试员与客户解释的经验之谈

    对于这个经验,目前还没有涉及,但也可以明确地感受到其中的工作艺术。

  • 测试用例检查单

    2009-02-06 11:22:27

    测试用例检查单

     ------摘至《全程软件测试》142页

    1.      在设计测试用例前,是否先画好UML时序图、状态图或数据流程图等?

    2.      是否有常见错误表供编写测试用例使用?

    3.      测试用例的设计思路合理吗?与产品设计、技术设计吻合吗?

    4.      测试用例的结构层次清晰、合理吗?

    5.      软件需求的所有功能点是否都有正常功能用例对应?

    6.      是否每个正常用例都有对应的异常用例?

    7.      测试用例是否覆盖了所有已知的边界值,如特殊字符、最大值、最小值?

    8.      测试用例是否覆盖了已知的无效值,如空值、垃圾数据和错误数据操作等?

    9.      测试用例是否覆盖了输入条件的各种组合情况?

    10.  测试用例是否覆盖了各种安全性问题?

    11.  测试用例是否覆盖了负载平衡和故障转移等方面的可用性问题?

    12.  是否考虑了兼容性测试用例?如是否测试了新版本同以前版本的数据、接口的兼容性?

    13.  是否考虑了关联功能的测试用例?例如,用户修改了自己的邮件地址,那么提醒、报告等是否会发生到新的地址?

    14.  是否所有的接口数据都有对应的测试用例?

    15.  测试用例的前提条件、操作步骤描述是否明确、详尽?

    16.  当前测试用例是否最小程度地依赖于先前测试或步骤生成的数据和条件?

    17.  测试用例检查点(验证点)描述是否明确、完备?

    18.  是否重用了以前的测试用例?

  • 《质量免费》读书笔记1-經典語句

    2008-12-15 09:16:12

    以下是前期阅读《质量免费》的一些经典摘抄:

    1.企业把自己逼向绝路的最大问题不在于为正确的问题给出了错误的答案,而在于努力把错误的事情做正确,结果就把时间浪费在与正确到底偏离了多远的计算上,而不是切合实际地去做正确的事,从而直接导致企业每年至少把25%的营业收入白白地花在了做错事情和重做上面。

     

    2.人们永远不会改变,只有情况才会改变。人们总是想把事情做对,管理的主要工具跟人际关系有关,而跟程序无关。

     

    3.那些必须把质量改进方案带进公司的人,总会感到别人不支持它。一般说来,除非我们绝对确定所讲的话会被人家适当地接受,否则我们是不会真正站出来讲太多东西的。不过根据我的经验,只要解释得当,任何改进的努力都会被人正确地接受。需要努力的倒是寻找恰当地解释方法。

  • 《质量免费》读书笔记2-数据的用法

    2008-12-15 08:35:30

    质量衡量数据基本上来自于检验和测试,而由其得来的数据需要经过适当的报告,否则他们是没有用的,毕竟它们的目的在于警告管理层:有严重的情况发生了。这些数据应该由质量部门来做,目的是用来找出需要采取补救措施的特别问题。只有在能够让人了解如何用这些数据的时候,质量衡量才能算是有效的。

      此外,因其发生频率或者有可能发生而被挑出来的特点,应该根据其严重性、原因已经责任归属加以分类。这种你不会在重要的业务开展之际,把时间花在不重要的项目上。要恰当地运用信息,最好的方法是集中注意两种形式的报告。

    趋势图表:趋势图表应每周或每月公布一次,用来显示某一工作区的运作状态,管理层可以用这张图表看出情形是否有所改进。

    问题识别:派驻于每一个工作区的质量人员应该每天提供一张表,列出该工作区内造成最严重或最多缺陷的原因。

  • 墨菲定律

    2008-08-19 10:59:00

    美国爱得华空军基地的一个叫墨菲的测试工程师发明了一条著名的定理,人们就用这位悲观主义大师的名字来命名这条定理,将这条在工程建设和企业管理界名闻遐迩的定理称之为墨菲定理。墨菲定理的表述如下:

    如果一件事情有可能向坏的方向发展,就一定会向最坏的方向发展

    比方说有一个工具箱在收工后没有及时地收走而是被遗忘在某个高处,根据墨菲定理该工具箱一定会自行从高处落下来,工具箱不会只是在地面上摔个稀巴烂,按墨菲定理工具箱应该是落在某人的脑袋上,当然受害者不会是随随便便的什么人,墨菲定理指出受害者会是一位来视察的政界要人,接踵而至的是死者难缠的寡妇能干的律师愤怒的同僚和刻薄的记者,最后由于事发一周前人们在千里之外的首都对法律作过的一项修订,于是有关人士在巨额赔偿的同时还得面临二级谋杀的指控。

    墨菲定理后来也被人们扩展到了工程建设和企业管理以外的领域。因为人们发现墨菲定理在其他地方也同样起作用。

    某人出于侥幸偶尔有一次没有使用安全套,墨菲定理会使他收到一份结果为阳性的化验报告,化验报告倒不是说被验人怀孕了,因为被验人是男性并且报告也不是妇科医师开具的,此外墨菲定理更偏爱其他的可能性。国家疾病防治中心沉痛地宣告被验人被证实是艾滋病病毒的携带者。事情并没有到此为止,此人的妻子和他们夫妇各自的朋友也会相继被证实携带了艾滋病病毒。不过有时候墨菲定理也会无能为力,本来应该出现的不愉快场面反倒没有出现,因为已经没有谁再会去在乎暴露于光天化日之下的奸情了。

    我之所以要在热点谈论墨菲定理是因为我发现事实证明墨菲定理在中国也是一条颠扑不破的真理。

    Worldsky
    贴过一条羚牛伤害两条人命引发的话题谁的生命更重要?的贴子,在这件事里墨菲定理玩的不是偶然性的把戏,墨菲定理是以必然的不可抗拒的方式在起作用。

    事情是这样的:某日的830分,一只羚牛蹿进村民刘永昌家,把刘顶倒在了血泊中。

    怪物把刘撞伤后在屋里来回躁动,刘妻周存风吓晕了过去。围观村民辨认出怪物是国家一级保护动物野生羚牛,村支书立即通知了乡政府。

    乡政府向县林业局作了汇报并赶到了事发地点。而这时羚牛更加狂躁。

    县林业局和县领导赶到现场并在现场成立指挥部。按照《野生动物保护法》的规定,对危及群众生命财产安全的野生国家一级保护动物,采取伤害措施解除危险,必须报经国家林业部门批准。

    县领导立即向省林业厅汇报情况,而羚牛已进屋3个小时,屋内不断地传出周存风凄惨的呼救声。1320分从省林业厅传来消息,可以击毙羚牛。

    13
    30分,刘的女婿冒险爬进屋内救出了周存风,现场指挥部立即安排车辆,把周送往县人民医院抢救。

    14
    20分武警打了40多发子弹,怪物被击毙。刘永昌早已气绝身亡。周存风在转院的途中死亡。

    墨菲定理在这里设置了一个陷阱,就是《野生动物保护法》的规定,对危及群众生命财产安全的野生国家一级保护动物采取伤害措施解除危险必须报经国家林业部门批准。

    墨菲定理知道报经国家林业部门批准的时间足够野生动物完成对生命财产安全的伤害,墨菲定理因而就不再大动干戈地去麻烦国务院了。

    13
    20分可以击毙羚牛消息传来时,玩世不恭的墨菲定理没有安排采取伤害措施解除危险,而是让刘的女婿于1330 分采取不必批准的措施冒险爬进屋内救出了已是死路一条的周存风。显然出了一点意外,毕竟墨菲定理本身有时也会受墨菲定理的制约,墨菲定理对刘的女婿下的毒手没能得逞。

    14
    20分在已经没有什么人的生命安全受到威胁的情况下,墨菲定理露出了狰狞的面目,解除危险的伤害措施被采取了,40多发子弹击毙了已无危险的野生国家一级保护动物。

    这件事堪称是墨菲定理在中国肆虐的一个绝佳范例。

    墨菲定理在中国另一个大手笔就是对中国性产业现状的安排。

    不难确认中国性产业现状是各种可能的情形中最坏的一种,从逻辑的观点看现行法律与性产业的关系不外乎以下四种:

    1
    .合法且几乎不存在

    只是在逻辑意义上可能,人类的本性使其实际上变得不可能。

    2
    .合法并且兴旺发达

    很多范例古今中外都有。作为中国不可分割的一部分的台湾也是最近才废除公娼制度的。艳帜高张,玉臂伸给千人枕,与尔共消万古愁,合法的青楼在中国有着悠久的历史。

    3.非法且几乎不存在

    也是很多范例古今中外都有。伊斯兰国家、改革开放前的中国都是,至少在这一件事情上算是很理想的情形。

    4
    .非法但且兴旺发达

    最糟的情形也是中国性产业的现状,恶果是性病泛滥和司法腐败等。

    我不准备过多地讨论这个话题,也不是在鼓吹淫业合法化,我只是想说在这件事上墨菲定理又赢了。

    下面罗列一些墨菲定理在中国的推论:

    1
    .借出去的债肯定要不回来。借债给人又没有办该办的手续对方当然一定要赖账,不赖白不赖;借债给人又办了该办的手续对方一般不会赖账,但也没有钱还你,反正要钱没有要命就一条;借债给人又办了该办的手续对方也有偿还能力,但人家也一定会不高兴还,有本事你告去;告了并且告赢了也一定执行不了,钱还是回不来;咽不下这口气找黑社会出面去讨债,事情失控了,据墨菲定理如果你可能有牢狱之灾那你就一定会有,谁让你勾结黑社会呐?

    2
    .散户炒股一定会输。

    散户买的股票在牛市总是按兵不动,熊市则领跌;散户买到会涨的股票,只是解套的时候股票一定已经出手了;散户买到会涨的股票,解套的时候也沉的住气,准备出手获利的那一天股票一定会被停牌,因为丑闻爆发了;散户买到会涨的股票,解套的时候也沉的住气,出手的那一天也没有丑闻,只是股票已被人抛掉了钱也被人提走了,证券商很震惊;告了并且告赢了证券商也赔了,只是证券商赔的是股票而不是现钱,股价一定已经回落了,散户又被套牢了。告了并且告输了因为是老婆干的,老婆失踪了,某个好朋友也一定会同时失踪。

    3
    .尴尬人定遇尴尬事。

    试用一款据说可提高工作效率的共享软件时一般找不到什么事可给共享软件来处理;共享软件大显身手的机会到来时软件一般总会是已过试用期;上网找注册信息不管是有还是没有一般大量不堪入目的色情广告总是会有的;只要屏幕上有色情广告身后总是碰巧会有更年期的女主管;想要澄清事实时女主管总是体谅地不求解释并用鄙夷的目光不加掩饰地来凝视;



    墨菲法则派金森定理彼德原理并称为二十世纪西方文化中最杰出的三大发现。它源于1949年,一名叫墨菲的美国空军上尉工程师,发现:假定你把一片干面包掉在地毯上,这片面包的两面均可能着地。但假定你把一片一面涂有一层果酱的面包掉在地毯上,常常是带有果酱的一面落在地毯上(麻烦)。换一种说法:如果某件事有可能变坏的话,这种可能就会成为现实。这就是墨菲法则。它的适用范围非常广泛,它揭示的了一种独特的社会及自然现象。它的极端表述是:如果坏事有可能发生,不管这种可能性有多小,它总会发生,并造成最大可能的破坏。 其二 1.你若想提前知道,哪些交易有可能遭受损失,墨菲法则可告诉你: 1)那些不曾建立保护性止损委托的交易; 2)由于不谨慎而持有过多的头寸; 2.墨菲法则在股市的应用: 你怕跌,它偏偏跌给你看;你盼涨,它偏不涨;你忍不住卖了,它也开始涨了;你看好五只股,买进其中的一只,结果除了你手中的那只外,其它四只涨得都很好。... 3.问:我看好三只股,买进其中的一只,结果除了手中的那只外,其它都涨得很好,怎么处理? 我的经验是:同时看好的几只股中,买那只最没把握的。或这几只股在你心 目中排名最后的那个,可能效果最好。股市中期望最高的事情,也最容易让人失望。 其三 若水、迟到兄说: 1.你找见丢失东西的地方是你寻找的最后一个地方。 2.假如一周五个交易日,前三天涨,涨,涨,你没注意;后二天,跌。瞧:墨菲法则起作用了! 3.庄家断头也是很多人没想过的事。把股票押给银行,就不能不想到它有朝一日会跳票。既然有可能性,就有实现的机会。庄家们舒服了几年了,我们也没注意,有一天跳水了,瞧:墨菲法则又起作用了。 4.所以说:这也是一种概率。每天都有好、坏结果的发生,二者的可能性同时存在。好的结果,没人注意。一旦出现坏的结果,只不过因结果太强烈,给人印象太深刻,就造成了一种必然的结论。 在流动的市场中,坏的地方就是你下结论的地方,也就是所谓墨菲法则起作用的地方。 胡伦说: 1.我的感受是,墨菲法则重视的是可能性,包括那些小概率事件,强调事物的变化及不确定性,拓展我们思维或观察的视野,防患于未然。同时它又告诉我们不要人云亦云,要看人所未见,想人所未想,而那些地方可能会出现赚钱的机遇。出其不意也同此理,这正是某些人的法宝。 2.迟兄所说的注意力问题,正是墨菲法则的一个方面。我们关注什么,是有选择的,世界呈现在我们面前的信息是非常丰富的,但我们通常以我们的六识及内心需求与认识、接受能力做有限的选择,并通常是线性的片面的,主客不协调的。所以有时事情发生后,我们注意并开始后悔。因此我强调墨菲法则的目的主要是打破我们内心认识世界的自我屏障,尽可能让注意力发散、流动,观察到全局的变化。它象一个风险市场的守护神,让你备好逃路,然后坐享收获的喜悦;又象黑暗之中的探照灯,照亮你心灵的死角,让你发现常人遗忘的机会。墨菲法则指出了人类的困境,人性的弱点或所遇的悖论,它的指向往往是物极必反后的方向或出常人意料之外的方向。因此,墨菲法则值得玩味。 3.墨菲法则让我们的注意力发散、流动,观察到全局的变化。----它也只是个名相,更象一个筐。一切不确定的东西都可往里装。它在冥冥之中提醒我们,面对任何事情,应该考虑的更周到、更全面,要采取一定的保险措施,防止偶然失误给我们带来的灾难和损失。 其四 墨菲法则的另类表述: 1、如果第一次便成功,显然你已经做错某事。 2、如果某事不值得去做,则不值得把它做好。 3、绝不记住忘掉的事。 4、当一切都朝一个方向进行时,最好朝反方向深深的看一眼。 5、今天是你前半生的末日。 6、寻求单纯----然后不信。 7、教育无法取代才智。 8、要是知道自己所值几何,你就会变成一文不值。 9、寂寞是你赶不走的东西。 10、自动消失的问题会自动回来

361/212>
Open Toolbar