发布新日志

  • 用例场景,软件测试的关键

    2009-01-12 13:56:51

    做软件需求最重要就是分解用例场景,没有用例就不是需求。软件工程这类书要学,不过软件工程软件需求最关键就是用例场景的合理建立,这条,好象没有什么大学教科书谈到,仿佛中国的大学计算机科学系教师统统没有做过软件项目的,完全没有这个概念。所谓的软件需求,如果不是变成走不通的伪代码,就是用不上的美工方案,程序员对此除了干瞪眼是没辄的。

      其中最大的原因就是从事网站或者类似的软件需求的许多人都不懂真正的软件需求是什么东西,包括我处理过的SAP/ERP项目这类都是同样的问题,尽管那不是网站;他们犯的一般共同的错误就是把网页表现形式(那其实是美工的工作),以及内容的采排看作是需求,完全没有一个用例的观念。

      用例,usecase,目前多见于UML下的对面向对象程序中的对象行为的表达;不过,这不是它的源泉;它之所以被看作是这类语言的标准URL描述手段,是因为面向对象本身就是在虚拟程序中模拟真实世界那样地工作;而真实世界,就是围绕着用例展开的。用例的观念其实也不能算是一个软件概念,只不过在软件领域定义得最为精确而已,今天从每个人的生老病死,婚姻嫁娶,其实都是一个个的用例的描述和实施。用例,顾名思意,就是假如(假设)出现某种情况,采取什么样的行动;可能会有什么样的结果;然后,根据这个结果,再采取什么样的行动......直到得到希望的某个最终结局。

      用例也叫场景,软件,实际上就是对场景操作过程的描述,而不是一堆版面框架网页的集成。没有用例支持就不叫软件,更加不叫项目——连垃圾都算不上。很多时侯我们说需求不明确,其实就是说这个用例不清晰;在电子商务网站中,除了人员素质导致对基本概念方法不明白外,最可能的导因就是商业模式不明确,或者不成立。这个成立与否,实际上可以从上面的假如如何那般的推导中进行初步的可行性推演。所以,程序员实际上有两个层次,一个是你说什么他做什么,但永远没有结果的。他却的确实现了你(需求人员)提出的所有要求,但这个项目却必然是永远没有结果的,因为,它本身只是把这个程序员当成网页编辑用了,项目没有基本用例的支持。我想90%的程序员是这类程序员,没有用例明确定义也就没有软件能力的评估,因为软件人员不是美工。另一种程序员则可以从上诉推演中发现整个项目本身有没有用例,以及用例是否合理(理论上没有明显的逻辑障碍);虽然程序员一般不应该关心商业模式是否合理,但实际上他有这个能力,常常是第一个发现商业模式的问题,假如他也关心的话。

      可惜大部分用户需求人员不明白这个道理,反而可能会以为程序员是在推卸责任,或者是刁难需求;也正因为这个原因,需求人员和实现人员的冲突在项目中屡见不鲜,倒不是个人矛盾的冲突,而是由于双方没能有一个基本的立足点。我见过这样的项目,需求人员建一个大型网站的需求就是一大箩的每个网页的非常详细的描述,到每个字每个连接......直至每个网页出现的次序,项目经理说一个笑话:万一他摔一跤,这箩子东西鬼才能再捡回原来的模样。的确,负责需求的客户方副老总和一帮企业需求编辑辛苦做了两个月,但其实这不是需求,而是使用这个项目软件的具体编辑排版的安排;根本不是程序员要看的东西。程序员需要的是使用这个网站时需要有那几种用例逻辑,然后抽象出其中的对象,根据对象建立存储方式(象数据库存储结构)和内容采摘方式。那大箩东东,实际上什么用处也没有的。开发软件如同建房子,旁观者可能问一句:建房子啊就拍手说明白了,但对于开发员来说,如果得不到准确的房子细到砖砖瓦瓦的准确设计(需求定义);要知道建小平房和建金茂大夏都是建房子,建宾馆还是建殡仪馆也是建房子,到底客户要的是什么房子合适,不搞清楚干下去的程序都是不负责任的,或者是冒牌货。

      不懂软件需求的需求人员一般会犯如下错误:一是把版面美工形式看作需求,其实程序员看程序如同医生透过X光看一个人,看到的是骨架,至于是美人还是丑八怪如果能看出来,那个医生一定是变态的;在开发过程中都强调实现用例功能实现,而不是首先色彩如何花梢漂亮,后者不但不是主要的,也不是次要的,在开发过程中什么都不是;一开始把精力放在这里当成需求实现是浪费时间浪费金钱。二是把静态网页当成需求,特别是当把静态网页当成prototype时更经常犯这个错误;常常说:按prototype做出来不就行了?实际上prototype本身如果不是看不出清楚的用例逻辑,就是可能有几种用例解释;何况真正变成动态程序,与静态的东西是不一样的。我在网上看到的美女明星下了台到眼前成了丑八怪,就是这个道理。而且更遭的是,客户还同时犯第一个错误,看着那里不顺眼就改一改版面还一天三变,不知不觉的基本用例就变成了另外一个东西,原来是宾馆现在成了盖殡仪馆,原来搞错了因为不知道躺的人不同叫不同的馆(死人还是活人),试问,如何实现?项目开始和后期看到的同一个版面成为不同的故事绝对是经常出现的故事,软件上称为需求变迁,这是项目经常延期的最主要原因。

      三是需求人员把定制了解成按客户所有想法迎合静态页面,而不是按客户的业务用例要求建立相应的程序;还要求程序员也这样做;实际上,如果不能拨乱反正的话,任何项目到此为止已经是死路一条:那不是软件,无非是静态网页人员出租!需求人员常犯的另一个错误仍是不懂用例,就是把用例的使用方式当成了需求;这种错误有时连初级程序员都会犯,最典型就是把一个菜单栏目当成需求,而程序员无法从菜单中看出明显的简洁的用例逻辑——这是一个没有意义的菜单,天晓得里头是什么?同样地,里头的要干的东西还一天三变。事实上,同一种逻辑用例可以用到N个栏目,那是软件的使用而不是软件本身。

      以上的错误常见于网站建设,所以网站建设最通常的结局是不了了之,大概占了50%以上,无论设入多少钱多少人花多少时间都是如此的;除非有人能够拨乱反正,让项目需求走上正道。而在ERP/DRP这类项目中,需求人员一般情况下是业务的行家,他们反而很容易理解用例是什么东西,象医院收费,绝对不会把精力放在收费界面有没有脱衣舞女让收费员提神上,收费这个用例有多少个环节是他们理解的。这种项目需求最易犯的错误是让先进的计算机工具重复原始状态下的不合理的流程。最典型的笑话就是:手工审批要盖五个章,用五天时间;现在电算化效率提高了一百倍,所以可以盖五百个章(电子签名呢!),时间嘛,仍然是五天!在这里,矛盾不是有没有用例,而是用例是不是合理的,最高效率的。

      所以对于需求由于用例的冲突,程序员如果不想不了了之最后责任全部背上身的话,最好就是坚持原则;程序员迎合网页编写是没有意义的,迁就需求也不是没有意义的,因为......无法迁就的,越是迁就就越是没有办法实现,或者客户没有办法满意的。软件其实很简单的,无非是分析好用例,然后让计算机一步步实现而已,用例,是所有软件实现的前提:不然,软件到底要干什么?好的软件项目都有一个共同的特点,就是简单的逻辑,明确用例。最典型的,看google,ebay。
  • 如何设计编写和设计软件测试用例

    2009-01-12 13:26:32

    一、测试用例是软件测试的核心

      软件测试的重要性是毋庸置疑的。但如何以最少的人力、资源投入,在最短的时间内完成测试,发现软件系统的缺陷,保证软件的优良品质,则是软件公司探索和追求的目标。每个软件产品或软件开发项目都需要有一套优秀的测试方案和测试方法。

      影响软件测试的因素很多,例如软件本身的复杂程度、开发人员(包括分析、设计、编程和测试的人员)的素质、测试方法和技术的运用等等。因为有些因素是客观存在的,无法避免。有些因素则是波动的、不稳定的,例如开发队伍是流动的,有经验的走了,新人不断补充进来;一个具体的人工作也受情绪等影响,等等。如何保障软件测试质量的稳定?有了测试用例,无论是谁来测试,参照测试用例实施,都能保障测试的质量。可以把人为因素的影响减少到最小。即便最初的测试用例考虑不周全,随着测试的进行和软件版本更新,也将日趋完善。

      因此测试用例的设计和编制是软件测试活动中最重要的。测试用例是测试工作的指导,是软件测试的必须遵守的准则,更是软件测试质量稳定的根本保障。

      二、什么叫测试用例

      测试用例(Test Case)目前没有经典的定义。比较通常的说法是:指对一项特定的软件产品进行测试任务的描述,体现测试方案、方法、技术和策略,内容包括测试目标、测试环境、输入数据、测试步骤、预期结果、测试脚本等,并形成文档。

      不同类别的软件,测试用例是不同的。不同于诸如系统、工具、控制、游戏软件,管理软件的用户需求更加不统一,变化更大、更快。笔者主要从事企业管理软件的测试。因此我们的做法是把测试数据和测试脚本从测试用例中划分出来。测试用例更趋于是针对软件产品的功能、业务规则和业务处理所设计的测试方案。对软件的 每个特定功能或运行操作路径的测试构成了一个个测试用例。

      三、编写测试用例

      着重介绍一些编写测试用例的具体做法。

      1、测试用例文档

      编写测试用例文档应有文档模板,须符合内部的规范要求。测试用例文档将受制于测试用例管理软件的约束。

      软件产品或软件开发项目的测试用例一般以该产品的软件模块或子系统为单位,形成一个测试用例文档,但并不是绝对的。

      测试用例文档由简介和测试用例两部分组成。简介部分编制了测试目的、测试范围、定义术语、参考文档、概述等。测试用例部分逐一列示各测试用例。每个具体测试用例都将包括下列详细信息:用例编号、用例名称、测试等级、入口准则、验证步骤、期望结果(含判断标准)、出口准则、注释等。以上内容涵盖了测试用例的 基本元素:测试索引,测试环境,测试输入,测试操作,预期结果,评价标准。

      2、测试用例的设置

      我们早期的测试用例是按功能设置用例。后来引进了路径分析法,按路径设置用例。目前演变为按功能、路径混合模式设置用例。

      3、按功能测试是最简捷的,按用例规约遍历测试每一功能。

      对于复杂操作的程序模块,其各功能的实施是相互影响、紧密相关、环环相扣的,可以演变出数量繁多的变化。没有严密的逻辑分析,产生遗漏是在所难免。路径分析是一个很好的方法,其最大的优点是在于可以避免漏测试。

      为提高测试效率,软件测试已大力发展自动测试。自动测试的中心任务是编写测试脚本。如果说软件工程中软件编程必须有设计规格说明书,那么测试脚本的设计规格说明书就是测试用例。

      4、评估测试结果的度量基准

      完成测试实施后需要对测试结果进行评估,并且编制测试报告。判断软件测试是否完成、衡量测试质量需要一些量化的结果。例:测试覆盖率是多少、测试合格率是多少、重要测试合格率是多少,等等。以前统计基准是软件模块或功能点,显得过于粗糙。采用测试用例作度量基准更加准确、有效。

      5、分析缺陷的标准

      通过收集缺陷,对比测试用例和缺陷数据库,分析确证是漏测还是缺陷复现。漏测反映了测试用例的不完善,应立即补充相应测试用例,最终达到逐步完善软件质量。而已有相应测试用例,则反映实施测试或变更处理存在问题。

      四、相关问题

      1、测试用例的评审

      测试用例是软件测试的准则,但它并不是一经编制完成就成为准则。测试用例在设计编制过程中要组织同级互查。完成编制后应组织专家评审,需获得通过才可以使用。评审委员会可由项目负责人、测试、编程、分析设计等有关人员组成,也可邀请客户代表参加。

      2、测试用例的修改更新

      测试用例在形成文档后也还需要不断完善。主要来自三方面的缘故:第一、在测试过程中发现设计测试用例时考虑不周,需要完善;第二、在软件交付使用后反馈的软件缺陷,而缺陷又是因测试用例存在漏洞造成;第三、软件自身的新增功能以及软件版本的更新,测试用例也必须配套修改更新。

      一般小的修改完善可在原测试用例文档上修改,但文档要有更改记录。软件的版本升级更新,测试用例一般也应随之编制升级更新版本。

      3、测试用例的管理软件

      运用测试用例还需配备测试用例管理软件。它的主要功能有三个:第一、能将测试用例文档的关键内容,如编号、名称等等自动导入管理数据库,形成与测试用例文档完全对应的记录;第二、可供测试实施时及时输入测试情况;第三、最终实现自动生成测试结果文档,包含各测试度量值,测试覆盖表和测试通过或不通过的测试 用例清单列表。

      有了管理软件,测试人员无论是编写每日的测试工作日志、还是出软件测试报告,都会变得轻而易举。
  • 测试用例的编写方法

    2009-01-12 13:24:07

    对于每一个Tester来说都是不可避免的,平时很一部分的工作内容就是编写测试用例,如何写一个好的用例呢?如果你的
    用例只是用于ISO的审核,那没必要再这里探讨这个问题。好的Case,是Tester的劳动成果,它应该是充满智慧的,具有
    可复用性,启发性,能充分体现一个Tester的水平。很多人的Case虽然写的很不错,可惜只有他自己才能看懂其中的内
    容和体会Case的意思,为什么?因为它写的Case描述不清楚,只有他自己看了才明白,一个好的Case必须有良好的书
    写格式与习惯,能让所有看的人都能理解,也就是说,当你离开这个项目,其他人来接受你的工作时,只要看你的Case
    就能明白项目的目标与需求。如果做到这一点呢?     第一步,我想应该是Case格式的确立,拥有好的,清晰的格式,有
    利于帮助Tester来组织他的Case,会让你事半功倍,反之亦然,一个结构不合理的格式,会让你觉得蹩手蹩脚,影响你
    的发挥。如果选择一个良好的结构,要根据具体工作的情况,项目的结构,以及用例的目标(功能测试用例,性能测试用
    例以及其他)我认为不同的测试手段要使用不同的用例结构。确定好这些因素后,在来谈谈测试用例中涉及到的一些东
    西,理解Case所需要的东西,我认为这些东西是比不可少的,1:软件版本编号。2:测试用例编号,编号的格式可根据
    软件版本号+用例号来确定,这样不会应为Case的日积越累或软件版本的不停升级而混乱。3:用例的优先级,在一个时
    间紧凑的测试环境下,为了跟效率的完成测试用例,我们所能做的是完成那些优先级高的用例,至于优先级如何来确定,
    可以根据项目需求,或者用户那边的需求来确定,也可以根据实际经验对那些很容易产生缺陷的模块设置为高优先级。
    4:用例步骤。5:输入数据。 6:实际输出数据。7:期望输出数据。某个步骤下,输入了某条数据,你期望程序会输出
    什么数据。可以一来可以与实际输出的数据相比较。8:备注。为什么要备注,可能你在思考这个Case的时候有一个好的
    点子或者思路,可以写在备注里面。或者对这个用例还有一些必要的补充说明等。9:测试环境。10:用例编写人/日期。
    11:测试执行者/日期。可能根据不同的项目还需要一些补充,可以根据具体情况具体分析。   第二步。设计测试用例,通
    常情况下在你编写测试用例之前,你必须要有一个测试计划,这里我只讨论测试用例。嗯,开始设计之前还有一些准备工
    作,必须熟读软件需求说明,一定要清晰的了解每一条需求,明白软件的性能指标,综合考虑测试环境,人员配置,要根
    据自己的实际能力,测试工具使用状况写出符合自己测试团队的用例。用例的划分有很多种方法,根据测试的类型,比如
    功能性测试,你可以按照功能模块划分用例,划分科学的模块你可以组织这些用例直接进行集成测试,组合部分模块或者
    所有模块来测试。性能测试,可以根据性能指标来确定用例划分,对于用例环境的不同来划分用例等等。也可以根据测试
    工具在组织测试用例,比如那些Case可以在测试工具上完成,那些需要手动去完成,划分的方法很多,但是有一点必须
    保证,就是测试覆盖率,是否覆盖了所有的需求。写好一个用例,需要工作经验的积累,需要对项目需求的了解,我觉得
    Tester应该是公司里最了解软件需求与功能的人。测试的技术很多,可以在Case中体现出来,比如说边界值测试,溢出
    测试,等价类划分测试法,等等。按照这些来编写你的Case也可以提高你的技能。   第二步。审核你的Test Case,怎么
    样才能完美你的Case呢?最好的办法就是进行同行评审,也就是让你的同事来看你的Case,同时与开发部门负责人进行
    沟通,讨论你的Case。进行这两步后可能要对你的Case进行一些修改。但并不是这样一个好的Case就产生了,在执行
    测试用例的过程中,你可能还会发现很多问题,这也是一个Case的完善过程。对于从一个项目中成长起来的Tester,会
    随着对项目的不停理解与思考而随时修改自己的Case,我是这样理解的。

数据统计

  • 访问量: 8587
  • 日志数: 11
  • 图片数: 2
  • 文件数: 3
  • 建立时间: 2008-12-30
  • 更新时间: 2009-02-09

RSS订阅

Open Toolbar