软件测试第2章课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《软件测试第2章课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件 测试 课件
- 资源描述:
-
1、软件测试技术基础学时:60学时 第2章 软件测试原理 熟练掌握:软件测试原理,软件测试的分熟练掌握:软件测试原理,软件测试的分类,软件测试过程,软件测试过程模型。类,软件测试过程,软件测试过程模型。掌握:软件测试原理,良好的测试态度是掌握:软件测试原理,良好的测试态度是怎样的,对待缺陷的基本原则,测试结果怎样的,对待缺陷的基本原则,测试结果的处理原则,软件测试的分类,软件测试的处理原则,软件测试的分类,软件测试的过程模型。的过程模型。了解:软件测试过程了解:软件测试过程2.1 软件测试原则 2.1.1 应尽早和不断地测试 由于软件的复杂性和抽象性,以及项目涉及人员之间沟通的不畅等原因,导致在软
2、件生命周期各阶段都可能产生缺陷,因此,不应该将软件测试看成是程序写完之后才开始的一项工作。问题发现得越早,解决问题的代价越小,反之,缺陷发现得越晚,缺陷修复的成本越高,若缺陷遗留到用户手中,则将对公司、对用户都有可能带来极其严重的后果,例如加拿大的Therac 25放射治疗仪事件(由于软件系统总体安全设计出问题,导致了多起医疗事故,)、熊猫烧香病毒等,类似的案例不胜枚举。不断的测试应表现为一个反复的、递增的过程。在最初的阶段,我们可能会采用一些简单的测试方法和模糊的测试过程,测试的效果也许会很差。但经过每次迭代的修正之后,部分测试将进入回归测试形式,下一次测试的开始将覆盖前几次测试的范围,从而
3、逐步加大测试的覆盖面。从另一方面,我们在多次迭代过程中,将逐渐加强对测试过程的认识,强化集成测试和系统测试,规范单元测试,最终可能会重新修正整个测试过程。2.1.2 不可能穷尽测试 想要穷尽测试,就必须在有限的时间和资源(包括人力、物力和资金资源)条件下,找到软件中所有潜在的缺陷。追求软件的完美,是不可能做到的。从总体来看,软件实现的途径太多。从软件的基本要素输入、输出、数据和计算来分析,能进一步证明穷尽测试是不可能的,原因如下。(1)从输入来看,每个输入条件的数据量太大,不同输入条件之间的组合情况太多,要得到健壮的软件,还需要更多考虑无效的输入,而无效的输入情况相比有效输入而言,其数据量和组
4、合情况则更加纷繁复杂,无法穷尽。(2)从输出来看,输出结果太多。输出地种类可能相比输入要少很多,大部分情况下,我们可以分析出所有可能的输出。但针对每种具体输入都必须有一个明确的系统输出,既然输入无法穷尽,则对应的输出也是无法穷尽的。(3)从数据来看,数据的处理方式可能也不过是常规的方法,如添加数据、删除数据等。然而,由于要处理的数据量太大,每种数据类型所包含的有效和无效数据往往是无穷多的,针对每组数据来测试各种操作无疑也是异想天开。(4)从计算来看,由于算法的复杂度越来越高,结合业务的复杂性,导致路径组合近似天文数字,遍历每条路径的穷尽测试,即使对于一个非常熟练的测试员而言,也是望尘莫及的。2
5、.1.3 良好的测试态度良好的测试态度测试应由独立的第三方机构来完成。但国内的测试环境并不成熟,因此黑盒测试多由测试人员来测,而白盒测试则由开发人员通过交叉测试来完成。让开发人员测试自己的代码是一件相当糟糕的事情,理由如下。(1)不愿否定自己的工作。程序员一向认为测试人员总是在挑刺,让他们自己挑自己程序的毛病,更是难上加难。(2)受到思维定式的局限。程序员对自己开发的程序很熟悉,测试时难以跳出自己的编码思路,若设计时就存在理解错误,或受不良编码习惯影响而导致缺陷,一般都很难发现。(3)受进度压力的影响。程序员总是在赶进度,能在规定时间内写完代码就不错了,哪有时间去做测试。“让测试人员去测吧”,
6、这是很多开发人员的态度。(4)程序员对程序的功能和接口很熟悉,这与最终用户的情况往往并不吻合,开发人员自己来测试程序难以具有典型性。1.避免测试自己的程序避免测试自己的程序 2.增量测试增量测试 应采用增量测试的方式,即测试范围应从小规模开始,逐步转向大规模。所谓小规模是指测试的粒度,或某种程序的单元测试。进一步的测试将从单个单元的测试逐步过渡到多个单元的组合测试,即集成测试,最终过渡到系统测试。随着从单元测试到集成测试再到系统测试,测试时间、可用资源和测试范围不断扩大。3.测试应该分级测试应该分级 测试应该分级别。不同级别的测试,采用的测试活动、测试方法和测试重点等各有不同(如表2-1)。表
7、中,DT&E测试是指开发测试和评价(Development Test and Evaluation),OT&E是指操作测试和评价(Operational Test and Evaluation)。4.测试应有重点测试应有重点 尽管测试应按一定级别进行,但受到资源和时间的限制,不可能无休止地测试下去。因此在有限的时间和资源下如何有重点地进行测试是测试管理者需充分考虑的事情。测试的重点选择需根据多方面考虑,包括测试对象的关键程度、可能的风险、质量要求等。这些考虑与经验有关,随着实践经验的增长,判断也会更准确。5.避免测试的随意性避免测试的随意性 软件测试是一项系统工程,是有组织、有计划、有步骤的活
8、动。因此,测试应制定合理的测试计划。测试计划反映一个测试团队在正常情况下需完成的工作远景描述,一般包括测试需求、测试策略、资源、项目里程碑、可交付工作等关键内容。但通常情况下,将资源从测试计划中分离出来是一种更好的习惯。2.1.4 对待缺陷的基本原则对待缺陷的基本原则1.缺陷的群集现象缺陷的群集现象 一般情况下,80%的软件缺陷集中在20%的模块中。造成缺陷群集现象的主要原因如下。(1)程序员的疲劳。程序员长期疲劳工作,会造成大量代码缺陷,若让程序员进行12小时或更长时间的持续编码,后期程序片段中出现的缺陷比例会呈直线上升。(2)程序员的习惯。程序员可能因个人变成习惯,而反复犯同样的错误。2.
9、缺陷有免疫力缺陷有免疫力 Boris Beizer曾描述了缺陷的“杀虫剂怪事”现象,即软件测试越多,缺陷的免疫力却越强的现象。因此,在测试中应使用不同的测试方法、针对程序的不同部分进行测试。一般每修复34个缺陷,就会产生一个新缺陷,所以在回归测试中要充分注意缺陷的修复所产生的波及面,圈定合适的回归测试的范围。3.缺陷关联和依赖缺陷关联和依赖。某个缺陷因其他缺陷而出现或消失,关闭某个缺陷必须先关闭其父类缺陷,这类“缺陷关联”现象表明缺陷之间存在着一定的依赖关系。只有经过回归测试才能确保缺陷被正确地修复。2.1.5 测试结果的处理原则测试结果的处理原则1.对缺陷进行复查和确认对缺陷进行复查和确认
10、一般由测试员A(也可以是开发人员和客户)测试出来的缺陷,一定要由项目经理B(或由开发人员、开发经理)来确认,严重的缺陷还应召开评审会议进行讨论和分析,从而防止无效的缺陷对资源的浪费。有的缺陷可能是由测试人员的失误造成的,有的缺陷可能是一个重复提交的缺陷,有的缺陷可能会被开发人员认为是符合设计的。这些都应该通过复查予以确认。测试过程混乱和对设计的歧义是造成无效缺陷的主要来源。在回归测试中尤其应该注意这些,应利用工具对缺陷进行良好的管理。2.测试结果的全面检查 测试结果中可能夹杂着大量正确和错误的输出信息,应仔细区分。要特别注意的是,应尽量用自动检查的方式来确认每个测试结果。自动测试工具可以帮助我
11、们方便地鉴别测试后输出的数据,并给出清晰地缺陷分析报告。在单元测试、系统测试阶段均可使用自动测试工具。3.出错统计和分析 应对测试过程中找到的所有缺陷进行定期统计和分析,包括对所有缺陷进行定性分析,确定其严重程度和优先级别,同时应支持缺陷的统计分析,如累积打开/关闭缺陷总数,不同模块中的缺陷总数,不同类型的缺陷总数,不同阶段发现的缺陷总数等,以便于根据这些统计结果决定是否可以进入下一个测试阶段。若找到项目的进展过程中最薄弱的环节,如设计较差的模块、编程能力较弱的程序员等,在后续开发过程中应加以改进,包括人员的培训、缺陷检查表的扩充等。4.妥善保存测试过程文档 整个测试过程中,应妥善保存一切测试
12、过程文档,便于后续的开发及测试过程改进,提高软件产品质量。测试过程文档包括各阶段的测试计划、测试设计说明书、测试用例说明书、测试脚本、测试总结报告等。2.2 软件测试的分类软件测试的分类 2.2.1 按是否需查看代码分类 1.黑盒测试黑盒测试是将被测试软件看做一个黑盒子,只考虑系统的输入和输出,完全不考虑程序内部逻辑结构和处理过程。黑盒测试的依据是各阶段的需求规格说明(如需求分析阶段是产品的需求规格说明书,单元测试阶段是函数的详细设计说明书)。黑盒测试的优点如下。黑盒测试用例与程序如何实现无关。因此,若程序内部逻辑结构和处理过程发生变化,将不会影响该黑盒测试用例。测试用例的设计与程序的开发可以
13、并行进行。没有编程经验的人也可以设计黑盒测试用例(这也是造成当前测试人员的素质偏低的主要原因之一)。当然,一般情况下,具备一定的编程经验最好。黑盒测试的局限性如下。不可能做到穷举测试。由于输入控件太大,包括输入条件太多、输入数据量太大、输入条件的组合太复杂等因素,导致黑盒测试不可能做到穷举测试。因不可能做到输入的穷举,只能从中选择部分输入构成测试用例,因此黑盒测试是很有可能存在漏洞的。黑盒测试又称功能性测试(Functional Testing)或数据驱动测试(Data-driven Testing)。但注意,功能性测试不等于功能测试。黑盒测试是从功能的角度检查软件是否满足需求规格说明的要求,
14、但并不仅限于功能测试。2.白盒测试 白盒测试是将黑盒子打开,研究源代码和程序内部的逻辑结构。白盒测试的依据是程序代码。利用白盒测试的覆盖指标所设计的测试用例与采用黑盒方法所得到的测试用例常常存在重复。因此,白盒测试一般充当黑盒测试的补充。与黑盒测试相比,白盒测试具有如下特殊的应用领域。程序代码往往具有多个分支。白盒测试可以利用不同的覆盖准则来测试这些分支,黑盒测试则无法做到这一点。白盒测试的覆盖指标可以充当黑盒测试的检查手段。例如,若采用黑盒方法设计的测试用例(如边界值测试)没有满足某些白盒测试覆盖指标(如判定覆盖)的要求,则证明该测试用例集合必然存在漏洞。代码中常存在内存泄露的问题,尤其是C
15、/C+程序,白盒测试可以方便地发现内存泄露的问题,且是直接定位缺陷,而黑盒测试只能通过长时间运行程序,并仔细地检查用例执行结果,才能发现这类问题。有时只有在某种极端的条件下才会出现的情况,是难以直接进行功能测试的,如卫星在太空中收到电磁辐射。这时,缺陷预防是测试的主要母的,白盒测试通过对源代码的静态分析可以发现该类问题。白盒测试也存在局限性,特别是不可能做到穷举测试,原因如下。程序中的逻辑路径太多,往往需要面对路径爆炸的问题。例如,有的代码可能不到100行,却具有520条可能的路径,若每条路径设计一个测试用例,且每个测试用例执行一次需要1ms,则连续执行所有的测试用例大约需要3170年。由于设
16、计的原因,程序的实际执行路径可能比逻辑路径略微少一点,但实际应用的程序也很多。实际上,穷举路径测试也不等于完全的测试,因为它无法发现程序违反设计规范的地方,无法发现程序本身是否缺少某些路径,不能发现程序中已经实现但不是用户所需要的功能,可能无法暴露数据敏感错误,即与数据相关的错误,经常发现不了用户操作行为的缺陷。白盒测试又称结构性测试(Structural Testing)或逻辑驱动测试(Logic-driven Testing)。值得注意的是,白盒测试并非仅限于对程序源代码的测试。对于高层的测试,仍然可以采用某些白盒测试的方法。3.黑盒测试与白盒测试的比较黑盒测试和白盒测试从不同的方面来检查
17、被测软件,无论单独采用黑盒测试,还是单独采用白盒测试都无法做到全面的测试。仅用黑盒测试方法,将无法发现程序内部结构的缺陷,这些缺陷可能暂时不会导致软件的失效,但可能是个隐患,当特定的条件被触发(例如大数据量处理)时,就可能使得软件出现问题,而白盒测试可以及时发现这些缺陷。仅用白盒测试的方法,则无法从宏观上来观察软件运行结果,如程序是否满足设计要求,软件是否符合用户需求,这些都是更加严重的缺陷。黑盒测试通常用于软件的系统测试、验收测试、功能和性能测试等方面,由测试人员来完成。白盒测试一般主要在单元测试、集成测试中采用,通常由开发人员来完成。2.2.2 按是否需要执行被测试软按是否需要执行被测试软
18、件分类件分类 1.静态测试静态测试 静态测试(Static Testing)又称静态分析(Static Analysis),是不实际运行被测软件,而是直接分析软件的形式和结构,查找缺陷。主要包括对源代码、程序界面和各类文档及中间产品(如产品规格说明书、技术设计文档等)所做的测试。(1)对于源代码 静态测试主要是看代码是否符合相应的标准和规范,如可读性、可维护性等,其工作过程类似一个编译器,随着语法分析的进行做特定工作,如分析模块调用图、程序的控制流图等图表,度量软件的代码质量等。一般各公司内部都有自己相应的编码规范,如C/C+编码规范、Java编码规范等,应按照规范中所列出的条目逐条测试。源代
19、码种含有大量原设计信息,以及程序异常的信息。利用静态测试,不仅可以发现程序中明显的缺陷,还可以帮助程序员重点关注那些可能存在缺陷的高风险模块,如多出口的情况、程序复杂度过高的情况、接口过多的情况等。当然,对源代码进行静态测试并非易事,可以借助一些自动化的静态分析工具来降低测试人员的劳动强度。目前市面上已有很多静态分析工具,如Telelogic公司的Logiscope,Parasoft公司的C+Test,这些静态分析工具一般由四个部分组成:语言程序预处理器、数据库、错误分析器和报告生成器。(2)对于程序界面 静态测试主要是查看软件的实际操作和运行界面是否符合需求中的相关说明。(3)对于文档 静态
20、测试主要是检查用户手册与需求说明是否真正符合用户的实际要求。程序界面和文档的静态测试相对容易一些,但要求测试人员应充分熟悉用户需求,且比较细心。从实际情况来讲,界面和文档的测试常常是不收重视的。静态测试是采用走查、同行评审、会审等方法来查找错误或收集所需度量数据的。其不需要运行程序,所以相对动态测试,可以更早地进行。静态分析的查错和分析功能是其他方法所不能替代的,静态分析能发现文档中的问题(也只能通过静态测试发现),通过文档中的问题或其他软件评审发现来发现需求分析、软件设计等问题,而且能有效地检查代码是否具有可读性、可维护性,是否遵守编程规范,包括代码风格、变量/对象/类的命名、注释行等。静态
21、测试已被当做一种主要的自动化代码校验方法。2.动态测试 动态测试(Dynamic Testing)又称动态分析(Dynamic Analysis),是指需要实际运行被测软件,通过观察程序运行时所表现出来的状态、行为等发现软件缺陷,包括在程序运行时,通过有效的测试用例(对应的输入、输出关系)来分析被测程序的运行情况或进行跟踪对比,发现程序所表现的行为与设计规格或客户需求不一致的地方。动态测试是一种经常运行的测试方法,无论在单元测试、集成测试中,还是在系统测试、验收测试中,都是一种有效的测试方法。但它也存在很多局限性,主要体现在以下方面。往往需要借助测试用例来完成。即通过执行测试用例,分析测试用例
展开阅读全文