《软件测试相关理论知识精.ppt》由会员分享,可在线阅读,更多相关《软件测试相关理论知识精.ppt(94页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、软件测试相关理论知识第1页,本讲稿共94页软件测试策略2概述单元测试集成测试确认测试系统测试验收测试第2页,本讲稿共94页软件测试策略3什么是软件测试策略?是为软件工程过程定义的一个软件测试的模板,也就是把特定的测试用例方法放置进去的一系列步骤。软件测试策略包含的特征:(1)测试从模块层开始,然后扩大延伸到整个基于计算机的系统集合中。(2)不同的测试技术适用于不同的时间点。(3)测试是由软件的开发人员和(对于大型系统而言)独立的测试组来管理的。(4)测试和调试是不同的活动,但是调试必须能够适应任何的测试策略。第3页,本讲稿共94页单元测试(Unit Testing)5概述单元测试的内容单元测试
2、的步骤单元测试的执行第5页,本讲稿共94页单元测试(Unit Testing)6单元测试:又称模块测试,是针对软件设计的最小单位程序模块进行测试工作。其目的在于发现模块内可能存在的各种差错。检查各个程序模块是否正确地实现了规定的功能。在单元测试活动中,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。单元测试时,多个模块可平行地独立进行单元测试。第6页,本讲稿共94页单元测试的内容7单元测试依据在单元测试时,测试者需要依据详细设计说明书和源程序清单,了解该模块的I/O条件和模块的逻辑结构,主要采用白盒测试的测试用例,辅之以黑盒测试的测试用例,使之对任何合理的输入和不合理的输入,都能鉴别
3、和响应。第7页,本讲稿共94页单元测试的考虑 8模块接口算法和逻辑局部数据结构边界条件独立的路径错误处理 第8页,本讲稿共94页单元测试的考虑-模块接口测试11在单元测试的开始,应对通过被测模块的数据流进行测试。只有在数据能正确流入、流出模块的前提下,其他测试才有意义。测试项目包括:调用本模块的输入参数是否正确;本模块调用子模块时输入给子模块的参数是否正确;是否修改了只读型参数 全局量的定义在各模块中是否一致;第11页,本讲稿共94页单元测试的考虑-模块接口测试12如果模块内包括外部输入输出,还应该考虑下列因素:文件属性是否正确;OPEN与CLOSE语句是否正确;缓冲区容量与记录长度是否匹配;
4、在进行读写操作之前是否打开了文件;在结束文件处理时是否关闭了文件;正文书写输入错误,IO错误是否检查并做了处理。第12页,本讲稿共94页单元测试的考虑-局部数据结构测试13检查局部数据结构是为了保证临时存储在模块内的数据在程序执行过程中完整、正确。局部数据结构往往是错误的根源,应仔细设计测试用例,力求发现下面几类错误:不正确或不一致的数据类型说明使用尚未赋值或尚未初始化的变量错误的初始值或错误的缺省值变量名拼写错或书写错上溢、下溢或地址异常除了局部数据结构外,如可能,单元测试时还应该查清全局数据(如FORTRAN的公用区)对模块的影响。第13页,本讲稿共94页14在模块中应对每一条独立执行路径
5、进行测试,单元测试的最基本要求是满足语句覆盖。设计测试用例是为了发现因错误计算、不正确的比较和不适当的控制流造成的错误。此时基本路径测试和循环测试是最常用且最有效的测试技术。计算中常见的错误包括:误解或用错了算符优先级;混合类型运算;变量初值错;精度不够;表达式符号错。单元测试的考虑-路径测试第14页,本讲稿共94页单元测试的考虑-路径测试15比较判断与控制流常常紧密相关,测试用例还应致力于发现下列错误:不同数据类型的对象之间进行比较;错误地使用逻辑运算符或优先级;因计算机表示的局限性,期望理论上相等而实际上不相等的两个量相等;比较运算或变量出错;循环终止条件或不可能出现;迭代发散时不能退出;
6、错误地修改了循环变量。第15页,本讲稿共94页16一个好的设计应能预见各种出错,并预设各种出错处理,出错处理需认真测试,测试应着重检查下列问题:出错的描述是否难以理解出错的描述是否能够对错误定位显示的错误与实际的错误是否相符对错误条件的处理正确与否在对错误进行处理之前,错误条件是否已经引起系统的干预。单元测试的考虑-错误处理测试第16页,本讲稿共94页17边界条件测试是单元测试中最后,也是最重要的一项任务。众所周知,软件经常在边界上失效,采用边界值分析技术,注意数据流、控制流中刚好等于、大于或小于确定的比较值时出错的可能性。对这些地方要仔细地选择测试用例,认真加以测试。如果对模块运行时间有要求
7、的话,还要专门进行关键路径测试,以确定最坏情况下和平均意义下影响模块运行时间的因素。单元测试的考虑-边界测试第17页,本讲稿共94页单元测试的步骤18一般认为,单元测试应紧接在编码之后,当源程序编制完并通过复审和编译检查,便可开始单元测试。驱动模块和桩模块模块并不是一个独立的程序,在考虑测试模块时,同时要考虑它和外界的联系,应为测试模块开发一个驱动模块(driver)和(或)若干个桩模块(stub),下图显示了一般单元测试的环境。驱动模块:用于模拟被测模块的上级模块。在大多数场合称为“主程序”,它接收测试数据并将这些数据传递到被测试模块,被测试模块被调用后,“主程序”显示类似“进入-退出”消息
8、。桩模块:也称存根程序,用于模拟被测模块的调用模块。第18页,本讲稿共94页19单元测试的步骤第19页,本讲稿共94页单元测试的步骤20单元测试的说明驱动模块和桩模块是测试用的软件,而不是软件产品的组成部分,它需要一定的开发费用。若驱动和桩模块比较简单,实际开销相对低些。遗憾的是,仅用简单的驱动模块和桩模块有时不能完成某些模块的测试任务,这些模块的单元测试只能采用一些综合测试方法。提高模块的内聚度可简化单元测试,如果每个模块只完成一个功能,所需测试用例数目将显著减少,模块中的错误也更易发现。如果一个模块要完成多种功能,可以将这个模块看成由几个小程序组成。必须对其中的每个小程序先进行单元测试要做
9、的工作,对关键模块还要做性能测试。对支持某些标准规程的程序,更要着手进行互联测试。有人把这种情况特别称为模块测试,以区别单元测试。第20页,本讲稿共94页单元测试的执行21检查编码是否遵循软件编程规范和标准自动或手动分析程序设计测试用例并运行错误跟踪分析第21页,本讲稿共94页软件测试策略22概述单元测试集成测试确认测试系统测试验收测试当前位置第22页,本讲稿共94页集成测试23概述集成测试的方式一次性组装方式(big bang)增殖式组装方式自顶向下结合自底向上结合 混合增殖试测试其他第23页,本讲稿共94页集成测试24也称为组装测试、联合测试,是将模块按照设计要求组装起来进行测试,主要目标
10、是发现与接口有关的问题。通常,在单元测试的基础上,需要将所有模块按照设计要求组装成为系统。这时需要考虑的问题是:在把各个模块连接起来的时侯,穿越模块接口的数据是否会丢失;一个模块的功能是否会对另一个模块的功能产生不利的影响;第24页,本讲稿共94页集成测试25为什么进行集成测试?一个模块可能对另一个模块产生不利的影响将子功能合成时不一定产生所期望的主功能独立可接受的误差在组装后可能会超过可接受的误差限度可能会发现单元测试中未发现的接口方面的错误在单元测试中无法发现时序问题(实时系统)在单元测试中无法发现资源竞争问题第25页,本讲稿共94页集成测试的目的26在模块组装后查找模块间接口的错误各个子
11、功能组合起来,能否达到预期要求的父功能;全局数据结构是否有问题;单个模块的误差累积起来,是否会放大,从而达到不能接受的程度。在单元测试的同时可进行组装测试,发现并排除在模块连接中可能出现的问题,最终构成要求的软件系统。第26页,本讲稿共94页27子系统的组装测试特别称为部件测试,它所做的工作是要找出组装后的子系统与系统需求规格说明之间的不一致。通常,把模块组装成为系统的方式有两种 一次性组装方式(big bang)增殖式组装方式集成测试的方式第27页,本讲稿共94页28它是一种非增殖式组装方式。也叫做整体拼装。非增式测试方法采用一步到位的方法来构造测试:对所有模块进行个别的单元测试后,按程序结
12、构图将各模块联接起来,把联接后的程序当作一个整体进行测试集成测试-一次性组装方式第28页,本讲稿共94页29集成测试-一次性组装方式第29页,本讲稿共94页集成测试-一次性组装方式30一次性组装方式的做法是先分散测试,再集中起来一次完成集成测试。因此其特点是:可以并行调试所有模块,因此充分利用人力,加快工作进度。如果在模块的接口处存在差错,只会在最后的集成测试时一下子暴露出来。错误定位困难第30页,本讲稿共94页集成测试-增殖式组装方式31这种组装方式又称渐增式组装首先对一个个模块进行模块测试,然后将这些模块逐步组装成较大的系统在组装的过程中边连接边测试,以发现连接过程中产生的问题通过增殖逐步
13、组装成为要求的软件系统。第31页,本讲稿共94页集成测试-增殖式组装方式32 增式测试把单元测试与集成测试结合起来进行,将模块逐步集成起来,逐步完成集成测试。优点优点:把可能出现的差错分散暴露出来,便于找出问题和修改;一些模块在逐步集成的测试中,得到了较为频繁的考验,因而可能取得较好的测试效果 实施方法:自顶向下结合自底向上结合 第32页,本讲稿共94页自顶向下增式测试 33集成步骤:主控模块作为测试驱动,所有与主控模块直接相连的模块作为桩模块;根据集成的方式(深度或广度),每次用一个替换从属的桩模块;在每个模块被集成时,都必须已经进行了单元测试;进行回归测试以确定集成新模块后没有引入错误上述
14、过程从第2步重复进行,直到整个系统结构被集成完成。第33页,本讲稿共94页自顶向下增式测试 34特点:这种组装方式将模块按系统程序结构,沿控制层次自顶向下进行组装。自顶向下的增殖方式在测试过程中较早地验证了主要的控制和判断点。选用按深度方向组装的方式,可以首先实现和验证一个完整的软件功能。第34页,本讲稿共94页35自顶向下增式测试 第35页,本讲稿共94页自底向上增式测试36工作程序:组装从最底层的模块开始,组合成一个构件,用以完成指定的软件子功能编制驱动程序,协调测试用例的输入与输出;测试集成后的构件按程序结构向上组装测试后的构件,同时除掉驱动程序第36页,本讲稿共94页自底向上增式测试3
15、7这种组装的方式是从程序模块结构的最底层的模块开始组装和测试。因为模块是自底向上进行组装,对于一个给定层次的模块,它的子模块(包括子模块的所有下属模块)已经组装并测试完成,所以不再需要桩模块。在模块的测试过程中需要从子模块得到的信息可以直接运行子模块得到。第37页,本讲稿共94页自底向上增式测试38第38页,本讲稿共94页两种实施方法的比较 优点缺点自顶向下测试 可以自然地做到逐步求精,一开始便能让测试者看到系统的框架 o需要提供桩模块o在输入/输出模块接入系统以前,在桩模块中表示测试数据有一定困难o由于桩模块不能模拟数据,如果模块间的数据流不能构成有向的非环状图,一些模块的测试数据难于生成;
16、o观察和解释测试输出往往也是困难的 自底向上测试 o由于驱动模块模拟了所有调用参数,即使数据流并未构成有向的非环状图,生成测试数据也没有困难o特别适合于关键模块在结构图的底部的情况 o直到最后一个模块被加进去之后才能看到整个程序(系统)的框架 o只有到测试过程的后期才能发现时序问题和资源竞争问题39第39页,本讲稿共94页混合增殖式测试40自顶向下增殖的方式和自底向上增殖的方式各有优缺点。一般来讲,一种方式的优点是另一种方式的缺点。因此,通常是把以上两种方式结合起来进行组装和测试。下面简单介绍三种常见的综合的增殖方式。第40页,本讲稿共94页混合增殖式测试41衍变的自顶向下的增殖测试它的基本思
17、想是强化对输入/输出模块的和引入新算法模块的测试,并自底向上组装成为功能相当完整且相对独立的子系统,然后由主模块开始自顶向下进行增殖测试。首先对输入输出模块和引入新算法模块进行测试;再自底向上组装成为功能相当完整且相对独立的子系统;然后由主模块开始自顶向下进行增殖测试。第41页,本讲稿共94页混合增殖式测试42自底向上自顶向下的增殖测试首先对含读操作的子系统自底向上直至根结点模块进行组装和测试;然后对含写操作的子系统做自顶向下的组装与测试。回归测试这种方式采取自顶向下的方式测试被修改的模块及其子模块;然后将这一部分视为子系统,再自底向上测试,以检查该子系统与其上级模块的接口是否适配。第42页,
18、本讲稿共94页关键模块问题43在组装测试时,应当确定关键模块,对这些关键模块及早进行测试。关键模块的特征:满足某些软件需求;在程序的模块结构中位于较高的层次(高层控制模块);较复杂、较易发生错误;有明确定义的性能要求。在做回归测试时,也应该集中测试关键模块的功能。第43页,本讲稿共94页其他-集成测试计划 44集成测试必须精心计划,并与单元测试的完成时间协调起来。在制定测试计划时,应考虑如下因素:1)是采用何种系统组装方法来进行组装测试;2)组装测试过程中连接各个模块的顺序;3)模块代码编制和测试进度是否与组装测试的顺序一致4)测试过程中是否需要专门的硬件设备;考虑上述问题后,可列出各个模块的
19、编制、测试计划表,标明每个模块单元测试完成的日期、首次集成测试的日期、集成测试全部完成的日期、以及需要的测试用例和所期望的测试结果。在缺少软件测试所需要的硬件设备时,应检查该硬件的交付日期是否与集成测试计划一致。如,若测试需要数字化仪和绘图仪,则相应测试应安排在这些设备能够投入使用之时,并需要为硬件的安装和交付使用保留一段时间,以留下时间余量。此外,在测试计划中需要考虑测试所需软件(驱动模块、桩模块、测试用例生成程序等)的准备情况。第44页,本讲稿共94页其他-集成测试完成的标志45判定集成测试过程完成了,可按以下几个方面检查:1)成功地执行了测试计划中规定的所有集成测试;2)修正了所发现的缺
20、陷;3)测试结果通过了专门小组的评审。集成测试人员集成测试应由专门的测试小组来进行,测试小组由有经验的系统设计人员和程序员组成。整个测试活动要在评审人员出席的情况下进行。在完成预定的集成测试工作后,测试小组应负责对测试结果进行整理、分析,形成测试报告。测试报告内容测试报告中要记录实际的测试结果、在测试中发现的问题、解决这些问题的方法及解决之后再次测试的结果。此外还应提出目前不能解决、还需要管理人员和开发人员注意的一些问题,提供测试评审和最终决策,以提出处理意见。提交的文档集成测试需要提交的文档有:集成测试计划、集成测试规格说明、集成测试分析报告。第45页,本讲稿共94页回归测试46什么是回归测
21、试?在集成测试策略的环境中,回归测试是对某些已经进行过的测试的某些子集再重新进行一遍,以保证上述改变不会传播无法预料的副作用或引发新的问题。在更广的环境里,回归测试就是用来保证(由于测试或其他原因的)改动不会带来不可预料的行为或另外的错误。回归测试可以通过重新执行所有的测试用例或其一个子集人工地进行,也可以使用自动化的捕获回放工具来进行。回归测试集包括三种不同类型的测试用例:(1)能够测试软件的所有功能的代表性测试用例(2)专门针对可能会被修改而影响软件功能的附加测试(3)针对修改过的软件成分的测试第46页,本讲稿共94页软件测试策略47概述单元测试集成测试确认测试系统测试验收测试当前位置第4
22、7页,本讲稿共94页 确认测试48什么是确认测试有效性测试软件配置审查第48页,本讲稿共94页 确认测试49什么是确认测试说法众多,其中最简明的解释是检验所开发的软件是否能按顾客提出的要求运行。若能达到这一要求,则认为开发的软件是合格的。因而有的软件开发部门把确认测试称为合格性测试(qualification testing)。这里所说的顾客要求通常指的是在软件规格说明书中确定的软件功能和技术指标,或是专门为测试所规定的确认准则。集成测试完成以后,分散开发的模块被联接起来,构成完整的程序。其中各模块之间接口存在的种种问题都已消除。于是测试工作进入确认测试(Validation testing)
23、。第49页,本讲稿共94页确认测试50o确认测试包括有效性测试和软件配置审查。第50页,本讲稿共94页 确认测试-有效性测试51有效性测试(功能测试)任务是验证软件的功能和性能及其它特性是否与用户的要求一致。对软件的功能和性能要求在软件需求规格说明书中已经明确规定。它包含的信息就是软件确认测试的基础。有效性测试是在模拟的环境(可能就是开发的环境)下,运用黑盒测试的方法,验证被测软件是否满足需求规格说明书列出的需求。首先制定测试计划,规定要做测试的种类。还需要制定一组测试步骤,描述具体的测试用例。第51页,本讲稿共94页确认测试-有效性测试52通过实施预定的测试计划和测试步骤,确定软件特性是否与
24、需求相符;确保所有的软件功能需求都能得到满足,所有的软件性能需求都能达到。所有的文档都是正确且便于使用;对其它软件需求,如可移植性、兼容性、出错自动恢复、可维护性等,都进行测试,确认是否满足。第52页,本讲稿共94页确认测试-有效性测试53在全部软件测试的测试用例运行完后,所有的测试结果可以分为两类:测试结果与预期的结果相符。这说明软件的这部分功能或性能特征与需求规格说明书相符合,从而这部分程序被接受。测试结果与预期的结果不符。这说明软件的这部分功能或性能特征与需求规格说明不一致,这时需要开列一张软件各项缺陷表或软件问题报告,通过与用户的协商,解决所发现的缺陷和错误。第53页,本讲稿共94页确
25、认测试-软件配置复查54确认测试的另一个重要环节是配置复审,软件配置复查的目的是保证:软件配置的所有成分都齐全;各方面的质量都符合要求;具有维护阶段所必需的细节;已经编排好分类的目录。文件资料包括:用户所需资料(用户手册、操作手册)需求规格说明书(SRS)设计资料(设计说明书)源程序及测试资料(测试说明书,测试报告)在确认测试的过程中,除了人工审查软件配置之外,还应当严格遵守用户手册和操作手册中规定的使用步骤,检查这些文档资料的完整性和正确性。必须仔细记录发现的遗漏和错误,并且适当地补充和改正。第54页,本讲稿共94页55确认测试应交付的文档有:确认测试分析报告 最终的用户手册和操作手册 项目
26、开发总结报告。确认测试第55页,本讲稿共94页软件测试策略56概述单元测试集成测试确认测试系统测试验收测试当前位置第56页,本讲稿共94页57系统测试概述几种系统测试强度(压力)测试安全测试、可靠性测试和恢复测试兼容性测试系统测试第57页,本讲稿共94页58什么是系统测试系统测试,是将通过确认测试的软件,作为整个基于计算机系统的一个元素,与计算机硬件、外设、某些支持软件、数据和人员等其它系统元素结合在一起,在实际运行环境下,对整个计算机系统进行一系列的组装测试和确认测试。系统测试的目的在于通过与系统的需求定义作比较,发现软件与系统的定义不符合或与之矛盾的地方。系统测试的测试用例应根据需求分析规
27、格说明来设计,并在实际使用环境下来运行。系统测试第58页,本讲稿共94页系统测试59为什么要进行系统测试?由于软件只是计算机系统中的一个组成部分,软件开发完成之后,最终还要和系统中的硬件系统、某些支持软件、数据信息等其他部分配套运行。因此,在投入运行前要完成系统测试,以保证各组成部分不仅能单独的得到检验,而且在系统各部分协调工作的环境下也能正常工作。这里所说的系统组成部分除去软件外,还可能包括计算机硬件及其相关的外围设备、数据及其收集和传输机构、掌握计算机系统运行的人员及其操作等,甚至还可能包括受计算控制的执行机构。显然,系统测试已经完全超出了软件工作的范围。然而,软件在系统中毕竟占有相当重要
28、的位置,软件的质量如何,软件的测试工作进行得是否扎实势必与能否顺利、成功地完成系统测试关系极大。另一方面,系统测试实际上是针对系统中各个组成部分进行的综合性检验。尽管每一个检验有着特定的目标,然而所有的检测工作都要验证系统中每个部分均已得到正确的集成,并能完成指定的功能。第59页,本讲稿共94页系统测试60以下分别简要说明几种系统测试:强度测试、性能测试目的虽不同,但方法类似,通常会用特定的测试工具,来模拟超常的数据量、负载等,监视系统的各项性能指标。安全测试、可靠性测试和恢复测试正确性测试兼容性测试第60页,本讲稿共94页系统测试-强度测试61强度测试(压力测试)检验系统能力的最高实际限度,
29、是检查在系统运行环境不正常乃至发生故障的情况下,系统可以运行到何种程度的测试。进行强度测试时,让系统的运行处于资源的异常数量、异常频率和异常批量的条件下。遵循的一些准则为:把输入数据速率提高一个数量级,确定输入功能将如何响应。设计需要占用最大存储量或其它资源的测试用例进行测试。设计出在虚拟存储管理机制中引起“颠簸”的测试用例进行测试。设计出会对磁盘常驻内存的数据过度访问的测试用例进行测试。例如,如果正常的中断平均频率为每秒一到二次,强度测试设计为每秒10次中断。又如,某系统正常运行可支持10个终端并行工作,强度测试则检验15个终端并行工作的情况。第61页,本讲稿共94页系统测试-强度测试62测
30、试环境测试环境包括硬件环境(服务器、客户端等)、网络环境(通信协议、带宽等)、测试程序、数据准备等。分析强度测试中易出现瓶颈处,从而有目的地调整测试环境或测试策略,使强度测试反映出软件的性能。压力稳定测试:在选定压力下,持续24小时以上进行稳定性测试。破坏性加压测试:不断加压,造成系统崩溃或让问题暴露。第62页,本讲稿共94页系统测试-强度测试63问题分析强度测试常采用黑盒测试方法,测试人员很难定位问题根源,所以适当的分析和详细记录十分重要。查看服务器上的进程及相应的日志文件可能立刻找到问题的关键;查看监视系统性能的日志文件,找出问题出现的关键时间,系统状态;检查测试运行参数,适当调整,重新测
31、试,看问题能否再现;对问题进行分解、屏蔽某些因数或功能,试着重现问题。累积效应测试中最好不要重做系统,因为这会忽略累积效应,使一些缺陷无法被发现。第63页,本讲稿共94页系统测试-性能测试64性能测试性能测试是要检查系统是否满足在需求说明书中规定的性能。特别是对于实时系统或嵌入式系统。性能测试常常需要与强度测试结合起来进行,并常常要求同时进行硬件和软件检测。通常,对软件性能的检测表现在以下几个方面:响应时间、吞吐量、辅助存储区,例如缓冲区,工作区的大小等、处理精度,等等。为记录性能需要在系统中安装必要的量测仪表或是为度量性能而设置的软件(或程序段)。第64页,本讲稿共94页系统测试-安全性测试
32、65概述软件不安全性因素了解动机二种级别的安全性方法威胁模式分析攻击的几种方法几个安全性编程问题了解缓冲区溢出使用安全的字符串函数计算机取证第65页,本讲稿共94页软件安全性测试66软件不安全性因素不安全的软件,是有着巨大缺陷的软件ISO 8402:安全性是“使伤害或损害的风险限制在可接受的水平内”。安全测试检查系统对不安全因素的防范能力。不安全的因素有:黑客、病毒、蠕虫、间谍软件、后门程序、木马、拒绝服务攻击等;驾驶攻击:随着在城域网中普及无线高保真(WiFi)网络,黑客们可驾驶车子,带着笔记本,在城市的街道上兜圈子,一旦搜索到未受保护的无线网络,即进行攻击,这种技术就是“驾驶攻击”。第66
33、页,本讲稿共94页软件安全性测试67了解动机了解动机能帮助软件测试员考虑到测试的软件中有哪些安全方面的漏洞。1)挑战/成名2)好奇3)使用/借用4)恶意破坏5)偷窃第67页,本讲稿共94页软件安全性测试68二种级别的安全性应用程序级的安全性系统级别的安全性测试目标应用程序级的安全性:核实操作者只能访问其所属的用户类型已被授权访问的那些功能和数据。系统级别的安全性:核实只有具备权限的用户才能访问系统和应用程序。第68页,本讲稿共94页软件安全性测试69威胁模式分析(threat modeling)威胁模式分析(来源于Writing Secure Code,Microsoft Press,2003
34、,second edition):目的是由评审小组查找产品特性设置方面可能会引起安全漏洞的地方。根据这些信息,相应的小组可以选择对产品做修改,花更多的努力设计特定的功能;或者集中精力测试潜在的故障点。最终,使产品更加安全。威胁模型分析的步骤如下:第69页,本讲稿共94页软件安全性测试70威胁模式分析步骤1)构建威胁模型分析小组对于小组来说,重要的一点是了解他们的最初目标不是解决安全问题,而是确定安全问题。在后期可以隔离安全威胁,设计解决方案。2)确认价值考虑系统所有的东西对于一个入侵者来说价值有多大。3)创建一个体系结构总体图要确认计划用在软件中的以及如何实现互连的技术。创建一个体系结构图表示
35、出主要的技术模块和它们之间如何通信,确认不同技术和其证明之间的信任边界,以及为了访问数据必须发生的授权。4)分解应用程序这是一个格式化的过程,用来确认数据所在位置以及如何通过系统。第70页,本讲稿共94页软件安全性测试71威胁模式分析步骤(续)5)确认威胁一旦完全理解了所有的部分(价值、体系结构、数据),威胁模型分析小组可以转向确认威胁。每一个部分都应该考虑成为威胁目标,并且应假设它们会受到攻击。6)记录威胁每个威胁都必须用文档记录,并且应进行跟踪以确保其被解决。文档是一种简单方式,用于描述威胁、目标、攻击可能采用的方式、系统用于防御攻击有哪些反制手段。7)威胁等级评定理解并非所有的威胁生来就
36、平等。可用恐怖公式来确定每个威胁的等级。第71页,本讲稿共94页软件安全性测试72恐怖公式(DREAD Formula)1)潜在的危害:如果被黑,损害多大?2)可反复性:被黑的几率?3)可利用性:黑的技术难度?4)受影响的用户:有多少?5)可发现性:黑客发现漏洞的可能性?在以上5个方面打分,1表示低,2表示中等,3表示高,然后加起来,获得515间的一个值,作为每个威胁的安全等级。第72页,本讲稿共94页软件安全性测试73软件安全是一项功能吗?软件漏洞是一个缺陷吗?软件安全可以简单地看做是软件产品或系统的另外一项功能。软件测试员不需要拿到一份清楚明白地定义软件安全性是如何实现的产品说明书。软件测
37、试员也不能假设威胁模型分析是完全和准确的。注:测试安全缺陷是失效性测试行为,也常常覆盖产品中没有被完全理解和说明的部分。第73页,本讲稿共94页软件安全性测试74攻击的几种方法安全测试期间,测试人员假扮非法入侵者,采用各种办法试图突破防线。如:以系统输入为突破口,利用输入的容错性进行正面攻击;申请和占用过多的资源压垮系统,以破坏安全措施,从而进入系统;故意使系统出错,利用系统恢复的过程,窃取用户口令及其它有用的信息;通过浏览残留在计算机各种资源中的垃圾(无用信息),以获取如口令,安全码,译码关键字等信息;浏览全局数据,期望从中找到进入系统的关键字;浏览那些逻辑上不存在,但物理上还存在的各种记录
38、和资料等。理论上,只要有足够的时间和资源,没有无法进入的系统。因此安全设计的准则是使非法入侵的代价超过被保护信息的价值。此时非法侵入者已无利可图。第74页,本讲稿共94页软件安全性测试75了解缓冲区溢出任何软件产品中都有一个安全问题 缓冲区溢出。如,数据引用错误,由于使用没有被正确申明和初始化的变量、常数、数组、字符串或记录引起的缺陷。缓冲区溢出就是这种缺陷。由于字符串的不正确处理引起的缓冲区溢出是常见的一种代码编写错误,其结果是导致安全漏洞。JPEG 病毒就是利用了缓冲区溢出。第75页,本讲稿共94页软件安全性测试76使用安全的字符串函数传统的字符串函数功能齐全,但没有考虑安全性。为了让字符
39、串处理变得安全,开发或改进了一组新的函数,叫安全字符串函数(Safe String Functions),在windowsXP的SP1以后版本、最新的windows DDK和平台SDK中已经具有。常用的操作系统、编译器,处理器也具有其它很多实现了安全字符串的商用的或免费的库。使用新函数的好处1)每个函数接收目标缓冲的长度作为输入。这样函数就能确保在写入时不会超过缓冲区的长度。2)函数空字符中止所有的输出字符串,即空字符作为字符串的结束符。3)所有函数返回一个NTSTATUS值,该值只有一个可能成功的代码。调用函数能轻易地确定函数的执行是否成功。4)每个都提供版本。一个支持单字节的ASCII字符
40、,另一个支持双字节的Unicode字符。第76页,本讲稿共94页软件安全性测试77计算机取证用户变更时未被删除的保留数据叫做潜在数据。潜在数据是潜在的安全漏洞,需要在小组采用的任何威胁模型分析中进行讨论。也许这些数据不会被看成是产品的问题,也许会被看成是一个大问题。潜在数据的更复杂的例子是由计算机安全专家用来发现可以用做犯罪调查的证据。第77页,本讲稿共94页可靠性测试78ISO9126:1991定义:软件的可靠性是指:“在规定的一段时间和条件下,软件维持其性能水平的能力有关的一组属性,可用成熟性、容错性、易恢复性三个基本子特性来度量”。可靠性测试是从验证的角度出发,检验系统的可靠性是否达到预
41、期的目标,同时给出当前系统可能的可靠性增长情况。对可靠性性测试来说,最关键的测试数据包括失效间隔时间,失效修复时间,失效数量,失效级别等。根据获得的测试数据,应用可靠性模型,可以得到系统的失效率及可靠性增长趋势。可靠性指标有时很难测试,通常采用平均无故障时间或系统投入运行后出现的故障不能大于多少数量这些指标来对可靠性进行评估。第78页,本讲稿共94页系统测试79恢复测试是要证实在克服硬件故障(包括掉电、硬件或网络出错等)后,系统能否正常地继续进行工作,并不对系统造成任何损害。为此,可采用各种人工干预的手段,模拟硬件故障,故意造成软件出错,不能正常工作,进而检验系统的恢复能力。检查包括:错误探测
42、功能:系统能否发现硬件失效与故障;能否切换或启动备用的硬件;在故障发生时能否保护正在运行的作业和系统状态;在系统恢复后能否从最后记录下来的无错误状态开始继续执行作业,等。掉电测试:软件系统在发生电源中断时能否保护当时的状态且不毁坏数据,然后在电源恢复时从保留的断点处重新进行操作。如果系统本身能够自动地进行恢复,则应检验:重新初始化,检验点设置机构、数据恢复以及重新启动是否正确。如果这一恢复需要人为干预,则应考虑平均修复时间是否在限定的范围以内。第79页,本讲稿共94页兼容性测试80兼容性测试软件兼容性测试是检测各软件之间能否正确地交互和共享信息,其目标是保证软件按照用户期望的方式进行交互,使用
43、其它软件检查软件操作的过程。软件兼容的实例:从Web页面剪切文字,然后在文字处理程序中打开的文档中粘贴。从电子表格程序保存账目数据,然后在另一个完全不同的电子表格程序中读入这些数据。使图形处理软件在同一操作系统下的不同版本正常工作。使文字处理程序从联系人管理程序中读取姓名和地址,打印个性化的邀请函和信封。升级到新的数据库程序,读入现存所有数据库,并能够像老版本一样对其中的数据进行处理。第80页,本讲稿共94页兼容性测试(续)81兼容性的测试通常需要解决以下问题:1)新开发的软件需要与哪种平台(操作系统、Web浏览器或操作环境)和应用软件保持兼容?如果要测的软件是一个平台,那么要求什么应用程序能
44、在其上运行?2)应该遵守哪种定义软件之间交互的标准或者规范。3)软件使用何种数据与其它平台、与新的软件进行交互和共享信息。也就是说,兼容性通常有4种:向前兼容与向后兼容,不同版本间的兼容,标准和规范,数据共享兼容。第81页,本讲稿共94页兼容性测试(续)82(1)向前兼容和向后兼容向前兼容是指可以使用软件的未来版本,向后兼容是指可以使用软件的以前版本。并非所有的软件都要求向前兼容和向后兼容,这是软件设计者需要决定的产品特性。例:使用文本文件可以对向前兼容和向后兼容作一个简单的演示:在Windows 98上用Notepad创建的文本文件,它可以向后兼容MS-DOS 1.0后的所有版本,它还可以向
45、前兼容Windows XP甚至以后的版本。第82页,本讲稿共94页兼容性测试(续)83在在Windows 98上运行的上运行的Notepad MYDATE.TXT在在MS-DOS1.0上运行的上运行的Edit.exe在在Windows 3.1上运行的上运行的Notepad 在在Windows 95上运行的上运行的Notepad 向后兼容向后兼容在在Windows 2000上运行的上运行的WordPad在未来操作系统在未来操作系统上运行的上运行的未知软件未知软件向前兼容向前兼容第83页,本讲稿共94页兼容性测试(续)84(2)不同版本间的兼容 不同版本间的兼容是指多种平台和应用软件的多个版本之间
46、是否能够正常工作。如:测试一个应用软件对于操作系统的兼容性。可能涉及:跨平台测试同OS的不同版本的兼容性测试OS不同语言版的兼容性测试不同厂家、相同类型的OS兼容性测试 第84页,本讲稿共94页兼容性测试(续)85(2)不同版本间的兼容(续)再如:若要测一个流行的操作系统的新版本,当前操作系统上可能有成千上万的程序,则新操作系统目标是与它们百分之百兼容。因为不可能在一个操作系统上测试所有的软件程序,因此需要决定哪些是最重要的、必须进行的。选择“重要”的程序原则是:流行程度:利用销售记录选择前100或1000个最流行的程序。年头:应该选择近3年内的程序和版本。类型:把软件分为画图、书写、财务、数
47、据库、通信等类型。从每一种类型中选择测试软件。生产厂商:另一个原则是根据制作软件的公司来选择软件。85第85页,本讲稿共94页兼容性测试(续)86(3)标准和规范 适用于软件平台的标准和规范有两个级别 高级标准和低级标准。高级标准高级标准是产品应当普遍遵守的,如软件能在何种操作系统上运行?是互联网上的程序吗?它运行于何种浏览器?每一项问题都关系到平台,假若应用程序声明与某个平台兼容,就必须接受关于该平台的标准和规范。如,Microsoft Windows的认证徽标,即WHQL(Windows Hardware.Quality Labs)。为了得到这个徽标,软件必须执行通过独立测试实验室的兼容性
48、测试。其目的是确保软件在操作系统上能够平衡可靠地运行。86第86页,本讲稿共94页Windows的认证徽标87第87页,本讲稿共94页兼容性测试(续)88(3)标准和规范(续)低级标准低级标准是对产品开发细节的描述,如文件格式和网络通讯协议等。从某种意义上说,低级标准比高级标准更加重要。如,一个图形软件,把文件保存为.pict文件格式(Macintosh标准图形文件格式),而程序不符合.pict文件的标准,用户就无法在其他程序中查看该文件。该软件与标准不兼容,很可能成为短命产品。同样,通信协议、编程语言语法以及程序员用于共享信息的任何形式都必须符合公开标准和规范。低级兼容性标准可以视为软件说明
49、书的扩充部分。如果软件说明书有:“本软件以.bmp,jpg,gif格式读写图形文件”,就要找到这些格式的标准,并测试以确保软件符合标准。88第88页,本讲稿共94页兼容性测试(续)89(4)数据共享兼容 数据共享兼容是指要在应用程序之间共享数据,它要求支持并遵守公开的标准,允许用户与其他软件无障碍的传输数据。如:1.在Windows环境下,程序间通过剪切、复制和粘贴实现数据共享。在此状况下,传输通过剪贴板的程序来实现。若对某个程序进行兼容性测试就要确认其数据能够利用剪切板与其他程序进行相互复制。2.通过读写移动外存实现数据共享,如软磁盘、U盘、移动硬盘等,但文件的数据格式必须符合标准,才能在多
50、台计算机上保持兼容。3.文件导入/导出的测试:是否正确转换为新格式。89第89页,本讲稿共94页90在通过了系统的有效性测试、软件配置审查及各种系统测试之后,就应开始系统的验收测试。验收测试是以用户为主的测试。软件开发人员和QA(质量保证)人员也应参加。由用户参加设计测试用例,使用生产中的实际数据进行测试。验收测试(Acceptance Testing)第90页,本讲稿共94页91验收测试与系统测试的区别:组织机构:测试地点:覆盖范围:实施人员:验收测试(Acceptance Testing)第91页,本讲稿共94页验收测试应完成的工作92软件验收测试应完成的工作内容包括:明确验收项目,规定验