第二部分 核心讲义
第1章 软件测试概论
1.1 概述
一、软件测试的发展
(1)早期的软件开发过程中,将测试等同于“调试”,目的是纠正软件中已经知道的故障,常常由开发人员自己完成这部分的工作。
(2)1957年,软件测试开始与调试区别开来,成为一种发现软件缺陷的活动,但测试仍然是后于开发的活动。
(3)20世纪80年代早期,软件测试定义发生改变,测试不仅仅是一个发现错误的过程,且包含软件质量评价的内容。软件开发人员和测试人员开始制定各类测试标准,极大地推动了测试行业的发展。
(4)20世纪90年代,测试工具开始盛行。
(5)软件测试研究取得了很大的突破,开始出现各种测试模型。
(6)测试技术发展很快,但是其发展速度仍落后于软件开发技术的发展,软件测试在今天仍然面对着巨大的挑战。
二、软件测试面临的挑战
(1)软件在国防现代化、社会信息化和国民经济信息化领域中的作用越来越重要,由此产生的测试任务也越来越繁重;
(2)软件规模越来越大,功能越来越复杂,如何进行充分而有效的测试成为难题;
(3)面向对象的开发技术越来越普及,但是面向对象的测试技术却才刚刚起步;
(4)对于分布式系统整体性能还不能进行很好的测试;
(5)对于实时系统来说,缺乏有效的测试手段;
(6)随着安全问题的日益突出,如何对信息系统的安全性进行有效的测试与评估,成为世界性的难题。
1.2 国内外现状
一、发达国家软件测试的体现
在软件比较发达的国家,特别是美国,软件测试已经发展成为一个独立的产业,主要体现在以下几个方面:
(1)软件测试在软件公司中占有重要的地位。
(2)软件测试理论研究蓬勃发展每年举办多种测试技术年会,发表大量研究论文,引领软件测试理论研究的国际潮流。
(3)软件测试市场繁荣美国有专业公司开发软件测试标准与测试工具,其出品的测试工具已占领国际市场。
二、我国软件测试的发展
我国正在迈入测试时代,主要体现在以下几个方面:
(1)我国著名的软件公司已经或正在建立独立的专职软件测试队伍,虽然测试人员规模以及所占比例还不及国外的大公司,但是在公司内部贯彻了独立测试的意识。
(2)国家人事部和信息产业部2003年关于职业资格认证第一次在我国有了“软件评测师”的称号,体现了国家对软件测试职业的高度重视与认可。
(3)在信息产业部关于计算机系统集成资质以及信息系统工程监理资质的认证中,软件测试能力已经被定为评价公司技术能力的一项重要指标。
(4)2001年信息产业部发布的部长5号令,实行了软件产品登记认证制度,规定:凡是在我国境内销售的产品必须到信息产业部备案登记,而且要经过登记测试。
(5)2001年起,国家质检总局和信息产业部每年通过测试对软件产品进行质量监督抽查。
(6)国家各部委,各行业正在通过测试规范行业软件的健康发展,通过测试淘汰不符合行业标准要求的软件,对行业信息化的健康发展起到了很好的促进作用。
(7)信息系统验收要通过第三方测试机构的严格测试来判定。
(8)“以测代评”正成为我国科技项目择优支持的一项重要举措,如:国家“863”计划对数据库管理系统等项目的经费支持,都通过第三方测试机构科学客观的测试结果来决定。
(9)软件测试正在成为部分软件学院的一门独立课程,对我国软件测试人才的培养起到了很好的作用。
(10)第三方测试机构得到了蓬勃的发展。最近两年,在全国各地,新成立的软件测试机构有10多家,测试服务体系已经基本确立。
1.3 软件测试与软件项目的关系
一、软件测试和软件项目的关系
软件测试是为软件项目服务的,在整个项目组中,要强调测试服务的概念,虽然软件测试的目的是为了发现软件中存在的错误,但是,其根本目的是为了提高软件质量,降低软件项目的风险。
二、软件质量风险的表现
1.内部风险
在即将销售的时候发现有重大的错误,从而延迟发布日期,失去市场机会。
2.外部风险
用户发现了不能容忍的错误,引起索赔、法律纠纷,以及用于客户支持的费用甚至失去客户的风险。
三、软件测试的局限性
软件测试只能证明软件存在错误,而不能证明软件没有错误。软件公司对软件项目的期望是在预计的时间、合理的预算下,提交一个可以交付的产品,测试的目的就是把软件的错误控制在一个可以进行产品交付/发布的程度上。
可以交付/发布的产品是指把错误控制在一个合理的范围之内,因为软件测试需要花费巨大成本。故也要求在项目计划时,要给测试留出足够的时间和经费,仓促的测试或者由于项目提交计划的压力而终止测试,只能对整个项目造成无法估量的损害。
1.4 软件测试的发展趋势
一、测试工作将进一步前移
软件测试不仅仅是单元测试、集成测试、系统测试和验收测试,对需求的精确性和完整性的测试技术、对系统设计的测试技术将成为新的研究热点。
二、软件架构师、开发工程师、QA人员、测试工程师将进行更好的融合
软件架构师、开发工程师、QA人员、测试工程师相互之间要成为伙伴关系,而不是相互对立的关系,因为其工作可以相互借鉴,相互促进,而且软件测试工程师应该尽早地介入整个工程,在软件定义阶段就要开发相应的测试方法,使得每个需求定义都可以测试。
三、测试职业将得到充分的尊重
测试工程师和开发工程师不仅是矛盾体,也是相互协调的统一体。在整个软件开发周期,二者提供的是至关重要的服务,人们将充分认识到测试的价值。
四、设置独立的软件测试部门。
软件测试部门将和开发部、质量保证部一样作为一个重要的独立部门存在。
五、测试外包服务将快速增长
同软件开发外包一样,软件测试外包将成为全球化的一种趋势,可以利用职业测试专家队伍与机构为自己的产品进行测试,可以节省测试费用。
1.5 第三方测试
一、概述
(1)此处,第三方测试是指独立于软件公司自身测试的测试。第三方是指在软件公司和软件用户之间的一方。
(2)第三方测试机构是一个中介的服务机构,通过自己专业化的测试手段为客户提供有价值的服务。但是第三方测试机构提供的服务不同于公司内部的测试。因为,第三方测试机构的测试除了发现软件问题之外,还有对软件进行科学、公正的评价的职能,这就要求第三方测试机构要保持公正、廉洁、客观、科学、独立的态度。
二、第三方测试机构存在的价值
第三方测试机构存在的价值主要是由软件公司、软件用户以及国家的公正诉求所决定的。
1.软件开发商
经过第三方测试机构的测试,不仅可通过专业化的测试手段发现软件错误,帮助开发商提升软件的品质,而且可以对软件有客观、科学的评价,有助于开发商认清自己产品的定位。
2.行业主管部门以及软件使用者
第三方测试机构独立公正的地位有助于对被测软件进行客观公正的评价,帮助用户选择合适、优秀的软件产品。
3.信息工程项目
验收前,经过第三方机构的严格测试,可以最大程度地避免信息行业的“豆腐渣”工程。
4.有利于国家软件产品的质量监督
可为国家软件产品的质量监督抽查提供独立公正的测试支持。