你可以不成功,但是不能不成长

发布新日志

  • <Crash dump analysis> 阅读笔记(一)

    2009-12-03 14:10:27

      Crash dump analysis, 又叫崩溃转储分析,也就是所谓的蓝屏死机BSOD,在Windows软件测试过程中要要遇到的问题之一,也是软件测试难点之一。它需要深厚的windows操作系统知识和理解,才能够做到优秀的dump分析员。(本文旨在概括一下dump analsy的大概步骤,建立整体概念,具体的操作方法将另起一篇,请保持关注)
      Crash原因:
      1)运行在内核模式下的设备驱动程序或者操作系统函数引发了一个未被处理的异常,比如内存访问违规,比如企图对内存的只读区域进行写操作或者企图对一个未被映射的地址进行读操作;
      2)Unexpected exception or trap;
      3)内核子系统(memory manager or power manager),又或者驱动(显示器或USB)在他们的运行过程中发生不一致性;
     操作系统发现系统中一部分程序进入了硬件设备或者内存做了一些不该他们做的事情时候,这时候操作系统必须做出一些行为来制止这种情况的继续恶化。为了防止非法操作从内存影响扩大到硬盘,所以就由一个KeBugCheckEx函数来完成这一动作,继而出现蓝屏死机,自动重启。
     在蓝屏画面上有几个有用参数,一个是DEFAULT_BUCKET_ID,一个是Stop code,还有Base address和date stamp。根据这些参数可以知晓到底是哪个系统文件出问题。并可以简单通过注册表和系统文件详细信息初步定位问题。
     但是仅凭蓝屏的有限数据信息不足以定位并且进行dump analysis,我们必须借助一个非常有效的工具Windbg,这是微软开发工具集里面提供的,可以在 http://www.microsoft.com/whdc/devtool/debugging 下载到
     
     Windbg:
      在系统属性下进行相关的设置,或者注册表内修改某个键值就可以打开windows自带的debug功能,在设置对应的.bmp文件放置位置。
     打开windbg,将.bmp文件放入其中,就可以开始dump analyse的工作了。(待续)
  • 转帖:测试新手的答案

    2009-06-23 10:45:44

    新手的答案:为什么想做测试,测试是做什么的,你要做哪种测试,那你怎么看待测试呢?

      我跟一个六年工作经验的前辈聊天时她问的“我不知道你为什么想做测试,测试是做什么的,你要做哪种测试,那你怎么看待测试呢,测试是一种要求策略,能力和自豪感的职业,我对我所做的就很有自豪感。”

      我也对此苦思了好久,终究没有我要的答案,如是我上网搜索了一些值得学习和有助今后找工作面试都有用的答案。下面是我的整理13条定律:

    1、测试是做什么的?
      如果是专业的测试人员的话,那软件测试的工作就相当复杂了,首先制定测试计划是势在必行的,包括测试的起始结束时间,在什么时间要有什么进度,之后就是进行各个测试环节,单元测试——集成测试——系统测试——验收测试。这里边前两步是用到白盒测试,后两步需要的是黑盒测试。
      如果是找测试方面的工作的话,那一开始我相信问得不会很深,但是基础肯定是要知道的,就是什么是黑白盒测试,建议测试文档包含的必须部分等等吧,都是很基础的。


    2、软件测试类型都有哪些?测试类型的区别与联系?
      测试类型有:功能测试,性能测试,界面测试。
      功能测试在测试工作中占的比例最大,功能测试也叫黑盒测试。是把测试对象看作一个黑盒子。利用黑盒测试法进行动态测试时,需要测试软件产品的功能,不需测试软件产品的内部结构和处理过程。采用黑盒技术设计测试用例的方法有:等价类划分、边界值分析、错误推测、因果图和综合策略。
      性能测试是通过自动化测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。负载测试和压力测试都属于性能测试,两者可以结合进行。通过负载测试,确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统各项性能指标的变化情况。压力测试是通过确定一个系统的瓶颈或者不能接收的性能点,来获得系统能提供的最大服务级别的测试。
      界面测试,界面是软件与用户交互的最直接的层,界面的好坏决定用户对软件的第一印象。而且设计良好的界面能够引导用户自己完成相应的操作,起到向导的作用。同时界面如同人的面孔,具有吸引用户的直接优势。设计合理的界面能给用户带来轻松愉悦的感受和成功的感觉,相反由于界面设计的失败,让用户有挫败感,再实用强大的功能都可能在用户的畏惧与放弃中付诸东流。
      区别在于,功能测试关注产品的所有功能上,要考虑到每个细节功能,每个可能存在的功能问题。性能测试主要关注于产品整体的多用户并发下的稳定性和健壮性。界面测试更关注于用户体验上,用户使用该产品的时候是否易用,是否易懂,是否规范(快捷键之类的),是否美观(能否吸引用户的注意力),是否安全(尽量在前台避免用户无意输入无效的数据,当然考虑到体验性,不能太粗鲁的弹出警告)?做某个性能测试的时候,首先它可能是个功能点,首先要保证它的功能是没问题的,然后再考虑该功能点的性能测试。

    3、请试着比较一下黑盒测试、白盒测试、单元测试、集成测试、系统测试、验收测试的区别与联系?  黑盒测试:已知产品的功能设计规格,可以进行测试证明每个实现了的功能是否符合要求。
      白盒测试:已知产品的内部工作过程,可以通过测试证明每种内部操作是否符合设计规格要求,所有内部成分是否以经过检查。
      软件的黑盒测试意味着测试要在软件的接口处进行。这种方法是把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。因此黑盒测试又叫功能测试或数据驱动测试。黑盒测试主要是为了发现以下几类错误:
      1、是否有不正确或遗漏的功能?
      2、在接口上,输入是否能正确的接受?能否输出正确的结果?
      3、是否有数据结构错误或外部信息(例如数据文件)访问错误?
      4、性能上是否能够满足要求?
      5、是否有初始化或终止性错误?
      软件的白盒测试是对软件的过程性细节做细致的检查。这种方法是把测试对象看做一个打开的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。通过在不同点检查程序状态,确定实际状态是否与预期的状态一致。因此白盒测试又称为结构测试或逻辑驱动测试。白盒测试主要是想对程序模块进行如下检查:
      1、对程序模块的所有独立的执行路径至少测试一遍。
      2、对所有的逻辑判定,取“真”与取“假”的两种情况都能至少测一遍。
      3、在循环的边界和运行的界限内执行循环体。
      4、测试内部数据结构的有效性,等等。
      单元测试(模块测试)是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。
      单元测试是由程序员自己来完成,最终受益的也是程序员自己。可以这么说,程序员有责任编写功能代码,同时也就有责任为自己的代码编写单元测试。执行单元测试,就是为了证明这段代码的行为和我们期望的一致。
      集成测试(也叫组装测试,联合测试)是单元测试的逻辑扩展。它的最简单的形式是:两个已经测试过的单元组合成一个组件,并且测试它们之间的接口。从这一层意义上讲,组件是指多个单元的集成聚合。在现实方案中,许多单元组合成组件,而这些组件又聚合成程序的更大部分。方法是测试片段的组合,并最终扩展进程,将您的模块与其他组的模块一起测试。最后,将构成进程的所有模块一起测试。
      系统测试是将经过测试的子系统装配成一个完整系统来测试。它是检验系统是否确实能提供系统方案说明书中指定功能的有效方法。(常见的联调测试)
      系统测试的目的是对最终软件系统进行全面的测试,确保最终软件系统满足产品需求并且遵循系统设计。
      验收测试是部署软件之前的最后一个测试操作。验收测试的目的是确保软件准备就绪,并且可以让最终用户将其用于执行软件的既定功能和任务。
      验收测试是向未来的用户表明系统能够像预定要求那样工作。经集成测试后,已经按照设计把所有的模块组装成一个完整的软件系统,接口错误也已经基本排除了,接着就应该进一步验证软件的有效性,这就是验收测试的任务,即软件的功能和性能如同用户所合理期待的那样。


    4、做好测试用例设计工作的关键是什么?
      白盒测试用例设计的关键是以较少的用例覆盖尽可能多的内部程序逻辑结果;
      黑盒法用例设计的关键同样也是以较少的用例覆盖模块输出和输入接口。不可能做到完全测试,以最少的用例在合理的时间内发现最多的问题。

    5、测试计划工作的目的是什么?测试计划工作的内容都包括什么?其中哪些是最重要的?
      软件测试计划是指导测试过程的纲领性文件,包含了产品概述、测试策略、测试方法、测试区域、测试配置、测试周期、测试资源、测试交流、风险分析等内容。借助软件测试计划,参与测试的项目成员,尤其是测试管理人员,可以明确测试任务和测试方法,保持测试实施过程的顺畅沟通,跟踪和控制测试进度,应对测试过程中的各种变更。
      测试计划和测试详细规格、测试用例之间是战略和战术的关系,测试计划主要从宏观上规划测试活动的范围、方法和资源配置,而测试详细规格、测试用例是完成测试任务的具体战术。所以其中最重要的是测试测试策略和测试方法(最好是能先评审)。

    6、做好测试计划工作的关键是什么?
      1. 明确测试的目标,增强测试计划的实用性
      编写软件测试计划得重要目的就是使测试过程能够发现更多的软件缺陷,因此软件测试计划的价值取决于它对帮助管理测试项目,并且找出软件潜在的缺陷。因此,软件测试计划中的测试范围必须高度覆盖功能需求,测试方法必须切实可行,测试工具并且具有较高的实用性,便于使用,生成的测试结果直观、准确
      2.坚持“5W”规则,明确内容与过程
      “5W”规则指的是“What(做什么)”、“Why(为什么做)”、“When(何时做)”、“Where(在哪里)”、“How(如何做)”。利用“5W”规则创建软件测试计划,可以帮助测试团队理解测试的目的(Why),明确测试的范围和内容(What),确定测试的开始和结束日期(When),指出测试的方法和工具(How),给出测试文档和软件的存放位置(Where)。
      3.采用评审和更新机制,保证测试计划满足实际需求
    测试计划写作完成后,如果没有经过评审,直接发送给测试团队,测试计划内容的可能不准确或遗漏测试内容,或者软件需求变更引起测试范围的增减,而测试计划的内容没有及时更新,误导测试执行人员。
      4. 分别创建测试计划与测试详细规格、测试用例
      应把详细的测试技术指标包含到独立创建的测试详细规格文档,把用于指导测试小组执行测试过程的测试用例放到独立创建的测试用例文档或测试用例管理数据库中。测试计划和测试详细规格、测试用例之间是战略和战术的关系,测试计划主要从宏观上规划测试活动的范围、方法和资源配置,而测试详细规格、测试用例是完成测试任务的具体战术。

    7、测试用例设计方法都有哪些?请分别以具体的例子来说明这些方法在测试用例设计工作中的应用。
      1.等价类划分
      划分等价类: 等价类是指某个输入域的子集合.在该子集合中,各个输入数据对于揭露程序中的错误都是等效的.并合理地假定:测试某等价类的代表值就等于对这一类其它值的测试.因此,可以把全部输入数据合理划分为若干等价类,在每一个等价类中取一个数据作为测试的输入条件,就可以用少量代表性的测试数据.取得较好的测试结果.等价类划分可有两种不同的情况:有效等价类和无效等价类.
      2.边界值分析法
      边界值分析方法是对等价类划分方法的补充。测试工作经验告诉我,大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部.因此针对各种边界情况设计测试用例,可以查出更多的错误.
      使用边界值分析方法设计测试用例,首先应确定边界情况.通常输入和输出等价类的边界,就是应着重测试的边界情况.应当选取正好等于,刚刚大于或刚刚小于边界的值作为测试数据,而不是选取等价类中的典型值或任意值作为测试数据.
      3.错误推测法
      基于经验和直觉推测程序中所有可能存在的各种错误, 从而有针对性的设计测试用例的方法.
      错误推测方法的基本思想: 列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据他们选择测试用例. 例如, 在单元测试时曾列出的许多在模块中常见的错误. 以前产品测试中曾经发现的错误等, 这些就是经验的总结. 还有, 输入数据和输出数据为0的情况. 输入表格为空格或输入表格只有一行. 这些都是容易发生错误的情况. 可选择这些情况下的例子作为测试用例.
      4.因果图方法
      前面介绍的等价类划分方法和边界值分析方法,都是着重考虑输入条件,但未考虑输入条件之间的联系, 相互组合等. 考虑输入条件之间的相互组合,可能会产生一些新的情况. 但要检查输入条件的组合不是一件容易的事情, 即使把所有输入条件划分成等价类,他们之间的组合情况也相当多. 因此必须考虑采用一种适合于描述对于多种条件的组合,相应产生多个动作的形式来考虑设计测试用例. 这就需要利用因果图(逻辑模型). 因果图方法最终生成的就是判定表. 它适合于检查程序输入条件的各种组合情况.

    8、你对测试最大的兴趣在哪里?为什么?
      最大的兴趣就是测试有难度,有挑战性!做测试越久越能感觉到做好测试有多难。曾经在无忧测试网上看到一篇文章,是关于如何做好一名测试工程师。一共罗列了11,12点,有部分是和人的性格有关,有部分需要后天的努力。但除了性格有关的1,2点我没有把握,其他点我都很有信心做好它。
      刚开始进入测试行业时,对测试的认识是从无忧测试网上了解到的一些资料,当时是冲着做测试需要很多技能才能做的好,虽然入门容易,但做好很难,比开发更难,虽然当时我很想做开发(学校专业课我基本上不缺席,因为我喜欢我的专业),但看到测试比开发更难更有挑战性,想做好测试的意志就更坚定了。
      不到一年半的测试工作中,当时的感动和热情没有减退一点(即使环境问题以及自身经验,技术的不足,做测试的你一定也能理解)。
      我觉得做测试整个过程中有2点让我觉得很有难度(对我来说,有难度的东西我就非常感兴趣),第一是测试用例的设计,因为测试的精华就在测试用例的设计上了,要在版本出来之前,把用例写好,用什么测试方法写?(也就是测试计划或测试策略),如果你刚测试一个新任务时,你得花一定的时间去消化业务需求和技术基础,业务需求很好理解(多和产品经理和开发人员沟通就能达到目的),而技术基础可就没那么简单了,这需要你自觉的学习能力,比如说网站吧,最基本的技术知识你要知道网站内部是怎么运作的的,后台是怎么响应用户请求的?测试环境如何搭建?这些都需要最早的学好。至少在开始测试之前能做好基本的准备,可能会遇到什么难题?需求细节是不是没有确定好?这些问题都能在设计用例的时候发现。
      第二是发现BUG的时候了,这应该是测试人员最基本的任务了,一般按测试用例开始测试就能发现大部分的bug,还有一部分bug需要测试的过程中更了解所测版本的情况获得更多信息,补充测试用例,测试出bug。还有如何发现bug?这就需要在测试用例有效的情况下,通过细心和耐心去发现bug了,每个用例都有可能发现bug,每个地方都有可能出错,所以测试过程中思维要清晰(测试过程数据流及结果都得看仔细了,bug都在里面发现的)。如何描述bug也很有讲究,bug在什么情况下会产生,如果条件变化一点点,就不会有这个bug,以哪些最少的操作步骤就能重现这个bug,这个bug产生的规律是什么?如果你够厉害的话,可以帮开发人员初步定位问题。

    9、你的测试职业发展是什么?
      测试经验越多,测试能力越高。所以我的职业发展是需要时间累积的,一步步向着高级测试工程师奔去。而且我也有初步的职业规划,前3年累积测试经验,按如何做好测试工程师的11,12点要求自己,不断的更新自己改正自己,做好测试任务。

    10、你自认为测试的优势在哪里?
      优势在于我对测试坚定不移的信心和热情,虽然经验还不够,但测试需要的基本技能我有信心在工作中得以发挥。

    11、当开发人员说不是BUG时,你如何应付?
      开发人员说不是bug,有2种情况,一是需求没有确定,所以我可以这么做,这个时候可以找来产品经理进行确认,需不需要改动,3方商量确定好后再看要不要改。二是这种情况不可能发生,所以不需要修改,这个时候,我可以先尽可能的说出是BUG的依据是什么?如果被用户发现或出了问题,会有什么不良结果?程序员可能会给你很多理由,你可以对他的解释进行反驳。如果还是不行,那我可以给这个问题提出来,跟开发经理和测试经理进行确认,如果要修改就改,如果不要修改就不改。其实有些真的不是bug,我也只是建议的方式写进TD中,如果开发人员不修改也没有大问题。如果确定是bug的话,一定要坚持自己的立场,让问题得到最后的确认。

    12、你以前工作时的测试流程是什么?
      公司对测试流程没有规定如何做,但每个测试人员都有自己的一套测试流程。我说下我1年来不断改正(自己总结,吸取同行的方法)后的流程吧。需求评审(有开发人员,产品经理,测试人员,项目经理)->需求确定(出一份确定的需求文档)->开发设计文档(开发人员在开始写代码前就能输出设计文档)->想好测试策略,写出测试用例->发给开发人员和测试经理看看(非正式的评审用例)->接到测试版本->执行测试用例(中间可能会补充用例)->提交bug(有些bug需要开发人员的确定(严重级别的,或突然发现的在测试用例范围之外的,难以重现的),有些可以直接录制进TD)->开发人员修改(可以在测试过程中快速的修改)->回归测试(可能又会发现新问题,再按流程开始跑)。

    13、你为什么想离开目前的职务?
      因为公司运作情况并不理想,公司需要调整部门体系,公司考虑到缩减部门人员,所以大批量的裁员(有6,7个),这是我的第一份工作,对公司也有较深的感情,因为在这里我找到了职业理想(就是测试),所以公司需要精简人员,我自愿退出。虽然很舍不得,但我将会有新的发挥能力的舞台。
  • 文档测试

    2009-06-15 11:38:32

    前段时间接了一个客户报上来的bug, 因为涉及到与操作系统相关的安装问题,修复该bug可能要涉及到架构的一些变化,所有产品的安装component都会受到牵连,所以最终选择了在read me文档中添加说明项来解决用户使用过程中遇到的不便。

    文档测试,说起来很简单,就是因为其简单的表象,很容易使测试人员心里麻痹而忽视一些细节。从直觉判断,我觉得这个看似简单的问题也不能简单的对待,于是查阅了一些书籍,对文档测试进行了一些深入的理解。

    作为一个软件测试人员,一定要具备宏观的质量意识,不仅仅是专注于业务和技术。随着软件产品的日趋复杂化,文档已经成为软件产品的重要组成部分之一,其中包括:

    1.Package text and graphics.
    2.Marketing material, ads, and other insert.
    3.Warranty/registration.
    4.EULA- end user license Agreement.
    5.Labels and stickers.
    6.Installation and setup instructions.
    7.User's manual.
    8.Online help.
    9.tutorials, wizard, and CBT(computer base training).
    10.Samples, examples, and templates.
    11.Error messages.
    所有的这些item都是大部分专业客户在使用过程中密切关注的,如果任何一项出现错误或者低可用性,都会严重影响客户的使用感,从而对我们的产品质量产生不好的感觉。因此,文档测试必须和代码测试,功能测试等一样同等重视。

    那么,一个好的文档测试可以给软件产品带来什么好处呢? 首先,提高了软件的可用性;其次,提高了软件稳定性;最后,降低了技术支持的成本。
    为什么这么说呢?如果客户在文档中找不到软件使用的说明,那么势必会对使用产生一些疑惑,或者因为错误使用而导致不可预知的结果。最终客户将会致电客服技术支持来寻求解决。如果在一开始文档就有比较完善的测试,就不会导致上面一系列的结果。

    就像software testing里面所说:A very effective approach to testing it is to treat it just like a user would. Read it carefully, follow every step, examine every step, examine every figure, and try every example. If there is sample code, type it in and make sure it works as described. With this simple real-world approach, you'll find bugs both in the software and the documentation.

    基于这些理解,最终我是怎么来测试这个read me文档的呢?

    1.可用性测试:我首先重现了这个客户报上来的bug,并且理解了问题的原因,然后仔细阅读了read me文档里面添加的内容,按照里面所描述的逻辑进行操作,看问题是否被修复了。
    2.进行了拼写检查,和描述清晰度检查,考虑是否有第二种理解,或者歧义,然后根据第二种或者第三种理解进行操作,看是否会出现不可预知的错误;
    3.检查文档是否安全,是否带有威胁性的病毒或者不安全因素;
    4.检查所有的问题都被描述到,并且在制定的build里面已经包含了该文档;

    最后我发现这个添加的描述存在理解歧义,客户容易产生疑惑,并且不能很快的解决问题。我试图和文档开发人员进行了沟通,最终他认可了我的建议,将这段文字进行了修改。

    似乎整个过程表面上看起来略显繁琐,有点吹毛求疵的嫌疑。但是我觉得作为一个软件测试人员,就是需要将质量意识贯穿到每一个日常工作中,才能够提高客户满意度,建立真正的“customer driven”意识。

  • 回归测试(Regression Test)

    2009-02-11 10:39:31

    从年前开始做一个产品新buildregression 测试,因为是第一次接触产品,之前没有时间去了解功能,着实花了很多时间,连续加班半个月,还是有点累人的。在这里总结一下这大半个月的工作,从中学到知识得到成长。

     

    结合实践,我希望对regression有更加透彻的理解,以帮助日后的工作:

    查了一些资料,先从原理来理解。

    Regress 的英语定义是:  return  to  a  worse  or  lessdeveloped state

    Regression test 的意义在于:在新版本上运行所有已通过测试的case,从而验证新版本的稳定性。

     

    在软件项目中,如果一个模块或功能以前是正常工作的,但是在一个新的构建中出了问题,那这个模块就出现了一个“退步”(Regression),从正常工作的稳定状态退化到不正常工作的不稳定状态。

     

    在一个模块的功能逐步完成的同时,与此功能有关的测试用例也同样在完善中。一旦有关的测试用例通过,我们就得到了此模块的功能基准(Baseline)。

     

    如果这样的“倒退”是由于模块的功能发生了正常变化(由于设计变更的原因)引起的,那么测试用例的基准就要修改,以便和新的功能保持一致。

     

    针对一个Bug Fix,我们也要作Regression Test

     

    1)验证新的代码的确把缺陷改正了。

    2)同时要验证新的代码没有把模块的现有功能破坏,没有Regression

     

    回归测试最好要自动化,因为这样就可以对于每一个构建快速运行所有回归测试,以保证尽早发现问题。

     

    结合上面的原理,我总结有以下几点:

    1.       Regression测试主要目的是验证模块和功能是否出现倒退,以前修过的bug是否重新复发;

    2.       Regression测试除了围绕上面两个工作展开,还需要进行测试用例baseline的维护工作:

    a)         模块功能的正常变化所引起的不符合,需要及时更正case

    b)         把上一个版本所出现并且修复的缺陷及时的引入到case库里面;

    c)         把功能的变更和名称的改动及时地反映到case里面;

    3.       Regression测试中也会遇到以前版本里面本来就存在但没有被发现的缺陷,但这些缺陷不应该作为重点验证的部分,因为regression测试的主要目的是发现因为修改而出现的倒退现象;

    4.       为了节省时间和精力,节约成本,regression测试应该重点侧重于分析因为上一版本所改动部分可能引起的问题并重点验证,而不要过多的集中于一些边缘测试和性能测试等;

     

    这就是我这次项目所学到的东西,帮助我对下一次regression测试的效率和重点有所调整。也希望对你有所帮助!

  • 根据需求文档设计测试用例

    2008-08-22 14:22:54

        测试用例(Test Case)是为某个特殊目标而编制的一组测试输入、执行条件以及预期结果,以便测试某个程序路径或核实是否满足某个特定需求。对软件的每个特定功能或运行操作路径的测试构成了一个个测试用例。
        目前的功能测试用例都需要首先进行需求理解,再进行用例设计,这些过程都是基于人工实现的。尤其是测试用例的测试输入部分需要人来理解需求并组合测试步骤,测试用例的预期结果业需要人工来提取。人工撰写功能测试用例,不仅耗费大量时间在需求理解阶段,而且也需要花费大量人力和时间撰写。尽管这样,撰写出来的测试用例仍然存在覆盖度不均衡,依赖用例撰写者的经验和能力,以及不能够完全的的复现需求的问题。

    一、需求文档分析
    通过分析需求文档的章节排版和内容格式,将需求分解成一个个Feature、Sub Feature、case的描述。
    比如例1:
    ***********************************************
    1 Place a call .................................Feature1
    1.1 Dialling........................................Sub Feature1
    Phone number: “0~9”
    Case 1
    Tap the keyboard then input the correct phone number or select the phone number from contacts or select it from the call history, then tap the “Dial” button, can make a call. The dialing main interface is as below:
    *Interface image*
    Case 2
    Tap the “End call” button……
    1.2 Incoming Call...................................Sub Feature2
    1.3 XX..........................................Sub Feature3
    2 Calendar reminder.....................Feature2
    3 XX.............................................Feature3
    ***********************************************

    产生出以下的编号和子功能 case描述:
    Data format:Phone number[0~9]
    F1_SF1_C1 :
    Tap the keyboard then input the correct phone number or select the phone number from contacts or select it from the call history, then tap the “Dial” button, can make a call. The dialing main interface is as below:
    *Interface image*
    F1_SF1_C2 :
    Tap the “End call” button……
    F1_SF2........:

    二、测试需求分析

    测试需求分析就是将前面提取出来的case描述逻辑词汇识别出来,画出逻辑关系图,再使用决策表或者因果图的用例设计方法,一个功能点尽可能全面的覆盖尽可能多的测试用例:

    举例如下:(个人观点,仅供参考,讲得不对也请指出来)
    1、 将子功能Case描述中的逻辑关键字提取出来,如:或\或者(or)、和(and)、与(and)、并且(and)、然后(and)、否(not)、不(not)、非(not)、反之(not)、当(if)、如果(if)等,建立起步骤间的逻辑关系。
    2、 将子功能Case描述中的句法和语义进行分析,将条件、动作和结果分别识别出来。
    比如,F1_SF1_C1就可以被分解成:
    <Tap> the keyboard (then) <input> the correct phone number (or) <select> the phone number from contacts (or) <select> it from the call history, (then) <tap> the “Dial” button, [can] make a call.
    根据例1,可以画出测试步骤逻辑关系。
      因为例一较简单,所涉及的逻辑层次只有两层,对于有三层以上的情况,将会有更加复杂的逻辑关系图。

    用例设计
    根据

    功能

    子功能

    用例编号

    测试输入

    测试预期结果

    Place a call

    Dialling

    PC_D_001

    Tap the key board, and input phone number:

    139XXXXXXXX

    159XXXXXXXX

    …….. , and tap the Dial button

    Can make a call

    PC_D_002

    Tap the contact edit,and slide the contact list up, and select the contacter, and tap the Dial button

    PC_D_003

    Tap the call history……

     

  • 需求说明书与测试用例

    2008-08-22 14:00:50

        测试第一步应是文档先行,而不是拿到软件就开始盲目测试!   

        软件测试的原则之一就是“尽早的进入到软件开发周期中进行测试”。在产品需求设计阶段,测试人员就应该开始介入,一方面是为了参与产品需求设计的验证和确认,从而在软件开发初始阶段降低软件缺陷的发生;另一方面是尽早的理解产品需求,为测试计划的定制和测试用例的设计做准备。

        因此,需求确认阶段的测试用例很大程度上来自于对于产品需求设计文档的理解和解析。但是,由于软件开发面向需求的特性,使实现过程中软件需求不断升级、细化、变更和增加,其所伴随的测试例等也必须随之升级以适应,导致测试任务难度加大,风险升级。

        把握好测试用例的上游产品——需求说明书的质量,就能够尽早的发现问题;通过对需求规格说明书特性的分析,以及测试用例与需求说明书之间关系的分析,就能够很好的建立起测试用例与需求之间的关系,增加测试覆盖率,提高需求文档的编写质量。

    需求规格说明书的特点如下:

    1.    不含糊的/无歧异性:

       最终产品的每一个特性只用某一术语描述,使用正规化的需求说明语言。

    2.    可追踪性

       每一个需求的来源是清楚的

       具有「向后的追踪能力」:每一个需求皆明确的参照到他先前文件的来源

       具有「向前追踪能力」:每一个在SRS中的需求皆具有独一的命名或参照号码。

    3.    可验证性

    4.    完整性

       对于所有有效或无效的输入值皆必须明确说明软件的响应

       所有在SRS中的图片、表格与图例皆必须具有完整的标示与参照,并且必须定义所有的名词与衡量单位

    5.    一致性

       各个需求的描述不矛盾。即所谓的内部一致性

       一个SRS 是具有内部一致性的,则表示没有个别需求描述的子集合是互相冲突的

       SRS 中可能发生的冲突:真实世界的对象的具体特性可能发生冲突;在二个被叙述的行动之间可能有逻辑上的或时间上的冲突;二个或较多的需求可能描述相同的真实世界对象,但却使用不同的术语

    6.    可修正性

       SRS的结构和风格是可以修正的

       任何需求的变化皆可以容易地、完全地、和一致地进行,并且保持原有的结构风格具有一个一致、易使用且包含目次 , 索引, 和明确的前后参照的组织不是多余的分开地表达每个需求,而不是与其它的需求相混合。

     

    需求说明书的低级测试技术

    完整。是否有遗漏和丢失?完全吗?单独使用是否包含全部内容?

    准确。解决方案正确吗?目标明确吗?有没有错误?

    精确、不含糊、清晰。描述是否一清二楚?还是自说自话?容易看懂和理解吗?

    一致。产品功能描述是否自相矛盾?与其它功能有无冲突?

    贴切。描述功能的陈述是否必要?有没有多余信息?功能是否原来的客户要求?

    合理。在特定预算和进度下,以现有人力、物力和资源能否实现?

    代码无关。是否坚持定义产品,而不是定义其所依赖的设计、架构和代码?

    可测试。特性能否测试?测试员建立验证操作的测试错误程序是否提供足够的信息?

    需求说明书7个用语检查清单

    1.总是、每一种、所有、没有、从不。

    看到此类绝对或肯定的切实认定的叙述,可以着手设计针锋相对的案例。

    2.当然、因此、明显、显然、必然。

    这些话意图诱使接受假定情况。不要中了圈套。

    3.某些、有时、常常、通常、经常、大多、几乎。

    这些话太过模糊。“有时”发生作用的功能无法测试

    4.等等、诸如此类、依此类推。

    以这样的词结束的功能清单无法测试。功能清单要绝对或者解释明确。

    5.良好、迅速、廉价、高效、稳定。

    这些是不确定的说法,不可测试。如果在产品说明书出现,必须要求进一步指明含义。

    6.已处理、已拒绝、已忽略、已消除。

    这些说法可能会隐藏大量需要说明的功能。

    7.如果...那么...(没有否则)。

    缺少配套的否则,想一想,“如果”没有发生会怎样呢?

         从上面我们可以看出,需求说明书的这些特定用语都带有逻辑和程度的语义,测试工程师可以通过分析这些语义逻辑关系,再结合因果图和决策表的用例设计方法设计出测试用例来。

         更加深入探究的话,如果一份严格按照一定的规则编写的需求说明书,就能够通过计算机对自然语言的逻辑分析,再结合因果图和决策表的用例设计方法,自动产生出测试用例来。

     

Open Toolbar