发布新日志

  • 手机名片薄(黑盒)测试

    2007-09-12 14:29:13

    写在前面的话:
         做了快一年的黑盒测试,细谈起来够痛苦的了。这里我将部分的测试心得和测试方法,注意要点写出来,供大家批判和探讨。
          由于各手机的MMI界面及基本功能不一致,这里列出部分测试方案,敬请各位批评,指正。
            嘿嘿,如果写的好的话,我会继续努力,挣两个稿费,买两件新衣服玩玩哈。
          感谢大家捧场。

    1、参照手机:GSM制式

    2、参考标准:
           GB/T 18905.5-2002 软件工程产品评价第五部分评价者用的过程
           BG/T 16260-1996  信息技术软件产品评价质量特性及其使用指南

    3、评判依据:

        各公司的标准定制的不一样,有些公司可能更细化些,在这里仅作一个粗略依据。产品的好坏由用户说的算,一切为用户服务!
        依据:软件研制规范,软件需求说明书,用户手册(罗嗦两句,国外的说明书写的很细,比如不可以用电熨斗烧咖啡,国内的使用说明书绝对不会这么写的,但是使用说明书上具有的功能在产品上如果没有的话,可就是不符合项喽)。

    4、基本功能说明:

    添加、删除、修改、查找
    设置(各MMI不一样,在这里不进行举例)
    批量操作:SIM卡记录复制到手机,手机记录复制到SIM卡,SIM卡记录移动到手机,手机记录移动到SIM卡……

    5、功能测试

        在这里只讨论名片夹的功能性和可靠性的测试,对名片夹模块的易用性,效率,维护性以及可移植性不做考虑。

        按是否通过测试,则分为两种,顾名思意即通过测试和失败测试。通常的失败测试,也就是说要设计测试用例,迫使软件出错。通过测试则是要保证软件实现基本功能。

    5.1 基本功能测试:

        手机输入法有很多种,比如T9,拼音,字母,数字等等。在编写测试用例的时候,首先要保证各输入法是否能正常输入;能否正常保存;在进行错误输入的时候,是否有响应的提示。在这里举出几个例子:

    5.1.1、存储在SIM卡上的记录

    5.1.1.1、添加:
        1)姓名输入:
        i)是否可以使用任意输入法添加汉字、字母、数字,达到姓名允许的最大字节,并能正常保存。
        ii)是否可以使用任意输入法添加汉字、字母、数字,在没有进行输入时,是否有警告提示或是否可以正常保存(根据产品要求)。
        iii)是否可以使用任意输入法添加汉字、字母、数字,超过姓名允许的最大字节,是否有告警提?是否可以正常保存。
        iV)是否可以进行汉字、字母、数字的混合输入,并重复i~iii,是否有异常。

        2)电话号码的输入:
           i)是否可输入数字至最大值,并可正常保存。
           ii)在不输入数字时,进行保存时,是否有告警提示。
           iii)是否可以输入汉字,字母,此时是否有告警提示或异常。
           iv)是否可以输入特殊字符,如+、P、*、#,是否可以正常保存。这里给介绍个出错的案例:连续输入多个*,P或+,不按电话的号码的正常顺序进行输入,试试,比如"++139***P123",看看是个什么样的效果,是否显示正常。

        3)在输入过程中按返回键、挂机键、或翻合翻盖、电源键,是否有告警提示或异常。

        4)在各MMI界面下,各按键功能是否正常。

        5)待机界面下直接输入数字至最大值,是否可以正常保存。

        6)待机界面下直接输入数字即特殊字符(+,P),是否可以正常保存。

        7)将1),6)步骤进行一下排列组合,查看是否有异常情况。

       1对2,2对4,4对16,所以测试用例经常的几千条,几万条根本就不希奇,一个名片夹写上1K条也之是写了个小部分。呵呵,罗嗦话又一堆。继续......

        5.1.1.2 修改

        1)单条记录的修改:
        a) 是否可以对单条记录进行修改,包括姓名和数字,并重复5.1.1.1中的1), 2),3),4)各步骤。
         b) 连续将多条记录的内容(姓名或电话号码)修改成一样。
         c) 手机或SIM卡的所有记录全部一样。(此条仅作为一条测试手段,在实际的应用中无实际意义。)(05.3.19修改)

        2)连续多条记录进行修改
        此条的测试目的是对软件进行压力测试。

    5.1.1.3 删除

        1)对单条记录进行删除
        i)删除后,列表显示是否正常;数量是否正确。
        ii)SIM卡记录为空时,进行删除时,是否有告警提示。
        iii)SIM卡记录仅为一条时,删除后,是否有SIM卡内容为空的提示。
        iv)在删除过程中,各功能键是否正常。
        v)在删除过程中,进行中断操作,是否正常,比如挂机键,电源键等等。

        2)对多条记录进行删除,目的是对软件的进行压力测试。
        i)连续对SIM卡的多条记录进行删除,是否出现异常情况。
        ii)删除SIM卡记录直至为空时,是否有异常。
        iii)在删除过程中,各功能键是否正常。

    5.1.1.4 查找
        由于各手机的查找功能定制的不同,在这里不做累述。

    5.1.2 存储在手机上的记录
        存储在手机上的记录和存储在SIM卡上的记录的测试用例基本相同。在测试过程中需要留心的是SIM卡的存储容量以及手机的存储容量,由于软件的定制不同,往往在不同处易出现故障。比如SIM卡的姓名栏可存储5个汉字,或8个字母、数字,电话号码可以存20位,手机的姓名栏目可以存12个汉字,20个字母、数字,电话号码可以存30位。在这个不同点之间就容易出现故障。

    5.1.3 批量操作

    5.1.3.1 SIM卡记录复制到手机

      1) 1条SIM卡的记录复制到手机。要求:

           i)姓名为1个字母或数字或一个字,手机号码是1个数字或特殊字符(+,p);
           ii)姓名为满的字母或数字或字符,手机号码是满的数字或特殊字符(+,p)。

      2)将SIM卡的记录全部复制到手机。前提:SIM卡的容量有限,有的是70(如动感地带,易通卡),有的是大容量卡有200甚至250条的记录容量(如全球通,各地区的SIM卡容量不通,在测试过程中要考虑到对卡的兼容性),保证手机的每条记录是满记录,即姓名栏的字母,数字或汉字为满,号码栏的数字为满。将记录全部复制到手机,查看是否有异常。通产这时候问题就出来了,因为是批量性的复制,和手机的处理能力是有一定关系,此处比较容易出问题。

      3)手机记录的容量通常比SIM卡的容量要大许多,这里在谈一下该处的测试要点。
           前题条件:SIM卡的每条记录全满,即姓名和电话的容量全满。
           i)SIM卡记录全部复制到手机,直至手机记录满,是否有相关的提示,例如:手机记录满,手机空间不足,是否继续进行复制;部分记录将会丢失的字样;
           ii)手机是否可以读取大容量的SIM卡,并包括全部的手机记录,并能进行正常的查找。此处,可以连续的单条删除手机或SIM卡记录,直至删空,查看是否有异常。

    5.1.3.2 手机记录复制到SIM卡

    说明:手机的记录由于设计不同,有的手机是一个姓名对应1条记录,有的是一个姓名对应多条记录,具体根据实际情况。
         i)将1条手机记录复制到SIM卡上,是否正确复制。
    注意:手机记录中的姓名栏可能和SIM卡姓名栏的字数不相同,这时需要注意异常现象。另有的手机支持的是一个姓名下有若干条手机记录,是否可以将若干条记录全部复制到SIM,且无异常现象。
         ii) 将全部满的手机记录,即手机存储的条目数满,姓名栏的字全满,手机号码的字数全满,全部复制到SIM卡,查看是否有异常。
    注意:SIM卡的空间和手机空间容量在相等,或不相等的情况下,在复制的过程中均有提示,例如:SIM卡空间满;空间不足;空间不足,如进行复制,会有部分数据丢失等告警提示。

    5.1.3.3 SIM卡记录移动到手机
         SIM卡记录移动到手机同5.1.3.1 SIM卡记录复制到手机的测试方法基本相同。注意的是在移动后,SIM卡内容清空。

    5.1.3.4手机记录移动到SIM卡
          手机记录移动到SIM卡同5.1.3.3 SIM卡记录移动到手机的测试方法基本相同。由于各手机设计不同,有一个姓名对应一条记录和一个姓名对应若干条记录的情况,注意在移动过程中出现异常现象。

    5.1.3.5 综述
        从上面的测试方法已包含了等价测试和边界测试。下面将对测试过程中加入的其它环节进行描述。

    1)中断:短信,MMS,来电,闹钟,功能键,挂机键,翻盖等等。在进行上述操作时,在每一个界面下,均需进行中断操作,并根据软件需求说明,对异常情况进行定位。
    2)在进行每项操作时,均应有提示,确认是否进行该操作。由于各手机软件需求不同,在测试过程中可根据实际情况或根据用户反馈情况进行。
    3)在SIM卡记录或手机记录满的情况下,添加记录,查看是否有相关提示或异常。

    5.2 失败测试
    根据手机名片簿的实际情况,通过某些方式或方法迫使软件出错。在测试案例的设计中仍按重复测试,压迫测试以及重负测试这三种测试理念进行测试。


    5.2.1 重复测试

    1)添加
         a)在待机状态下连续添加电话号码,并保存至SIM卡/手机,操作次数大于40次;
        b)添加菜单内连续添加电话号码,并保存至SIM卡/手机,操作次数大于40次。

    2)删除
         a)电话簿列表下,连续逐条删除电话号码;
         b)在保证SIM卡/ 手机容量满的情况下,连续删除SIM卡/手机全部记录,在进行手机全部内容复制到SIM卡上的操作。操作次数大于20次。

    3)查找
         根据手机的实际功能,进行连续性查找。查找次数大于20次。

    4)修改
         a)连续逐条将记录修改成同一内容的记录,操作次数大于5;
         b)连续逐条修改记录,将姓名栏内的内容修改至最大,并将电话号码号码修改至最大。操作次数大于20次。

        说明:在这里涉及到操作次数的问题,操作次数过大或过小,都会失去它的实际意义。操作次数定义在40次,是根据SIM卡的容量定义的,通常SIM卡的容量是在70左右。连续删除SIM卡/手机的全部记录的20次操作,测试目的是检验内存是否溢出或不足。这项操作也可以定义成50次,甚至更多。即使检测出软件存在问题,但是进行软件更改的成本就会更高,甚至造成代码引入的BUG,总体来讲,得不偿失。

    5.2.2 压迫测试
        压迫测试是指软件再不够理想的条件下运行——内存小,磁盘空间少,CPU速度慢等等。
        从经验来看,压迫测试和重复测试相结合,测试的效果比较好。在名片夹中主要是要注意SIM卡容量和手机容量的关系。有部分SIM卡的容量比较大,在200,250条甚至更高。在测试过程中,主要主意的一个问题就是尽量在SIM卡和手机容量慢的情况下进行添加,删除,修改,查找等操作。另一点就是操作的次数不能太少,也尽量不要太大。

    5.2.3 重负测试
         举例几个例子:比如如插上充电器;在低电压时,插上充电器;电池容量满后,继续充电并测试等等。

    5.2.4 其它
         在这里,仅仅举几个测试用例。

         1)在名片簿列表下,连续按方向键,进行读取列表;
         2)在名片簿列表下,快速插拔充电器;
         3)输入非正常字符进行存储。
         上述用例的目的就是在模仿用户在使用过程中容易或非正常情况下出现的问题。

    5.3 集成测试
         根据软件需求,检查名片簿与那部分模块相关。例如呼叫(直接呼叫,IP呼叫,三方通话),MMS,短消息等等

         在这里针对名片簿的测试,采用的是增值式集成测试。通过名片簿与其它模块的相关关系,检测测试名片簿与相关模块在接口上是否存在BUG。在测试过程中,首先测试是否满足基本功能,其实是多次反复调用相关模块,检验模块接口是否有问题存在。
  • sysbench的安装和性能测试

    2007-09-12 14:10:40

     sysbench是一个模块化的、跨平台、多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况。它主要包括以下几种方式的测试:
    1、cpu性能
    2、磁盘io性能
    3、调度程序性能
    4、内存分配及传输速度
    5、POSIX线程性能
    6、数据库性能(OLTP基准测试)
            目前sysbench主要支持 MySQL,pgsql,oracle 这3种数据库。

    一、安装
            首先,在 http://sourceforge.net/projects/sysbench 下载源码包。
            接下来,按照以下步骤安装:

    tar zxf sysbench-0.4.8.tar.gz
    cd sysbench-0.4.8
    ./configure && make && make install
    strip /usr/local/bin/sysbench

            以上方法适用于 MySQL 安装在标准默认目录下的情况,如果 MySQL 并不是安装在标准目录下的话,那么就需要自己指定 MySQL 的路径了。比如我的 MySQL 喜欢自己安装在 /usr/local/mysql 下,则按照以下方法编译:

    /configure --with-mysql-includes=/usr/local/mysql/include --with-mysql-libs=/usr/local/mysql/lib && make && make install

            当然了,用上面的参数编译的话,就要确保你的 MySQL lib目录下有对应的 so 文件,如果没有,可以自己下载 devel 或者 share 包来安装。
            另外,如果想要让 sysbench 支持 pgsql/oracle 的话,就需要在编译的时候加上参数
    --with-pgsql
    或者
    --with-oracle
            这2个参数默认是关闭的,只有 MySQL 是默认支持的。

    二、开始测试
            编译成功之后,就要开始测试各种性能了,测试的方法官网网站上也提到一些,但涉及到 OLTP 测试的部分却不够准确。在这里我大致提一下:
    1、cpu性能测试

    sysbench --test=cpu --cpu-max-prime=20000 run

            cpu测试主要是进行素数的加法运算,在上面的例子中,指定了最大的素数为 20000,自己可以根据机器cpu的性能来适当调整数值。

    2、线程测试

    sysbench --test=threads --num-threads=64 --thread-yields=100 --thread-locks=2 run

    3、磁盘IO性能测试

    sysbench --test=fileio --num-threads=16 --file-total-size=3G --file-test-mode=rndrw prepare
    sysbench --test=fileio --num-threads=16 --file-total-size=3G --file-test-mode=rndrw run
    sysbench --test=fileio --num-threads=16 --file-total-size=3G --file-test-mode=rndrw cleanup

            上述参数指定了最大创建16个线程,创建的文件总大小为3G,文件读写模式为随机读。

    4、内存测试

    sysbench --test=memory --memory-block-size=8k --memory-total-size=4G run

            上述参数指定了本次测试整个过程是在内存中传输 4G 的数据量,每个 block 大小为 8K。

    5、OLTP测试

    sysbench --test=oltp --mysql-table-engine=myisam --oltp-table-size=1000000 --mysql-socket=/tmp/mysql.sock --mysql-user=test --mysql-host=localhost --mysql-password=test prepare

            上述参数指定了本次测试的表存储引擎类型为 myisam,这里需要注意的是,官方网站上的参数有一处有误,即 --mysql-table-engine,官方网站上写的是 --mysql-table-type,这个应该是没有及时更新导致的。另外,指定了表最大记录数为 1000000,其他参数就很好理解了,主要是指定登录方式。测试 OLTP 时,可以自己先创建数据库 sbtest,或者自己用参数 --mysql-db 来指定其他数据库。--mysql-table-engine 还可以指定为 innodb 等 MySQL 支持的表存储引擎类型。

  • 软件回归测试及其实践

    2007-09-12 10:02:02


    来源:赛宝软件评测中心 作者:信息产业部电子第五研究所 李丹 刘杰

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

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

    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。
  • 测试的招聘与面试!

    2007-09-11 16:38:58

    最近工作一直很忙,也很累,正如那句话说的“疲惫的身体,疲惫的心”。但是那么累,我却过的是那么的开心。前两天在测试时代上看到一些测试的招聘信息,突然让我回忆起测试同行问过我关于测试的招聘与面试怎么知道是真是假,面对多家招聘公司的选择,怎么去判断自己的选择是正确的呢?今天突发奇想,觉的可以记录一些东西,因此便有了这个随笔

     

    今天记录下面两个问题的分析

    1、  怎么从招聘信息分析公司对测试这个职位的了解?

    2、  怎么知道所面试的公司是否适合自己?

     

    从招聘测试的招聘信息和面谈可以了解招聘公司对测试工作的理解和态度 .

    分析点 :

    1)      如果招聘信息要求应聘者了解一些开发流程、测试流程、测试技术(如黑盒测试、白盒测试等等),可见这个公司了解测试这个工作岗位。

    2)      在上面第一条的基础上,如果招聘信息要求应聘者熟悉测试工具的使用,可见这个公司在使用自动化技术或者有这个打算。

    3)      如果招聘信息要求应聘者要有很好的沟通能力、表达能力、协调能力、适应能力、学习能力,可见这个公司的企业文化比较人文化(大家可以互相交流意见)。

    4)      如果招聘信息详细描述包含了两部分:岗位名称和岗位职责,并且招聘信息描述正确、排版美观,说明简洁明了,可见这个公司人事管理规范。


    面谈的时候,招聘公司是否重视测试、懂的测试这个职位,从这下面这几个方面就可以有些了解:

    NO1 :测试的领导是否做过测试工作。

    很多公司管理者的技术能力是在程序员的时代得到的,这些人走上管理岗位后,如果没有持续的学习,就会根本不了解测试是怎么回事,有什么价值,在他们心目中,只有开发人员做的事情才是重要的,可见的。他们之所以招人做测试是因为软件的质量实在太差,客户的不满让他们无法忍受。面对测试狗屁不通的测试经理或者高级经理做测试工作,后果是:首先,努力得不到肯定,工作成果得不到尊重。接着,会发现成长的机会很少,因为领导既然不懂测试,也就不知道需要提高什么样的技能,既不要求你,也不支持你。你只好自己学习,而且难以获得支持和肯定。

     

    NO2 :测试的管理是否规范

    招聘单位是否重视软件质量,从对待开发、测试的管理、执行是否规范就可以看出。测试在整个项目的介入、测试工作的评审,测试报告、对待严重 bug 的处理;对测试人员的考核、工作职责定位是否合理等等就可以了解这个公司测试大体执行情况。

     

    NO3 :知己知彼

    看看自己目前的能力是否能胜任所应聘的岗位,看看公司的企业文化、办公环境是否能适应,看看公司的福利待遇是否能接受了。正如 testage 论坛上关河发起的讨论“ 测试工程师希望什么样的工作环境?”嘿嘿,我的回答是:

    嘿嘿,对于目前的我来说,我希望在下面这样条件的公司做测试工作:

    1 、公司的开发流程是按照正规流程走:需求分析 -- 概要设计 -- 详细设计 -- 单元测试 -- 集成测试 -- 系统测试 -- 验收测试,并对每一阶段的成果物进行有效的评审。因为:把时间花在做正确的事情上才是正确有效的工作方式。

    2 、公司要重视软件的质量,测试可以参与到开发的整个活动过程,进行软件开发全过程测试。因为:测试对软件开发的过程、进度,对所测试软件产生的原因(即用户需求)以及使用的场景了解(即用户为什么要这么做)越清晰,测试的工作才能是准确、有效和高效的。

    3 、公司要有懂的测试工作、理解测试工作的人,特别是测试、开发的领导者。因为:对牛弹琴,牛到死了都不知道你是在干嘛,琴弹的在好都没有办法领悟和理解。

    4 、公司有学习氛围、有良好的沟通环境,大家可以互相的交流自己的思想、经验和对工作成果的意见。因为:有些工作,经过交流会得出新的、更好、更合理有效的处理方法。开发人员和测试人员有效、友好的沟通工作建议和经验会使整个团队的研发水平、测试水平、工作效率、工作质量向上发展。

    5 、公司对测试人员的绩效考核是正确合理的,既不能用其它工种(如:开发人员、技术支持人员)的绩效考核方式来考核测试人员的工作,绩效考核的目的是激励员工工作的积极性。

    6 、公司能够长期生存,公司领导能够规划好整个公司的发展方向、测试部门领导能够很好的规划部门的发展方向。

    7 、公司的生意好好的,能接很多的项目进行研发。

  • 性能测试工程师的面试题

    2007-09-11 13:58:54

     

      昨天受到支付宝某位老大的威胁,帮他翻译一个性能测试工程师面试题,一翻译发现多是loadrunner的使用的基础知识,虽然我一贯的观点是loadrunner不等于性能测试,但是对于一个的loadrunner使用基础还是有摸底的作用的,因此把题目发出来。其中觉得有些题目比较rz,因此替换并修改了一写,希望对面试和被面试者都有用吧。^o^

    1.什么是负载测试?什么是性能测试?
     
    2.性能测试包含了哪些测试(至少举出3种)
     
    3.简述性能测试的步骤
     
    4.简述使用Loadrunner的步骤
     
    5.什么时候可以开始执行性能测试?
     
    6.LoadRunner由哪些部件组成?
     
    7.你使用LoadRunner的哪个部件来录制脚本?
     
    8.LoadRunner的哪个部件可以模拟多用户并发下回放脚本?
     
    9.什么是集合点?设置集合点有什么意义?Loadrunner中设置集合点的函数是哪个?
     
    10.什么是场景?场景的重要性有哪些?如何设置场景?
     
    11.请解释一下如何录制web脚本?
     
    12.为什么要创建参数?如何创建参数?
     
    13.什么是关联?请解释一下自动关联和手动关联的不同。
     
    14.你如何找出哪里需要关联?请给一些你所在项目的实例。
     
    15.你在哪里设置自动关联选项?
     
    16.哪个函数是用来截取虚拟用户脚本中的动态值?(手工管联)
     
    17.你在VUGen中何时选择关闭日志?何时选择标准和扩展日志?
     
    18.你如何调试LoadRunner脚本?
     
    19你在LR中如何编写自定义函数?请给出一些你在以前进行的项目中编写的函数。
     
    20.在运行设置下你能更改那些设置?
     
    21.你在不同的环境下如何设置迭代?
     
    22.你如何在负载测试模式下执行功能测试
     
    23.什么是逐步递增?你如何来设置?
     
    24.以线程方式运行的虚拟用户有哪些优点?
     
    25.当你需要在出错时停止执行脚本,你怎么做?
     
    26.响应时间和吞吐量之间的关系是什么?
     
    27.说明一下如何在LR中配置系统计数器?
     
    28.你如何识别性能瓶颈?
     
    29.如果web服务器、数据库以及网络都正常,问题会出在哪里?
     
    30.如何发现web服务器的相关问题?
     
    31.如何发现数据库的相关问题?
     
    32.解释所有web录制配置?
     
    33.解释一下覆盖图和关联图的区别?
     
    34.你如何设计负载?标准是什么?
     
    35.Vuser_init中包括什么内容?
     
    36. Vuser_end中包括什么内容?
     
    37.什么是think time?think_time有什么用?
     
    38.标准日志和扩展日志的区别是什么?
     
    39.解释以下函数及他们的不同之处。
    Lr_debug_message
    Lr_output_message
    Lr_error_message
    Lrd_stmt
    Lrd_fetch
     
    40.什么是吞吐量?
     
    41.场景设置有哪几种方法?

  • 测试工作

    2007-09-11 12:05:00

    下面几点给做测试的朋友参考一下:
    1。钱肯定少过开发人员,除非你工作七,八年才能拿年薪10W以上,一般的软件测试工程师很难上6K以上,开发人员工作四,五年后拿7,8K是太多数的。
    2。加班的现象可以说是很普遍,周一到周五随时加班是很正常的,周末肯定有一天要加班。
    3。不管怎么样努力和用什么测试效果的数据说明,领导还是不太重视测试部,领导认为我们测试的没有什么技术含量。但是我们已经在流程上改进很大,使用测试管理工具和自动化测试工具来提高测试生产力等等,这些努力的结果好象只有我们的老大才得分比较高,我们下面的小兵就只有吃苦的份。
    4。团队合作精神比较差,都是做技术的人的通病,以为你在一间公司呆久了,就很牛B一样,说话口气难于接受,好象现在公司就是他的一样。这个问题在几间公司里面的测试队伍中得到证实。在工作之余,很少团队一起聚餐或是出外游玩的机会,好象大家就知道上班---吃中午饭--上班--吃晚饭---加班---下班回家---睡觉的简单模式。
    5。人际关系和沟通技能都很重要,这一点不用我多说,大家都知道的。
    6。还有一点要提醒测试人员的是:做测试容易懒惰,因为重复性的工作比较多,然后在公司呆着好好的,什么都不想学和提高了,这样容易使你在软件的测试面比较狭窄了,其实你到其他的公司面试的时候,才发现自己很多不知道,不懂的。
    7。我们做测试几年了,都不想老是停留在执行测试,写测试用例,设计测试计划,写测试脚本,评审开发/测试文档上,写缺陷报告,写测试报告,管理和维护测试工具。但是上面的几点工作后,我们软件测试人员还能做些什么?


     怎么样提高软件测试员自身素质培养?
      (1) 首先,应对软件测试感兴趣和对自己有自信,如果具备了这两点,那么在开发过程中不管遇到什么样的困难,我相信你一定能克服。
      (2) 善于怀疑,世界上没有绝对正确的,总有错误的地方,具有叛逆心理,别人认为不可能发生的事,我却认为可能发生。别人认为是对的,我却认为不是对的。
      (3) 打破砂锅问到底的精神,对于只出现过一次的bug,一定找出原因,不解决誓不罢休。
      (4) 保持一个良好的心情,否则可能无法把测试作好。不要把生活中的不愉快的情绪带到工作中来
      (5) 做测试时要细心,不是所有的bug都能很容易的找出,一定要细心才能找出这些bug。
      (6) 灵活一些,聪明一点,多制造一些容易产生bug的例子。
      (7) 在有条件的情况下,多和客户沟通,他们身上有你所需要的。
      (8) 设身处地为客户着想,从他们的角度去测试系统。
      (9) 不要让程序员,以“这种情况不可能发生”这句话说服你,相反,你应该去说服他,告诉他在客户心里,并不是这样的。
      (10) 考虑问题要全面,结合客户的需求、业务的流程、和系统的构架,等多方面考虑问题。
      (11) 提出问题不要复杂化,这一点和前面的有点矛盾,如果你是一新手,暂时不要管这一点,因为最终将有你的小组成员讨论解决。
      (12) 追求完美,对于新测试员来说,努力的追求完美,这对你很好,尽管有些事无法做到,但你应该去尝试。
      (13) 幽默感,能和开发小组很好的沟通是关键,试着给你的开发小组找一个“BUG杀手”,或对他们说“我简直不敢相信,你写的程序居然到现在没有找到BUG”。
      (14) 到此是不是对测试很有兴趣呢?不过我要告诉你,测试过程中有酸甜苦辣,其中的滋味只有你知道,也许你会感到枯燥,要学会放松自己,去溜冰或做你喜欢做的事,不过,别放弃,因为你的自信告诉过你“你会是很优秀的测试员”不是吗?

      我们常见软件测试的技巧 :

      软件测试虽然辛苦,但是掌握了一定的技巧之后将使你事半功倍。

      (1) 边界测试,测试用户输入框中的数值的最大数和最小数,以及为空时的情况。

      (2) 非法测试,例如在输入数字的地方输入字母。

      (3) 跟踪测试,跟踪一条数据的流程,保证数据的正确性。

      (4) 在开始测试时应保证数据的正确性,然后在从系统中找出各种BUG。

      (5) 接口测试,程序往往在接口的地方很容易发生错误,要在此模块测试勿掉以轻心。

      (6) 代码重用测试,在开发过程中有些模块功能几乎相同,程序员在重用代码时可能忘记在原有代码上修改或修改不全面,而造成的错误。

      (7) 突发事件测试,服务器上可能发生意外情况的测试。

      (8) 外界环境测试,有些系统在开发时依赖于另外一个系统,当另外一个系统发生错误时, 这个系统所受到的影响的情况。

      (9) 在程序员刚修复Bug之后的地方,再找一找,往往程序员只修复报告出来的缺陷而不去考虑别的功能在修改时可能会重新造成错误。

      (10) 认真做好测试记录在做完一天的测试记录之后,第二天再根据第一天的测试记录重复测试你会发现有未修正的错误。

      (11) 文字测试,如果在系统中有用词不当的地方,我想这是不应该的。

      (12) 系统兼容测试,例如有些程序在IE6能运行正常,到IE5下不能运行。有些程序在WIN2000下能运行,而到WIN98却不能运行。像一些很特别的用户去使用系统,你很有可能发现BUG。

      (13) 用户的易用性测试,往往用户的需求是不断的变化的,而其中的一部份变化的原因,是有用户操作上不方便引起的。

      软件测试是软件开发中的重中之重,没有一点可以马虎的,在项目管理过程,我强调的时是每个过程的每一个环节都要进行测试,保证系统在每个阶段可以控制。因为软件测试中考虑的问题基本上是项目管理中考虑的问题。
      我认为在项目管理中考虑的一些问题应该是在软件测试时有些体现,体现的内容是软件测试的一些侧重点,具体说,软件测试是事务性的,而项目管理是策略性,一些策略性的东西必须在一些事务性的事务上来实现。
262/2<12

我的存档

数据统计

  • 访问量: 10213
  • 日志数: 28
  • 图片数: 1
  • 建立时间: 2007-09-11
  • 更新时间: 2007-09-14

RSS订阅

Open Toolbar