朱少民-软件测试和质量专栏

实践和理论之完美结合: 质量文化、SQA、测试艺术、测试方法/技术、自动化测试、过程管理、CMM/CMMI、RUP/XP、Web2.0 (声明:在此发表的所有文章仅代表个人倾向)

朱少民ID:KerryZhu
[修改头像]
567789次访问,排名62好友12人,关注者21
从事软件开发、测试、QA和过程改进等工作近二十年, 目前领导一支几百人的软件测试和QA队伍,先后出版专著《全程软件测试》和主编《软件测试方法和技术》、《软件质量保证和管理》、《软件过程管理》等教材,高级职称、硕士生导师,先后获得多项省、部科技进步奖。
KerryZhu的文章
原创 119 篇
翻译 6 篇
转载 63 篇
评论 724 篇
KerryZhu的公告
....产品的质量依赖于过程的质量,而过程的质量依赖于企业文化和管理
Locations of visitors to this page
最近评论
zhouzk:对于初学者来是是个不错的东东
qingtanlang:“因为现在大家都成了网络的主人,谁都可以发表、编辑、评论某个信息与观点”,没准还能产生新的职业,“网托”——因为不是谁都有那么多时间发表、编辑、评论某个信息与观点,如果厂商力量技术够强大,是不也能把那些负面的消息屏蔽掉呢。可能这是我个人比较悲观的想法。还是很感谢看到这样的文章。
liaoya:csdn真是有不少发人深省的文章,虽然这只是作者的转载,但他使我们能更方便快捷的看到这则信息,网络传播就是人传人,网传网,不断拷贝,粘贴的过程,今天您能把好东西记录下来并分享给其他人那就是作者对大家最好的报答和礼物
huangyi_521:第一张比较适合作为理论、思想提出来,更能体现出对测试过程和工作的总结,以及在测试工作中作为思想指导等。
第二张比较能够更好地与实际工作相呼应,但第二张不容易理解,需要结合实际测试过程。
但无论是第一张还是第二张,他们的模块核心是一样,只是模块间的接口有所变化。
作为理论学习和测试思想提升的我来说,更喜欢第一张。
个人理解,不知道是不是扭曲或误解了朱老师……
julian_zhu_2002:收益匪浅
软件项目交易
订阅我的博客
XML聚合  FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
订阅到BlogLines
订阅到Yahoo
订阅到GouGou
订阅到飞鸽
订阅到Rojo
订阅到newsgator
订阅到netvibes
文章分类
收藏
相册
发现的诱惑
同学之情
测试
CSDN软件测试圈
卖烧烤的鱼博客
天行健,君子当自强不息
开源测试工具
探索中国软件测试之道
测试专业论坛
测试最佳实践
祖洪自动化维客系统
自动化测试资源(英文)
软件测试之家
软件开发和管理
CSDN-质量圈(RSS)
寸锐斋-
有效工作和管理
计算机电子书
同学友人
江湖一萍- 古徽州婺源人
聂造的客厅
文化名人的Blog
余秋雨
易中天
综合
家乡美-中国第一状元县
MIT Open Courses
家乡美-徽州文化-荫余堂
徽州文化-建筑、版画、雕刻...
存档

转载 微软的软件测试方法

新一篇: 软件外包带来的利弊

 微软在软件测试方面有很多值得一提的经验,在此我想以我个人的体会和思考,同大家一同进行一些探讨。这里有一点须要特别说明,尽管微软的方法已被微软的实践多次证明是成功的,非常有效的,但这并不意味着这些方法在中国的软件企业中有广泛的可行性。一种方法是否可行还受到很多其他因素的影响,比如企业类型(微软是生产平台软件和通用软件产品的企业),企业管理体制,企业文化等等。所以我的目的只是给大家一些思路和借鉴。

 两类经典的软件测试方法

 在具体介绍微软的软件测试方法之前,我想首先从概念,或理念的层面上来理解究竟甚么是软件测试,目的是从中导出微软测试方法的理论根源。

传统上认为软件测试的方法从总体上分为两类。第一类测试方法是试图验证软件是“工作的”,所谓“工作的”就是指软件的功能是按照预先的设计执行的;而第二类测试方法则是设法证明软件是“不工作的”。

提出第一类方法的代表人物是软件测试领域的先驱Dr. Bill Hetzel(代表论著《The Complete Guide to Software Testing》),他曾于19726月在美国的北卡罗来纳大学组织了历史上第一次正式的关于软件测试的论坛。他首先在1973年给软件测试一个这样的定义:“就是建立一种信心,认为程序能够按预期的设想运行。Establish confidence that a program does what it is supposed to do. ”后来在1983年他又将定义修订为:“评价一个程序和系统的特性或能力,并确定它是否达到预期的结果。软件测试就是以此为目的的任何行为。 Any activities aimed at evaluating an attribute or capability of a program or system. ”在他的定义中的“设想”和“预期的结果”其实就是我们现在所说的用户需求或功能设计。他还把软件的质量定义为“符合要求”。

第一类测试可以简单抽象地描述为这样的过程:在设计规定的环境下运行软件的功能,将其结果与用户需求或设计结果相比较,如果相符则测试通过,如果不相符则视为Bug。这一过程的终极目标是将软件的所有功能在所有设计规定的环境全部运行,并通过。

