当前位置:文档之家› 测试理论知识

测试理论知识

测试的基本理论与方法(上)一、对软件测试的误解1、如果发布出去的软件有质量问题,那是软件测试人员的错。

2、软件测试技术要求不高,至少比编程容易多了3、软件测试随便找一个能力差的人就能做。

4、软件测试是测试人员的事,与开发人员无关。

5、设计-实现-测试,软件测试是开发后期的一个阶段二、如何理解软件测试软件测试是一种有效的提高软件质量的手段,但即使在投入上有所保证,测试也不能百分为百发现所有质量隐患。

况且软件质量并不仅仅是测试出来的。

很多人认为软件测试就是运行一下软件,看看结果对不对。

但实际上,如何在有限的投入下,提高软件测试的效率和产出是一件很见功底的事。

好的测试人员不仅要掌握各种测试技术,还要具备丰富的编程经验和对BUG的敏感。

测试的复杂之处,除了测试技术问题之外,还有测试管理问题。

测试不是可有可无,随心所欲的。

规范化的软件开发需要对软件测试早做计划,分配必要的时间,人力和财力等资源,并将其作为项目管理的一个部分加以控制和协调。

开发和测试是软件项目相辅相成的两个过程,人员间的交流,协作和配合是提高整体效率的重要因素。

软件产品开发完毕,再进行测试的观念是有悖于生命周期理论的。

软件产品质量问题越晚发现,修复的代价越大。

一些常识和经验之谈测试能提高软件的质量,但是提高质量不能依赖测试。

测试只能证明缺陷存在,不能证明缺陷不存在。

“彻底地测试”难以成为现实,要考虑时间、费用等限制,不允许无休止地测试。

我们应当祈祷:软件的缺陷在产品被淘汰之前一直没有机会发作。

测试的主要困难是不知道如何进行有效地测试,也不知道什么时候可以放心地结束测试。

每个开发人员应当测试自己的程序(份内之事),但是不能作为该程序已经通过测试的依据(所以项目需要独立测试人员)。

80-20原则:80%的缺陷聚集在20%的模块中,经常出错的模块改错后还会经常出错测试应当循序渐进,不要企图一次性干完,注意“欲速则不达”。

三、软件测试的定义软件测试是为了发现错误而执行程序的过程软件测试是根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例(即输入数据及其预期的输出结果),并利用这些测试用例去运行程序,以发现程序错误的过程。

四、软件测试的对象软件测试不等于程序测试。

软件测试贯穿于软件定义和开发的整个期间。

需求分析,概要设计,详细设计,以及程序编码等各个阶段所得到的文档,包括需求规格说明,概要设计规格说明,详细设计规格说明以及源程序,都是软件测试的对象。

软件生存各个阶段间的确认和验证软件配置:包括软件需求规格说明、软件设计规格说明、源代码等;测试配置:包括测试计划、测试用例、测试驱动程序等。

实际上,在整个软件工程过程中,测试配置只是软件配置的一个子集。

测试工具:为提高软件测试效率,可使用测试工具支持测试工具。

例如:测试数据自动生成程序、测试结果分析程序等。

五、测试的目的测试是程序的执行过程,目的在于发现错误;一个好的测试用例在于发现至今未发现的错误;一个成功的测试是发现了至今的错误的测试。

六、测试的种类名称说明黑盒测试基于软件需求,而不是基于软件内部设计和程序实现的测试方式。

白盒测试基于软件内部设计和程序实现的测试方式。

单元测试主要测试软件模块的源代码。

一般由开发人员而非独立测试人员来执行,因为测试者需要懂得该单元的设计与程序实现,测试者可能需要编写额外的测试驱动程序。

集成测试将一些“构件”集成一起时,测试它们能否正常运行。

这里“构件”可以是程序模块、客户机-服务器程序等等。

功能测试测试软件的功能是否符合功能性需求,通常采用黑盒测试方式。

一般由独立测试人员执行。

系统测试测试软件系统是否符合所有需求,包括功能性需求与非功能性需求。

一般由独立测试人员执行,通常采用黑盒测试方式。

回归测试指错误被修正后或软件功能、环境发生变化后进行的重新测试。

回归测试的困难在于不好确定哪些内容应当被重新测试。

验收测试由客户或最终用户执行,测试软件系统是否符合需求规格说明书。

名称说明负载测试测试软件系统的最大负载,超出此负载软件可能会失常。

压力测试概念上与负载测试相似,叫法不同。

性能测试测试软件在各种状况下的性能,如在正常或最大负载下的状况。

易用性测试测试软件是否易用,主观性比较强。

一般要根据很多用户的测试反馈信息,才能评价易用性。

安装与反安装测试测试软件在“全部、部分、升级”等状况下的安装/反安装过程。

恢复测试测试该系统从故障中恢复过来的能力。

安全性测试测试该系统防止非法侵入的能力。

兼容性测试测试该系统与其它软件硬件兼容的能力。

