白天图生存,晚上求发展!

发布新日志

  • 如何制定软件项目测试计划

    2007-06-21 15:12:22Top 1 Digest 1

    随着测试走向规范化管理,测试计划成为测试经理必须完成的重要任务之一,本文根据实践经验结合理论,探讨如何制定软件项目测试计划。
      关键字 测试计划 变更
      软件测试计划作为软件项目计划的子计划,在项目启动初期是必须规划的。在越来越多公司的软件开发中,软件质量日益受到重视,测试过程也从一个相对独立的步骤越来越紧密嵌套在软件整个生命周期中,这样,如何规划整个项目周期的测试工作;如何将测试工作上升到测试管理的高度都依赖于测试计划的制定。测试计划因此也成为测试工作的赖于展开的基础。
      一个好的测试计划可以起到如下作用
      1. 避免测试的事件驱动
      2. 使测试工作和整个开发工作融合起来
      3. 资源和变更事先作为一个可控制的风险

      测试计划的模板在各个公司中都大同小异,在个人实践中发现,测试计划制定中存在的问题具有相似性,下面重点就这些相似的问题谈谈如何制定软件项目测试计划。

      问题一:测试阶段划分
      就通常软件项目而言,基本上采用瀑布型开发方式,这种开发方式下,各个项目主要活动比较清晰,易于操作。整个项目生命周期为需求-设计-编码-测试-发布-实施-维护。然而,在制定测试计划时候,有些测试经理对测试的阶段划分还不是十分明晰,经常性遇到的问题是把测试单纯理解成系统测试,或者把把各类型测试设计(测试用例的编写和测试数据准备)全部放入生命周期的测试阶段,这样造成的问题是浪费了开发阶段可以并行的项目日程,另一方面造成测试不足。

      合理的测试阶段应遵循下面划分方法:


      照上图所述,相应阶段可以同步进行相应的测试计划编制,而测试设计也可以结合在开发过程中实现并行,测试的实施即执行测试的活动即可连贯在开发之后。值得注意的是:单元测试和集成测试往往由开发人员承担,因此这部分的阶段划分可能会安排在开发计划而不是测试计划中。
      问题二:系统测试阶段日程安排
      划分阶段清楚了,随之而来的问题是测试执行需要多长的时间?标准的工程方法或CMM方式是对工作量进行估算,然后得出具体的估算值。但是这种方法过于复杂,可以另辟专题讨论。一个可操作的简单方法是:根据测试执行上一阶段的活动时间进行换算,换算方法是与上一阶段活动时间111~15左右。举个例子,对测试经理来说,因为开发计划可能包含了单元测试和集成测试,系统测试的时间大概是编码阶段(包含单元测试和集成测试)115倍。这种方法的优点是简单,依赖于项目计划的日程安排,缺点是水分太多,难于量化。那么,可以采用的另一个简单方法是经验评估。评估方法如下:

      1. 计算需求文档的页数,得出系统测试用例的页数
      需求页数:系统测试用例页数 ≈ 11

      2. 由系统测试用例页数计算编写系统测试用例时间
      编写系统测试用例时间系统测试用例页数×1小时

      3. 计算执行系统测试用例时间
      编写系统用例用时:执行系统测试用时 ≈ 12

      4. 计算回归测试包含的时间
      系统测试用时:回归测试用时≈ 21

      注:以上比值是个人工程经验值,需要更正比值的测试经理可以在具体实践中收集数据

      基于以上方法优点是需求为已知的,可以利用已知来推算未知,适用于需求是已知且相对稳定的情况下;缺点是处于研发状态的项目,需求不清晰的时候比较难计算。现套用一个例子加于说明:需求文档页数为500,系统测试用例页数推算为500,则编写系统测试用例时间为500小时,执行系统测试用例时间为1000小时,回归测试需要500小时,加起来总共为2000小时,按一天8小时计算,共计250个工作日/人;假如一个月为22个工作日,则共计约11/月,即投入4个人需要3个月左右时间工作量完成。当然,这是系统测试需要的全部时间。根据测试阶段划分原则,设计用例时间可以和开发同步进行,只需在测试阶段中安排的时间为1500小时即42个月工作量。

      (测试经理在编写测试计划时候,测试进度中的计划开始/结束时间往往用如20050101-20051201的具体时间划分方式,这样引起的问题是当项目计划进行变更的时候,测试计划时间不得不随时调整,这种变更可能是频繁而琐碎的,可以替代的办法是取消这种方式,采用30工作日/2人或者2人月这种工作量记录方式,这样一来,只需在项目计划中跟踪阶段的具体开始时间即可,不必反复修改测试计划。)

      值得注意的是:国内大多数公司的测试时间都是不足的,不可能按照这样的理想比例进行运作,因为测试执行的时间实际上不可能占据整个项目周期的1/2,甚至要短于其中任何一个项目阶段时间。即使是微软的测试结束原则也并不是完成所有必需的测试,而是测试在按计划结束的那一天结束!在测试时间不足的情况下,可参考下面项目计划变更时的做法,因为计划变更也涉及到测试时间不足的情况。

      问题三:变更的控制
      测试计划改变了已往根据任务进行测试的方式,因此,为使测试计划得到贯彻和落实,测试组人员必须及时跟踪软件开发的过程,对产品提交测试做准备,测试计划的目的,本身就是强调按规划的测试战略进行测试,淘汰以往以任务为主的临时性。在这种情况下,测试计划中强调对变更的控制显得尤为重要。

      变更来源于以下几个方面
      1. 项目计划的变更
      2. 需求的变更
      3. 测试产品版本的变更
      4. 测试资源的变更

      测试阶段的风险主要是对上述变更所造成的不确定性,有效的应对这些变更就能降低风险发生的几率。要想计划本身不成为空谈和空白无用的纸质文档,对不确定因素的预见和事先防范必须做到心中有数。

      对于项目计划的变更,除了测试人员及时跟进项目以外,项目经理必须认识到测试组也是项目成员,因此必须把这些变更信息及时通知到项目组,使得整个项目得到顺延。项目计划变更一般涉及都是日程变更,令人遗憾的是,往往为了进度的原因,交付期限是既定的,项目经理不得不减少测试的时间,这样,执行测试的时间就被压缩了。在这种情况下,测试经理常常固执的认为进度缩减的唯一的方法就是向上级通报并主观认为产品质量一定会下降,这种做法和想法不一定是正确的。由于时间不足,不能完美的执行所有测试,为了保证质量,第一种办法是调整测试计划中的测试策略和测试范围,实践中测试经理常常忽略测试计划的这个章节。调整的目的是重新检查不重要的测试部分,调换测试的次序和减少测试规模,对测试类型重新组合择优,力求在限定时间内做最重要部分的测试,可以把忽略部分留给确认测试或现场测试。其他应对办法包括减少进入测试的阻力,例如降低测试计划中系统测试准入准则;分步提交测试,例如改成迭代方式增量测试;减少回归测试的要求,例如开发人员实时修改,在测试计划中对缺陷修复响应时间和过程进行约定;和公司QA商量进行简化配置管理,跳过正式发布环节;缺陷进行局部回归而不是重新全部测试等等。

      第二:项目进行过程中最不可避免的就是需求的变更。那么,测试计划中就不能进行控制和约束的吗?答案是未必。当制定计划时,如果项目需求处于动态变化时,在测试用例章节就要进行说明。许多测试经理在编制测试用例时往往没有把测试用例和测试数据进行区分,因此,造成的问题是当需求变化时辛辛苦苦设计的数据就作废了。在这时,假使面临一个需求动态的项目,必须在计划中对需求变更造成的测试(设计)方式变化进行说明,例如采用用例和数据分离、流程和界面分离、字典项和数据元素分离的设计方式,然后等到最终需求确定后细化测试设计;另一个方面是最好制定一个变更周期的约定――尤其在执行测试阶段发现需求的变更――定义变更的最大频度和重新测试的界限,计划从一定程度上能够降低不可预期需求变化造成的投入损失。值得注意的是:需求发生变更时测试经理额外的工作是记住要在需求跟踪矩阵上做记录。

      对于测试产品版本的变更,除了部分是由于需求变更造成之外,很有可能是由于修改缺陷引发的问题或配置管理不严格造成。众所周知,测试必须是基于一个稳定的基线进行,否则,因反复修改造成测试资源和开发资源的浪费是可观的。合理的测试计划在章节中应增加一个测试更新管理的章节,在此章节明确更新周期和暂停测试的原则。例如,小版本的产品更新不能大于每天三次,一个相对大的版本不能每周大于1次,规定紧急发布产品仅限于何种类型的修改或变更,由谁负责统一维护和同步更新测试环境。测试计划通常制定了准入和准出准则,这是不够的,要考虑测试暂停的时候,产品错误发布或者服务器数据更新就是一个例子,暂停的时候如果测试经理不进行跟踪,可能发生测试组等待测试而没人通知继续测试的情况,所以,增加更新周期和暂停测试原则是很有必要的。

       最后,测试资源的变更是源自测试组内部的风险而非开发组风险,当测试资源不足或者冲突,测试部门不可能安排如此多的人手和足够时间参与测试时,在测试计划中的控制方法与测试时间不足相类似。没有测试经理愿意承担资源不足的测试工作,只能说公司本身是否具备以质量为主的体系或者项目经理对产品质量的重视程度如何决定了对测试资源投入的大小,最终产品质量取决因素不仅仅在于测试经理。为了排除这种风险,除了象时间不足、测试计划变更时那样缩减测试规模等等方法以外,测试经理必须在人力资源和测试环境一栏标出明确需要保证的资源,否则,必须将这个问题作为风险记录。规避风险的办法可能有:
      一,项目组的需求和实施人员参与系统测试;
      二,抽调不同模块开发者进行交叉系统测试或借用其他项目开发人员;
      三,组织客户方进行确认测试或发布β版本。

       尽管上面尽可能的描述了测试计划如何制定才能完美,但是还存在的问题是对测试计划的管理和监控。一份计划投入再多的时间去做也不能保证按照这份计划进行实施。好的测试计划是成功的一半,另一半是对测试计划的执行。对小项目而言,一份更易于操作的测试计划更为实用,对中型乃至大型项目来看,测试经理的测试管理能力就显得格外重要,要确保计划不折不扣的执行下去,测试经理的人际谐调能力,项目测试的操作经验、公司的质量现状都能够对项目测试产生足够的影响。另外,计划也是动态的!不必要把所有的因素都可能囊括进去,也不必要针对这种变化额外制定计划的计划,测试计划制定不能在项目开始后束之高阁,而是紧追项目的变化,实时进行思考和贯彻,根据现实修改,然后成功实施,这才能实现测试计划的最终目标――保证项目最终产品的质量!

     

  • 测试报告编写指南

    2007-06-21 12:11:26Top 1 Digest 1

              摘要

      测试报告是把测试的过程和结果写成文档,并对发现的问题和缺陷进行分析,为纠正软件的存在的质量问题提供依据,同时为软件验收和交付打下基础。本文提供测试报告模板以及如何编写的实例指南。


    关键字  

    测试报告 缺陷

    正文
        测试报告是测试阶段最后的文档产出物,优秀的测试经理应该具备良好的文档编写能力,一份详细的测试报告包含足够的信息,包括产品质量和测试过程的评价,测试报告基于测试中的数据采集以及对最终的测试结果分析。
    下面以通用的测试报告模板为例,详细展开对测试报告编写的具体描述。
    PART 首页
    0.1页面内容:
    密级

        
    通常,测试报告供内部测试完毕后使用,因此密级为中,如果可供用户和更多的人阅读,密级为低,高密级的测试报告适合内部研发项目以及涉及保密行业和技术版权的项目。

    XXXX
    项目/系统测试报告

    报告编号

        
    可供索引的内部编号或者用户要求分布提交时的序列号

    部门经理 ______项目经理______
    开发经理______测试经理______

    XXX公司 XXXX单位 (此处包含用户单位以及研发此系统的公司)
    XXXX
    XXXX

    0.2
    格式要求:

        
    标题一般采用大体字(如一号),加粗,宋体,居中排列

    副标题采用大体小一号字(如二号)加粗,宋体,居中排列

    其他采用四号字,宋体,居中排列

    0.3
    版本控制:

    版本 作者 时间 变更摘要

    新建/变更/审核

    PART引言部分

    1.1编写目的
        
    本测试报告的具体编写目的,指出预期的读者范围。

    实例:本测试报告为XXX项目的测试报告,目的在于总结测试阶段的测试以及分析测试结果,描述系统是否符合需求(或达到XXX功能目标)。预期参考人员包括用户、测试人员、、开发人员、项目管理者、其他质量管理人员和需要阅读本报告的高层经理。

    提示:通常,用户对测试结论部分感兴趣,开发人员希望从缺陷结果以及分析得到产品开发质量的信息,项目管理者对测试执行中成本、资源和时间予与重视,而高层经理希望能够阅读到简单的图表并且能够与其他项目进行同向比较。此部分可以具体描述为什么类型的人可参考本报告XXXXXX章节,你的报告读者越多,你的工作越容易被人重视,前提是必须让阅读者感到你的报告是有价值而且值得浪费一点时间去关注的。

    1.2
    项目背景

        
    对项目目标和目的进行简要说明。必要时包括简史,这部分不需要脑力劳动,直接从需求或者招标文件中拷贝即可。

    1.3
    系统简介

        
    如果设计说明书有此部分,照抄。注意必要的框架图和网络拓扑图能吸引眼球。

    1.4
    术语和缩写词

        
    列出设计本系统/项目的专用术语和缩写语约定。对于技术相关的名词和与多义词一定要注明清楚,以便阅读时不会产生歧义。

    1.5
    参考资料

    1
    .需求、设计、测试用例、手册以及其他项目文档都是范围内可参考的东西。

    2
    .测试使用的国家标准、行业指标、公司规范和质量手册等等

    PART
    测试概要
    测试的概要介绍,包括测试的一些声明、测试范围、测试目的等等,主要是测试情况简介。(其他测试经理和质量人员关注部分)

    2.1
    测试用例设计

        
    简要介绍测试用例的设计方法。例如:等价类划分、边界值、因果图,以及用这类方法(3-4)

    提示:如果能够具体对设计进行说明,在其他开发人员、测试经理阅读的时候就容易对你的用例设计有个整体的概念,顺便说一句,在这里写上一些非常规的设计方法也是有利的,至少在没有看到测试结论之前就可以了解到测试经理的设计技术,重点测试部分一定要保证有两种以上不同的用例设计方法。

    2.2
    测试环境与配置

        
    简要介绍测试环境及其配置。
     
     
    提示:清单如下,如果系统/项目比较大,则用表格方式列出

    数据库服务器配置
    CPU

    内存:

    硬盘:可用空间大小

    操作系统:

    应用软件:

    机器网络名:

    局域网地址:

    应用服务器配置

    …….
    客户端配置

    …….

        对于网络设备和要求也可以使用相应的表格,对于三层架构的,可以根据网络拓扑图列出相关配置。
    2.3
    测试方法(和工具
    )
        
    简要介绍测试中采用的方法(和工具)

    提示:主要是黑盒测试,测试方法可以写上测试的重点和采用的测试模式,这样可以一目了然的知道是否遗漏了重要的测试点和关键块。工具为可选项,当使用到测试工具和相关工具时,要说明。注意要注明是自产还是厂商,版本号多少,在测试报告发布后要避免大多工具的版权问题。

    PART
    测试结果及缺陷分析
    整个测试报告中这是最激动人心的部分,这部分主要汇总各种数据并进行度量,度量包括对测试过程的度量和能力评估、对软件产品的质量度量和产品评估。对于不需要过程度量或者相对较小的项目,例如用于验收时提交用户的测试报告、小型项目的测试报告,可省略过程方面的度量部分;而采用了CMM/ISO或者其他工程标准过程的,需要提供过程改进建议和参考的测试报告-主要用于公司内部测试改进和缺陷预防机制-则过程度量需要列出。

    3.1
    测试执行情况与记录

    描述测试资源消耗情况,记录实际数据。(测试、项目经理关注部分)

    3.1.1
    测试组织

        
    可列出简单的测试组架构图,包括:

    测试组架构 (如存在分组、用户参与等情况)

    测试经理(领导人员)

    主要测试人员

    参与测试人员

    3.1.2
    测试时间

        
    列出测试的跨度和工作量,最好区分测试文档和活动的时间。数据可供过程度量使用。

    例如 XXX子系统/子功能

    实际开始时间-实际结束时间

    总工时/总工作日

    任务 开始时间 结束时间 总计

    合计

        
    对于大系统/项目来说最终要统计资源的总投入,必要时要增加成本一栏,以便管理者清楚的知道究竟花费了多少人力去完成测试。

    测试类型 人员成本 工具设备 其他费用


    总计

        
    在数据汇总时可以统计个人的平均投入时间和总体时间、整体投入平均时间和总体时间,还可以算出每一个功能点所花费的时/人。

    用时人员 编写用例 执行测试 总计


    合计
     
    这部分用于过程度量的数据包括文档生产率和测试执行率。

    生产率人员 用例/编写时间 用例/执行时间 平均


    合计

    3.1.3
    测试版本

        
    给出测试的版本,如果是最终报告,可能要报告测试次数回归测试多少次。列出表格清单则便于知道那个子系统/子模块的测试频度,对于多次回归的子系统/子模块将引起开发者关注。

    3.2
    覆盖分析

    3.2.1
    需求覆盖

        
    需求覆盖率是指经过测试的需求/功能和需求规格说明书中所有需求/功能的比值,通常情况下要达到100%的目标。

    需求/功能(或编号) 测试类型 是否通过 备注

    [Y][P][N][N/A]
    根据测试结果 ,按编号给出每一测试需求的通过与否结论。P表示部分通过,N/A表示不可测试或者用例不适用。实际上,需求跟踪矩阵列出了一一对应的用例情况以避免遗漏,此表作用为传达需求的测试信息以供检查和审核。

    需求覆盖率计算 Y/需求总数 ×100

    3.2.2
    测试覆盖

        
    需求/功能(或编号) 用例个数 执行总数 未执行 /漏测分析和原因


        
    实际上,测试用例已经记载了预期结果数据,测试缺陷上说明了实测结果数据和与预期结果数据的偏差;因此没有必要对每个编号在此包含更详细的说明的缺陷记录与偏差,列表的目的仅在于更好的查看测试结果。

    测试覆盖率计算 执行数/用例总数 ×100

    3.2缺陷的统计与分析
        
    缺陷统计主要涉及到被测系统的质量,因此,这部分成为开发人员、质量人员重点关注的部分。

    3.3.1
    缺陷汇总

        
    被测系统 系统测试 回归测试 总计


    合计

    按严重程度

    严重 一般 微小

    按缺陷类型
    用户界面 一致性 功能 算法 接口 文档 用户界面 其他

    按功能分布
    功能一 功能二 功能三 功能四 功能五 功能六 功能七

    最好给出缺陷的饼状图和柱状图以便直观查看。俗话说一图胜千言,图标能够使阅读者迅速获得信息,尤其是各层面管理人员没有时间去逐项阅读文章。

    图例
    3.3.2
    缺陷分析

        
    本部分对上述缺陷和其他收集数据进行综合分析

    缺陷综合分析

    缺陷发现效率 缺陷总数/执行测试用时

    可到具体人员得出平均指标

    用例质量 缺陷总数/测试用例总数 ×100

    缺陷密度 缺陷总数/功能点总数

    查看(854) 评论(0) 收藏 分享 管理

  • 软件测试的14种类型

    2007-06-20 10:23:00Top 1 Digest 2

    软件测试是指使用人工或者自动的手段来运行或测定某个软件产品系统的过程,其目的是在于检验是否满足规定的需求或者弄清预期的结果与实际结果的区别。本文主要描述软件测试的类型。

    1 数据和数据库完整性测试

    数据与数据库完整测试是指测试关系型数据库完整性原则以及数据合理性测试。
    数据库完整性原即:
    主码完整性:主码不能为空;
    外码完整性:外码必须等于对应的主码或者为空。
    数据合理性指数据在数据库中的类型,长度,索引等是否建的比较合理。
    在项目名称中,数据库和数据库进程应作为一个子系统来进行测试。在测试这些子系统时,不应将测试对象的用户界面用作数据的接口。对于数据库管理系统 (DBMS),还需要进行深入的研究,以确定可以支1持测试的工具和技术。

    比如,有两张表:部门和员工。部门中有部门编号,部门名称,部门经理等字段,主码为部门编号;员工表中有员工编号,员工所属部门编号,员工名称,员工类型等字段,主码为员工编号,外码为员工所属部门编号,对应部门表。如果在某条部门记录中部门编号或员工记录员工编号为空,他就违反主码完整性原则。如果某个员工所属部门的编号为##,但是##在部门编号中确找不到,这就违反外码完整性原则。
    员工类型如下定义:0:职工,1:职员,2:实习生。但数据类型为Int,我们都知道Int占有4个字节,如果定义成char(1).就比原来节约空间。


    2 白盒测试

    白盒测试是基于代码的测试,测试人员通过阅读程序代码或者通过使用开发工具中的单步调试来判断软件的质量,一般黑盒测试由项目经理在程序员开发中来实现。白盒测试分为动态白盒测试和静态白盒测试
    2.1 静态白盒测试
    利用眼睛,浏览代码,凭借经验,找出代码中的错误或者代码中不符合书写规范的地方。比如,代码规范中规定,函数必须为动宾结构。而黑盒测试发现一个函数定义如下:
    Function NameGet(){
    ….
    }
    这是属于不符合开发规范的错误。
    有这样一段代码:
    if (i<0) & (i>=0)

    这段代码交集为整个数轴,IF语句没有必要
    I=0;
    while(I>100){
    J=J+100;
    T=J*PI;
    }
    在循环体内没有I的增加,bug产生。

    2.2 动态白盒测试
    利用开发工具中的调式工具进行测试。比如一段代码有4个分支,输入4组不同的测试数据使4组分支都可以走通而且结果必须正确。
    看一段代码
    if(I<0){
    P1
    }else{
    P2
    }
    在调试中输入I=-1,P1程序段通过, P2程序段未通过,属于动态黑盒测试的缺陷

    3.功能测试

    功能测试指测试软件各个功能模块是否正确,逻辑是否正确。
    对测试对象的功能测试应侧重于所有可直接追踪到用例或业务功能和业务规则的测试需求。这种测试的目标是核实数据的接受、处理和检索是否正确,以及业务规则的实施是否恰当。此类测试基于黑盒技术,该技术通过图形用户界面 (GUI) 与应用程序进行交互,并对交互的输出或结果进行分析,以此来核实应用程序及其内部进程。功能测试的主要参考为类似于功能说明书之类的文档。
    比如一个对电子商务系统,前台用户浏览商品-放入购物车-进入结账台,后台处理订单,配货,付款,发货,这一系列流程必须正确无误的走通,不能存在任何的错误。

    4.UI测试

    UI测试指测试用户界面的风格是否满足客户要求,文字是否正确,页面美工是否好看,文字,图片组合是否完美,背景是否美观,操作是否友好等等
    用户界面 (UI) 测试用于核实用户与软件之间的交互。UI 测试的目标是确保用户界面会通过测试对象的功能来为用户提供相应的访问或浏览功能。另外,UI 测试还可确保 UI 中的对象按照预期的方式运行,并符合公司或行业的标准。包括用户友好性,人性化,易操作性测试。UI测试比较主观,与测试人员的喜好有关
    比如:页面基调颜色刺眼;用户登入页面比较难于找到,文字中出现错别字,页面图片范围太广等都属于UI测试中的缺陷,但是这些缺陷都不太严重。

    5.性能测试

    性能测试主要测试软件测试的性能,包括负载测试,强度测试,数据库容量测试,基准测试以及基准测试
    5.1负载测试
    负载测试是一种性能测试指数据在超负荷环境中运行,程序是否能够承担。
    在这种测试中,将使测试对象承担不同的工作量,以评测和评估测试对象在不同工作量条件下的性能行为,以及持续正常运行的能力。负载测试的目标是确定并确保系统在超出最大预期工作量的情况下仍能正常运行。此外,负载测试还要评估性能特征,例如,响应时间、事务处理速率和其他与时间相关的方面。
    比如,在B/S结构中用户并发量测试就是属于负载测试的用户,可以使用webload工具,模拟上百人客户同时访问网站,看系统响应时间,处理速度如何?
    5.2强度测试
    强度测试是一种性能测试,他在系统资源特别低的情况下软件系统运行情况。这类测试往往可以书写系统要求的软硬件水平要求。
    实施和执行此类测试的目的是找出因资源不足或资源争用而导致的错误。如果内存或磁盘空间不足,测试对象就可能会表现出一些在正常条件下并不明显的缺陷。而其他缺陷则可能由于争用共享资源(如数据库锁或网络带宽)而造成的。强度测试还可用于确定测试对象能够处理的最大工作量。
    比如:一个系统在内存366M下可以正常运行,但是降低到258M下不可以运行,告诉内存不足,这个系统对内存的要求就是366M。
    5.3数据库容量测试
    数据库容量测试指通过存储过程往数据库表中插入一定数量的数据,看看相关页面是否能够及时显示数据。
    数据库容量测试使测试对象处理大量的数据,以确定是否达到了将使软件发生故障的极限。容量测试还将确定测试对象在给定时间内能够持续处理的最大负载或工作量。例如,如果测试对象正在为生成一份报表而处理一组数据库记录,那么容量测试就会使用一个大型的测试数据库,检验该软件是否正常运行并生成了正确的报表。做这种测试通常通过书写存储过程向数据库某个表中插入一定数量的记录,计算相关页面的调用时间。
    比如,在电子商务系统中,通过insert customer 往user表中插入10 000数据,看其是否可以正常显示顾客信息列表页面,如果要求达到最多可以处理100 000个客户,但是顾客信息列表页面不能够在规定的时间内显示出来,就需要调整程序中的SQL查询语句;如果在规定的时间内显示出来,可以将用户数分别提高到20 000 , 50 000, 100 000进行测试。
    5.4基准测试
    基准测试与已知现有的系统进行比较,主要检验是否与类似的产品具有竞争性的一种测试。
    如果你要开发一套财务系统软件并且你已经获得用友财务系统的性能等数据,你可以测试你这套系统,看看哪些地方比用友财务系统好,哪些地方差?以便改进自己的系统,也可为产品广告提供数据。
    5.5竞争测试
    软件竞争使用各种资源(数据纪录,内存等),看他与其他相关系统对资源的争夺能力。比如:一台机器上即安装您的财务系统,又安装用友财务系统。当CPU占有率下降后,看看是否能够强过用友财务系统,而是自己的系统能够正常运行?

    6. 安全性和访问控制测试

    安全性和访问控制测试侧重于安全性的两个关键方面:
    应用程序级别的安全性,包括对数据或业务功能的访问
    系统级别的安全性,包括对系统的登录或远程访问。
    6.1应用程序级别的安全性
    可确保:在预期的安全性情况下,主角只能访问特定的功能或用例,或者只能访问有限的数据。例如,可能会允许所有人输入数据,创建新账户,但只有管理员才能删除这些数据或账户。如果具有数据级别的安全性,测试就可确保“用户类型一”能够看到所有客户消息(包括财务数据),而“用户二”只能看见同一客户的统计数据。
    比如B/S系统,不通过登入页面,直接输入URL,看其是否能够进入系统?
    6.2系统级别的安全性
    可确保只有具备系统访问权限的用户才能访问应用程序,而且只能通过相应的网关来访问。
    比如输入管理员账户,检查其密码是否容易猜取,或者可以从数据库中获得?

    7.故障转移和恢复测试

    故障转移和恢复测试指当主机软硬件发生灾难时候,备份机器是否能够正常启动,使系统是否可以正常运行,这对于电信,银行等领域的软件是十分重要的。
    故障转移和恢复测试可确保测试对象能成功完成故障转移,并能从导致意外数据损失或数据完整性破坏的各种硬件、软件或网络故障中恢复。
    故障转移测试可确保:对于必须持续运行的系统,一旦发生故障,备用系统就将不失时机地“顶替”发生故障的系统,以避免丢失任何数据或事务。
    恢复测试是一种对抗性的测试过程。在这种测试中,将把应用程序或系统置于极端的条件下(或者是模拟的极端条件下),以产生故障(例如设备输入/输出 (I/O) 故障或无效的数据库指针和关健字)。然后调用恢复进程并监测和检查应用程序和系统,核实应用程序或系统和数据已得到了正确的恢复。一定要注意主备定时备份
    比如电信系统,突然主机程序发生死机,备份机器是否能够启动,使系统能够正常运行,从而不影响用户打电话?

     

    8.配置测试

    又叫兼容性测试。配置测试核实测试对象在不同的软件和硬件配置中的运行情况。在大多数生产环境中,客户机工作站、网络连接和数据库服务器的具体硬件规格会有所不同。客户机工作站可能会安装不同的软件例如,应用程序、驱动程序等而且在任何时候,都可能运行许多不同的软件组合,从而占用不同的资源。(如浏览器版本,操作系统版本等)
    下面列出主要配置测试
    8.1浏览器兼容性
    测试软件在不同产商的浏览器下是否能够正确显示与运行;
    比如测试IE,Natscape浏览器下是否可以运行这套软件?
    8.2操作系统兼容性
    测试软件在不同操作系统下是否能够正确显示与运行;
    比如测试WINDOWS98,WINDOWS 2000,WINDOWS XP,LINU, UNIX下是否可以运行这套软件?
    8.3硬件兼容性
    测试与硬件密切相关的软件产品与其他硬件产品的兼容性,比如该软件是少在并口设备中的,测试同时使用其他并口设备,系统是否可以正确使用.
    比如在INTER,舒龙CPU芯片下系统是否能够正常运行?
    这样的测试必须建立测试实验室,在各种环境下进行测试。

    9.安装测试

    安装测试有两个目的。第一个目的是确保该软件在正常情况和异常情况的不同条件下: 例如,进行首次安装、升级、完整的或自定义的安装_都能进行安装。异常情况包括磁盘空间不足、缺少目录创建权限等。第二个目的是核实软件在安装后可立即正常运行。这通常是指运行大量为功能测试制定的测试。
    安装测试包括测试安装代码以及安装手册。安装手册提供如何进行安装,安装代码提供安装一些程序能够运行的基础数据。

    10.多语种测试

    又称本地化测试,是指为各个地方开发产品的测试,如英文版,中文版等等,包括程序是否能够正常运行,界面是否符合当地习俗,快捷键是否正常起作用等等,特别测试在A语言环境下运行B语言软件(比如在英文win98下试图运行中文版的程序),出现现象是否正常。
    本地化测试还要考虑:
    l 当语言从A翻译到B,字符长度变化是否影响页面效果。比如中文软件中有个按键叫“看广告”,翻译到英文版本中为 “View advertisement”可能影响页面的美观程度
    l 要考虑同一单词在各个国家的不同意思,比如football在英文中为足球,而美国人使用中可能理解为美式橄榄球。
    l 要考虑各个国家的民族习惯,比如龙个美国中被理解邪恶的象征,但翻译到中国,中国人认为为吉祥的象征。

    11.文字测试

    文字测试测试软件中是否拼写正确,是否易懂,不存在二义性,没有语法错误;文字与内容是否有出入等等,包括图片文字。
    比如:“比如,请输入正确的证件号码!”何谓正确的证件号码,证件可以为身份证,驾驶证,也可为军官证,如果改为“请输入正确的身份证号码!”用户就比较容易理解了。

    12.分辨率测试

    测试在不同分辨率下,界面的美观程度,分为800*600,1024*768,1152*864,1280*768,1280*1024,1200*1600大小字体下测试。一个好的软件要有一个极佳的分辨率,而在其他分辨率下也都能可以运行。

    13发布测试

    主要在产品发布前对一些附带产品,比如说明书,广告稿等进行测试

    13.1说明书测试
    主要为语言检查,功能检查,图片检查
    语言检查:检查说明书语言是否正确,用词是否易于理解;
    功能检查:功能是否描述完全,或者描述了并没有的功能等;
    图片检查::检查图片是否正确
    13.2宣传材料测试
    主要测试产品中的附带的宣传材料中的语言,描述功能,图片
    13.3帮助文件测试
    帮助文件是否正确,易懂,是否人性化。最好能够提供检索功能。
    13.4广告用语
    产品出公司前的广告材料文字,功能,图片,人性化的检查

    14 文档审核测试

    文档审核测试目前越来越引起人们的重视,软件质量不是检查出来的,而是融进软件开发中来。前置软件测试发越来越受到重视。请看一个资料:

    文档审核测试主要包括需求文档测试,设计文档测试,为前置软件测试测试中的一部分。

    14.1需求文档测试

    主要测试需求中是否存在逻辑矛盾以及需求在技术上是否可以实现;

    14.2设计文档测试

    测试设计是否符合全部需求以及设计是否合理。

    总结

    据美国软件质量安全中心2000年对美国一百家知名的软件厂商统计,得出这样一个结论:软件缺陷在开发前期发现比在开发后期发现资金,人力上节约90%;软件缺陷在推向市场前发现比在推出后发现资金,人力上节约90%。所以说软件的缺陷应该尽早发现。不是所有的软件都要进行任何类型的软件测试的,可以根据产品的具体情况进行组装测试不同的类型。

  • 软件测试术语

    2007-06-19 16:04:10Top 1 Digest 2

    Unit testing单元测试),指一段代码的基本测试,其实际大小是未定的,通常是一个函数或子程序,一般由开发者执行。

    Integration testing(集成测试),被测试系统的所有组件都集成在一起,找出被测试系统组件之间关系和接口中的错误。该测试一般在单元测试之后进行。

    Acceptance testing(验收测试),系统开发生命周期方法论的一个阶段,这时相关的用户和/或独立测试人员根据测试计划和结果对系统进行测试和接收。它让系统用户决定是否接收系统。它是一项确定产品是否能够满足合同或用户所规定需求的测试。这是管理性和防御性控制。 

    Alpha testing (α测试),是由一个用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环境下进行的受控测试,Alpha测试不能由程序员或测试员完成。

    Beta testing(β测试),测试是软件的多个用户在一个或多个用户的实际使用环境下进行的测试。开发者通常不在测试现场,Beta测试不能由程序员或测试员完成。

    Black box testing(黑盒测试),指测试人员不关心程序具体如何实现的一种测试方法。根据软件的规格对软件进行各种输入和观察软件的各种输出结果来发现软件的缺陷的测试,这类测试不考虑软件内部的运作原理,因此软件对用户来说就像一个黑盒子。

    White box testing(白盒测试),根据软件内部的工作原理分析来进行测试,基于代码的测试,测试人员通过阅读程序代码或者通过使用开发工具中的单步调试来判断软件的质量,一般黑盒测试由项目经理在程序员开发中来实现。


    Automated Testing(自动化测试),使用自动化测试工具来进行测试,这类测试一般不需要人干预,通常在GUI、性能等测试中用得较多。

    Bug (错误),有时称作defect(缺陷)或error(错误),软件程序中存在的编程错误,可能会带来不必要的副作用,软件的功能和特性与设计规格说明书或用户需求不一致的方面。软件缺陷表现特征为:软件未达到产品说明书标明的功能;软件出现产品说明书指明不会出现的错误;软件功能超出产品说明书指明的范围;虽然产品说明书未指出但是软件应达到的目标;软件测试人员或用户认为软件难以理解,不易使用,运行速度缓慢等问题。 Bug report(错误报告),也称为“Bug record(错误记录)”,记录发现的软件错误信息的文档,通常包括错误描述、复现步骤、抓取的错误图像和注释等。

    Bug tracking system(错误跟踪系统,BTS),也称为“Defect tracking system,DTS”,管理软件测试缺陷的专用数据库系统,可以高效率地完成软件缺陷的报告、验证、修改、查询、统计、存储等任务。尤其适用于大型多语言软件的测试管理。

    “抓虫大扫除”(Bug Bash):在某一个版本的发行里程碑到达之后,在发行之前项目经理向全体开发组织发出通知,告诉大家哪一天的某个时间是Bug Bash的时间,到时候全体成员,包括开发、测试、文档等团队、甚至市场部门的员工,全都放下手中的工作,在规定的那一个或几个小时的时间里,每个人把自己当作是用户一样来使用这个未成品的软件,并且进行竞赛,看谁能找到最多的Bug。这样做的目的是,不是按照测试方案的顺序来检查软件,而是通过像真正的用户那样来使用软件,即完全是任意性的、无规则的顺序,看看在这样的使用条件下,还有没有仍旧没有被发现的严重的Bug。 我们往往采用谁找到最严重的Bug 就得奖的方法来鼓励大家尽力找出Bug。抓虫大扫除一结束,项目经理马上进行新呈交的Bug数量的统计,然后向开发组织中的全体员工公布。得奖的小有免费的咖啡、午餐、电影票等,大有各种礼物。所以每次Bug Bash 大家都踊跃参加,找到很多测试案例执行时没找到的问题。

    Exception(异常/例外),一个引起正常程序执行挂起的事件。

    Crash(崩溃),计算机系统或组件突然并完全的丧失功能,例如软件或系统突然退出或没有任何反应(死机)。


    Build(工作版本),软件开发过程中用于内部测试的功能和性能等不完善的软件版本。工作版本既可以是系统的可操作版本,也可以是展示要在最终产品中提供的部分功能的部分系统。

    Functional testing (功能测试),也称为behavīoral testing(行为测试),根据产品特征、操作描述和用户方案,测试一个产品的特性和可操作行为以确定它们满足设计需求。本地化软件的功能测试,用于验证应用程序或网站对目标用户能正确工作。使用适当的平台、浏览器和测试脚本,以保证目标用户的体验将足够好,就像应用程序是专门为该市场开发的一样。

    Load testing(负载测试),通过测试系统在资源超负荷情况下的表现,以发现设计上的错误或验证系统的负载能力。在这种测试中,将使测试对象承担不同的工作量,以评测和评估测试对象在不同工作量条件下的性能行为,以及持续正常运行的能力。负载测试的目标是确定并确保系统在超出最大预期工作量的情况下仍能正常运行。此外,负载测试还要评估性能特征,例如,响应时间、事务处理速率和其他与时间相关的方面。


    Performance testing(性能测试),评价一个产品或组件与性能需求是否符合的测试。包括负载测试、强度测试、数据库容量测试、基准测试等类型。

    Pilot testing(引导测试),软件开发中,验证系统在真实硬件和客户基础上处理典型操作的能力。在软件外包测试中,引导测试通常是客户检查软件测试公司测试能力的一种形式,只有通过了客户特定的引导测试,软件测试公司才能接受客户真实软件项目的软件测试。

    Portability testing(可移植性测试),测试软件是否可以被成功移植到指定的硬件或软件平台上。

    Compatibility Testing(兼容性测试),也称“Configuration testing(配置测试)”,测试软件是否和系统的其它与之交互的元素之间兼容,如:浏览器、操作系统、硬件等。验证测试对象在不同的软件和硬件配置中的运行情况。

    Installing testing(安装测试),确保该软件在正常情况和异常情况的不同条件下,例如,进行首次安装、升级、完整的或自定义的安装都能进行安装。异常情况包括磁盘空间不足、缺少目录创建权限等。核实软件在安装后可立即正常运行。安装测试包括测试安装代码以及安装手册。安装手册提供如何进行安装,安装代码提供安装一些程序能够运行的基础数据。

    International testing(国际化测试),国际化测试的目的是测试软件的国际化支持能力,发现软件的国际化的潜在问题,保证软件在世界不同区域中都能正常运行。国际化测试使用每种可能的国际输入类型,针对任何区域性或区域设置检查产品的功能是否正常,软件国际化测试的重点在于执行国际字符串的输入/输出功能。国际化测试数据必须包含东亚语言、德语、复杂脚本字符和英语(可选)的混合字符。

    Localizability testing(本地化能力测试),本地化能力是指不需要重新设计或修改代码,将程序的用户界面翻译成任何目标语言的能力。为了降低本地化能力测试的成本,提高测试效率,本地化能力侧是通常在软件的伪本地化版本上进行。本地化能力测试中发现的典型错误包括:字符的硬编码(即软件中需要本地化的字符写在了代码内部),对需要本地化的字符长度设置了国定值,在软件运行时以控件位置定位,图标和位图中包含了需要本地化的文本,软件的用户界面与文档术语不一致等。

    Localization testing(本地化测试),本地化测试的对象是软件的本地化版本。本地化测试的目的是测试特定目标区域设置的软件本地化质量。本地化测试的环境是在本地化的操作系统上安装本地化的软件。从测试方法上可以分为基本功能测试,安装/卸载测试,当地区域的软硬件兼容性测试。测试的内容主要包括软件本地化后的界面布局和软件翻译的语言质量,包含软件、文档和联机帮助等部分。

    Ad hoc testing (随机测试),没有书面测试用例、记录期望结果、检查列表、脚本或指令的测试。主要是根据测试者的经验对软件进行功能和性能抽查。随机测试是根据测试说明书执行用例测试的重要补充手段,是保证测试覆盖完整性的有效方式和过程。

    Smoke testing(冒烟测试),冒烟测试的对象是每一个新编译的需要正式测试的软件版本,目的是确认软件基本功能正常,可以进行后续的正式测试工作。冒烟测试的执行者是版本编译人员。参考“Sanity testing(健全测试)”。

    Sanity testing(健全测试),软件主要功能成分的简单测试以保证它是否能进行基本的测试。

    User interface(用户界面,UI),广义是指使用户可以和计算机进行交互的硬件和/或软件。狭义是指软件中的可见外观及其底层与用户交互的部分(菜单、对话框、窗口和其它控件)。

    User interface testing (用户界面测试),指测试用户界面的风格是否满足客户要求,文字是否正确,页面是否美观,文字,图片组合是否完美,操作是否友好等等。UI 测试的目标是确保用户界面会通过测试对象的功能来为用户提供相应的访问或浏览功能。确保用户界面符合公司或行业的标准。包括用户友好性、人性化、易操作性测试。


    Static testing(静态测试),不通过执行来测试一个系统。如代码检查,文档检查和评审等。

    Regression testing(回归测试),在发生修改之后重新测试先前的测试以保证修改的正确性。理论上,对软件的任何新版本,都需要进行回归测试,验证以前发现和修复的错误是否在新软件版本上再现。

    Capture/Replay Tool (捕获/回放工具),一种测试工具,能够捕获在测试过程中传递给软件的输入,并且能够在以后的时间中,重复这个执行的过程。这类工具一般在GUI测试中用的较多。

    Debug(调试),开发人员确定引起错误的根本原因和确定可能的修复措施的过程。一般发生在子系统或单元模块编码完成时,或者根据测试错误报告指出错误以后,开发人员需要执行调试过程来解决已存在的错误。


    Deployment(部署),也称为shipment(发布),对内部IT系统而言,指它的第一个版本通过彻底的测试、形成产品、交付给付款客户的阶段。 Dynamic testing(动态测试),通过执行软件的手段来测试软件。

    Garbage characters(乱码字符),程序界面中显示的无意义的字符,例如,程序对双字节字符集的字符不支持时,这些字符不能正确显示。

    GB 18030 testing(GB 18030测试),软件支持GB 18030字符集标准能力的测试,包括GB 18030字符的输入、输出、显示、存储的支持程度。

    Priority(优先权),从商业角度出发是指错误的重要性,尤其是从客户和用户的角度出发,是指错误对于系统的可行性和可接受性的影响。与“Severity(严重性)”相对照。

    Severity(严重性),错误对被测系统的影响程度,在终端用户条件下发生的可能性,软件错误妨碍系统使用的程度。
    Quality assurance(质量保证QA),采取相关活动,以保证一个开发组织交付的产品满足性能需求和已确立的标准和过程。

    Review(评审),在产品开发过程中,把产品提交给项目成员、用户、管理者或其它相关人员评价或批准的过程。

    Screen shot(抓屏、截图),软件测试中,将软件界面中的错误(窗口、菜单、对话框等)的全部或一部分,使用专用工具存储成图像文件,以便于后续处理。

    Software life cycle(软件生命周期),开始于一个软件产品的构思,结束于该产品不再被使用的这段期间。

    Structured query language(结构化查询语句,SQL),在一个关系数据库中查询和处理数据的一种语言。

    TBD(To be determined,待定),在测试文档中标是一项进行中的尚未最终确定的工作。

    Test(测试),执行软件以验证其满足指定的需求并检测错误的过程。检测已有条件之间的不同,并评价软件项的特性软件项的分析过程。软件工程过程的一个活动,它将软件在预定的条件下运行以判断软件是否符合预期结果。


    Test case(测试用例),为特定目标而开发的一组测试输入、执行条件和预期结果,其目标可以是测试某个程序路径或核实是否满足某个特定的需求。


    Testing coverage(测试覆盖),指测试系统覆盖被测试系统的程度,一项给定测试或一组测试对某个给定系统或构件的所有指定测试用例进行处理所达到的程度。


    Testing environment(测试环境),进行测试的环境,包括测试平台、测试基础设施、测试实验室和其他设施。

    Testing item(测试项),作为测试对象的工作版本。

    Testing plan(测试计划),描述了要进行的测试活动的范围、方法、资源和进度的文档。它确定测试项、被测特性、测试任务、谁执行任务、各种可能的风险。

    Testing procedure(测试过程),指设置、执行给定测试用例并对测试结果进行评估的一系列详细步骤。
    Testing scrīpt(测试脚本),一般指的是一个特定测试的一系列指令,这些指令可以被自动化测试工具执行。

    Testing suite(测试包),一组测试用里的执行框架;一种组织测试用例的方法。在测试包里,测试用例可以组合起来创造出独特的测试条件。 

  • 什么是软件测试?

    2007-06-19 12:07:34Top 1 Digest 1

    在G.J.Myers的经典著作《软件测试之艺术》(The Art of Software Testing)中,给出了测试的定义:“程序测试是为了发现错误而执行程序的过程”。这个定义,被业界所认可,经常被引用。除此之外,G.J.Myers还给出了与测试相关的三个重要观点,那就是:  
    1. 测试是为了证明程序有错,而不是证明程序无错误;
    2. 一个好的测试用例是在于它能发现至今未发现的错误;
    3. 一个成功的测试是发现了至今未发现的错误的测试。
      实际上,这里暗示了“软件测试”在不同侧面上的含义,也就决定了对软件测试不同的定义和不同的理解。根据作者多年的经验和理解,软件测试的不同视野,概括为如下5类:
    • 软件测试的狭义论和广义论——静态和动态的测试
    • 软件测试的辨证论——正向思维和反向思维
    • 软件测试的风险论——测试是评估
    • 软件测试的经济学观点——为盈利而测试
    • 软件测试的标准论——验证和确认
      1. 软件测试的狭义论和广义论

      G.J.Myers所给出了测试定义——“程序测试是为了发现错误而执行程序的过程”,实际是一个狭义的概念,因为他认为测试是执行程序的过程,也就是传统意义上的测试——在代码完成后,通过运行程序来发现程序代码或软件系统中错误。但是,这种意义上的测试是不能在代码完成之前发现软件系统需求、发现设计上的问题,把需求、发现设计上的问题遗留到后期,这样就会可能造成设计、编程的部分返工。增加软件开发的成本、延长开发的周期等。需求阶段和设计阶段的缺陷产生的放大效应会加大。这非常不利于保证软件质量。这种狭义论是受软件开发瀑布模型影响。

      正是为了更早地发现问题,所以将测试延伸到需求评审、设计审查活动中去,也就是将“软件质量保证”的部分活动归为测试活动。实际上,在软件开发实际操作中,常常将软件测试和质量保证——这两种努力(efforts)合并起来。

      延伸后的软件测试,被认为是一种软件测试的广义概念。这就引出软件测试的两个概念“静态测试”和“动态测试”,如 测试方法的辩证统一 (1)所述,这样就由静态测试和动态测试构成一个全过程的、完整的软件测试,而且静态测试显得更为重要。

      2.软件测试的辨证论


      G.J.Myers的第2个观点“测试是为了证明程序有错,而不是证明程序无错误”,引出了软件测试的另外一个争论,软件测试究竟是证明所有软件的功能特性是正确的呢?还是其反向思维——对软件系统进行各种试探和攻击,找出软件系统中不正常或不工作的地方呢?从我个人理解,这两个方面都有一定道理,前者(证明所有软件的功能特性是正确的)是从质量保证的角度来思考软件测试,后者(证明程序有错)从软件测试的直接目标和测试效率来思考,两者应该相辅相成。在后者的思想背景下,我们认为,测试不是为了证明所有的功能可以正常工作,恰恰相反,测试就是为了找出那些不能正常工作、不一致性的地方。也就是说,测试的一般工作就是发现缺陷 (detect bug),即在软件开发过程中,分析、设计与编码等工作都是建设性的,而测试是带有“破坏性”的工作。

      对于不同的应用领域,两者的比重是不一样的,如国防、航天、银行等软件系统,承受不了任何系统失效,因为一次系统的失效完全有可能导致灾难性的损失,所以强调前者以保证非常高的软件质量。而一般的软件服务应用则不同,强调后者,质量目标设置在“用户可接受水平”,不要国度追求质量,从而可以降低软件开发成本。作者建议,在我们实际操作中,可以分阶段实施不同的测试思想,在早期阶段集中在“证明程序有错”—— 发现Bug,后期集中在验证所有特性是否正常工作——降低风险,见作者的另外一篇讨论:测试执行中非常有效的策略

      下面就是这两种观点的基本描述:
    • 验证软件是验证软件是“工作的”,以正向思维,针对软件系统的所有功能点,逐个验证其正确性。其代表人物是软件测试领域的先驱Dr. Bill Hetzel (代表论著《The Complete Guide to Software Testing》)。
    • 证明软件是“不工作的”,以反向思维方式,不断思考开发人员理解的误区、不良的习惯、程序代码的边界、无效数据的输入以及系统的弱点,试图破坏系统、摧毁系统,目标就是发现系统中各种各样的问题。其代表人物就是上面多次提到的G.J.Myers。他强调,一个成功的测试必须是发现Bug Bug的测试,不然就没有价值。
      3.软件测试的风险论

       测试被定义为“对软件系统中潜在的各种风险进行评估的活动”,这就是软件测试的风险论。软件测试自身的风险性是大家公认的,测试的覆盖度不能做到100%。测试的这种风险定义一方面源于这层含义,另外软件测试的标准有时不清楚,“软件规格说明书(Specification/ Spec)”是其中的一个标准,但也不是唯一的,因为Spec中有些内容完全有可能是错误的。所以,我们常常强调软件测试人员应该站在客户的角度去进行测试,除了发现程序中的错误,还要发现需求定义的错误、设计上的缺陷,可以针对Spec 去报Bug。但是,测试在大多数时间/情况下,是由工程师完成,而不是客户自己来做,所以又怎么能保证工程师和客户想得一样呢?

      有人把开发比作打靶,目标明确,就是按照Spec 去实现系统的功能。而把测试比作捞鱼,目标不明确,自己判断哪些地方鱼多,就去哪些地方捞;如果只捞大鱼(严重缺陷),网眼就可以大些、撒网区域相对比较集中(测试点集中在主要功能-major features)。如果想把大大小小的鱼捞上来,网眼就要小、普遍撒网,不放过任何一块区域(测试点遍及所有功能——all features)。

      在“风险”论的框架下,软件测试可以被看作是一个动态的监控过程,对软件开发全过程进行检测,随时发现不健康的征兆,发现问题、报告问题,并重新评估新的风险,设置新的监控基准,不断地持续下去,包括回归测试。这时,软件测试可以完全看作是软件质量控制的过程。

      对应这种观点,产生基于风险的测试策略,首先评估测试的风险,功能出问题的概率有多大?哪些是用户最常用的20%功能——Pareto原则(也叫80/20原则)?如果某个功能出问题,其对用户的影响有多大?然后根据风险大小确定测试的优先级。优先级高的测试,优先得到执行,一般来讲,针对用户最常用的20%功能(优先级高)的测试会得到完全执行,而低优先级的测试(另外用户不经常用的80%功能)就不是必要的,如果时间或经费不够,就暂时不做或少做。

      4.软件测试的经济学观点

      “一个好的测试用例是在于它能发现至今未发现的错误”,体现了软件测试的经济学观点。实际上,软件测试经济学问题至今仍是业界关注的问题之一。经济学的核心就是要盈利,盈利的基础就是要有一个清楚的商业性目标。同样,商业性目标是否正确,直接决定了企业是否盈利的结果。多数情况下,软件测试是在公司内的执行。正是公司的行为目的,决定了软件测试含义或定义的经济性一面。正如,对软件质量的定义不仅仅局陷于“和客户需求的一致性、适用性”,而且要增加其它的要求——“预算内、按时发布、易于维护”。

      软件测试也一样,要尽快尽早地发现更多的缺陷,并督促和帮助开发人员修正缺陷。原因很简单:平均而言,如果在需求阶段修正一个错误的代价是1,那么,在设计阶段就是它的3~6倍,在编程阶段是它的10倍,在内部测试阶段是它的20~40倍,在外部测试阶段是它的30~70倍,而到了产品发布出去时,这个数字就是 40~ 1000倍。修正错误的代价不是随时间线性增长,而几乎是呈指数级增长的。

      5. 软件测试的标准论


      如果从标准论来看软件测试,可以定义为软件测试就是“验证(Verification)”和“有效性确认(Validation)”活动构成的整体,即软件测试 = V&V。

      “验证”是检验软件是否已正确地实现了产品规格书所定义的系统功能和特性。验证过程提供证据表明软件相关产品与所有生命周期活动的要求(如正确性、完整性、一致性、准确性等)相一致。相当于,以Spec为标准进行软件测试活动,验证软件产品和Spec的一致性。

      “有效性确认”是确认所开发的软件是否满足用户真正需求的活动。相当于,保持对软件需求定义、设计的怀疑,一切从客户出发,理解客户的需求,发现需求定义和产品设计中的问题。这主要通过各种软件评审活动来实现。

      需要说明的是,软件测试的对象是产品(包括阶段性产品,如市场需求说明书、产品规格说明书、技术设计文档、数据字典、程序包、用户文档等),而质量保证和管理的对象集中在软件开发的标准、流程和方法等。

      究竟什么是软件测试呢?综上所述,软件测试的定义为:


      软件测试是贯穿整个软件开发生命周期、对软件产品(包括阶段性产品)进行验证和确认的活动过程,

      其目的是尽快尽早地发现在软件产品中所存在的各种问题——与用户需求、预先定义的不一致性。
  • 软件测试学习

    2007-06-19 11:30:41Top 1 Digest 1

    Bug报告是要简明扼要还是详细说明?

    自我感觉,bug的标题要简明扼要,并且要有让开发或者自己QA的小组的人,不用查看详细信息就可以了解到这个bug的严重程度,发生频率,测试环境,状况等基本信息。


    对于bug的描述,要求做到条理清晰,不能太简单,但是也不能太罗嗦,标准就是开发根据你的描述可以很清楚的知道如何重现并且确实可以重现这个问题。
     

    功能性测试用例

    1、测试的来源,即测试的需求

    测试用例的主要来源有:
    1)需求说明”及相关文档
    2)相关的设计说明(概要设计,详细设计等)
    3)与开发组交流对需求理解的 记录(可以是开发人员的一个解释)
    4)已经基本成型的UI(可以有针对性地补充一些用例)
          

    简而言之,所有你能得到的项目文档,都尽量拿到。 从所得到的资料中,分解出若干小的“功能点”,理解“功能点”,编写相应的测试用例。

    2、用例的组织方式

    不同的公司有不同的做法,原则上,只要方便管理和跟踪,怎么组织都可以的。
    用例可以按大的功能块组织,如查询功能模块的用例,可以组织在一起,打印模块的测试用例,可以另外组织在一起。
        

    在没有专门的测试用例管理工具的情况下,用例执行后会产生2种状态:“通过”、“失败”——这样加上“未 执行”的用例的状态,共3种状态。
       

    即从“未执行”用例中执行一个用例后,该用例状态应为“失败”或“通 过”。将同一状态的用例组织在一起。
     

    至于用例文件格式,可以是.DOC或.XLS(如果有专门的测试用例管理工具另当别论)。

    3、用例与其他材料的关联方式,即如何解决用例跟踪的问题

    测试用例面临的比较大的风险有:

    需求的变更、设计的修改、需求的错误和遗漏等等。


    由于用例的主要来源是需求和设计的说明,所以对用例的跟踪其实就是对需求和设计的跟踪,需求和设计的 变更势必引起测试用例的变更。


    如前所说,将分解的功能点编号,与相应的用例联系起来。例如,你可以列一个表格,列出各个(编号的)功 能点和测试用例间的关联关系。


    这样,当需求和设计发生变化时,你只需要跟踪“功能点”是否变化,是否增加了新的功能点。


    4、一个好的用例的表述要点,即用例中应当包含的信息

    一个优秀的测试用例,应该包含以下信息:
    1) 软件或项目的名称
    2) 软件或项目的版本(内部版本号)
    3) 功能模块名
    4) 测试用例的简单描述,即该用例执行的目的或方法
    5) 测试用例的参考信息(便于跟踪和参考)
    6) 本测试用例与其他测试用例间的依赖关系
    7) 本用例的前置条件,即执行本用例必须要满足的条件,如对数据库的访问权限
    8) 用例的编号(ID),如可以是 软件名称简写-功能块简写-NO.。
    9) 步骤号、操作步骤描述、测试数据描述
    10)预期结果(这是最重要的)和实际结果(如果有BUG管理工具,这条可以省略)
    11)开发人员(必须有)和测试人员(可有可无)
    12)测试执行日期

865/5<12345

数据统计

  • 访问量: 44818
  • 日志数: 86
  • 文件数: 1
  • 建立时间: 2007-06-15
  • 更新时间: 2008-04-02

RSS订阅

Open Toolbar