软件工程论文
课程名称:软件工程 论文题目:软件测试概述及方法 院 系: 班 级: 姓 名: 学 号:
昆
明
学
院
1
软件测试概述及方法
摘要
从软件产业的发展初期到现在的大型软件开发过程,软件测试已成为其中一个不可分割的部分。随着软件规模的日益增大,软件测试问题也日益突出,现代社会对软件的依赖也越来越强,可信度高的软件测试有着广泛的需求,基于缺陷模式的软件测试技术作为高可信软件的重要保证,可以大大降低软件的缺陷密度,提高软件的可信性。本文从测试的基本概念入手,深入剖析软件测试相关理论。软件测试在发展的几十年里面,逐渐形成了一些被广泛接受和应用的测试模型。选取了几个有代表性的测试模型进行阐述,与开发反复迭代进行,并指出软件测试不仅仅指测试的执行过程本身,还应该包括测试准备活动。随着软件测试研究的进展,软件测试提出了一些比较前沿的理论,如测试驱动开发理论提出先有测试,再写代码,以不断的测试推动代码的开发,既简化了代码,又保证了软件质量。自动化测试要求以各种自动化的测试工具取代测试人员进行一些重复的、机械的工作,它可以有效地提高测试效率,提高软件的被信任度。探索性测试认为不必非要有设计好的测试用例,就可以进行一些灵感突发式的测试,探索性测试可以应用在一些特定场合,与传统的测试相辅相成。面向对象的软件测试针对面向对象的几个新特点,提出了不同的测试方法。基于模型的测试是利用模型来生成相应的测试用例,然后根据实际结果和原先预想的结果的差异来测试系统。 关键字:软件测试、白盒测试、黑盒测试、类测试
2
第一章 软件测试的发展史
软件测试的发展历史:20世纪60年代(软件工程建立前),为表明程序正确而进行测试。1972年在北卡罗来纳大学举行了首届软件测试正式会议。1975年John Good Enough和Susan Gerhart在IEEE上发表了《测试数据选择的原理》的文章,软件测试被确定为一种研究方向。1979年,Glenford Myers的《软件测试艺术》,对测试做了定义:测试是为发现错误而执行的一个程序或者系统的过程。20世纪80年代早期,“质量”的号角开始吹响。软件测试定义发生了改变,测试不单纯是一个发现错误的过程,而且包含软件质量评价的内容。制定了各类标准。1983年,Bill Hetzel在《软件测试完全指南》中指出:测试是以评价一个程序或者系统属性为目标的任何一种活动,测试是对软件质量的度量。20世纪90年代,测试工具盛行起来。1996年提出的测试能力成熟度TCMM(Testing Capability Maturity Model)、测试支持度TSM(Testability Support Model)、测试成熟度TMM(Testing Maturity Model)。到了2002年,Rick和Stefan在《系统的软件测试》一书中对软件测试做了进一步定义:测试是为了度量和提高被测软件的质量,对测试软件进行工程设计、实施和维护的整个生命过程。
第二章 软件测试的实质与背景
软件是计算机系统和硬件相互依存的另一部分,它包括程序、相关数据及其说明文档。
软件与工业产品相比具有的特性:软件是一种逻辑实体,具有抽象性;软件没有明显的制作过程;软件在实用过程中没有磨损,老化的问题;软件对硬件和环境有着不同程度的依赖性;软件的开发至今尚未完全摆脱手工式的开发方式生产效率低;软件是复杂的,以后会更加复杂;软件的成本相当昂贵;软件工作的牵涉到很多社会因素。
3
软件危机是计算机软件在它的开发和维护过程中所遇到的一系列严重问题,概括地说,主要包含主要包含两个方面:如何开发软件,怎么满足日益发展的需求;如何维护数量不断膨胀的已有软件。
软件危机的主要表现:对软件开发成本和进度的估计常常不准确;用户对已完成的软件系统不满意的现象经常发生;软件产品的质量靠不住;软件常常是不能维护;软件通常没有适当的文档资料;软件成本在计算机系统总成本中所占比例在上升;软件开发生产率提高的速度跟不上计算机应用迅速普及深入的趋势。软件危机的内在原因:软件生产本身存在着复杂性;软件开发使用的方法和技术。
符合下面任一个就是软件错误:软件未达到产品说明书中已经标明的功能;软件出现了产品说明书中指明不会出现的错误;软件功能超出了产品说明书指明的范围;软件未达到产品说明书虽未指出但应达到的目标;软件测试员认为软件难以理解不易使用或者用户认为软件使用效果不好
软件测试使用人工和自动手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求,或弄清预期结果与实际结果之间的差别。
臭名昭著的软件测试案例:
1、迪士尼的狮子王 (1994~1995)软件在少数系统中能正常工作, 但在大众使用的常见系统中不行。后来证实, 迪士尼公司没有对市场上投入实用的各种pc机型进行正确的测试。
2、英特尔奔腾浮点除法软件缺陷(1994)英特尔为自己处理软件缺陷拿出4亿美元支付更换坏芯片的费用。导致付出如此昂贵的代价, 其主要原因是发现了软件缺陷没有正确的处理。
3、美国航天局火星极地登陆(1999)该项目使用前有经过测试, 两个测试小组双方独立工作都很好, 但从未走在一起。
4、爱国者导弹防御系统 (1991)一枚导弹在多哈击毙28名美国士兵, 症结在于一个软件缺陷:一个很小的系统时钟错误累积起来就可能拖延14小时, 造成跟踪系统失去准确度。在多哈袭击战中系统被拖延100小时。
5、千年虫 (大约1974)估计世界各地更换或升级该系统程序解决原有2000年错误的费用已经超过数亿美元。
4
第三章 软件测试的概述
3.1软件测试的定义
软件测试使用人工或者自动手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别。它是帮助识别开发完成(中间或最终的版本)的计算机软件(整体或部分)的正确度(correctness) 完全度(completeness)和质量(quality)的软件过程;是SQA(software quality assurance)的重要子域。
(1)测试并不仅仅是为了找出错误.通过分析错误产生的原因和错误的发生趋势,可以帮助项目管理者发现当前软件开发过程中的缺陷,以便及时改进; (2)这种分析也能帮助测试人员设计出有针对性的测试方法,改善测试的效率和有效性;
(3)没有发现错误的测试也是有价值的,完整的测试是评定软件质量的一种方法。
3.2软件测试的描述
测试是软件开发过程的重要组成部分, 是用来确认一个程序的品质或性能是否符合开发之前所提出的一些要求。软件测试的目的, 第一是确认软件的质量, 其一方面是确认软件做了你所期望的事情(Do the right thing), 另一方面是确认软件以正确的方式来做了这个事件(Do it right);第二是提供信息, 比如提供给开发人员或程序经理的反馈信息, 为风险评估所准备的信息;第三软件测试不仅是在测试软件产品的本身, 而且还包括软件开发的过程。如果一个软件产品开发完成之后发现了很多问题, 这说明此软件开发过程很可能是有缺陷的。
3.3软件测试的目的
如果测试的目的是为了尽可能多地找出错误,那么测试就应该直接针对软件比较复杂的部分或是以前出错比较多的位置。如果测试目的是为了给最终用户提供具有一定可信度的质量评价,那么测试就应该直接针对在实际应用中会经常用
5