比较测试通过与同类产品比较,考察该系统的优点、缺点。

Alpha 测试一种先期的用户测试,此时系统刚刚开发完成。

Beta测试一种后期的用户测试,此时系统已经通过内部测试,大部分错误已经改正,即将正式发行。

七、测试的分类与比较测试方式白盒测试:关心软件内部设计和程序实现,主要测试依据是设计文档黑盒测试:不关心软件内部,只关心输入输出,主要测试依据是需求文档测试阶段单元测试、集成测试、系统测试、验收测试。

是“从小到大”、“由内至外”、“循序渐进”的测试过程,体现了“分而治之”的思想。

单元测试的粒度最小,一般由开发小组采用白盒方式来测试,主要测试单元是否符合“设计”。

集成测试界于单元测试和系统测试之间,起到“桥梁作用”,一般由开发小组采用白盒加黑盒的方式来测试,既要验证“设计”又要验证“需求”。

系统测试的粒度最大,一般由独立测试小组采用黑盒方式来测试,主要测试系统是否符合“需求规格说明书”。

验收测试与系统测试非常相似,主要区别是测试人员不同,验收测试由用户执行。

开发与测试的V 型关系如果软件开发过程采用严格的瀑布模型,那么开发与测试有“V”型的对应关系。

测试内容接口与路径测试。

功能测试、健壮性测试、性能测试、用户界面测试、安全性测试、压力测试、可靠性测试、安装/反安装测试…测试阶段主要依据测试人员、测试方式主要测试内容单元测试系统设计文档由开发小组执行白盒测试接口测试、路径测试集成测试系统设计文档需求文档由开发小组执行白盒测试和黑盒测试接口测试、路径测试、功能测试、性能测试系统测试需求文档由独立测试小组执行黑盒测试功能测试、健壮性测试、性能测试、用户界面测试、安全性测试、压力测试、可靠性测试、安装/反安装测试验收测试需求文档由用户执行黑盒测试测试人员的组织了解开发人员的测试心理测试的目的是找出尽可能多的缺陷。

所以测试是“破坏性”的,而开发却是“建设性”的。

开发人员总是喜欢欣赏程序的成功之处,而不愿看到失败之处。

让开发者去做“蓄意破坏”的测试,就象杀自己的孩子一样难以接受。

开发者对自己的程序印象深刻,并总以为是正确的(自信是应该的)。

倘若在设计时就存在理解错误,或因不良的编程习惯而流下了隐患,他本人很难发现这类错误.开发者对自己的程序的功能、接口十分熟悉,他自己几乎不可能因为使用不当而引发错误,这与大众用户的情况不太相似,所以测试自己的程序不具备典型性。

结论:开发人员应当测试自己的程序,这是他分内的工作。

但是开发人员在测试自己的程序时,很难做到客观、公正,所以自我测试不具有说服力。

如何组织测试人员:应当视企业的人力资源而定条件特别好的公司,可以为每一个开发人员分配一名独立的测试人员。

这样的测试人员职业化程度很高,可以完成单元测试、集成测试和系统测试工作,能够实现开发与测试同步进行。

条件比较好的公司,可以设置一个独立的测试小组,该测试小组轮流参加各个项目的系统测试。

而单元测试、集成测试工作由项目的开发小组承担。

条件一般的公司,养不起独立的测试小组。

单元测试、集成测试工作由项目开发小组承担。

当项目进展到系统测试阶段,可以从项目外抽调一些人员,加上开发人员,临时组织系统测试小组。

条件比较差的公司,也许只有一个项目和为数不多的一些开发人员。

那么就让开发人员一直兼任测试人员的角色,相互测试对方的程序。

如果人员实在太少了,只好让开发者测试自己的程序,有测试总比没有测试好吧!避免开发人员与测试人员产生矛盾开发人员不能很好地测试自己的程序是因为做不到“无情”。

但如果测试人员真的做到了“无情”却会引起开发人员的愤怒,遭人白眼。

由于开发与测试存在“对立”关系,开发人员与测试人员很容易产生矛盾,这对项目而言是一种伤害。

开发人员的注意事项:(1)不要敌视测试人员。

要理解测试的目的就是发现缺陷,是测试人员的工作职责。

不要以为测试人员吃饱了没事干,存心找茬。

(2)不要轻视测试人员,别说人家技术水平差,不配搞开发只好搞测试。

测试人员的注意事项:(1)发现缺陷时不要嘲笑开发人员,别说他的程序真臭、到处是Bug。

(2)在开发人员压力太大时或心情不好时不要火上浇油,发现缺陷时别大声嚷嚷。

尽量不要相互讽刺对方,例如:A对B说:你唯一的特点就是无能。

B对A说:你唯一的特点就是粗鲁。

还要注意的是,如果测试人员与开发人员的关系非常好,可能会导致在测试的时候“手下留情”,这对项目也是一种伤害。

相关主题