-
1 电子教材
-
2 PPT
软件测试涉及技术和管理两个层面的工作,看似头绪纷繁,实际只要了解测试的主线,就能清楚了解每个阶段不同角色的职责。第一章主要介绍了软件测试几个基础概念及测试行业现状和发展前景,本章将主要从宏观上来介绍软件测试的分类、过程模型等内容。通过本章的学习可以了解软件测试中应遵循的一些基本原则、软件测试如何划分和具体划分哪几类,及通过多年的实践活动总结出来的测试过程模型:V模型、W模型、H模型、X模型,这些典型模型如何与开发活动有机结合等知识。
软件测试是对软件建立信心的一个过程。测试是评估软件或系统品质或能力的一种积极的行为,是对软件质量的一种度量。软件信心与软件测试的关系可用图2-1所示来描述。对软件进行的测试越充分。人们对这个软件的信心越强。可以想象,当将软件提交给用户使用时,告诉用户软件没有被测试,用户的表情将会是什么样子。

图2-1软件信心建立在软件对需求程度的度量上
从软件测试的目的出发,可以把软件测试分为两类。
(l)一类是为了验证程序能正常工作的测试。
(2)另外一类是为了验证程序不能正常工作的测试。
一类测试是正向进行的。则另一类测试是反向进行的,测试人员应该从两面“夹击”,如图2-2所示。验证程序能正常工作需要有一定的依据,软件需求文档就是一种好的依据。但是,如果需求文档本身就是错误的呢?因此,不能只依靠需求文档来验证程序是否能正常工作,还需要有经验的测试人员的判断和对软件的理解。
要验证程序在所有情况下都能正常工作不是一件容易的事情,甚至可以说这是不可能完成的任务。因为,现在的软件程序越来越复杂,程序的状态空间变得越来越广,在有限的测试时间和测试资源下,要想证明程序在所有情况下都能正常工作是不可能的。
相比之下,验证程序不能正常工作会相对容易一些,只要能找到错误,就能证明软件是不正确的。但是,要想找到所有的错误也不是一件容易的事,因为缺陷会随着程序的修改变得越来越少,变得越来越隐蔽,越到后面越难发现错误,如图2-3所示。

图2-2 软件测试的两面性

图2-3 缺陷发现率
目前,大部分软件测试组织均采用上述两种测试方式。主要体现在以下几个方面。
1)用例的设计分正方向和反方向的测试,及主场景用例和扩展场景用例的测试。
2)将严格的测试用例执行过程及灵活的探索性测试执行过程相结合。
3)软件测试的中前期主要应集中精力发现软件的错误。中后期主要应集中精力于验证软件的正确性。
4)单元测试主要关注程序做了正确的事情,集成测试和系统测试主要关注程序的错误行为。
5)自动化测试主要专注于验证程序的正确行为,手工测试主要专注于发现软件的错误行为。
我国软件业主要集中在最终客户软件项目的开发上,通用软件商品的开发比较少,所以我国的软件开发水平和软件业发达国家(美国、印度、爱尔兰等)相比,有一定的距离,主要体现在软件测试和质量保证的水平。
随着我国加入WTO之后,软件测试越来越受到人们的注意。人们认识到,要提高软件质量,软件测试是极其重要的一个环节。但是,相对于软件开发而言,软件测试还不为众人所了解。很多软件开发人员,包括多数软件企业的高层管理人员,由于缺乏软件测试的知识和实践经验,对软件测试的认识还有很多误区,这对软件测试工作极为不利,必须加以澄清,才可能提高软件产品的质量。
误区一:软件测试技术要求不高,至少比编程容易多了。
很多人认为软件测试就是运行一下软件,然后看看结果对不对。实际上,软件测试不仅仅只是运行或操作软件,还要涉及测试环境的建立、测试用例的设计等技术问题。当采用白盒测试方法时,需要良好的编程基础;在进行自动化测试时,需要写测试脚本,也需要良好的编程基础。如何在有限的资金投入下,提高软件测试的效率和保证产品的高质量是一件较困难的事情。所以,一位优秀的软件测试人员不仅要掌握各种测试技术,还要具备丰富的编程经验和行业知识,从一定意义上说,对测试人员的要求比编程人员的要求还要高。
误区二:有时间就多测试一些,时间紧就少测试一些。
软件测试并不是可有可无的,测多少、怎样测也不是随心所欲的。规范化的软件开发过程需要对软件测试早作计划,分配必要的时间、人力和财力等资源,并将其作为项目管理的一个重要部分,进行跟踪、控制和协调。
误区三:软件测试是测试人员的事,与开发人员无关。
为了减小相互的影响,一般要求开发和测试相对独立,但这只是分工上的不同。编程和测试是软件项目相辅相成的两个过程,人员之间的交流、协作和配合是提高整体开发效率的重要因素。而且在实际操作中也会有一些测试,比如单元测试,会由测试人员提供测试用例,由开发人员运行,或全部由编程人员完成。
误区四:如果发布出去的软件有质量问题,那是软件测试人员的错。
软件测试是一种有效提高软件质量的手段,但即使在投入上有所保证,测试也并不能百分之百地发现所有质量隐患。况且,软件的高质量不是靠测试测出来的,而是软件开发过程中每一个环节都要有质量意识,作好检查、审查等工作,才能保证质量。任何一个环节出问题,都有可能带来质量的隐患。
误区五:软件测试是没有前途的工作,只有程序员才是软件高手。
随着市场对软件质量的不断提高,软件测试将变得越来越重要,相应的软件测试人员的地位和待遇将会逐渐提高。在微软等软件过程比较规范的大公司,软件测试人员的数量和待遇与程序员没有多大差别,优秀测试人员的待遇甚至比程序员还要高。软件测试将会成为一个具有很大发展前景的行业,软件测试大有前途,市场需要更多具有丰富测试技术和管理经验的测试人员,他们同样是软件专家。
误区六:根据软件开发爆布模型,软件测试是在开发后期的一个阶段进行。
不少人根据软件开发瀑布模型,容易得出这样种结论:“程序代码写完之后再进行测试”,这是错误的,这种错误的观念会给测试工作带来很多问题。生命周期中的“测试阶段”表明在该阶段主要工作是测试,即到了“测试阶段’、测试的主要任务是执行测试、运行测试脚本、测试结果分析和递交测试报告,而测试的大量准备工作,诸如测试计划、测试用例设计以及测试脚本编写等,实际是在还没有开始写程序之前就开始了,可以说项目什么时候开始。测试工作也就什么时候开始。如果到“测试阶段”才开始启动测试工作,那为时己晚,没有计划,没有测试用例,测试也就很容易是“走过场”。
即使程序测试,也不是要等到软件程序全部完成后才开始运行。针对各个程序单元、模块,可以进行单元测试;把程序单元或模块进行集成时,需要进行相应的集成测试:在进行集成测试和系统测试之前,就要准备测试环境。所以,编程与测试几乎是同步进行的。

