您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 冶金工业 > 无论采用何种开发模型开发出来的大型软件系统
计算机科学与工程学院软件工程(SoftwareEngineer)第七章测试无论采用何种开发模型开发出来的大型软件系统,由于客观系统的复杂性,人的主观认识的狭隘性,不可能对要开发的系统具有完美的认识。虽然在软件开发的每一阶段都进行了技术审查和管理复审,也不可能把设计中所有潜在的错误检查出来并进行纠正,而且在编码阶段也会引入新的错误,软件设计环节的错误,如果不进行纠正,在使用阶段可能造成的损失会很大。所以软件在交付使用之前必须进行严格的测试,通过测试找出软件在需求分析、设计和编码阶段隐藏的错误,并加以改正。计算机科学与工程学院软件工程(SoftwareEngineer)7.1测试的基本概念和原则1测试的必要性在测试理论形成的早期,一些软件开发公司由于忽视软件的测试,造成了巨大的经济损失。所以测试对提高软件的质量具有很大的重要性。虽然在软件生命周期的各个阶段都有严格的技术审查和管理复审,但是经验表明,审查不能发现所有的差错;在编码过程中,程序员的编程水平对软件的影响很大,但是不管经验多丰富的程序员在编程中都会引入一些错误。如果这些错误在软件交付前没有被测试出来,投入使用后往往带来严重后果。计算机科学与工程学院软件工程(SoftwareEngineer)2测试的概念1)软件测试软件测试是对软件计划、软件设计和软件编码进行查错和纠错的活动,这个过程包括了代码执行活动和人工活动。2)程序测试程序测试是对编码阶段出现的语法错、语义错、运行错进行查找的编码执行过程。3)动态测试动态测试包括白盒测试和黑盒测试。黑盒测试是根据软件的功能而设计测试用例而进行测试的过程,白盒测试是根据测试的内部结构而设计测试数据,发现程序的错误。4)静态测试静态测试包括代码审查和静态分析。计算机科学与工程学院软件工程(SoftwareEngineer)3软件测试的目的G.Myers关于软件测试目的的观点是:(1)测试是为了发现程序中的错误而执行程序的过程;(2)好的测试方案是极有可能发现迄今尚未发现的尽可能多的错误的测试;(3)成功的测试是发现了迄今尚未发现的错误的测试。计算机科学与工程学院软件工程(SoftwareEngineer)4测试复杂性在理论上看,不论采用哪种测试,只要对每一种可能的情况都进行测试,就可以得到完全正确的程序。我们称包含所有可能的测试称为穷尽测试。而在实际中,穷尽测试是不可能做到的。图8.1黑盒测试复杂性例子无论采用黑盒法还是白盒法,要做到穷尽测试,在时间上和代价上都不可能,只能选择部分测试用例尽可能多地行测试,找到尽可能多的错误,也即是进行有穷测试。计算机科学与工程学院软件工程(SoftwareEngineer)5测试的基本原则(1)测试前要认定被测试的软件有错,不要认为被测试的程序是正确的;(2)要确定测试软件的预先测试结果;(3)尽量避免测试自己编写的程序;(4)测试时要考虑合理的输入和不合理的输入数据;(5)测试时应以软件需求规格说明书中的需求为标准;(6)要确定找到的新错与已找到的旧错成正比;(7)所使用的测试用例应该纪录下来,以后测试时再用,以供后来的测试和维护使用。计算机科学与工程学院软件工程(SoftwareEngineer)7.2测试步骤1测试过程软件配置测试配置测试工具测试构造可靠性模型调试评价测试结果预期结果可靠性预测正确错误出错率修正文件计算机科学与工程学院软件工程(SoftwareEngineer)2测试的步骤测试时,首先进行单元测试,再进行组装测试,最后进行确认测试。单元测试单元测试集成测试确认测试集成软件设计信息软件需求交付软件测试后模块1测试后模块n模块1模块2计算机科学与工程学院软件工程(SoftwareEngineer)7.3设计测试方案1白盒法测试的基本技术在工程实践中,白盒法的基本测试思想:分析被测试程序的逻辑结构,选择逻辑执行路径子集设计测试方案。用尽可能少的测试用例子集确定被测试程序的实际执行状态与预期的状态是否一致,期望发现尽可能多的错误。在工程实践中提出了以下几种选择逻辑路径子集的覆盖标准。计算机科学与工程学院软件工程(SoftwareEngineer)1.语句覆盖:执行足够的测试用例,使得被测试程序中每个可执行语句至少被执行一次。2.判定覆盖:判定覆盖又称为分支覆盖,它的基本思想是:执行足够的测试用例,使得被测试程序中每个语句至少执行一次,并且每个判定分支也至少执行一次.3.条件覆盖:执行足够的测试用例,使判定条件中的每个条件至少获得一次可能取值的机会。4.判定/条件覆盖:执行足够的测试用例,使得被测试程序中每个判定分支至少获得一次通过,同时各判定中每个条件至少获得一次可能取值的机会。5.条件组合覆盖:执行足够的测试用例,使得被测试程序中每个判定条件的各种组合至少获得一次为真和假的机会。6.点覆盖7.边覆盖8.路径覆盖:执行足够的测试用例,使得被测试程序中的每条可能路径至少执行一次计算机科学与工程学院软件工程(SoftwareEngineer)2黑盒法测试的基本技术1)等价分类法将程序模块的所有可能输入数据(有效与无效的)划分为若干等价类,在指定等价类中任取一组数据作为一个测试用例,作为该等价类的代表,并且假定:如果该组数据可以检查出程序的错误,则该等价类中其他组数据也可以产生同样的错误,相反,如果该组数据没有查出错误,则使用该等价类中其他数据组执行程序也是正确的。计算机科学与工程学院软件工程(SoftwareEngineer)⒉)边界值分析:程序在处理边界情况时最容易发生错误,许多程序错误出现在下标、数据结构和循环等等的边界附近。3)错误推测法在很大程度上该方法靠直觉和经验进行。它的基本思想是:列举出程序中可能有的错误和容易发生错误的特殊情况,并且根据它们选择测试方案。计算机科学与工程学院软件工程(SoftwareEngineer)7.4单元测试1单元测试的内容1)模块接口测试通过测试模块接口的数据流是否可以通畅地流入/出模块,如果数据不能正常地进出,则其他测试都不能进行。2)局部数据结构测试模块内部数据是否完整,内容、形式、相关关系是否正确。3)逻辑覆盖(执行路径)问题不可能对模块内部的所有逻辑执行路径进行测试,所以选择最有可能发现错误的执行路径进行测试是至关重要的。4)出错处理问题一个好的模块应该能够分析出错的原因、报告出错和提供很好的处理错误,保证程序能正常的运行。因此应该详细测试错误处理的通路。计算机科学与工程学院软件工程(SoftwareEngineer)2单元测试步骤单元测试按照如下的步骤进行:1)配置测试环境,设计所需要的辅助模块2)设计测试用例根据逻辑覆盖标准和单元测试所需要解决的测试问题,设计合适的测试用例。3)多个单元并行测试为每一个模块设计相应的测试环境和测试用例,可以同时对多个模块进行测试。计算机科学与工程学院软件工程(SoftwareEngineer)7.5集成测试1非增式组装测试这种方法将单元测试后的所有模块按照总体的结构图一次性的组装起来,然后对组装的整体进行测试,得到最终要求的目标系统。一般采用黑盒法设计测试用例进行测试。计算机科学与工程学院软件工程(SoftwareEngineer)2增式组装测试所谓增式组装测试是按照结构图自顶向下或自底向上逐渐把模块组装成一个系统,即安装一个模块测试一个模块。增式组装测试根据把待测试模块加入系统的方式可以分为两种方法:1)自顶向下增式组装测试2)自底向上增式组装测试3)两者相结合的组装测试计算机科学与工程学院软件工程(SoftwareEngineer)7.6确认测试对软件进行组装测试后,软件系统已成为完整的软件包,消除了接口的错误,可以进行系统的确认测试,验证系统是否满足需求规格说明书中规定的要求。确认测试所采用的技术以黑盒法为主。确认测试主要由使用用户参加测试,测试的目的是向用户表明软件系统的有效性。根据软件需求说明书中的描述,使用户能够确认软件的功能与性能同他们期望的一样。计算机科学与工程学院软件工程(SoftwareEngineer)1测试内容:(1)系统功能测试:按照需求说明书的要求,测试系统是否具有用户所要求的功能;(2)强度测试:加载所有负荷的情况下,运行系统,验证系统的负荷能力;(3)性能测试;系统在实际运行环境中,是否具有需求说明书上所要求的系统性能;(4)背景测试:系统在实际负荷情况下,测试系统运行多道程序、多道作业的能力;(5)配置测试:在指定的逻辑组合或物理设备下,检查用户手册、操作手册、设计说明、源程序、测试说明的完整性、可理解性、可用性与实际运行系统的一致性;(6)恢复测试:测试系统在软件或硬件故障下,恢复原先控制数据的能力;(7)安全测试:测试系统的安全性,测试系统能否使不合法用户不能进入系统。计算机科学与工程学院软件工程(SoftwareEngineer)2测试步骤(1)在模拟的环境中,首先进行强度测试(即压力测试),系统是否满足要求;(2)在计划的时间内,运行用户可见的软件功能,验证是否与用户的要求相符;(3)测试系统的配置、性能、背景、恢复能力、安全性是否满足要求,同时对软件的可移植性、兼容性、可维护性做出评价;(4)测试过程中,详细记录不符合用户要求的内容及系统的缺陷;(5)测试结束,分析测试结果,找出产生错误的原因;(6)书写确认测试分析报告;(7)根据测试分析报告,明确表示软件的功能及各种性能能否达到软件需求说明书的要求。(8)确认测试结束,如果验收通过,书写整个项目的开发总结报告。计算机科学与工程学院软件工程(SoftwareEngineer)7.7软件调试一般有如下几种方法:1)输出内存和寄存器的内容2)设置程序断点,插入打印语句3)使用自动调试工具计算机科学与工程学院软件工程(SoftwareEngineer)2常用调试策略1)跟踪法:在错误的征兆附近进行追踪,或是正向跟踪或是反向跟踪。2)演绎法:从测试数据中分析可能出错的原因,排除不会发生的错误原因。3)归纳法:归纳法纠错是由测试取得错误数据的个别数据,其过程是收集有关数据、组织数据、寻找假设、证明假设、排除假设的错误的过程。计算机科学与工程学院软件工程(SoftwareEngineer)4)试探法:针对错误不复杂,而程序又比较简单的程序,根据错误征兆,猜想出故障的大致位置,选取一种纠错方法,找到有关的出错信息,借此逐渐确定原来的分析,渐渐找出错误的原因与位置,然后纠错。5)回溯法纠错修改设计(或代码)的相应错误之后,必须重复执行先前测试集的过程称回溯测试,又叫回归测试,目的在于进一步验证纠错的正确性。6)对分查找法如果已经知道每个变量在程序内若干个关键点的正确值,则用赋值语句或输入语句在程序中的关键点附近输入这些变量的正确值,然后检查程序的输出值。计算机科学与工程学院软件工程(SoftwareEngineer)7.8自动测试工具1测试数据生成程序2静态生成程序3动态分析程序4文件比较程序计算机科学与工程学院软件工程(SoftwareEngineer)7.9软件可靠性1基本概念1)软件可靠性其定义为程序在给定的时间间隔内,按照规格说明书的规定能成功运行的概率。2)软件可用性其定义为程序在给定的时刻,按照规格说明书的规定,能成功运行的概率。3)MTTF和MTTR2估算MTTF的方法计算机科学与工程学院软件工程(SoftwareEngineer)7.10实例1测试计划2测试分析报告计算机科学与工程学院软件工程(SoftwareEngineer)习题七1.为什么说软件测试是软件开发中不可缺少的重要一环,但不是软件质量保证的安全网?2.软件测试的基本任务是什么?简述软件测试与程序调试的区别。3.总结软件测试的基本原则。4.软件测试分哪几个阶段?各阶段的任务是什么?5.什么是黑盒测试与白盒测试?它们都适应哪些测试?6.什么是软件系统的α测试和β测试?它们各自的目的和方法有什么特点?7.使用白盒法覆盖被测试程序的所有逻辑执行路径能够保证程序正确吗?为什么?8.为什么在综合测试策略中首先考虑边界值分析,而不是等价
本文标题:无论采用何种开发模型开发出来的大型软件系统
链接地址:https://www.777doc.com/doc-326265 .html