在软件行业中一般把第一类方法奉为主流和行业标准。1990年的IEEE/ANSI标准将软件测试进行了这样的定义:“就是在既定的状况条件下,运行一个系统或组建,观察记录结果,并对其某些方面进行评价的过程。The process of operating a system or component under specified conditions, observing or recording the results, and making an evaluation of some aspect of the system or component (IEEE/ANSI, 1990 [Std 610.12-1990]”这里所谓“既定的状况”也可理解为需求或设计。

尽管如此,这一方法还是受到很多业界权威的质疑和挑战。代表人物是Glenford J. Myers(代表论著《The Art of Software Testing》)。他认为测试不应该着眼于验证软件是工作的,相反应该首先认定软件是有错误的,然后去发现尽可能多的错误。他还从人的心理学的角度论证,将 “验证软件是工作的”作为测试的目的,非常不利于测试人员发现软件的错误。于是他于1979年提出了他对软件测试的定义:“就是以发现错误为目的而运行程序的过程。The process of executing a program or system with the intent of finding errors. 这就是软件测试的第二类方法,简单地说就是验证软件是“不工作的”,或者说是有错误的。他甚至极端地认为,一个成功的测试必须是发现Bug的测试,不然就没有价值。这就如同一个病人(假定此人确有病),到医院做一项医疗检查,结果各项指标都正常,那说明该项医疗检查对于诊断该病人的病情是没有价值的,是失败的。我并不完全同意这一看法。

第二类软件测试方法在业界也很流行,受到很多学术界专家的支持。大家熟悉的Ron Patton在《软件测试》( 中文版由机械工业出版社出版,具说此书是目前国内测试新手入门的经典教材)一书的第10页,有一个明确而简洁的定义:“软件测试员的目标是找到软件缺陷,尽可能早一些,并确保其得以修复。”有些软件企业以Bug数量来作为考核测试人员业绩的一项指标,其实就是接受了这样的方法。

 两类方法的优劣对比

 虽然软件测试总的目的是为了软件产品的质量,但很明显这两类测试方法在具体目标、或指导思想上截然相反。由此也决定了它们在思路、过程和测重点上有很大的差别,并各有利弊的。

第一类测试方法以需求和设计为本,因此有利于界定测试工作的范畴,更便于部署测试的侧重点,加强针对性。这一点对于大型软件的测试,尤其是在有限的时间和人力资源情况下显得格外重要。而第二类测试方法与需求和设计没有必然的关联,如果计划管理不当,测试活动很容易丢失重点,走入歧途。

第一类测试方法可以与软件的架构和软件开发的计划相配合,使软件测试活动逐层次的展开,从而使软件的功能和质量有计划地逐步完善和提高(关于测试的层次问题,我会在今后的讨论中专门介绍)。第二类测试方法不具备这种过程的渐进性。

第一类测试方法的缺点是缺乏灵活性,不利于测试人员主观能动性的发挥,正像Myers先生所说,不容易找到软件的错误(Bug)。而这方面正是第二类测试方法的长处。

这其实仅仅是一个基础,一个很原始的基础。软件测试在微软软件产品开发中的作用、地位远不是这些原始的方法所能达到的,也不是传统软件测试概念所函盖的。微软在软件测试方面有很多特有的做法,和概念上的突破,比如“软件测试的信息服务功能”、“以用户为中心的宏观质量体系”、“分级测试”、“项目的质量管理系统”、“Bug三方会审”、“测试自动化”和“软件测试的软硬件部门、团队、人和基础设施”等等。这些我会在以后的讨论中分专题进行介绍

发表于 @ 2006年07月08日 12:24:00|评论(loading...)|编辑

旧一篇: 软件测试架构师——众里寻她千百度

评论

#崔启亮 发表于2006-07-09 12:27:00  IP: 222.130.146.*
这篇文章过于理论化,希望作者尽快把后面的精华文章写出来。微软软件测试的方法,对于国内软件测试同行都是可以学习和借鉴的。
#圣普罗西 发表于2006-07-09 13:49:00  IP: 60.166.65.*
传统上认为软件测试的方法从总体上分为两类。第一类测试方法是试图验证软件是“工作的”,所谓“工作的”就是指软件的功能是按照预先的设计执行的;而第二类测试方法则是设法证明软件是“不工作的”。
个人认为这种分类是不恰当的。把它们定义为软件测试的二个不同“境界”或过程、阶段更为好一些。实际上任何一个软件测试过程都会包括这二部分。软件测试的第一步首先就是验证它的正确性。在测试完成第一阶段的以后,验证软件是“工作的”。我们需要做的是第二阶段的测试,即测试它的不正确的地方,相信软件里面肯定存在bug, 在某些特定的条件软件肯定是“不工作的”。
这二个阶段是任何一个软件测试过程不可缺少的。缺少任何一个,软件测试都是不完整的。
#Kerry 发表于2006-07-10 08:45:00  IP: 61.191.27.*
这是微软的测试方法论,没提到具体的技术。测试,从最初的含义就是“发现Bug”, 从这个意义上说,就是找出其“不工作”的地方,是和开发“实现功能特性”的思维相反;从另一方面看,测试是软件质量保证的重要手段之一,通过测试,人们希望所有的功能特性都和实现设计的保持一致,并能正常工作,从这个意义看,是验证的正确性。所以,可以将测试分为两个阶段,前阶段集中“发现Bug”,后阶段集中验证正确性。我在另一篇“测试执行中非常有效的策略”也谈到同样的问题。欢迎有不同的思路来讨论测试策略。
#photonxp 发表于2007-03-21 21:53:51  IP: 221.201.14.*
对了,记得在哪儿看过微软内部有一个强大的bug管理系统。
发表评论  


当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
Csdn Blog version 3.1a
Copyright © KerryZhu