努力 创新 求实

发布新日志

  • QTP菜单栏出现混乱时的解决办法

    2015-11-03 16:57:01

     
     
     
    首先认为是当初卸载不干净造成的,因此重新清理,然后再安装,结果不能解决问题。

    下面介绍两个正确的解决该问题的方法,希望大家遇到该问题后,能够有所帮助;

    1、在【Tools】—【Options】下,General界面下,点击Restore Layout进行处理。

    2、右击工具栏的空白处,选择“customize.....”,选择ToolsBars项,然后点击“Restore All”。
  • QTP菜单栏出现混乱时的解决办法

    2015-11-03 16:57:01

     
     
     
    首先认为是当初卸载不干净造成的,因此重新清理,然后再安装,结果不能解决问题。

    下面介绍两个正确的解决该问题的方法,希望大家遇到该问题后,能够有所帮助;

    1、在【Tools】—【Options】下,General界面下,点击Restore Layout进行处理。

    2、右击工具栏的空白处,选择“customize.....”,选择ToolsBars项,然后点击“Restore All”。
  • wind7环境下QTP10安装

    2015-10-27 09:43:47

    QTP10安装

    错误:
    1.安装qtp  
    2.拷贝mgn-mqt82.exe(已下载)到C:\Program Files\Mercury Interactive(创建)文件夹下  
    3.创建C:\Program Files\Common Files\Mercury Interactive\License Manager文件夹  
    4.执行mgn-mqt82.exe 

    正确:
    1.安装qtp  
    2.执行mgn-mqt82.exe 
    3.查看文件lservrc: C:\Users\admin\AppData\Local\VirtualStore\ProgramData\HP\Functional testing\License
    4.在刚才新建的License Manager文件夹里面新生成的文件,用记事本打开,把#之前的字符串拷贝到qtp10.0,安装license方框里面。
      如:3QVWCPPOS5NGGFM6KPX64EQFSH6INFRJIVMC5WZ4XIIFIXX86UCPIP4M686DZKV9NANA9BUP# "QuickTestPro" version "6.0", no expiration date, exclusiveJZ7F79F6YQQFVUWNG2V7AW22K537DOELQYNX6VSCNCZ9J8M2QW9OXO5DSEQKUZA46X5BO# "FT-Unified" version "1.0", no expiration date, exclusive   就拷贝#号前的3QVWCPPOS5NGGFM6KPX64EQFSH6INFRJIVMC5WZ4XIIFIXX86UCPIP4M686DZKV9NANA9BUP 然后paste到license向导中的license输入的地方,就可以了
     
  • 从测试人员到测试经理

    2011-12-29 14:57:22

    2010年初,我入职**公司××部,并进入政府事业部××××项目组,作为外包测试人员我知道自己的一言一行不仅仅代表个人,更代表部门的荣誉。面对新的环境,新业务线,新的测试技术我知道我要面临的是一个又一个的挑战。
        2010年4月在××××××项目中,我负责该系统的核心模块测试工作。项目时间非常紧张,面对新的业务线我只有1周时间熟悉业务并很快上手测试,由于项目紧张,配和项目进度需求经常加班加点进行工作。由于不懈的努力,我圆满的完成了测试任务。并在项目维护测试阶段成为了该项目的测试负责人。项目试运行阶段,我带领项目组测试人员,认真仔细地对待项目中的每一项变更和新需求。认真评估系统风险,经过多重的测试策略,项目风险基本在可控范围内。测试组的专业水平得到了项目组的一致肯定。年底项目在计划时间内成功验收并上线。并在2010年年终被客户方评为“项目建设奖”。
        2011年5月由于测试能力的认可及项目的需要,我开始担任测试组负责人。开始慢慢从测试技术工作转为对测试团队的管理。同时兼顾公众项目的测试工作。由于前任工作进行过项目管理工作,有过一定的经验。所以,一切对我来说不算陌生。调查了项目的现前情况,与部门部长进行后期发展沟通交流,我制定了一系列的测试组发展方向规划,在计划中,确定了测试工作的流程规范;完善测试过程方法和途径;建立经验知识库;测试组提升方式;团队发展等。考虑到测试人员水平的参差不齐制定了一系列测试讨论会活动,有主题有方向,经验分享,问题答疑,工具培训等。得到了部长的肯定,得到了测试组成员的一致认同。团队气氛和谐而又有激情。
        2011年8月××××项目启动,该项目测试人员均为新进人员,经验较少。我把××××××项目交接给了较有经验的测试人员。开始接管××××项目。一方面培养有经验的测试人员成为测试负责人,一方面开始培养文献项目测试人员,一方面进行项目管理与沟通工作。以最新的事业部流程管理该项目,从测试申请、测试计划,测试用例设计,测试执行、测试总结,在整个过程中进行了标准的测试流程与和谐的沟通。由于新进人员测试经验不足,为了保证测试的质量,对每个测试人员专业水平进行摸底,从测试需求文档测试与评审,到测试设计、到测试执行,每一阶段前都进行测试经验分享。解决了新员工不少的疑难问题,很大的地提升了测试的工作质量和测试人员的工作热情。三轮集成测试总共发现bug800多个,发现问题的层次较深较全,得到了项目组负责人的肯定,得到了整个开发团队的认可。得到了其它项目组开发负责人的赞扬。
       2011年11月由于项目组的认可,测试组小组由原来的7人发展到18人的测试团队,全部为我部人员,且由我部人员担任测试负责人。在项目组中综合考虑各项目的工作进度,对员工工作量,以及专业技能进行全面掌握,适合的人放在适合的位置,及时根据项目的紧急情况进行人员调配工作。 得到了领导的全面支持。也得到了所有项目PM的致认可。  11月中旬**项目PM与我进行了沟通,释放他部测试人员,并申请我方测试人员及测试规范。通过一系列沟通,由我方测试人员为测试负责人,由我前期进行监督与培养。对前期项目存在问题进行总结说明,对测试过程进行改善建议,12月份的测试工作与质量明显出现改变。得到该PM的相当肯定。
        2011年12月份,已有5个项目同时进行了,自已的工作内容也由项目测试变成了对测试过程改进以及TL人员的培养了。对项目中存的问题,沟通存在问题,进行经验总结,并形成测试过程规范性总结。得到部长的认可,并同时让所有开发人员进行详细了解,以减少开发与测试沟通不和谐而存在的风险。测试过程中,由之前的全面转到各个测试环节点,对各个环节中存在问题进行总结,逐一突破,让测试流程真正规范起来:提出并实施单元测试环节,给开发人员进行了单元测试工具的简单培训,对项目组成员进行了性能测试初级培训等。为项目组以后的发展形成了较成熟的流程规范。由于自己的努力与专业,得到了项目组领导的很大信任,得到了部门领导肯定,得到了测试组成员的一致认可。。。。。
         2011年11月,北京分部划分出来,成为了独立部门,望着组织架构中自已熟悉的名字,感慨万千呀!!!
        
  • LoadRunner: Oracle 数据库性能指标说明

    2010-12-28 11:35:04

    计数器名称

    解释

    CPU used by this session (V$SESSTAT 1/[SYS]/ABCDEF/ORACLE.EXE) (绝对)

    这是从用户调用开始到结束期间会话所用的 CPU 时间( 10 毫秒计)。某些用户调用可以在 10 毫秒内完成,因此,开始和结束用户调用时间可能相同。在这种情况下,将在统计信息中添加 0 毫秒。各种操作系统报都报告存在类似的问题,尤其是有多种上下文需要切换的系统。帮助对整体速度有所了解

    enqueue deadlocks (V$SESSTAT 1/[SYS]/ABCDEF/ORACLE.EXE) (绝对)

    不同会话之间的排队死锁总数。 用以确定应用不合理处

    enqueue timeouts (V$SESSTAT 1/[SYS]/ABCDEF/ORACLE.EXE) (绝对)

    完成前超时的排队操作(获取和转换)的总数。用以确定是否有需要优化语句

    execute count (V$SESSTAT 1/[SYS]/ABCDEF/ORACLE.EXE) (比率)

    执行 SQL 语句的总调用数(用户和递归)用以确定sql的执行频率,频率大且慢的需要优化

    opened cursors current (V$SESSTAT 1/[SYS]/ABCDEF/ORACLE.EXE) (绝对)

    当前打开光标的总数。确定当前系统并行度

    parse count (hard) (V$SESSTAT 1/[SYS]/ABCDEF/ORACLE.EXE) (比率)

    分析调用(实际分析)的总数。硬分析意味着分配大批量工作和其他内存结构,然后生成分析树。就内存使用情况而言,硬分析是一种费用很高的操作。这几项用以确定说起来分析的消耗

    parse count (total) (V$SESSTAT 1/[SYS]/ABCDEF/ORACLE.EXE) (比率)

    分析调用(硬和软)的总数。软分析是一种检查,可确保底层对象上的权限未更改。

    parse time cpu (V$SESSTAT 1/[SYS]/ABCDEF/ORACLE.EXE) (比率)

    分析(硬和软)所用的总 CPU 时间( 10 毫秒计)

    parse time elapsed (V$SESSTAT 1/[SYS]/ABCDEF/ORACLE.EXE) (比率)

    分析的总已用时间( 10 毫秒计)。从该统计数据中减去分析时间 CPU,就可得到等待分析资源的时间总计。详细信息,请参阅上述的分析时间 CPU

    physical reads (V$SESSTAT 1/[SYS]/ABCDEF/ORACLE.EXE) (比率)

    从磁盘读取的总数据块数。此值等于“直接物理读取”次数加上对缓冲区缓存的总读取次数。这几项用以确定数据读写压力

    physical reads direct (V$SESSTAT 1/[SYS]/ABCDEF/ORACLE.EXE) (绝对)

     

    physical reads direct (lob) (V$SESSTAT 1/[SYS]/ABCDEF/ORACLE.EXE) (绝对)

     

    physical writes (V$SESSTAT 1/[SYS]/ABCDEF/ORACLE.EXE) (比率)

    向磁盘写入的总数据块数。此值等于“直接物理写入”次数加上从缓冲区缓存的总写入次数。

    physical writes direct (V$SESSTAT 1/[SYS]/ABCDEF/ORACLE.EXE) (绝对)

     

    physical writes direct (lob) (V$SESSTAT 1/[SYS]/ABCDEF/ORACLE.EXE) (绝对)

     

    redo log space requests (V$SESSTAT 1/[SYS]/ABCDEF/ORACLE.EXE) (比率)

    活动日志文件已满,Oracle 正等待分配磁盘空间以便恢复日志项。已通过执行日志切换创建了空间。与 SGA 大小和工作负载提交率有关的小日志文件可能会造成问题。进行日志切换时,在切换到新日志文件之前,Oracle 必须确保提交的所有脏缓冲区写入了磁盘。如果大的 SGA 充满脏缓冲区和小的恢复日志文件,日志切换必须等待 DBWR 将脏缓冲区写入磁盘,然后才能继续。还将检查日志文件空间,日志文件空间切换将等待 V$SESSION_WAIT 中的事件。确定日志存储性能

    session pga memory (V$SESSTAT 1/[SYS]/ABCDEF/ORACLE.EXE) (绝对)

    此统计数据显示会话的当前 PGA 大小。此统计数据仅在 V$SESSTAT 中有用,它在 V$SYSSTAT 中没有意义。pga的大小调整有一些参考作用

    session pga memory max (V$SESSTAT 1/[SYS]/ABCDEF/ORACLE.EXE) (绝对)

    此统计数据显示会话的峰值 PGA 大小。此统计数据仅在 V$SESSTAT 中有用,它在 V$SYSSTAT 中没有意义。

    sorts (disk) (V$SESSTAT 1/[SYS]/ABCDEF/ORACLE.EXE) (比率)

    如果对于给定的排序操作,磁盘写入数不为零,则此统计数据就会递增。需要磁盘 I/O 的排序很耗费资源。请尝试增加初始化参数 SORT_AREA_SIZE 的大小。有关详细信息,请参阅“SORT_AREA_SIZE”。对调整排序区大小有一定参考作用

    sorts (memory) (V$SESSTAT 1/[SYS]/ABCDEF/ORACLE.EXE) (比率)

    如果磁盘写入数为零,排序就完全在内存中进行,此统计数据就会递增。它进一步表明应用程序工作负载中的排序活动。您不可能比内存排序做得还好,除非根本没有任何排序活动。排序通常发生在表连接 SQL 操作期间,并按选择标准规范执行。

    sorts (rows) (V$SESSTAT 1/[SYS]/ABCDEF/ORACLE.EXE) (比率)

    总排序行数。

    table fetch by rowid (V$SESSTAT 1/[SYS]/ABCDEF/ORACLE.EXE) (比率)

    使用 ROWID 提取行(通常从索引恢复)时,每个返回的行都使此计数器递增。此统计数据表明行提取操作正在索引的帮助下进行。因为表扫描通常表明查询未得到优化或表没有索引,所以,当应用程序中出现上述问题时,此统计数据应该也会递增。确定索引使用情况

    table fetch continued row (V$SESSTAT 1/[SYS]/ABCDEF/ORACLE.EXE) (比率)

    在提取期间遇到跨多个块的行时,此统计数据就会递增。检索跨多个块的行会增加逻辑 I/O,递增系数与超过需要访问的块数对应。 将其导出,然后重新引入,可能会消除此问题。请仔细检查 STORAGE 参数 PCT_FREE PCT_USED。如果行数大于数据库块数(例如,使用的数据类型为 LONG,行又相当大),将无法更正此问题。对调整数据库块大小和分析数据碎片有一定参考作用

    table scan blocks gotten (V$SESSTAT 1/[SYS]/ABCDEF/ORACLE.EXE) (绝对)

    协助查询全表扫描的合理性

    user commits (V$SESSTAT 1/[SYS]/ABCDEF/ORACLE.EXE) (比率)

    当用户提交事务时,为反映对数据库块所做的更改而生成的恢复必须写入磁盘。提交数通常最接近用户事务比率。(评估应用合理性)

    user rollbacks (V$SESSTAT 1/[SYS]/ABCDEF/ORACLE.EXE) (比率)

    此统计数据存储的是用户手动发出 ROLLBACK 语句的次数或在用户事务期间出错的次数。

      注:红色字标识 ,是请教了数据组专员解说的。

  • 当前测试行业状态之感想

    2010-12-23 15:48:34

    当前的测试工作,不是一句话可以概括出来的;

    可能当前自己的工作并非很规范,所以,总感觉说出来的话没有什么底气。

    唉,你说咱也是大公司呗,没进来之前听说是很规范的呢?

    其实有些公司还是做得很规范,如航天科工等一些国家军工企业。

    曾经看到一个报道说,航空在试飞航天火箭时,因为螺丝钉的质量不过关,而导致整个试飞失败。惨痛的教训让这些企业对测试与质量相当重视。

    当然,小软件自然和人家航空火箭比不了,所以,大部分公司有测试但没有那么严谨。即使有时间也花不起那么大的代价。

    所以,测试工作在当前的企业中,还是相当具有挑战性的。

    初步说说,工作当中大概有以下这些问题(说得不全,大家可以补充)

    领导不重视,

    执行力度不够

    过程不规范

    文档不齐全

    项目采用的是迭代式开发。没有时间让你去走所谓的测试规范流程。

    项目需求一直在变,在更新。几个版本测下来,发现软件与当初描述的不是一个概念。

    当遇到这些问题时,测试工作的价值与职能不能够很好的发挥出来。

    同时也让我们很迷茫。

    怎么文档不对呢?

    怎么测试过程很不规范呢?

    没有充足的时间编写和修改用例

    怎么没有经过压力测试,负载测试等就上线呢?。。。。。。。。。

    遇到这些情况时,大家需要做的事就是淡定。

    没有为什么,因为你一时也改变不了。

    就像你改变不了客户的需求随时在变。

    就像你改变不了开发人员为什么不更新文档一样

    就像你改变不了项目领导确定的系统上线时间,以及考虑是否进行性能测试。

    过程还需要时间规范。

    你可以提要求,可以提出自己的建议等。可以向领导证明过程的规范可以减小风险。

    但是如果改变不了什么,那么当前所做事就是:沟通吧。

    随时了解测试任务,摸透系统的业务。

    提交bug后,与开发沟通时,如果争,一定要力争到底,具体的方法是,换位思考,比喻论证,你是客户。。。

    项目进行中

    已重新打版,测试时间5天,

    已重新打版,测试时间3天

    下周上线,抓紧时间测试。

    OK!

    go

     

  • 一路测试之有感而谈

    2010-12-22 14:45:21

    从事测试工作三年了。写点东西,没事当闲聊。

    测试是一个很严肃的问题。要从事好这一行,修行完全在个人了。

    手工测试也好,工具测试也好,都很重要。主要是看客户的需要。

    单就测试的发现问题的力度,手工测试才是王道。

    工具测试现在也在使用中。个人的感觉如下:

    QTP功能测试,在回归测试时,在大数据量为前提之下,可以使用其完成,否则,建议还是使用手工测试。

       1.如果系统一直在更新,在重购、在改,你所花费的维护脚本的时间代价太大。比手工还不划算。

       2.qtp如果做深了还好,使用不同的数据去驱动,包括无效与失效数据,确实可行,但是,一个系统,如果你不是程序员,那么,你90%情况之下都不知道程序员动了哪些代码。BUG已经悄然躲藏在了某个脚落。

       3.一定要明确为什么要用QTP,这会为你带来你要的什么效果。个别的很建议你用工具测试,如多个文本录入项,为了确保个文本框的有效、无效、边界,特殊字符,空格,模糊截字符,组合,多国文字。。。。;基于如此之多的录入项,使用qtp回归测试可以事半功倍。

       LR性能测试,重要吗? 这个由客户说了算。  学习的过程,就是多和开发人员,数据组人员沟通。和专家沟通,保证了分析结果的正确性,自己也能学习到不少东西。(写完此段时,想了很久,总感觉是否说得太脱节了,在此还是决定申明一下,性能测试非常重要,但是做与不做,则要看具体情况了)

       测试工作,不是分到任务后,立马埋头苦干。自己的模块点完了,就算完事了。这样的测试,不是最终要的效果。测试人员所担任的是一个质量监控工作。你也许会说了,这是项目组长做的事。 如果项目较多,项目组长顾不了这么多呢?不要以为领导应该做什么。而是要协助领导做了什么。如此,你离组长的职务也不远了,当然,这是后话。

       曾经,在项目中就出现过:

    测试已经经过4轮了,在第五轮测试时,测试人员通知可以测试后,就一扎进工作中。此轮测试原定是三天,测试进了2天。bug刷刷地往bug工具中提,偶尔的闲话当中说,这一版不怎么稳定,bug比较多。但是谁也没有去关注这一点。项目组长因为没有参加此次测试,也处在不知情的情况下,以为回归bug再打一版后,周末就可以上线了。

    这种情况下,要怎么做呢? 其它,测试人员在接到项目时,进行预测试,如果严重的脚本错误,或页面报错,应该立即停止测试,并把问题返馈给相关的测试组长,再由测试组长与开发组长沟通。 这是个比较严重的问题,具体的不一一再述。只是想说明,测试一定要抱有认真负责的态度才能做好。

  • 有效的用例编写规则

    2010-12-21 16:04:28

     

    第一章 什么是高质量的用例

    1.1 为什么要使用用例

    用例提供了一种用于构建故事的半形式框架;

    在每个用例和所有描述层次中,用例都描述了错误情况的系统需求;

    虽然本质上是一种功能分解技术,但用例已经成为面向对象软件开发的一个流行元素;

    用例提供了可以在其上处理其他项目信息的骨架:

    项目经理根据用例进行估计和发布进度;

    数据及业务规则制定人员可以把自己的需求和所需用例联系起来;

    用户界面设计人员可以进行设计,并将其与相关用例联系起来;

    测试人员可以根据用例中描述的成功和失败情况构建测试场景(测试用例);

    1.2 编写用例容易出现的问题
    用户界面太多,用户界面应属于设计范畴,鼠标、按键等内容不应出现在用例中;
    较低目标层次上的用例太多,无法展示系统将会给其最终用户提供什么功能;
    使用用例表示非行为信息,性能需求、业务规则等不要在用例中描述;
    太冗长,最好在3~9步;
    目标实现不完整,尤其是错误处理;
    句子片断,主、谓、宾尽量完整;
    1.3
    为什么使用用例模式语言
    描述了用例的质量标志及其编写过程,提供了能够经受时间考验的用例改进建议;在评审用例初稿和改进其质量的过程中,这个工具能起到很大作用。
    1.4
    什么是模式
    模式是质量标志和策略;
    1.5
    使用模式语言时错误观念

    模式提供了一个关于其自身和模式内容的完整方法;只起补充作用
    使用模式肯定会成功;
    模式为老问题提供了新的解决方案;只是经常出现的问题的通用可靠方案
    模式适用于所有情况;仅是处于某种上下文中的问题的解决方案
    1.6
    模式组织

    模式分类

    子类

    开发模式

    团队组织 :判断和改进用例团队组织方式的质量的模式;

    过程 :判断和改进团队用来创建用例的方法质量的模式;

    编辑 :随着潜在需求的变化和编写人员知识的增加,判断和改进单个用例的质量;

    结构模式

    用例集 :判断和改进用例集质量的模式;

    用例 :判断和改进单个用力质量的模式;

    场景和步骤 :判断和改进用力场景以及这些场景中的步骤质量的模式;

    用例关系 :判断和改进集合中用例之间的结构关系质量的模式;

    1.7 用例的读者和编写者
    有两组不同的认阅读和使用用例:(1)最终用户或业务专家;(2)程序员。
    用例编写组必须包括:
    至少一位具有编程背景的认,以获得描述所要求的准确性和精度;
    至少一位熟知业务规则的认;
    至少一位熟知在实际中如何使用系统的认;
    1.7
    用例的读者和编写者

    有两组不同的认阅读和使用用例:(1)最终用户或业务专家;(2)程序员。
    用例编写组必须包括:
    至少一位具有编程背景的认,以获得描述所要求的准确性和精度;
    至少一位熟知业务规则的认;
    至少一位熟知在实际中如何使用系统的认;
    第二章 团队
    2.1 SmallWritingTeam

    原因:
    用例要求具有不同观点和专业知识的人编写;
    将一大组人聚集在一起是困难的;
    理论上,在用例上投入的人越多,就能越快的完成用例编写工作;
    大的团队会变得低效;
    大型编写团队可能会通过集体讨论的形式开发用例,添加许多不必要的特性;
    所以:
    一个由2人或3人组成的团队足够小,容易交流和达成一致;

    可以使用几个SmallWritingTeam,但应当制定一位用例设计师,以保证所有用例与愿景一致。
    最终目的是使过程保持在可管理状态,大的团队将在管理上投入更多的精力。
    2.2 ParticipatingAudience
    没有涉众提供的信息和反馈,就不能满足他们的需要;尽可能使客户和内部涉众积极参与用例开发过程。
    2.3 BalancedTeam
    由一些个性相似、意见相同的个人组成的团队开发用例,可能会得到一组缺乏创见、范围狭窄的用例,这种用例不能满足每个人的需要。
    因此,为小组配备具有不同专长的人员,以维护开发过程中涉众的利益,确保团队中包括开发人员和最终用户。
    最大好处是使编写人员在用例中使用常见的、可理解的术语。
    第三章 过程
    编写好的用例是极其个性化的,每个人都有他自己的风格,每个组织都有根据自己的文化和业务需要做事情的方式,因此,没有创建用例的通用过程。

    3.1 BreadthBeforeDepth
    原因:
    需求收集是一个发现过程,用例编写是一个迭代过程;
    人们很早就开始编写用例的细节;
    人们浪费了精力或陷入了太多的细节,通常都会失去重点,无法描述所有可能的扩展条件;

    从早期获得概述是有益的;
    最初编写的细节越多,在了解系统后必须进行的改变也就越多;
    所以:
    通过首先开发用例的概述来保存精力,然后逐步增加细节,并行开发一组相关用例。

    完成概述用例后,随着对系统了解的增多,不断提高用例精度,避免突然开发完所有用例或一次只开发一个用例的倾向。
    3.2 SpiralDevelopment
    (螺旋式开发)

    原因:
    理解系统的行为可能会花掉大量时间,要求渐进式分析;
    拖延是昂贵的。要尽快完成用例的编写;
    对需求进行分析后,需求很可能会发生变化;
    需求成本的错误是昂贵的;
    所以:
    以一种迭代的,宽度优先的方式开发用例,每次迭代都会提高用例集的准确性和精度。
    基本过程:
    从简单的东西开始,如一个参与者/用例列表;
    简要描述用力主场景,即高层用例,以包含用例的主要范围;
    扩展摘要的子集,并填充细节;
    评审并调整;
    3.3 MultipleForms
    不同的项目需要不同程度的形式化,每个人对模板都有不同的偏好,要求每个人都使用相同的用例模板只会起到相反的作用。
    原因:
    每个人的个性、经验和经受的锻炼不同,每个开发组织都有其特有的人员、历史和文化;
    不同的项目有不同的需要;
    不同的编写团队需要不同程度的规范和严格度;
    在组织中使用公共的编写形式有助于交流;
    在同一个项目上使用不同的模板不是一个好主意;
    因此:根据项目相关的风险性、项目特点,和所涉及到的人员选择用例的编写格式,并在该项目的开发过程中的组织内部使用。
    3.4 TowTireReview
    (评审)

    许多人都可能需要评审用例,这是一件昂贵耗时的事情。
    原因:
    对于验证和确认编写及内容来说,评审是必要的;
    涉众在用例上有一种既得利益;
    使每个人参与编写过程非常昂贵、麻烦并且缓慢;
    如果仅由一个小的编写组进行评审,就不会考虑所有涉众的利益;
    评审可能是昂贵的、乏味的、耗时的。
    所以:

    进行两种类型的评审:第一种是由较小的内部小组进行的评审,可能要重复进行很多次;第二种是由整个团队进行的评审,可能只进行一次。

    3.5 QuittingTime
    开发一个超出了涉众和开发人员需要的用例模型不仅浪费资源,而且会拖延项目进度。
    原因:
    忽视重要需求的巨大恐惧使构建人员和涉众延长了需求收集活动;
    大多数人可以用一种合理的模糊性工作,即不言自明;
    详细讲述谎言并不能使他们更为精确;
    所以:
    在用例完整并且符合参与者的需要后,停止开发用例;
    用例模型完整性的检验:完整、可读、逻辑上正确、对开发人员足够详细。
    是否识别了所有的参与者和目标并将其编成了文档?
    客户及其代表是否承认用例集是完整的,而且每个用例都是可读的和正确的?
    设计人员是否能够实现这些用例?
    3.6 WriterLicense
    小的格式差别并不重要,解决了所有系统问题后,及时还存在一些格式问题,也可以停止编写;

     

  • LR分析

    2010-01-18 23:06:31

     

    1.

    Page Reads/sec

    % Disk Time

    Avg.Disk Queue Length

     

    页面读取操作速率很低,同时 % Disk Time Avg.Disk Queue Length的值很高,则可能有磁盘瓶径

    如果队列长度增加的同时页面读取速率并未降低,则内存不足

     

    2.

    内存泄露:Memory\ Available Bytes    Memory\ Committed Bytes

    监视您认为可能在泄露内存的进程的 Process\Private BytesProcess\Working Set Process\Handle Count

     

    怀疑是内核模式进程导致了泄露,则还应该监视 Memory\Pool Nonpaged BytesMemory\ Pool Nonpaged Allocs Process(process_name)\ Pool Nonpaged Bytes

     

     

    3.

    %Processor Time: 被处理器消耗的处理器时间数量。如果服务器专用于sql server,可接受的最大上限是80-85%

    %Processor Time:如果该值持续超过95%,表明瓶颈是CPU


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

     

    %Privileged Time:(CPU内核时间)是在特权模式下处理线程执行代码所花时间的百分比。如果该参数值和"Physical Disk"参数值一直很高,表明I/O有问题。可考虑更换更快的硬盘系统。

     

    4.

    Server Work Queues\ Queue Length 计数器会显示出处理器瓶颈。队列长度持续大于 4 则表示可能出现处理器拥塞。此计数器是特定时间的值,而不是一段时间的平均值。

     

    5.sql

    Cache Hit Ratio(高速缓存命中率,所有Cache的命中率。在SQL Server中,Cache可以包括Log CacheBuffer Cache以及Procedure Cache,是一个总体的比率。) 高速缓存命中次数和查找次数的比率。对于查看SQL Server高速缓存对于你的系统如何有效,这是一个非常好的计数器。如果这个值很低,持续低于80%,就需要增加更多的内存。

     

     

     

     

    Memory: 内存使用情况可能是系统性能中最重要的因素。如果系统页交换频繁,说明内存不足。页交换是使用称为页面的单位,将固定大小的代码和数据块从 RAM 移动到磁盘的过程,其目的是为了释放内存空间。尽管某些页交换使 Windows 2000 能够使用比实际更多的内存,也是可以接受的,但频繁的页交换将降低系统性能。减少页交换将显著提高系统响应速度。要监视内存不足的状况,请从以下的对象计数器开始:
    Available Mbytes:
    可用物理内存数. 如果Available Mbytes的值很小(4 MB 或更小),则说明计算机上总的内存可能不足,或某程序没有释放内存。


    page/sec:
    表明由于硬件页面错误而从磁盘取出的页面数,或由于页面错误而写入磁盘以释放工作集空间的页面数。一般如果pages/sec持续高于几百,那么您应该进一步研究页交换活动。有可能需要增加内存,以减少换页的需求(你可以把这个数字乘以4k就得到由此引起的硬盘数据流量)。Pages/sec 的值很大不一定表明内存有问题,而可能是运行使用内存映射文件的程序所致。


    page read/sec:
    页的硬故障,page/sec的子集,为了解析对内存的引用,必须读取页文件的次数。阈值为>5. 越低越好。大数值表示磁盘读而不是缓存读。
    由于过多的页交换要使用大量的硬盘空间,因此有可能将导致将页交换内存不足与导致页交换的磁盘瓶径混淆。因此,在研究内存不足不太明显的页交换的原因时,您必须跟踪如下的磁盘使用情况计数器和内存计数器:
    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\ Avg.Disk sec/Transfer Memory\ Pages/sec 计数器的值增大数倍。如果这些计数器的计数结果超过了 0.1,那么页交换将花费百分之十以上的磁盘访问时间。如果长时间发生这种情况,那么您可能需要更多的内存。


    Page Faults/sec:
    每秒软性页面失效的数目(包括有些可以直接在内存中满足而有些需要从硬盘读取)较page/sec只表明数据不能在内存的指定工作集中立即使用。
    Cache Bytes
    :文件系统缓存(File System Cache),默认情况下为50%的可用物理内存。如IIS5.0 运行内存不够时,它会自动整理缓存。需要关注该计数器的趋势变化
    如果您怀疑有内存泄露,请监视 Memory\ Available Bytes Memory\ Committed Bytes,以观察内存行为,并监视您认为可能在泄露内存的进程的 Process\Private BytesProcess\Working Set Process\Handle Count。如果您怀疑是内核模式进程导致了泄露,则还应该监视 Memory\Pool Nonpaged BytesMemory\ Pool Nonpaged Allocs Process(process_name)\ Pool Nonpaged Bytes


    Pages per second :
    每秒钟检索的页数。该数字应少于每秒一页。

    Process
    %Processor Time:
    被处理器消耗的处理器时间数量。如果服务器专用于sql server,可接受的最大上限是80-85%
    Page Faults/sec:
    将进程产生的页故障与系统产生的相比较,以判断这个进程对系统页故障产生的影响。
    Work set:
    处理线程最近使用的内存页,反映了每一个进程使用的内存页的数量。如果服务器有足够的空闲内存,页就会被留在工作集中,当自由内存少于一个特定的阈值时,页就会被清除出工作集。
    Inetinfo:Private Bytes:
    此进程所分配的无法与其它进程共享的当前字节数量。如果系统性能随着时间而降低,则此计数器可以是内存泄漏的最佳指示器。

    Processor监视处理器系统对象计数器可以提供关于处理器使用的有价值的信息,帮助您决定是否存在瓶颈。
    %Processor Time:
    如果该值持续超过95%,表明瓶颈是CPU。可以考虑增加一个处理器或换一个更快的处理器。
    %User Time:表示耗费CPU的数据库操作,如排序,执行aggregate functions等。如果该值很高,可考虑增加索引,尽量使用简单的表联接,水平分割大表格等方法来降低该值。

    %Privileged Time
    :(CPU内核时间)是在特权模式下处理线程执行代码所花时间的百分比。如果该参数值和"Physical Disk"参数值一直很高,表明I/O有问题。可考虑更换更快的硬盘系统。另外设置Tempdb in RAM,减低"max async IO""max lazy writer IO"等措施都会降低该值。
    此外,跟踪计算机的服务器工作队列当前长度的 Server Work Queues\ Queue Length 计数器会显示出处理器瓶颈。队列长度持续大于 4 则表示可能出现处理器拥塞。此计数器是特定时间的值,而不是一段时间的平均值。
    % DPC Time:
    越低越好。在多处理器系统中,如果这个值大于50%并且Processor:% Processor Time非常高,加入一个网卡可能会提高性能,提供的网络已经不饱和。

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

    Physical Disk:
    %Disk Time %:
    指所选磁盘驱动器忙于为读或写入请求提供服务所用的时间的百分比。如果三个计数器都比较大,那么硬盘不是瓶颈。如果只有%Disk Time比较大,另外两个都比较适中,硬盘可能会是瓶颈。在记录该计数器之前,请在Windows 2000 的命令行窗口中运行diskperf -yD。若数值持续超过80%,则可能是内存泄漏。
    Avg.Disk Queue Length:
    指读取和写入请求(为所选磁盘在实例间隔中列队的)的平均数。该值应不超过磁盘数的1.5~2 倍。要提高性能,可增加磁盘。注意:一个Raid Disk实际有多个磁盘。
    Average Disk Read/Write Queue Length:
    指读取(写入)请求(列队)的平均数。
    Disk Reads(Writes)/s:
    物理磁盘上每秒钟磁盘读、写的次数。两者相加,应小于磁盘设备最大容量。
    Average Disksec/Read:
    指以秒计算的在此盘上读取数据的所需平均时间。
    Average Disk sec/Transfer:
    指以秒计算的在此盘上写入数据的所需平均时间。
    Network Interface

    Bytes Total/sec :
    为发送和接收字节的速率,包括帧字符在内。判断网络连接速度是否是瓶颈,可以用该计数器的值和目前网络的带宽比较

    SQLServer性能计数器:
    Access Methods(
    访问方法) 用于监视访问数据库中的逻辑页的方法。
    . Full Scans/sec(
    全表扫描/) 每秒不受限的完全扫描数。可以是基本表扫描或全索引扫描。如果这个计数器显示的值比12高,应该分析你的查询以确定是否确实需要全表扫描,以及S Q L查询是否可以被优化。
    . Page splits/sec(
    页分割/)由于数据更新操作引起的每秒页分割的数量。
    Buffer Manager(
    缓冲器管理器):监视 Microsoft® SQL Server? 如何使用: 内存存储数据页、内部数据结构和过程高速缓存;计数器在 SQL Server 从磁盘读取数据库页和将数据库页写入磁盘时监视物理 I/O。监视 SQL Server 所使用的内存和计数器有助于确定: 是否由于缺少可用物理内存存储高速缓存中经常访问的数据而导致瓶颈存在。如果是这样,SQL Server 必须从磁盘检索数据。 是否可通过添加更多内存或使更多内存可用于数据高速缓存或 SQL Server 内部结构来提高查询性能。
    SQL Server
    需要从磁盘读取数据的频率。与其它操作相比,例如内存访问,物理 I/O 会耗费大量时间。尽可能减少物理 I/O 可以提高查询性能。
    .Page Reads/sec
    :每秒发出的物理数据库页读取数。这一统计信息显示的是在所有数据库间的物理页读取总数。由于物理 I/O 的开销大,可以通过使用更大的数据高速缓存、智能索引、更高效的查询或者改变数据库设计等方法,使开销减到最小。
    .Page Writes/sec (.
    写的页/) 每秒执行的物理数据库写的页数。
    .Buffer Cache Hit Ratio.
    缓冲池Buffer Cache/Buffer Pool)中没有被读过的页占整个缓冲池中所有页的比率。可在高速缓存中找到而不需要从磁盘中读取的页的百分比。这一比率是高速缓存命中总数除以自 SQL Server 实例启动后对高速缓存的查找总数。经过很长时间后,这一比率的变化很小。由于从高速缓存中读数据比从磁盘中读数据的开销要小得多,一般希望这一数值高一些。通常,可以通过增加 SQL Server 可用的内存数量来提高高速缓存命中率。计数器值依应用程序而定,但比率最好为90% 或更高。增加内存直到这一数值持续高于90%,表示90% 以上的数据请求可以从数据缓冲区中获得所需数据。
    . Lazy Writes/sec(
    惰性写/)惰性写进程每秒写的缓冲区的数量。值最好为0
    Cache Manager(
    高速缓存管理器) 对象提供计数器,用于监视 Microsoft® SQL Server? 如何使用内存存储对象,如存储过程、特殊和准备好的 Transact-SQL 语句以及触发器。
    . Cache Hit Ratio(
    高速缓存命中率,所有Cache”的命中率。在SQL Server中,Cache可以包括Log CacheBuffer Cache以及Procedure Cache,是一个总体的比率。) 高速缓存命中次数和查找次数的比率。对于查看SQL Server高速缓存对于你的系统如何有效,这是一个非常好的计数器。如果这个值很低,持续低于80%,就需要增加更多的内存。
    Latches(
    ) 用于监视称为闩锁的内部 SQL Server 资源锁。监视闩锁以明确用户活动和资源使用情况,有助于查明性能瓶颈。
    . Average Latch Wait Ti m e ( m s ) (
    平均闩等待时间(毫秒)) 一个SQL Server线程必须等待一个闩的平均时间,以毫秒为单位。如果这个值很高,你可能正经历严重的竞争问题。
    . Latch Waits/sec (
    闩等待/) 在闩上每秒的等待数量。如果这个值很高,表明你正经历对资源的大量竞争。
    Locks(
    ) 提供有关个别资源类型上的 SQL Server 锁的信息。锁加在 SQL Server 资源上(如在一个事务中进行的行读取或修改),以防止多个事务并发使用资源。例如,如果一个排它 (X) 锁被一个事务加在某一表的某一行上,在这个锁被释放前,其它事务都不可以修改这一行。尽可能少使用锁可提高并发性,从而改善性能。可以同时监视 Locks 对象的多个实例,每个实例代表一个资源类型上的一个锁。
    . Number of Deadlocks/sec(
    死锁的数量/) 导致死锁的锁请求的数量
    . Average Wait Time(ms) (
    平均等待时间(毫秒)) 线程等待某种类型的锁的平均等待时间
    . Lock Requests/sec(
    锁请求/) 每秒钟某种类型的锁请求的数量。
    Memory manager:
    用于监视总体的服务器内存使用情况,以估计用户活动和资源使用,有助于查明性能瓶颈。监视 SQL Server 实例所使用的内存有助于确定:
    是否由于缺少可用物理内存存储高速缓存中经常访问的数据而导致瓶颈存在。如果是这样,SQL Server 必须从磁盘检索数据。
    是否可以通过添加更多内存或使更多内存可用于数据高速缓存或 SQL Server 内部结构来提高查询性能。
    Lock blocks:
    服务器上锁定块的数量,锁是在页、行或者表这样的资源上。不希望看到一个增长的值。
    Total server memory
    sql server服务器当前正在使用的动态内存总量.

    监视IIS需要的一些计数器
    Internet Information Services Global:
    File Cache Hits %
    File CacheFlushesFile Cache Hits
    File Cache Hits %
    是全部缓存请求中缓存命中次数所占的比例,反映了IIS 的文件缓存设置的工作情况。对于一个大部分是静态网页组成的网站,该值应该保持在80%左右。而File Cache Hits是文件缓存命中的具体值,File CacheFlushes 是自服务器启动之后文件缓存刷新次数,如果刷新太慢,会浪费内存;如果刷新太快,缓存中的对象会太频繁的丢弃生成,起不到缓存的作用。通过比较File Cache Hits File Cache Flushes 可得出缓存命中率对缓存清空率的比率。通过观察它两个的值,可以得到一个适当的刷新值(参考IIS 的设置ObjectTTL MemCacheSize MaxCacheFileSize
    Web Service:
    Bytes Total/sec:
    显示Web服务器发送和接受的总字节数。低数值表明该IIS正在以较低的速度进行数据传输。
    Connection Refused
    :数值越低越好。高数值表明网络适配器或处理器存在瓶颈。
    Not Found Errors
    :显示由于被请求文件无法找到而无法由服务器满足的请求数(HTTP状态代码404

  • 关于性能测试

    2008-09-26 18:08:57

       这段时间在观注性能测度方面的,正慢慢研究当中。。。。
  • 转载:微软测试有感

    2008-07-15 22:14:55

     

    最近和微软一哥们聊微软的测试,很有感触,记下来,和大家共同分享。

    全文如下:

    开头语:

    作测试很久了,一直为一些问题所困扰,也一直对微软有一种顶礼膜拜的向往,终于有一天,近距离的接触了微软的测试,感觉不是以前想象中那么遥不可及,却又难以企及。于是把个人觉得微软值得借鉴的地方整理了一下,希望能对大家有所帮助。

     

    1.  测试流程

    首先说说测试流程,微软的测试流程也没什么新的东西,和大多数的测试流程一样。

    大致是先进行测试准备,然后是Testcase的编写,然后是白盒测试(不一定每个项目都有),然后是功能测试阶段,然后是验收测试,最终release

    如果看流程的话,和一般公司大同小异,没什么新花样。但是我觉得值得借鉴的是两点。

    第一,   微软的流程执行的非常认真。

    这点非常值得提倡,我们都知道,测试的最终质量决定于测试流程和测试人员素质,要想测试质量有保证,要么是流程很完善,要么你流程不行,但是个人能力超强。如果有一个很好的流程,就算执行的人稍微差点,最终的质量也不会差到哪里去。所以流程是很重要的。

    但是,看国内的公司欠缺的就是这个,要么是没有流程,要么流程是个花架子,没认真执行过。我想微软的测试人都是超级牛人,但是人家还是老老实实的忠实按照流程来走,我觉得这点非常好。(在IBM 也是这样,笔者以前在IBM作项目的时候,发现他们的文档写的特认真,流程特认真),所以说忠实的执行一个好的流程是成功的一大半。

    第二,   在整个流程中,微软非常强调测试尽早介入。微软在这方面是一致提倡的,按照我们国内IT业的恶习,一般都是软件主体差不多成型了,拉几个测试人员过来点点,其实这是非常不好的。微软的测试人员在项目一开始就和开发人员同步介入,在需求阶段就开始介入,进行需求评审。在开发人员开始编码的时候,测试人员就开始编写Test case,并开发一些测试工具,或者写一些配套的测试代码(不要奇怪,微软的测试人员都能写很好的代码)。微软的理念就是:预防bug比解决bug好,所以非常提倡测试尽早介入,把一部分bug消灭在需求阶段。

    2.  自动化流程

    说到自动化,大家可能以为我是说微软的自动化测试工具多牛,其实微软内部用到的自动化测试工具倒是不多,就算有也都是内部开发的,非常实用的,他们不会去用MI的工具。

            说微软的自动化程度高,主要是体现在流程方面,譬如说整个自动

        构建流程,在开发人       员代码check in之后,系统自动发邮件,邮

        件内容就是一个change list,包括代码更新list以及一个编译者添加的comment,其内容是该版本功能的变化或者修改掉的bug ID。整个测试过程中能用自动化的地方都尽可能采用自动化,尽可能减少人为失误,并且可

        以使人和机器并行工作。个人觉得,这点很值得我们国内的测试公司借鉴,能自动化的流程都自动化,减少一些不必要的沟通。

     

    3.  质量控制机制

    说到质量控制是个大问题,需要整个团队和流程提高素质。那么微软的质量控制可以借鉴的是什么呢?是他们的机制。在微软的测试流程当中,在开发的早期,项目中所有的问题都是Dev leaderPM商量说了算(当然也要参考需求方的意见),但是到后期,具体就是功能测试之后,项目的主动权都在测试这边,某个bug的要不要解决,或者项目进度控制都是测试leader说了算。这和国内的大多数软件公司是不一样的,在微软,测试人员要对最终的软件质量负责任,但是也有相应的权利来约束开发人员。当然,他们也肯定有一些bug是产生争议的,这个时候的仲裁机制就是PM,这个不是我们传统的PMProject manager),而是一种具有微软特色的PM(全称是Program manager)。这样,测试人员在对一些争议bug的处理上有相当的话语权。

     

    4.  测试用例及管理

    微软的测试用例倒没什么特别的,不过看过他们用例之后,还是觉得写的详细,认真,但是又不冗长拖沓,这个需要很高深的水平。另外,微软的测试用例管理用的是微软自己开发的用例管理工具。

    另外值得说明的是,微软的每个用例都进行了分级,并且功能所在的模块都标的很清楚。

     

    5.  效率

    在效率方面,微软的测试效率非常高!高的让人惊叹,我问一个在微软工作的哥们,“你们那边测试的最大特点是什么”,他说“最大特点是快!”,就是效率很高,具体就是在测试后期过程中测试和开发之间的反馈非常快,开发修改一定量的bug,提交一个新的版本。测试人员往往能在很快的时间内把测试结果反馈出来,一般是在1天之内就能把用例快速run一遍,这样就能减少某些后期才发现bug导致的项目delay。在国内很多项目的通病是,开发解决问题带进一个新问题,测试人员整个遍历一遍用例之后才能发现,这样来回反复就消耗了大量的时间。

    但微软是如何才能实现快速反馈呢?

    第一,   测试人员对程序的了解,微软的测试人员对程序内部结构都非常熟悉,修改某一个地方,可能引起什么问题,哪些用例需要重新测试,测试人员非常清楚,能快速的执行最可能出错的地方。如果某些模块不熟悉,那么他们会和开发人员在一起沟通这次修改可能引起的问题。

    第二,   工具!还是工具,在微软的测试中,测试人员用各种工具帮助测试,提高测试效率是占到很大的比重。

    第三,   时间意识。微软的测试人员有强烈的时间意识。

     

    6.  测试工具

    测试工具能很大程度上提高测试效率,这个作为测试人员都很清楚。当然测试工具在微软的测试中也应用非常广泛,但是请注意,微软并不是像我们国内的公司一样使用的都是LRQTP这类的录制回放工具,反而这种工具倒是用的不多,就跟微软不屑CMM一样,可能是不想屈尊自己IT老大的身份吧。

    但是微软的测试工具最大的特点是实用。他们用的测试工具都是确实能提高效率,确实能办事情的工具,都不是类似WRQTP的很大很系统的工具,而是比较小的,很灵活,实用的小工具(譬如:FiddlerDriphttpwatchIE DevToolBarPaintNotNetprocexp etc.)。甚至有一些测试工具是测试人员在开发人员协助下根据项目需要临时开发的,不过大多数工具都是微软内部已经共享出来的,在微软内部各种各样的小工具特别多。

    总体给我的感觉是,不是为了用测试工具而用,而是根据实际的需要,确实能提高效率而用到,在用的过程中确实也很大的提高了效率。

     

    7.  测试人员的专业素质

    微软测试给我印象最深刻的还有他们测试人员的专业水准,在测试过程中,测试人员在一些技术上并不逊色于开发人员,在一些bug的处理上,能提出很多合理的很有建设性的建议。

     

    8.  微软的白盒测试

    微软的白盒测试怎么执行呢?让我略微有点吃惊的是,微软的一半测试人员基本不做白盒测试,除非有些不能做黑盒的模块,另外也不是所有的产品都作白盒测试。

    微软的白盒测试一般还是由专门的白盒测试人员来做,但是开发人员要对测试人员的白盒测试代码进行Review,另外微软对开发人员的代码,效率也都有一套详细的考核机制,所以开发人员对自己的代码也是非常负责任的,都进行很认真的进行测试。

     

    9.  意识(时间,质量)

    另外微软的测试还有很好的一点就是意识,时间和质量的意识都是非常强。在控制时间成本上,意识非常强,这点非常值得我们国内同仁学习,另外,风险管理的机制和意识都是非常好。在微软,项目组的每个成员都被明确告知,如果这个项目每delay一天,就会损失多少个million的美元,所以整个项目组都有比较好的时间意识。

    另外,在微软,项目组人员的质量意识都是比较强的。怎么样更好服务用户,让用户体验更好,怎么样更好的改进,这种意识比较强。

     

    10. 微软的培训

    在微软内部,员工外训的机会比较少,大多都是内部互训,各人培训自己的强项,有比较好的互相分享的习惯。另外微软的内部有非常丰富的各种培训文档。以后我会上传上去和大家分享。

     

    11 测试数据记录

    微软的测试数据记录是非常全的,也都是系统自动的,每天都是由系统自动统计当天的bug情况,然后发送一个report到每个项目组成员的邮箱里。最后到测试总结的时候,这些测试数据将变得非常有用。

    编后感:在深入了解微软的测试之前,对微软这个IT业界巨无霸的测试感觉是顶礼膜拜,高不可攀,总觉得可能很神秘,用很牛的技术或者很高深的手段。深入了解之后,发现微软的测试也是和我们做一样的事情,只不过人家做的更认真,更细,更实用,更有效率。再回过头来看时,微软的测试给我留下印象最多的是,流程,效率,意识,工具,素质!也就是这几项,成为我们国内IT企业亟需跨越的。


  • LoadRunner CPC认证考试复习试题

    2008-04-18 12:04:05

    LoadRunner CPC认证考试复习试题


    x.w*v W!Lv156874LoadRunner CPC认证考试复习试题(2006年12月版本),部分答案将在以后公布. CPC考试在2006年12月之前是实验室上机考试,主要分为问答题,选择题和编程题,考试结果一个月之后揭晓,批卷在Mercury的亚太总部新加坡进行的.这里是部分的选择题. 另外,2007年据说将实行新的题型,改为跟SP考试同样的类型,所以题目难度可能有所降低.

    1. How many default Widows: Apache counters are added?

    a) 10 : 5

    b) 11 : 9

    c) 6 : 10

    d) 9 : 4

    e) 5 : 2

    f) None of above

    2. Can the list of default Windows monitors be changed?

    a) No-this list is determined by Microsoft Corporation

    b) Yes-modify the scenario .Irs file

    c) No-only the domain administrator can modify it

    d) Yes-modify a cfg file in LoadRunner’s installation directory

    e) Yes-modify a dft file in LoadRunner’s \dat directory

    f) All of the above

    软件测试专业网站:51Testing软件测试网c.DB"V$O5[
    3. For a host machine in a different domain, you try to monitor PerfMon on it and get an “access denied” message. What might resolve this problem?

    a) Edit a cfy file in the LoadRunner installation directory to update permissions

    b) Edit the registry on the host machine to update permissions by granting READ access toHKEY_LOCAL_MACHINE\Software\Microsoft\WindowsNT\CurrentVersion\Perflib

    c) Ensure the host machine and the controller machine use the same version of WindowsNT

    d) Run the netstat command from the host machine to update permissions

    e) Run the net use command to update permissions

    f) All of the above


    9O[T9[{IG{1568744. If you run tracert and notice significant network delays while running the load test, depending on the network configuration, you could try the following to reduce net-work traffic:

    a) Run PerMon and check network byte transfer rate on the controller machine

    b) Have the network admin increase the physical packet size (MTU)for large data sets since fragments degrade performance

    c) Initialize all vusers before loading them for the test

    d) If the problem is the network, upgrade the NIC

    e) Configure the controller to write run-time data to a shared network drive, rather than to the host machines

    f) None of the above


    +?0V M+M)P4V-Hx1568745. To monitor an Apache server:

    a) You need the correct URL that reports server statistics

    b) You need to monitor through port 80 to accurately measure the end user experience.

    c) You can update the monitor defaults via a .cfg file in LoadRunner’s \monitors folder

    d) You can update the defaults via a dft file in LoadRunner’s\dat directory

    e) You can monitor Apache even if there is a proxy server between the controller and the Apache servers, after updating a LoadRunner .cfg file

    f) All of above


    7I;H C)d2R,]1568746. Choose the true answer(s) from the list below

    a) You can change the agent’s working language from a list of 4 languages

    b) Use path translation where controller and hosts map a different path to a shared drive where scrīpts are stored

    c) You can select to not collate log files after a run

    d) You can set a file transfer trace if you have problems transferring files

    e) Temporary files ate saved during a run: LoadRunner agent files ate stored in Irr folders and controller files ate stored in brr folders

    f) All temporary files are automatically deleted at the end of the run and cannot be automatically saved

    软件测试专业网站:51Testing软件测试网(R_8n:jW:]
    7. Which of the following is true when trouble-shooting the controller’s communication with load generators?

    a) The controller always uses the host machine’s short name so all host machines must be in the same domain as the controller

    b) To ensure the full machine name is used, modify a .ini file in LoadRunner’s \dat directory

    c) An .exe file in LoadRunner’s \bin lets you check that tcp/ip is properly installed on a current machine since tcp/ip problems can prevent load testing

    d) If the controller has multiple IPs, alias the controller’s name on all load generators via their. Hosts file

    e) Path translation is only effective across different OS platforms

    f) All of the above


    2]Y,H8Q#Lu }1568748. When configuring online graphs per load test, you :

    a) Can choose to display the x-axis with or without clock time

    b) Can choose to let LR automatically pick the Y-axis or set s min max value for custom scaling

    c) Can modify line colors, scaling and visibility of measurements on graphs

    d) Can monitor multiple machine on one monitor graph

    e) Cannot monitor multiple machines on multiple monitor graphs

    f) All of above


    ,[O7ID imz/b^1568749. During a scenario run, the default storage location for vuser data is :

    a) The controller’s temporary folder- this is configurable

    b) The controller’s result folder- this is not configurable

    c) The host’s installation folder-this is not configurable

    d) The host’s temporary folder- this is configurable

    e) The controller’s installation folder- this is configurable

    f) None of above

    软件测试专业网站:51Testing软件测试网\0XL0w+Sn:h/H_
    10. New features in LR 7.6 include:

    a) Wan emulator

    b) Multi-protocol support

    c) Remote global performance monitor

    d) MS-Word report generator

    e) EJB analysis – new views

    f) Analysis data import wizard

    g) All of the above

    软件测试专业网站:51Testing软件测试网!} yL#AN@ V7|[0u(C9T6M
    11. Pick the top time transaction(s) for your 3 rd run :

    a) Login

    b) Logout

    c) FlightSearch_roundTrip

    d) FlightSelect_roundTrip

    e) FlightPurchase_roundTrip

    f) FlightSearch _oneWay

    g) FlightSelect_ oneWay

    h) FlightPurchase_oneWay

    i) DeleteItinerary

    j) ViewItineraryh_roundTrip

     

    12. What must happen in order to generate analysis data :

    a) Transactions must be used

    b) Performance monitors must be used

    c) User data points must be defined

    d) Rendezvous functions must be enabled

    e) Online graphs must be viewed


    4z"QI#]6}f(Y L15687413. You can prevent excessive use of disk space for the analysis database by :

    a) Verifying list separator registry options ate the same on your machine as on the database machine

    b) Instructing LoadRunner to save in Access 2000 rather than Access 97

    c) Storing small databases on a SQL server or MSDE machine

    d) Storing large databases on a SQL server or MSDE machine

    e) Clicking a button in the Options>database tab

    软件测试专业网站:51Testing软件测试网F,P7h MO8a6B
    14. If using a time range filter for stored scenario data:

    a) The running vusers graph expands to suit

    b) The processing time decreases

    c) The db size increases to track what is ignored

    d) The db size decreases

    e) This behavīor will be globally applied

    软件测试专业网站:51Testing软件测试网 lRK,}4v:xe}
    15. When saving display options and filters for future reuse, available features include:

    a) Automatically apply this template to a new session

    b) Use automatic granularity

    c) Generate the following automatic HTML report

    d) Automatically save the session as

    e) All of the above

    软件测试专业网站:51Testing软件测试网C uD:@u7z
    16. From recent versions of the analysis tool, you :

    a) Cannot view the controller’s vuser groups information

    b) Can view the controller’s build number

    c) Can view the controller’s scheduling details

    d) Can distinguish between summary and complete analysis data

    e) All of above


    d\UM H$p'DGd15687417. Which of the following customizations can you apply to a subset of graphs?

    a) Can change the title font and text

    b) Cannot change the background/foreground colors or add images unless exported

    c) Can change the depth perception on the graph using an additional dimension

    d) Cannot rotate or tilt

    e) All of the above


    ,g"B,c0s/r%g15687418. To standardize a gragh is to

    a) Focus on behavīor patterns

    b) Cancel axtual vaues

    c) Have y-axis values converge around zero

    d) Plot standard deviation values

    e) None of the above


    %N Ra ] k8Us4l15687419. The Transactions per Second graph helps you to determine load on the system at any given moment

    a) False

    b) True

    软件测试专业网站:51Testing软件测试网:cvY.H+Q8[b'y
    20. The Response Time (under load) graph helps you create a gradual load

    a) False

    b) True

    软件测试专业网站:51Testing软件测试网\JjJm
    21. The graph helps you calculate the time to first buffer.

    a) False

    b) True


    E\(~ ?)B15687422. If you have min and max acceptable transaction times defined, you can use the Distribution graph to determine if server performance is within an acceptable range.

    a) False

    b) True

    软件测试专业网站:51Testing软件测试网"_6UWu3b)QdG\
    23. The auto correlation options include:

    a) Automatic

    b) Correlate data based on X second intervals

    c) Manual

    d) Correlate data based on X minute intervals

    e) None of the above


    7irNF G.J|`m15687424. When tuning a system, web/web-app server metrics to check include:

    a) Browser version

    b) Physical memory

    c) Load balancing algorithm

    d) Images per page

    e) CPU

    软件测试专业网站:51Testing软件测试网N"O N8Y:^g!j
    25. Two examples of common database server problems are:

    a) Corrupt .dll files

    b) Inefficient index design

    c) Fragmented databases

    d) Compacted data

    e) Short transactions

    软件测试专业网站:51Testing软件测试网kq2G"Jh9|bt6u
    26. When making improvements to SSL web application performance, include these steps:

    a) Cache the session identifiers from each transaction

    b) Avoid excessive use of SSL and re-design pages that have low data sensitivity to not use SSL.

    c) Use “keep-alive” enhancement features available with most web browsers

    d) Change level of security according to level of data sensitivity

    e) Use SSL accelerator appliances and cards

    软件测试专业网站:51Testing软件测试网,ekO+{0~(G!g
    27. Network bottlenecks are indicated during a test when you add considerable load but:

    a) Sever-side components are barely affected

    b) Outgoing replied are significantly delayed compared to incoming requests

    c) Receive timeouts only

    d) No idle servers available

    e) All of above


    3I7mz)ui.LE15687428. Load tests and subsequent data analysis are recommended:

    a) During initial load testing of the test system to determine its final state

    b) After tuning the system to ensure previous problems were fixed

    c) During finial load testing of the system to prove new bottlenecks exist

    d) When determining configuration changes to improve response times

    e) When determining architectural changes to improve response times

    软件测试专业网站:51Testing软件测试网/X jq/A@
    29. Available performance reports include:

    a) Detailed Summary

    b) Transaction Performance by Vuser

    c) Detail Transaction

    d) Failed Transactions

    e) All of above


    1n2a-| LS0bBXd7J15687430. Available activity reports include:

    a) Scenario Summary

    b) Failed Transaction

    c) Failed Vuser

    d) Scenario Execution

    e) All of above

    软件测试专业网站:51Testing软件测试网|2}0RD-o A u{
    31. Two prerequisites for merging graphs are:

    a) Both graphs must be identical

    b) The graph should have identical axes

    c) Both graphs should be opened first

    d) Both graphs should share one common axis

    e) None of the above


    $?U})R'P0K U At"@h15687432. Cross-result graphs can be use to:

    a) Check 2 different result files(maximum)

    b) Test software versions

    c) Determine system capacity

    d) Benchmark hardware

    e) All of above

  • 内存分配方式

    2008-03-19 22:25:45

    内存分配方式
    -------------------------------------------------------------------------

    内存分配方式有三种:
    1) 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量static变量。
    2) 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存 分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。
    3) 从堆上分配,亦称动态内存分配。程序在运行的时候用mallocnew申请任意多少的内存,程序员自己负责在何时用freedelete释放内存。动态内存的生存期由我们决定,使用非常灵活,但问题也最多。

    常见的内存错误及其对策

    -------------------------------------------------------------------------

    发生内存错误是件非常麻烦的事情。编译器不能自动发现这些错误,通常是在程序运行时才能捕捉到。而这些错误大多没有明显的症状,时隐时现,增加了改错的难度。有时用户怒气冲冲地把你找来,程序却没有发生任何问题,你一走,错误又发作了。

    常见的内存错误及其对策如下:

    1>内存分配未成功,却使用了它。
    ------------------------------------------
    编程新手常犯这种错误,因为他们没有意识到内存分配会不成功。常用解决办法是,在使用内存之前检 指针是否为NULL。如果指针p是函数的参数,那么在函数的入口处用assert(p!=NULL)进行检查。如果是用mallocnew来申请内存,应该用if(p==NULL) if(p=NULL)进行防错处理。

    2>内存分配虽然成功,但是尚未初始化就引用它
    ------------------------------------------
    犯这种错误主要有两个起因:一是没有初始化的观念;二是误以为内存的缺省初值全为零,导致引用初 错误(例如数组)。
    内存的缺省初值究竟是什么并没有统一的标准,尽管有些时候为零值,我们宁可信其无不可信其有。所 以无论用何种方式创建数组,都别忘了赋初值,即便是赋零值也不可省略,不要嫌麻烦。

    3>内存分配成功并且已经初始化,但操作越过了内存的边界。
    ------------------------------------------
    例如在使用数组时经常发生下标"1"或者"1"的操作。特别是在for循环语句中,循环次数很容易搞错,导致数组操作越界。

    4>忘记了释放内存,造成内存泄露。
    ------------------------------------------
    含有这种错误的函数每被调用一次就丢失一块内存。刚开始时系统的内存充足,你看不到错误。终有一次程序突然死掉,系统出现提示:内存耗尽。动态内存的申请与释放必须配对,程序中mallocfree的使用次数一定要相同,否则肯定有错误(new/delete同理)。

    5>释放了内存却继续使用它。
    ------------------------------------------
    有三种情况:
    1)程序中的对象调用关系过于复杂,实在难以搞清楚某个对象究竟是否已经释放了内存,此时应该重新设计数据结构,从根本上解决对象管理的混乱局面。
    2)函数的return语句写错了,注意不要返回指向"栈内存""指针"或者"引用",因为该内存在函数体结束时被自动销毁。
    3)使用freedelete释放了内存后,没有将指针设置为NULL。导致产生"野指针"

    【规则1】用mallocnew申请内存之后,应该立即检查指针值是否为NULL。防止使用指针值为NULL的内存。
    【规则2】不要忘记为数组和动态内存赋初值。防止将未被初始化的内存作为右值使用。
    【规则3】避免数组或指针的下标越界,特别要当心发生"1"或者"1"操作。
    【规则4】动态内存的申请与释放必须配对,防止内存泄漏。
    【规则5】用freedelete释放了内存之后,立即将指针设置为NULL,防止产生"野指针"

    -------------------------------------------------------------------------

    指针与数组的对比
    C++/C
    程序中,指针和数组在不少地方可以相互替换着用,让人产生一种错觉,以为两者是等价的。
        
    数组
    -------------
    数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变。

    指针
    --------------
    指针可以随时指向任意类型的内存块,它的特征是"可变",所以我们常用指针来操作动态内存。指针远比数组灵活,但也更危险。

    下面以字符串为例比较指针与数组的特性。

    1.修改内容
    ------------------------------------------
    示例1中,字符数组a的容量是6个字符,其内容为hello\0a的内容可以改变,如a[0]= 'X'
    指针p指向常量字符串"world"(位于静态存储区,内容为world\0),常量字符串的内容是不可以被修改的。
    从语法上看,编译器并不觉得语句p[0]= ‘X'有什么不妥,但是该语句企图修改常量字符串的内容而导致运行错误。

    示例7-3-1 修改数组和指针的内容
       ------------------------------
       char a[] = "hello";
       a[0] = 'X';
       cout << a << endl;
       char *p = "world"; //
    注意p指向常量字符串  
       p[0] = 'X'; //
    编译器不能发现该错误
    cout << p << endl;
      

    2.内容复制与比较
    ------------------------------------------
    数组复制
    --------
    不能对数组名进行直接复制与比较。示例2中,若想把数组a的内容复制给数组b,不能用语句 b = a ,否则将产生编译错误。应该用标准库函数strcpy进行复制。同理,比较ba的内容是否相同,不能用if(b==a) 来判断,应该用标准库函数strcmp进行比较。

    指针复制
    --------
    语句p = a 并不能把a的内容复制指针p,而是把a的地址赋给了p。要想复制a的内容,可以先用库函数mallocp申请一块容量为strlen(a)+1个字符的内存,再用strcpy进行字符串复制。同理,语句if(p==a) 比较的不是内容而是地址,应该用库函数strcmp来比较。

    示例2 数组和指针的内容复制与比较
    -----------------------------------
            //
    数组...
    char a[] = "hello";
    char b[10];
    strcpy(b, a); //
    不能用
    b = a;
    if(strcmp(b, a) == 0) //
    不能用
    if (b == a)...
    //
    指针
    ...
    int len = strlen(a);
    char *p = (char *)malloc(sizeof(char)*(len+1));  
    strcpy(p,a); //
    不要用
    p = a;
    if(strcmp(p, a) == 0) //
    不要用 if (p == a)...

    3 计算内存容量
    ------------------------------------------
    数组
    ----
    用运算符sizeof可以计算出数组的容量(字节数)。
    示例3中,sizeof(a)的值是12(注意别忘了'\0')。

    指针
    ----
    指针p指向a,但是sizeof(p)的值却是4。这是因为sizeof(p)得到的是一个指针变量的字节数,
    相当于sizeof(char*),而不是p所指的内存容量。

    C++/C语言没有办法知道指针所指的内存容量,除非在申请内存时记住它。

    注意
    ----
    当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。
    示例3中,不论数组a的容量是多少,sizeof(a)始终等于sizeof(char *)
          
          
    示例3 计算数组和指针的内存容量
    -----------------------------
            char a[] = "hello world";
    char *p = a; cout<< sizeof(a) << endl;// 12
    字节
    cout<< sizeof(p) << endl;// 4
    字节

    示例3b) 数组退化为指针
    -----------------------------
    void Func(char a[100])
    {
    cout<< sizeof(a) << endl;// 4
    字节而不是100字节
       }

    4、指针参数是如何传递内存的?
    ------------------------------------------
    如果函数的参数是一个指针,不要指望用该指针去申请动态内存。
    示例4-1中,Test函数的语句GetMemory(str, 200)并没有使str获得期望的内存,str依旧是NULL,为什么?

    示例4-1 试图用指针参数申请动态内存
    ----------------------------------
    void GetMemory(char *p, int num)
    {
    p = (char *)malloc(sizeof(char) * num);
    }
    void Test(void)
    {
    char *str = NULL;
    GetMemory(str, 100);// str
    仍然为 NULL
    strcpy(str, "hello"); //
    运行错误

    }

    毛病出在函数GetMemory中。编译器总是要为函数的每个参数制作临时副本,
    指针参数p的副本是 _p,编译器使 _p = p。如果函数体内的程序修改了_p的内容,
    就导致参数p的内容作相应的修改。这就是指针可以用作输出参数的原因。
    在本例中,_p申请了新的内存,只是把_p所指的内存地址改变了,但是p丝毫未变。
    所以函数GetMemory并不能输出任何东西。
    事实上,每执行一次GetMemory就会泄露一块内存,因为没有用free释放内存。

    如果非得要用指针参数去申请内存,那么应该改用"指向指针的指针",见示例4-2

    示例4-2用指向指针的指针申请动态内存
    ------------------------------------
    void GetMemory2(char **p, int num)
    {
    *p = (char *)malloc(sizeof(char) * num);
    }
    void Test2(void)
    {
    char *str = NULL;
    GetMemory2(&str, 100); //
    注意参数是 &str,而不是str
    strcpy(str, "hello");
    cout<< str << endl;
    free(str);
    }


    由于"指向指针的指针"这个概念不容易理解,我们可以用函数返回值来传递动态内存。
    这种方法更加简单,见示例4-3

    示例4-3 用函数返回值来传递动态内存
    -----------------------------------
    char *GetMemory3(int num)
    {
    char *p = (char *)malloc(sizeof(char) * num);
    return p;
    }
    void Test3(void)
    {
    char *str = NULL;
    str = GetMemory3(100);
    strcpy(str,"hello");
    cout<< str << endl;
    free(str);
    }


    用函数返回值来传递动态内存这种方法虽然好用,但是常常有人把return语句用错了。这里强调不要用return语句返回指向"栈内存"的指针,因为该内存在函数结束时自动消亡,见示例4-4

    示例4-4 return语句返回指向"栈内存"的指针
    --------------------------------------------
    char *GetString(void)
    {
    char p[] = "hello world";
    return p;//
    编译器将提出警告
    }
    void Test4(void)
    {
    char *str = NULL;str = GetString();// str
    的内容是垃圾
    cout<< str << endl;
    }


    用调试器逐步跟踪Test4,发现执行str = GetString语句后str不再是NULL指针,
    但是str的内容不是"hello world"而是垃圾。

    如果把示例4-4改写成示例4-5,会怎么样?

    示例4-5 return语句返回常量字符串
    -----------------------------------
    char *GetString2(void)
    {
    char *p = "hello world";
    return p;
    }
    void Test5(void)
    {
    char *str = NULL;
    str = GetString2();
    cout<< str << endl;
    }


    函数Test5运行虽然不会出错,但是函数GetString2的设计概念却是错误的。
    因为GetString2内的"hello world"是常量字符串,位于静态存储区,它在程序生命期内恒定不变。
    无论什么时候调用GetString2,它返回的始终是同一个"只读"的内存块。

    5 freedelete把指针怎么啦?
    ------------------------------------------
    别看freedelete的名字恶狠狠的(尤其是delete),
    它们只是把指针所指的内存给释放掉,但并没有把指针本身干掉。
    用调试器跟踪示例5,发现指针pfree以后其地址仍然不变(非NULL),
    只是该地址对应的内存是垃圾,p成了"野指针"
    如果此时不把p设置为NULL,会让人误以为p是个合法的指针。
    如果程序比较长,我们有时记不住p所指的内存是否已经被释放,
    在继续使用p之前,通常会用语句if (p !=NULL)进行防错处理。
    很遗憾,此时if语句起不到防错作用,因为即便p不是NULL指针,
    它也不指向合法的内存块。

    示例5 p成为野指针
    --------------------
    char *p = (char *) malloc(100);
    strcpy(p, "hello");
    free(p);        // p
    所指的内存被释放,但是p所指的地址仍然不变 ...
    if(p != NULL) //
    没有起到防错作用

    {      strcpy(p, "world"); //
    出错
    }

    6 动态内存会被自动释放吗?
    ------------------------------------------
    函数体内的局部变量在函数结束时自动消亡。很多人误以为示例6是正确的。
    理由是p是局部的指针变量,它消亡的时候会让它所指的动态内存一起完蛋。这是错觉!

    示例7-6 试图让动态内存自动释放
    ------------------------------
    void Func(void)
    {
    char *p = (char *) malloc(100); //
    动态内存会自动释放吗?
    }


    我们发现指针有一些"似是而非"的特征:
    ------------------------------------
    1)指针消亡了,并不表示它所指的内存会被自动释放。
    2)内存被释放了,并不表示指针会消亡或者成了NULL指针。
        
    这表明释放内存并不是一件可以草率对待的事。也许有人不服气,
        
    一定要找出可以草率行事的理由:
        
    如果程序终止了运行,一切指针都会消亡,动态内存会被操作系统回收。
        
    既然如此,在程序临终前,就可以不必释放内存、不必将指针设置为NULL了。
        
    终于可以偷懒而不会发生错误了吧?
    想得美。如果别人把那段程序取出来用到其它地方怎么办?

    7 杜绝"野指针"
    ------------------------------------------
    "
    野指针"不是NULL指针,是指向"垃圾"内存的指针。

    人们一般不会错用NULL指针,因为用if语句很容易判断。
    但是"野指针"是很危险的,if语句对它不起作用。

    "野指针"的成因主要有两种:

    1)指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针,
    它的缺省值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,
    要么将指针设置为NULL,要么让它指向合法的内存。例如
    char *p = NULL;
    char *str = (char *) malloc(100);

    2)指针pfree或者delete之后,没有置为NULL,让人误以为p是个合法的指针。参见7.5节。

    3)指针操作超越了变量的作用范围。这种情况让人防不胜防,示例程序如下:
    class A
    {
    public:
    void Func(void){ cout << "Func of class A" << endl;
    }

    void Test(void)
    {
    A *p;
    {
    A a;
    p = &a; //
    注意 a 的生命期

    }
    p->Func();// p
    "野指针"
    }

    函数Test在执行语句p->Func()时,对象a已经消失,而p是指向a的,所以p就成了"野指针"
    但奇怪的是我运行这个程序时居然没有出错,这可能与编译器有关。

    8 有了malloc/free为什么还要new/delete
    ------------------------------------------
    malloc
    freeC++/C语言的标准库函数,new/deleteC++的运算符。
    它们都可用于申请动态内存和释放内存。

    对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。
    对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。
    由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,
    不能够把执行构造函数和析构函数的任务强加于malloc/free

    因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运

    算符delete。注意new/delete不是库函数。
    我们先看一看malloc/freenew/delete如何实现对象的动态内存管理,见示例8

    示例8 malloc/freenew/delete如何实现对象的动态内存管理
    -------------------------------------------------------------
    class Obj
    {
    public :
    Obj(void){ cout << "Initialization" << endl; }
    ~Obj(void){cout << "Destroy" << endl; }
    void Initialize(void){ cout << "Initialization" << endl; }
    void    Destroy(void){ cout << "Destroy" << endl; }
    };
    void UseMallocFree(void)
    {
    Obj *a = (obj *)malloc(sizeof(obj)); //
    申请动态内存
    a->Initialize(); //
    初始化
    a->Destroy(); //
    清除工作
    free(a);//
    释放内存
    }
    void UseNewDelete(void)
    {
    Obj *a = new Obj;//
    申请动态内存并且初始化
    delete a;//
    清除并且释放内存
    }

    Obj的函数Initialize模拟了构造函数的功能,函数Destroy模拟了析构函数的功能。
    函数UseMallocFree中,由于malloc/free不能执行构造函数与析构函数,
    必须调用成员函数InitializeDestroy来完成初始化与清除工作。
    函数UseNewDelete则简单得多。

    所以我们不要企图用malloc/free来完成动态对象的内存管理,应该用new/delete
    由于内部数据类型的"对象"没有构造与析构的过程,对它们而言malloc/freenew/delete是等价的。

    既然new/delete的功能完全覆盖了malloc/free,为什么C++不把malloc/free淘汰出局呢?
    这是因为C++程序经常要调用C函数,而C程序只能用malloc/free管理动态内存。

    如果用free释放"new创建的动态对象",那么该对象因无法执行析构函数而可能导致程序出错。
    如果用delete释放"malloc申请的动态内存",理论上讲程序不会出错,但是该程序的可读性很差。
    所以new/delete必须配对使用,malloc/free也一样。

    9 内存耗尽怎么办?
    ------------------------------------------
    如果在申请动态内存时找不到足够大的内存块mallocnew将返回NULL指针,宣告内存申请失败。
    通常有三种方式处理"内存耗尽"问题。

    1)判断指针是否为NULL,如果是则马上用return语句终止本函数。例如:
    void Func(void)
    {
    A *a = new A;
    if(a == NULL)
    {
       return;
    }
    ...
    }

    2)判断指针是否为NULL,如果是则马上用exit(1)终止整个程序的运行。例如:
    void Func(void)
    {
    A *a = new A;
    if(a == NULL)
    {
       cout << "Memory Exhausted" << endl;
       exit(1);
    }
    ...
    }

    3)为newmalloc设置异常处理函数。

    例如Visual C++可以用_set_new_hander函数为new设置用户自己定义的异常处理函数,
    也可以让malloc享用与new相同的异常处理函数。详细内容请参考C++使用手册。

    上述(1)(2)方式使用最普遍。如果一个函数内有多处需要申请动态内存,
    那么方式(1)就显得力不从心(释放内存很麻烦),应该用方式(2)来处理。

    很多人不忍心用exit(1),问:"不编写出错处理程序,让操作系统自己解决行不行?"
    不行。如果发生"内存耗尽"这样的事情,一般说来应用程序已经无药可救。

    如果不用exit(1) 把坏程序杀死,它可能会害死操作系统。
    道理如同:如果不把歹徒击毙,歹徒在老死之前会犯下更多的罪。

    有一个很重要的现象要告诉大家。对于32位以上的应用程序而言
    ,无论怎样使用mallocnew,几乎不可能导致"内存耗尽"
    我在Windows 98下用Visual C++编写了测试程序,见示例9
    这个程序会无休止地运行下去,根本不会终止。
    因为32位操作系统支持"虚存",内存用完了,自动用硬盘空间顶替。
    我只听到硬盘嘎吱嘎吱地响,Window 98已经累得对键盘、鼠标毫无反应。

    我可以得出这么一个结论:对于32位以上的应用程序,"内存耗尽"错误处理程序毫无用处。这下可把UnixWindows程序员们乐坏了:反正错误处理程序不起作用,我就不写了,省了很多麻烦。

    我不想误导读者,必须强调:不加错误处理将导致程序的质量很差,千万不可因小失大。

    示例9试图耗尽操作系统的内存
    void main(void)
    {
       float *p = NULL;
       while(TRUE)
       {
        p = new float[1000000];
        cout << "eat memory" << endl;
        if(p==NULL) exit(1);
       }
    }

    10 malloc/free 的使用要点
    ------------------------------------------
    函数malloc的原型如下:
    void * malloc(size_t size);
    malloc申请一块长度为length的整数类型的内存,程序如下:
    int *p = (int *) malloc(sizeof(int) * length);
    我们应当把注意力集中在两个要素上:"类型转换""sizeof"
    malloc
    返回值的类型是void *,所以在调用malloc时要显式地进行类型转换,
    void * 转换成所需要的指针类型。
    malloc
    函数本身并不识别要申请的内存是什么类型,它只关心内存的总字节数。
    我们通常记不住int,float等数据类型的变量的确切字节数。例如int变量在16位系统下是2个字节
    ,在32位下是4个字节;而float变量在16位系统下是4个字节,在32位下也是4个字节。

    最好用以下程序作一次测试:
    cout << sizeof(char) << endl;
    cout << sizeof(int) << endl;
    cout << sizeof(unsigned int) << endl;
    cout << sizeof(long) << endl;
    cout << sizeof(unsigned long) << endl;
    cout << sizeof(float) << endl;
    cout << sizeof(double) << endl;
    cout << sizeof(void *) << endl;

    malloc"()"中使用sizeof运算符是良好的风格,但要当心有时我们会昏了头,写出 p = malloc(sizeof(p))这样的程序来。

    函数free的原型如下:

    void free( void * memblock );

    为什么free函数不象malloc函数那样复杂呢?这是因为指针p的类型以及它所指的内存的容量事先都是知道的,语句free(p)能正确地释放内存。如果pNULL指针,那么freep无论操作多少次都不会出问题。

    如果p不是NULL指针,那么freep连续操作两次就会导致程序运行错误。

    11 new/delete 的使用要点
    ------------------------------------------
    运算符new使用起来要比函数malloc简单得多,例如:
    int *p1 = (int *)malloc(sizeof(int) * length);
    int *p2 = new int[length];
    这是因为new内置了sizeof、类型转换和类型安全检查功能。对于非内部数据类型的对象而言,
    new
    在创建动态对象的同时完成了初始化工作。
    如果对象有多个构造函数,那么new的语句也可以有多种形式。
    例如
    class Obj
    {
    public :
    Obj(void); //
    无参数的构造函数
    Obj(int x); //
    带一个参数的构造函数
    ...
    }
    void Test(void)
    {
    Obj *a = new Obj;
    Obj *b = new Obj(1); //
    初值为1
    ...
    delete a;
    delete b;
    }
    如果用new创建对象数组,那么只能使用对象的无参数构造函数。例如

    Obj *objects = new Obj[100]; //
    创建100个动态对象
    不能写成
    Obj *objects = new Obj[100](1);//
    创建100个动态对象的同时赋初值1
    在用delete释放对象数组时,留意不要丢了符号‘[]'。例如

    delete []objects; //
    正确的用法
    delete objects; //
    错误的用法
    后者相当于delete objects[0],漏掉了另外99个对象。

     

  • QTP

    2008-03-13 12:55:16

    Mercury QuickTest Professional 8.2 自述文件

    本文件提供有关 QuickTest Professional 的下列信息:

    概述

    欢迎使用 QuickTest Professional - Mercury 关键字驱动的自动测试解决方案。通过监视最终用户行为,QuickTest Professional 创建交互式可自定义测试或组件,从而简化并缩短测试周期。

    通过 QuickTest Professional,可以测试标准 Windows 应用程序、Web 对象、ActiveX 控件和 Visual Basic 应用程序。还可以获得适用于许多特殊环境的其他 QuickTest 加载项,例如 Java、Oracle、SAP 解决方案、.NET Windows 以及 Web Forms、Siebel、PeopleSoft 和终端仿真器应用程序。

    QuickTest Professional 兼容 Unicode,支持 Unicode 2.0、UTF-8 和 UTF-16。

    QuickTest Professional 支持运行 WinRunner 7.6 及更高版本的 WinRunner 测试和函数。

    对于测试管理,QuickTest Professional 可以与 Mercury 集中质量解决方案 Quality Center(原为 TestDirector)集成,适用于 TestDirector 7.6 Service Pack 4、TestDirector 8.0 Service Pack 2 和 Quality Center 8.2 版。

    对于 Business Process Testing,QuickTest Professional 可以与 Quality Center 8.2 版(带有支持 Business Process Testing 的许可证)集成。

    QuickTest Professional 可以与 LoadRunner 集成,后者是用于应用程序性能测试的 Mercury 工具(用于版本 7.8、7.81 (FP1) 和 8.0)。

    QuickTest Professional 还可以与 Mercury 应用程序管理(原为 Topaz)集成,后者是用于优化业务可用性和问题解析的 Mercury 解决方案。

    新增功能

    QuickTest Professional 8.2 包含下列新增功能:

    • 新的业务组件关键字视图,有助于在自编文档表格用户界面中快速便捷地设计组件,而无需编程知识。在外观和功能上,业务组件关键字视图类似于 Quality Center 的业务组件模块中的“步骤”选项卡。这使得 QuickTest 用户和 Quality Center 用户可以看到相同的组件内容。
    • 新的函数定义生成器,通过该生成器,可以快速编写和注册用户为测试和组件定义的新函数。
    • 关键字视图中新的“仅文档”选项,通过该选项,可以查看和打印测试或组件的自动文档信息。例如,您可能希望查看和打印“文档”列中显示的步骤描述,以便作为手动测试的说明。
    • QuickTest 提供了一种新的参数类型,即局部参数。使用局部参数,可以对步骤的输入值进行参数化,或者将运行时值输出到一个参数。局部参数只能由当前业务组件进行访问。
    • 现在可以创建多个应用程序区域,并针对应用程序的各个部分使用不同的应用程序区域。每个应用程序区域指定某个组件可使用的资源和设置。
    • QuickTest 提供了一组预定义的资源文件,您可以将其与一个应用程序区域或特定组件相关联,以便获得其他功能。

    在新增功能帮助(从“帮助”>“QuickTest 的新增功能”获得)中,可以找到有关上述功能的其他信息及更多功能。

    客户支持

    通过我们屡获殊荣的客户支持网站为 QuickTest Professional 提供技术支持。客户可以从该网站查阅常见问题、提交并检查支持请求的状态,以及访问联机文档、修补程序和其他下载内容。请访问客户支持网站:

    http://support.mercury.com

    可以从以下网址找到世界各地的客户支持联系电话号码:

    http://support.mercury.com/cgi-bin/portal/CSO/contacts.jsp

    系统要求

    要成功安装并运行 QuickTest Professional,您需要满足以下最低系统要求:
    jszB%kq3W5L156874
    .H8Bhvz$C156874

    计算机/处理器:
    IBM-PC 或与 Pentium III 微处理器兼容的计算机。
    Windows 2000 Service Pack 3 或 Service Pack 4、Windows XP Service Pack 1 或 Service Pack 2 或者 Windows 2003 Server。
    注意:仅当未激活执行保护机制(也称为 DEP - 数据执行保护和 NX - 不执行)时,才能在 Windows XP Service Pack 2 上支持 QuickTest Professional。
    内存:
    256 MB RAM。
    可用硬盘空间:
    250 MB 可用磁盘空间用于应用程序文件和文件夹,另外在系统盘(安装操作系统的磁盘)上需要 120 MB 可用磁盘空间。安装 QuickTest Professional 后,建议系统盘中至少留有 150 MB 可用磁盘空间,以便操作系统和 QuickTest Professional 可以正确运行。
    浏览器:
    Microsoft Internet Explorer 5.5 Service Pack 2 - 6.0。软件测试专业网站:51Testing软件测试网&f h)p \5~Z)s
    有关其他支持的浏览器的信息,请参阅支持的环境和程序

    注意: 尚未为“最低”系统配置优化性能。要获得最佳性能,您的系统应该至少按“建议”级别进行配置。

    支持的加载项

    除了所有 8.2 版加载项,您还可以将下列特定的加载项版本用于 QuickTest Professional 8.2:

    • QuickTest Professional Java 6.5 加载项
    • QuickTest Professional Oracle 6.5 加载项
    • QuickTest Professional Siebel 8.0 加载项
    • QuickTest Professional Terminal Emulator 8.0 加载项
    • 注意: 除以上专门列出的加载项外,您不能将任何低于 8.2 版的加载项用于 QuickTest Professional 8.2。

    有关详细信息和说明,请参阅《Mercury QuickTest Professional 安装指南》。

    支持的环境和程序

    QuickTest Professional 支持使用下面描述的环境和程序来创建、录制和运行测试或组件。

    标准 Windows 应用程序

    QuickTest Professional 支持在基于 Windows API 和 MFC 的应用程序上进行测试。

    Visual Basic 应用程序

    QuickTest Professional 支持在 Visual Basic 6.0 应用程序上进行测试。

    注意: QuickTest Professional .NET 加载项支持 Visual Basic .NET 应用程序。

    浏览器

    • Microsoft Internet Explorer 5.5 Service Pack 2 - 6.0(必需)
    • Netscape 6.1、Netscape 6.22、Netscape 6.23、Netscape 7.02 和 Netscape 7.1(可选)
    • AOL 8.0 和 9.0(可选)

    ActiveX 网格控件

    除了对 ActiveX 属性和方法的基本支持外,QuickTest Professional 还支持在下列 ActiveX 网格控件上进行上下文相关录制和验证:
    Y^.j{_} v'VP%aP156874
    "WvKYK^ i@W156874

    名称
    ProgId
    FarPoint Spreadsheet 2.5
    FPSpread.Spread.1
    FarPoint Spreadsheet 3.0
    FPSpread.Spread.2
    FarPoint Spreadsheet 3.5
    FPSpread.Spread.3
    FarPoint Spreadsheet 6.0
    FPSpread.Spread.4
    FarPoint Spreadsheet 3.0 (OLEDB)
    FPSpreadADO.fpSpread.2
    FarPoint Spreadsheet 3.5 (OLEDB)
    FPSpreadADO.fpSpread.3
    FarPoint Spreadsheet 6 (OLEDB)
    FPSpreadADO.fpSpread.4
    Microsoft Grid 1.0
    MSGrid.Grid
    Microsoft DataBound Grid 5.0
    MSDBGrid.DBGrid
    Microsoft Flex Grid 6.0
    MSFlexGridLib.MSFlexGrid.1
    Sheridan Data Grid 2.0
    SSDataWidgets.SSDBGridCtrlApt.1
    Sheridan Data Grid 3.1
    SSDataWidgets.SSDBGridCtrlApt.3
    Apex True DataBound Grid 5.0
    TrueDBGrid50.TDBGrid
    Apex True DataBound Grid 6.0
    TrueDBGrid60.TDBGrid
    Apex True OLE DB Grid 6.0
    TrueOleDBGrid60.TDBGrid

    ActiveX 日历控件

    除了对 ActiveX 属性和方法的固有支持外,QuickTest Professional 还支持在下列 ActiveX 日历控件上进行上下文相关录制和验证:软件测试专业网站:51Testing软件测试网d \@@f Z-Q u"W7PA#O
    软件测试专业网站:51Testing软件测试网 z;n!@~e

    名称
    ProgId
    Microsoft Date and Time Picker Control 6.0 (SP4)
    MSComCtl2.DTPicker.2
    Microsoft MonthView Control 6.0 (SP4)
    MSComCtl2.MonthView.2

    Microsoft Excel

    在 QuickTest Professional 中使用 Microsoft Excel 文件(例如,向数据表导入数据或从数据表导出数据)时,可以使用 Microsoft Excel 2000、2002、2003 和 XP。

    Microsoft Query

    在 QuickTest Professional 中使用 Microsoft Query(例如,用于数据库检查点)时,可以使用 Microsoft Query 2000、2002、2003 和 XP。

    其他环境

    QuickTest Professional 加载项支持其他环境,例如 Java、.NET Windows 以及 Web Forms、SAP 解决方案、Oracle、Siebel、PeopleSoft、Web 服务和终端仿真器应用程序。有关 QuickTest Professional 加载项的详细信息,请与您的销售代表或 Mercury Interactive 客户支持联系。

    有用的信息

    • 要安装 QuickTest Professional,您必须使用管理员权限登录。
    • 要使用 QuickTest Professional 的调试功能,您必须安装 Microsoft 脚本调试程序。脚本调试程序可以在安装 QuickTest Professional 的过程中安装,也可以以后从 Microsoft 的 Windows 脚本技术站点下载:http://msdn.microsoft.com/library/default.asp?url=/downloads/list/webdev.asp。还可以使用“添加/删除程序”窗口中的“添加/删除 Windows 组件”选项进行安装。
    • QuickTest Professional 8.2 中不支持多媒体加载项。
    • 如果您的网站或应用程序中的某些对象属性值是为指定类型的所有对象动态生成的,则可以创建一个属性模式配置文件,用于指示 QuickTest Professional 自动将该对象属性录制为正则表达式。有关如何使用属性模式功能的详细说明,请参阅 <QuickTest Professional 安装目录>\help 文件夹中的 PropPattern.htm
    • 使用 QuickTest Professional 时,有几种方法可以改进性能并减少磁盘使用空间。有关详细信息,请参阅《Mercury QuickTest Professional 用户指南》。
    • 有关 QuickTest Professional 的详细信息:
      • 有关重要的安装信息和逐步安装说明,请参阅《Mercury QuickTest Professional 安装指南》。您的 CD-ROM 的根文件夹中提供有 PDF 格式的《Mercury QuickTest Professional 安装指南》。安装 QuickTest 后,您还可以在 <QuickTest Professional\help> 文件夹中找到该指南。
      • 如果是第一次使用 QuickTest Professional,请使用“QuickTest Professional 教程”(“帮助”>“QuickTest Professional 教程”),了解如何使用最常用的功能。
      • 有关该版本 QuickTest Professional 中的新增功能和支持的环境的信息,请参阅“QuickTest 新增功能”文档(“帮助”>“QuickTest 新增功能”)。
      • 有关 QuickTest Professional 的详细信息,请参阅《Mercury QuickTest Professional 用户指南》和《Mercury QuickTest Professional 对象模型参考》。从“帮助”菜单(“帮助”>“QuickTest Professional 帮助”)中使用索引和文本组合搜索可以找到上述帮助资源,以及“Microsoft VBscrīpt 参考”。<QuickTest Professional 安装目录>\help 文件夹中也提供有 PDF 格式的《Mercury QuickTest Professional 用户指南》。
      • 《Mercury QuickTest Professional 自动化对象模型参考》(可以从 QuickTest Professional“开始”菜单的程序文件夹以及 QuickTest Professional“帮助”菜单中获得)提供了有关自动化对象、方法和属性的语法、描述性信息及示例。其中还包括帮助用户可对编写 QuickTest 自动化脚本入门的详细描述。
      • 注意: 要打开适用于打印机(PDF 格式)的版本的 QuickTest Professional 文档,必须在您的计算机上安装 Adobe® Reader®。您可以从以下网址下载 Adobe Reader:www.adobe.com

    已知问题和局限性

    安装

    • QuickTest Professional 和/或外部加载项的安装文件所在的路径,以及 QuickTest Professional 和/或外部加载项的安装路径,只能包含英文字符。
    • 安装 QuickTest Professional 6.0 或更高版本时,您可以继续使用当前的单机许可证或并发许可证。但是,如果要使用可用于 Mercury Functional Testing 并发许可证服务器 7.6 版或更高版本的新的通勤者许可证功能,则必须在并发许可证服务器上安装新的许可证。要获得新的许可证,请与 Mercury Interactive 客户支持联系。
    • Mercury Functional Testing 并发许可证服务器不支持使用网络地址转换 (NAT)。
    • 如果某个以前版本的 QuickTest Professional 使用的是演示许可证,并且该许可证已经过期,同时又没有为它安装常规许可证,则您无法使用其演示许可证安装 QuickTest Professional 8.2。
    • 安装 QuickTest Professional 之前,必须安装 Microsoft Internet Explorer 5.5 Service Pack 2 或更高版本。
    • 使用永久许可证安装了 QuickTest Professional 后,您不能使用演示许可证来安装 QuickTest Professional 加载项。
    • 解决方法: 安装用于该加载项的永久许可证。

    • 如果 LSHOST 变量已设置为另一个域中的服务器,则服务器实用程序 lsmon.exe 可能工作不正常。
    • 并发许可证不包括演示许可证,如果未安装 Mercury Functional Testing 并发许可证服务器和许可证代码,则不能使用。
    • 以标准用户身份登录计算机时,您不能将许可证类型从单机更改为并发,也不能从并发更改为单机。
    • 解决方法: 要更改许可证类型,请以具有管理员权限的用户身份登录计算机。

    • 使用活动的演示许可证从 QuickTest Professional 6.5 升级可能会导致在 QuickTest 启动时打开许可证警告。
    • 解决方法:在安装 QuickTest Professional 8.2 之前删除 lservrc 文件。

    • 卸载 QuickTest Professional Floating License Server 版本 6.0 可能会导致 QuickTest 在启动时无法检索许可证。
    • 解决方法:在卸载 QuickTest Professional Floating License Server 版本 6.0 之前备份 lservrc 文件,然后将该文件复制到新的安装路径,或者在安装许可证服务器后重新安装许可证字符串。

    • 如果您的计算机中有版本 6.0.0.8169 的 Pdm.dll,则建议您从以下网址安装更新的版本:http://support.microsoft.com/support/kb/articles/Q293/6/23.ASP。安装过程中将识别该版本,并且 QuickTest Professional 将指示您从 Microsoft 站点下载已更正的 DLL。
    • 如果在还装有 Microsoft HTML Help Workshop 的计算机上安装 QuickTest Professional,则试图在 Microsoft HTML Help Workshop 中编译帮助项目时,您将收到以下错误消息:文件 itircl.dll 尚未正确注册。
    • 解决方法:在您的系统中(\windows\system \winnt\system32 目录下)查找 itcc.dll。如果找到它,请使用 regsvr32.exe 对其进行注册。如果 itcc.dll 根本不在您的系统中,则可以从以下网址下载一个副本:http://www.mvps.org/htmlhelpcenter/htmlhelp/hhtips.html#hhc6003。再次使用 HTML Help Workshop 之前,可能需要重新启动计算机。

    • 在 Windows 2003 中卸载 QuickTest Professional 时,卸载程序可能会在“正在删除备份文件”阶段停止响应。
    • 解决方法:从 Windows 任务管理器终止 msiexec.exeIkernel.exe 进程,并重新启动您的计算机。如果是在安装过程中发生该问题,请从 Windows 任务管理器终止 msiexec.exeIkernel.exe 进程,然后重新运行安装程序。

    • 在 Windows 2003 中卸载 QuickTest Professional 时,卸载程序不会成功完成,同时指示卸载进程无法完成,应手动卸载 QuickTest Professional。此种情况的发生是由于 InstallShield Developer 8.02 中引入的错误导致的。有关详细信息,请参阅 http://support.installshield.com/kb/view.asp?articleid=Q111000
    • 解决方法:执行卸载后,手动删除 QuickTest Professional 安装文件夹中剩余的任何文件。

    • 如果您有外部 6.5.x 加载项,而该加载项是直接在 QuickTest Professional 8.0.x 或更高版本上安装的(以前未在 QuickTest Professional 6.5.x 上安装过),则卸载程序无法卸载这些加载项。
    • 解决方法:执行卸载后,手动删除 QuickTest Professional 安装文件夹中剩余的任何文件。

    • 在 Windows 2000 中安装 QuickTest Professional 时,如果 C: 驱动器具有超过 16 GB 的可用磁盘空间,则会显示以下警告:
    • Microsoft Data Access Components 2.5
      l_+C+EiY.e*K9E7e)H:M156874要安装该程序,需要在驱动器 C: 上具有 20000 KB 磁盘空间。建议您释放所需的磁盘空间,然后继续。 软件测试专业网站:51Testing软件测试网B4^,MN*w7X6\^6R
      是否仍要继续?

      解决方法:单击“是”并继续安装过程。

    向前兼容性

    • 如果您在 QuickTest Professional 6.5 或更低版本中创建了一个测试,然后在 QuickTest Professional 8.2 中将其打开并保存,则不能重新在 QuickTest Professional 6.5 或更低版本中打开它。

    录制和运行测试或组件

    • 在“录制和运行设置”对话框的“Web”选项卡中选择了“在任何打开的 Web 浏览器上录制和运行测试”时,必须在打开 QuickTest Professional 之后打开浏览器。否则,QuickTest 将无法正确地录制和运行测试。
    • QuickTest Professional 不支持录制 Web (HTML) 对象上的拖放操作。
    • QuickTest Professional 使用 Microsoft 正则表达式,在 Microsoft 正则表达式中,字符 . 代表除 \n 以外的任何字符。在较旧版本的 QuickTest Professional 中,该字符代表任意字符。
    • 解决方法:. 字符更改为 [.\n]

    • 在步骤生成器中,如果将焦点放在一个或多个可选方法参数的单元格上(单击该单元格)但不输入值,步骤生成器会将该单元格的内容视为包含空字符串(非空),因而将它们视为强制值。如果发生此情况,将显示一个消息,提示您使用自动完成选项输入默认值或手动输入有效值。无法单击该消息中的“是”选择自动完成选项。
    • 解决方法:单击该消息中的“否”手动输入可选参数的值,或单击“取消”关闭步骤生成器,然后重新打开步骤生成器,输入不带可选参数的语句。

    • 在步骤生成器中,如果您添加了在测试中返回对象和分配的方法,或者组件缺少 Set 语句,则运行会话将失败。
    • 在数据表中选择一个单元格或一行,然后按键盘上的 Ctrl+X 或 Delete 键,将删除选定单元格或行中的数据,但不会删除实际的单元格或行。这样,如果您使用这些快捷键之一删除数据表中的数据时,QuickTest 将仍对该行运行一次循环。
    • 解决方法:要从数据表中删除整个单元格或行,请选中它并从上下文菜单中选择“删除”,或者按键盘上的 Ctrl+K。

    • 如果您导入包含组合框、列表单元格、条件格式或其他特殊单元格格式的 Microsoft Excel 表,将不会导入格式,并且单元格在数据表中显示时带有固定值。
    • 处理数据表时,可以启动 Formula One Designer。该实用程序是外部第三方实用程序,QuickTest 不支持。
    • 如果 Active Screen 在网页中显示 Java applet 或 ActiveX 控件,则该 applet 或控件仅用于进行查看,您无法对对象执行操作(例如,创建检查点、添加方法等等)。
    • 解决方法:录制 Java applet/ActiveX 控件中的操作,使用加载的 ActiveX 加载项和/或 Java 加载项(可以单独使用)在对象上创建一个步骤。然后可以从 Active Screen 中单独的 Java applet/ActiveX 控件创建检查点、参数化步骤或添加方法。

    • 相对屏幕进行模拟录制时,相应的 Active Screen 不会显示以前执行过的模拟步骤的结果。
    • 您只能为 QuickTest Professional 在其上录制 ClickDoubleClick 方法的对象创建虚拟对象。
    • 如果在只是部分可见的对象(即,对象的一部分显示在屏幕以外)上插入位图检查点,QuickTest Professional 将仅捕获该对象的可见部分。
    • 从数据表返回的值始终转换为字符串。
    • 解决方法:使用 VBscrīpt 转换函数,例如 CIntCLngCDbl 等等。例如,Window("Flight Reservation").WinComboBox("Fly From:").Select CInt(DataTable("ItemNumber", dtGlobalSheet))

    • Exist 方法的 Timeout 参数的行为,在 QuickTest 6.5 版和 8.x 版之间有所改动。在 8.x 版中,其行为如下:
      • 如果指定了超时值,则 QuickTest 将等待,直至找到对象或到达超时设置。
      • 如果指定了值 0,则该方法将立即返回 True 或 False 值。
      • 对于测试,如果未指定值,则将使用在“测试设置”对话框中为“对象同步超时”指定的值。对于组件,将使用默认设置 20 秒。
      • 要恢复为 6.5 版的默认行为(默认超时为 0),请执行下列操作:

      • 为所有 Exist 语句的超时参数添加 0 值。
      • 使用库文件中的 RegisterUserFunc 语句,将 Exist 的行为修改为等于 Exist(0),然后将该库文件与所有相关测试相关联。
      • 注意: 建议您不要将“对象同步超时”设置为 0,因为这会使 QuickTest 无法识别那些需花费时间进行加载的对象。此外,还有将“对象同步超时”用作默认值的其他方法,如 WaitPropertySync

    • 测试、组件和操作参数的名称都区分大小写。
    • 如果创建包含虚拟对象的测试或组件,并且使用不同的屏幕分辨率设置运行它,则虚拟对象上的操作可能无法正确执行。
    • 如果在“选项”对话框的“运行”选项卡中为“将步骤屏幕捕获内容保存到结果中”选项选择“出错时”,则对于不是基于 Web 的应用程序,不会将屏幕捕获内容(包括错误)保存到结果。
    • 解决方法:测试标准 Windows 应用程序时,为“将步骤屏幕捕获内容保存到结果中”选项选择“出错和警告时”。

    • 从 Quality Center 测试集运行 QuickTest 测试时,或使用 QuickTest 自动操作时,将忽略“运行会话期间发生错误时”设置(“测试”>“设置”>“运行”选项卡)。而是,在发生错误时,QuickTest 将自动继续下一步骤。如果要更改此设置,请与 Mercury 客户支持联系,以便获得更多信息。
    • QuickTest 不会录制从“开始”菜单启动 Windows 帮助的过程。
    • 如果在录制过程中窗口标题发生了变化,则运行测试或组件时,QuickTest 可能会无法识别该窗口中的对象。
    • 解决方法:从“对象库”对话框的该窗口中的测试对象描述中删除文本属性。

    • 在录制时插入的检查点中的 Focused 属性的值将始终为 False。
    • 解决方法:手动更改该属性的值或者对测试或组件执行更新运行操作。

    • 运行会话中的错误将导致结果中产生多个错误节点。
    • 测试或组件中不能使用在库文件中定义的 VBscrīpt 类。
    • 对于 WinComboBox、WinList、WinListView、VbComboBox、VbList 和 VbListView 测试对象,GetItemProperty 方法可能无法正确地返回文本属性值。
    • 解决方法:使用 GetItem 方法为这些测试对象检索文本属性值。

    • 如果某个测试或组件包含一个 For Each 语句,该语句对 ParameterDefinitions 集合运行循环,则如果该集合是在使用 For Each 语句之前直接检索的,运行该测试或组件可能会失败。
    • 解决方法:使用其他 VBscrīpt 循环语句,例如 ForWhile

    • 在 QuickTest 6.0 和更低版本中,分配给测试对象的名称(以前称为逻辑名称)是区分大小写的。如果在 QuickTest 8.2 中打开测试或组件,而该测试或组件的对象库是在这些版本之一中创建的,并且包含两个相同(大小写除外)的名称,则 QuickTest 会自动使用在测试、操作或组件中的对象库中都是唯一的名称来替换它们。
    • 关键字视图经过像素化处理,难以读取颜色设置小于 256 色的内容。
    • 解决方法:将颜色设置至少增大为 256 色。

    • 如果将焦点更改到关键字视图的“操作”列中的单元格,则不显示工具提示。
    • 如果使用指向手机制,QuickTest 不会在以下场景中自动最小化:使用的是 Windows XP Service Pack 2,且在 Windows XP“显示属性”对话框的“外观”选项卡中选择了“Windows XP 样式”,同时 QuickTest 处于最大化状态。
    • 解决方法:将 Windows XP 显示样式更改为“Windows 经典”,或者在使用指向手机制之前不最大化 QuickTest。如果已在上述场景中选择了指向手,则可以使用 Alt+Tab 显示所需应用程序,或使用 Ctrl 键在更改窗口焦点时暂时禁用指向手机制。

    • 如果运行具有大量循环和业务组件的业务流程测试,则可能会在若干时间后遇到内存可用性问题。
    • 解决方法:使用“远程代理设置”对话框(“开始”>“程序”>“QuickTest Professional”>“工具”>“远程代理”)中的“__ 次运行后重新启动测试工具”选项计算正在运行的业务组件数,并在通过定义的阈值后于第一个业务流程测试循环的结尾自动重新启动 QuickTest。

    • Quality Center 中组件的完整路径(例如,Components/CompFolder1/MyComponent)不能超过 225 个字符。
    • 使用 Business Process Testing 时,不应在同一台计算机上同时在 Quality Center 和 QuickTest Professional 中使用同一个业务组件。这样做可能会损坏该业务组件。

    在 Web 对象上录制和运行测试及组件

    • 如果录制在图像映射(未映射到 Internet Explorer 中的 URL)区域中的单击,则 QuickTest Professional 将在运行会话过程中在该映射的第一个映射区域中执行单击。
    • QuickTest Professional 仅录制 <input type="file"> 标记上的编辑字段中的更改。不会录制浏览操作。
    • 页面的源/HTML 标记上的检查点不能从 Active Screen 插入,而是必须在录制过程中插入。第一次运行会话时,这些检查点可能会失败。
    • 解决方法:在运行包含页的源/HTML 标记检查点的测试或组件之前,对该测试或组件执行更新运行(“测试”>“更新运行”或“组件”>“更新运行”)。

    • 单击类型为 POST 的表单标记可能运行不正确。
    • 解决方法:如果发生此问题,请在单击“根据鼠标操作运行”之前使用以下语句更改 ReplayType:Setting.WebPackage("ReplayType") = 2。建议在单击步骤之后将回放类型恢复为默认(“根据事件运行”)设置:Setting.WebPackage("ReplayType") = 1

    • QuickTest Professional 不会在 Internet Explorer 浏览器的搜索帧上录制。
    • QuickTest Professional 不会在 Internet Explorer 浏览器的查找窗口中录制。
    • 如果在根据 MouseOver 事件进行更改的图像上执行检查点,验证可能会失败。
    • 解决方法:在“Web 事件录制配置”对话框中启用在 MouseOver 事件上录制,或者将函数插入脚本中。有关 Web 事件录制配置的详细信息,请参阅《Mercury QuickTest Professional 用户指南》。

    • 如果使用 Tab 键在密码字段的“自动完成”对话框中录制,QuickTest Professional 可能无法正确录制。
    • 解决方法:在输入用户名后按 Enter 键或单击用于登录的按钮。

    • 如果在使用包含浏览器控件的应用程序(而不是使用 Web 浏览器)时从 Active Screen 插入检查点,则您的检查点可能会失败。
    • 解决方法:在录制过程中插入检查点。

    在 Netscape 中录制和运行测试或组件
    • QuickTest Professional 不支持 Netscape 6.x 和 7.x 菜单。
    • 在该版本的 QuickTest 中,Netscape 浏览器不支持 Web 对象的 .Object 属性。
    • Netscape 处于最小化模式时,QuickTest Professional 无法在 Netscape 中运行测试或组件。
    • 使用 Netscape 录制测试或组件时,Active Screen 将页面图像显示为页面在加载时被捕获的图像。不会显示对页面所做的更改,例如在编辑框中输入数据。
    • 在录制会话过程中使用 Netscape 浏览器创建表检查点所得到的结果,与在从 Active Screen(作用类似于 Internet Explorer 浏览器)中进行录制后创建表检查点所得到的结果可能不同。
    • 解决方法:如果计划使用 Netscape 运行测试或组件,则在录制的同时在 Netscape 浏览器中创建检查点。如果计划使用 Internet Explorer 运行测试或组件,则在录制的同时在 Internet Explorer 浏览器中创建检查点,或者在录制后使用 Active Screen 创建检查点。

    • QuickTest 可能无法在“激活”窗口(该窗口有时候会在 Netscape 6.x 和 7.x 启动时打开)中录制。
    • 解决方法:在 QuickTest 中启动 Netscape 之前完成激活。

    • 并不会始终为 Netscape 6.x 和 7.x 录制 MouseOver 事件。
    • Netscape 6.x 和 7.x 对话框不显示在 Active Screen 中。
    • QuickTest 仅录制 Netscape 6.x 和 7.x 对话框中的按钮、复选框和编辑框。
    • 解决方法:您可以使用“自定义 Web 事件录制配置”对话框来启用在其他对象上的录制。

    • “对象侦查”和“检查点属性”对话框不会检索 Netscape 6.x 和 7.x 对话框中的编辑框的当前值。
    • 在 Netscape 中以低级录制模式录制的测试或组件不会在 Internet Explorer 浏览器中运行。虽然在两种浏览器中以低级模式录制的测试或组件看起来相似,但对象描述不同,这就限制了测试或组件在作为录制地点的相同浏览器中运行。
    • 以低级模式在 Netscape 6.x 和 7.x 中包含 applet 的页面上录制时,QuickTest 在运行会话过程中可能无法识别该 applet。
    • 解决方法:在运行组件或测试以及测试的每次循环之前,必须关闭 Netscape 浏览器。

    在 AOL 中录制和运行测试或组件
    • 在 AOL 浏览器中录制时,请选择“录制和运行设置”对话框的“Web”选项卡中的“在任何打开的 Web 浏览器上录制和运行测试”选项来录制和运行您的测试。(您无法从 QuickTest Professional 中调用 AOL 浏览器。)
    • 在数据表中输入非常大的数字可能会导致意外行为。

    在标准 Windows 对象上录制和运行测试及组件

    • 在 WinMenu 对象上录制时,不会捕获 Active Screen。
    • 您不能在 WinMenu 对象上插入检查点。
    • 解决方法:使用 GetItemProperty 方法来检索并验证菜单项。

    • 检查点不支持样式为简单组合框的组合框对象。
    • 使用 Windows 徽标快捷键进行录制时,录制可能不精确。
    • 解决方法:录制时使用“开始”菜单而不要使用 Windows 徽标键。

    • 更改 WinCalendar 的样式(例如,从单选更改为多选)将导致运行会话失败。
    • 使用“对象侦查”中的指向手机制指向 MFC 静态文本或选项卡控件时,QuickTest 可能无法返回正确的对象。
    • 解决方法:通过指向对象的父窗口并选择“选定对象及其所有后代”,将该对象添加到对象库中。将对象添加到对象库以后,便可以使用 GetROProperty 方法来检索其运行时属性。例如:软件测试专业网站:51Testing软件测试网P\\pr6x
      width = Dialog("Login").Static("Agent Name:").GetROProperty("width")
      zA+S*Dw;] Q zV156874MsgBox width

    在 Visual Basic 应用程序中录制和运行测试及组件

    • 使用 Visual Basic 加载项时,建议选择“在以下应用程序(会话开始时打开的)上录制并运行”选项,然后在“录制和运行设置”对话框的“Windows 应用程序”选项卡中指定应用程序的名称。
    • 如果选择“在任何打开的基于 Windows 的应用程序上录制并运行测试”选项,则应该在第一次开始录制之后打开 Visual Basic 应用程序。

    • 从 Active Screen 在 VbComboBox 对象上插入检查 sellengthseltext 属性的检查点时,捕获的值可能不正确。
    • 解决方法:手动更新值。

    • 不支持样式为简单组合框的组合框对象。
    • VBLabel 对象不支持文本/文本区检查点和输出值。

    在 ActiveX 控件上录制和运行测试及组件

    • 不支持 Netscape 浏览器中的 ActiveX 对象。
    • 如果 QuickTest Professional 不能识别网页中的 ActiveX 控件,请降低您的 Internet Explorer 浏览器中的安全级别。
    • 如果某个 ActiveX 控件的内部属性具有与由 QuickTest Professional 创建的 ActiveX 属性相同的名称,则检索和验证此类属性会发生问题。
    • 解决方法:您可以使用 Object 属性来访问 ActiveX 控件的内部属性。

    • 从 Active Screen 在 ActiveX 表上插入检查点时,浏览器(或应用程序)必须打开至同一页面(或屏幕)。否则,ActiveX 表中的某些数据将丢失。
    • 解决方法:在录制过程中创建 ActiveX 表检查点。

    • 对 Apex、DataBound 和 Sheridan 网格的行和列位置执行的方法返回可见位置的值,而不是返回表中的绝对位置的值。
    • 解决方法:在录制过程中使用滚动条来显示需要的单元格。

    • QuickTest 可能无法正确捕获无窗口的 ActiveX 控件的某些内部属性,例如 x、y、高和宽。
    • 在 ActiveX 控件上录制时,在移动鼠标之前先等待录制步骤显示。移动鼠标太快可能会导致该步骤的 Active Screen 损坏。
    • 在无窗口的 ActiveX 控件上录制可能导致将某些其他步骤添加到您的测试或组件中(例如,AcxRadioButton 对象上除 Set 方法外,还添加一个 Click 方法)。这些额外步骤不会导致运行会话失败。
    • 不支持无窗口的 ActiveX 控件上的 DragDrop 操作。
    • Microsoft 数据绑定网格控件不支持 AcxTable.RowCount 方法。
    • 表检查点仅捕获数据绑定网格中可见的行。
    • QuickTest 可能无法识别由编程描述标识的无窗口 ActiveX 控件。
    • 解决方法:Windowless=True 添加到编程描述中。

      示例:

      set myButton = Descrīption.Create

      myButton("progid").Value = "Forms.CommandButton.1"

      myButton("Windowless").Value = True

      Dialog("ActiveX Collection Client").AcxButton(myButton).Click

    • 不支持类型为 VT_DISPATCH 的 ActiveX 属性的检查点和输出值。
    • 不支持只写模式的 ActiveX 属性的检查点和输出值。

    文本识别

    • 在运行会话中,QuickTest 文本识别机制可能以不同的方式起作用,具体取决于您使用的操作系统版本、已经安装的 service pack、其他安装的工具包、应用程序中使用的 API 等等。
    • 为避免运行会话失败,强烈建议尽量使用以下方法之一来检查或检索文本:

      • 对于文本检查点 - 创建标准检查点或输出值,并从对话框中选择文本(或等效值)属性,而不是在基于 Windows 的应用程序(标准 Windows、Visual Basic、ActiveX、.NET Windows Forms)和终端仿真器(非 HLLAPI)环境中创建文本(或文本区)检查点或输出值。
      • 对于 GetVisibleText 和 GetTextLocation - 使用 GetROProperty 方法或 Object 属性从应用程序的对象中检索文本(或等效值)属性值,而不是使用 GetVisibleTextGetTextLocation 方法来检索。
      • 有关创建文本检查点和使用 GetROProperty 方法或 Object 属性的详细信息,请参阅《Mercury QuickTest Professional 用户指南》。您也可以在 Mercury 客户支持网站 (http://support.mercury.com) 的联机知识库中找到详细信息。

        如果需要使用 GetVisibleText 和/或 GetTextLocation 方法从对象和/或窗口中检索文本,并且检索功能的效果不能始终如您所愿,则向 Mercury 客户支持网站 (http://support.mercury.com) 提供以下信息:

      • 尝试使用 GetROProperty 方法和/或 Object 属性的结果。
      • 用于将文本写入特定对象或窗口的方法、API 或函数。
      • 用于读取特定对象或窗口中的文本的方法、API 或函数。
      • 您试图从其中检索文本的窗口和/或对象的屏幕捕获。
      • 窗口和/或对象的属性。
      • 实际的应用程序或应用程序示例(如果可能)。
    • 不支持从 Active Screen 添加基于 Windows 的应用程序(标准 Windows、Visual Basic、ActiveX、.NET Windows Forms)的文本检查点和输出值。
    • 仅当您有“创建全局对象”用户权限时,针对 Citrix(终端服务)环境的文本识别才可用。有关详细信息,请参阅 Microsoft 支持网站:http://support.microsoft.com/default.aspx?scid=kb;en-us;821546#5

    对象库

    • 如果要引用网络中的共享对象库文件,则必须映射驱动器并在所引用的路径中使用映射的驱动器。
    • 如果您修改对象库中测试对象的名称,而测试或组件脚本包含一个语法错误,则新名称不会在测试或组件脚本中正确更新。
    • 解决方法:解决语法错误,然后再修改测试对象名称。

    • 如果在 QuickTest 8.0 版及更高版本上安装的是版本 6.5.x 的加载项,则“对象库”对话框中的“突出显示”选项不可用。

    恢复场景管理器

    • 恢复场景管理器用于替代 QuickTest 6.0 及更低版本中的异常编辑器的功能。
    • 异常编辑器中包括的默认 Web 异常在恢复场景管理器中作为默认的恢复场景提供。包含这些默认恢复场景的场景文件位于:<QuickTest 安装路径>\recovery

      这些默认恢复场景自动与在 QuickTest 6.0 及更低版本中创建的测试相关联。此外,会自动启用对应于每次测试中处于活动状态的 Web 异常的恢复场景。

    检查点和输出值

    • 包含超过 64K 数据的检查点可能会运行缓慢。
    XML 检查点
    • 在包含 > 作为值的 XML 文件上执行 XML 检查点时,可能会收到错误消息。
    • 在无法加载或格式不正确的文件上插入 XML 文件检查点时,可能会收到错误消息。
    • 您不能从 Active Screen 插入 XML 检查点。
    • 为较大的 XML 文档创建和运行 XML 检查点可能需要几分钟的时间。
    • QuickTest 6.5 版及更高版本将 XML 检查点信息以新格式保存。如果在 QuickTest 8.2 中使用的是 QuickTest 6.0 测试,则必须执行更新运行,或手动打开每个“XML 检查点属性”对话框并单击“确定”按钮。这会将 XML 检查点信息转换为新格式,并大大改进性能。
    数据库检查点
    • 捕获的值的格式取决于特定的系统设置。例如,日期和时间值可能设置为不同的格式。
    • 解决方法:如果运行测试或组件的系统与用于录制测试或组件的系统不同,请确认两个系统使用相同的格式设置。

    • 如果在一台计算机中创建了数据库检查点,并试图在另一台计算机中运行该检查点,则应该确保两台计算机中安装了相同的 ODBC 驱动程序。
    输出值
    • 如果使用的是 QuickTest Professional 6.0 测试,请注意,QuickTest Professional 8.2 将 XML 输出值信息以新格式保存。执行一次更新运行,或手动打开每个“XML 输出值属性”对话框并单击“确定”按钮。这会将 XML 输出值信息转换为新格式,并大大改进性能。

    文档

    • 对于 QuickTest Professional 8.2,新增功能和增强功能在《Mercury QuickTest Professional 8.2 新功能指南》中进行了描述。所有现有的功能在《Mercury QuickTest Professional 用户指南》8.0.1 版中进行了描述。这两本指南应相互配合使用。
    • 不再提供 PDF 格式的《Mercury QuickTest Professional 对象模型参考》。但是,如果您是在以前版本的基础上安装 QuickTest Professional,则您的 <QuickTest Professional 安装目录>\help 文件夹中可能会留有以前版本的 PDF 格式的《Mercury QuickTest Professional 对象模型参考》。
    • “VBscrīpt 参考”>“VBscrīpt”、“VBscrīpt 参考”>“脚本运行时”和“VBscrīpt 参考”>“Windows 脚本主机”部分下的所有帮助主题都来自 Microsoft。这些帮助文件不是由 Mercury 准备的,Mercury 对其内容概不负责。这些帮助文件直接来自于 Microsoft scrīpt56.chm 帮助文件,该文件可以从 http://msdn.microsoft.com/library/default.asp?url=/downloads/list/webdev.asp 下载。
    • “VBscrīpt 参考”标题下的信息可能包含错误、问题或其他局限性。Mercury 对于“VBscrīpt 参考”标题下的信息的准确性、适合性、可靠性、当前性、完整性、适应性或适用性不作任何承诺。Mercury 对由于使用“VBscrīpt 参考”标题下的帮助文件中的信息而产生的任何损坏(包括时间的损失)概不负责。

    • 如果您计划在 QuickTest Professional 6.0 上安装 QuickTest Professional 8.2,则应该在卸载 QuickTest Professional 6.0 之后,安装 QuickTest Professional 8.2 之前从您的 <QuickTest Professional 安装目录>\help 文件夹中手动删除 Java.chm 文件。否则,QuickTest Professional 帮助的“对象模型参考”部分中将包含一个已过时的 Java 部分。

    Quality Center 集成

    • 使用早于 8.2 版的 Quality Center 服务器时,必须安装 Quality Center 连通性加载项(可从您的 Quality Center 服务器中获得)。
    • 对于测试管理,QuickTest Professional 可以与 Mercury 集中质量解决方案 Quality Center(原为 TestDirector)集成,适用于 TestDirector 7.6 Service Pack 4、TestDirector 8.0 Service Pack 2 和 Quality Center 8.2 版。

    对于 Business Process Testing,QuickTest Professional 可以与 Quality Center 8.2 版(带有支持 Business Process Testing 的许可证)集成。

    • 要从 Quality Center 执行操作(例如运行 QuickTest 测试),您必须具有对 Quality Center 缓存文件夹(位于 Quality Center 客户端中)的写权限。
    • Quality Center 不兼容 Unicode。因此:
      • 处理存储在 Quality Center 中的测试或组件时,不应使用 Unicode 值(例如测试或组件的名称,应用程序区域的名称,测试、操作或组件参数的默认值,方法参数值,等等)。
      • 从 Quality Center 发送到 QuickTest 的数据(例如测试、操作或组件参数的值)不兼容 Unicode。
      • 在 Quality Center 结果网格中,包含 Unicode 字符的 QuickTest 结果可能显示为已损坏。但是,您可以在 QuickTest 测试结果窗口中打开和查看包含 Unicode 字符的结果。
      • Quality Center 测试计划模块中显示的“专家视图”窗格不支持 Unicode 字符。
      • 有关 QuickTest Professional Unicode 问题的其他信息,请参阅下面的多种语言支持

    • 在 Quality Center 中重命名 QuickTest 测试或组件会导致该测试或组件运行不正常。
    • 解决方法:要重命名测试或组件,请在 QuickTest 中打开它,然后使用“另存为”选项对其进行重命名。如果已经在 Quality Center 重命名了测试或组件,则再次使用重

  • 所谓MindMap

    2008-03-06 21:47:12

    原文出处:http://risker.org/tech/FreeMind/

    1. 所谓MindMap

    1.1 MindMap是什么

    MindMap是什么呢?其实是英国人托尼·巴赞创造的一种提出笔记方法,和传统的直线记录方法完全不同,它以直观形象的图示建立起各个概念之间的联系。在国内,MindMap又被称为脑图或思维导图。

    思维导图(Mind Mapping)以放射性思考(Radiant Thinking)为基础的收放自如方式,除了提供一个正确而快速的学习方法与工具外,运用在创意的发想与收敛、项目企划、问题解决与分析、会议管理等方面,往往产生令人惊喜的效果。它是一种展现个人智力潜能极至的方法,将可提升思考技巧,大幅增进记忆力、组织力与创造力。它与传统笔记法和学习法有量子跳跃式的差异。

    1.2 MindMap软件介绍

    其实当前MindMap软件相当多,最为流行的应该这三款:

    对我来说,FreeMind最合适,原因有二:

    • 跨平台,这样无论我在Windows、Debian或者FreeBSD下都可以正常使用;
    • 采用xml保存数据,方便读取或者与其它程序转换;

    功能简洁,却又恰到好处的够用,因此我就选定它了!

    2. 我用FreeMind

    2.1 速读

    通过我的读书笔记可以看出,用FreeMind做记录是非常方便的。

    采用了FreeMind后,我对一些“快餐书籍”的阅读方式是这样的:

    1. 仔细看一遍目录,根据目录先画一张mindmap,基本把握作者的思路;
    2. 进入阅读状态,边读边写写画画,圈出重点,读完一章,便在mindmap中完善一章的内容,如此周而复始;
    3. 看整张mindmap,从整体回顾,找出重点,标记不同的颜色以便今后重点重读,并且结合自己的感觉,填进mindmap中;
    4. 扔开mindmap,闭上眼睛回忆阅读的结果。

    2.2 小项目管理

    FreeMind有个很好的功能是根据目录创建文件,也就是可以根据某个目录下的文件结构来直接生成一个MindMap,这个功能也很诱人,于是我利用它来管理我的小项目。

    首先直接生成一幅MindMap,然后进行部份细节调整和分类,再标出生要等级。当项目中有新任务创建时,就做简单记录。这样就能轻松地将企业内部的项目放在一起全盘考虑和分析了。

    2.3 脑力激荡

    一帮朋友在一起讨论某个创业机会时、几个程序员在商量产品功能特点的时候、企业管理人员聚会研究公司发展战略的时候……或者,仅仅是自己想写一篇文章的时候,比如我现在:)

    FreeMind是否都能助你一臂之力?

    2.4 会议记录

    会议记录这点似乎乏善可陈,谁都能看出用它做会议记录,相对较能抓住所谈事务的主题,并且容易促进与会者的关联分析。

    3. 小技巧

    3.1 快捷键或鼠标

    我常用的快捷键有:

    在下方新增节点 = Enter
    新增子节点 
    = INSERT
    在上方新增节点 
    =Shift+Enter
    查找 
    = Ctrl+F
    编辑 
    = F2
    展开或缩起 
    = Space

    当然,按F3-F9能够给节点设置不同的颜色等等,也是很常用的。另外还有些组合键,如按住Alt键后用鼠标选中根节点,就是全选。按住Ctrl+Shift后用鼠标连接两个节点,便是在节点间创建连接线……快捷键也可以自定义,但通常无须这样做。具体的细节也可以参见帮助文件。

    3.2 在web上发布

    当你精心完成一个MindMap后,是否有希望别人看到的愿望呢?直接通过freemind-browser可以轻松地将Mindmap发表到网站上,并且访问者能够象直接操作程序般对各节点进行展开、关闭等行为。

    只要将freemindbrowser.html中的两部份稍做修改,即标题和具体mm文件的位置,并连同freemindbrowser.jar一起复制到你的web服务器上,用户应该就能够正常浏览了。

    3.3 聪明的复制与粘贴

    FreeMind比其它软件优势的一个地方还在于它智能的复制方式,例如,我可以通过一个有缩进层次关系的txt、html或其它文件复制成很漂亮的MindMap,也能将MindMap直接复制进word、excel甚至outlook中,并保持良好的缩进和层次关系。

    3.4 修改配置文件

    在一份user.properties的文件中,保存着许多可配置的选项,其中仅有几项是通过Edit->Preference可以设定的。这份文件通常在你的~目录下,在windows 2k、xp和2003下,应该在c:\Documents and Settings\(your user name) \freemind\user.properties,如果是Win9x下则在C:\WINDOWS\freemind\user.properties,要判断你的HOME目录,可以直接在cmd窗口输入:echo %HOMEPATH%

    里面的部份格式如下:

     
    ## Experimental features, "true" / "false"
    #experimental_file_locking_on 
    = false
    ##If dnd is enabled. 
    "true" or "false"
    #draganddrop 
    = true
    #
    ##The Modes which Freemind will load on startup, full Class names separated by a comma.
    #modes 
    = freemind.modes.browsemode.BrowseMode,freemind.modes.mindmapmode.MindMapMode,freemind.modes.filemode.FileMode
    ##The initial mode that is loaded on startup
    #initial_mode 
    = MindMap

    并不难理解,就不多做说明了。

    3.5 MindManager数据导出到FreeMind

    身边有很多朋友使用的Mind Map工具是MindManager X5,这毫无疑问是一款杰出的商用软件,但与FreeMind之间的格式却是不相通用的,好在两者都采用xml格式来保存数据,因此数据转换并不困难。

    先用解压缩工具打开MindManager的*.mmap文件--该格式实际上就是将相关信息打包压缩。下图是用winrar打开时的情况,我们可以看到里面有一个Document.xml的文件,这就是MindManager的主文件了。

    采用特定的xslt,比如mm2fm.xslt,再配合xsltproc软件,将Document.xml解压后直接进行处理,便能够轻松地将该xml顺利转成Freemind所能理解的mm格式:

    c:\xsltproc>xsltproc.exe -o ssp2p.mm mm2fm.xslt Document.xml
    c:\xsltproc
    >

    3.6 FreeMind数据保存到MindManager

    因为成功地游说了几个朋友转移到FreeMind上来,因此一般我自己没有这个需求,偶尔要做这种转换时,就投机取巧了一把:

    • 选择File->Export to HTML,将mm导出为html;
    • 用MS Word打开该html文件,并另存为Word的doc格式;
    • 打开MindManager,采用File->Open->Microsoft word document(*.doc,*.dot),选定刚才保存的文件后打开。

    3.7 添加自己的插件

    一个程序如果可定制程度高,当然能让人觉得更加自由。MindManager可以使用vb编写宏,并且直接载入菜单,这方面FreeMind做得如何呢?

    答案是:相当出色,事实上你可以用java或者jython编写插件并加载。

    在windows下,到C:\Program Files\FreeMind\accessories\plugins下创建文件Pyhello.py如下:

    from freemind.extensions import NodeHookAdapter
    import javax.swing 
    as swing

    class Pyhello(NodeHookAdapter):
        def __init__(win):
        win 
    = swing.JFrame("HelloWorld")
        win.size 
    = (200200)
        win.show()

    instance
    =Pyhello()

    这是插件程序本身,唯一的功能就是显示Hello World :)

    创建Pyhello.properties如下:

    documentation=This is a simple Jython scrīpt that tests the node hook possibilites
    #
    # the scrīpt returns an 
    object of this type:
    base=freemind.extensions.NodeHookAdapter
    scrīpt
    =Pyhello.py
    modes
    =freemind.modes.mindmapmode
    documentation
    =welcome to risker.org
    icon
    =accessories/plugins/icons/kcmsystem.png

    这里定义了上面那个程序的位置、运行模式、说明及图标,重新载入FreeMind时,我们可以看到在工具栏上多出一个图标,点击弹出helloworld。

    3.8 数据导出

    当前的最新测试版本是v 0.72,在这个版本中新增了将MindMap导出为图片或xslt文件的插件,不用费劲心机地截屏或者打印了,直接存成图片发送好了。

  • 免费点歌平台

    2008-02-13 19:12:34

  • 关于QC

    2008-01-05 21:34:43

     

     

      一个下午都在研究QC,当然啦,我是研究到现在还没有装起来呀,

    数据库是正确的,登录、联接都是GOOD,可是就联不上QC,烦死我了,也不知道是哪的问题。

    神呀,救救我吧!

  • Database Testing: How to Regression Test a Relational Database(转)

    2007-12-21 23:42:25

    Relational database management systems (RDBMSs) often persist mission-critical data which is updated by many applications and potentially thousands if not millions of end users.  Furthermore, they implement important functionality in the form of database methods (stored procedures, stored functions, and/or triggers) and database objects (e.g. Java or C# instances).  The best way to ensure the continuing quality of these assets, at least from a technical point of view, you should have a full regression test suite which you can run on a regular basis. 

    In this article I argue for a fully automated, continuous regression testing based approach to database testing.  Just as agile software developers take this approach to their application code, we should also do the same for our databases.

     

     

    Table of Contents

    1. Why test an RDBMS?

    2. What should we test?

    3. When should we test?

    4. How should we test?

    5. Who should test?

    6. Introducing database testing into your organization

    7. Database testing and data inspection

    8. Best practices

     

    1. Why Test an RDBMS?

    There are several reasons why you need to develop a comprehensive testing strategy for your RDBMS:

    1. Data is an important corporate asset.  Doesn't it make sense to invest the effort required to validate the quality of data via effective testing?  My July 2006 survey into the current state of data management indicates that 95.7% of respondents believe that data is a corporate asset.  Yet of them only 40.3% had a database test suite in place to validate the data and of those without a test suite only 31.6% had even discussed the concept.

    2. Mission-critical business functionality is implemented in RDBMSs.  In the survey,  63.7% of respondents indicated that their organizations did this, but of those only 46% had regression tests in place to validate the logic. Shouldn't we be doing better?

    3. Current approaches aren't sufficient.  The current state of the art in many organizations is for data professionals to control changes to the database schemas, for developers to visually inspect the database during construction, and to perform some form of formal testing during the test phase at the end of the lifecycle.  Unfortunately, none of these approaches prove effective.  Application developers will often go around their organization's data management group because they find them too difficult to work with, too slow in the way they work, or sometimes they don't even know they should be working together.  The end result is that the teams don't follow the desired data quality procedures and as a result quality suffers.  Although visual inspection of query results is a good start it is little more than a debugging technique in practice that will help you to find problems but not prevent them.  Testing late in the lifecycle is better than nothing, but as Barry Boehm noted in the early 80s it's incredibly expensive to fix any defects you find at that point.

    4. Testing provides the concrete feedback required to identify defects.  How do you know how good the quality of your source data actually is without an effective test suite which you can run whenever you need to?

    5. Support for evolutionary development.  Many evolutionary development techniques, in particular database refactoring, are predicated upon the idea that it must be possible to determine if something in the database has been broken when a change has been made.  The easiest way to do that is to simply run your regression test suite.

     
    Uncomfortable Question:

    Isn't it time that we stopped talking about data quality and actually started doing something about it?

    Here's a few interesting questions to ask someone who isn't convinced that you need to test the DB:

    1. If you're implementing code in the DB in the form of stored procedures, triggers, ... shouldn't you test that code to the same level that you test your app code?
    2. Think of all the data quality problems you've run into over the years. Wouldn't it have been nice if someone had originally tested and discovered those problems before you did?
    3. Wouldn't it be nice to have a test suite to run so that you could determine how (and if) the DB actually works?
       

    I think that one of the reasons that we don't hear much about database testing is because it is a relatively new idea within the data community. Many traditional data professionals seem to think that testing is something that other people do, particularly test/quality assurance professionals, do. This reflects a penchant for over-specialization and a serial approach towards development by traditionalists, two ideas which have also been shown to be questionable organizational approaches at best.

     

    2. What Should We Test?

    Figure 1 indicates what you should consider testing when it comes to relational databases.  The diagram is drawn from the point of view of a single database, the dashed lines indicate threat boundaries, indicating that you need to consider threats both within the database (clear box testing) and at the interface to the database (black box testing).  Table 1 lists the issues which you should consider testing for both internally within the database and at the interface to it.  For details, read the article What To Test in an RDBMS.

     

    Figure 1. What to test.

     

    Table 1.  What to test in an RDBMS.

    Black-Box Testing at the Interface White/Clear-Box Testing Internally Within the Database
    • O/R mappings (including the meta data)
    • Incoming data values
    • Outgoing data values (from queries, stored functions, views ...)
    • Scaffolding code (e.g. triggers or updateable views) which support refactorings
    • Typical unit tests for your stored procedures, functions, and triggers
    • Existence tests for database schema elements (tables, procedures, ...)
    • View definitions
    • Referential integrity (RI) rules
    • Default values for a column
    • Data invariants for a single column
    • Data invariants involving several columns
     

     

    3. When Should We Test?

    Agile software developers take a test-first approach to development where they write a test before you write just enough production code to fulfill that test.  The steps of test first development (TFD) are overviewed in the UML activity diagram of Figure 2.  The first step is to quickly add a test, basically just enough code to fail.  Next you run your tests, often the complete test suite although for sake of speed you may decide to run only a subset, to ensure that the new test does in fact fail.  You then update your functional code to make it pass the new tests.  The fourth step is to run your tests again.  If they fail you need to update your functional code and retest.  Once the tests pass the next step is to start over.

     

    Figure 2. The Process of Test First Development (TFD).

     

    Test-driven development (TDD) is an evolutionary approach to development which combines test-first development and refactoring.  When an agile software developer goes to implement a new feature, the first question they ask themselves is "Is this the best design possible which enables me to add this feature?"  If the answer is yes, then they do the work to add the feature.  If the answer is no then they refactor the design to make it the best possible then they continue with a TFD approach.  This strategy is applicable to developing both your application code and your database schema, two things that you would work on in parallel.

    When you first start following a TDD approach to development you quickly discover that to make it successful you need to automate as much of the process as possible?  Do you really want to manually run the same build scrīpt(s) and the same testing scrīpt(s) over and over again?  Of course not.  So, agile developers have created OSS tools such as ANT, Maven, and Cruise Control (to name a few) which enable them to automate these tasks.  More importantly, it enables them to automate their database testing scrīpt into the build procedure itself.

    Agile developers realize that testing is so important to their success that it is something they do every day, not just at the end of the lifecycle.  They test as often and early as possible, and better yet they test first.  As you can see with the agile system development lifecycle (SDLC) of Figure 3 testing is in fact something that occurs during the development and release cycles, not just during release.  Furthermore, many agile software developers realize that you can test more than just your code, you can in fact validate every work product created on a software development project if you choose to.  This philosophy is exemplified by the Full Lifecycle Object-Oriented Testing (FLOOT) Methodology.

     

    Figure 3. The Agile Lifecycle.

     

    4. How to Test

    Although you want to keep your database testing efforts as simple as possible, at first you will discover that you have a fair bit of both learning and set up to do.  In this section I discuss the need for various database sandboxes in which people will test: in short, if you want to do database testing then you're going to need test databases (sandboxes) to work in.  I then overview how to write a database test and more importantly describe setup strategies for database tests.  Finally, I overview several database testing tools which you may want to consider.

     

    4.1 Database Sandboxes

    A common best practice on agile teams is to ensure that developers have their own "sandboxes" to work in.  A sandbox is basically a technical environment whose scope is well defined and respected.  Figure 4 depicts the various types of sandboxes which your team may choose to work in.  In each sandbox you'll have a copy of the database.  In the development sandbox you'll experiment, implement new functionality, and refactor existing functionality, validate your changes through testing, and then eventually you'll promote your work once you're happy with it to the project integration sandbox.  In this sandbox you will rebuild your system and then run all the tests to ensure you haven't broken anything (if so, then back to the development sandbox).  Occasionally, at least once an iteration/cycle, you'll deploy your work to the level (demo and pre-production testing), and rerun your test suite (including database tests) each time that you do so to ensure that your changes integrate with the changes made by other developers.  Every so often (perhaps once every six to twelve months) into production. The primary advantage of sandboxes are that they help to reduce the risk of technical errors adversely affecting a larger group of people than is absolutely necessary at the time. 

    Figure 4. Sandboxes.

     

    4.2 Writing Database Tests

    There's no magic when it comes to writing a database test, you write them just like you would any other type of test.  Database tests are typically a three-step process:

    1. Setup the test.  You need to put your database into a known state before running tests against it.  There are several strategies for doing so.
    2. Run the test.  Using a database regression testing tool, run your database tests just like you would run your application tests.
    3. Check the results.  You'll need to be able to do "table dumps" to obtain the current values in the database so that you can compare them against the results which you expected.

    The article What To Test in an RDBMS goes into greater detail.

     

    4.3 Setting up Database Tests

    To successfully your database you must first know the exact state of the database, and the best way to do that is to simply put the database in a known state before running your test suite.  There are two common strategies for doing this:

    1. Fresh start.  A common practice is to rebuild the database, including both creation of the schema as well as loading of initial test data, for every major test run (e.g. testing that you do in your project integration or pre-production test sandboxes). 

    2. Data reinitialization.  For testing in developer sandboxes, something that you should do every time you rebuild the system, you may want to forgo dropping and rebuilding the database in favor of simply reinitializing the source data. You can do this either by erasing all existing data and then inserting the initial data vales back into the database, or you can simple run updates to reset the data values.  The first approach is less risky and may even be faster for large amounts of data.

    An important part of writing database tests is the creation of test data.  You have several strategies for doing so:

    1. Have source test data.  You can maintain an external definition of the test data, perhaps in flat files, XML files, or a secondary set of tables.  This data would be loaded in from the external source as needed.

    2. Test data creation scrīpts.  You develop and maintain scrīpts, perhaps using data manipulation language (DML) SQL code or simply application source code (e.g. Java or C#), which does the necessary deletions, insertions, and/or updates required to create the test data.

    3. Self-contained test cases.  Each individual test case puts the database into a known state required for the test. 

    These approaches to creating test data can be used alone or in combination.  A significant advantage of writing creation scrīpts and self-contained test cases is that it is much more likely that the developers of that code will place it under configuration management (CM) control.  Although it is possible to put test data itself under CM control, worst case you generate an export file that you check in, this isn’t a common practice and therefore may not occur as frequently as required.  Choose an approach that reflects the culture of your organization.

    Where does test data come from?  For unit testing, I prefer to create sample data with known values.  This way I can predict the actual results for the tests that I do write and I know I have the appropriate data values for those tests.  For other forms of testing -- particularly load/stress, system integration, and function testing, I will use live data so as to better simulate real-world conditions.

     
    Beware Coupling:

    One danger with database regression testing, and with regression testing in general, is coupling between tests. If you put the database into a known state, then run several tests against that known state before resetting it, then those tests are potentially coupled to one another.  Coupling between tests occurs when one test counts on another one to successfully run so as to put the database into a known state for it.  Self-contained test cases do not suffer from this problem, although may be potentially slower as a result due to the need for additional initialization steps.

     

    4.4 What Testing Tools Are Available?

    I believe that there are several critical features which you need to successfully test RDBMSs.  First, as Figure 1 implies you need two categories of database testing tools, one for interface tests and one for internal database tests.  Second, these testing tools should support the language that you're developing in.  For example, for internal database testing if you're a Microsoft SQL Server developer, your T-SQL procedures should likely be tested using some form of T-SQL framework.  Similarly, Oracle DBAs should have a PL-SQL-based unit testing framework.  Third, you need tools which help you to put your database into a known state, which implies the need not only for test data generation but also for managing that data (like other critical development assets, test data should be under configuration management control).

    To make a long story short, although we're starting to see a glimmer of hope when it comes to database testing tools, as you can see in Table 2, but we still have a long way to go. Luckily there are some good tools being developed by the open source software (OSS) community and there are some commercial tools available as well.  Having said that, IMHO there is still significant opportunity for tool vendors to improve their database testing offerings.

    Table 2. Some database testing tools.

    Category Descrīption Examples
    Unit testing tools Tools which enable you to regression test your database.
    Testing tools for load testing Tools simulate high usage loads on your database, enabling you to determine whether your system's architecture will stand up to your true production needs.
    Test Data Generator Developers need test data against which to validate their systems.  Test data generators can be particularly useful when you need large amounts of data, perhaps for stress and load testing.

     

    5. Who Should Test?

    During development cycles, the primary people responsible for doing database testing are application developers and agile DBAs.  They will typically pair together, and because they are hopefully taking a TDD-approach to development the implication is that they'll be doing database unit testing on a continuous basis.  During the release cycle your testers, if you have any, will be responsible for the final system testing efforts and therefore they will also be doing database testing.

    The role of your data management (DM) group, or IT management if your organization has no DM group, should be to support your database testing efforts.  They should promote the concept that database testing is important, should help people get the requisite training that they require, and should help obtain database testing tools for your organization.  As you have seen, database testing is something that is done continuously by the people on development teams, it isn't something that is done by another group (except of course for system testing efforts).  In short, the DM group needs to support database testing efforts and then get out of the way of the people who are actually doing the work.

     

    6. Introducing Database Regression Testing into Your Organization

    Database testing is new to many people, and as a result you are likely to face several challenges:

    1. Insufficient testing skills. This problem can be overcome through training, through pairing with someone with good testing skills (pairing a DBA without testing skills and a tester without DBA skills still works), or simply through trial and error. The important thing is that you recognize that you need to pick up these skills.
    2. Insufficient unit tests for existing databases. Few organizations have yet to adopt the practice of database testing, so it is likely that you will not have a sufficient test suite for your existing database(s). Although this is unfortunate, there is no better time than the present to start writing your test suite.
    3. Insufficient database testing tools. As I said earlier, we still have a way to go with respect to tools.
    4. Reticent DM groups.  My experience is that some data management (DM) groups may see the introduction of database regression testing, and agile techniques such as test-first development (TFD) and refactoring, as a threat.  Or, as my July 2006 "state of data management" survey shows, a large percentage of organizations are not only not doing any database testing at all they haven't even discussed it.  For many in the data management community the idea of doing database testing is rather new and it's simply going to take a while for them to think it through.  I'm not so sure that you should wait to do such obvious process improvement.

    In general, I highly suggest that you read my article Adopting Evolutionary/Agile Database Techniques and consider buying the book Fearless Change which describes a pattern language for successfully implementing change within organizations.

     

    7. Database Testing and Data Inspection

    A common quality technique s to use data inspection tools to examine existing data within a database.  You might use something as simple as a SQL-based query tool such as DB Inspect to select a subset of the data within a database to visually inspect the results.  For example, you may choose to view the unique values in a column to determine what values are stored in it, or compare the row count of a table with the count of the resulting rows from joining the table with another one.  If the two counts are the same then you don't have an RI problem across the join.

    As Richard Dallaway points out, the problem with data inspection is that it is often done manually and on an irregular basis.  When you make changes later, sometimes months or years later, you need to redo your inspection efforts.  This is costly, time consuming, and error prone.

    Data inspection is more of a debugging technique than it is a testing technique.  It is clearly an important technique, but it's not something that will greatly contribute to your efforts to ensure data quality within your organization.

     

    8. Best Practices

    I'd like to conclude this article by sharing a few database testing "best practices" with you:

    1. Use an in-memory database for regression testing.  You can dramatically speed up your database tests by running them, or at least portions of them, against an in-memory database such as HSQLDB.  The challenge with this approach is that because database methods are implemented differently across database vendors that any method tests will still need to run against the actual database server.

    2. Start fresh each major test run.  To ensure a clean database, a common strategy is that at the beginning of each test run you drop the database, then rebuild it from scratch taking into account all database refactorings and transformations to that point, then reload the test data, and then run your tests.  Of course, you wouldn't do this to your production database.  ;-)

    3. Take a continuous approach to regression testing.  I can't say this enough, a TDD approach to development is an incredibly effective way to work.

    4. Train people in testing.  Many developers and DBAs have not been trained in testing skills, and they almost certainly haven't been trained in database testing skills.  Invest in your people, and give them the training and education they need to do their jobs.

    5. Pair with novices with people that have database testing experience.  One of the easiest ways to gain database testing skills is to pair program with someone who already has them.

     

  • Database Testing(转)

    2007-12-21 23:15:52

    Introduction to Relational Database Testing
     

    I believe that the virtual absence of discussion about testing within the data management community is the primary cause of the $611 billion annual loss, as reported by The Data Warehouse Institute, experienced by North American organizations resulting from poor data quality.  Relational database management systems (RDBMSs) often persist mission-critical data and implement mission-critical functionality.   We've known for years that effective testing enables you to improve quality, and in particular testing often and early in the lifecycle can do so dramatically.   It seems to me that to improve database quality an important activity, if not the most important one, is to test our databases often (and better yet regressively).  Figure 1 indicates what you should consider testing when it comes to relational databases.   The diagram is drawn from the point of view of a single database, the dashed lines indicate threat boundaries, indicating that you need to consider threats both within the database (clear box testing) and at the interface to the database (black box testing).

    Figure 1. What to test.

    Functionality Testing in Relational Databases

    TBD

    Stored procedures and triggers. Stored procedures and triggers should be tested just like your application code would be.

    Relationship Testing in Relational Databases

    TBD

    Referential integrity (RI). RI rules, in particular cascading deletes in which highly coupled "child" rows are deleted when a parent row is deleted, should also be validated. Existence rules, such as a customer row corresponding to an account row, must exist before the row can be inserted into the Account table, and can be easily tested, too.

    Data Quality Testing in Relational Databases

    TBD

    Default values. Columns often have default values defined for them. Are the default values actually being assigned. (Someone could have accidentally removed this part of the table definition.)

    Data invariants. Columns often have invariants, implemented in the forms of constraints, defined for them. For example, a number column may be restricted to containing the values 1 through 7. These invariants should be tested.

    Validate the attribute size. Is the field size defined in the application is matching with that in the db.


    Performance Testing of Relational Databases

    TBD

    Access time to read/write/delete a single row.

    Access time for common queries returning multiple rows.

    Access time for queries involving several tables.

    Existence test for an index.   Does the expected index exist or not?

    Structural Testing in Relational Databases

    TBD

    Table existence.   We can check whether all the data from the application is being inserted into the database properly, or not

    View definitions. Views often implement interesting business logic. Things to look out for include: Does the filtering/select logic work properly? Do you get back the right number of rows? Are you returning the right columns? Are the columns, and rows, in the right order?

    Terminology

    The following terminology is used throughout this article:

    • Database testing. The act of validating the contents, schema, and functionality within a database. From the point of view of a relational database this includes the actual data itself, the table structures and relationships between tables, and the stored procedures/functions or database classes respectively.
    • Database interface testing.   Database testing which validates the database at the black-box level.   See Figure 1.
    • Internal database testing.   Database testing which validates the database at the white/clear-box level.   See Figure 1.
    • Database regression testing.   The act of running the database test suite on a regular basis, ideally whenever someone does something which could potentially inject a defect into the database such as change how they write data into a database or change some of the code within the database itself.
    • Test Driven Database Development (TDDD). Also known as "behavīor Driven Database Development" (BDDD), this is the act of specifying the design of a database by writing a single test then just enough database code/schema to fulfill that test.
  • 质量体系建立的步骤(网络转载)

    2007-12-18 18:05:51


    质量体系建立的步骤

     

    建立、完善质量体系一般要经历质量体系的策划与设计,质量体系文件的编制、质量体系的试运行,质量体系审核和评审四个阶段,每个阶段又可分为若干具体步骤

    一、质量体系的策划与设计

    该阶段主要是做好各种准备工作,包括教育培训,统一认识,组织落实,拟定计划;确定质量方针,制订质量目标;现状调查和分析;调整组织结构,配备资源等方面。

    (一)教育培训,统一认识

    质量体系建立和完善的过程,是始于教育,终于教育的过程,也是提高认识和统一认识的过程,教育培训要分层次,循序渐进地进行。

    第一层次为决策层,包括党、政、技(术)领导。主要培训:

    1.通过介绍质量管理和质量保证的发展和本单位的经验教训,说明建立、完善质量体系的迫切性和重要性;

    2.通过ISO9000族标准的总体介绍,提高按国家(国际)标准建立质量体系的认识。

    3.通过质量体系要素讲解(重点应讲解“管理职责”等总体要素),明确决策层领导在质量体系建设中的关键地位和主导作用。

    第二层次为管理层,重点是管理、技术和生产部门的负责人,以及与建立质量体系有关的工作人员。

    这二层次的人员是建设、完善质量体系的骨干力量,起着承上启下的作用,要使他们全面接受ISO9000族标准有关内容的培训,在方法上可采取讲解与研讨结合,理论与实际结合。

    第三层次为执行层,即与产品质量形成全过程有关的作业人员。对这一层次人员主要培训与本岗位质量活动有关的内容,包括在质量活动中应承担的任务,完成任务应赋予的权限,以及造成质量过失应承担的责任等。

    (二)组织落实,拟定计划

    尽管质量体系建设涉及到一个组织的所有部门和全体职工,但对多数单位来说,成立一个精干的工作班子可能是需要的,根据一些单位的做法,这个班子也可分三个层次。

    第一层次:成立以最高管理者(厂长、总经理等)为组长,质量主管领导为副组长的质量本系建设领导小组(或委员会)。其主要任务包括:

    1.体系建设的总体规划;

    2.制订质量方针和目标;

    3.按职能部门进行质量职能的分解。

    第二层次,成立由各职能部门领导(或代表)参加的工作班子。这个工作班子一般由质量部门和计划部门的领导共同牵头,其主要任务是按照体系建设的总体规划具体组织实施

    第三层次:成立要素工作小组。根据各职能部门的分工明确质量体系要素的责任单位,例如,“设计控制”一般应由设计部门负责,“采购”要素由物资采购部门负责。

    组织和责任落实后,按不同层次分别制定工作计划,在制定工作计划时应注意:

    1.目标要明确。要完成什么任务,要解决哪些主要问题,要达到什么目的?

    2.要控制进程。建立质量体系的主要阶段要规定完成任务的时间表、主要负责人和参与人员、以及他们的职责分工及相互协作关系。

    3.要突出重点。重点主要是体系中的薄弱环节及关键的少数。这少数可能是某个或某几个要素,也可能是要素中的一些活动。

    (三)确定质量方针,制定质量目标

    质量方针体现了一个组织对质量的追求,对顾客的承诺,是职工质量行为的准则和质量工作的方向。

    制定质量方针的要求是:

    1.与总方针相协调;

    2.应包含质量目标;

    3.结合组织的特点;

    4.确保各级人员都能理解和坚持执行。

    (四)现状调查和分析

    现状调查和分析的目的是为了合理地选择体系要素,内容包括:

    1.体系情况分析。即分析本组织的质量体系情况,以便根据所处的质量体系情况选择质量体系要素的要求。

    2.产品特点分析。即分析产品的技术密集程度、使用对象、产品安全特性等,以确定要素的采用程度。

    3.组织结构分析。组织的管理机构设置是否适应质量体系的需要。应建立与质量体系相适应的组织结构并确立各机构间隶属关系、联系方法。

    4.生产设备和检测设备能否适应质量体系的有关要求。

    5.技术、管理和操作人员的组成、结构及水平状况的分析。

    6.管理基础工作情况分析。即标准化、计量、质量责任制、质量教育和质量信息等工作的分析。

    对以上内容可采取与标准中规定的质量体系要素要求进行对比性分析。

    (五)调整组织结构,配备资源

    因为在一个组织中除质量管理外,还有其他各种管理。组织机构设置由于历史沿革多数并不是按质量形成客观规律来设置相应的职能部门的,所以在完成落实质量体系要素并展开成对应的质量活动以后,必须将活动中相应的工作职责和权限分配到各职能部门。一方面是客观展开的质量活动,一方面是人为的现有的职能部门,两者之间的关系处理,一般地讲,一个质量职能部门可以负责或参与多个质量活动,但不要让一项质量活动由多个职能部门来负责。目前我国企业现有职能部门对质量管理活动所承担的职责、所起的作用普遍不够理想总的来说应该加强。

    在活动展开的过程中,必须涉及相应的硬件、软件和人员配备,根据需要应进行适当的调配和充实。

    二、质量体系文件的编制

    质量体系文件的编制内容和要求,从质量体系的建设角度讲,应强调几个问题:

    1.体系文件一般应在第一阶段工作完成后才正式制订,必要时也可交叉进行。如果前期工作不做,直接编制体系文件就容易产生系统性、整体性不强,以及脱离实际等弊病。

    2.除质量手册需统一组织制订外,其它体系文件应按分工由归口职能部门分别制订,失提出草案,再组织审核,这样做有利于今后文件的执行。

    3.质量体系文件的编制应结合本单位的质量职能分配进行。按所选择的质量体系要,素,逐个展开为各项质量活动(包括直接质量活动和间接质量活动),将质量职能分配落实到各职能部门。质量活动项目和分配可采用矩阵图的形式表述,质量职能矩阵图也可作为附件附于质量手册之后。

    4.为了使所编制的质量体系文件做到协调、统一,在编制前应制订“质量体系文件明细表”,将现行的质量手册(如果已编制)、企业标准、规章制度、管理办法以及记录表式收集在一起,与质量体系要素进行比较,从而确定新编、增编或修订质量体系文件项目。

    5.为了提高质量体系文件的编制效率,减少返工,在文件编制过程中要加强文件的层次间、文件与文件间的协调。尽管如此,一套质量好的质量体系文件也要经过自上而下和自下而上的多次反复。

    6.编制质量体系文件的关键是讲求实效,不走形式。既要从总体上和原则上满足 ISO9000族标准,又要在方法上和具体做法上符合本单位的实际。三、质量体系的试运行

    质量体系文件编制完成后,质量体系将进入试运行阶段。其目的,是通过试运行,考验质量体系文件的有效性和协调性,并对暴露出的问题,采取改进措施和纠正措施,以达到进一步完善质量体系文件的目的。

    在质量体系试运行过程中,要重点抓好以下工作:

    1.有针对性地宣贯质量体系文件。使全体职工认识到新建立或完善的质量体系是对过去质量体系的变革,是为了向国际标准接轨,要适应这种变革就必须认真学习、贯彻质量体系文件。

    2.实践是检验真理的唯一标准。体系文件通过试运行必然会出现一些问题,全体职工立将从实践中出现的问题和改进意见如实反映给有关部门,以便采取纠正措施。

    3.将体系试运行中暴露出的问题,如体系设计不周、项目不全等进行协调、改进。

    4.强信息管理,不仅是体系试运行本身的需要,也是保证试运行成功的关键。所有与质量活动有关的人员都应按体系文件要求,做好质量信息的收集、分析、传递、反馈、处理和归档等工作。

    四、质量体系的审核与评审

    质量体系审核在体系建立的初始阶段往往更加重要。在这一阶段,质量体系审核的重点,主要是验证和确认体系文件的适用性和有效性。

    1.审核与评审的主要内容一般包括:

    (1)规定的质量方针和质量目标是否可行;

    (2)体系文件是否覆盖了所有主要质量活动,各文件之间的接口是否清楚;

    (3)组织结构能否满足质量体系运行的需要,各部门、各岗位的质量职责是否明确;

    (4)质量体系要素的选择是否合理;

    (5)规定的质量记录是否能起到见证作用

    (6)所有职工是否养成了按体系文件操作或工作的习惯,执行情况如何

    2.该阶段体系审核的特点是:

    (1)体系正常运行时的体系审核,重点在符合性,在试运行阶段,通常是将符合性与适用性结合起来进行;

    (2)为使问题尽可能地在试运行阶段暴露无遗,除组织审核组进行正式审核外,还应有广大职工的参与,鼓励他们通过试运行的实践,发现和提出问题;

    (3)在试运行的每一阶段结束后,一般应正式安排一次审核,以便及时对发现的问题进行纠正,对一些重大问题也可根据需要,适时地组织审核;

    (4)在试运行中要对所有要素审核覆盖一遍;

    (5)充分考虑对产品的保证作用;

    (6)在内部审核的基础上,由最高管理者组织一次体系评审。

    应当强调,质量体系是在不断改进中行以完善的,质量体系进入正常运行后,仍然要采取内部审核,管理评审等各种手段以使质量体系能够保持和不断完善。

231/212>
Open Toolbar