软件测试是为了发现错误而执行程序的过程。 QQ: 12585990 MSN:sunxy5291@hotmail.com

发布新日志

  • 测试工程师工作流程概论

    2007-05-22 16:01:25

    测试工程师的工作流程,与公司的整体工作流程,项目的测试要求等因素相关。本文主要讨论测试工程师的一般工作流程。

    做好测试准备

    1)明确测试任务的范围

    测试文档通常包括测试目的、测试环境、测试方法、测试用例、测试工具等。测试工程师首先要通读文档,对整个测试要求形成整体认识,明确测试目的,以及测试要求和测试重点,明确软件测试方法和使用的测试工具。

    2)明确测试时间

    明确测试周期和测试时间进度。如果是多人合作完成一个软件,则要首先明确属于自己的测试内容、根据测试内容和测试周期,估算自己每日应该完成的工作量。此外由于软件测试是群体协作的测试活动,需要明确哪些测试内容要与其他测试工程师协作才能完成。

    3)设置测试环境

    根据测试文档要求,设置测试需要的软件和硬件环境,包括操作系统,要测试的软件和其他必要的测试工具软件等。所有这些完成后,分别运行,查看是否能正确运行,保证符合测试文档要求的测试环境。

    4)学习被测试软件

    对于不太熟悉的软件,可以通过阅读软件自身的教程和帮助文件,学习本软件的一般操作方法,也可以参照相关的书籍资料等。另外,向熟悉测试软件的其他同事请教软件使用方法,也是学习软件的一条捷径。对软件使用越熟练,测试过程越顺利,测试效果越理想。

    5)确认完全理解测试任务

    软件测试最重要的要求就是确实明确了测试任务和要求,这包括正确理解了测试文档,确认可以按照测试进度要求,完成测试。对于测试工具要正确安装,熟练使用。如果有任何不明白之处,向软件测试负责人询问。切忌凭自己的理解和主观推测,自行其事。当然,真正测试中,往往会遇到各种新的小疑难问题,也需要及时向测试负责人请教,以保证测试顺利进行。

    执行软件测试任务

    1)按照测试文档要求,逐项认真测试

    根据测试文档测试要求,按照测试步骤,逐项进行。通过运行软件,观察测试结果,与软件需求说明书的内容进行比较,找出软件错误。对于需要调用测试用例的测试,保证正确地调用了测试用例,注意观察和分析测试结果。某些不容易重复的错误,需要反复测试,总结重复该错误所需要的测试步骤,直到确认可以重复出现为止。

    2)记录发现的错误,填写软件问题报告

    为了纠正软件中的错误,测试工程师要正确记录发现的错误,将错误再现的步骤写入测试报告中,测试报告是程序测试的重要组成部分,正确书写测试报告是对测试工程师的基本要求。采用软件缺陷数据库管理测试中发现的软件缺陷,每一条错误作为数据库的一条记录,方便记录、修改、查询。

    3)填写测试进度表和必要的测试内容记录表

    每天将测试内容写入测试进度表文档,可以使测试负责人了解测试进度,控制测试周期内测试的连续性,增强测试过程控制性,保证测试的正常进行。测试记录要准确完整,实事求是,必要时插入测试注释,解释测试中的特殊问题。测试进度表是评价测试质量和工作内容的重要凭证,对于测试后发现的测试错误和失误,可以通过检查测试记录,寻找产生错误的原因。

    4) 测试中发现疑难及时请教

    测试是一个动态的过程,可能由于自己的错误操作或者测试文档内容的错误,使得测试过程中出现自己不能解释的现象或结果,出现与测试要求不符合的情形,这时可能需要与其他测试者协商或求助,如果问题仍然不能解决,应该及时请教,听取意见和建议,必要时反复讨论直到问题全面解决。

    全面检查测试结果

    1)对照测试文档要求,检查测试内容是否完整

    测试完成后,要对照测试文档检查测试是否全部完成,保证没有丢失测试内容。如果某些内容,由于测试环境的要求不满足,或者由于测试时间短没有进行,则要写入测试进度表文档。

    2)检验书写的软件问题报告的记录,使之确切、规范

    正确书写测试记录是保证迅速定位软件错误,加快改正错误的必要前提。专业规范的软件记录报告是体现公司测试水平和专业实力的外在体现。认真检查书写的每条记录是否符合规范,格式、步骤、内容一一检查,必要时补充或删减。

    上述三个阶段,相互联系紧密,其中准备是基础,测试是重点,检查是保证,应该根据测试的软件特点合理安排。

  • 了解学习RUP

    2007-05-18 15:54:47

      RUPRational Unified Process,统一软件开发过程统一软件过程)是一个面向对象且基于网络的程序开发方法论。根据Rational(Rational Rose统一建模语言的开发者)的说法,好像一个在线的指导者,它可以为所有方面和层次的程序开发提供指导方针,模版以及事例支持。 RUP和似的产品--例如面向对象软件过程(OOSP),以及OPEN Process都是理解性的软件工程工具--把开发中面向过程的方面(例如定义的阶段,技术和实践)和其他开发的组件(例如文档,模型,手册以及代码等等)整合在一个统一的框架内。

    一、六大经验

          迭代式开发。在软件开发的早期阶段就想完全、准确的捕获用户的需求几乎是不可能的。实际上,我们经常遇到的问题是需求在整个软件开发工程中经常会改变。迭代式开发允许在每次迭代过程中需求可能有变化,通过不断细化来加深对问题的理解。迭代式开发不仅可以降低项目的风险,而且每个迭代过程以可以执行版本结束,可以鼓舞开发人员。

          管理需求。确定系统的需求是一个连续的过程,开发人员在开发系统之前不可能完全详细的说明一个系统的真正需求。RUP描述了如何提取、组织系统的功能和约束条件并将其文档化,用例和脚本的使用以被证明是捕获功能性需求的有效方法。

          基于组件的体系结构。组件使重用成为可能,系统可以由组件组成。基于独立的、可替换的、模块化组件的体系结构有助于管理复杂性,提高重用率。RUP描述了如何设计一个有弹性的、能适应变化的、易于理解的、有助于重用的软件体系结构

           可视化建模。RUP往往和UML联系在一起,对软件系统建立可视化模型帮助人们提供管理软件复杂性的能力。RUP告诉我们如何可视化的对软件系统建模,获取有关体系结构于组件的结构和行为信息。

          验证软件质量。在RUP中软件质量评估不再是事后进行或单独小组进行的分离活动,而是内建于过程中的所有活动,这样可以及早发现软件中的缺陷。

          控制软件变更。迭代式开发中如果没有严格的控制和协调,整个软件开发过程很快就陷入混乱之中,RUP描述了如何控制、跟踪、监控、修改以确保成功的迭代开发。RUP通过软件开发过程中的制品,隔离来自其他工作空间的变更,以此为每个开发人员建立安全的工作空间。

     

    二、统一软件开发过程RUP的二维开发模型

      RUP软件开发生命周期是一个二维的软件开发模型。横轴通过时间组织,是过程展开的生命周期特征,体现开发过程的动态结构,用来描述它的术语主要包括周期(Cycle)、阶段(Phase)、迭代(Iteration)和里程碑(Milestone);纵轴以内容来组织为自然的逻辑活动,体现开发过程的静态结构,用来描述它的术语主要包括活动(Activity)、产物(Artifact)、工作者(Worker)和工作流(Workflow)。如图1:


    三、统一软件开发过程RUP核心概念

          RUP中定义了一些核心概念,如下图:


          角色:描述某个人或者一个小组的行为与职责。RUP预先定义了很多角色。
          活动:是一个有明确目的的独立工作单元。
          工件:是活动生成、创建或修改的一段信息。

    四、统一软件开发过程RUP裁剪

          RUP是一个通用的过程模板,包含了很多开发指南、制品、开发过程所涉及到的角色说明,由于它非常庞大所以对具体的开发机构和项目,用RUP时还要做裁剪,也就是要对RUP进行配置。RUP就像一个元过程,通过对RUP进行裁剪可以得到很多不同的开发过程,这些软件开发过程可以看作RUP的具体实例。RUP裁剪可以分为以下几步:

    1) 确定本项目需要哪些工作流。RUP的9个核心工作流并不总是需要的,可以取舍。

    2) 确定每个工作流需要哪些制品。

    3) 确定4个阶段之间如何演进。确定阶段间演进要以风险控制为原则,决定每个阶段要那些工作流,每个工作流执行到什么程度,制品有那些,每个制品完成到什么程度。

    4) 确定每个阶段内的迭代计划。规划RUP的4个阶段中每次迭代开发的内容。

    5) 规划工作流内部结构。工作流涉及角色、活动及制品,他的复杂程度与项目规模即角色多少有关。最后规划工作流的内部结构,通常用活动图的形式给出。

    五、开发过程中的各个阶段和里程碑

      RUP中的软件生命周期在时间上被分解为四个顺序的阶段,分别是:初始阶段(Inception)、细化阶段(Elaboration)、构造阶段(Construction)和交付阶段(Transition)。每个阶段结束于一个主要的里程碑(Major Milestones);每个阶段本质上是两个里程碑之间的时间跨度。在每个阶段的结尾执行一次评估以确定这个阶段的目标是否已经满足。如果评估结果令人满意的话,可以允许项目进入下一个阶段。

    1. 初始阶段

      初始阶段的目标是为系统建立商业案例并确定项目的边界。为了达到该目的必须识别所有与系统交互的外部实体,在较高层次上定义交互的特性。本阶段具有非常重要的意义,在这个阶段中所关注的是整个项目进行中的业务和需求方面的主要风险。对于建立在原有系统基础上的开发项目来讲,初始阶段可能很短。 初始阶段结束时是第一个重要的里程碑:生命周期目标(Lifecycle Objective)里程碑。生命周期目标里程碑评价项目基本的生存能力。

    2. 细化阶段

      细化阶段的目标是分析问题领域,建立健全的体系结构基础,编制项目计划,淘汰项目中最高风险的元素。为了达到该目的,必须在理解整个系统的基础上,对体系结构作出决策,包括其范围、主要功能和诸如性能等非功能需求。同时为项目建立支持环境,包括创建开发案例,创建模板、准则并准备工具。 细化阶段结束时第二个重要的里程碑:生命周期结构(Lifecycle Architecture)里程碑。生命周期结构里程碑为系统的结构建立了管理基准并使项目小组能够在构建阶段中进行衡量。此刻,要检验详细的系统目标和范围、结构的选择以及主要风险的解决方案。

    3. 构造阶段

      在构建阶段,所有剩余的构件和应用程序功能被开发并集成为产品,所有的功能被详细测试。从某种意义上说,构建阶段是一个制造过程,其重点放在管理资源及控制运作以优化成本、进度和质量。 构建阶段结束时是第三个重要的里程碑:初始功能(Initial Operational)里程碑。初始功能里程碑决定了产品是否可以在测试环境中进行部署。此刻,要确定软件、环境、用户是否可以开始系统的运作。此时的产品版本也常被称为“beta”版。

    4. 交付阶段

      交付阶段的重点是确保软件对最终用户是可用的。交付阶段可以跨越几次迭代,包括为发布做准备的产品测试,基于用户反馈的少量的调整。在生命周期的这一点上,用户反馈应主要集中在产品调整,设置、安装和可用性问题,所有主要的结构问题应该已经在项目生命周期的早期阶段解决了。 在交付阶段的终点是第四个里程碑:产品发布(Product Release)里程碑。此时,要确定目标是否实现,是否应该开始另一个开发周期。在一些情况下这个里程碑可能与下一个周期的初始阶段的结束重合。

    六、统一软件开发过程RUP的核心工作流(Core Workflows)

      RUP中有9个核心工作流,分为6个核心过程工作流(Core Process Workflows)和3个核心支持工作流(Core Supporting Workflows)。尽管6个核心过程工作流可能使人想起传统瀑布模型中的几个阶段,但应注意迭代过程中的阶段是完全不同的,这些工作流在整个生命周期中一次又一次被访问。9个核心工作流在项目中轮流被使用,在每一次迭代中以不同的重点和强度重复。

    1. 商业建模(Business Modeling)

          商业建模工作流描述了如何为新的目标组织开发一个构想,并基于这个构想在商业用例模型和商业对象模型中定义组织的过程,角色和责任。

    2. 需求(Requirements)

      需求工作流的目标是描述系统应该做什么,并使开发人员和用户就这一描述达成共识。为了达到该目标,要对需要的功能和约束进行提取、组织、文档化;最重要的是理解系统所解决问题的定义和范围。

    3. 分析和设计(Analysis & Design)

      分析和设计工作流将需求转化成未来系统的设计,为系统开发一个健壮的结构并调整设计使其与实现环境相匹配,优化其性能。分析设计的结果是一个设计模型和一个可选的分析模型。设计模型是源代码的抽象,由设计类和一些描述组成。设计类被组织成具有良好接口的设计包(Package)和设计子系统(Subsystem),而描述则体现了类的对象如何协同工作实现用例的功能。 设计活动以体系结构设计为中心,体系结构由若干结构视图来表达,结构视图是整个设计的抽象和简化,该视图中省略了一些细节,使重要的特点体现得更加清晰。体系结构不仅仅是良好设计模型的承载媒介,而且在系统的开发中能提高被创建模型的质量。

    4. 实现(Implementation)

      实现工作流的目的包括以层次化的子系统形式定义代码的组织结构;以组件的形式(源文件、二进制文件、可执行文件)实现类和对象;将开发出的组件作为单元进行测试以及集成由单个开发者(或小组)所产生的结果,使其成为可执行的系统。

    5. 测试(Test)

    测试工作流要验证对象间的交互作用,验证软件中所有组件的正确集成,检验所有的需求已被正确的实现, 识别并确  认缺陷在软件部署之前被提出并处理。RUP提出了迭代的方法,意味着在整个项目中进行测试,从而尽可能早地发现缺陷,从根本上降低了修改缺陷的成本。测试类似于三维模型,分别从可靠性、功能性和系统性能来进行。

    6. 部署(Deployment)

      部署工作流的目的是成功的生成版本并将软件分发给最终用户。部署工作流描述了那些与确保软件产品对最终用户具有可用性相关的活动,包括:软件打包、生成软件本身以外的产品、安装软件、为用户提供帮助。在有些情况下,还可能包括计划和进行beta测试版、移植现有的软件和数据以及正式验收。

    7. 配置和变更管理(Configuration & Change Management)

      配置和变更管理工作流描绘了如何在多个成员组成的项目中控制大量的产物。配置和变更管理工作流提供了准则来管理演化系统中的多个变体,跟踪软件创建过程中的版本。工作流描述了如何管理并行开发、分布式开发、如何自动化创建工程。同时也阐述了对产品修改原因、时间、人员保持审计记录。

    8. 项目管理(Project Management)

      软件项目管理平衡各种可能产生冲突的目标,管理风险,克服各种约束并成功交付使用户满意的产品。其目标包括:为项目的管理提供框架,为计划、人员配备、执行和监控项目提供实用的准则,为管理风险提供框架等。

    9. 环境(Environment)

      环境工作流的目的是向软件开发组织提供软件开发环境,包括过程和工具。环境工作流集中于配置项目过程中所需要的活动,同样也支持开发项目规范的活动,提供了逐步的指导手册并介绍了如何在组织中实现过程。

    七、RUP的迭代开发模式

      RUP中的每个阶段可以进一步分解为迭代。一个迭代是一个完整的开发循环,产生一个可执行的产品版本,是最终产品的一个子集,它增量式地发展,从一个迭代过程到另一个迭代过程到成为最终的系统。 传统上的项目组织是顺序通过每个工作流,每个工作流只有一次,也就是我们熟悉的瀑布生命周期(见图2)。这样做的结果是到实现末期产品完成并开始测试,在分析、设计和实现阶段所遗留的隐藏问题会大量出现,项目可能要停止并开始一个漫长的错误修正周期。

     


      一种更灵活,风险更小的方法是多次通过不同的开发工作流,这样可以更好的理解需求,构造一个健壮的体系结构,并最终交付一系列逐步完成的版本。这叫做一个迭代生命周期。在工作流中的每一次顺序的通过称为一次迭代。软件生命周期是迭代的连续,通过它,软件是增量的开发。一次迭代包括了生成一个可执行版本的开发活动,还有使用这个版本所必需的其他辅助成分,如版本描述、用户文档等。因此一个开发迭代在某种意义上是在所有工作流中的一次完整的经过,这些工作流至少包括:需求工作流、分析和设计工作流、实现工作流、测试工作流。其本身就像一个小型的瀑布项目(见图3)。

     

     

    图3 RUP的迭代模型

      与传统的瀑布模型相比较,迭代过程具有以下优点:

      降低了在一个增量上的开支风险。如果开发人员重复某个迭代,那么损失只是这一个开发有误的迭代的花费。

      降低了产品无法按照既定进度进入市场的风险。通过在开发早期就确定风险,可以尽早来解决而不至于在开发后期匆匆忙忙。

      加快了整个开发工作的进度。因为开发人员清楚问题的焦点所在,他们的工作会更有效率。

      由于用户的需求并不能在一开始就作出完全的界定,它们通常是在后续阶段中不断细化的。因此,迭代过程这种模式使适应需求的变化会更容易些。

    八、统一软件开发过程RUP的十大要素

    1. 开发前景
    2. 达成计划
    3. 标识和减小风险
    4. 分配和跟踪任务。。
    5. 检查商业理由
    6. 设计组件构架
    7. 对产品进行增量式的构建和测试
    8. 验证和评价结果
    9. 管理和控制变化
    10. 提供用户支持

    让我们逐一的审视这些要素,看一看它们什么地方适合RUP,找出它们能够成为十大要素的理由。
     
    1. 开发一个前景
          有一个清晰的前景是开发一个满足涉众真正需求的产品的关键。 前景抓住了RUP需求流程的要点:分析问题,理解涉众需求,定义系统,当需求变化时管理需求。 前景给更详细的技术需求提供了一个高层的、有时候是合同式的基础。正像这个术语隐含的那样,它是软件项目的一个清晰的、通常是高层的视图,能被过程中任何决策者或者实施者借用。它捕获了非常高层的需求和设计约束,让前景的读者能理解将要开发的系统。它还提供了项目审批流程的输入,因此就与商业理由密切相关。最后,由于前景构成了“项目是什么?”和“为什么要进行这个项目?”,所以可以把前景作为验证将来决策的方式之一。 对前景的陈述应该能回答以下问题,需要的话这些问题还可以分成更小、更详细的问题: ? 关键术语是什么?(词汇表) ? 我们尝试解决的问题是什么?(问题陈述) ? 涉众是谁?用户是谁?他们各自的需求是什么? ? 产品的特性是什么? ? 功能性需求是什么?(Use Cases) ? 非功能性需求是什么? ? 设计约束是什么?

    2. 达成计划
            “产品的质量只会和产品的计划一样好。” (2) 在RUP中,软件开发计划(SDP)综合了管理项目所需的各种信息,也许会包括一些在先启阶段开发的单独的内容。SDP必须在整个项目中被维护和更新。 SDP定义了项目时间表(包括项目计划和迭代计划)和资源需求(资源和工具),可以根据项目进度表来跟踪项目进展。同时也指导了其他过程内容(原文:process components)的计划:项目组织、需求管理计划、配置管理计划、问题解决计划、QA计划、测试计划、评估计划以及产品验收计划。

          在较简单的项目中,对这些计划的陈述可能只有一两句话。比如,配置管理计划可以简单的这样陈述:每天结束时,项目目录的内容将会被压缩成ZIP包,拷贝到一个ZIP磁盘中,加上日期和版本标签,放到中央档案柜中。 软件开发计划的格式远远没有计划活动本身以及驱动这些活动的思想重要。正如Dwight D.Eisenhower所说:“plan什么也不是,planning才是一切。” “达成计划”—和列表中第3、4、5、8条一起—抓住了RUP中项目管理流程的要点。项目管理流程包括以下活动:构思项目、评估项目规模和风险、监测与控制项目、计划和评估每个迭代和阶段。

    3. 标识和减小风险
          RUP的要点之一是在项目早期就标识并处理最大的风险。项目组标识的每一个风险都应该有一个相应的缓解或解决计划。风险列表应该既作为项目活动的计划工具,又作为确定迭代的基础。

    4. 分配和跟踪任务
          有一点在任何项目中都是重要的,即连续的分析来源于正在进行的活动和进化的产品的客观数据。在RUP中,定期的项目状态评估提供了讲述、交流和解决管理问题、技术问题以及项目风险的机制。团队一旦发现了这些障碍物(篱笆),他们就把所有这些问题都指定一个负责人,并指定解决日期。进度应该定期跟踪,如有必要,更新应该被发布。(原文:updates should be issued as necessary。) 这些项目“快照”突出了需要引起管理注意的问题。随着时间的变化/虽然周期可能会变化(原文:While the period may vary。),定期的评估使经理能捕获项目的历史,并且消除任何限制进度的障碍或瓶颈。

    5. 检查商业理由
          商业理由从商业的角度提供了必要的信息,以决定一个项目是否值得投资。商业理由还可以帮助开发一个实现项目前景所需的经济计划。它提供了进行项目的理由,并建立经济约束。当项目继续时,分析人员用商业理由来正确的估算投资回报率(ROI,即return on investment)。 商业理由应该给项目创建一个简短但是引人注目的理由,而不是深入研究问题的细节,以使所有项目成员容易理解和记住它。在关键里程碑处,经理应该回顾商业理由,计算实际的花费、预计的回报,决定项目是否继续进行。

    6. 设计组件构架
          在RUP中,件系统的构架是指一个系统关键部件的组织或结构,部件之间通过接口交互,而部件是由一些更小的部件和接口组成的。即主要的部分是什么?他们又是怎样结合在一起的? RUP提供了一种设计、开发、验证构架的很系统的方法。在分析和设计流程中包括以下步骤:定义候选构架、精化构架、分析行为(用例分析)、设计组件。 要陈述和讨论软件构架,你必须先创建一个构架表示方式,以便描述构架的重要方面。在RUP中,构架表示由软件构架文档捕获,它给构架提供了多个视图。每个视图都描述了某一组涉众所关心的正在进行的系统的某个方面。涉众有最终用户、设计人员、经理、系统工程师、系统管理员,等等。这个文档使系统构架师和其他项目组成员能就与构架相关的重大决策进行有效的交流。

    7. 对产品进行增量式的构建和测试
          在RUP中实现和测试流程的要点是在整个项目生命周期中增量的编码、构建、测试系统组件,在先启之后每个迭代结束时生成可执行版本。在精化阶段后期,已经有了一个可用于评估的构架原型;如有必 要,它可以包括一个用户界面原型。然后,在构建阶段的每次迭代中,组件不断的被集成到可执行、经过测试的版本中,不断地向最终产品进化。动态及时的配置管理和复审活动也是这个基本过程元素(原文:essential process element)的关键。

    8. 验证和评价结果
          顾名思义,RUP的迭代评估捕获了迭代的结果。评估决定了迭代满足评价标准的程度,还包括学到的教训和实施的过程改进。 根据项目的规模和风险以及迭代的特点,评估可以是对演示及其结果的一条简单的纪录,也可能是一个完整的、正式的测试复审记录。 这儿的关键是既关注过程问题又关注产品问题。越早发现问题,就越没有问题。(原文:The sooner you fall behind, the more time you will have to catch up.)

    9. 管理和控制变化
          RUP的配置和变更管理流程的要点是当变化发生时管理和控制项目的规模,并且贯穿整个生命周期。其目的是考虑所有的涉众需求,尽可能的满足,同时仍能及时的交付合格的产品。 用户拿到产品的第一个原型后(往往在这之前就会要求变更),他们会要求变更。重要的是,变更的提出和管理过程始终保持一致。 在RUP中,变更请求通常用于记录和跟踪缺陷和增强功能的要求,或者对产品提出的任何其他类型的变更请求。变更请求提供了相应的手段来评估一个变更的潜在影响,同时记录就这些变更所作出的决策。他们也帮助确保所有的项目组成员都能理解变更的潜在影响。

    10. 提供用户支持
          在RUP中,部署流程的要点是包装和交付产品,同时交付有助于最终用户学习、使用和维护产品的任何必要的材料。 项目组至少要给用户提供一个用户指南(也许是通过联机帮助的方式提供),可能还有一个安装指南和版本发布说明。 根据产品的复杂度,用户也许还需要相应的培训材料。最后,通过一个材料清单(BOM表,即Bill of Materials)清楚地记录应该和产品一起交付哪些材料。 关于需求 有人看了我的要素清单后,可能会非常不同意我的选择。例如,他会问,需求在哪儿呢?他们不重要吗?我会告诉他我为什么没有把它们包括进来。有时,我会问一个项目组(特别是内部项目的项目组):“你们的需求是什么?”,而得到的回答却是:“我们的确没有什么需求。” 刚开始我对此非常惊讶(我有军方的宇航开发背景)。他们怎么会没有需求呢?当我进一步询问时,我发现,对他们来说,需求意味着一套外部提出的强制性的陈述,要求他们必须怎么样,否则项目验收就不能通过。但是他们的确没有得到这样的陈述。尤其是当项目组陷入了边研究边开发的境地时,产品需求从头到尾都在演化。 因此,我接着问他们另外一个问题:“好的,那么你们的产品的前景是什么呢?”。这时他们的眼睛亮了起来。然后,我们非常顺利的就第一个要素(“开发一个前景”)中列出的问题进行了沟通,需求也自然而然的流动着(原文:and the requirements just flow naturally.)。 也许只有对于按照有明确需求的合同工作的项目组,在要素列表中加入“满足需求”才是有用的。请记住,我的清单仅仅意味着进行进一步讨论的一个起点。

    九、总结

      RUP具有很多长处:提高了团队生产力,在迭代的开发过程、需求管理、基于组件的体系结构、可视化软件建模、验证软件质量及控制软件变更等方面,针对所有关键的开发活动为每个开发成员提供了必要的准则、模板和工具指导,并确保全体成员共享相同的知识基础。它建立了简洁和清晰的过程结构,为开发过程提供较大的通用性。但同时它也存在一些不足: RUP只是一个开发过程,并没有涵盖软件过程的全部内容,例如它缺少关于软件运行和支持等方面的内容;此外,它没有支持多项目的开发结构,这在一定程度上降低了在开发组织内大范围实现重用的可能性。可以说RUP是一个非常好的开端,但并不完美,在实际的应用中可以根据需要对其进行改进并可以用OPEN和OOSP等其他软件过程的相关内容对RUP进行补充和完善。

  • 测试、测试、测试--软件测试的理论和实践

    2007-05-17 11:00:55

    我们每个人,不会都是软件测试人员,但都是某些软件的用户。缺省或默认情况下,用户都会觉得买到的软件是没有问题的,一般不会去想这样的软件可能会有问题,用户只要使用这些软件来解决他们需要解决的问题就可以了。当他们发现问题的时候,甚至会感到震惊。存在的问题很多都和测试的成效有关系,一般的软件产品存在的问题确实比较少,但我觉得即使是以前买的正版的金山快译2000都有着一些显而易见的bug。如果测试不充分,那么这些问题会潜伏在软件中,等到用户发现以后,再有开发人员进行维护,改正错误的费用一般是开发阶段的40倍到60倍。

    人们对测试存在着一些误区,例如:
    1 测试是想象到可能出现的问题,然后试图验证这些问题。
    实际上能想象到的只是一部分的情况,随意性太大,还要取决于开发人员的经验,对业务的熟悉程度和他想象到的程度。
    2 让时间有富裕的员工去做一些测试
    表面上看这体现了管理的效率和灵活性,但实际上也体现了管理者对测试的轻视。测试和测试的人有很大关系。测试工作人员应该是勤奋并富有耐心,善于学习、思考和发现问题,细心有条理,总结问题,如果具备这样的优点,做其它工作同样也会很出色,因此这里还有一个要求,就是要喜欢测试这项工作。如果他是专职的,那么肯定更有经验和信心。国内的小伙子好象都喜欢做程序员,两者工作性质不同,待遇不同,地位不同,对自我实现的价值的认识也不同,这是行业的一个需要改善的问题。如果只是为了完成任务而完成任务,或者发现了几个问题就觉得满意了,这在任何其它工作中都是不行的。
    3 测试是相对简单的工作。
    实际上并非如此,要真正做好一件事都不容易。测试也有很多相关技术和工具。而对测试的轻视问题,也许要通过痛苦的经历和结果才可能确切体会到。很多专家都在对测试的理论进行深入的探讨和研究。

    测试的基本知识

    让我们一起快速过一遍:

    什么是软件测试:在软件投入运行前,对软件需求分析、设计规格说明和编码的最终复审,是软件质量保证的关键步骤。
    测试的目标:以较少的用例、时间和人力找出软件中潜在的各种错误和缺陷,以确保系统的质量。
    从测试的类型来看,测试分为2种:黑盒测试白盒测试
    黑盒测试又称为功能测试或数据驱动测试,把系统看成一个黑盒子,不考虑程序的内在逻辑,只根据需求规格说明书的要求来检查程序的功能是否符合它的功能说明。
    白盒测试又称为结构测试和逻辑驱动测试,允许测试人员对程序内部逻辑结构及有关信息来设计和选择测试用例,对程序的逻辑路径进行测试。
    测试用例由测试输入数据以及与之对应的输出结果组成。测试用例设计的好坏直接决定了测试的效果和结果。
    从测试实际的前后过程来看,软件测试上是由一系列的不同测试所组成,这些软件测试的步骤分为:单元测试、组装测试(集成测试)、确认测试和系统测试。软件开发的过程是自顶向下的,测试则正好相反,以上这些过程就是自底向上,逐步集成的。

    单元测试(模块测试):针对每个模块进行的测试,可从程序的内部结构出发设计测试用例,多个模块可以平行地对立地测试。通常在编码阶段进行,必要的时候要制作驱动模块和桩模块。
    集成测试:在单元测试的基础上,将所有模块按照设计要求组装成为系统,必须精心计划,应提交集成测试计划、集成测试规格说明和集成测试分析报告。
    确认测试:验证软件的功能和性能及其它特性是否与用户的要求一致。
    系统测试:将软件放在整个计算机环境下,包括软硬件平台、某些支持软件、数据和人员等,在实际运行环境下进行一系列的测试。

    测试工作的文档主要有:测试计划、测试模型和用例设计或规格说明、测试分析报告等。从软件工程上说,这是属于软件配置的一部分。(我不知道,如果什么报告都没有,只是不断地摆弄执行程序,看到错误和问题就记下来,算不算真正的测试?)

    测试需要一定的技术和工具

    在用例设计过程中,可以考虑到很多方面,并且也有很多的指导方法和技术。

    黑盒测试用例设计包括:

    等价类划分:划分等价类--确立测试用例--设计用例
    边界值分析:通过分析,考虑如何确立边界情况
    错误推测法:靠经验和直觉来推测程序中可能存在的各种错误,从而有针对性地编写用例。可以列举出可能的错误和可能发生错误的地方,然后选择用例。
    因果图:通过画因果图,在图上标明约束和限制,转换成判定表,然后设计测试用例。这适合于检查程序输入条件的各种组合情况。

    功能图FD:通过形式化地表示程序的功能说明,并机械地生成功能图的测试用例。

    白盒测试用例设计包括:

    1 逻辑覆盖,以程序内在逻辑结构为基础的测试,包括以下5种类型:

    1.1 语句覆盖:每一条可执行语句至少覆盖一次;
    1.2 判定覆盖(分支覆盖):设计若干个测试用例,运行所测程序,使程序中每个判断的取真分支和取假分支至少执行一次;
    1.3 条件覆盖:设计足够多的测试用例,运行所测程序,使程序中每个判断的每个条件的每个可能取值至少执行一次;
    1.4 判定-条件覆盖:设计足够多的测试用例,运行所测程序,使程序中每个判断的每个条件的所有可能取值至少执行一次,并且每个可能的判断结果也至少执行一次;
    1.5 条件组合测试:设计足够多的测试用例,运行所测程序,使程序中每个判断的所有可能的条件取值至少执行一次;
    1.6 路径测试:设计足够多的测试用例,运行所测程序,要覆盖程序中所有可能的路径。

    2 基本路径测试

    在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例。包括以下5个方面:
    2.1 程序的控制流图:描述程序控制流的一种图示方法。
    2.2 程序环境复杂性:McCabe复杂性度量。从程序的环路复杂性可导出程序基本路径集合中的独立路径条数,这是确定程序中每个可执行语句至少执行依次所必须的测试用例数目的上界。
    2.3 导出测试用例
    2.4 准备测试用例,确保基本路径集中的每一条路径的执行
    2.5 图形矩阵:是在基本路径测试中起辅助作用的软件工具,利用它可以实现自动地确定一个基本路径集。

    程序的静态分析方法:

    1 生成各种引用表、静态错误分析

    2 人工测试:桌前检查、代码评审等

    3 软件测试工具:包括静态分析工具、动态测试工具、测试数据自动化生成工具、模块测试台、测试合成环境

    3.1 静态分析工具:语言程序的预处理器、数据库工具、错误分析器和报告生成器。直接扫描所测试的正文,对程序的数据流和控制流进行分析,然后送出测试报告。

    3.2 动态测试工具:通过选择适当的测试用例,实际运行所测程序,比较实际运行结果和预期结果,发现错误。

    3.3 测试数据自动化生成工具:包括路径测试数据生成程序、随机测试数据生成程序以及根据数据规格说明生成测试数据

    3.4 模块测试台是一种专门的测试用例描述语言,负责将输入数据传送到所测试模块中,然后将实际输出结果与在描述测试用例的语言中所表述的期望结果进行比较,发现错误。另外,也包括其它的功能:语句跟踪、动态断句、覆盖度量、用户自定义符号表、内容表和输出格式。

    3.5 测试合成环境:包括环境模拟程序,代码检查程序,测试文档生成程序,测试执行严整程序,输出比较程序,程序正确性证明程序等,以及各种调试工具。而且还有集成系统,集成了多种工具,如SADAT、Microsoft Test for Windows和PureArtria等。
     
    ***********************************************************

    测试的管理

    作为项目或产品开发的一个必要的组成部分,需要良好的组织和管理。使用软件质量规范,编写和实现测试用例和模型,可以有效地组织测试。

    一般的测试工作过程也可以是:计划-->配置(必要的软硬件资源下)-->开发(构造或配置测试工具、创建测试套件和测试方案库、准备适当的报告工具并记录测试系统如何运转)-->测试执行(进行测试、记录测试条件和问题,报告结果)。

    测试管理也可以从测试经理和测试小组2个方面去看:

    测试经理要管理好团队,很多人认为测试是枯燥乏味的事情,而且似乎低级的事情,所以测试经理应该不断地激励小组成员,为他们争取利益。在时间进度上保证稳步前进。就象赛跑,一开始就加班加点,只会导致极限的过早到来。
    作为测试经理,应该有足够的质量意识。评价质量风险的方法是“失败模式和效果分析”(Failure Mode and Effect Analysis, FMEA)。这种方法可以允许您在特定的质量风险和结果上映射需求、规范,以及项目小组假设。然后,按照风险级别进行分类,并按序排列。
    实际上如果能得到充分的资源已是很困难的了,能用好临时的测试人员也已经不错了。一般企业的主管和技术经理都并不怎么真正重视测试工作的意义和价值。也许他们认为临时的投入一次性的强力测试足以发现绝大部分问题,而实际上这对产品的长远发展,以及质量改进都没有太大好处。

    测试过程中软件功能可能进行调整和变化,测试发现问题也会导致变化,需要重新的测试。对这些变更也需要进行管理。
    另外,由于上层管理部门的不重视,必须想办法与之进行清楚而有效的沟通;同开发部门的沟通也非常重要,因为开发和测试在性质上是有些对立的,很容易在相互之间产生一些不必要的矛盾。和开发部门不同的是,一般质量或测试部门和市场或销售部门的立场倒是比较一致的,如果双方都认为高质量的产品是市场战略中重要的品牌战略,彻底的测试对于达到这样的目标来说意义重大。因此,有必要和市场部门保持协作和交流。

    测试经理可以经常问自己一些问题:

    计划做哪些测试?实际完成了哪些测试?使用了多少用例?其中多少没有通过?管理部门是否有足够的支持?他们是否向你要过测试报告?开发部门的联络是否及时?等等。如果你是测试管理人员,应该可以想到更多的问题。

    测试小组:

    测试小组有多大的规模,一般取决于项目规模、测试人员与开发人员的比例、项目经理对质量保证的认识和期望等,也取决于你的准确的测试计划。
    对一些项目来说,最好是在开始阶段就有测试人员有所介入。

    如本文一开始所提到的,在测试小组中测试人员必须具备的素质包括:有效的坦率真诚的交流的能力、清晰简明的表达能力、一定的好奇心(但不至于太强,以至于花太多精力去探究一个微小的问题),不应害怕提出尖锐问题引起麻烦,一定的责任心,
    注意力能够高度集中,是职业悲观主义者(但不是抱怨和憎恶)。

    以下是一些测试的方法和基本工具:

    测试方案、测试模型和测试用例
    测试就象是做实验一样,实验对于象我这样的理工科毕业生来说真是太熟悉不过了。做实验之前必然有实验的方案、内容和步骤,测试似乎也是同样的。另外,基于测试用例的测试和常见的随机性的测来测去也是完全不同的,尽管习惯于随机性测试的人,如果注意力集中的话,他的头脑里也是有一些测试用例的。

    关于测试实验室,进行测试工作首先要争取到尽可能好的环境。如果可能,应该建立测试实验室,实验室包括必要的装备、工具软件(包括测试工具)和各种操作系统平台,保持实验室的实用、整洁,避免他人干扰甚至破坏测试环境。

    关于测试跟踪软件,制作一个简单的测试问题跟踪软件,记录测试的结果,将测试发现的问题分类,并对测试发现的问题和模块、开发人员进行关联,有助于分析问题,并可有效记录测试的结果,形成测试报告,并从中找出一些规律性的东西来。因此测试问题跟踪软件还是有一定的价值的。

    关于测试自动化,有一定的风险。对一个稳定的系统,甚至可以自己开发自动化软件,而对于正处于快速变形中的软件开发过程,接口、主要功能和支持环境在发展变化中。为测试配置环境也要付出很多的时间。

    以下是关于测试的一些技巧和经验:

    在制定测试计划的时候,就要考虑到测试的风险,并抉择要执行哪些测试,并放弃哪些测试;测试计划的评审应该让开发人员参与;
    测试模型的制作应该尽可能贴近用户,或者站在用户的使用立场上来观测软件,此时应该能发现更多的问题。

    由于测试发现问题,在解决问题后还要重新测试,因此测试的时间可能会比实际更长一些

    识别和注意少数重要的方面,而忽略多数次要的方面,有时候少数的问题足以致命,这些问题将是软件测试结果中重要性最高的错误。

    错误的定位有时是很难的,要找出必然发生的前因后果,而不至于因为描述错误而误导开发人员。有时候确实存在错误不能重建的问题。解决办法之一是在错误报告中给予说明。

    对错误的描述,应该是准确、完整而简练。因为描述的问题或者不完整的描述会引起开发人员的误解,其后果是可以想见的。

    有时有经验的测试人员凭借直觉就可以发现一些问题,这可称为“错误猜测”。

    测试人员容易犯2种错误:一是测试人员发生判断错误,将本没有错误的系统行为报告为错误,或者将错误指定了过高的严重级别,或者过高估计了问题的严重性,这样会引起开发人员的不信任,产生一种象“狼来了”一样的效果;二是测试人员将错误的严重性或优先级定得过低,从而产生“测试逃逸”,这样会造成产品质量的风险。以上两种错误应该尽量避免。

     
    最后,我忽然想,测试实际上可以覆盖到硬件,甚至非计算机产品的测试,也许可以相互借鉴。

    还有一种很奇特的感想,这种感想使我反而有些困惑不清了。我发现对测试来说,理论和实践的距离好象非常遥远,我先看了一本软件工程的书,然后写下了前面的一半内容,然后我又匆匆翻看了一本美国人的书,叫做《测试流程管理》,然后整理出了本文后一半的内容,该书中有着比本文多得多的各方面的实践经验。歌德说过,理论是苍白的,生命之树常青。我稍稍改变一下,就变成了:理论是苍白的,实践之树常青。也许测试是一种实践性很强的工作,大学教授们一般也不可能热衷于参加测试工作吧。

  • 如何从一名测试员转型为测试管理人员

    2007-05-10 08:47:22

    如果你是测试员或是高级测试员,有志转向管理发展,那么需要加强以下内容,至少要做到几点:

    1. 测试计划的编写(要结合测试的项目,能以此来控制和确定测试所需人员,设备及时间来管理测试时间)

    2. 要熟悉BUG跟踪工具及软件测试流程.(如: TD, Bugzilla, CQ等)

    3. 要熟悉配置管理工具. (如: CVS, VSS等)

    4. 要熟悉自动化工具.(例如:WinRunner, QTP, Robot, RFT, Automation等,能结合录制完的脚本编写代

    码)

    5. 要熟悉压力及性能测试工具.(例如: LoadRunner, webload, silkperformance等,能结合相关数据,分

    析出性能瓶颈)

    6. 要熟悉或精通一门语言. (例如: Java, C++)

    7. 要熟悉数据库.(例如: Oracle, DB2, SQLServer, MySQL)

    8. 要熟悉主流操作系统. (例如: HP Unix, IBM AIX, Sun Solaris, Red Hat Linux, SuSE Linux,

    Windows)

    9. 能用英文流利的和老外交流以及往来Email.

    10. 语言表达能力强,表达问题清晰明了.

    11. 沟通能力强,能和上级/开发经理很好的达成测试相关/BUG事宜.

    12. 学习技术的能力要强,能快速上手一个新的技术.

    13. 乐于与人交流.

  • 软件测试自动化的成功经验

    2007-05-09 14:16:22

    1.传统软件测试过程中的问题

      测试在所有的软件开发过程中都是最重要的部分。在软件开发过程中,一方面要求我们通过测试活动验证所开发的软件在功能上满足软件需求中描述的每一条特性,性能上满足客户要求的负载压力和相应的响应时间、吞吐量要求;另一方面,面向市场和客户,开发团队还要满足在预算范围内尽快发布软件的要求。

      传统的软件测试流程一般是先在软件开发过程中进行少量的单元测试,然后在整个软件开发结束阶段,集中进行大量的测试,包括功能和性能的集成测试和系统测试。随着开发的软件项目越来越复杂,传统的软件测试流程不可避免地给我们的工作带来以下问题:

      问题一:项目进度难于控制,项目管理难度加大

      如图一所示,大量的软件错误往往只有到了项目后期系统测试时才能够被发现,解决问题所花的时间很难预料,经常导致项目进度无法控制,同时在整个软件开发过程中,项目管理人员缺乏对软件质量状况的了解和控制,加大了项目管理难度。

    图1:传统测试流程中存在的问题

      问题二:对于项目风险的控制能力较弱

      项目风险在项目开发较晚的时候才能够真正降低。往往是经过系统测试之后,才真正确定该设计是否能够满足系统功能、性能和可靠性方面的需求。

      问题三:软件项目开发费用超出预算     

      在整个软件开发周期中,错误发现的越晚,单位错误修复成本越高,如图二所示,错误的延迟解决必然导致整个项目成本的急剧增加。

    图2:传统测试流程中存在的问题

    2.采用软件自动化测试工具是解决传统测试问题的最佳成功经验

      软件自动化测试技术核心的三个最佳成功经验是:尽早测试、连续测试、自动化测试,并在此基础上提供了完整的软件测试流程和一整套的软件自动化测试工具,使我们最终能够做到:一个测试团队,基于一套完整的软件测试流程,使用一套完整的自动化软件测试工具,完成全方位的软件质量验证。

      成功经验一:尽早测试

      所谓尽早测试是指在整个软件开发生命周期中通过各种软件工程技术尽量早的完成各种软件测试任务的一种思想。软件自动化测试工具主要在以下三个方面为我们提供的尽早测试的软件工程技术:

      首先,软件的整个测试生命周期是与软件的开发生命周期基本平齐的过程,当需求分析基本明确后我们就应该基于需求分析的结果和整个项目计划来进行软件的测试计划;伴随着分析设计过程同时应该完成测试用例的设计;当软件的第一个发布出来后,测试人员要马上基于它进行测试脚本的实现,并基于测试计划中的测试目的执行测试用例,对测试结果进行评估报告。这样,我们可以通过各种测试指标实时监控项目质量状况,提高对整个项目的控制和管理能力。

      其次,通过迭代是软件开发把原来的整个软件开发生命周期分成多个迭代周期,在每个迭代周期都进行测试,这样在很大程度上提前了软件系统测试发生的时间,这可以在很大程度上降低项目风险和项目开发成本。

      最后,软件自动化测试工具的尽早测试成功经验还体现在它扩展了传统软件测试阶段从单元测试、集成测试到系统测试、验收测试的划分,将整个软件的测试按阶段划分成开发员测试和系统测试两个阶段,如图三所示,它把软件的测试责无旁贷地扩展到整个开发人员的工作过程。通过提前测试发生的时间来尽早地提高软件质量、降低软件测试成本。

    相信我 没错的!快点击吧
  • 软件测试用例的设计

    2007-05-09 08:55:50

    作者:王静兰

    转载者:孙小勇相信我 没错的!快点击吧

     

    一个项目最终呈现在用户面前的质量,与测试执行的程度与力度是密不可分的。测试用例设计的基本目的,是确定一组最有可能发现某个错误或者某类错误的一组测试数据。测试用例构成了设计和制定测试过程的基础,因此测试用例的质量在一定程度上决定了测试工作有效程度。一个好的测试用例使得测试工作的效果事半功倍,并且能尽早的发现一些隐藏的BUG,测试用例的设计是软件开发中的重中之重。

    关键词:软件测试,测试用例,TESTCASE,用例设计

    A test case is a series of tests used to determine whether one particular thing works properly. Often that means trying the same operation over and over again with little in the procedure.

    A test case is a document that describes an input, action, or event and an expected response, to determine if a feature of an application is working correctly. A test case should contain particulars such as test case identifier, test case name, objective, test conditions/setup, input data requirements, steps, and expected results.

     1  引言

    1.1  测试用例在软件产品中的作用和意义

    软件产品化之后给人们日常生活和工作带来了极大的便利。同样的,也使人们对软件产品的质量重视上升到了更进一步的高度。随着软件危机的不断出现以及人们对于软件更进一步的认识,测试的地位得到了前所未有的提高,并且人们意识到:测试开始的时间越早,软件的缺陷将越早被发现,带来整个软件开发中的成本也下降越多。软件测试是发现软件中缺陷的主要手段和唯一有效的方法。软件质量的重视度越高,软件测试工作在软件开发过程中就越重要。

    完全覆盖测试又要求测试工作的力度和深度以及每一种现实中可能发生的操作都要保证正确,很多人觉得这个似乎是矛盾的。软件测试中永远不可能做到穷举测试,又想使得测试工作的效率达到最高,那么该如何兼顾工作量和效率的问题,往往成为测试工作中的瓶颈问题所在。如何测试,用什么方式来测试,在什么环境和什么样的条件下进行测试,测试的工作量和如何避免重复的测试,等等各种应该考虑的因素在测试工作中如何协调和同步,在测试用例中应该充分描述这些问题。

    因此,软件测试工作中处于重中之重的测试用例的设计要求也随之上升到了更高的层次。测试用例不但构成了设计和制定测试过程的基础,而且测试的深度与测试用例的数量成正比。一般来讲,判断测试是否完全的一个主要评测方法是基于需求的覆盖,而这个又是以确定、实施和(或)执行的测试用例的数量为依据的;测试工作量与测试用例的数量成比例;测试设计和开发的类型以及所需的资源主要都受控于测试用例。这些使得测试用例在整个的软件开发过程中处于更加重要的地位。

    1.2  测试用例的定义

    测试用例是为某个特殊目标而编制的一组测试输入、执行条件以及预期结果,以便测试某个程序路径或核实是否满足某个特定需求。

    Robert V.Binder是这样描述的,测试实例:输入、执行条件,及为一个特殊目标所开发的预期结果的集合。一个定义IUT(被测实现,即被测代码)及其环境、测试输入或条件,及预期结果的测试前状态的表示或实现。

    1.3  测试用例应该包含的要素

    首先测试用例应该包含软件或者项目名称、所服务的范围、背景、作者、编写时间等文档类信息;根据测试用例的定义和目的,测试用例的内容应该有:标题和用例编号、版本号、修改记录,针对目标和假设前提/可能发现的错误,输入数据/代码,测试步骤,预期输出和错误发现方法。

    1.4  测试用例中需要注意的问题

    每个测试用例清楚地阐述了正在进行评估的用例、用例场景、测试目标或条件的有关说明。每个测试用例都描述了预期结果和评估该结果的方法。

    对于每个测试需求,在测试用例中需要考虑在正面测试和负面测试的条件下的测试,或者通过确定两个测试用例来实现,一个测试用例代表预期的条件,它可用于核实行为是否正确或符合预期(正面测试)。另一个测试用例代表不可接受的、异常的或意外的条件,它可用于核实测试需求是否未以非预期方式执行(负面测试)。

    在一般情况下,对于测试的每个需求来说,至少要有一个正面测试用例和为数较多的负面测试用例,以此来检查在异常情况下系统能否正常处理,或者用户进行了错误的操作时的友好提示等等。

    测试用例已被确定用来执行测试目标中所有的产品需求行为,包括(视情况而定): 功能 、数据确认 、业务规则实施 、测试目标工作流程或控制 、数据流 、对象状态 、性能(包括工作量、配置和强度) 、安全性/可访问性 、兼容性。每个测试用例都说明或者/代表一个唯一的输入集或事件顺序,它能够产生唯一的测试目标行为,复审那些产生相同行为的测试用例并判定它们是否等同,即它们是否都执行测试目标中的路径。

    每个测试用例(或每组相关的测试用例)确定初始的测试目标状态和测试数据状态。测试用例名称和/ ID 与测试工件命名约定一致。

    2  测试用例的设计方法概述

    根据测试的方法分为黑盒测试和白盒测试,相应的测试用例的设计方法也可以分为针对黑盒测试的用例设计和针对白盒测试的用例设计。

    至今提出的测试用例设计方法有许多,下面简要的介绍一些比较重要的、常用的方法。

    2.1  白盒测试的测试用例设计方法

    2.1.1 逻辑覆盖

    逻辑覆盖包括:语句覆盖、判定覆盖、条件覆盖、判定-条件覆盖、条件组合覆盖、路径覆盖,各自的定义简略描述如下:

    语句覆盖就是设计若干个测试用例,运行被测程序,使得每一可执行语句至少执行一次。

    判定覆盖就是设计若干个测试用例,运行被测程序,使得程序中每个判断的取真分支和取假分支至少经历一次。

    条件覆盖就是设计若干个测试用例,运行被测程序,使得程序中每个判断的每个条件的可能取值至少执行一次。

    判定-条件覆盖就是设计足够的测试用例,使得判断中每个条件的所有可能取值至少执行一次,每个判断中的每个分支至少执行一次。

    条件组合覆盖就是设计足够的测试用例,运行被测程序,使得每个判断的所有可能的条件取值组合至少执行一次。

    路径测试就是设计足够的测试用例,覆盖程序中所有可能的路径。

    2.1.2 基本路径测试

    基本路径测试方法把覆盖的路径数压缩到一定限度内,程序中的循环体最多只执行一次。

    它是在程序控制流图的基础上,分析控制构造的环路复杂性,导出基本可执行路径集合,设计测试用例的方法。设计出的测试用例要保证在测试中,程序的每一个可执行语句至少要执行一次。

    2.2  黑盒测试的测试用例设计方法

    2.2.1 等价划分

    所谓等价类划分是指一套被选择的值,这些值分别代表了许多众多的可能输入值,程序对其处理的方式都是一样的。

    等价类划分的方法作为继边界值分析方法之后补充的测试用力设计试用的一种方法。划分等价类、确定测试用例

    等价类划分是一种典型的黑盒测试方法,使用这一方法时,完全不考虑程序的内部结构,只依据程序的规格说明来设计测试用例。

    等价类划分方法把所有可能的输入数据,即程序的输入域划分成若干部分,然后从每一部分中选取少数有代表性的数据做为测试用例

    等价类的划分有两种不同的情况:
    有效等价类:是指对于程序的规格说明来说,是合理的,有意义的输入数据构成的集合。

    无效等价类:是指对于程序的规格说明来说,是不合理的,无意义的输入数据构成的集合。

    在设计测试用例时,要同时考虑有效等价类和无效等价类的设计。

    2.2.2 边界值分析

    在设计测试用例确定输入和输出参数时,大多数情况下都是用边界值分析方法,采用边界值分析设计的测试用例发现程序错误能力最强。

    边界值分析也是一种黑盒测试方法,是对等价类划分方法的补充。

    人们从长期的测试工作经验得知,大量的错误是发生在输入或输出范围的边界上,而不是在输入范围的内部。因此针对各种边界情况设计测试用例,可以查出更多的错误。

    2.2.3 错误推测法

    人们也可以靠经验和直觉推测程序中可能存在的各种错误,从而有针对性地编写检查这些错误的例子。这就是错误推测法。

    错误推测法的基本想法是:列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据它们选择测试用例。

    2.2.4 因果图

    如果程序的功能说明中含有输入条件的组合情况,则一开始就可以选用因果图法。如果在测试时必须考虑输入条件的各种组合,可使用一种适合于描述对于多种条件的组合,相应产生多个动作的形式来设计测试用例,这就需要利用因果图。

    因果图方法最终生成的就是判定表。它适合于检查程序输入条件的各种组合情况。

    3  测试用例的评审及维护

    3.1 测试用例的评审

    测试用例在设计之后需要经过评审,需要评审的内容如下:

    用例是否完整?是否每一个需求都有其对应的测试用例来验证?

    是否每一个设计元素都有其对应的测试用例来验证?

    事件顺序,能否产生唯一的测试目标行为?

    是否每隔测试用例都阐述了预期结果?

    是否每个测试用例(或每组相关的测试用例)都确定了初始的测试目标状态和测试数据状态?

    测试用例是否包含了所有单一的边界?

    测试用例是否包含了所有的业务数据流?

    是否所有的测试用例名称,ID都与测试工件命名约定一致?

    测试用例评审时需要参加的人员:项目经理,系统分析员,测试设计员,测试员

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

  • 2007.4.28新决定

    2007-04-28 13:28:06

    今天我突然决定五一过后要在51testing发布有关软件测试以及工作方面的日志!
  • Let's Speak English Everyday

    2007-01-23 11:20:06

      

    •   
    •   1.You look great!你看上去很精神
        2.How's your business going?你的生意怎么样?
        3.How's everything going?一切都好吗?
        4.So far so good到目前为止还我不错
        5.Let's keep in touch让我们保持联系吧
         6.I have heard a lot about you久闻大名
        7.We have met我们见过面
        8.Can you spare me a few minutes?我能占用你几分钟时间吗?
        9.Give me a lift送我一程
        0.It's my treat this time这次我请客相信我 没错的!快点击吧
  • 5251testing

    2006-12-26 13:59:22

    5251testing
493/3<123
Open Toolbar