我的最新日志

  • 内存泄露测试

    2008-1-19

    内存泄露检测

    2007-12-21 11:38:51 / 个人分类:性能测试

    下面是我跟网友探讨内存泄露检测方法的聊天记录:

    思念(267097045) 10:18:37软件测试专业网站:51Testing软件测试网,K5{7a k/AEX.^
    内存泄露是内存申请而没有释放 测试方法 打开任务管理起察看性能记录当前内存使用量,然后启动你的被测试程序,运行使用相应的功能,察看内存使用情况,任务管理器切换到进程页面,然后看内存使用栏目,察看进程内存使用增量情况,使用程序一段时间然后关闭进程,察看 总体内存增量软件测试专业网站:51Testing软件测试网,Z1aW2UE$~L ~+O'`6b;g+W
    思念(267097045) 10:19:02软件测试专业网站:51Testing软件测试网{&`+y]*g5pf
    如果确认有内存变化,那么进一步进行确认。
    @gLx+peY?d119057思念(267097045) 10:19:47
    cS$fp1|p119057定位问题到底是在哪里  有代码走读 有runtime的monitor等不同的方法。
    /Q;Z'Sn bR"l119057紫 梦(282861425) 10:23:52软件测试专业网站:51Testing软件测试网4@K)uX [s"l!b
    使用程序一段时间然后关闭进程,察看 总体内存增量软件测试专业网站:51Testing软件测试网?u+H S$v4h/e/U
    关闭进程是指把系统关掉吗?软件测试专业网站:51Testing软件测试网,d4w`9~/M&M3x3B
    思念(267097045) 10:24:29软件测试专业网站:51Testing软件测试网5mH/Bc]v
    关闭你的被测试程序软件测试专业网站:51Testing软件测试网b.y!m;{\-i
    思念(267097045) 10:24:47
    a/?8\I-P119057cpu和内存泄露没有必然的关系
    _(A t3Kd#hI119057紫 梦(282861425) 10:25:30
    4M5W/r%]Q6T[119057运行使用相应的功能    有指定需要运行多长时间吗?
    w:At keJ[|119057思念(267097045) 10:26:10
    R L@Tb6q119057我说的这些是分析定位的过程,是确认是否有内存泄露
    2SP&P\s4DZx119057思念(267097045) 10:26:26软件测试专业网站:51Testing软件测试网6F7_ ow6Qu#A t1W
    运行多长时间看你的”疑心“在哪里软件测试专业网站:51Testing软件测试网8a(mJu9X;wY5YdT;]E
    思念(267097045) 10:26:52软件测试专业网站:51Testing软件测试网,M'}5dg?
    你觉得是使用某一个功能就开始有内存泄露还是,使用了很长时间之后才会引起内存泄露软件测试专业网站:51Testing软件测试网E8} h+WF
    思念(267097045) 10:27:41软件测试专业网站:51Testing软件测试网"s V+? ~h!k
    如果是前一种,只要使用下相应的功能,就可以判断是否有内存泄露,如果是很长时间才会出现这种情况那么就要运行一段时间,以前我做的项目要运新10天左右才会有内存泄露现象出现软件测试专业网站:51Testing软件测试网i2N4g7`*f6q^ ct
    紫 梦(282861425) 10:28:59软件测试专业网站:51Testing软件测试网xwm^fer6OF'W
    好的  谢谢软件测试专业网站:51Testing软件测试网2i yew@-~
    思念(267097045) 10:29:55软件测试专业网站:51Testing软件测试网pG+D,}(z&L rj
    当确认有内存泄露之后才是进一步定位,确认是在多用户情况下出现,还是在单用户情况下出现,如果是多用户情况下出现可以利用lr进行测试,如果单用户情况下出现可以利用前面的兄弟说的利用unit testing tool进行定位,利用unit testing tool和语言有关系,找到符合你应用的语言工具
    @ @ O~!BTqE2s119057思念(267097045) 10:30:24
    y&I"Y Bd2J119057如果是lr模拟用户进行访问,然后添加相应的计数器就可以定位了软件测试专业网站:51Testing软件测试网,b9\.?M0u&p k
    紫 梦(282861425) 10:30:35
    b[`b I v119057那内存使用率要涨幅多大 才能判断内存泄露软件测试专业网站:51Testing软件测试网 S![$~4RIk9g
    思念(267097045) 10:32:07
    U3H:_5a+I119057如果是lr我选者以下计数器 可以定位是否有内存泄露:
    L7JVv}9Y}^]119057% User Time for two processes (RService & tomcat5) and the whole system (_Total)软件测试专业网站:51Testing软件测试网{LZF4T Q |
    Available bytes in the system软件测试专业网站:51Testing软件测试网2Zd{3OC
    Handle counts软件测试专业网站:51Testing软件测试网3g V4HjC+Ry
    Thread counts

    Working Sets 软件测试专业网站:51Testing软件测试网x/R c]\ dJ
    思念(267097045) 10:32:35软件测试专业网站:51Testing软件测试网v]"f5S;m/?(B
    不管是多大都可以确认
    A7s)EZ7nYB%O119057紫 梦(282861425) 10:33:11软件测试专业网站:51Testing软件测试网T;w8[!Jm r,z1]
    什么意思 你是说 关闭进程后  如果内存一直没有下降的话 是不是就可以判断系统存在内存泄露
    !lcM/C#U.dm1[119057思念(267097045) 10:33:20
    .mFqxZ119057使用率是看程序运行之前和运行之后 的前后对比软件测试专业网站:51Testing软件测试网+R8Z L;L{8bn2{
    思念(267097045) 10:34:03
    _m cx1NM3t h+J119057也许有下降,但是程序完全退出只要仍然有一部分没有释放就可以确认了
    i&t7}6u0L9y`r119057紫 梦(282861425) 10:35:30软件测试专业网站:51Testing软件测试网 W)E,_^/W
    也就是说 运行之前和运行之后 如果内存使用率 都差不多的话 那就说明没有问题  如果运行之后的内存使用量比运行之前多的话 就说明有内存泄露 是吗
    W+ZB eCD4?0K119057思念(267097045) 10:35:54软件测试专业网站:51Testing软件测试网'h!lLi!z
    yes软件测试专业网站:51Testing软件测试网ov aH-B2V1jC{
    思念(267097045) 10:35:56软件测试专业网站:51Testing软件测试网0nY"R1Pa?7_
    呵呵
    afF:Kw6M2~119057紫 梦(282861425) 10:39:25
    hT ZhhxR119057如果说运行前 web系统的ie内存使用量为30,220软件测试专业网站:51Testing软件测试网y-Sde!T0U]:L
    而运行后 变成175,484软件测试专业网站:51Testing软件测试网%X A0i#u;v{s0M
    内存总使用量为642(前),783(后)软件测试专业网站:51Testing软件测试网*Kf*vj&ucd
    这时候我是不是可以关闭被测程序,来查看内存总使用量
    %s#\| L,P'Q&Z'ws119057思念(267097045) 10:40:19软件测试专业网站:51Testing软件测试网w?/x.cv8[[ \Q7\
    关闭你的被测试系统之后 在前后对照
    X|l-D&I|5m119057紫 梦(282861425) 10:42:30
    Y)_6yw&po119057那如果说有一个页面,我每打开一次 ,IE的内存就往上涨一点。可是关闭整个系统后,内存总使用量又没有差别的话软件测试专业网站:51Testing软件测试网'{V1n.F&h9wj'gP7f
    这样算不算存在内存泄露呢
    $v{D%FG/yw119057思念(267097045) 10:42:57
    !B2P[w^@8|119057内存总使用量又没有差别的话?
    (| l7Vj+e$Hg119057紫 梦(282861425) 10:43:28
    q^'B:gJ U119057是的 关闭整个系统后 内存总使用量就恢复到原来的情况软件测试专业网站:51Testing软件测试网Bf F8A!A7I9N(j.K
    紫 梦(282861425) 10:43:49软件测试专业网站:51Testing软件测试网@/M]M^8Q"gw
    可是系统中有一个页面,每打开一次,内存就往上涨一点
    |%Njp.r)mBY2E119057思念(267097045) 10:43:45软件测试专业网站:51Testing软件测试网+^/`.l `{I+z \.~
    那就没有内存泄露软件测试专业网站:51Testing软件测试网m a&r J0xao
    紫 梦(282861425) 10:45:14软件测试专业网站:51Testing软件测试网Z lV#Y4F y J-u1@
    按你的意思是 只要关闭被测程序后,整个内存没有变化 就都不算内存泄露 是吗
    +mRH)M|(q119057签の千寻(365099778) 10:47:53
    ]|-b6g5y1o119057关闭程序之后,内存应该会降回去软件测试专业网站:51Testing软件测试网-s-?X%C#^ Wf"UG
    思念(267097045) 10:47:56软件测试专业网站:51Testing软件测试网R5k'aG;q
    一般我们常说的内存泄漏是指堆内存的泄漏。堆内存是指程序从堆中分配的,大小任意的(内存块的大小可以在程序运行期决定),使用完后必须显示释放的内存。C应用程序一般使用malloc,realloc,new等函数从堆中分配到一块内存,使用完后,程序必须负责相应的调用free或delete释放该内存块,否则,这块内存就不能被再次使用,我们就说这块内存泄漏了。软件测试专业网站:51Testing软件测试网AN6a2VhM
    思念(267097045) 10:48:41
    1ork'O|vP v-\7G119057紫 梦 GC 知道是什么么?
    zs P-R,p:K119057签の千寻(365099778) 10:48:47
    8u'^ bJ&Yp119057没有回落就是有内存泄漏,是这个意思吧
    (TO9l YM~ ^119057紫 梦(282861425) 10:48:56
    q||'a[jP1f-|119057不知道
    D)`3}%R*t119057思念(267097045) 10:48:59软件测试专业网站:51Testing软件测试网F]!^j(A
    对的 软件测试专业网站:51Testing软件测试网 \;p)S^/Xb
    紫 梦(282861425) 10:49:30软件测试专业网站:51Testing软件测试网 b@Dw2z8Ls!A
    如果说我程序开着  但都没有使用
    u%k^D&[8l119057这样内存会不会回落呢
    &n \ P0|i L119057签の千寻(365099778) 10:49:58
    'O/tg+T(i)bv,z{-`119057程序开着肯定会占用一点内存的吧。。这个不是很清楚哦
    2v0d/s/y*G*ez119057思念(267097045) 10:50:07软件测试专业网站:51Testing软件测试网j _ GO2h@5i/C!{
    紫 梦 这种情况也可以回落,但是你要知道程序申请了多少内存
    *T wL0q7C?(~l119057思念(267097045) 10:50:57
    {\#O5d/z119057操作系统的知识建议回去看看 呵呵 
    ,^9s|,^;Ym P119057紫 梦(282861425) 10:52:05
    "~ D"G#TL-@v7K(C/l ]119057如果说 这种情况下内存都没有回落 是不是也能说明系统存在内存泄露呢

  • LR专用术语

    2007-10-17

    并发用户数量
    the number of concurrent users

    最佳并发用户数量
    the optimum number of concurrent users

    最大并发用户数量
    the maximum number of concurrent users

     

    峰值并发用户数量

    the peak number of concurrent users

    平均并发用户数量


    the average number of concurrent users

     

    concurrent call

     

    并发呼叫


    concurrent stream

     

    并发流

  • 请规范测试

    2007-7-26

    “什么叫成熟产品?只要有一个成功案例的产品就是成熟产品!”某国内大型软件公司CEO的这个经典观点广为流传,但其中的逻辑错误将风险带给了客户也带给 了软件企业本身。国内一些软件企业居然一夜间成了万能公司,ERP ? CRM ?OA?WorkFlow?我们都行!然而这些企业对软件测试的重要性大多认识不足,重开发轻测试的现象过于严重,很多公司没有专门的测试部门,测试工程师太少,开发人员兼作测试工作的现象十分普遍,在这种状况下推出的缺少严格测试等环节的软件产品只能给客户带来悲剧。

       近年来,我国的软件企业已越来越意识到软件测试的重要性,逐渐加大软件测试在整个软件开发的系统工程中的比重。据调查统计,在成本上一般来说是“需求分 析”和“规划确定”各占3%,“设计”占5%,“编程”占7%,“测试”占15%,“投产和维护”占67%.近些年来,测试成本的比例更有上升趋势 .

      不成熟软件带来的风险

       不成熟的软件产品是把测试成本交给了用户:企业往往是出于项目周期安排不当,或者根本没有安排专门测试,匆匆完成编码设计就将产品交付使用了。这样的后 果自然是用户觉得产品漏洞百出,项目执行过程也遥遥无期,最后,项目双方都筋疲力尽,用户觉得受骗,而软件商则毁了声誉,追加了大量项目实施费用,可谓是 “赔了夫人又折兵”。

      企业逻辑的软件实现高于计算机技术:很多软件企业在没有做透前期调研的前提下就匆匆开始建设自己想象中的“大厦”,结果可想而知。当用户建立起真正的企业应用。才发现软件违背了企业逻辑,不得不进行修改。这样闭门造车无疑会给“大厦”带来致命伤害。

       注重软件产品的质量和成熟度才会良性循环:有人把不成熟的软件产品比作是焦油坑中垂死挣扎的猛兽,布鲁克斯《人月神话》展示的可怕一幕在软件研发过程中 屡见不鲜。很多软件企业常常将软件质量视为一种奢侈,如果有必要的话,为了更多功能、更快速开发或者更低成本,测试就可以被牺牲掉。然而,在实践中,如果 软件开发组织对质量有一个坚定承诺,实际上可以加快开发,减少成本,并更容易地增加新的特性。在“已完成”的产品缺陷修复上花费的代价要比从一开始就修复 高出很多倍。相反,一个从开始就加强产品质量的组织,是有远见和创新精神的,市场中的高质量软件将更具竞争力。

      找出测试管理中的误区

      笔者曾经从事专业的软件项目管理与实施,项目管理感受很深刻。有一些切身体会与读者分享。

      吸取“前辈”经验。IBM在软件自动化测试技术核心的三个最佳成功经验是:尽早测试、连续测试、自动化测试,并在此基础上提供了完整的软件测试流程和一整套的软件自动化测试工具,组建一个测试团队,基于一套完整的软件测试流程,使用一套完整的自动化软件测试工具,完成全方位的软件质量验证。

      别去“挖东墙补西墙”。由于项目研发期的“缺斤短两”,使项目实施和投入运行的初期 漏洞百出,时间一长用户会发疯,项目实施者也会发疯,国内前几年的众多的ERP项目失败的原因多出于此。项目实施的遥遥无期,将严重挫伤用户的耐性和信心。

      代码与文档哪个值钱?多数项目管理者忽视了文档的重要性。对于大型软件的研发项目,还需要专业的测试过程管理软件来支撑大规模的信息交流和自动测试、代码的更新和版本的提交。这些文档和信息的价值从某种意义上甚至超出了程序代码本身。

       全程还是后期?软件的设计阶段往往没有软件测试人员的参与,事实上设计上的缺陷往往是耗用成本最高,也是最难在开发后期修复的缺陷。而一个软件的质量与 它有多大的设计缺陷有着密不可分的联系。而有经验的测试人员的质量意识,安全意识,对用户需求的了解及分析能力,对于打造高品质的软件设计都有着不可忽视 的作用。

      专职还是兼职?在传统的开发方式中,由于缺乏必要的配置管理和变更控制,测试工作根本无法提出具体的测试要求,加之开发人员 的遮丑,测试工作往往是走走过场,测试结果既无法考核又无法量化,当然就无法对以后的开发工作起指导作用。事实上,每个软件项目都需要专业的测试人员进行 相对独立的测试工作,从而保证软件项目的质量。

      居安思危,控制风险。需求变更给测试带来的问题可能是灾难性的,客户需求不是变动的唯一来源。有时团队自身也能引起范围变动。团队的成员可能听说或“假设”解决方案因客户的实际要求而发生了变动。加强沟通和协作,随时了解变更的状态。

      谁为产品质量买单?质量和质量控制应该是软件项目的的一项重要内容。但是,无论在消费类软件还是大型软件的测试领域,国内软件产品的质量掌控体系和标准都很模糊。质量控制越来越依托于公司在产品交付用户之前的测试工作的成败。

      没有厚度就没有重心。软件测试过程的历史数据缺失是大多数软件项目失败的关键所在,这样的结论也许使很多人感到吃惊,但事实就是如此。因为这些历史数据是反映软件项目实施轨迹的第一手资料,是项目延续和反馈的基石。

       省钱还是费钱?事实上,作为软件开发企业来说,投入人力,资金搞软件测试的最终目的还是离不开经济效益。而对与测试项目的管理也不能离开这个大前提。软 件测试的经济效益主要来自以下两个方面。一是满足用户需求,提高产品的竞争力,最终提高产品的销售量。二是尽早发现缺陷,降低售后服务成本。而软件测试的 最终目的就是使它带来的经济效益最大化。有一些专业的测试工具的购买、测试人员的配备和培训还需要一定的经济投入,项目决策者们可以选择适合自己的配置, 但决不能没有这些方面的投入。

      沟通还是对立?沟通是开发和测试人员必备的素质。但传统的思想认为,测试人员是找麻烦,是开发的“克星”。其实,项目管理者应该清楚,为软件的质量和品质努力的工作目标是一致的。沟通和建立沟通渠道是项目管理者的重要工作。

      如何提高软件测试水平

       要提高我国的软件测试行业的发展水平,首当其冲要解决软件测试队伍的问题。某著名国际软件企业的软件测试人员与软件开发人员的比率达到了3:5左右,并 且在实践过程已经证明了这种人员结构的合理性。但国内公司显然一时很难达到,但更重要的是重视程度,在这个基础上壮大软件测试队伍,提高测试人员的素质。

      其次是要学习借 鉴国外完善的测试机制,包括丰富的软件测试经验,强大的测试工具,优秀的测试管理水平。真正解决测试手段落后、测试方法单一和测试工具欠缺的问题,在企业 内部形成一个严密有效的纠错系统,使国内的测试工作流程、 技术水平接近国外先进水平,这样才能提高国内软件开发与测试的整体管理水平,增加软件产品的竞争力。

      此外,要重视第三方的测试力量。 第三方的专业测试企业是靠技术与服务来赢得客户信任的,也因此更加注重测试方法与质量。对于软件企业来说,从无到有地去建立测试部门,并完善测试体系,需 要较大投入,将研发出来的软件产品交给实力强劲的第三方专业测试公司,在提高软件产品的质量问题同时,还节约了产品测试成本。
  • 测试跟踪工具Bugzilla介绍

    2007-7-24

    测试跟踪工具Bugzilla介绍


       也许你还没有看到一个错误管理系统所具有的价值;也许你正被大量的测试数据所淹没,而迫切的需要一个产品缺陷的记录及跟踪的好帮手;也许你正在通过如:电子表格、数据库等 各种方式来不断的开发和完善一个错误跟踪系统。Mozilla公司向我们提供了一个共享的免费工具Buzilla.作为一个产品缺陷的记录及跟踪工具,它 能够为你建立一个完善的Bug跟踪体系,包括报告Bug、查询Bug记录并产生报表、处理解决、管理员系统初始化和设置四部分。并具有如下特点:

      1。基于Web方式,安装简单、运行方便快捷、管理安全。

       2。有利于缺陷的清楚传达。本系统使用数据库进行管理,提供全面详尽的报告输入项,产生标准化的Bug报告。 提供大量的分析选项和强大的查询匹配能力,能根据各种条件组合进行Bug统计。当错误在它的生命周期中变化时,开发人员、测试人员、及管理人员将及时获得 动态的变化信息,允许你获取历史纪录,并在检查错误的状态时参考这一记录。

      3。系统灵活,强大的可配置能力。Buzilla工具可以 对软件产品设定不同的模块,并针对不同的模块设定制定的开发人员和测试人员;这样可以实现提交报告时自动发给指定的责任人;并可设定不同的小组,权限也可 划分。设定不同的用户对Bug记录的操作权限不同,可有效控制进行管理。允许设定不同的严重程度和优先级可以在错误的生命其中管理错误,从最初的报告到最 后的解决,确保了错误不会被忽略,同时可以使注意力集中在优先级和严重程度高的错误上。

      4。自动发送Email,通知相关人员。根据设定的不同责任人,自动发送最新的动态信息,有效的帮助测试人员和开发人员进行沟通。

      下面我们将按照Bugzilla的操作说明、 Bugzilla管理员的操作指南两部分来说明这个工具的具体使用。本文有不少观点来自个人使用心得,有不妥之处,敬请斧正。

    Bugzilla操作说明

    1、 用户登录及设置


    1.1用户登录

      1. 用户输入服务器地址http://192.168.1.6/bugzilla/。

      2. 进入主页面后,点击【Forget the currently stored login】,再点击【login in】进入。

      3. 进入注册页面,输入用户名和密码即可登录。用户名为Email 地址,初始密码为用户名缩写。

      4. 如忘记密码,输入用户名,点击【submit request】,根据收到的邮件进行重新设置。

    1.2、修改密码及设置

      1.Login登录后,【Edit prefs】->【accout settings】 进行密码修改。

      2.【Edit prefs】->【email settings】 进行邮件设置。

      3.【Edit prefs】-> 【permissions】 进行权限查询

    2、Bug的处理过程

    2.1、报告Bug

    2.1.1测试人员报告Bug

      1. 请先进行查询,确认要提交的bug报告不会在原有纪录中存在,若已经存在,不要提交,若有什么建议,可在原有纪录中增加注释,告知其属主,让bug的属主看到这个而自己去修改。

      2. 若Bug不存在,创建一份有效的bug报告后进行提交。

      3. 操作:点击New,选择产品后,填写下表。

      4. 填表注意:Assigned to: 为空则默认为设定的 owner, 也可手工制定。CC: 可为多人,需用","隔开。Desription中要详细说明下列情况:

      1) 发现问题的步骤

      2) 执行上述步骤后出现的情况。

      3) 期望应出现的正确结果。

      选择group设置限定此bug对组的权限,若为空,则为公开。

      5. 操作结果:Bug状态(status)可以选择Initial state 为New或Unconfirmed.

      系统将自动通过Email通知项目组长或直接通知开发者。

      6.帮助: Bug writing guidelines

    2.1.2 开发人员报告Bug.

      1. 具体方法同测试人员报告。

      2. 区别: Bug初始状态将自动设为Unconfirmed,待测试人员确定后变为“New".

    2.2、Bug的不同处理情况

    2.2.1 Bug的属主 (owner) 处理问题后,提出解决意见及方法。

      1 . 给出解决方法并填写Additional Comments,还可创建附件(如:更改提交单)

      2.具体操作(填表项如下)

      3 . 填表注意:

      FIXED 描述的问题已经修改

      INVALID 描述的问题不是一个bug (输入错误后,通过此项来取消)

      WONTFIX 描述的问题将永远不会被修复。

      LATER 描述的问题将不会在产品的这个版本中解决.

      DUPLICATE 描述的问题是一个存在的bug的复件。

      WORKSFORME 所有要重新产生这个bug的企图是无效的。如果有更多的信息出现,请重新分配这个bug,而现在只把它归档。

    2.2.2 项目组长或开发者重新指定Bug的属主。(owner)

      1. 为此bug不属于自己的范围,可置为 Assigned,等待测试人员重新指定。

      2. 为此bug不属于自己的范围,但知道谁应该负责,直接输入被指定人的Email, 进行Ressigned。

      3. 操作:(可选项如下)

      * Accept bug (change status to ASSIGNED)

      * Reassign bug to

      * Reassign bug to owner and QA contact of selected component

      4. 操作结果:此时bug状态又变为New,此bug的owner变为被指定的人。

    2.2.3测试人员验证已修改的 Bug.

      1. 测试人员查询开发者已修改的bug,即Status为"Resolved",Resolution为"Fixed".进行重新测试。(可创建test case附件)

      2. 经验证无误后,修改Resolution为VERIFIED。待整个产品发布后,修改为CLOSED。

      若还有问题,REOPENED,状态重新变为“New",并发邮件通知。

      3. 具体操作(可选择项)

       1. Leave as RESOLVED FIXED

       2. Reopen bug

       3. Mark bug as VERIFIED

       4. Mark bug as CLOSED

    2.2.4 Bug报告者(reporter)或其他有权限的用户修改及补充Bug

      1. 可以修改Bug的各项内容。

      2. 可以增加建立附件,增加了相关性, 并加一些评论来解释你正在做些什么和你为什么做。

      3. 操作结果:每当一些人修改了bug报告或加了一个评论,他们将会被加到CC列表中,bug报告中的改变会显在要发给属主、写报告者和CC列表中的人的电子邮件中。

    2.2.5测试人员确认开发人员报告的Bug是否存在.

      1. 查询状态为“Unconfirmed"的Bug,

      2. 测试人员对开发人员提交的Bug进行确认,确认Bug存在。

      3. 具体操作:选中“Confirm bug(change status to New)"后,进行commit.

      4. 操作结果:状态变为“New".

    2.3、查询Bug

      1.直接输入Bug Id,点击find 查询。可以查看Bug的活动纪录。

      2.点击Query,输入条件进行查询。

      3.查询Bug活动的历史

      4.产生报表。

      5.帮助:点击Clue.

    3、关于权限的说明

      1. 组内成员对bug具有查询的权利,但不能进行修改。

      2. Bug的owner 和 reporter 具有修改的权利。

      3. 具有特殊权限的用户具有修改的权利。

    4、 BUG处理流程

      1. 测试人员或开发人员发现bug后,判断属于哪个模块的问题,填写bug报告后,通过Email通知项目组长或直接通知开发者。

      2. 项目组长根据具体情况,重新reassigned分配给bug所属的开发者。

      3. 开发者收到Email信息后,判断是否为自己的修改范围.

      1) 若不是,重新reassigned分配给项目组长或应该分配的开发者。

      2) 若是,进行处理,resolved并给出解决方法。(可创建补丁附件及补充说明)

      4. 测试人员查询开发者已修改的bug,进行重新测试。(可创建test case附件)

      1) 经验证无误后,修改状态为VERIFIED。待整个产品发布后,修改为CLOSED。

      2) 还有问题,REOPENED,状态重新变为“New",并发邮件通知。

      5. 如果这个BUG一周内一直没被处理过。Bugzilla就会一直用email骚扰它的属主,直到采取行动。

    5、一个Bug的生存周期



    Bugzilla管理员操作指南

    1、主要工作内容:


    1. 1产品(Product)、版本号(versions)和模块(Components)的定义,同时指定模块相应的开发者(owner)和测试人员(QA Contact)。

    1.2小组的定义和划分

    1.3测试中Bug严重程度、优先级的定义

    1. 4增加用户,并分别设定全部用户的分组、权限。

    1. 5主要参数(parameters)的设置

      1) urlbase: 输入bugzilla 工具所在的服务器IP地址。

      2) usebuggroupsentry: 设为ON,可以分组。

      3) whinedays:Bug在whinedays设定的期限内若未被处理,将自动重发mail,默认为7天。

      4) defaultpriority:设定默认的优先级

      5) commentonresolve:设为ON,系统将强制要求开发者处理完Bug 后,必须填写修改的内容。

    2、基本操作:

    2.1创建默认的管理员用户。

      运行checksetup.pl。若不小心删除管理员,重新运行checksetup.pl.

    2.2 管理用户

    2.1 增加新用户

      点击页面右下角【users】,submit后,出现【Add new user】页面。输入相应输入即可。Login name: 一般为邮件地址,可以设为其他标识。

    2.2 禁止一个用户

      填写Disabled text 输入框即可。

    2.3 修改用户

      可以修改用户注册名、密码。

      设置权限

      QA的权限一般设为: Canconfirm, editbugs

      Developer的权限设为: none

      分组控制:group

    3、管理group

    3.1.增加group

      edit groupàadd groups (New User Regexp可不填/active 选择则可选)->add

    3.2修改group ,submit 即可。

      4、管理Product 和 component

      a)增加Product

      b) Component 对应一个owner(进行fixed),QA Contact(确保已fixed)

      c) Component Number of Unconfirmed =10000,此产品将选择bug的初始状态(Unconfirmed,New)
  • 测试试卷

    2007-7-16


    一、判断题
    1.软件测试的目的是尽可能多的找出软件的缺陷。(Y)
    2.Beta 测试是验收测试的一种。(Y)
    3.验收测试是由最终用户来实施的。(N)
    4.项目立项前测试人员不需要提交任何工件。(Y)
    5.单元测试能发现约80%的软件缺陷。(Y)
    6.代码评审是检查源代码是否达到模块设计的要求。(N)
    7.自底向上集成需要测试员编写驱动程序。(Y)
    8.负载测试是验证要检验的系统的能力最高能达到什么程度。(N)
    9.测试人员要坚持原则,缺陷未修复完坚决不予通过。(N) 看情况,有些时候就是要坚持原则的.
    10.代码评审员一般由测试员担任。(N)
    11.我们可以人为的使得软件不存在配置问题。(N)
    12.集成测试计划在需求分析阶段末提交。(N) 集成测试计划在概要设计说明书出来后提交,需求分析阶段不需要.

    二、选折
    1.软件验收测试的合格通过准则是:(ABCD)
    A. 软件需求分析说明书中定义的所有功能已全部实现,性能指标全部达到要求。
    B. 所有测试项没有残余一级、二级和三级错误。
    C. 立项审批表、需求分析文档、设计文档和编码实现一致。
    D. 验收测试工件齐全。
    2.软件测试计划评审会需要哪些人员参加?(ABCD)
    A.项目经理
    B.SQA 负责人
    C.配置负责人
    D.测试组
    3.下列关于alpha 测试的描述中正确的是:(AD)
    A.alpha 测试需要用户代表参加
    B.alpha 测试不需要用户代表参加
    C.alpha 测试是系统测试的一种
    D.alpha 测试是验收测试的一种
    4.测试设计员的职责有:(BC)
    A.制定测试计划
    B.设计测试用例
    C.设计测试过程、脚本
    D.评估测试活动
    5.软件实施活动的进入准则是:(ABC)
    A.需求工件已经被基线化
    B.详细设计工件已经被基线化
    C.构架工件已经被基线化
    D.项目阶段成果已经被基线化
    三、添空
    1.软件验收测试包括:正式验收测试,alpha测试,beta测试。
    2.系统测试的策略有:功能测试,性能测试,可靠性测试,负载测试,易用性测试,强度测试,安全测试,配置测试,安装测试,卸载测试,文挡测试,故障恢复测试,界面测试,容量测试,兼容性测试,分布测试,可用性测试,(有的可以合在一起,分开写只要写出15就满分哦)
    测试策略就是为了达到这样的平衡而采取的测试工具、测试方法、测试技术的总和。狭义来讲,测试策略是指如何划分并 组织被测对象。例如,集成测试如何确定被测对象的粒度,如何对各模块逐渐进行集成;单元测试如何确定被测单元,各被测单元是独立测试还是自底向上或自顶向 下逐步进行。楼主回答的是系统测试类型.

    3.设计系统测试计划需要参考的项目文挡有:软件测试计划,软件需求工件和迭代计划。系统测试计划的依据是:软件需求规格说明书
    4.对面向过程的系统采用的集成策略有:自顶向下,自底向上两种。
    5.(这题出的有问题哦,详细的5步骤为~~)通过画因果图来写测试用例的步骤为:
    (1)分析软件规格说明描述中,哪些是原因(即输入条件或输入条件的等价类),哪些是结果(即输出条件),并给每个原因和结果赋予一个标识符。
    (2)分析软件规格说明描述中的语义,找出原因与结果之间,原因与原因之间对应的是什么关系? 根据这些关系,画出因果图。
    (3)由于语法或环境限制,有些原因与原因之间,原因与结果之间的组合情况不可能出现。为表明这些特殊情况,在因果图上用一些记号标明约束或限制条件。
    (4)把因果图转换成判定表。
    (5)把判定表的每一列拿出来作为依据,设计测试用例。

    四、简答(资料是搜集整理的,感谢前辈的解题)无
    1.区别阶段评审的与同行评审
    同行评审目的:发现小规模工作产品的错误,只要是找错误;
    阶段评审目的:评审模块 阶段作品的正确性 可行性 及完整性
    同行评审人数:3-7人 人员必须经过同行评审会议的培训,由SQA指导
    阶段评审人数:5人左右 评审人必须是专家 具有系统评审资格
    同行评审内容:内容小 一般文档 <  40页, 代码 < 500行
    阶段评审内容: 内容多,主要看重点
    同行评审时间:一小部分工作产品完成
    阶段评审时间: 通常是设置在关键路径的时间点上!

    2.什么是软件测试
    为了发现程序中的错误而执行程序的过程

    3简述集成测试的过程
    系统集成测试主要包括以下过程:
    1. 构建的确认过程。
    2. 补丁的确认过程。
    3. 系统集成测试测试组提交过程。
    4. 测试用例设计过程。
    5. 测试代码编写过程。
    6. Bug的报告过程。
    7. 每周/每两周的构建过程。
    8. 点对点的测试过程。
    9. 组内培训过程。
    集成测试过程:集成测试计划->集成测试设计->集成测试实现->集成测试执行

    4 怎么做好文档测试
    仔细阅读,跟随每个步骤,检查每个图形,尝试每个示例。P142
    检查文档的编写是否满足文档编写的目的
    内容是否齐全,正确
    内容是否完善
    标记是否正确


    5 白盒测试有几种方法
    总体上分为静态方法和动态方法两大类。
    静态:关键功能是检查软件的表示和描述是否一致,没有冲突或者没有歧义
    动态:语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径覆盖。
    白盒测试:测试证明每种内部操作和过程是否符合设计规格和要求,基于程序结构的逻辑驱动测试.静态的举例:代码走读,代码检视.

    6系统测试计划是否需要同行审批,为什么
    需要,系统测试计划属于项目阶段性关键文档,因此需要评审。

    7Alpha测试与beta的区别
    Alpha测试 在系统开发接近完成时对应用系统的测试;测试后仍然会有少量的设计变更。这种测试一般由最终用户或其它人员完成,不能由程序或测试员完成。

    Beta测试 当开发和测试根本完成时所做的测试,最终的错误和问题需要在最终发行前找到。这种测试一般由最终用户或其它人员完成,不能由程序员或测试员完成。

    Alpha测试:用户在接近正式环境下的测试,开发人员在用户旁记录错误情况和使用中的问题.
    Beta测试:多个用户在实际使用环境下的测试,开发人员不在测试现场,用户通过发送报告的形式把发现的问题反馈给开发人员.


    8比较负载测试,容量测试和强度测试的区别
    负载测试:在一定的工作负荷下,系统的负荷及响应时间。
    强度测试:在一定的负荷条件下,在较长时间跨度内的系统连续运行给系统性能所造成的影响。
    容量测试:容量测试目的是通过测试预先分析出反映软件系统应用特征的某项指标的极限值(如最大并发用户数、数据库记录数等),系统在其极限值状态下没有出 现任何软件故障或还能保持主要功能正常运行。容量测试还将确定测试对象在给定时间内能够持续处理的最大负载或工作量。容量测试的目的是使系统承受超额的数 据容量来发现它是否能够正确处理。容量测试是面向数据的,并且它的目的是显示系统可以处理目标内确定的数据容量。
    1.负载测试:通过逐步增加系统负载,最终确定在满足性能指标的情况下,系统能承受的最大负载量的测试。 2.压力测试:通过逐步增加系统负载,最终确定在什么负载条件下系统性能将处于崩溃状态,以此获得系统能提供的最大服务级别的测试。 3.强度测试:又称疲劳强度测试,在系统稳定运行的情况下能够支持的最大并发用户数,持续执行一段时间业务,通过综合分析,确定系统处理最大工作量强度性 能的过程。
  • 数据库级调优

    2007-7-16

    1.   数据库级调优

    1.1. 修改数据库参数

    sys用户登录,运行如下的命令:

    alter system set optimizer_index_cost_adj=10 scope=spfile
    alter system set optimizer_dynamic_sampling=5 scope=spfile

     

    optimizer_index_cost_adj取值0-1000 ,缺省100 ; 值越小oracle就越趋向使用索引

    optimizer_dynamic_sampling    配置oracle对没有统计信息的表会动态采样,会得到更准确的统计信息,同时让优化器得到更准确的执行计划。这个参数对临时表尤其有用。

    1.2. 分析表

    应该把所有没有做过分析的表都做一下分析:

    执行如下语句的返回结果。

    select

    'analyze table '||owner||'.'||table_name||' compute statistics; '

    from dba_tables

    where num_rows is null

    and owner not in ('SYS','SYSTEM')

    and table_name not like '%$%'

    and temporary = 'N'

     

    如果针对SCHEMA里的所有表做分析,JZ21为例

    begin

    dbms_stats.gather_schema_stats ('JZ21');

    end;

    /

    1.3. 增加数据维护的job

    1.3.1.    将表的监视打开

     select ‘alter table ‘||owner||’.’||table_name||’ monitoring; ’  

    from dba_tables

    where owner not in (‘SYS’,’SYSTEM’,’OUTLN’,’WMSYS’) 

    and table_name not like '%$%'

    and TEMPORARY=’N’;

     

      这个监视是在内存中做的,一般情况下对性能不会有什么影响,如果发现实在有影响的时候,

     

    下面语句关闭监视,

    select ‘alter table ‘||owner||’.’||table_name||’ nomonitoring; ’  

    from dba_tables

    where owner not in (‘SYS’,’SYSTEM’,’OUTLN’,’WMSYS’) 

    and table_name not like '%$%'

    and TEMPORARY=’N’;

     

    1.3.2.    添加JOB

    sys用户登录

    执行如下语句,mynextdate,mynextSatdate需要手工更改为下一日和下一个周六。

     

      define mynextdate='2004-03-03';  --to_char(sysdate + 1,'yyyy-mm-dd');

      define mynextSatdate='2004-03-06'; --to_char(NEXT_DAY(sysdate,7),'yyyy-mm-dd');

     

      --每天早上3点左右执行flush monitor info

      call sys.dbms_job.remove(101);

      call sys.dbms_job.isubmit( 101,

                           'sys.DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO();',

                           to_date('&mynextdate 03:00:00','YYYY-MM-DD HH24:MI:SS'),

                           'to_date(''&mynextdate 03:00:00'',''YYYY-MM-DD HH24:MI:SS'') + 1');

      commit;                      

      --统计数据库信息

      call sys.dbms_job.remove(102);

      call sys.dbms_job.isubmit( 102,

                           'sys.dbms_stats.gather_database_stats (options => ''GATHER STALE'');',

                           to_date('&mynextdate 03:10:00','YYYY-MM-DD HH24:MI:SS'),

                           'to_date(''&mynextdate 03:10:00'',''YYYY-MM-DD HH24:MI:SS'') + 1');

      commit;                       

     

      --每周六下午6:30把执行对那些被更新特别频繁的表的索引做rebuild

     

      call sys.dbms_job.remove(201);

      call sys.dbms_job.isubmit( 201,

                           'execute immediate ''alter INDEX history.PK_INCREMENT_STOCK_BALANCE_HIS rebuild nologging'';'||

                           'execute immediate ''alter INDEX history.ind_inc_stock_balance_1 rebuild nologging'';'||

                           'execute immediate ''alter INDEX history.ind_inc_stock_balance_2 rebuild nologging'';'||

                           'execute immediate ''alter INDEX history.PK_TB_INCREMENT_BALANCE_HIS rebuild nologging'';'||

                           'execute immediate ''alter INDEX history.Ind_inc_balance rebuild nologging'';',

                           to_date('&mynextdate 18:30:00','YYYY-MM-DD HH24:MI:SS'),

                           'to_date(''&mynextdate 18:30:00'',''YYYY-MM-DD HH24:MI:SS'') + 7');

      commit;  

     

    1.4. 删除重复的索引

    查找重复的索引

    select  *

        from

    ( select    index_owner,

    index_name,

    table_owner,

    table_name,

                 max(decode(p, 1,     c,NULL)) ||

                 max(decode(p, 2,', '||c,NULL)) ||

                 max(decode(p, 3,', '||c,NULL)) ||

                 max(decode(p, 4,', '||c,NULL)) ||

                 max(decode(p, 5,', '||c,NULL)) ||

                 max(decode(p, 6,', '||c,NULL)) ||

                max(decode(p, 7,', '||c,NULL)) ||

                max(decode(p, 8,', '||c,NULL)) ||

                max(decode(p, 9,', '||c,NULL)) ||

                max(decode(p,10,', '||c,NULL)) ||

                max(decode(p,11,', '||c,NULL)) ||

                max(decode(p,12,', '||c,NULL)) ||

                max(decode(p,13,', '||c,NULL)) ||

                max(decode(p,14,', '||c,NULL)) ||

                max(decode(p,15,', '||c,NULL)) ||

                max(decode(p,16,', '||c,NULL)) index_cols

           from (select index_owner,index_name,table_owner,table_name, substr(column_name,1,30) c, column_position p

                      from dba_ind_columns )

          group by index_owner,index_name,table_owner,table_name  ) A,

       ( select index_owner,

    index_name,

    table_owner,

    table_name,

                 max(decode(p, 1,     c,NULL)) ||

                max(decode(p, 2,', '||c,NULL)) ||

                max(decode(p, 3,', '||c,NULL)) ||

                max(decode(p, 4,', '||c,NULL)) ||

                max(decode(p, 5,', '||c,NULL)) ||

                max(decode(p, 6,', '||c,NULL)) ||

                max(decode(p, 7,', '||c,NULL)) ||

                max(decode(p, 8,', '||c,NULL)) ||

                max(decode(p, 9,', '||c,NULL)) ||

                max(decode(p,10,', '||c,NULL)) ||

                max(decode(p,11,', '||c,NULL)) ||

                max(decode(p,12,', '||c,NULL)) ||

                max(decode(p,13,', '||c,NULL)) ||

                max(decode(p,14,', '||c,NULL)) ||

                max(decode(p,15,', '||c,NULL)) ||

                max(decode(p,16,', '||c,NULL)) index_cols

           from (select index_owner,index_name,table_owner,table_name, substr(column_name,1,30) c, column_position p

                      from dba_ind_columns )

          group by index_owner,index_name,table_owner,table_name  ) B

       where a.table_owner=b.table_owner

    and a.table_name=b.table_name

    and (a.index_owner<>b.index_owner

    or a.index_name <> b.index_name )

    and a.index_cols like b.index_cols || '%'

    and a.owner not in (‘SYS’,’SYSTEM’,’OUTLN’,’WMSYS’) 

    and a.table_name not like '%$%'

     

    出来的结果中,排在后面的索引是可以删除的。

     

     

    1.5. 做为一项常规任务,每个月做一次停下应用的维护

    检查哪些表碎片比较多,对这些碎片很多的表做move,同时将失效的索引全部重建。

    这一项任务是在已经对表都做了分析的情况下来做。

     

    scrīpt0,对表全部做分析

    begin

    dbms_stats.gather_schema_stats (‘JZ21’);

    end;

    /

     

    针对所有的schema都做一次。

     

    --查看哪些表的空间碎片比较大,目前是认为大于30%就做整理。

    select * from (

    Select owner,table_name,(num_rows*avg_row_len/8000),blocks,

    (num_rows*avg_row_len/8000)/( decode(blocks,0,1,null,1,blocks)) bb

    from dba_tables where owner in (‘JZ21’) 

    and TEMPORARY=’N’

    ) tt

    where tt.bb<0.7 and blocks>10;

     

    --生成整理脚本scrīpt1

    select ‘alter table ‘||owner||’.’||table_name||’ move; ’ from (

    Select owner,table_name,(num_rows*avg_row_len/8000),blocks,

    (num_rows*avg_row_len/8000)/( decode(blocks,0,1,null,1,blocks)) bb

    from dba_tables where owner in (‘JZ21’) 

    and TEMPORARY=’N’

    ) tt

    where tt.bb<0.7 and blocks>10;

     

    --预备好分析脚本,不过这个脚本应该最后做scrīpt3

    select 'exec dbms_stats.gather_table_stats( '''||owner||''','''||table_name||''' ,method_opt => ''for all columns'', cascade => true ); ' from (

    Select owner,table_name,(num_rows*avg_row_len/8000),blocks,

    (num_rows*avg_row_len/8000)/( decode(blocks,0,1,null,1,blocks)) bb

    from dba_tables where owner in (‘JZ21’) 

    and TEMPORARY='N'

    ) tt

    where tt.bb<0.7 and blocks>10;

     

     

    --生成重建索引脚本scrīpt2

    select ‘alter index ‘||owner||’.’||index_name||’ rebuild nologging;’ from dba_indexes where owner in (‘JZ21’)  and status='UNUSABLE' ;

     

    步骤:先执行scrīpt0

    结束后,生成scrīpt1,scrīpt2,scrīpt3

    按顺序执行,scritp1,scrīpt2,scrīpt3

     

     

    1.6. 特殊情况下对数据库重新整理

    1.6.1.    对表做move

    alter table test_move move ;

     

      select ‘alter table ‘||owner||’.’||table_name||’ move; ’  from dba_tables where owner in (‘JZ21’)  and TEMPORARY=’N’;

     

    这里用需要做moveschema替换。

     

    1.6.2.    indexrebuild

    alter INDEX idx_test_move rebuild nologging;

     

    select ‘alter index ‘||owner||’.’||index_name||’ rebuild nologging;’ from dba_indexes where owner in (‘JZ21’);

     

     

    1.6.3.    对所有的表做分析

     

    begin

    dbms_stats.gather_schema_stats (‘JZ21’);

    end;

    /

     

    针对所有的schema都做一次。

     

    1.7. 对索引打开监视开关,看哪些索引没有被使用(慎用)

    select ‘alter index ‘||owner||’.’||index_name||’ monitoring usage;’ from dba_indexes

    where owner not in (‘SYS’,’SYSTEM’);

     

    在运行了一个很完整的周期以后(对我们来说,例如2个完整的交易日),检查有哪些索引没有被使用

     

    select index_name,monitoring,used,start_monitoring,end_monitoring from v$object_usage

    where used='NO';

    如果这些索引不是主键或唯一索引,一般情况下这些索引可以去掉。

     

    检查完一次以后,将索引监视关闭,不需要老是监视索引的使用:

    select ‘alter index ‘||owner||’.’||index_name||’ nomonitoring usage;’ from dba_indexes where owner in (‘WHT’);

    2.   语句调优

    2.1. PL/SQL中的语法解释工具

    语句的执行效率是否符合需要,一个是简单的把语句提取出来直接执行一下,看效果如何,但很多情况下,语句的运行是根据实际的条件运行的,所以有时候我们写完语句有要先分析一下语句是否是最优的,这时候我们就可以用PL/SQLexplain窗口(或直接选种语句后,按F5),有时侯,我们已知语句比较慢,要寻找为什么会慢,也可以如此做。

    EXPLAIN窗口,我们需要关注几个重要的东西,COST(成本),如果这个COST数字很大,说明语句效率不高,需要想办法;有无TABLE ACCESS FULL,如果有,只要数据量大一些,效率就不会高。我们要尽量避免产生table access full,方法之一就是建索引,另一个方法是改写连接方式,使能够用到索引。另一个需要关注的是join方式,nest loops outer hash join outer,这两种方式的效果是不一样的,有时有天壤之别,目前我没有类似的经验可以写,以后碰到后补充。

    2.2. ORACLE提供的调优工具

    ORACLE 本身提供了很好的客户端的性能调试和跟踪工具。ORACLE的工具非常好,可以帮助我们很容易的找到系统性能的瓶颈语句在哪里。ORACLE性能调整工具的位置在:

    开始程序—Oracle – Orahome92 – Enterprise Management Packs –Diagnostics –Performance Manager,登陆后找到数据库栏,然后连接就可以看到。

    我常用其中的两项来调整性能(其他的也很有用处):一,顶层会话;二,SQL ,分别做介绍。

    顶层会话:
  • 微软的部分面试题

    2007-6-28

    1.      有两根不均匀分布的香,香烧完的时间是一个小时,你能用什么方法来确定一段15分钟的时间?

    2.      一个经理有三个女儿,三个女儿的年龄加起来等于13,三个女儿的年龄乘起来等于经理自己的年龄,有一个下属已知道经理的年龄,但仍不能确定经理三个女儿的年龄,这时经理说只有一个女儿的头发是黑的,然后这个下属就知道了经理三个女儿的年龄。请问三个女儿的年龄分别是多少?为什么?

    3.      有三个人去住旅馆,住三间房,每一间房$10元,于是他们一共付给老板$30
    第二天,老板觉得三间房只需要$25元就够了于是叫小弟退回$5给三位客人,
    谁知小弟贪心,只退回每人$1,自己偷偷拿了$2,这样一来便等于那三位客人每人各花了九元,
    于是三个人一共花了$27,再加上小弟独吞了不$2,总共是$29。可是当初他们三个人一共付出$30那么还有$1呢?

    4.      有两位盲人,他们都各自买了两对黑袜和两对白袜,八对袜了的布质、大小完全相同,
    而每对袜了都有一张商标纸连着。两位盲人不小心将八对袜了混在一起。他们每人怎样才能取回黑袜和白袜各两对呢?

    5.      有一辆火车以每小时15公里的速度离开洛杉矶直奔纽约,另一辆火车以每小时20公里的速度从纽约开往洛杉矶。如果有一只鸟,以30公里每小时的速度和两辆火车同时启动,从洛杉矶出发,碰到另一辆车后返回,依次在两辆火车来回飞行,直到两辆火车相遇,请问,这只小鸟飞行了多长距离?

    6.      你有两个罐子,50个红色弹球,50个蓝色弹球,随机选出一个罐子,随机选取出一个弹球放入罐子,怎么给红色弹球最大的选中机会?在你的计划中,得到红球的准确几率是多少?

    7.      你有四个装药丸的罐子,每个药丸都有一定的重量,被污染的药丸是没被污染的重量+1.只称量一次,如何判断哪个罐子的药被污染了?

    8.      你有一桶果冻,其中有%%,绿色,红色三种,闭上眼睛,抓取两个同种颜色的果冻。抓取多少个就可以确定你肯定有两个同一颜色的果冻?

    9.      对一批编号为1100,全部开关朝上()的灯进行以下*作:凡是1的倍数反方向拨一次开关;2的倍数反方向又拨一次开关;3的倍数反方向又拨一次开关……问:最后为关熄状态的灯的编号。

    10.   想象你在镜子前,请问,为什么镜子中的影像可以颠倒左右,却不能颠倒上下?

    11.   一群人开舞会,每人头上都戴着一顶帽子。帽子只有黑白两种,黑的至少有一顶。每个人都能看到其它人帽子的颜色,却看不到自己的。主持人先让大家看看别人头上戴的是什幺帽子,然后关灯,如果有人认为自己戴的是黑帽子,就打自己一个耳光。第一次关灯,没有声音。于是再开灯,大家再看一遍,关灯时仍然鸦雀无声。一直到第三次关灯,才有劈劈啪啪打耳光的声音响起。问有多少人戴着黑帽子?

    12.   两个圆环,半径分别是12,小圆在大圆内部绕大圆圆周一周,问小圆自身转了几周?如果在大圆的外部,小圆自身转几周呢?

    13.   1元钱一瓶汽水,喝完后两个空瓶换一瓶汽水,问:你有20元钱,最多可以喝到几瓶汽水?

    参考答案

    1.      一只两头点燃,另一只一头点燃,当第一只烧完后,第二只丙再头点燃,就可以得到15`

    2.      2,2,9,因为只有36 = 6*6*1 36 = 9 * 2 * 2

    3.      怎么会是每人第天九元呢,每人每天 (25/3) + 1,那一元差在25 - 24 = 1

    4.      每人取每双中的一只就可以了

    5.      (D / 35 ) * 30 = D

    6.      自己睁着眼睛挑一个红色的啊,这样是给红色最大的机会了,除了你是色盲,呵呵 ,当然他们的几率都是1/2

    7.      一个中取一个编号,然后称一下就知道 </