简单+勤奋,把测试当做一番事业去奋斗!

发布新日志

  • [论坛] 软件测试过程中用到的风险分析知识(转载)

    2009-11-27 23:32:17

  • [论坛] 上点,内点,离点——边界值法设计测试用例

    2009-11-25 22:01:02

  • [论坛] 软件测试各阶段所出的文档(专指系统测试)

    2009-11-11 22:06:24

  • [论坛] 编写优秀Bug报告的艺术(转载)

    2009-06-24 23:41:40

                               编写优秀Bug报告的艺术

    ----转载自CSDN(imlogic的专栏)----------http://blog.csdn.net/imlogic/

     


                                                       
    前言

    99年的Quality week上的一次演讲中,微软的一个测试经理,Roger Sherman指出了由于不可重现导致bug关闭的主要原因。这是一个非常可惜的情况,因为这样的bug report浪费了紧张的开发计划中的宝贵时间,增加了对产品质量完全是无关紧要的事情,同时导致了在开发人员和测试之间的挫败感和差的感觉。有时,bug report是由于短暂的或随机的事件,测试和开发之间不一致的工具和配置,或者在测试的环境下对正确的行为的模糊定义而产生的,但是许多的由于不可重现而被关闭的测试报告是因为描述不清晰,被误解,或者只是文字的错误。

    幸运的是,我学习到一些能够引起管理层注意,更清楚的和开发人员沟通并得到修复的编写优秀bug report的诀窍。这些技巧不仅仅提供了是在被修复的问题的比例方面得到了可靠的回报,而且在同开发人员和管理层的通过中也得到了回报。在我管理的项目中使用这种方法编写bug report8bug report中大约只有一个没有被修复。

    这篇文章的思想只有当你的报告针对的测试执行过程是专业的质量工作才可以发挥作用。聪明地执行完整的测试包是产生可靠的测试状况信息的基础的其中一个因素。在许多的测试文献中广泛地介绍了多种多样的关于如何构建这样的测试包的方法。选择和你质量风险管理需求相一致的技术并且使之适应你的具体情况,敏捷地监督已计划的测试的执行过程,这样你就可以拥有可靠的测试执行过程。

    另外一个关键的因素-bug report,却没有得到太多的关注。这是非常令人遗憾的,因为优秀的bug report对反映测试小组真实的和可理解的工作质量同测试本身一样都是非常重要的。试想一下:如果你不能用开发人员能够理解的术语和能够用于调试的方法给开发人员解释一个错误,他怎么能够修复问题呢?如果你不能够在bug report中提出象保险杆标签bumper sticker)一样的错误总结来引起管理层的注意,你又如何让他们关心你们发现的问题呢?

    Bug report的核心是对错误的描述。表格1中是一个关于好和差的错误描述的例子。编写好的bug report是一种好的艺术形式。采用以下的10条技巧可以帮助你的小组提高编写bug report的质量:

    组织Structure:测试人员应该采用深思熟虑的,小心谨慎的方法执行测试,并且做详尽的记录。这样可以促使他们对测试下的系统有很好的认识。当错误发生的时候,一个有组织的测试人员能够知道最早出现问题的地方。

    重现Reproduce:测试人员在编写bug report之前必须在检查问题是否可重现。如果错误不可再重现,仍然应该写下来,但是必须说明问题的偶然性。一个好的处理原则就是在编写bug report之前反复尝试3次。

    隔离Isolate:在尝试编写bug report之前,必须试着隔离错误。可以采用改变一些变量的方法,如系统的配置,它可能可以改变错误的症状。这些信息可以为开发人员着手调试提供思路。

    归纳Generalize:在测试人员发现了一个已隔离的,可重现的问题后,应该对问题进行归纳。同一个问题是否出现在其他的模块或其他的地方?同一个故障是否有更加严重的问题?

    对比Compare:如果测试人员以前曾经验证过现在出错的测试用例,那么他就应该检查以前的测试结果以检查相同的条件是否通过以前的测试。如果是的话,那么这个问题就象是一个回归的错误。注意由于同一测试条件有可能出现在多个测试用例中,这个步骤就不仅仅只是检查一个测试用例在以前的多个结果。

    总结Summarize:在bug report的第一行写上错误的总结是非常关键的。测试人员要花些时间思考已发现的错误对客户有何影响。这不仅仅要求测试人员编写的报告要能够吸引读者,使和管理层的沟通清晰,还要能够帮助设置错误修复的优先级别。

    精简Condense:在bug report的初稿完成后,测试人员应该反复阅读它,集中剔除那些没有关系的步骤或词语。隐含的或模糊的说明和那些由于对没有任何关系的细节或者那些在重现错误过程中不需要的步骤而消磨报告欢迎程度的无穷唠叨都不是bug report的目标。

    消除歧义Disambiguate:测试人员在精简空话的同时或其之后随即应该再仔细检查报告是否有会产生误解的地方。测试人员应该尽量避免使用模糊的,会产生歧义的和主观的词语。目标是使用能够表述事实,清楚的,不会产生争执的词语。

    中立Neutralize:如文中所述,作为坏消息的传递人,和善地提交消息是一个挑战。如同所有的错误总结一样,独立的bug report在措辞方面应该保持公正。攻击开发人员,指责潜在的错误,企图诙谐或使用挖苦将引起开发人员的憎恶,并且使注意力从提高产品质量这个大的目标上转移开了。谨慎的测试人员只用Bug report来描述事实。

    检查Review:一旦测试人员感觉bug report是他能够编写的最好版本,他应该将报告再给一个或多个同行进行检查。他的同事们也应该给出一些建议,为了澄清问题不断地提问,如果适当的话,甚至可以挑战错误成灾的结论。在允许的时间里,测试小组应该尽可能提交最好的bug report

    以上10条技巧可以帮助你和你的小组提交准确简洁的,彻底校订的,精心构思的,高质量的技术文档。测试小组应该集中编写bug report的任务,测试组长和经理应该让测试组成员清楚地认识到编写优秀的bug report是一项首要的工作任务。衡量优秀的bug report的质量指标应该包括如下:
    o        对管理层来说,是清晰明了的,特别是在概要这一级;
    o        对于开发部门是有用的,主要是给出能够让开发人员高效地调试问题的相关信息
    o        可以很快的将bug“Opened”状态转变成“Closed”状态,减少为得到更多的信息从开发人员打回的差的bug report并导致测试人员返工的时间。

    改进bug报告的流程是需要花费一些时间的,但是也给予了效果显著的回报。首先,简单的流程改进了测试小组和高层、平行管理层之间的沟通,增强小组的信任度,名望和鼓励管理层给测试投资更多的资源。第二,平稳地递交报告给开发人员促进了测试和开发人员之间积极的关系。第三,更短的bug生命周期是更加有效的,在时间上之前花费在编写优秀bug report上的时间和后期由于返工差的bug report花费的时间相抵消。这些回报帮助开发流程通过有效的沟通和高效率的流程获得更好的产品质量。

    Last edited by eatmouse on 2005-6-1 at 08:44]

  • [论坛] 好的测试用例13个特征

    2009-06-22 21:07:25

    上周培训的时候总结了好的测试用例13个特征,欢迎指正探讨
    1、覆盖率
    2、规范性
    3、可测试性
    4、复用率
    5、稳定性
    6、有效性
    7、准确
    8、指导性
    9、高效性
    10、完整
    11、简洁
    12、一致性
    13、清晰明了
    在网上还找到一个checklist,附在下面供参考:

    Here is a checklist for having well-documented,effective and useful test cases:
    以下是一个如何设计文档化、高效、有用测试用例的检查表(checklist
    Quality Attributes
    质量属性
     Accurate: tests what the descrīption says it will test.
    正确性:确保测试标题描述部分的内容正确性。
    Economical: has only the steps needed for its purpose.
    经济性:只为确定需要的目的设计相应的测试步骤。
    Repeatable, self standing: same results no matter who tests it.
    可重复性:自我一致性,即不管谁执行此用例,结果一样。
    Appropriate: for both immediate and future testers.
    适应性:既能适应短期需要,又能考虑长远需要。
    Traceable: to a requirement.
    可追踪性:用例能追踪到一个具体的需求。
     Self cleaning: returns the test environment to clean state.
    自我清理性:单个用例不会影响整个测试环境,即用例执行完了可以恢复原有的测                                                       试环境。
    Structure and testability
    结构化和可测试性
     Has a name and number
    含有规范的测试标题和编号。
    Has a stated purpose that includes what requirement is being tested
     含有一个确定的测试某一个特定需求的目的。
     Has a descrīption of the method of testing
     含有关于测试方法的描述。
    Specifies setup information - environment, data, prerequisite tests, security access
     指定条件信息-环境、数据、预置的条件测试、安全入口等。
     Has actions and expected results
    含有操作步骤和预期结果。
    States if any proofs, such as reports or screen grabs, need to be saved
     陈述任何辅助证据,例如截图报告并确保这些东西妥善保存。
     Leaves the testing environment clean
     确保测试环境的干净(即用例不会影响整个环境)。
     Uses active case language
    描述时使用主动语气结构。
    Does not exceed 15 steps
    操作步骤不要超过15步。
    Matrix does not take longer than 20 minutes to test
     确保单个用例测试执行时用时不超过20分钟。
    Automated scrīpt is commented with purpose, inputs, expected results
     自动化脚本用例添加必要的注释,比如目的、输入和期望结果。
     Setup offers alternative to prerequisite tests, if possible
    如果可能,建议提供可选择性的预置条件测试。
     Is in correct business scenario order with other tests
    用例之间的先后顺序是否跟业务流程一致,即用例在业务流程中的彼此顺序关系是否合理。
    Configuration management
    配置管理
     Employs naming and numbering conventions
     采用命名和编号规范归档。
    Saved in specified formats, file types
    保存为特定的格式,文件类型。
     Is versioned to match software under test
     用例版本是否与当前被测试软件版本一致(对应)。
     Includes test objects needed by the case, such as databases
     包含用例需要的相应测试对象,如特定数据库。
     Stored as read
     存档阅读。
     Stored with controlled access
    存档时按角色控制访问方式
    Stored where network backup operates
    当网络备份时存档。
    Archived off-site
       离线归档。

  • [论坛] 软件测试中需求不明确的测试方法(转)

    2009-06-18 21:11:22

     软件生命周期中,需求是整个周期的源头。良好的开端,是成功的一半。需求的重要性自然不言而喻。但是,在很多企业中,并没有对需求引起足够的重视。原因并不是PM们不知道需求的重要性,而是商业竞争中不得不裁剪某些看似不能获得很大利益的步骤。
      什么是需求?很多PM和开发人员都未必真正考虑过这个问题。IEEE对需求有以下两种定义的方式。
      1. 解决用户问题或达到用户目标需要具备的条件或能力
      2. 遵守合同、协议、规范或其他要求
      然后用规范的文档描述出来,就成了我们熟悉的SRS。
      我们常说的需求,其实并不是我们认为的SRS。SRS应该叫做需求规格说明书。那需求是什么呢?与需求规格有什么区别?
      需求:对要实现的功能的粗略描述
      需求规格:对需求的精确定义
      我们知道,在软件开发过程中,只有得知了需求的精确定义,才能开展工作。比如功能方面,编辑框能支持多少位字符。性能方面,时间和容量规定等。当然还包含其他非功能,性能方面的定义。
      除了以上所说的需求,对于测试人员,还必须有测试需求。这个环节,很少有企业会重视。测试需求分为2方面:
      需要测试哪些方面
      软件是否可测,需要增加哪些开发需求
      其中第一条,很多企业都列到了测试计划中,这也可以,没有规定一定要放到哪个文档里。但是对于第二条,可以说几乎没有多少企业去做。
      接下来,在没有明确需求,需求规格,测试需求的情况下,我们怎么去做测试呢?现在很多企业,其实就是在这种情况下做项目的。
      当测试人员接手一个项目后,第一件事情一定是想了解这个系统的功能,背景,架构。于是,马上就会想得到需求文档。但结果往往是失望的,根本没有文档,或者文档根本不具备参考价值。此时不必太失望,因为这种情况实在是太常见啦。这时,请试着从以下几个步骤着手。
      查阅文档:文档是最具权威的,也是记忆最长久的。有时,我们的项目可能是在原有产品的基础上,进行版本升级。这时,先去找找,有没有原有版本留下的需求,或者是用户手册等文档。从这些文档中,了解项目的背景,系统的基本功能。这对了解新项目是有很大好处的。并且,在产品升级的项目中,验证老版本的功能在新版本中是否正常,也是一个必要的工作。可以先参考老版本的相关文档,设计新版本中的用例。
      也有时,我们的项目是一个行业项目,比如金融项目。我们可以参考一些行业知识的书籍,文档。这对理解系统也有很大的好处。
       实在没有文档,那只好暂时跳过这一步骤了。
      在进入下一步骤之前,你可能得到了一些相关文档,也可能什么也没得到。无论如何,你可能对系统已经有了一些了解。这时,请记录下来,写成文档。无论是对自己,还是对别人,在以后都可能极有参考价值。试想一下,如果前人已经给你留下了这些文档,你是否可以轻松很多?还要注意及时更新你的文档。因为你对系统的理解,随时都在变化着,一定要保证你的文档和当前你对系统的理解是一致的。
    试着使用系统,根据经验和常识猜测:既然没有需求,那可以推测,该项目的管理一定是很糟糕的,对软件测试也不会投入很大的成本。因此,测试人员一般都是在编码完成后才进入项目。这时,应该已经可以看到成型的系统了。在没有需求的情况下,试着先“玩”一下系统吧。在这过程中,你应该对系统有可更深入的认识,在上一阶段中,你可能留下很多疑惑或是猜测,这时应该能排除一部分了。
      使用系统的同时,你应该具备行业知识。系统可能是针对某个专业领域设计的。例如一个期货交易系统。你没有基本的期货知识,比如什么是持仓,什么是平仓。那么你如何能真正理解这个系统呢?当你有了业务知识以后,你会进行更深入的思考,来全面测试系统。
      你还需要具备良好的软件知识。比如某些控件的特性。单选框只能单选,不能多选。日历控件是否可以手工输入非法格式等。这些都是应具备的意识。
      最后加上你的主观判断,你对系统的整体感觉怎么样?是否越用越厌烦,为什么厌烦。系统的反应速度是否可以容忍,细节处理是否圆滑,等等。
      在你认识系统的时候,可以使用一些方法,来帮助你更有效率地学习。比如可以画一些流程图。一图胜万语。同时,你也留下宝贵的文档。当然,这个步骤中,你也要随时注意保留和更新文档,以备后用。
      沟通:需求规格不一定非要以文档的形式表现出来。软件既然能做出来,那肯定是有需求的。而最清除需求的,一定是软件的直接制造者,开发人员。开发人员自己知道需求,但一般不会主动和测试人员沟通。因此,测试一定要主动和开发人员沟通。可以安排会议,让开发人员给测试人员介绍系统,并演示系统。让测试人员对系统有一个整体了解。然后测试人员能进行更细致的测试。在进行细致测试的时候,一定会有更多不明确的地方。这时就需要利用自己的行业知识,计算机知识等,猜测一部分。不需要每个细节都去询问开发人员。因为开发人员也有自己的工作,他们不希望花太多时间来给你解释。
      有些项目中,客户会直接参与到项目组来。这时,测试人员在权限允许的情况下,可以和客户进行沟通。客户那得来的需求,是最原始的需求。但是,客户未必有良好的表达能力来描述希望的功能,也未必有计算机知识,因此不能描述出一些隐式的需求。在被允许的情况下,测试人员可以和客户进行交流,不仅可以帮助客户正确描述出真实需求,测试人员也能详细了解需求。但是项目是要考虑成本的,客户的期望是无限制的。在客户提出需求以后,测试人员要先和PM或其他相关负责人协商后,才能将与客户交流得来的需求,作为测试的依据。同事,第一时间告知相关开发人员最新的信息,也记录成文档。这时,你就将非文档形式的需求,转换为文档形式了。至于文档的格式,不一定要按照标准SRS的格式。因为它本身就不是个规范的SRS。以任何容易理解的方式,组织你的文档。
      有时候,会根本找不到可以沟通的人。不要奇怪,确实就是有这种时候。比如:
    1. 测试一个开源软件
      2.  接到一个测试外包,但又没有得到相关文档,为了追求利益,还是接下了
      3.  软件项目组的部分人员已经联系不上等等
      这时候,一方面需要PM协调获取相关资料,联络相关人员。另一方面,测试人员也可组织头脑风暴,利用集体的智慧,共同探讨和猜测软件中的各个环节。也可以安排Bug Bash,让尽可能多的人员参与随机测试。一定会有人提出具有创造性的意见的。
      在进行以上步骤的时候,利用良好的工具,能让你事半功倍。我经常在使用的一个工具,就是Mindjet MindManager。这是一个很好的,帮助扩展思维的工具。它以分支的形式,来表现你的思维层次。你可以先列出个最基本的系统整体结构,然后逐步细化,增加分支。不要急于一次就将真个系统分析透彻,这是不可能的。你在进行以上步骤的时候,随时会细化这个结构。当项目结束后,看看这个结构图,简直可以当作SRS来参考了

  • [论坛] 测试的五个阶段

    2009-06-09 22:46:02

    阶段0:测试和调试并无区别。除了对调试的支持,测试并无其它目的。 
    阶段1:测试的目的是显示软件是可工作的。 
    阶段2:测试的目的是为了显示软件是不能工作的。 
    阶段3:测试的目的不是去证明任何东西,而是把软件可能不工作的预知风险制约到一个可以接受的范围内。 
    阶段4:测试不是一种行动而是一种心智训练,其结果是无需很多测试的低风险软件。 
    前两个阶段一般被认为是在不成熟的软件实践和过程情况下,个人和团队的荒唐想法。 
    达到阶段2是目前可以发现很多重要缺陷,并且不费太多代价,在一些组织中,这样就可以了。 
    在阶段3中,测试是整个风险管理的一部分,测试聚焦于风险,测试生成风险相关信息。 
    在阶段4更多表现的是一个公司组织的思维方式而非一个测试者的思维方式。当测试在公司组织深入人心,在运行一项测试之前,每个人都会按照降低缺陷产生的方式来行动。

Open Toolbar