发布新日志

  • WEB测试资料

    2008-08-05 15:09:18

     


    1页面部分
    4Dtj8|T?5x$s&c{0F121408(1) 页面清单是否完整(是否已经将所需要的页面全部都列出来了)51Testing软件测试网#xZ+vN*n+{
    (2) 页面是否显示(在不同分辨率下页面是否存在,在不同浏览器版本中页面是是否显示)51Testing软件测试网 rv@6[B;q(W4v u
    (3) 页面在窗口中的显示是否正确、美观(在调整浏览器窗口大小时,屏幕刷新是否正确)
    5] hA:q1D121408(4) 页面特殊效果(如特殊字体效果、动画效果)是否显示
    j4GZz6z~Sx121408(5) 页面特殊效果显示是否正确
    +[s$d Dv)Lw12140851Testing软件测试网T&u1xrQ7j/d
    2 页面元素部分
    &X4j$r HO+BYv)~$l6g121408(1)页面元素清单(为实现功能,是否将所需要的元素全部都列出来了,如按钮、单选框、复选框、列表框、超连接、输入框等等)51Testing软件测试网[6z5w}5R'K6A$c
    (2)素是否显示(元素是否存在)51Testing软件测试网r:Y$M5Dz5`L
    (3)页面元素是否显示正确(主要针对文字、图形、签章)
    SQ(^{ \f121408(4)页面元素的外形、摆放位置(如按钮、列表框、核选框、输入框、超连接等)
    .M [KT:rF6AJ rxA%Ma121408(5) 页面元素基本功能是否实现(如文字特效、动画特效、按钮、超连接)51Testing软件测试网7N?rF'V k"c
    (6) 页面元素的容错性列表(如输入框、时间列表或日历)
    %Zh5Z+G9d121408(7) 页面元素的容错性是否存在51Testing软件测试网w#y!n7Bi%K f l$Y_A0|
    (8) 页面元素的容错性是否正确
    y Z.v2C pV%]'r121408
    clM9Pj BJ1214083 功能部分51Testing软件测试网vr)P.{0Uc;h
    (1) 数据初始化是否执行51Testing软件测试网'D j0\%_/ob
    (2) 数据初始化是否正确
    EC)I:y0C)~*QE)kKL121408(3) 数据处理功能是否执行51Testing软件测试网R _vBLCD Q
    (4) 数据处理功能是否正确
    c8CjX7sD$e2J6B6\121408(5) 数据保存是否执行51Testing软件测试网@2fIU*o6v)Le6lB(a
    (6) 数据保存是否正确51Testing软件测试网"_ D#h#rOMD*l,h
    (7) 是否对
    其他功能有影响
    S ?-S`Jw o6l121408(8) 如果影响其他功能,系统能否作出正确的反应51Testing软件测试网9[U!N_%}N|
    (9) 其他错误51Testing软件测试网AZ _ [yF'V4c3xo&B
    (10) 对模块的具体功能进行
    测试时可以列出功能模块的所有功能,进行排列组合,测试所有情况51Testing软件测试网d&| C5iy ?-L
    如:某一功能模块具有最基本的增删改查功能,则需要进行以下测试51Testing软件测试网!Z(Q rwU}S
    单项功能测试(增加、修改、查询、删除)
    7}z8PJ2[9g121408增加——>增加——>增加 (连续增加测试)
    .j2X FP8o B"af ]}Z121408增加——>删除
    F I:lL|-X}(e2c KJ5{121408增加——>删除——>增加 (新增加的内容与删除内容一致)
    )T$q,f0QQ;h121408增加——>修改——>删除51Testing软件测试网\Gz"]q
    修改——>修改——>修改 (连续修改测试)51Testing软件测试网(\+[7]!zF"^?g o
    修改——>增加 (新增加的内容与修改前内容一致)
    ~:r%~LB5D121408修改——>删除
    #W j$d.H6[121408修改——>删除——>增加 (新增加的内容与删除内容一致)
    B_BDKq,P%u121408删除——>删除——>删除 (连续删除测试)
    @u|wH/kh121408(11)查询功能分为两种情况,验证操作结果。51Testing软件测试网F/s?H4M&x
    一、打开页面时自动显示结果,则不特别强调;51Testing软件测试网,|~4VCw_3~
    二、需要手工操作进行查询,则每次在其他功能完成后进行。
    5JN`DI K1214084 提示信息51Testing软件测试网A`P!V9Q2{Y
    (1) 成功、失败提示 51Testing软件测试网;LD QIV'a2`d
    (2) 操作结果提示51Testing软件测试网)` TTl#@;w0H1O N vI
    (3) 确认提示
    r_V0Ol]9t/^a0~121408(4) 危险操作、重要操作提示
    5LWw GDe-f;S"|1\h121408(5) 返回页面 提示后显示的页面
    7nbF/n }.^UZ.U Wa1214085 容错性51Testing软件测试网#u-Q E*e*Nmu B
    注意以下几种情况
    Ke8x}}^ O121408(1) 为空、非空
    Ki,]zf^121408(2) 唯一性51Testing软件测试网gPC+Ct"`0q
    (3 )字长、格式
    HKx&|#uMV121408(4) 数字、邮政编码、金额、电话、电子邮件、ID号、密码51Testing软件测试网 w&I7d4H Y6m S
    (5) 日期、时间51Testing软件测试网%K;ar5g"Y
    (6) 特殊字符 (对
    数据库)英文单、双引号,&符号
    zdte]M1214086 权限部分
    3miat S121408功能权限: 指定用户可以使用那些功能,不能使用那些功能51Testing软件测试网7ytC_^r5nv
    数据权限: 指定用户可以处理那些数据,不可以处理那些数据。可
    qC|O7@6` oO ^121408以合并到功能测试
    |&G.M }+P@qy*^E P121408操作权限: 在逻辑关系上,操作前后顺序、数据处理情况。可以合
    I5EE5E8v121408并到功能测试51Testing软件测试网!g,N]xGs.?p
    权限变化: 可以合并到功能测试51Testing软件测试网-XL-z}d'L;I
    51Testing软件测试网L@ j6fl7b
    (1) 功能权限是否存在51Testing软件测试网 @c"RF,H;bR
    (2 )功能权限是否正确
    C1W]J)au121408(3) 数据权限是否存在
    +`}.o2]k6x+j"sqb121408(4) 数据权限是否正确51Testing软件测试网/S.`LkP V_0^ ld
    (5)操作权限是否存在51Testing软件测试网._V S*[,]#tZ1u5^#v(z
    (6) 操作权限是否正确51Testing软件测试网4h'o#k1F!D,Rj
    (7) 引起权限变化的功能列表
    a4x5Di9QWI)z{121408(8) 功能权限变化还是数据权限变化,或两者兼有51Testing软件测试网9F] h.g;o9h9k
    (9) 权限变化是否正确51Testing软件测试网Jg![-D8n\@N;[ {R ?"]
    51Testing软件测试网9m5\p:t'j4[iUO
    7 键盘操作51Testing软件测试网`;C,i-xbMB"C&Km
    (1) Tab键的使用
    'K.r%{D8?3I V121408(2) 上下方向键的使用51Testing软件测试网*B a.~)Yy6?6`G
    (3) Enter键的使用51Testing软件测试网0VZ&?+ml @S8m9{T
    (4) 系统设定快捷键的使用(如果设置有快捷键)
    {2d4kp(sB&?V^x121408
    mHN CM J8^ {y}1214088 测试中还应注意的其他事项51Testing软件测试网f9D*Y~!x
    (6) 完整性:是否是一个整体,没有功能缺损
    ok U[$a121408(7) 易用性:使用是否方便
    O-W8`:yb/Jh3o121408(8) 一致性:类似的问题用类似的方法处理51Testing软件测试网K&Z!Qb`
    (9) 提示信息:提示信息是否完整、正确、详细51Testing软件测试网n{V6nip z,i
    (10) 帮助信息:是否提供帮助信息,帮助信息的表现形式(页面文字、提示信息、帮助文件),帮助信息是否正确、详细
    f0kR%|`D/Pu)Q121408(11) 兼容性:包括操作系统兼容和应用
    软件兼容,可能还包括硬件兼容51Testing软件测试网5HWMTo b O1_-R
    (12) 可扩展性:是否由升级的余地,是否保留了接口51Testing软件测试网7lOf/m L'stT
    (13) 稳定性:运行所需的软硬件配置,占用资源情况,出现问题时的容错性,对数据的保护51Testing软件测试网4Tw&e6k-H#T
    (14) 运行速度:运行的快慢,带宽占用情况
    ({B LY5no12140851Testing软件测试网5U%N*S1`O.|(V
    有几点:
    M lQi(~1214081.功能点测试:是否满足需求所要求的功能51Testing软件测试网9fQ![T Lj%V
    2.字符串长度检查: 输入超出需求所说明的字符串长度的内容, 看系统是否检查字符串长度,会不会出错.
    `+K |b7C6J(i1214083.字符类型检查: 在应该输入指定类型的内容的地方输入其他类型的内容(如在应该输入整型的地方输入其他字符类型),看系统是否检查字符类型,会否报错.51Testing软件测试网l,R Ez']7i7\{
    4.标点符号检查: 输入内容包括各种标点符号,特别是空格,各种引号,回车键.看系统处理是否正确.51Testing软件测试网,_PF6DE
    5.中文字符处理: 在可以输入中文的系统输入中文,看会否出现乱码或出错.
    p L#m%b4]y%n1214086.信息重复: 在一些需要命名,且名字应该唯一的信息输入重复的名字或ID,看系统有没有处理,会否报错,重名包括是否区分大小写,以及在输入内容的前后输入空格,系统是否作出正确处理.
    {*b yyBZ1214087.界面测试:界面的正确性、一致性、友好性、易用性。
    1FlB#y4I B |4I121408
    TW0OtolL2j~121408用户界面测试是从最终的使用者用户的角度来看软件,软件难以理解,不易使用就是软件缺陷。可以从以下几个方面重点来检查用户界面:
    m C!Ydr s%i P.?1214081.易用性检查:确保软件易于理解,方便使用。
    #X(| ?O eP1214082.一致性检查:
    ~/}%Ic0x'u121408a.注意系统页面的风格是否一致,如字的大小、颜色、字体要相同。51Testing软件测试网-ca7Z0K6pa
    b.提示信息的表达方式是否一致。51Testing软件测试网E%w6sI-S6R0I
    c.按钮排列顺序是否一致。51Testing软件测试网5BU \GKI%t
    d.back, cancel等按钮跳转页面处理是否一致。
    ht,X6Iqa)pZN121408e.各字段的名称,位置、长度、类型是否和设计文档要求一致,如Employee No和LoginName不一致。
    v ?7I)g"M Wf1b1214083.正确性检查:检查页面上的form, button, table, header, footer,提示信息,还有其他文字拼写,句子的语法等是否正确。
    O(N1e,O,E/H'w0^#X#O1214084.友好性检查:51Testing软件测试网A Bfhx
    a.提示信息是否友好.51Testing软件测试网9TG F*c7Lk
    b.系统应该在用户执行错误的操作之前提出警告,提示信息.51Testing软件测试网Z5z pS @6B
    c.页面分辨率检查,在各种分辨率浏览系统检查系统界面友好性。
    v\p2s.Nz5W&R1214085.合理性检查:做delete, update, add, cancel, back等操作后,查看信息回到的页面是否合理。
    i9s5LP fv ?!vf1214086.检查本地化是否通过:英文版不应该有中文信息,英文
    翻译准确,专业。51Testing软件测试网]a _k6r|d
    7.页面最大化检查:测试最大化/最小化/还原时页面是否做了对应的处理。

     
     

  • 浅析-测试用例的优先级

    2008-08-05 14:55:05

     

      从未有足够的时间做所有我们需要做的事情,这是在软件项目,尤其在测试中的一个普通的话题。假使你在可用的有限时间内,你如何知道你的测试工作做的最好?你知道当应用程序发布时,总会有些遗漏的缺陷没有被发现。对于测试而言,目标是通过改进产品质量使风险减到最小,并且这可以部分的通过建造一套具体的测试用例来将应用程序按照它的速度完成等方法实现。

      测试用例的定义:

      1. 为一个为特定目标而开发一组测试输入,执行条件和期望结果,例如测试某个程序路径或核实是否满足某个特定的需求。
      2. 指定输入,预期结果和一组测试项的执行条件的文档 (IEEE Std 829-1983)。

      当然,你将发现在项目的生命周期里的每一个应用程序的版本上执行你全部的测试用例是很困难的。但是你将如何知道哪个测试用例必须在每一个版本中执行,什么应该被执行,同时如果你有时间的话,什么又可以被执行?

      给你的测试用例划分优先级别

      你的应用程序不需要十全十美,但它必须迎合你目标用户的需求和期望。为了了解你项目的期望,你需要确定什么是应用程序中最重要的,目标和风险又是什么。

      Sue Bartlett在“How to Find the Level of Quality Your Sponsor Wants”一文中详细的讨论了这个问题,她在文中注解到:“当我们在详细的计划,设计或编码之前沟通质量目标时,我们有一个更好的机会来避免在最后时刻的质量不匹配,那意味着迎合计划,弥补花费并且赢利将有一个更好的成功的机会。”

      为了测试计划的目的,在你项目版本的进度下,测试执行的组织和安排你的测试用例将帮助达到这些目标。作为这种组织的一部分,我们要考虑每一个测试用例的优先级别。根据优先级别分组你的测试用例将帮助你决定不同类型的版本需要什么样的测试用例,因此计算需要的时间。如果你只有有限的时间,你可以查看什么是最合适。

      Ross Collard在"Use Case Testing\"一文中说:“测试用例的前10%到15%可以发现75%到90%的重要缺陷”。
      测试用例的优先级划分将帮助确定找出了这前10%到15%的测试用例。

      如何划分测试用例的优先级别

      你曾查看过多少次你的测试用例并且能够很容易的挑选出最重要的一个小的子集?这个答案可能是不经常。停止思考“所有的测试用例都是同等重要”这个问题是非常困难的。当设计测试用例时,分配优先级别是不容易,并且在项目期间里不一定是静止的。然而,我们可以通过构造一个划分优先级别流程的例子来开始处理划分测试用例优先级别的第一步。让我们假设你刚刚根据功能说明书, 用例和其他一些关于你应用程序的目标行为和能力的信息源完成了建立测试用例。现在是时候来为每个测试用例分配一个优先级别了。

      测试用例的优先级别

      首先,你必须确定什么是你优先级别的类型和其暗示着什么。就我们的目的来说, 我们将用一个假设开始,那就是我们可能发现的缺陷的严重程度和那些相应测试用例的优先级别之间是平行的。

      1 –小版本确认测试(Build Verification Tests (BVTs):也叫做“冒烟测试”,一组你想先运行的以确定这个给出的小版本是否可以测试的测试用例。如果你不能访问每一个功能区域或执行其他测试用例依赖的基本操作,那么在执行这个优先的测试用例之前,试图做其他任何的测试都是没有意义的,因为他们大多数肯定要失败。

      2 – 高(Highs):最常执行以保证功能性是稳定的,目标的行为和能力可以正常的工作,和重要的错误和边界被测试的测试用例的集合。

      3 – 中(Mediums):这是使给出的功能区域或功能变得更详细,检查功能的多数方面包括边界,错误和配置测试的测试用例。
           
      4 – 低(Lows):这是通常最少被执行的测试用例。但这并不意味着这些测试都不重要,只是说他们在项目的生命期间里不是常常被运行,例如GUI,错误信息,可用性,压力和性能测试

      我们将测试用例分成4类:BVTs,高,中和低。现在的问题是将测试用例分到不同的优先级别里。毕竟,优先级别将指出哪些测试用例被认为是需要更频繁的执行的,哪些又不是。

      怎样着手分配优先级别

      1)随意地分配:
      基于如果你没有足够的时间测试却又至少要保证所有的产品需求已经被确认可以在设想的良好状况下像它们被期望的那样工作的想法,前面这3 步将让你任意的分组测试用例,如果你也停下来思考每个测试用例的测试的内容,它们都将变的很重要。因此只需要:
      (a)  把你所有功能性验证(或基本路径(Happy Path))的测试标注为高优先级别
      (b)  把你所有错误和边界值或确认测试标注为中优先级别
      (c)  把你所有非功能性的测试(例如性能和可用性)标注为低优先级别.

      2)提升和降级:
      并非所有的功能性测试都一样的重要,并且和边界和非功能性测试一样的重要。思考一下测试的重要性及相对于其他同等优先级别的测试,你想要检查这个功能的频率-考虑质量目标和你项目的需求。
      (a) 把功能性验证测试分为两组:重要和不是十分重要。
      (b) 将“不是十分重要”的能性验证测试降级为中优先级别
      (c) 把错误和边界测试分成两组:重要和不是十分重要
      (d) 将“重要”的错误和边界测试升级为高优先级别
      (e) 把非功能性测试分成两组:重要和不是十分重要
      (f) 把“重要”的非功能性测试升级为中优先级别
      (g) 针对每组高,中和低优先级别的测试用例,重复划分和升级/降级流程直到你达到一个点,可以在不同优先级别之间移动的测试用例的数量到最小。

      3)识别小版本验证测试用例(Build Verification Tests):
      现在,为了确保小版本是可以测试的并准备好给小组其他成员开始测试,哪些测试用例是必须在每个小版本中都检查呢?
      (a) 将好优先级别的测试用例分成两组:严重和重要的
      (b) 将“严重”的高优先级的测试用例升级为BVT优先级

      注意:不要先识别BVT测试用例!BVT只是高优先级别测试用例的精选,它们已经被确定为对系统和测试是非常重要的。

      在这个流程的最后,就是要检查优先级别的百分比分布情况是:BVT为10-15%,高为20-30%,,中为40-60%,低为10-15% 。

      在升级和降级测试用例时,需要考虑的方面是用户将要求这个功能或功能性的频率是怎样。同样的,对于用户日常的或月尾的活动而言,这种行为的严重性是如何。Robyn Brilliant在测试进度报告中提供了一个清单,你可以在考虑降级或升级测试用例的时候使用

      使用从一到五的一个刻度,从最严重到最少的严重程度,量化可靠性风险如下:
      (a) 这个功能的失败将影响用户
      (b) 这个功能的失败将给公司造成重大的影响
      (c) 这个功能的失败将引起一个潜在的延期给客户
      (d) 这个功能的失败对公司将有较小的影响
      (e) 这个功能的失败没有任何影响
      这个和其相似的刻度可以帮助你达到你测试用例优先级别划分的最后一步。

      总结

      这是一个简化的划分测试用例优先级别过程的例子。然而,在快速组织测试用例和安排测试进度和工作量,及制订项目计划时需要完成哪些测试用例等方面,它可以给你很多帮助。

      记住,你怎样给你的测试任务划分优先级和如何执行测试用例将取决于你在你的项目周期的位置。当你朝发布前进并通过调查和观察确定危险和缺陷出现的地方时,你可能会重新给你的测试用例划分优先级别。向上为每个阶段建立你的测试目标并保证他们在你的测试用例的优先级别上被反映,当它在解释并执行你的计划时,将使你的生活变得容易得多。
     
      最后,拥有划分了优先级别的测试用例也为你潜在的,待定的自动化项目给出了一个好的起点。比如,自动化BVT中的测试用例,度量收益,改进测试自动化,自动化高优先级的测试用例等方面。

  • 理解Load Average做好压力测试

    2008-08-05 14:34:48

     

      SIP的第四期结束了,因为控制策略的丰富,早先的的压力测试结果已经无法反映在高并发和高压力下SIP的运行状况,因此需要重新作压力测试。跟在测试人员后面做了快一周的压力测试,压力测试的报告也正式出炉,本来也就算是告一段落,但第二天测试人员说要修改报告,由于这次作压力测试的同学是第一次作,有一个指标没有注意,因此需要修改几个测试结果。那个没有注意的指标就是load average,他和我一样开始只是注意了CPU,内存的使用状况,而没有太注意这个指标,这个指标与他们通常的限制(10左右)有差别。重新测试的结果由于这个指标被要求压低,最后的报告显然不如原来的好看。自己也没有深入过压力测试,但是觉得不搞明白对将来机器配置和扩容都会有影响,因此去问了DBA和SA,得到的结果相差很大,看来不得不自己去找找问题的根本所在了。

      通过下面的几个部分的了解,可以一步一步的找出Load Average在压力测试中真正的作用。

      CPU时间片

      为了提高程序执行效率,大家在很多应用中都采用了多线程模式,这样可以将原来的序列化执行变为并行执行,任务的分解以及并行执行能够极大地提高程序的运行效率。但这都是代码级别的表现,而硬件是如何支持的呢?那就要靠CPU的时间片模式来说明这一切。程序的任何指令的执行往往都会要竞争CPU这个最宝贵的资源,不论你的程序分成了多少个线程去执行不同的任务,他们都必须排队等待获取这个资源来计算和处理命令。先看看单CPU的情况。下面两图描述了时间片模式和非时间片模式下的线程执行的情况:

                            图 1 非时间片线程执行情况

                            图 2 非时间片线程执行情况

      在图一中可以看到,任何线程如果都排队等待CPU资源的获取,那么所谓的多线程就没有任何实际意义。图二中的CPU Manager只是我虚拟的一个角色,由它来分配和管理CPU的使用状况,此时多线程将会在运行过程中都有机会得到CPU资源,也真正实现了在单CPU的情况下实现多线程并行处理。

      多CPU的情况只是单CPU的扩展,当所有的CPU都满负荷运作的时候,就会对每一个CPU采用时间片的方式来提高效率。

      在Linux的内核处理过程中,每一个进程默认会有一个固定的时间片来执行命令(默认为1/100秒),这段时间内进程被分配到CPU,然后独占使用。如果使用完,同时未到时间片的规定时间,那么就主动放弃CPU的占用,如果到时间片尚未完成工作,那么CPU的使用权也会被收回,进程将会被中断挂起等待下一个时间片。

      CPU利用率和Load Average的区别

      压力测试不仅需要对业务场景的并发用户等压力参数作模拟,同时也需要在压力测试过程中随时关注机器的性能情况,来确保压力测试的有效性。当服务器长期处于一种超负荷的情况下运行,所能接收的压力并不是我们所认为的可接受的压力。就好比项目经理在给一个人估工作量的时候,每天都让这个人工作12个小时,那么所制定的项目计划就不是一个合理的计划,那个人迟早会垮掉,而影响整体的项目进度。

      CPU利用率在过去常常被我们这些外行认为是判断机器是否已经到了满负荷的一个标准,看到50%-60%的使用率就认为机器就已经压到了临界了。CPU利用率,顾名思义就是对于CPU的使用状况,这是对一个时间段内CPU使用状况的统计,通过这个指标可以看出在某一个时间段内CPU被占用的情况,如果被占用时间很高,那么就需要考虑CPU是否已经处于超负荷运作,长期超负荷运作对于机器本身来说是一种损害,因此必须将CPU的利用率控制在一定的比例下,以保证机器的正常运作。

      Load Average是CPU的Load,它所包含的信息不是CPU的使用率状况,而是在一段时间内CPU正在处理以及等待CPU处理的进程数之和的统计信息,也就是CPU使用队列的长度的统计信息。为什么要统计这个信息,这个信息的对于压力测试的影响究竟是怎么样的,那就通过一个类比来解释CPU利用率和Load Average的区别以及对于压力测试的指导意义。

      我们将CPU就类比为电话亭,每一个进程都是一个需要打电话的人。现在一共有4个电话亭(就好比我们的机器有4核),有10个人需要打电话。现在使用电话的规则是管理员会按照顺序给每一个人轮流分配1分钟的使用电话时间,如果使用者在1分钟内使用完毕,那么可以立刻将电话使用权返还给管理员,如果到了1分钟电话使用者还没有使用完毕,那么需要重新排队,等待再次分配使用。

                            图 3 电话使用场景

      上图中对于使用电话的用户又作了一次分类,1min的代表这些使用者占用电话时间小于等于1min,2min表示使用者占用电话时间小于等于2min,以此类推。根据电话使用规则,1min的用户只需要得到一次分配即可完成通话,而其他两类用户需要排队两次到三次。

      电话的利用率 =  sum (active use cpu time)/period

      每一个分配到电话的使用者使用电话时间的总和去除以统计的时间段。这里需要注意的是是使用电话的时间总和(sum(active use cpu time)),这与占用时间的总和(sum(occupy cpu time))是有区别的。(例如一个用户得到了一分钟的使用权,在10秒钟内打了电话,然后去查询号码本花了20秒钟,再用剩下的30秒打了另一个电话,那么占用了电话1分钟,实际只是使用了40秒)

      电话的Average Load体现的是在某一统计时间段内,所有使用电话的人加上等待电话分配的人一个平均统计。

      电话利用率的统计能够反映的是电话被使用的情况,当电话长期处于被使用而没有的到足够的时间休息间歇,那么对于电话硬件来说是一种超负荷的运作,需要调整使用频度。而电话Average Load却从另一个角度来展现对于电话使用状态的描述,Average Load越高说明对于电话资源的竞争越激烈,电话资源比较短缺。对于资源的申请和维护其实也是需要很大的成本,所以在这种高Average Load的情况下电话资源的长期“热竞争”也是对于硬件的一种损害。

      低利用率的情况下是否会有高Load Average的情况产生呢?理解占有时间和使用时间就可以知道,当分配时间片以后,是否使用完全取决于使用者,因此完全可能出现低利用率高Load Average的情况。由此来看,仅仅从CPU的使用率来判断CPU是否处于一种超负荷的工作状态还是不够的,必须结合Load Average来全局的看CPU的使用情况和申请情况。

      所以回过头来再看测试部对于Load Average的要求,在我们机器为8个CPU的情况下,控制在10 Load左右,也就是每一个CPU正在处理一个请求,同时还有2个在等待处理。看了看网上很多人的介绍一般来说Load简单的计算就是2* CPU个数减去1-2左右(这个只是网上看来的,未必是一个标准)。

      补充几点:

      1.对于CPU利用率和CPU Load Average的结果来判断性能问题。首先低CPU利用率不表明CPU不是瓶颈,竞争CPU的队列长期保持较长也是CPU超负荷的一种表现。对于应用来说可能会去花时间在I/O,Socket等方面,那么可以考虑是否后这些硬件的速度影响了整体的效率。

      这里最好的样板范例就是我在测试中发现的一个现象:SIP当前在处理过程中,为了提高处理效率,将控制策略以及计数信息都放置在Memcached Cache里面,当我将Memcached Cache配置扩容一倍以后,CPU的利用率以及Load都有所下降,其实也就是在处理任务的过程中,等待Socket的返回对于CPU的竞争也产生了影响。

      2.未来多CPU编程的重要性。现在服务器的CPU都是多CPU了,我们的服务器处理能力已经不再按照摩尔定律来发展。就我上面提到的电话亭场景来看,对于三种不同时间需求的用户来说,采用不同的分配顺序,我们可看到的Load Average就会有不同。假设我们统计Load的时间段为2分钟,如果将电话分配的顺序按照:1min的用户,2min的用户,3min的用户来分配,那么我们的Load Average将会最低,采用其他顺序将会有不同的结果。所以未来的多CPU编程可以更好的提高CPU的利用率,让程序跑的更快。

      以上所提到的内容未必都是很准确或者正确,如果有任何的偏差也请大家指出,可以纠正一些不清楚的概念。

     


  • 为什么用例不是“功能”?

    2008-08-05 14:20:51

     

      多数人从用例开始就走入了迷途,也许是用例图和数据流图的相似性导致人们把用例定义为简单的功能或者菜单项。不论原因是什么,这都是新手最容易犯的错误。

      

      图 1 错误的方式:用例是菜单项或者功能

      这幅图有什么错误?用最简单的定义,我倾向于把用例看作是关于使用系统作某些有用的事情的方式的故事。利用这个定义,是不是所有的“用例”都是独立的有用的呢?

      答案当然是不是,在这个例子中,用例表示了系统需要做的所有的事情,但是他们也描述了用户需要通过系统去做的一件单独的事情:定购。所有保留的元素都是这一个用例的备选支流,它们是在定购时可能发生的步骤。在只做一件有用的事情的地方,只应该有一个用例。图1就是一个功能分解的例子,或者“四轮马车”格式的例子――一个参与者在中间,周围是一圈用例。

      这是一个常见的问题,为什么人们会陷入这个陷阱呢?我们有一个有对定购的内在需要,并且在不存在的地方如果我们需要那么就利用它。在功能分解的情况下,我们有一种自然倾向把问题分解为越来越小的块。有一种天真的想法那就是把用例分解为越来越小的单位会简化问题。这种理解是完全错误的。当我们分解用例时,实际上会把问题复杂化。

      问题在这里
      用例的目的是描述某人某物如何使用系统来完成对他们有价值的事情,它描述了系统在概念层次上做什么,使我们足够理解系统以便决定系统是否要做恰当的事。用例是我们能够形成一个系统的概念模型。


      再看看图1,现在问你自己,如果我从来没有定购过,我想通过系统查询定单的状态吗?这是不太可能的。或者如果我从来没有定购过,我想变更订单吗?不,也许不。通常这些东西只有当我订购过的时候才对我有用。然而,为了系统能够允许我订购,这些都是必要的。

      把系统分解为越来越小的用例模糊了系统的真实目的,极端情况下,我们将以得到一堆隔绝的行为的细致末节而告终。结果我们不能说明系统做什么。这就像看到一辆被拆解为零件的汽车,或许你会说这是辆汽车,你也知道零件们是有用的,但是你确实不能说明他们如何组装在一起。

      当使用用例的时候,记住用例是考虑整个系统的一种方式,并且要组织成可管理的功能块,这些功能块完成一些有价值的事情。为了得到正确的用例集合,问你自己一个问题:“参与者实际上想使用系统做什么?”

      如果你在想图1的改进后的版本是什么样的,图2展示了改进后的版本。

      

      图 2一种更好,更加简单的方法: 合并功能以反映对参与者的真正价值
      这一个用例包含了以前的图中所分解为用例的所有“功能”。你也许会问为什么这样做比较好,答案很简单:它关注于客户想要系统提供的价值,而不是我们在系统内部如何细分和构造的。如果把所有的功能分解成单独的用例,你将迫使客户(为系统付钱的人)把分解过的用例装配成一件对他们有意义的东西,以便理解系统所描述的是不是他们所想要的(即他们想为之付钱的)。


      关注价值
      很多小用例是常见的问题,尤其是在一个习惯于功能分解的团队中,他们的用例名称读起来就象是一个系统所执行的功能的列表,如“输入订单”、“审查订单”、“取消订单”、“履行订单”,这起先听起来也不是很坏,但不仅仅这些。即使对于一个小规模的订购系统,用例列表也很容易达到上百个,如果谁走到了这一步,他们不久就会淹死在用例的海洋中,尤其是当系统规模确实比较大时,在这种情况下,你最终也许会有几百个,甚至上前个用例。


      这么做有什么错呢?
      这些用例的价值将会被错过。用例的唯一目的是为参与者产生价值。在一定层次上能够输入订单也是某种有价值的事情,但是,如果这些订单从来不被履行,那还有价值吗?也许没有吧。
      怎样输入订单、修改订单以及取消订单等等,所有这些事情都是与客户真正想要做的事情有关的,那就是接受订购的货物。这些活动对公司想要的事情是必须的,那就是收到货款。

      这种看起来是支离破碎的没有任何明显关系的功能集合的另一个问题是导致难以使用的系统。很多系统跟这个很类似,它们只是一堆杂乱的特性。记住,用例帮助我们关注与什么是真正重要的,也就是具有真正价值的事物,并且使我们能够围绕那些元素来定义系统。用例不要是系统按照功能分解的蓝图。


      举例
      考虑一个你在互联网上用过的一个电子商务系统,当你登录这个站点的时候,你的目标可能是查找产品相关的信息、选择要购买的产品、安排支付及送货约定。在做这些事的过程当中,你可能会改变主意、输入错误的信息以至不得不修改它、改变邮递或送货地址,以及其他的一些东西。如果这个网站不允许你通过一种吸引人的方式来找到并订购产品,你也许不会完成你的订购,更不用说再次来到这个网站。

      当建造一个系统时,始终要记住用例的核心定义:关于采用某种方式使用系统来做有价值的事情的故事。如果你能够实施这个定义,展示用户希望通过系统获得的价值,然后创建反映这些价值的用例的时候,你的系统将会更好地满足用户的期望。

  • Beta测试属于验收测试吗?

    2008-08-05 14:19:32

     

      Beta测试属于验收测试么?很多朋友问过我这个问题,首先这个回答是十分肯定的,当然是,非常是,肯定是!

      所谓验收测试(acceptance test)是软件产品完成了功能测试和系统测试之后, 在产品发布之前所进行的软件测试活动, 它是技术测试的最后一个阶段,通过了验收测试,产品就会进入发布阶段. 验收测试一般根据产品规格说明书严格检查产品, 逐行逐字地对照说明书上对软件产品所做出的各方面要求, 确保所开发的软件产品符合用户的各项要求.

      通过综合测试之后,软件已完全组装起来,接口方面的错误也已排除,软件测试的最后一步——验收测试即可开始。验收测试应检查软件能否按合同要求进行工作,即是否满足软件需求说明书中的确认标准。

      1.验收测试标准   实现软件确认要通过一系列墨盒测试。验收测试同样需要制订测试计划和过程,测试计划应规定测试的种类和测试进度,测试过程则定义一些特殊的测试用例,旨在说明软件与需求是否一致。无是计划还是过程,都应该着重考虑软件是否满足合同规定的所有功能和性能,文档资料是否完整、准确人机界面和其他方面(例如,可移植性、兼容性、错误恢复能力和可维护性等)是否令用户满意。 验收测试的结果有两种可能,一种是功能和性能指标满足软件需求说明的要求,用户可以接受;另一种是软件不满足软件需求说明的要求,用户无法接受。项目进行到这个阶段才发现严重错误和偏差一般很难在预定的工期内改正,因此必须与用户协商,寻求一个妥善解决问题的方法。

      2.配置复审   验收测试的另一个重要环节是配置复审。复审的目的在于保证软件配置齐全、分类有序,并且包括软件维护所必须的细节。

      3.α、β测试  事实上,软件开发人员不可能完全预见用户实际使用程序的情况。例如,用户可能错误的理解命令,或提供一些奇怪的数据组合,亦可能对设计者自认明了的输出信息迷惑不解,等等。因此,软件是否真正满足最终用户的要求,应由用户进行一系列“验收测试”。验收测试既可以是非正式的测试,也可以有计划、有系统的测试。有时,验收测试长达数周甚至数月,不断暴露错误,导致开发延期。一个软件产品,可能拥有众多用户,不可能由每个用户验收,此时多采用称为α、β测试的过程,以期发现那些似乎只有最终用户才能发现的问题。 α测试是指软件开发公司组织内部人员模拟各类用户行对即将面市软件产品(称为α版本)进行测试,试图发现错误并修正。α测试的关键在于尽可能逼真地模拟实际运行环境和用户对软件产品的操作并尽最大努力涵盖所有可能的 用户操作方式。经过α测试调整的软件产品称为β版本。紧随其后的β测试是指软件开发公司组织各方面的典型用户在日常工作中实际使用β版本,并要求用户报告异常情况、提出批评意见。然后软件开发公司再对β版本进行改错和完善。 一般包括功能度、安全可靠性、易用性、可扩充性、兼容性、效率、资源占用率、用户文档八个方面。  

      施验收测试的常用策略有三种,它们分别是:

      · 正式验收

      · 非正式验收或 Alpha 测试

      · Beta 测试

      显然,无论是Alpha测试还是Beta测试,都是属于验收测试。


  • Alpha和Beta测试简介

    2008-08-05 13:37:34

     

    大型通用软件,在正式发布前,通常需要执行Alpha和Beta测试,目的是从实际终端用户的使用角度,对软件的功能和性能进行测试,以发现可能只有最终用户才能发现的错误。

    Alpha测试是由一个用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环境下进行的受控测试,Alpha测试不能由程序员或测试员完成。Alpha测试发现的错误,可以在测试现场立刻反馈给开发人员,由开发人员及时分析和处理。目的是评价软件产品的功能、可使用性、可靠性、性能和支持。尤其注重产品的界面和特色。Alpha测试可以从软件产品编码结束之后开始,或在模块(子系统)测试完成后开始,也可以在确认测试过程中产品达到一定的稳定和可靠程度之后再开始。有关的手册(草稿)等应该在Alpha测试前准备好。

    Beta测试是软件的多个用户在一个或多个用户的实际使用环境下进行的测试。开发者通常不在测试现场,Beta测试不能由程序员或测试员完成。因而,Beta测试是在开发者无法控制的环境下进行的软件现场应用。在Beta测试中,由用户记下遇到的所有问题,包括真实的以及主管认定的,定期向开发者报告,开发者在综合用户的报告后,做出修改,最后将软件产品交付给全体用户使用。Beta测试着重于产品的支持性,包括文档、客户培训和支持产品的生产能力。只有当Alpha测试达到一定的可靠程度后,才能开始Beta测试。由于Beta测试的主要目标是测试可支持性,所以Beta测试应该尽可能由主持产品发行的人员来管理。

    由于Alpha和Beta测试的组织难度大,测试费用高,测试的随机性强、测试周期跨度较长,测试质量和测试效率难于保证,所以,很多专业软件可能不再进行Beta测试。随着测试技术的提高,以及专业测试服务机构的大量涌现,很多软件的Beta测试外包给这些专业测试机构进行测试。

  • 从测试角度看用户手册在软件质量中的地位(转)

    2008-07-01 13:54:43

    对于软件,开发者往往只注意到其功能和性能,而忽略了用户手册。其实用户手册也是衡量软件好坏的一个重要标准。好的用户手册可以帮助用户快速入门,是用户正确、充分使用软件的前提。对于开发者来说,好的用户手册可以减少培训和售后服务的费用。所以在测试中,不能忽略用户手册的重要性,应从以下多个方面考察用户手册的质量。

    用户手册的完整性

     

      重点考察用户手册内容的全面性与完整性,从总体上把握用户手册的质量。这一项看似简单,但在实际测试中我们发现,很多开发商还是无法做到这一基本标准。很多软件由于开发过于仓卒,在付诸使用时,用户手册中缺少关于某些模块的说明,让用户使用起来比较困

    难。在测试工程师的眼里,优秀的用户手册内容应该是包括软件的所有功能模块。

    用户手册的描述与软件实际功能的一致性

     

      考察用户手册与软件实际功能的一致程度。当确认用户手册基本完整后,我们还要注意用户手册与实际功能描述是否一致。这种问题往往是由用户手册跟不上软件版本的更新速度造成的。对用户来说,容易造成对描述不一致的功能的误解和苫螅?进而影响用户对软件的使用。优秀的用户手册应该根据软件的升级而及时更新,手册描述应该与软件实际功能保持一致。

     

    用户手册的易理解性

     

      考察用户手册对关键、重要的操作有无图文说明,文字、图表,是否易于理解。对于关键、重要的操作仅仅只有文字说明肯定是不够的,应该附以图表使说明更为直观、明了。优秀的用户手册应该是图文并举,易于理解。

     

    用户手册提供学习操作的实例

     

      考察对主要功能和关键操作提供的应用实例是否丰富,提供的实例描述是否详细。当前大量软件的用户手册只有简单的图文说明,而无应用实例。这样的用户手册看起来就像是软件界面的简单拷贝,对于用户来说,实际上没有什么帮助。例如财务软件,用户手册就应该提供具体建帐实例及具体帐务处理的实例,这样才能使用户看完用户手册后,能够独立完成新帐套的建立并逐渐学会使用软件处理帐务信息。优秀的用户手册不仅要对主要功能和关键操作提供应用实例,而且对实例的描述应做到详细、充分,易于用户理解。

     

    用户手册的印刷与包装质量

     

      考察用户手册包装的商品化程度,印刷质量。有些用户手册是简单打印、装订而成,过于粗糙,不易于用户保存。优秀的用户手册应提供商品化包装,并且印刷精美。

     

      软件的质量是由各个方面构成的,用户手册就是其中重要的一环。特别是在当前软件业快速增长的时期,软件开发者过于注重功能与性能而忽略用户手册,使得用户手册的质量问题尤显突出。所以对于测试人员应该充分认识到用户手册的重要性,严把用户手册的质量关,以促使软件整体质量有一个提高。

     

272/2<12
Open Toolbar