发布新日志

  • LR在安装和卸载问题

    2008-08-14 14:17:27

     


    LR在安装和卸载问题上的一点总结(转帖)

    在安装 Loaderunnner 过程中也许你经常遇到,提示无法安装的情况,我也遇到过相关问题,于是查阅了相关资料,总结了一下,好东西不敢独享,拿出来和同行一起交流
    (一) 提示:" the link file .... may be corrupted or has illegated link string "的,提示重复多次均无法安装。
    原因 :你的 Loaderunner 的安装文件夹名写成中文了,造成 Lr 的安装教本无法识别路径,最终导致不断有这样的错误提示。
    解决方案:把安装文件的目录名改为非中文就可以了。
    (二)  没法完全卸载
    要想把 LR 的老版本完全卸载,正确的步骤是:
    1.  停止所有的运行的 LR 的进程和服务( including the Controller, VuGen, Analysis , or the LoadRunner Agent Process/Service )
    2.  备份已有的脚本,你的脚本有可能在你的默认安装路径下
    3.  在控制面板的添加删除程序中,删除 LR ,并重启机器
    4.  手动删除所有 LR 的文件夹,包括您的开始菜单里的 LR 快捷方式
    5.  如果你的版本是 6.0 系列的,删除 Borland 文件夹(通常在 C:\Borland or C:\BDE  目录下)
    6.  搜索    wlrun.* 、    vugen.* ,除了安装文件夹中的文件,其他的都删除
    7.  打开注册表,找到
    如果只安装了 MI 公司的 LoadRunner 这一个产品,请删除:
    HKEY_LOCAL_MACHINE\SOFTWARE\Mercury Interactive
    HKEY_CURRENT_USER\SOFTWARE\Mercury Interactive
    否则请删除:
    HKEY_LOCAL_MACHINE\SOFTWARE\Mercury Interactive\LoadRunner
    HKEY_CURRENT_USER\SOFTWARE\Mercury Interactive\LoadRunner
    删除所有和 LR 有关的数值,除了你的 License2 或 License。
    8.  清空回收站
    实现以上步骤后,即可放心安装了,切记在重装后,一定要重启机器,因为一些必要信息要写入注册表。
    (三)  卸载后 , 执行安装过程时出现" license security violation.Operation is not allowed "提示信息 , 安装失败
    解决方案:
    1.  进入一台 Loadrunner 运行正常的电脑(安装路径要和你的相同)进入注册表,导出以下两个目录:
    HKEY_CURRENT_USER\Software\Mercury Interactive
    HKEY_LOCAL_MACHINE\SOFTWARE\Mercury Interactive
    2.  回到刚才安装不成功的电脑 , 进入注册表导入刚才这两个文件。
    3.  再次执行安装。
    建议:如果有用 Ghost 提前做 Ghost,或者为系统设置还原点。
  • 软件回归测试及其实践

    2008-08-14 13:26:03

     



    摘要:本文描述了软件回归测试的概念和进行回归测试的基本步骤,介绍了可用于回归测试的测试用例库的维护方法,给出了几种可以可保证回归测试效率和有效性的回归测试策略,总结了回归测试时应该注意的一些实际问题。

    关键词:回归测试;测试用例;基线测试用例库

    Software Regression Testing and It’s Practice

    Abstract:The article present the conception of regression testing and the step of executing this testing. Introduce how to maintenance the test case library which used in regression testing ,and provide the method of ensure regression testing’s validity. Finally, it gives some problem must be careful in the period of regression testing.

    Keywords:regression testing;test case;baseline test case library

    作者简介:李丹(1978-),女,江苏如东人,信息产业部电子第五研究所助理工程师,从事软件可靠性研究及测试工作。

    一、 概述

    在软件生命周期中的任何一个阶段,只要软件发生了改变,就可能给该软件带来问题。软件的改变可能是源于发现了错误并做了修改,也有可能是因为在集成或维护阶段加入了新的模块。当软件中所含错误被发现时,如果错误跟踪与管理系统不够完善,就可能会遗漏对这些错误的修改;而开发者对错误理解的不够透彻,也可能导致所做的修改只修正了错误的外在表现,而没有修复错误本身,从而造成修改失败;修改还有可能产生副作用从而导致软件未被修改的部分产生新的问题,使本来工作正常的功能产生错误。同样,在有新代码加入软件的时候,除了新加入的代码中有可能含有错误外,新代码还有可能对原有的代码带来影响。因此,每当软件发生变化时,我们就必须重新测试现有的功能,以便确定修改是否达到了预期的目的,检查修改是否损害了原有的正常功能。同时,还需要补充新的测试用例来测试新的或被修改了的功能。为了验证修改的正确性及其影响就需要进行回归测试。

    回归测试在软件生命周期中扮演着重要的角色,因忽视回归测试而造成严重后果的例子不计其数,导致阿里亚娜5型火箭发射失败的软件缺陷就是由于复用的代码没有经过充分的回归测试造成的。

    回归测试作为软件生命周期的一个组成部分,在整个软件测试过程中占有很大的工作量比重,软件开发的各个阶段都会进行多次回归测试。在渐进和快速迭代开发中,新版本的连续发布使回归测试进行的更加频繁,而在极端编程方法中,更是要求每天都进行若干次回归测试。因此,通过选择正确的回归测试策略来改进回归测试的效率和有效性是非常有意义的。

    二、 回归测试策略

    对于一个软件开发项目来说,项目的测试组在实施测试的过程中会将所开发的测试用例保存到“测试用例库”中,并对其进行维护和管理。当得到一个软件的基线版本时,用于基线版本测试的所有测试用例就形成了基线测试用例库。在需要进行回归测试的时候,就可以根据所选择的回归测试策略,从基线测试用例库中提取合适的测试用例组成回归测试包,通过运行回归测试包来实现回归测试。保存在基线测试用例库中的测试用例可能是自动测试脚本,也有可能是测试用例的手工实现过程。

    回归测试需要时间、经费和人力来计划、实施和管理。为了在给定的预算和进度下,尽可能有效率和有效力地进行回归测试,需要对测试用例库进行维护并依据一定的策略选择相应的回归测试包。

    1、测试用例库的维护

    为了最大限度地满足客户的需要和适应应用的要求,软件在其生命周期中会频繁地被修改和不断推出新的版本,修改后的或者新版本的软件会添加一些新的功能或者在软件功能上产生某些变化。随着软件的改变,软件的功能和应用接口以及软件的实现发生了演变,测试用例库中的一些测试用例可能会失去针对性和有效性,而另一些测试用例可能会变得过时,还有一些测试用例将完全不能运行。为了保证测试用例库中测试用例的有效性,必须对测试用例库进行维护。同时,被修改的或新增添的软件功能,仅仅靠重新运行以前的测试用例并不足以揭示其中的问题,有必要追加新的测试用例来测试这些新的功能或特征。因此,测试用例库的维护工作还应包括开发新测试用例,这些新的测试用例用来测试软件的新特征或者覆盖现有测试用例无法覆盖的软件功能或特征。

    测试用例的维护是一个不间断的过程,通常可以将软件开发的基线作为基准,维护的主要内容包括下述几个方面。

    (1)、删除过时的测试用例

    因为需求的改变等原因可能会使一个基线测试用例不再适合被测试系统,这些测试用例就会过时。例如,某个变量的界限发生了改变,原来针对边界值的测试就无法完成对新边界测试。所以,在软件的每次修改后都应进行相应的过时测试用例的删除。

    (2)、改进不受控制的测试用例

    随着软件项目的进展,测试用例库中的用例会不断增加,其中会出现一些对输入或运行状态十分敏感的测试用例。这些测试不容易重复且结果难以控制,会影响回归测试的效率,需要进行改进,使其达到可重复和可控制的要求。

    (3)、删除冗余的测试用例

    如果存在两个或者更多个测试用例针对一组相同的输入和输出进行测试,那么这些测试用例是冗余的。冗余测试用例的存在降低了回归测试的效率。所以需要定期的整理测试用例库,并将冗余的用例删除掉。

    (4)、增添新的测试用例

    如果某个程序段、构件或关键的接口在现有的测试中没有被测试,那么应该开发新测试用例重新对其进行测试。并将新开发的测试用例合并到基线测试包中。

    通过对测试用例库的维护不仅改善了测试用例的可用性,而且也提高了测试库的可信性,同时还可以将一个基线测试用例库的效率和效用保持在一个较高的级别上。

    2、回归测试包的选择

    在软件生命周期中,即使一个得到良好维护的测试用例库也可能变得相当大,这使每次回归测试都重新运行完整的测试包变得不切实际。一个完全的回归测试包括每个基线测试用例,时间和成本约束可能阻碍运行这样一个测试,有时测试组不得不选择一个缩减的回归测试包来完成回归测试。

    回归测试的价值在于它是一个能够检测到回归错误的受控实验。当测试组选择缩减的回归测试时,有可能删除了将揭示回归错误的测试用例,消除了发现回归错误的机会。然而,如果采用了代码相依性分析等安全的缩减技术,就可以决定哪些测试用例可以被删除而不会让回归测试的意图遭到破坏。

    选择回归测试策略应该兼顾效率和有效性两个方面。常用的选择回归测试的方式包括:

    (1)、再测试全部用例

    选择基线测试用例库中的全部测试用例组成回归测试包,这是一种比较安全的方法,再测试全部用例具有最低的遗漏回归错误的风险,但测试成本最高。全部再测试几乎可以应用到任何情况下,基本上不需要进行分析和重新开发,但是,随着开发工作的进展,测试用例不断增多,重复原先所有的测试将带来很大的工作量,往往超出了我们的预算和进度。

    (2)、基于风险选择测试

    可以基于一定的风险标准来从基线测试用例库中选择回归测试包。首先运行最重要的、关键的和可疑的测试,而跳过那些非关键的、优先级别低的或者高稳定的测试用例,这些用例即便可能测试到缺陷,这些缺陷的严重性也仅有三级或四级。一般而言,测试从主要特征到次要特征。

    (3)、基于操作剖面选择测试

    如果基线测试用例库的测试用例是基于软件操作剖面开发的,测试用例的分布情况反映了系统的实际使用情况。回归测试所使用的测试用例个数可以由测试预算确定,回归测试可以优先选择那些针对最重要或最频繁使用功能的测试用例,释放和缓解最高级别的风险,有助于尽早发现那些对可靠性有最大影响的故障。这种方法可以在一个给定的预算下最有效的提高系统可靠性,但实施起来有一定的难度。

    (4)、再测试修改的部分

    当测试者对修改的局部化有足够的信心时,可以通过相依性分析识别软件的修改情况并分析修改的影响,将回归测试局限于被改变的模块和它的接口上。通常,一个回归错误一定涉及一个新的、修改的或删除的代码段。在允许的条件下,回归测试尽可能覆盖受到影响的部分。

    再测试全部用例的策略是最安全的策略,但已经运行过许多次的回归测试不太可能揭示新的错误,而且很多时候,由于时间、人员、设备和经费的原因,不允许选择再测试全部用例的回归测试策略,此时,可以选择适当的策略进行缩减的回归测试。

    3、回归测试的基本过程

    有了测试用例库的维护方法和回归测试包的选择策略,回归测试可遵循下述基本过程进行:

    (1). 识别出软件中被修改的部分;

    (2). 从原基线测试用例库T中,排除所有不再适用的测试用例,确定那些对新的软件版本依然有效的测试用例,其结果是建立一个新的基线测试用例库T0。

    (3). 依据一定的策略从T0中选择测试用例测试被修改的软件。

    (4). 如果必要,生成新的测试用例集T1,用于测试T0无法充分测试的软件部分。

    (5). 用T1执行修改后的软件。

    第(2)和第(3)步测试验证修改是否破坏了现有的功能,第(4)和第(5)步测试验证 修改工作本身。

    三、 回归测试实践

    在实际工作中,回归测试需要反复进行,当测试者一次又一次地完成相同的测试时,这些回归测试将变得非常令人厌烦,而在大多数回归测试需要手工完成的时候尤其如此,因此,需要通过自动测试来实现重复的和一致的回归测试。通过测试自动化可以提高回归测试效率。为了支持多种回归测试策略,自动测试工具应该是通用的和灵活的,以便满足达到不同回归测试目标的要求。

    在测试软件时,应用多种测试技术是常见的。当测试一个修改了的软件时,测试者也可能希望采用多于一种回归测试策略来增加对修改软件的信心。不同的测试者可能会依据自己的经验和判断选择不同的回归测试技术和策略。

    回归测试并不减少对系统新功能和特征的测试需求,回归测试包应包括新功能和特征的测试。如果回归测试包不能达到所需的覆盖要求,必须补充新的测试用例使覆盖率达到规定的要求。

    回归测试是重复性较多的活动,容易使测试者感到疲劳和厌倦,降低测试效率,在实际工作中可以采用一些策略减轻这些问题。例如,安排新的测试者完成手工回归测试,分配更有经验的测试者开发新的测试用例,编写和调试自动测试脚本,做一些探索性的或ad hoc测试。还可以在不影响测试目标的情况下,鼓励测试者创造性地执行测试用例,变化的输入、按键和配置能够有助于激励测试者又能揭示新的错误。

    在组织回归测试时需要注意两点,首先是各测试阶段发生的修改一定要在本测试阶段内完成回归,以免将错误遗留到下一测试阶段。其次,回归测试期间应对该软件版本冻结,将回归测试发现的问题集中修改,集中回归。

    在实际工作中,可以将回归测试与兼容性测试结合起来进行。在新的配置条件下运行旧的测试可以发现兼容性问题,而同时也可以揭示编码在回归方面的错误。

    参考文献:

    [1] Glenford J.Myers,计算机软件测试技巧,清华大学出版社,1985。

    [2] Robert V. Binder,面向对象系统的测试,人民邮电出版社,2001。

    [3] Rex Black, 测试流程管理,北京大学出版社,2001。
  • 怎样专业描述软件缺陷

    2008-08-12 16:34:19

     



    软件缺陷的描述是是软件缺陷报告的基础部分,也是测试人员就一个软件问题与开发小组交流的最初且最好的机会。一个好的描述,需要使用简单的、准确的、专业的语言来抓住缺陷的本质。否则,它就会使信息含糊不清,可能会误导开发人员。准确报告软件缺陷是非常重要的,因为:

    • 清晰准确的软件缺陷描述可以减少软件缺陷从开发人员返回的数量
    • 提高软件缺陷修复的速度,使每一个小组能够有效的工作
    • 提高测试人员的信任度,可以得到开发人员对清晰的软件缺陷描述有效的响应
    • 加强开发人员,测试人员和管理人员的协同工作,让他们可以更好的工作


    在多年实践的基础上,我们积累了较多的软件缺陷的有效描述规则,主要是:

    1. 单一准确
    每个报告只针对一个软件缺陷。在一个报告中报告多个软件缺陷的弊端是常常会导致缺陷部分被注意和修复,不能得到彻底的修正。

    2. 可以再现
    提供缺陷的精确操作步骤,使开发人员容易看懂,可以自己再现这个缺陷,通常情况下,开发人员只有再现了缺陷,才能正确地修复缺陷。

    3. 完整统一
    提供完整、前后统一的软件缺陷的步骤和信息,例如:图片信息,Log文件等。

    4. 短小简练
    通过使用关键词,可以使软件缺陷的标题的描述短小简练,又能准确解释产生缺陷的现象。如“主页的导航栏在低分辨率下显示不整齐”中“主页”、“导航栏”、“分辨率”等是关键词。

    5. 特定条件
    许多软件功能在通常情况下没有问题,而是在某种特定条件下会存在缺陷,所以软件缺陷描述不要忽视这些看似细节的但又必要的特定条件(如特定的
    操作系统、浏览器或某种设置等),能够提供帮助开发人员找到原因的线索。如“搜索功能在没有找到结果返回时跳转页面不对”。

    6. 补充完善
    从发现bug那一刻起,测试人员的责任就是保证它被正确的报告,并且得到应有的重视,继续监视其修复的全过程。

    7. 不做评价
    在软件缺陷描述不要带有个人观点,对开发人员进行评价。软件缺陷报告是针对产品、针对问题本身,将事实或现象客观地描述出来就可以,不需要任何评价或议论。

     


  • 软件的可测试性

    2008-08-12 15:12:34

     

    1  概述
        随着软件行业的迅猛发展,
    软件测试也逐渐受到越来越多的软件公司所重视,然而开发出来的软件直接就可以拿出来做测试吗?根据近几年来的实践证明,在设计软件时事先没有对软件的可测试性进行周密设计和部署的软件在测试时总是很难于进行,直到测试无法进行下去为止。被测软件在编码时需要考虑给测试和后期的产品维护提供必要的手段和接口支持,即要求软件具有可测试性。基于可测试性的目标考虑,良好的架构设计,完备的接口,使得软件测试更加高效和可行,同时产品维护也更加便利。 【文章来源:文斯测试技术研究中心 http://blog.csdn.net/vincetest

        本文描述的范围:可测试性定义、可测试性特征、可测试性设计。

        读者对象:系统分析和设计人员、开发人员、测试人员。
     
        参考文献:
        1.《软件可测试性需求设计》               Vince
        2.《高质量C++/C编程指南》              林锐
        3.《软件工程思想》                          林锐

     

    2  软件可测试性定义
    2.1  可测试性定义
        软件的可测试性是指在一定的时间和成本前提下,进行测试设计、测试执行以此来发现软件的问题,以及发现故障并隔离、定位其故障的能力特性。简单的说,软件的可测试性就是一个计算机程序能够被测试的容易程度。
        一般来说可测试性很好的软件必然是一个强内聚、弱耦合、接口明确、意图明晰的软件,而不具可测试性的软件往往具有过强的耦合和混乱的逻辑。

    2.2  可测试性特征
      1.可操作性:“运行得越好,被测试的效率越高。”
        1)系统的错误很少;
        2)没有阻碍测试执行的错误;
        3)产品在功能阶段的演化(允许同时的开发和测试)。
       
      2.可观察性:“你所看见的就是你所测试的。”
        1)每个输入有唯一的输出;
        2)系统状态和变量可见,或在运行中可查询;
        3)过去的系统状态和变量可见,或在运行中可查询(例如:事务
    日志);
        4)所有影响输出的因素都可见;
        5)容易识别错误输出;
        6)通过自测机制自动侦测内部错误;
        7)自动报告内部错误;
        8)可获取源代码。

      3.可控制性:“对软件的控制越好,测试越能够被自动执行与优化。”
        1)所有可能的输出都产生于某种输入组合;
        2)通过某种输入组合,所有的代码都可能被执行;
        3)测试工程师可直接控制软件和硬件的状态及变量;
        4)输入和输出格式保持一致且有结构;
        5)能够便利地对测试进行说明、
    自动化和再生;
        6)接口和模块易控制;
        7)业务流程和场景易控制。

      4.可分解性:“通过控制测试范围,能够更快地分解问题,执行更灵巧的再测试。”
        1)软件系统由独立模块构成;
        2)能够独立测试各软件模块;
        3)业务流程和场景易分解。

      5.简单性:“需要测试的内容越少,测试的速度越快。”
        1)功能简单性(例如:特性集是满足需求所需的最小集合);
        2)结构简单性(例如:将体系结构模块化以限制错误的繁殖);
        3)代码简单性(例如:采用代码标准为检查和维护提供方便)。

      6.稳定性:“改变越少,对测试的破坏越小。”
        1)软件的变化是不经常的;
        2)软件的变化是可控制的;
        3)软件的变化不影响已有的测试;
        4)软件失效后能得到良好恢复和隔离。

      7.易理解性:“得到的信息越多,进行的测试越灵巧。”
        1)设计能够被很好地理解并遵循行业规范;
        2)内部、外部和共享构件之间的依赖性能够被很好地理解;
        3)设计的改变被通知;
        4)可随时获取技术文档;
        5)技术文档组织合理;
        6)技术文档明确详细;
        7)技术文档精确性稳定;
        8)相关环境配置说明与操作指导。

     【文章来源:文斯测试技术研究中心 3软件可测试性设计
    3.1可测试性设计
        软件的可测试性特征主要表现是设立观察点、控制点、观察装置、驱动装置、隔离装置。需要注意的是可测试性设计时必须要保证不能对软件系统的任何功能有影响,不能产生附加的活动或者附加的测试,采取合适的设计模式对软件进行设计。
      1.坚持测试驱动设计(测试先行)的方法。
        优先编写测试代码,这是标准的XP方法。不是说应该一次性编写全部测试代码后,再一次性全部实现。先写验收测试,再写
    单元测试,编写一些测试代码,实现它们,再编写一些测试代码,再实现它们等等是个更好的办法。设计以这种方式得以进展;在实现阶段捕捉错误并在下一组测试中改正它,以这种方式编写测试也更少会使人畏缩。【文章来源:文斯测试技术研究中心 http://blog.csdn.net/vincetest

      2.尽量做到每个操作对应一个函数,使函数小型化。
        使用小型函数说明和重载带缺省参数的函数将使在测试中调用这些函数变的愉快的多。否则,在测试这些函数时将不得不构造额外参数,如果参数很大,那么将很快导致代码膨胀。更糟的是,它会诱使你编写比在
    其它情况下更少的测试。

      3. 数据的显示与控制分离
        把代码移到 GUI 视图的外面。然后各种 GUI 动作就能成了模型上的简单方法调用。这样,对GUI测试者来说,通过方法调用测试功能比间接地测试功能容易的多。另一个好处是它使修改程序功能而不影响视图变的更容易。

      4.可控制性设计【文章来源:文斯测试技术研究中心 http://blog.csdn.net/vincetest
       1)全局变量的可控制性设计
         I.在外界使用适当的手段能够直接或间接控制该变量,包括获取、修改变量值等;
         II. 可以将全局类型的变量进行分类并封装到一个个接口中操作。
       2)接口的可控制性设计
         各接口在外界使用适当的手段能够直接调用对该接口进行操作,这里所谓的适当的手段主要包括使用
    测试工具和增加额外代码. 对于向外提供的接口的接洽处能够人为的对接,比如构造测试环境模拟接口对接,这里所指的开放接口主要是指相对于整个被测系统,即为被测系统以外提供的接口。接口接洽处人为对接时各接口所要求的条件和所需的参数人为的能够轻易达到和提供。
       3)模块的可控制性设计
         对于每个相对独立的模块设计好所需要的驱动和桩都能单独设计用例进行测试对应的功能,在测试运行期间模块异常时能够将其隔离而不影响测试。
       4)业务流程的可控制性设计
         在测试环境满足的情况下能够控制任一单独业务流程,各业务流程具有流通性。
       5)场景的可测试性设计
         将一场景所涉及到的业务和接口整合到一个统一的接口使其能够单独操作该场景。

      5.可分解性设计
        1)业务流程的可分解性设计
          对于复杂的业务流程需合理设定分解点,在测试时能够对其进行分解。
        2)场景的可分解性设计
          对于复杂的场景需合理设定分解点,在测试时能够对其进行分解。

      6.稳定性设计
        测试模块发布合理,不能在后期追加的模块为前期所测模块引入新的不必要的测试活动。【文章来源:文斯测试技术研究中心
    http://blog.csdn.net/vincetest

      7.易理解性设计
        1)设计文档的易理解性
          I.设计参考标准
          II.内容描述主次要分清
          III.依赖关系描述明确
        2)接口的易理解性
          I.接口功能明确
          II.参数有意义
        3)业务的易理解性
        4)场景的易理解性

      8.可观察性设计
        1)业务执行状态和过程可观察性设计
        2)异常情况可观察性设计

      9.测试驱动和桩的设置
        为单个测试接口、测试业务、测试场景预留测试驱动和桩的接入点。

      10.适合增量式开发的可测试性设计
        在增量式开发过程中必须优先考虑测试桩和测试驱动实现的难易程度和真实性。

      11.可查询设计【文章来源:文斯测试技术研究中心 http://blog.csdn.net/vincetest
        1)对系统级别的全局变量或者状态设置查询接口;
        2)某一业务或场景调用接口设置接口路径查询

      12.自愈合功能
         在某一场景中的局部出现故障时设置多路选择或者
    其他干涉进行跳转执行气候的具有正常逻辑的功能。

      13. 输出结果
         对于任何一项操作都要能产生预期的输出,不管是正确的还是错误的甚至是异常的.测试结果的表现形式可以是数据、现象等,不管是以什么方式表现,都要有依可寻,在设计文档中要有说明。对于测试结果易于判断,具有可分析性、可获得性.在设置的各个控制点或观察点的结果易于查询、修改等。

      14.提供统一的操作执行面板
         操作面板元素主要由输入和输出元素组成,如所执行的操作和对应的输出,但可能被测系统是一个比较复杂的系统,由多个可以独立的模块组成,涉及到的操作和输出比较多,各操作之间的关联也比较复杂。在设计时统一的做一个操作面板,该操作面板成为一个可以操作整个被测系统的独立模块,一种是以命令的形式执行操作,直接以printf语句的形式输出查看,另一种是以GUI的形式,输入(执行的操作)输出均在界面上执行和体现,这样比较直观。如下图所示:


        特别对于执行某一场景时要跟踪该场景的关键过程和执行后的输出参数,给出一系列可以分析的数据,该场景可以以执行过程分阶段监控,将监控范围内的数据输出以供测试人员分析。

     【文章来源:文斯测试技术研究中心

    3.2  可测试性编码
      1.注释需要详尽。特别对于接口,要描述清楚功能、实现及参数;
      2.使用模块化方法,编码低耦合、高内聚;
      3.为集成测试与系统联调准备调测开关及相应打印函数,并且要有详细的说明;
      4.为单元测试选择恰当的测试点,并仔细构造测试代码、测试用例,同时给出明确的注释说明。测试代码部分应作为(模块中的)一个子模块,以方便测试代码在模块中的安装与拆卸(通过调测开关);
      5.使用断言来发现软件问题,提高代码可测试性;
      6.用断言来检查程序正常运行时不应发生但在调测时有可能发生的非法情况;
      7.为测试自动化工具提供所需要的特定“钩子(hook)”;
      8.对于每个功能,提供访问、修改“状态”变量的接口,包括提供查询、修改上层软件、软硬件接口、底层硬件状态的接口及打印;
      9.提供查询系统状态的接口。比如内存使用、程序使用进程数等;
      10.对于测试因为环境等因素而可能无法测试的功能,提供接口模拟软件实现该功能的过程;
      11.对于修改功能,提供修改功能参数单位的接口,以便于进行如软件性能等的测试;
      12.出错及异常处理保存记录,记录具有详细的属性,并且格式统一、意义明确;
      13.在程序异常时,除了保留日志,还需要提供观察、恢复的外部方法;
      14.对全局变量、特殊结构,提供查询的方法。

     

    3.3  可测试性调试与定位
      1.对于程序中所涉及到的变量尽可能的在调试过程中可以查询及修改;
      2.在整个软件系统执行过程中为每个关键业务或相对独立的业务设定一个调试点,便于系统集成和问题范围的定位;
      3.在设定好的调试点处对处理的业务输出数据和全局数据进行可视化输出,便于测试结果的分析。

     

    3.4  测试所需文档
      1.需求规格说明书
      2.概要设计说明书
      3.详细设计说明书
      4.系统功能清单
      5.系统运行环境搭建指导书
      6.系统操作指导书


  • 测试人员容易遗漏一些隐藏的缺陷

    2008-08-12 14:42:40

     


     
    通常软件测试
    会暴露软件中的缺陷,经过修正后可以保证软件系统的功能满足需求并正确运行。但是,在系统测试和确认测试中,测试人员容易遗漏一些隐藏的缺陷。众所周知,软件测试不可能发现所有的缺陷,而软件开发周期各个阶段仍然存在注入缺陷的可能,但是,有一些缺陷是测试中容易忽略的,也就是说,通过测试方法和用例可以充分暴露这些缺陷,遗憾的是,它们往往被忽略或者某种原因忘记测试了,这就给软件留下了隐患或者危机。这些容易被忽略的缺陷包括:
      1、安装缺陷

      通常项目组完成代码后,发布时候安装打包是最后一个环节,而软件测试人员通常在测试的时候,没有仔细的测试这一部分,而把用例集中在其他功能上。安装时候的缺陷通常通过拷贝而不是运行安装程序方式给测试人员安装软件,结果正式安装时候出现问题,引起例如控件没有注册,注册表没有导入等。删除时候没有注意安装文件夹是否存在用户文件,造成数据丢失;使用绝对路径;安装顺序没有说明书。

      2、配置文件

      有些文件在ini等配置文件中写出了管理员口令密码等信息,而且是明文的!这是一个安全隐患。另外,有些安装文件的 XML 文件,为了方便在数据库和中间层连接文件中写入了Admin 口令和密码。作为一个合格的软件测试人员,必须检查这些可以用记事本打开的文件。因为,一个稍有常识而且喜欢探索的用户,可能从中获取信息而成为不自觉的黑客。所以,配置文件可能成为软件安全方面的一个缺陷。

      3、网页安全缺陷

      现在网站开发已经注意到:登陆网站进入其内部网页后,直接拷贝网址,然后粘贴到另一IE 窗口输入,可以绕过登陆直接访问。也许商业网站很关注这个问题,但是很多行业软件却很容易忽略。

      网页安全缺陷还可能存在于 IE 弹出的子窗口。有些设计不严格的软件,在主页面关闭的时候子页面还可以运行,这是一个明显的漏洞,而且还大大增加了错误发生的几率。

      4、判断顺序/逻辑缺陷

      对界面进行多个输入判断的时候,非常容易出现这种问题。例如判断年月顺序,判断长度,判断非空等。假如操作员仅仅满足单个条件,保存不能成功;而按界面从上之下顺序一一满足条件之后,保存是没有问题的。但是,改变一下输入的次序,校验失效。例如,一一满足条件之后,不保存,倒过来将上面的输入改成非法输入,然后保存,结果居然也能成功,这是因为原先的判断由于发生过,或者根据语句顺序只检查最后一个判断,所以没有报错。这种错误尤其在 Java scrīpt 脚本的页面中要注意。能够保存不能保证数据正确,有可能引起系统崩溃或者后续数据错误。所以,在测试的时候,不要按照正常的顺序输入,而是要打乱步骤,看看代码是否强健,是否在判断逻辑上没有错误。良好的代码应该经得起折腾,至少保存时会再此全部进行判断,而不只是简简单单走到判断的最后一行。

      5、调试语句和冗余信息

      维护项目和升级改造的推广系统最容易潜伏这类缺陷。典型表现在没有删除或者屏蔽调试语句。弹出一个界面不友好的提示信息,会使不明真相的用户产生误以为系统发生了严重故障,从而引起对软件的不信任感。页面中某个角落存在当前客户不需要的冗余按钮和功能也是一种缺陷。多余的功能会使用户以为是额外附加部分而去使用,其结果可想而知;而多余的按钮会误导好奇心强的用户操作,产生不必要的错误。

      同样值得关注的还有参数设置,由于没有实际数据,开发人员在调试或者单元测试的时候,习惯性的进行自我设定而忘了删除,软件测试人员可能会忽略掉了这部分测试,也可能导致在客户现场发生错误而影响系统发布和验收。

      6、不可重现的故障

      新参加软件测试的人员或者新来的开发人员总是要问,不可重现的缺陷是否需要记录,有必要吗?回答是肯定的。测试必须如实的记录发生的问题,也许不能重现,或者使非软件系统本身问题,但是,可能这些偶然性背后是有规律的,不记录这些,就不可能发现这些规律。

      7、多节点的逆向流转缺陷

      当前软件不少喜欢使用工作流来驱动。工作流的问题,就是可能出现多个流向分支。测试容易忽略的部分,就是工作流多节点的逆向流转。例如,通过不通过涉及两个分支,但是流程逆转的时候,有可能不是回到上一节点而是平级的另一个节点去了。软件测试要格外注意这类用例的设计。另外,有些时候默认分支在向前的时候是有默认值的,例如默认通过,那么保存的时候要提示用户是否通过,否则可能由于操作疲劳而走错了节点,引起回退。

      8、输入框缺陷

      试过往输入框粘贴数据而不是直接输入吗?可能这里会出现问题。按 Ctrl+V 的时候,输入框会根据长度大小自动截断输入长度。但是用鼠标,截断可能会失效。有一次测试人员就是用这种方法把一篇 Word 文档输入进去了,保存的时候,数据库崩溃。有些网站登陆的口令****可以拷贝下来的,只要放在剪贴板里面马上明文显示。

      输入框可以说是问题最多的部分,能够引起的麻烦也很多。日期、数字、文本等等,都需要耐心的测试一下。

      9、界面布局缺陷

      曾经有一次,项目经理回来向测试部反映一个问题,客户对界面不满意。原因很简单,因为界面上删除按钮和保存按钮挨得很近。结果有些操作不熟练的业务人员,很容易误按。这个问题是测试人员没有意料到的,因此注意关闭、删除、退出按钮与保存、下一步等按钮的距离。类似的按钮应按此规则排列分布。

      界面布局还可能发生在窗口最大化和最小化上,有可能窗口缩小的时候没有下拉框或不匹配分辨率,对用户来讲,这个错误实在很低级。有些用户由于操作习惯,非常不喜欢腾出手使用鼠标,尤其是大量输入的界面,因此,要注意设置键盘的快捷方式。还有,按 Tab定位到下一焦点时要注意顺序,避免跳转太灵活而让操作人员感到无从适应,在界面进行维护或者修改的时候,不要忘了软件测试开发人员是否无意改变了这些快捷方式和跳转顺序。

      10、版本和补丁包的环境问题

      理论上讲,这属于兼容性测试应该覆盖的问题。有些客户很喜欢更新最新的软件版本或者微软时不时打些补丁包,问题就出现了。有时候升级不一定是好事。这些问题最好在测试的时候增加几个用例,多用不同软件版本的机器跑一跑。软件测试有个定律是:你没跑过的地方,就一定会出事。经常听到开发人员抱怨,怎么我的机器没问题,你的机器就有事了呢?这不能完全靠配置管理员解决问题,环境配置项是大家最容易忽略的。

      11、用户管理缺陷

      用户管理的角色和授权需要好好研究一下,作过测试的人员都知道,有时候为了测试的方便,测试用户都是具有超级权限的用户。而且,比较容易忽略用户管理这一部分的测试。往往发往客户的时候,很多测试用户都没有删除。

      另外,有些接口的用户和口令,到软件使用寿命结束都没有更改过。在一次测试中,软件测试人员发现,给一个用户授超级用户权限,之后更改这个用户为受限权限。使用中发现,用户居然没有真正回收权限,用户管理界面上没有任何不对。及早准备用户管理用例,不要等到测试快结束时候才想起。

      12、常识缺陷

      从逻辑或者统计学上讲,计算机是允许如此处理的,但是从常识上来讲,这些情况不可能发生。例如电话号码不可能出现小数点,终止时间不能大于开始时间等等。除此之外,常识还要结合业务特点来进行判断,因此,开发和测试人员要格外注意对自己知识的培养以及增加对需求细节的了解。不能因为一味追求进度而采用最简单的代码来实现,对用户来说,这些错误可能是很荒谬的。

      尽管我们不可能完美的测试一个软件,但是我们仍然可以改进我们的软件测试。每次测试结束,及时总结测试中的不足,进一步完善用例。思考一下那些容易忽略的软件缺陷,能提高对软件测试的认识,提高所在组织软件的质量。

  • Web性能测试术语

    2008-08-12 14:30:54

     

      在软件系统日益复杂的今天,性能已经成为软件质量的重要衡量标准之一,这一点尤其体现在和WEB相关的系统上。接下来介绍一些WEB性能测试中的术语,这些术语都是WEB性能测试中出现频繁的比较高的词汇,只有掌握这些基础的性能知识才可以进一步开展测试工作。这些术语主要有并发用户,并发用户数量,请求响应时间,事务响应时间,吞吐量,吞吐率,TPS,点击率,资源利用率等。

      并发用户:并发一般分为2种情况。一种是严格意义上的并发,即所有的用户在同一时刻做同一件事情或者操作,这种操作一般指做同一类型的业务。比如在信用卡审批业务中,一定数目的拥护在同一时刻对已经完成的审批业务进行提交;还有一种特例,即所有用户进行完全一样的操作,例如在信用卡审批业务中,所有的用户可以一起申请业务,或者修改同一条记录。

      另外一种并发是广义范围的并发。这种并发与前一种并发的区别是,尽管多个用户对系统发出了请求或者进行了操作,但是这些请求或者操作可以是相同的,也可以是不同的。对整个系统而言,仍然是有很多用户同时对系统进行操作,因此也属于并发的范畴。

      可以看出,后一种并发是包含前一种并发的。而且后一种并发更接近用户的实际使用情况,因此对于大多数的系统,只有数量很少的用户进行“严格意义上的并发”。对于WEB性能测试而言,这2种并发情况一般都需要进行测试,通常做法是先进行严格意义上的并发测试。严格意义上的用户并发一般发生在使用比较频繁的模块中,尽管发生的概率不是很大,但是一旦发生性能问题,后果很可能是致命的。严格意义上的并发测试往往和功能测试关联起来,因为并发功能遇到异常通常都是程序问题,这种测试也是健壮性和稳定性测试的一部分。

      用户并发数量:关于用户并发的数量,有2种常见的错误观点。一种错误观点是把并发用户数量理解为使用系统的全部用户的数量,理由是这些用户可能同时使用系统;还有一种比较接近正确的观点是把在线用户数量理解为并发用户数量。实际上在线用户也不一定会和其他用户发生并发,例如正在浏览网页的用户,对服务器没有任何影响,但是,在线用户数量是计算并发用户数量的主要依据之一。

      请求响应时间:指的是客户端发出请求到得到响应的整个过程的时间。在某些工具中,请求响应时间通常会被成为"TLLB",即"Time to last byte",意思是从发起一个请求开始,到客户端接收到最后一个字节的响应时间所耗费的时间。请求响应时间过程的单位一般为"秒"或者"毫秒".

      事务响应时间:事务可能由一系列请求组成,事务的响应时间主要是针对用户而言,属于宏观上的概念,是为了向用户说明业务响应时间而提出的.例如:跨行取款事务的响应时间就是由一系列的请求组成的.事务响应时间和后面的业务吞吐率都是直接衡量系统性能的参数.

      吞吐量:指的是在一次性能测试过程中网络上传输的数据量的总和.吞吐量/传输时间,就是吞吐率.

      TPS:每秒钟系统能够处理的交易或者事务的数量.它是衡量系统处理能力的重要指标.

      点击率:每秒钟用户向WEB服务器提交的HTTP请求数.这个指标是WEB应用特有的一个指标:WEB应用是"请求-响应"模式,用户发出一次申请,服务器就要处理一次,所以点击是WEB应用能够处理的交易的最小单位.如果把每次点击定义为一个交易,点击率和TPS就是一个概念.容易看出,点击率越大,对服务器的压力越大.点击率只是一个性能参考指标,重要的是分析点击时产生的影响。需要注意的是,这里的点击并非指鼠标的一次单击操作,因为在一次单击操作中,客户端可能向服务器发出多个HTTP请求.

      资源利用率:指的是对不同的系统资源的使用程度,例如服务器的CPU利用率,磁盘利用率等.资源利用率是分析系统性能指标进而改善性能的主要依据,因此是WEB性能测试工作的重点.

      资源利用率主要针对WEB服务器,操作系统,数据库服务器,网络等,是测试和分析瓶颈的主要参考.在WEB性能测试中,更根据需要采集相应的参数进行分析.

  • 避免“测试逃逸”现象的措施

    2008-08-08 11:46:41

     

      “测试逃逸”是指测试人员在软件的测试过程中由于惰性或工作不认真,为图省事而设计测试用例不全面,故意少设计用例,或者没有按照测试要求执行测试,导致一些显而易见的软件缺陷或本来应该发现的软件缺陷没有被测试出来。由此可能造成质量不合格的软件版本被发布,使公司的形象或利益受到损害。

      为了避免在测试工作中出现“测试逃逸”现象,制定了以下措施:

      (1)   加强评审

      将严格执行测试管理程序中规定的两个评审:测试用例设计评审和测试结果评审。尤其是测试用例设计评审,要严把测试用例质量关。

      (2)   确定专门的SQA(质量保证)人员

      规定本部门专门的SQA人员,并赋予以下权力和职责:

      负责复查测试人员的《测试用例设计与执行报告》及《软件问题清单》;

      负责监控每位测试人员按照规定的流程和规范执行测试;

      有权责成每位测试人员纠正其不符合流程和规范的过程。

      将每次的复查结果在工作会上进行通报。

      (3)   加强测试部经理对测试过程和测试结果的监控

      做为测试部经理,将加强对测试过程的监控,及时发现不正常的作业过程,并给予警告,令其及时纠正。同时,将亲自进行抽样测试,将测试结果与测试人员的结果进行对比,以考核测试人员的工作结果。

      (4)   建立通报与惩罚制度

      每次SQA的复查结果,如果发现有“测试逃逸”现象,将由部门经理在每周一的工作例会上进行通报批评与警告。

      将来公司的绩效考核制度在测试部实施后,将把质保人员和部门经理的检查结果记入绩效考核,与其工资收入挂钩。

      如果多次批评和警告无效,则上报公司建议进行处罚、转岗直至辞退。

      (5)   调动员工工作的积极性

      通过以下手段调动员工工作积极性:

      具体任务责任到人,把软件细化成功能块,分配给每一个测试人员,要求每个测试对自己测试部分的测试质量负责;

      将来公司的绩效考核制度在测试部实施后,通过将测试质量与绩效考核相关联,提高工作的积极性。

     

  • 隐藏数据测试

    2008-08-08 10:41:47

     

      隐藏数据测试在软件验收和确认阶段是十分必要和重要的一部分。程序的质量不仅仅通过用户界面的可视化数据来验证,而且必须包括遍历系统的所有数据。一些数据库技巧和下面我所提到的4步,能够帮助QA团队来在测试过程中很好的执行这样的测试。
    隐藏数据测试是非常重要的,在QA团队里这也是非常容易被训练测试的。我这篇文章解释了“为什么,谁,怎样”测试隐藏数据。
      一、 什么是隐藏数据?
      假设一个应用程序要求用户两条信息-----用户名和密码来创建帐户。这个用户输入这两条数据后保存。最后,一个确认窗口将通过数据库中找到这条数据来显示用户名和密码给用户。为了验证所有的数据保存是否正确,一个QA测试人员会在这个确认窗口简单的查看下用户名和密码。如果他们成功了?假设数据库记录了第三条信息----创建日期,它可能不会出现在确认窗口,而只在存档中才出现。如果创建日期保留的不正确,而QA测试人员只验证屏幕上的数据,那么这个问题就不可能被发现。创建日期可能就是一个bug,由于一个用户帐户保存了一个错误的日期到数据库中,这个问题也不可能会被引起注意,因为它被用户界面所隐藏。这只是一个简单的例子,但是它却演化出了一点:隐藏数据测试的重要性。
      应用程序包括两类数据:一种是最终用户可以看到的数据,另一种就是隐藏数据。在可见的数据中的bug很容易被QA测试人员发现,因为这些问题可以通过用户界面UI来直接看见。而隐藏数据的bug却比可见的数据发现困难的多,因为他们不能在用户界面UI中看到,它只能通过数据库找到--------然而这些QA测试人员可能并没有意识到它们。
      二、 谁应该测试隐藏数据?
      测试隐藏数据是谁的职责?这个问题不好回答。数据的存取测试是通过应用程序的非用户互动的部分来测试的,这种测试我们通常称为“数据流测试(Data Flow Tetsting)”(Culbertson,Brown,&Cobb,2002).这种混淆是数据流测试和一些测试学科的跨越线。软件工程知识体系(SWEBOK)(2004,IEEE计算机协会)将它归为“基于代码”的测试(Bourque& Dupuis,2004)。一个应用程序的组成包括输入数据和输出数据,隐藏数据和可见数据,它们都能被程序单独调用,通过适当的场景来测试。因此这就要求有一定编码知识和会使用编码工具,因此数据流测试也被认为是基于代码的测试,SWEBOK似乎也表明隐藏数据应该是开发人员在代码编写阶段进行的单元测试
      然后,作者和软件工程专家James Whittaker(2003)指出数据流应该也能够通过在用户输入和集中数据存取过程中通过用户界面去调用。因此这些测试可以通过用户界面进行,Whittaker 表示他们应该由QA测试人员在开发的测试阶段进行测试。这种测试也在SWEBOK关于Bourque&Qupuis(2004)的文章中描述了作为“基于需求”的测试,是一种功能测试。这就与他们早期的关于开发人员应该执行这些测试相矛盾。因此,如果开发人员和QA测试人员的各自团队都认为其对方团队都将执行所有的这些测试,那么可能没有一个团队将测试他们,(或者只有一个团队中的一些人测试而不是所有的人),那么他们的测试结果中的隐藏数据的bug就不会被发现。
      让我们用我在文章首段举的例子为例。假设创建用户帐户以“CreateUser”表示,另外两个输入---Name,Password---三个输入以 Name,Password,CreationDate表示。那么在单元测试阶段,开发人员将会输入所有可能的字符来测试CreatUser。他们会发现一个问题----如果password为空,CreationDate输出也可能为空,而不会显示当前CreationDate。开发人员修复了这个问题,并检查了代码。但是假设其他开发人员突然覆盖了这段代码,以至于这个bug在程序开发结束阶段也没有修复。QA测试人员通过用户界面测试了一个用户帐户的创建,发现Name和Password都能正确保存,象第一段所描述的那样。由于不能测试CreationDate,他们询问开发人员是否它已经进行过单元测试了。开发人员说是的,并且把显示他们在单元测试中关于创建用户成功结果给测试人员看,因此这个bug被忽略掉了,如果一个用户输入一个空password,他们帐户CreationDate也将为空,这在以后可能会引起许多问题。
      为了解决上面例子中的问题,QA测试人员必须在数据库中直接验证CreationDate字段。事实上,我建议QA测试人员应该验证所有隐藏的字段。这看起来很简单,但是实际上,它很大程度上暗示着测试人员的技能和能力:他们需要知道隐藏数据的存在,隐藏数据之间怎样关联,怎样执行关于隐藏数据的测试,也需要有检测隐藏数据之间关联的方法。对于上面的四个问题要求QA测试人员的角色上升一个档次,因为他们的钻研超出了黑盒测试的范围,进入了一个“灰盒测试”,灰盒测试必须要求有程序内部工作机制的知识。而前两个问题涉及智力技能:知道隐藏字段在哪里?测试会引起什么变化。测试人员必须知道数据存取的性质,使用这些知识来设计测试用例(Whittaker,2003)。第三和第四个问题需要更多的技能,使用工具来执行测试和验证测试结果。
      三、 测试隐藏数据需要掌握的技能
      测试隐藏数据有三个核心数据库技能是必须掌握。QA测试人员可能不熟悉数据库,因此需要学习这些技能(Sweeny,2004)。第一个技能是了解基本的数据库设计,特别是数据库关联,这在现在是最常见的。测试人员也必须了解一些概念如:关键字段,外键关系,参照完整性,父表与子表的关系记录,数据类型,记录锁定,数据库设计图表和符号,create,retrieve,update,delete的过程。这些技能是分析数据库设计,找到隐藏字段,和设计测试用例所必须掌握的。这些测试也能够帮助QA测试人员识别隐藏数据bug引起的原因,而不只是悬浮在症状表面。
      第二个数据库技能是QA测试必须能书写流畅的数据库语言,结构化查询语言(SQL)。大多数应用程序是通过使用SQL报表与数据库通信的,在现代程序中,某些组成比如数据库视图和存储过程都是通过书写SQL语言来完成的(Sweeny,2004)。SQL技能是验证测试结果所必须掌握的,通过书写SQL语句从数据库中检索数据,或通过分析SQL语句和从数据库写入和取出的数据。SQL通常用create,update,delete 数据来创建一个独特的测试用例。并且能准确的找出隐藏数据bug引起的原因。
    第三个数据库技能是有使用数据库管理实用工具的实践知识和经验。这种具体应用不同于数据库到数据库,而是一个重要的技能:a)能够手动的送达SQL语句到数据库。b)能够查看数据库,表和字段设计。c)能够使用SQL语句捕捉数据从数据库中的出入。例如,MS-SQL 2000数据库为企业伙伴提供了各自的特点:a)SQL查询分析,b)企业管理,c)SQL事件探查器。QA人员需要找出支持测试下的应用程序的数据库和学着怎样使用这些功能。
      四、 怎样测试隐藏数据
      一旦必须掌握的技能被学习,QA测试人员必须运用它们来完成测试隐藏字段的任务。这里有一个方法来执行任务,下面我分四个部分来详细论述:
      1. 找出隐藏数据。
      QA测试不可能测试他们不知道的东西。大多数隐藏数据信息能够从设计文档中推断出来,比如数据库结构,数据流图表,需求。如果这些文档无法使用或者写的不详细,QA人员可以做一些“侦探性的工作”来找到它们。一个方法是创建输入和输出变量表格。这个方法将程序与单独加工阶段分离开来,表格的结果将显示用户不可见的输入和输出(Kaner, Falk, & Nguyen, 1993)。了解数据库结构和设计的技能对这一步非常有用。
      2. 定义测试用例。
      一旦知道了隐藏数据,QA测试团队必须找到何时如何他们能够改变和设计测试来证明和反证所引起的变动。何时和如何可以通过第一步如果定义隐藏数据方法来找到。它可能有简单业务规则或数据流的形式,比如:“当X可见数据insert/update/delete,那么Y 隐藏数据被 insert/update/delete。这里指出对于测试需要的任何事先存在数据,来帮助后面执行该测试是非常重要的。
      从这个信息来设计测试是非常麻烦的,因为依靠的测试类型正是QA测试团队试着完成的。比如,如果安全性是优先的,那么设计的测试确定隐藏数据不能被没有权限的用户所访问或中断。如果高容量是一个优先的,那么设计的测试可能是隐藏数据和大量的同步数据的负载和压力测试。最低限度,至少业务规则或数据流可以证明和反证一次。例如:“改变X可视数据的value=A,然后验证Y隐藏数据是否变成 value=B”和不改变X可视数据的value=A,然后验证Y隐藏数据是否没有变成 value=B”这是测试隐藏数据的基本方法,如果有需要的话,也提供给更复杂的数据基础。
      3. 执行测试用例。
      这通常通过在用户界面处理可视数据来完成,通过在数据库中提交可视和隐藏数据来引起这种变化。通过带有预先填入数据的“seed”数据库来创建一个所须的测试场景是非常必须,如上所述,在第二步中设计测试用例以指出。有时候,隐藏数据的变化可能是通过其他用户界面所触发的,比如通过时间事件或自动过程。在一些案例中,执行测试用例是通过设置触发事件来完成的。
      4. 分析测试结果。
      这个过程是最有技术挑战的部分,因为它直接涉及连接的数据库,而不使用应用程序的用户界面。所有的三个数据库技能都将在这一步发挥作用,QA测试人员也必须对他们寻找的隐藏数据具有一个直觉(Whittaker, 2003)。这里有两个重要的方法来分析这个结果:A)在测试执行后发生 B)在实时测试过程中发生
    在测试执行后查询数据库。一旦数据提交已经改变,可以通过检查记录来确定数据是否与第二步中所设计的测试用例的期盼结果相匹配。最简单的办法是通过送达一个SQL查询语句到数据库来执行它,来说明这个测试结果。最常用的语句是,一个“SELECT FROM”语句就能够检索所有的或部分记录数据。这个语句也通常包含一个过滤作用,比如一个“WHERE”语句,以至查询出只在测试中返回的记录。
      当然也有一些直接的方法可以使用,依靠数据库的可用的实用工具。比如:Microsoft SQL Server 2000的数据库管理系统的实用工具,企业管理,提供的一些可选程序。它可以让用户从一个列表中选择一个表,然后右键来“返回所有行(return all rows)”或“返回前X行(return top X rows)”而不需要使用任何SQL语句。这个结果能够快速的扫描所有被测试的记录,然后验证上面所有的期盼结果。
      B在实时过程中追踪数据的改变。当测试的应用程序送达了一个命令给数据库,比如SQL语句,该数据流就可以被某些数据库实用工具所捕捉。同时,如果数据库的任何一个对象,比如查看或存储过程被调用,他们的SQL命令也能够被捕捉。不仅仅语句能被捕捉,而且任何常量或动态数据也会在SQL中被嵌入。因此“实时数据”可以对期盼结果进行验证。依靠这些实用工具,SQL数据流能够被过滤,以至只显示期盼语句。
      隐藏数据测试案例
      作为上述过程的一个案例,让我们运用第一段所述的例子来深入阐述。
      第一,识别隐藏数据。创建一个包含“create user account”的输入和输出变量的表格
      如下:
      表1:输入/输出变量

                

    UI事件

    创建一个用户帐户

    输入变量

    用户创建的帐户

    变量

    数据源

    隐藏/可视

    Name

    用户输入

    可视

    Password

    用户输入

    可视

    输出变量

    在帐户创建后通过窗口确认

    变量

    数据源

    隐藏/可视

    Name

    用户帐户

    可视

    Password

    用户帐户

    可视

    CreationDate

    自动产生(数据保存的日期/时间)

    隐藏

    版权声明:51Testing软件测试网及相关内容提供者拥有51testing.com内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像。51testing软件测试网欢迎与业内同行进行有益的合作和交流,如果有任何有关内容方面的合作事宜,请联系我们

     



  • 合法邮箱的测试用例

    2008-08-05 17:40:12

     

     

    先讲创建邮箱的规则
    要判定邮箱地址,那我们必须先设定我们邮箱命名的规则
    这里我们以Gmail为例,创建邮箱时候只写用户名,后缀会直接加上@gmail.com

    only letters (a-z), numbers (0-9), and periods (.)  is allowed,
    the first character of your username must be an ascii letter (a-z) or number (0-9)
    username must be between 6 and 30 characters long
    无效等价类如下
    (1)邮箱名组成有"a-z","0-9", ".'以外的字符   eg.#!12#,ewewe
    (2)邮箱名长度 小于6,大于30个字符   eg. werw, wew...
    (3)邮箱名以以"."号开始    eg. .test

    ---------------
    我们的应用程序填写表单时判定邮箱是否为有效邮箱,一般判定规则为
    (1)@(2).(3)

    (1)为任意字符串,长度5~100 
            (邮箱名没有太严格的限制,比如说一般不会以"_"做开始符,结束符;有的邮箱还不能用特殊符号等等。是因为各种邮箱都有不同的命名规则,所以我们不做限制)
    (2)为任意字符串,长度1~30
    (3)为任意字符串,长度2~67
            [(2),(3)就是域名,其实域名是有要求的,可以看看这里http://www.39idc.com/help/hlp_dtl.asp?nid=10000022
            国际域名可使用英文26个字母,10个阿拉伯数字以及横杠("-"),横杠不能作为开始符和结束符,这里并不做太多限制,太多了...]
    (4)必须要有@符号
    (5)必须要有.
    (6)@后面没有以*.*结束(*为任意字符串)
    (7)域名不能使用"_"作为了开始符,结束符

    无效等价类:
    不符合(1)/(2)/(3)/(4)/(5)/(6)/(7)
    不符合(1)(2)/(1)(3)/(1)(4)/(1)(5)/(1)(6)/(1)(7)
    不符合(2)(3)/(2)(4)/(2)(5)/(2)(6)/(2)(7)
    。。。。 以上各个任意组合, eg. 就没写了,太多了
    所以说繁琐的测试工作我们需要工具来做....


    --------------------------------------------------------
    邮箱文本框测试用例
    1) 有@和.符号
    1。 @和.之间没有字符串
    2。 字符串的第一位是@或.
    3。 字符串的最后一位是@或.
    4。 有@和.符号,并有特殊字符
    2) 没有@和.符号
    3) @/.符号中只有一个
    4) 有@@符号重复
    5) 有..符号重复

  • 测试用例设计方法总结(等价类划分

    2008-08-05 17:34:29

     

     

       .方法简介
    1.
    定义
     
    是把所有可能的输入数据,即程序的输入域划分成若干部分(子集),然后从每一个子集中选取少数具有代表性的数据作为测试用例。该方法是一种重要的,常用的黑盒测试用例设计方法。
       
    2.
    划分等价类:
     
    等价类是指某个输入域的子集合。在该子集合中,各个输入数据对于揭露程序中的错误都是等效的,并合理地假定:测试某等价类的代表值就等于对这一类其它值的测试,因此,可以把全部输入数据合理划分为若干等价类,在每一个等价类中取一个数据作为测试的输入条件就可以用少量代表性的测试数据取得较好的测试结果。等价类划分可有两种不同的情况:有效等价类和无效等价类。
      1)
    有效等价类
       
    是指对于程序的规格说明来说是合理的、有意义的输入数据构成的集合。利用有效等价类可检验程序是否实现了规格说明中所规定的功能和性能。
      2)
    无效等价类
       
    与有效等价类的定义恰巧相反。无效等价类指对程序的规格说明是不合理的或无意义的输入数据所构成的集合。对于具体的问题,无效等价类至少应有一个,也可能有多个。
     
    设计测试用例时,要同时考虑这两种等价类。因为软件不仅要能接收合理的数据,也要能经受意外的考验,这样的测试才能确保软件具有更高的可靠性。
      
    3.
    划分等价类的标准:
      1)
    完备测试、避免冗余;
      2)
    划分等价类重要的是:集合的划分,划分为互不相交的一组子集,而子集的并是整个集合;
      3)
    并是整个集合:完备性;
      4)
    子集互不相交:保证一种形式的无冗余性;
      5)
    同一类中标识(选择)一个测试用例,同一等价类中,往往处理相同,相同处理映射到"相同的执行路径"

    4.划分等价类的方法
      1)
    在输入条件规定了取值范围或值的个数的情况下,则可以确立一个有效等价类和两个无效等价类。如:输入值是学生成绩,范围是0100;(见图例)

    2)在输入条件规定了输入值的集合或者规定了"必须如何"的条件的情况下,可确立一个有效等价类和一个无效等价类;
      3)
    在输入条件是一个布尔量的情况下,可确定一个有效等价类和一个无效等价类。
      4)
    在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可确立n个有效等价类和一个无效等价类。
       
    例:输入条件说明学历可为:专科、本科、硕士、博士四种之一,则分别取这四种这四个值作为四个有效等价类,另外把四种学历之外的任何学历作为无效等价类。
      5)
    在规定了输入数据必须遵守的规则的情况下,可确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则);
      6)
    在确知已划分的等价类中各元素在程序处理中的方式不同的情况下,则应再将该等价类进一步的划分为更小的等价类。
     
    5.
    设计测试用例
     
    在确立了等价类后,可建立等价类表,列出所有划分出的等价类输入条件:有效等价类、无效等价类,然后从划分出的等价类中按以下三个原则设计测试用例:
      1)
    为每一个等价类规定一个唯一的编号;
      2)
    设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖地有效等价类,重复这一步,直到所有的有效等价类都被覆盖为止;
      3)
    设计一个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类,重复这一步,直到所有的无效等价类都被覆盖为止。
     
    .实战演习
    1.某程序规定:"输入三个整数 a b c 分别作为三边的边长构成三角形。通过程序判定所构成的三角形的类型,当此三角形为一般三角形、等腰三角形及等边三角形时,分别作计算 … "。用等价类划分方法为该程序进行测试用例设计。(三角形问题的复杂之处在于输入与输出之间的关系比较复杂。)
     
    分析题目中给出和隐含的对输入条件的要求:
     
    1)整数    2)三个数    3)非零数   4)正数  
     
    5)两边之和大于第三边     6)等腰     7)等边
      
    如果 a b c 满足条件( 1 ~ 4 ),则输出下列四种情况之一:
       1)
    如果不满足条件(5),则程序输出为 " 非三角形 "
       2)
    如果三条边相等即满足条件(7),则程序输出为 " 等边三角形 "
       3)
    如果只有两条边相等、即满足条件(6),则程序输出为 " 等腰三角形 "
       4)
    如果三条边都不相等,则程序输出为 " 一般三角形 "
      
    列出等价类表并编号(见图例)

    覆盖有效等价类的测试用例:
        a      b      c             
    覆盖等价类号码
        3      4      5            
    1--7
        4      4      5            
    1--7),(8
        4      5      5            
    1--7),(9   
        5      4      5            
    1--7),(10
        4      4      4            
    1--7),(11
      
    覆盖无效等价类的测试用例(如下图):

    2.设有一个档案管理系统,要求用户输入以年月表示的日期。假设日期限定在19901~204912月,并规定日期由6位数字字符组成,前4位表示年,后2位表示月。现用等价类划分法设计测试用例,来测试程序的"日期检查功能"
      1)
    划分等价类并编号,下表等价类划分的结果

    输入等价类

    有效等价类

    无效等价类

    日期的类型及长度

    6位数字字符

    有非数字字符

    少于6位数字字符

    多于6位数字字符

    年份范围

    1990~2049之间

    小于1990

    大于2049

    月份范围

    01~12之间

    等于00

    大于12

    2)设计测试用例,以便覆盖所有的有效等价类在表中列出了3个有效等价类,编号分别为,设计的测试用例如下:
       
    测试数据    期望结果      覆盖的有效等价类
        200211     
    输入有效     
      3)
    为每一个无效等价类设计一个测试用例,设计结果如下:
       
    测试数据   期望结果     覆盖的无效等价类
        95June    
    无效输入         
        20036     
    无效输入          
        200100
    6   无效输入         
        198912    
    无效输入         
        200401    
    无效输入         
        200100    
    无效输入         
        200113    
    无效输入         
       
    3.NextDate
    函数包含三个变量:month day year ,函数的输出为输入日期后一天的日期。 例如,输入为 20063 7日,则函数的输出为 200638 。要求输入变量 month day year 均为整数值,并且满足下列条件:
     
    1≤month≤12
     
    1≤day≤31
     
    1920≤year≤2050 
      1)
    有效等价类为:
        M1
    {月份:1≤月份≤12}
        D1
    {日期:1≤日期≤31}
        Y1
    {年:1812≤≤2012}
      2)
    若条件 ~ 中任何一个条件失效,则 NextDate 函数都会产生一个输出,指明相应的变量超出取值范围,比如 "month 的值不在 1-12 范围当中 " 。显然还存在着大量的 year month day 的无效组合, NextDate 函数将这些组合作统一的输出: " 无效输入日期 " 。其无效等价类为:
        M2
    {月份:月份<1}
        M3
    {月份:月份>12}
        D2
    {日期:日期<1}
        D3
    {日期:日期>31}
        Y2
    {年:年<1812}
        Y3
    {年:年>2012}
     
    弱一般等价类测试用例
     
    月份    日期                      预期输出
       6       15        1912           1912616
     
    强一般等价类测试用例同弱一般等价类测试用例
     
    注:弱--有单缺陷假设;健壮--考虑了无效值
     
      (
    )弱健壮等价类测试
     
    用例ID   月份  日期              预期输出
      WR1      6      15    1912      1912616
      WR2     -1     15    1912      
    月份不在112
      WR3     13     15    1912     
    月份不在112
      WR4      6      -1    1912     
    日期不在131
      WR5      6      32    1912     
    日期不在131
      WR6      6      15    1811      
    年份不在18122012
      WR7      6      15    2013     
    年份不在18122012

      ()强健壮等价类测试
     
    用例ID   月份    日期                预期输出
      SR1       -1      15       1912     
    月份不在112
      SR2        6      -1        1912     
    日期不在131
      SR3        6      15       1811     
    年份不在18122012
      SR4       -1      -1       1912     
    两个无效一个有效
      SR5        6      -1        1811     
    两个无效一个有效
      SR6       -1      15       1811     
    两个无效一个有效
      SR7       -1      -1       1811     
    三个无效
     
    4.
    佣金问题等价类测试用例,它是根据佣金函数的输出值域定义等价类,来改进测试用例集合。
    输出销售额≤1000     佣金10
    1000<
    销售额≤1800     佣金=100+(销售额-1000)*15%
    销售额>1800              佣金=220+(销售额-1800)*20%
    测试用例         枪机(45)    枪托(30)      枪管(25)          销售额     佣金
        1               5             5                5                  500        50
        2              15           15              15                 1500       175
        3              25           25              25                 2500       360

  • 测试用例设计方法总结(边界值分析)

    2008-08-05 17:33:42

     

     

    .方法简介
    1.定义:边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法。通常边界值分析法是作为对等价类划分法的补充,这种情况下,其测试用例来自等价类的边界。 

    2.与等价划分的区别
      1)
    边界值分析不是从某等价类中随便挑一个作为代表,而是使这个等价类的每个边界都要作为测试条件。
      2)
    边界值分析不仅考虑输入条件,还要考虑输出空间产生的测试情况。

    3.边界值分析方法的考虑:
     
    长期的测试工作经验告诉我们,大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部。因此针对各种边界情况设计测试用例,可以查出更多的错误。
     
    使用边界值分析方法设计测试用例,首先应确定边界情况。通常输入和输出等价类的边界,就是应着重测试的边界情况。应当选取正好等于,刚刚大于或刚刚小于边界的值作为测试数据,而不是选取等价类中的典型值或任意值作为测试数据。

    4.常见的边界值
      1)
    16-bit 的整数而言 32767 -32768 是边界
      2)
    屏幕上光标在最左上、最右下位置
      3)
    报表的第一行和最后一行
      4)
    数组元素的第一个和最后一个
      5)
    循环的第 0 次、第 1 次和倒数第 2 次、最后一次

    5.边界值分析
      1)
    边界值分析使用与等价类划分法相同的划分,只是边界值分析假定错误更多地存在于划分的边界上,因此在等价类的边界上以及两侧的情况设计测试用例。
       
    例:测试计算平方根的函数
            --
    输入:实数
            --
    输出:实数
            --
    规格说明:当输入一个0或比0大的数的时候,返回其正平方根;当输入一个小于0的数时,显示错误信息"平方根非法-输入值小于0"并返回0;库函数Print-Line可以用来输出错误信息。
           
      2)
    等价类划分:
        I.
    可以考虑作出如下划分:
          a
    、输入 (i)<0 (ii)>=0
          b
    、输出 (a)>=0 (b) Error
        II.
    测试用例有两个:
          a
    、输入4,输出2。对应于 (ii) (a)
          b
    、输入-10,输出0和错误提示。对应于 (i) (b)

      3)边界值分析:
       
    划分(ii)的边界为0和最大正实数;划分(i)的边界为最小负实数和0。由此得到以下测试用例:
        a
    、输入 {最小负实数}
        b
    、输入 {绝对值很小的负数}
        c
    、输入 0
        d
    、输入 {绝对值很小的正数}
        e
    、输入 {最大正实数}
       
      4)
    通常情况下,软件测试所包含的边界检验有几种类型:数字、字符、位置、重量、大小、速度、方位、尺寸、空间等。
      5)
    相应地,以上类型的边界值应该在:最大/最小、首位/末位、上/下、最快/最慢、最高/最低、  最短/最长、 /满等情况下。
      6)
    利用边界值作为测试数据

    边界值

    测试用例的设计思路

    字符

    起始-1个字符/结束+1个字符

    假设一个文本输入区域允许输入1个到255 字符,输入1个和255个字符作为有效等价类;输入0个和256个字符作为无效等价类,这几个数值都属于边界条件值。

    数值

    最小值-1/最大值+1

    假设某软件的数据输入域要求输入5位的数据值,可以使用10000作为最小值、99999作为最大值;然后使用刚好小于5位和大于5位的 数值来作为边界条件。

    空间

    小于空余空间一点/大于满空间一点

    例如在用U盘存储数据时,使用比剩余磁盘空间大一点(几KB)的文件作为边界条件。

    7)内部边界值分析:
       
    在多数情况下,边界值条件是基于应用程序的功能设计而需要考虑的因素,可以从软件的规格说明或常识中得到,也是最终用户可以很容易发现问题的。然而,在测试用例设计过程中,某些边界值条件是不需要呈现给用户的,或者说用户是很难注意到的,但同时确实属于检验范畴内的边界条件,称为内部边界值条件或子边界值条件。
       
    内部边界值条件主要有下面几种:
        a)
    数值的边界值检验:计算机是基于二进制进行工作的,因此,软件的任何数值运算都有一定的范围限制。

    范围或值

    位(bit

    0或者1

    字节(byte

    0——225

    字(word

    0~65535(单字)或 0~4294967295(双字)

    千(K

    1024

    兆(M

    1048576

    吉(G

    1073741824

    b)字符的边界值检验:在计算机软件中,字符也是很重要的表示元素,其中ASCIIUnicode是常见的编码方式。下表中列出了一些常用字符对应的ASCII码值。

    字符

    ASCII码值

    字符

    ASCII码值

    (null)

    0

    A

    65

    空格 (space)

    32

    a

    97

    斜杠 ( / )

    47

    Z

    90

    0

    48

    z

    122

    冒号 ( : )

    58

    单引号 ( ‘ )

    96

    @

    64

     

     

    c)其它边界值检验
       
    6.
    基于边界值分析方法选择测试用例的原则
      1)
    如果输入条件规定了值的范围,则应取刚达到这个范围的边界的值,以及刚刚超越这个范围边界的值作为测试输入数据。
       
    例如,如果程序的规格说明中规定:"重量在10公斤至50公斤范围内的邮件,其邮费计算公式为……"。作为测试用例,我们应取1050,还应取10.01,49.99,9.9950.01等。
      2)
    如果输入条件规定了值的个数,则用最大个数,最小个数,比最小个数少一,比最大个数多一的数作为测试数据。
       
    比如,一个输入文件应包括1~255个记录,则测试用例可取1255,还应取0256等。
      3)
    将规则1)和2)应用于输出条件,即设计测试用例使输出值达到边界值及其左右的值。
       
    例如,某程序的规格说明要求计算出"每月保险金扣除额为01165.25",其测试用例可取0.001165.24、还可取一0.01116526等。
       
    再如一程序属于情报检索系统,要求每次"最少显示1条、最多显示4条情报摘要",这时我们应考虑的测试用例包括14,还应包括05等。
      4)
    如果程序的规格说明给出的输入域或输出域是有序集合,则应选取集合的第一个元素和最后一个元素作为测试用例。
      5)
    如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构的边界上的值作为测试用例。
      6)
    分析规格说明,找出其它可能的边界条件。

    .实战演习
    1.现有一个学生标准化考试批阅试卷,产生成绩报告的程序。其规格说明如下:程序的输入文件由一些有80个字符的记录组成,如右图所示,所有记录分为3组:

    标题:这一组只有一个记录,其内容为输出成绩报告的名字。
     
    试卷各题标准答案记录:每个记录均在第80个字符处标以数字"2"。该组的第一个记录的第1至第3个字符为题目编号(取值为1999)。第10至第59个字符给出第1至第50题的答案(每个合法字符表示一个答案)。该组的第2,第3……个记录相应为第51至第100,第101至第150题的答案。
     
    每个学生的答卷描述:该组中每个记录的第80个字符均为数字"3"。每个学生的答卷在若干个记录中给出。如甲的首记录第1至第9字符给出学生姓名及学号,第10至第59字符列出的是甲所做的第1至第50题的答案。若试题数超过50,则第2,第3……纪录分别给出他的第51至第100,第101至第150……题的解答。然后是学生乙的答卷记录。
     
    学生人数不超过200,试题数不超过999
     
    程序的输出有4个报告:
        a)
    按学号排列的成绩单,列出每个学生的成绩、名次。
        b)
    按学生成绩排序的成绩单。
        c)
    平均分数及标准偏差的报告。
        d)
    试题分析报告。按试题号排序,列出各题学生答对的百分比。
     
    解答:分别考虑输入条件和输出条件,以及边界条件。给出下表所示的输入条件及相应的测试用例。


     
    输出条件及相应的测试用例表。


     
    2.
    三角形问题的边界值分析测试用例
    在三角形问题描述中,除了要求边长是整数外,没有给出其它的限制条件。在此,我们将三角形每边边长的取范围值设值为[1, 100]

    3.NextDate函数的边界值分析测试用例
    NextDate函数中,隐含规定了变量mouth和变量day的取值范围为1≤mouth≤121≤day≤31,并设定变量year的取值范围为1912≤year≤2050

  • 测试例集设计和估计指导

    2008-08-05 17:22:55

     

    目的

    本文以一个转帐功能为例介绍了测试例估计和设计的方法。

    例子说明

    进行测试例估计和设计的依据是需求规格说明书和设计说明书。一般的步骤如下:

    1.        分析影响测试对象的要素;

    2.        为每个要素确定取值;

    3.        使用标准直角矩阵生成初始测试例集;

    4.        在初始测试例集上依据对测试对象的分析来进行测试例集的修改;

    5.        把测试例转化为可以测试执行使用的测试例。

     

    例如在对某一应用系统的转账功能进行测试过程中,利用正交矩阵生成测试用例步骤如下:

    1.约束条件分析:P5L4

    标号

    影响测试规格的要素

    取值1

    取值2

    取值3

    取值4

    1

    用户权限

    有转账权限

    无转账权限

     

     

    2

    票据号

    票据号有效

    票据号无效

     

     

    3

    账号

    账号有效

    账号无效

     

     

    4

    转账金额

    转账金额小于或等于用户实际金额

    转账金额大于用户实际金额

     

     

    5

    转账方式

    同城不同行转账

    同行转账

    异地电汇

    异地信汇

           图表 1

    注:P表示影响测试规格要素个数;L表示影响测试规格要素的最大取值个数

                  在本例中P=5,L=4

     

    2.生成标准测试例集矩阵:

           根据以上约束条件分析得出的PL值,对应直角矩阵测试例生成工具得出以下测试例矩阵

     

    编号

    用户权限

    票据号

    账号

    转账金额

    转账方式

    1

    1

    1

    1

    1

    1

    2

    1

    2

    2

    2

    2

    3

    1

    3

    3

    3

    3

    4

    1

    4

    4

    4

    4

    5

    2

    1

    2

    3

    4

    6

    2

    2

    1

    4

    3

    7

    2

    3

    4

    1

    2

    8

    2

    4

    3

    2

    1

    9

    3

    1

    3

    4

    2

    10

    3

    2

    4

    3

    1

    查看(630) 评论(0) 收藏 分享 管理

  • 功能测试用例的书写方式

    2008-08-05 17:15:51

     

    2)相关的设计说明(概要设计,详细设计等)

    3)与开发组交流对需求理解的 记录(可以是开发人员的一个解释)

    4)已经基本成型的UI(可以有针对性地补充一些用例)

    简而言之,所有你能得到的项目文档,都尽量拿到。 从所得到的资料中,分解出若干小的“功能点”,理解“功能点”,编写相应的测试用例。

    2. 用例的组织方式

    不同的公司有不同的做法,原则上,只要方便管理和跟踪,怎么组织都可以的。

    用例可以按大的功能块组织,如查询功能模块的用例,可以组织在一起,打印模块的测试用例,可以另外组 织在一起。

    在没有专门的测试用例管理工具的情况下,用例执行后会产生2种状态:“通过”、“失败”——这样加上“未 执行”的用例的状态,共3种状态。

    即从“未执行”用例中执行一个用例后,该用例状态应为“失败”或“通 过”。将同一状态的用例组织在一起。

    至于用例文件格式,可以是.DOC或.XLS(如果有专门的测试用例管理工具另当别论)。

    3. 用例与其他材料的关联方式,即如何解决用例跟踪的问题 测试用例面临的比较大的风险有:

    需求的变更、设计的修改、需求的错误和遗漏等等。

    由于用例的主要来源是需求和设计的说明,所以对用例的跟踪其实就是对需求和设计的跟踪,需求和设计的 变更势必引起测试用例的变更。

    如前所说,将分解的功能点编号,与相应的用例联系起来。例如,你可以列一个表格,列出各个(编号的)功 能点和测试用例间的关联关系。

    这样,当需求和设计发生变化时,你只需要跟踪“功能点”是否变化,是否增 加了新的功能点。

    重要和困难的是,不手头的资料和信息一定要是最新的。

    4. 一个好的用例的表述要点,即用例中应当包含的信息

    一个优秀的测试用例,应该包含以下信息:

    1) 软件或项目的名称

    2) 软件或项目的版本(内部版本号)

    3) 功能模块名

    4) 测试用例的简单描述,即该用例执行的目的或方法

    5) 测试用例的参考信息(便于跟踪和参考)

    6) 本测试用例与其他测试用例间的依赖关系

    7) 本用例的前置条件,即执行本用例必须要满足的条件,如对数据库的访问权限

    8) 用例的编号(ID),如可以是 软件名称简写-功能块简写-NO.。

    9) 步骤号、操作步骤描述、测试数据描述

    10)预期结果(这是最重要的)和实际结果(如果有BUG管理工具,这条可以省略)

    11)开发人员(必须有)和测试人员(可有可无)

    12)测试执行日期

    5. 给出一个测试用例的例子该范例已经包含一个测试用例的模板。

    项目/软件 技术出口合同网络申领系统 (企业端) 程序版本 1.0.25
    功能模块名 Login 编制人   xxx
    用例编号- TC-TEP_Login_1 编制时间   2002.10.12
    相关的用例
    功能特性 用户身份验证
    测试目的 验证是否输入合法的信息,允许合法登陆,阻止非法登陆
    预置条件 特殊规程说明 如数据库访问权限
    参考信息 需求说明中关于“登陆”的说明
    测试数据 用户名=yiyh 密码=1
    操作步骤 操作描述 数 据 期望结果 实际结果 实际结果

    测试状态

    1 输入用户名称,按“登陆”按钮。 用户名=yiyh,密码为空 显示警告信息“请输入用户名和密码!”
    2 输入密码,按“登陆”按钮。 用户名为空,密码=1 显示警告信息“请输入用户名和密码!”
    3
    输入用户名和密码,按“登陆”按钮。
    用户名=yiyh,密码=2
    显示警告信息“请输入用户名和密码!”

    4
    输入用户名和密码,按“登陆”按钮。
    用户名=xxx,密码=1
    显示警告信息“请输入用户名和密码!”
    5
    输入用户名和密码,按“登陆”按钮。
    用户名=xxx,密码=2
    显示警告信息“请输入用户名和密码!”
    6
    输入用户名和密码,按“登陆”按钮。
    用户名=空,密码=空
    显示警告信息“请输入用户名和密码!”
    7
    输入用户名和密码,按“登陆”按钮。
    用户名=yiyh,密码=1
    进入系统页面。
    8
    输入用户名和密码,按“登陆”按钮。
    用户名=Admin,密码=admin
    进入系统维护页面。
    9
    输入用户名和密码,按“登陆”按钮。
    用户名=yiyh',密码=1
    显示警告信息“请输入用户名和密码!”
    10 输入用户名和密码,按“登陆”按钮。
    用户名=yiyh,密码=1'
    显示警告信息“请输入用户名和密码!”
    11 输入用户名和密码,按“重置”按钮。 用户名=yiyh,密码=1 清空输入信息
    测试人员 开发人员 项目负责人


    备注:本用例未考虑“企业代码”的输入情况;测试用例并未涵盖所有的非法输入,如非法输入中可能会有

    “user=*,pw=*”的组合,对回车的默认操作,空格输入,对输入上溢的处理的处理(可能会跳过身份验证) 等等。

    如果你有兴趣,至少可以再补充5-10条左右的输入组合

    (当然,如果步骤超过15步,用例的易操作 性就降低,你可以再创建一个测试用例如TC-TEP_Login_2)。

  • 测试用例设计白皮书--因果图方法

    2008-08-05 16:55:34

     

    一.    方法简介

    1.定义:是一种利用图解法分析输入的各种组合情况,从而设计测试用例的方法,它适合于检查程序输入条件的各种组合情况。
    2.因果图法产生的背景:
    等价类划分法和边界值分析方法都是着重考虑输入条件,但没有考虑输入条件的各种组合、输入条件之间的相互制约关系。这样虽然各种输入条件可能出错的情况已经测试到了,但多个输入条件组合起来可能出错的情况却被忽视了。
    如果在测试时必须考虑输入条件的各种组合,则可能的组合数目将是天文数字,因此必须考虑采用一种适合于描述多种条件的组合、相应产生多个动作的形式来进行测试用例的设计,这就需要利用因果图(逻辑模型)。
    3.因果图介绍
    1) 4种符号分别表示了规格说明中向4种因果关系。

    2) 因果图中使用了简单的逻辑符号,以直线联接左右结点。左结点表示输入状态(或称原因),右结点表示输出状态(或称结果)。
    3) Ci表示原因,通常置于图的左部;ei表示结果,通常在图的右部。Ci和ei均可取值0或1,0表示某状态不出现,1表示某状态出现。
    4. 因果图概念
    1)    关系
    ①恒等:若ci是1,则ei也是1;否则ei为0。
    ②非:若ci是1,则ei是0;否则ei是1。
    ③或:若c1或c2或c3是1,则ei是1;否则ei为0。“或”可有任意个输入。
    ④与:若c1和c2都是1,则ei为1;否则ei为0。“与”也可有任意个输入。
    2)    约束
    输入状态相互之间还可能存在某些依赖关系,称为约束。例如, 某些输入条件本身不可能同时出现。输出状态之间也往往存在约束。在因果图中,用特定的符号标明这些约束。
    A.输入条件的约束有以下4类:
       ① E约束(异):a和b中至多有一个可能为1,即a和b不能同时为1。
       ② I约束(或):a、b和c中至少有一个必须是1,即 a、b 和c不能同时为0。
       ③ O约束(唯一);a和b必须有一个,且仅有1个为1。
       ④R约束(要求):a是1时,b必须是1,即不可能a是1时b是0。
    B.输出条件约束类型
       输出条件的约束只有M约束(强制):若结果a是1,则结果b强制为0。
    5. 采用因果图法设计测试用例的步骤:
    1)分析软件规格说明描述中, 那些是原因(即输入条件或输入条件的等价类),那些是结果(即输出条件), 并给每个原因和结果赋予一个标识符。
    2)分析软件规格说明描述中的语义,找出原因与结果之间, 原因与原因之间对应的关系,根据这些关系,画出因果图。
    3)由于语法或环境限制, 有些原因与原因之间,原因与结果之间的组合情况不可能出现,为表明这些特殊情况, 在因果图上用一些记号表明约束或限制条件。
    4)把因果图转换为判定表。
    5)把判定表的每一列拿出来作为依据,设计测试用例。
    二. 实战演习
    1. 某软件规格说明书包含这样的要求:第一列字符必须是A或B,第二列字符必须是一个数字,在此情况下进行文件的修改,但如果第一列字符不正确,则给出信息L;如果第二列字符不是数字,则给出信息M。
    解答:
    1) 根据题意,原因和结果如下:
           原因:
              1——第一列字符是A;
              2——第一列字符是B;
              3——第二列字符是一数字。
           结果:
              21——修改文件;
              22 ——给出信息L;
              23——给出信息M。
    2) 其对应的因果图如下:
    11为中间节点;考虑到原因1和原因2不可能同时为1,因此在因果图上施加E约束。
    3)根据因果图建立判定表。
     
           表中8种情况的左面两列情况中,原因①和原因②同时为1,这是不可能出现的,故应排除这两种情况。表的最下一栏给出了6种情况的测试用例,这是我们所需要的数据。
    2.有一个处理单价为5角钱的饮料的自动售货机软件测试用例的设计。其规格说明如下:若投入5角钱或1元钱的硬币,押下〖橙汁〗或〖啤酒〗的按钮,则相应的饮料就送出来。若售货机没有零钱找,则一个显示〖零钱找完〗的红灯亮,这时在投入1元硬币并押下按钮后,饮料不送出来而且1元硬币也退出来;若有零钱找,则显示〖零钱找完〗的红灯灭,在送出饮料的同时退还5角硬币。
    1) 分析这一段说明,列出原因和结果
    原因:
    1.售货机有零钱找
    2.投入1元硬币
    3.投入5角硬币
    4.押下橙汁按钮
    5.押下啤酒按钮
    结果:
    21.售货机〖零钱找完〗灯亮   
    22.退还1元硬币
    23.退还5角硬币             
    24.送出橙汁饮料
    25.送出啤酒饮料
    2)画出因果图,如图所示。所有原因结点列在左边,所有结果结点列在右边。建立中间结点,表示处理的中间状态。中间结点:
    11. 投入1元硬币且押下饮料按钮
                    12. 押下〖橙汁〗或〖啤酒〗的按钮
                    13. 应当找5角零钱并且售货机有零钱找
                    14. 钱已付清
    3)转换成判定表:
     
    4) 在判定表中,阴影部分表示因违反约束条件的不可能出现的情况,删去。第16列与第32列因什么动作也没做,也删去。最后可根据剩下的16列作为确定测试用例的依据。
  • Web测试中书写Test Case时要考虑的检查点

    2008-08-05 16:09:34

     

    通常书写Test Case时需要考虑的检查点

    对于屏幕显示来说包括:
    检查显示的布局;
    检查域和按钮的顺序;
    检查域的尺寸;
    检查字体的大小和风格;
    检查文本的含义;
    检查拼写错误;
    检查屏蔽域;
    检查只读域;
    检查图片;
    检查按钮的状态;
    检查按钮的尺寸;
    检查按钮的图标和名字;
    检查是否有重复的图标;
    检查指针是否在第一个可输入域;
    检查TAB键的次序;

    对于域来说包括:
    检查可编辑性;
    检查域间的移动;
    检查分界条件;
    检查有效分界符;
    检查无效分界符;
    检查连续多个有效分界符;
    检查仅一个分界符输入;
    检查多余空格的截取;
    检查只读域和屏蔽域在TAB时的状态;

    对于数字域来说包括:
    检查正数值;
    检查负数值;
    检查零值;
    检查小数点;
    检查特殊字符加数字;
    检查字母加数字;
    检查ASCII值;
    检查重复值;
    检查空值;


    对于字符域来说包括:
    检查仅有字母;
    检查仅有数字;
    检查字母数字;
    检查允许的特殊字符;
    检查禁止的特殊字符;
    检查包含特殊字符的字母数字;
    检查ASCII值;

    对于字母域来说包括:
    检查字母;
    检查数字值;
    检查字母数字值;
    检查特殊字符;
    检查ASCII值;

    对于时间域来说包括:
    检查字符?和/;
    检查
    其他特殊字符;
    检查字母数字值;
    检查正确的格式;
    检查错误的格式;
    检查错误的日期数字;
    检查正确的日期数字;
    检查日历表;

    对于错误信息和警告信息来说:
    检查错误信息和警告信息的含义;
    检查错误信息和警告信息的一致性;
    检查确定位置的错误信息;
    检查错误信息后的光标位置;
    检查所有异常对应的错误信息;
    检查错误信息的格式;

    对于普通的检查来说:
    检查文本域和字符域输入是否左对齐;
    检查数字域输入是否右对齐;
    检查标签的切换;
    检查重复的名字;
    检查可删除的表格;
    检查表格的多选;
    检查过滤器的逻辑性;
    检查多个过滤器的逻辑性;
    检查重复的序列号;
    检查显示切换;
    检查快捷键;
    检查工具栏提示;
    检查日期域是否居中;
    检查选择项的高显;
    检查选择符;
    检查显示窗口的风格统一性;


    对于按键的功能包括:
    New button:
    检查包含next和cancel按键的子窗口的显示;
    检查子窗口显示的内容;
    Add button:
    检查包含save和cancel按键的子窗口的显示;
    Edit button:
    检查在未选择项目情况下点击后的警告信息;
    检查包update和cancel按键的子窗口的显示;
    检查选择的项目是否显示在制定的位置;
    Copy button:
    检查在未选择项目情况下点击后的警告信息;
    检查点击后的确认信息;
    检查插入后的复制数据;
    Delete button:
    检查在未选择项目情况下点击后的警告信息;
    检查点击后的确认信息;
    检查删除后的数据;
    Run button:
    检测运行时的参数窗口;
    检查执行结果;
    检查未选择项目情况下点击后的警告信息;
    Back button:
    检查是否回到上一屏幕;
    Next button:
    检查是否显示下一屏幕;
    Finish button:
    检查数据是否进入
    数据库
    检查完成屏幕的显示;
    Cancel button:
    检查确认信息;
    检查是否有其他键执行同样功能;
    检测是否能能够正确处理;
     

     
  • web测试容易遗漏的通用点

    2008-08-05 16:01:40

     

    1.浏览器的后退按钮
      提交表单一条已经成功提交的记录,back后再提交,看系统会如何处理。
      检查多次使用back健的情况在有back的地方,back,回到原来的页面,再back,重复几次,看是否会报错。

    2.通过修改URL中的参数,向服务器发起请求,看看会有什么样的结果.
    利用一些工具,如http watch,可以记录和捕获向服务器发起的URL请求,然后修改其中的参数向服务器发起请求
    该功能点可以和安全测试结合起来.

    3.对表单多次提交
    对提交按钮快速多次点击提交,看看会不会在数据库中形成多条记录.
    网速或响应快时,这点容易被遗漏,但用户的网络可能慢,很容易多次点击提交

    如果前端做了处理,试试捕获在提交时生成的URL,绕过页面,再次对服务器发起请求,会有什么结果

    4.光标的跳转
    执行操作后,光标是否停留在合适的位置.
    如邮箱登录,输完用户名回车后,光标应该跳转到密码框内.细节问题,但是影响用户感受

    5.tab键是否功能正确
    和光标的跳转类似,特别是在有输入项时,查看tab键的焦点顺序是否正确

    6.对全角/半角符号的输入测试
    有输入项时,要考虑全/半角字条的输入,及GBK字符

  • web测试的几个隐藏点

    2008-08-05 16:00:10

     

      很多时候,基于需求的测试和针对web特有的浏览器兼容性测试、cookie失效的验证,对于测试人员并不陌生。但实际上,与浏览器相关的测试内容远不止这些。

      举一个例子来说,很多时候我们都非常明确页面上的所有入口,并对这些入口设计了大量的用例,而浏览器的地址栏却常常会被我们忽略。实际上,url的输入意义远比我们意识中的重要,忽略了url的测试,很容易造成安全上的隐患。

      再进一步的说,浏览器的前进、后退、刷新按钮同样是测试人员需要关注的点。前进、后退在用户登录、注销信息的测试中应用最为频繁。而刷新,往往容易被忽视,但其同样是bug的“温床”。在最近的一次测试中,我就遇到过在我删除某条记录系统提示删除成功后,点击“刷新”按钮,页面提示出错的情况。出现该现象的原因就在于页面试图去取已删除的内容,导致出现异常。其实这个问题应该隐藏了比较久的时间,但是却一直未被发现,足可见我们都忽视了“刷新”的测试。

      除了上述的内容外,我相信一定还存在很多我们在测试中忽视的内容,而这些点的补充,是我们每一个人的责任!

  • web测试之url测试

    2008-08-05 15:49:33

     

            我们平时在对url进行测试的时候可能不知道采用什么方法测试,可能点点链接指定页面出现就ok了,其实这个是远远不够的,我说说我平时测试常用的一些方法,供大家参考。当然也欢迎大家说大家的一些测试的方法加以补充,将url测试尽可能覆盖全。

    1.修改url中的get参数
            要对url进行测试首先要对url的组成搞成明白,正所谓知己知彼方能百战不殆,废话少说,比如一下url http://www.javathinker.org/main.jsp?bc=showessay.jsp&id=703 
            前面部分我就不用多解释了,做web的银应该都知道其含义,我就说说?后面的部分,其实这部分是客户端向服务器请求的参数,一般get请求会将参数放在url中,这时我们就必须注意了,我们试图修改这些参数看能否从服务获得相应的内容,如果服务端没有做相应的处理,用户可能就会通过该方式获得一些其他用户的保密信息(这算是所谓的安全性测试吗?哈哈);
            2.是否存在孤立的页面,这个测试可使用一些辅助的工具,比如:Link checker等;
            3.链接是否能到达指定的页面,这个测试属于最基本的测试,这个主要注意:点击链接在本页面打开,点击在新页面打开(比如页面主流程中的帮助链接,点击後就应该在新页面打开而不会影响当前的操作流程);
            4.涉及到一些安全性选择的登录还要在url中校验http和https协议请求是否正常;
            5.涉及到埋点等功能的url测试,还要注意点击的方式,比如单击,右键打开,直接输入url等方式请求(有些js处理的时候可能仅仅调用onclick事件)
            6.错误url请求页面的出错页面校验,比如url参数错误是否会给用户一个比较友好的错误提示页面等。


  • web测试

    2008-08-05 15:42:54

     

            1. 页面链接检查:每一个链接是否都有对应的页面,并且页面之间切换正确。

            2. 相关性检查:删除/增加一项会不会对其他项产生影响,如果产生影响,这些影响是否都正确。

            3. 检查按钮的功能是否正确:如update、cancel、delete、save等功能是否正确。

            4. 字符串长度检查:输入超出需求所说明的字符串长度的内容,看系统是否检查字符串长度,会不会出错。

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

            6. 标点符号检查:输入内容包括各种标点符号,特别是空格、各种引号、回车键。看系统处理是否正确。

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

            8. 检查带出信息的完整性:在查看信息和update信息时,查看所填写的信息是不是全部带出,带出信息和添加的是否一致。

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

            10. 检查删除功能:在一些可以一次删除多个信息的地方,不选择任何信息,按”delete”,看系统如何处理,会否出错;然后选择一个和多个信息,进行删除,看是否正确处理。

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

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

            13. 重复提交表单:一条已经成功提交的纪录,back后再提交,看看系统是否做了处理。

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

            15. search检查:在有search功能的地方输入系统存在和不存在的内容,看search结果是否正确。如果可以输入多个search条件,可以同时添加合理和不合理的条件,看系统处理是否正确。

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

            17. 上传下载文件检查:上传下载文件的功能是否实现,上传文件是否能打开。对上传文件的格式有何规定,系统是否有解释信息,并检查系统是否能够做到。

            18. 必填项检查:应该填写的项没有填写时系统是否都做了处理,对必填项是否有提示信息,如在必填项前加* 

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

            20. 回车键检查:在输入结束后直接按回车键,看系统处理如何,会否报错。

  • WEB测试中常用的链接测试工具

    2008-08-05 15:39:33

     

    搜索引擎蜘蛛是通过链接爬行搜索的,如果某个链接失败,是无效死链接,搜索引擎就无法抓取该页面,也进入不了再下一个层次的页面。特别是今天的网站都倾向于做得很大,层次、链接丰富,而又由于网站更新跟不上等原因,更容易造起死链接。因此无效链接检测工具对于大型网站来说是有必要经常使用的。

     

       

    一、目前,最流行、最知名的工具是Xenulink sleuth(链接侦探),它可以检查到无效的链接、图象、框架、插件、背景、图象地图、样式表等等,提供详细报告。需要下载到本机使用。

     

        评价:可以测试公网Web,也可以测试内网web,与很多在线测试工具相比,最大的优势是能够测试内网web系统;缺点是测试的速度比较慢,尤其是测试外网的时候。

     

    二、如果你想用在线检测工具,推荐W3Clink checkerhttp://validator.w3.org/checklink)(链接检测器),虽然没有Xenu那么多功能,但如果想进行快速检测还是很有效的。

     

    评价:英文界面,速度还可以;最后结果比较模糊,不太明了。

     

    三、http://www.nsclick.com,这个在线测试工具速度比较快,而且有效链接和无效链接都很容易区分,缺点就是不能够进行内网测试

    以上几款都是免费工具

     

  • 271/212>