软件工程SoftwareEngineering.ppt
《软件工程SoftwareEngineering.ppt》由会员分享,可在线阅读,更多相关《软件工程SoftwareEngineering.ppt(94页珍藏版)》请在三一文库上搜索。
1、2019/4/16,1,软件工程 (Software Engineering),第七章 实 现,2019/4/16,2,编码和测试,编码就为是用编程(程序)语言把软件表达翻译为计算机可以理解的形式用某种程序设计语言书写的程序。,2019/4/16,3,前一页,测试,软件测试非常重要,它对软件可靠性产生直接影响。 测试的目的是在软件投入生产运行之前,尽可能多地发现软件中的错误。 目前软件测试仍然是保证软件质量的关键步骤,它是对软件规格说明、设计和编码的最后复审。 软件测试由两个阶段组成,分别是单元测试和集成测试。,2019/4/16,4,测试,软件测试的工作量往往占软件开发总工作量的40%以上,
2、在极端情况,测试那种关系生命安全的软件所花费的成本,可能相当于软件工程其他开发步骤总成本的35倍。 测试的目的是发现错误,但软件生产的最终目的是开发出高质量的完全符合用户需要的软件。,2019/4/16,5,本章主要内容,编码 测试基础 单元测试 集成测试 确认测试 白盒测试技术 黑盒测试技术 调试 软件可靠性,前一页,2019/4/16,6,编 码,编码之前的一项重要工作是选择适当的程序设计语言 适当的编程语言可以减少需要的程序测试量,可以得出更易阅读和更易维护的程序 汇编语言和高级语言相比,使用高级语言写的程序更易阅读、测试、调试和维护,2019/4/16,7,编 码,在进行高级语言的选择
3、时,应该有标准参照 系统用户的要求 可以使用的编译程序 可以得到的软件工具 工程规模 程序员的知识 软件可移植性要求 软件的应用领域,2019/4/16,8,编码风格,设计出易读易懂程序的规则: 程序内部的文档 标识符:含义鲜明的名字 注解:帮助理解程序 程序的视觉组织:程序清单的布局,2019/4/16,9,编码风格,数据说明: 数据说明的次序应该标准化,提高效率 按字母顺序排列变量 使用注解说明复杂的数据结构,2019/4/16,10,编码风格,语句构造:每个语句都应该简单而直接 可以使用一些规则使语句构造简单,如:尽量避免复杂的条件测试,不要为了节省空间而把多个语句写在同一行等。,201
4、9/4/16,11,编码风格,输入输出 在设计和编写程序时应考虑输入和输出 风格的规则。,2019/4/16,12,编码风格,效率:处理机时间和存储器容量 三条基本原则: 效率是性能要求,需求分析阶段确定 效率是靠好设计来提高的 程序的效率和程序的简单程度是一致的,2019/4/16,13,编码风格,效率 程序运行时间:写程序的风格对执行速度有影响 存储器效率:提供存储器效率 输入输出的效率:提高人机通信的效率,2019/4/16,14,软件测试基础,前一页,软件测试阶段的根本目标是尽可能多地发现并排除软件中潜藏的错误,最终把一个高质量的软件系统交给用户使用。,2019/4/16,15,基本概
5、念,软件测试的目标 软件测试准则 测试方法 测试步骤 测试阶段的信息流,前一页,2019/4/16,16,前一页,基本概念,软件测试的目标,(1)测试是为了发现程序中的错误而执行程序的过程。,(2)好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案。,(3)成功的测试是发现了至今为止尚未发现的错误的测试。,2019/4/16,17,软件测试的定义,测试的正确定义:为了发现程序中的错误而执行程序的过程 错误观念:测试是为了表明程序是正确的 测试应由专门的测试小组来完成 测试只能查找程序中的错误,不能证明程序中没有错误,2019/4/16,18,软件测试准则,所有测试都能追溯到用户需求 应该
6、尽早开始测试计划的制定 应用Pareto原理定位错误 测试应该有“小”到“大” 穷举测试不可能 应该由独立的第三方从事测试工作,2019/4/16,19,前一页,测试方法,黑盒测试是在程序接口进行的测试,它只检查程序功能是否能按照规格说明书的规定正常使用,程序是否能适当地接收输入数据产生正确的输出信息,并且保持外部信息(如:数据库或文件)的完整性。黑盒测试又称为功能测试 。,测试任何产品都有两种方法:黑盒测试和白盒测试,2019/4/16,20,基本概念,前一页,白盒测试,白盒测试法是可以把程序看成装在一个透明的白盒子里,了解程序的结构和处理过程。这种方法按照程序内部的逻辑测试程序,检验程序中
7、的每条通路是否能按预定要求正确工作。白盒测试又称为结构测试。,2019/4/16,21,前一页,测试步骤,大型软件系统通常由若干个子系统组成,每个子系统又由许多模块组成。因此,大型软件的测试基本上由下述几个步骤组成:,1、模块测试 2、子系统测试 3、系统测试 4、验收测试 5、平行运行,2019/4/16,22,软件测试的步骤,前一页,模块测试,模块测试的目的是保证每个模块作为一个单元能正确运行,所以模块测试通常又称为单元测试。 在这个测试步骤中所发现的往往是编码和详细设计的错误。,2019/4/16,23,前一页,子系统测试,子系统测试是把经过单元测试的模块放在一起形成一个子系统来测试。模
8、块相互间的协调和通信是这个测试过程中的主要问题。 这个步骤着重测试模块的接口。,软件测试的步骤,2019/4/16,24,前一页,系统测试,系统测试是把经过测试的子系统装配成一个完整的系统来测试。在这个过程中不仅应该发现设计和编码的错误,还应该验证系统确实能提供需求说明书中指定的功能,而且系统的动态特性也要符合预定要求。 在这个测试步骤中发现的往往是软件设计中的错误,也可能发现需求说明中的错误。,软件测试的步骤,2019/4/16,25,前一页,验收测试,验收测试把软件系统作为单一的实体进行测试,测试内容与系统测试基本类似,但是它是在用户积极参与下进行的,而且可能主要使用实际数据进行测试。 验
9、收测试的目的是验证系统确实能够满足用户的需要,在这个测试步骤中发现的往往是系统需求说明书中的错误。,软件测试的步骤,2019/4/16,26,前一页,平行测试,所谓平行运行就是同时运行新开发出来的系统和旧系统,以便比较新旧两个系统的处理结果,其优点是:,(1)可以在准生产环境中运行新系统而又不冒风险; (2)用户能有一段熟悉新系统的时间; (3)可以验证用户指南和使用手册之类的文档 ; (4)能够以准生产模式对新系统进行全负荷测试,可以用测试结果验证性能指标。,软件测试的步骤,2019/4/16,27,测试阶段的信息流,输入 软件配置:需求说明书、设计说明书和程序清单 测试配置:测试计划和测试
10、方案 调试 测试发现错误之后排除错误的过程,由程序编者负责 可靠性模型 使用错误率数据估计未来出现错误的情况,2019/4/16,28,前一页,测试阶段的信息流,2019/4/16,29,前一页,单元测试,测试重点 代码审查 计算机测试,主要内容,2019/4/16,30,前一页,单元测试,测试重点,模块接口 局部数据结构 重要的执行通路 出错处理通路 边界条件,2019/4/16,31,前一页,单元测试的考虑,模块接口,首先应该对通过模块接口的数据流进行测试。如果数据不能适当地进出,所有其他测试都是不切实际的。在对接口进行测试时主要检查下述各点:,(1)参数数目和调用的变元的数目是否相等;
11、(2)参数的属性和变元的属性是否匹配; (3)参数和变元的单位系统是否匹配; (4)传送给被调用模块的变元的数目是否等于那个模块的参数的数目。,2019/4/16,32,前一页,模块接口,(5)传送给被调用模块的变元属性和参数的属性是 否一致? (6)传送给被调用的变元的单位系统和该模块参数的单位系统是否一致? (7)传送给内部函数的变元属性、数目和次序是否正确? (8)是否修改了只做输入用的变元? (9)全程变量的定义和用法在各个模块中是否一致?,单元测试的考虑,2019/4/16,33,前一页,对于一个模块而言,局部数据结构是常见的错误来源。应该仔细设计测试方案,以便发现局部数据说明、初始
12、化、默认值等方面的错误。,局部数据结构,单元测试的考虑,2019/4/16,34,前一页,重要的执行通路,由于通常不可能进行穷尽测试,因此,在单元测试期间选择最有代表性、最可能发现错误的执行通路进行测试就是十分关键的。应该设计测试方案用来发现由于错误的计算、不正确的比较或不适当的控制流而造成的错误。在计算中比较常见的错误是:,(1)计算次序不对或误解了运算符的优先次序; (2)混合运算(运算对象的类型彼此不相容); (3)变量初始值不正确; (4)精度不够; (5)表达式的符号表示错误。,单元测试的考虑,2019/4/16,35,前一页,出错处理通路,好的设计应该能预见出现错误的条件,并且设置
13、适当的处理错误的通路,以便在真的出现错误时执行相应的出错处理通路或干净地结束处理。不仅应该在程序中包含出错处理通路,而且应该认真测试这种通路。,单元测试的考虑,2019/4/16,36,前一页,出错处理通路,当评价出错处理通路时,应该着重测试下述一些可能发生的错误:,(1)对错误的描述是难于理解的; (2)记下的错误与实际遇到的错误不同; (3)在对错误进行处理之前,错误条件已经引起系统干预; (4)对错误的处理不正确; (5)描述错误的信息不足以帮助确定造成错误的位置。,单元测试的考虑,2019/4/16,37,前一页,边界条件,边界测试是单元测试中最后的也可能是最重要的任务。软件常常在它的
14、边界上失效,例如,处理n元数组的第n个元素时,或做到i次循环中的第i次重复时,往往会发生错误。使用刚好小于、刚好等于和刚好大于最大值或最小值的数据结构、控制量和数据值的测试方案,非常可能发现软件中的错误。,单元测试的考虑,2019/4/16,38,前一页,代码审查,人工测试源程序可以由编写者本人非正式地进行。后者称为代码审查,它是一种非常有效的程序验证技术,对于典型的程序来说,可以查处30%-70%的逻辑设计错误和编码错误 。,单元测试过程,2019/4/16,39,代码审查,过程: 审查之前,由设计者简要介绍设计说明书和对程序的设计 审查会上程序的编写者解释怎样实现设计 对照程序错误清单,分
15、析审查程序,2019/4/16,40,代码审查,代码审查的优势:一次审查会上可以发现许多错误,同时可以减少系统验证的工作量 人工测试和计算机测试相互补充,相辅相成,2019/4/16,41,前一页,计算机测试,模块并不是一个独立的程序,因此必须为每个单元测试开发驱动软件和(成)存根软件。通常驱动程序也就是一个“主程序”,它接收测试数据,把这些数据传送给被测试的模块,并打印出有关的结果。,单元测试过程,2019/4/16,42,前一页,本小节结束,2019/4/16,43,前一页,集成测试,由模块组装成程序时有两种方法。 一种是先分别测试每个模块,再把所有模块按设计要求放在一起结合成所要的程序。
16、这种方法称为非渐增式测试方法。 另一种方法是把下一个要测试的模块同已经测试好的那些模块结合起来进行测试,测试完以后再把下一个应该测试的模块结合进来测试。这种每次增加一个模块的方法称为渐增式测试。,2019/4/16,44,集成测试,自顶向下结合 自底向上结合 不同集成测试策略的比较,主要内容,前一页,2019/4/16,45,前一页,集成测试,自顶向下结合,自顶向下的结合方法是从主控制模块开始,沿着软件的控制层次向下移动,从而逐渐把各个模块结合起来。或者使用深度优先的策略,或者使用宽度优先的策略,第一步 对主控制模块进行测试,测试时用存根程序代替所有直接附属于主控制模块的模块。,第二步 根据选
17、定的结合策略(深度优先或宽度优先),每次用一个实际模块代换一个存根程序。,第三步 在结合进一步模块的同时进行测试。,第四步 为了保证加入模块没有引进新的错误,可能需要进行回归测试(即,全部或部分的重复以前做过的测试)。,2019/4/16,46,前一页,自顶向下结合,2019/4/16,47,自底向上结合,集成测试,前一页,自底向上测试从“原子”模块(即在软件结构最底层的模块)开始组装和测试。因为是从底部向上结合模块,总能得到需要的下层模块处理功能,所以不需要存根程序。,2019/4/16,48,自底向上结合,前一页,2019/4/16,49,不同集成测试策略的比较,集成测试,前一页,自顶向下
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件工程 SoftwareEngineering
链接地址:https://www.31doc.com/p-2604069.html