软件工程导论(第7章).ppt
《软件工程导论(第7章).ppt》由会员分享,可在线阅读,更多相关《软件工程导论(第7章).ppt(152页珍藏版)》请在三一办公上搜索。
1、第7章:实现,编码和测试统称为实现。编码:把软件设计结果翻译成程序。测试:检测程序并改正错误的过程。,计算机程序设计语言基本上可以分为两大类:1.汇编语言;2.高级语言。,7.1 编码,7.1.1 选择程序设计语言,从应用特点看,高级语言可分为:1)基础语言 如BASIC、FORTRAN、COBOL等2)结构化语言 如PL/1、PASCAL、C、ADA等 3)专用语言 如APL、BLISS、FORTH、LISP、PROLOG等,选择一种编程语言的理论标准:1)有理想的模块化机制;2)可读性好的控制结构和数据结构;3)便于调试和提高软件可靠性;4)编译程序发现程序错误的能力强;5)有良好的独立编
2、译机制。,选择语言时除了考虑理论上的标准,还必须同时考虑主要的实用标准:,(1)系统用户要求(2)可以使用的编译程序(3)可以得到的软件工具(4)工程规模(5)程序员知识(6)软件可移植性要求(7)软件的应用领域,1.程序内部的文档 选取含义鲜明的名字,如果使用缩写,缩写规则要一致,并给每个名字加注释;通常在每个模块开始处要有一段注释,描述模块功能、算法、接口特点等;程序清单布局应利用适当的阶梯形式,使程序的层次结构清晰明显。,7.1.2 写程序的风格,2.数据说明 数据说明的次序应该标准化,如按数据类型确定说明的次序;多个变量名在一个语句中说明时,应该按字母顺序排列这些变量;如果设计时使用了
3、复杂的数据结构,应该用注释说明实现该数据结构的方法和特点。,3.语句构造:语句分行、分段、复杂条件语句规则、嵌套规则等等。4.输入/输出:数据检验、格式、合法性等等 5.效率 A程序运行时间 B存储器效率 C输入/输出效率,程序设计工具实例:Visual C,运用Visual C+开发工具需要掌握:C语言特点、语法;Windows编程基础;MFC相关知识;Visual C集成开发工具环境的使用;,一、C语言特点、语法:C+语言是在C语言的基础是扩展而成的,两种语言的基本语法和语义是相同。,C+中加入了面向对象程序设计(OOP)的特征:封装性:通过“类”把属性和函数组合在一起。继承性:派生类可从
4、先前定义的基类中继承函数和属性。多态性:一个函数名,由不同的对象解释执行,可得到不同的执行效果。,二、Windows编程基础:API:API是Windows应用程序编程接口。API是一个程序内(或一组相关程序内)的一组函数调用,程序员用它创建其他程序。程序员不必知道函数内部,只要知道API的函数原型及返回值。API的函数原型及返回值形式可由相关的技术规范资料获得。,现在的Win32 API中,核心部分依靠三个主要组件提供Windows的大部分函数,这三个组件分别是:USER32.DLL;GDI32.DLL;KERNEL32.DLL。,Windows消息机制:1)基于消息的事件驱动 消息可以是由
5、硬件发来的(存于系统队列),也可以由Windows系统和应用程序发来(存于程序队列中);每一个Windows程序在不停的捕捉各种消息,并进行处理;每个窗口都必须有一个窗口函数,来负责消息的判断与处理。,2)窗口函数对消息的处理 窗口函数是一个回调函数,可以处理收到的消息,在程序中不需要用户显式调用。该窗口函数的形式通常为:WndProc(),每个窗口类必须在初始化时指定一个窗口函数。,三、MFC:MFC,即Microsoft基本类,该类库封装了SDK(软件开发工具包)结构、功能及应用程序框架内部技术。它提供了许多可以重用的类,使得Windows程序员避免了许多重复性工作。,四、Visual C
6、集成开发工具环境 1)开发工具的使用;2)掌握Win32程序开发流程;一个win32程序由两大块组成:程序代码;用户接口资源。,用户接口资源:菜单,对话框,图标,光标等;这些资源的实际内容(二进制代码)由各种工具产生,并以各种扩展名的文件存在;,资源描述文件(*.rc)中对用户接口资源进行描述;RC编辑器(RC.exe)根据该资源描述文件(*.rc)将所有用户接口资源集中构造一个*.RES文件;*.RES文件与程序代码结合起来,构成一个Win32程序。,关于函数库和头文件:动态链接库:应用程序调用的API函数在“执行期间”才链接上的函数库,扩展名可以是.dll,也可以是.exe、.fon、.m
7、od、.drv、.ocx等。静态连接库:.lib头文件:如windows.h,它包含操作系统本身的三大模块gdi32.dll、user32.dll和kernel32.dll中的所有API函数。,有关测试的一些规则:(1)测试是为了发现程序中的错误而执行程序的过程;(2)好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案;(3)成功的测试是发现了至今为止尚未发现的错误的测试。,7.2.1 软件测试的目标,7.2 软件测试基础,测试的正确定义:“为了发现程序中的错误而执行程序的过程。”,7.2.2 软件测试准则,1)所有测试都应该能追溯到用户需求;2)应该远在测试前就制定出测试计划;3)把P
8、areto原理应用到软件测试中;Pareto原理说明测试发现的错误中的80%很可能是由程序中20%的模块造成的。4)应该从“小规模”测试开始,并逐步进行“大规模”测试;,5)穷举测试是不可能的;,穷尽测试:包含所有可能情况的测试称为穷尽测试。,6)为了达到最佳测试效果,应该由独立的第三方从事测试工作。,黑盒测试:如果已经知道软件应该具有的功能,可以通过测试来检验是否每个功能都能正常使用,这种测试称黑盒测试。也称功能测试。,7.2.3 测试方法,白盒测试:也称结构测试。如果知道软件内部工作过程,可以通过测试来检验软件内部动作是否按照规格说明书的规定正常进行,这种测试称为白盒测试。,1.模块测试
9、模块测试又称单元测试,它把每个模块作为单独的实体来测试。2.子系统测试 子系统测试是把经过单元测试的模块放在一起形成一个子系统来测试。,7.2.4 软件测试的步骤,3.系统测试 系统测试是把经过测试的子系统装配成一个完整的系统来测试。4.验收测试 验收测试把软件系统作为单一的实体进行测试(利用用户的实际数据测试)。5.平行运行 平行运行是同时运行新开发出来的系统和将被它取代的旧系统,以便比较新旧两个系统的处理结果。,7.2.5 测试阶段的信息流,7.3 单元测试,单元测试的一般方法是:首先通过编译系统检查并改正程序中所有的语法错误;然后用详细设计模块说明为指南,对重要的控制路径进行测试,以便发
10、现模块内部的错误。通常,单元测试使用白盒测试方法。,1)模块接口 应该对穿过模块接口的数据流进行检测,以保证正确的输入和输出。2)局部数据结构 这是错误的主要来源,应该设计相应的测试用例,以便发现数据结构方面的错误。,7.3.1 测试重点,3)重要的执行路径 由于不可能进行穷尽测试,因此选择测试路径是非常关键的。4)出错处理通路5)边界条件,审查小组:1)组长;2)程序的设计者;3)程序的编写者;4)程序的测试者。,7.3.2 代码审查,7.3.3 计算机测试 由于软件模块不是一个独立的系统,不能独立运行,要依靠其他模块调用,或需要调用其他模块。因此,必须要为测试的单元开发驱动程序或存根程序。
11、,1)驱动程序 相当于一个“主程序”,用来把测试数据传送给被测试的模块,并打印有关结果。2)存根程序 用来代替被测试模块所调用的模块,相当于“虚拟子程序”。,如,测试B模块,设计了A模块和C模块。由A负责传送测试数据,由C负责模拟被B调用的模块。C模块可能没有,这取决于B有没有调用其他程序。A、C都是一次性程序,只在测试时临时使用,应尽量设计得简单一些,以节省费用和时间。,例:,对“编辑”功能的测试:,7.4 集成测试,集成测试是组装软件的系统化技术,它将经过单元测试的模块联系在一起进行测试。由模块组装成程序时有两种方法:1)非渐增式测试方法 先分别测试每个模块,再把所有模块按设计要求放在一起
12、结合成所要的程序。,2)渐增式测试方法 每次增加一个待测试模块,把它同已经测试好的那些模块结合起来进行测试,反复进行直到完成所有模块测试的方法。,使用渐增式测试方法把模块结合到软件系统中去时,有自顶向下和自底向上两种集成方法。,自顶向下集成是一种递增的装配软件结构的方法,这种方法应用非常广泛。它需要存根程序,但是不需要驱动程序。,7.4.1 自顶向下集成,这种方法的思想是:从主控模块(主程序)开始,沿软件的控制层次向下移动,逐渐把各个模块结合起来。在自顶向下结合方法中,如何将所有模块组装到软件结构中,又有两种方法:,1)深度优先策略 先组装软件结构的一条主控制通路上的所有模块,选择哪条主控制通
13、路,具有较大的任意性。如图,如果选取左通路,就先把模块M1、M2、M5结合起来测试,然后结合模块M8、M6,再构造中央和右侧的控制通路。,2)宽度优先策略 沿着软件结构水平地移动,把处于同一个层次的所有模块组装起来。如图,首先结合M2、M3、M4和主控模块M1,然后结合下一个控制层次中的模块M5、M6和M7,最后结合模块M8。,自顶向下集成方法的基本过程如下:1)对主控模块进行测试,测试时用存根程序代替所有直接被主控模块调用的模块;,2)根据选定的结合策略(深度优先或宽度优先),每次用一个实际模块代替一个存根程序(新结合的模块往往又需要新的存根程序);,3)每结合一个模块,就测试一个;4)为保
14、证不引入新的错误,需要进行回归测试,即重复以前进行过的部分或全部测试;5)重复回到第二步,直到构成整个软件结构。,自底向上集成方法是从软件结构最底层模块开始进行组装和测试,它与自顶向下结合方法相反,需要驱动程序,不需要存根程序。,7.4.2 自底向上集成,自底向上集成方法的基本过程如下:1)把底层模块组合成实现一个特定软件子功能的族,如图族1、2、3。,2)为每个模块设计一个驱动程序,作为测试的控制程序,以协调测试用例的输入和输出。图中D1、D2、D3分别是族1、2、3的驱动程序;,3)对模块进行测试;4)用实际模块代替驱动程序组装成新的模块族,在新加入的实际模块上面加上新的驱动程序进行测试;
15、,5)重复第二到第四步,逐渐向上加入实际模块,直至构造出整个软件结构。,7.4.3 不同集成测试策略的比较,1.改进的自顶向下测试方法;少数关键模块自底向上。2.混合法。,7.4.4 回归测试 指重新执行已经做过的部分测试。回归测试用于保证由于调试或其他原因引起的程序变化,不会导致额外错误的测试活动。,7.5 确认测试(验收测试),也称为验收测试,目标是验证软件的有效性。如果软件的功能和性能符合用户的期待,软件就是有效的。软件规格说明书是进行确认测试的基础。,7.5.1 确认测试的范围,确认测试的主要特点及内容有:1)某些已经测试过的纯粹技术性的测试项可能不需要再次测试,而对用户特别感兴趣的功
16、能或性能,可能需要增加一些测试;2)通常确认测试主要使用实际生产中的数据来进行测试;3)确认测试必须有用户的积极参与,甚至以用户为主,可能需要进行一些与用户使用步骤有关的测试。,确认测试一般使用黑盒测试法。,7.5.2 软件配置复查,目的:保证软件配置的所有成分都齐全,质量符合要求,文档与程序完全一致,而且已经编好目录。,7.5.3 Alpha和Beta测试,Alpha测试:用户在开发者的场所进行测试,并且在开发者的指导下进行,测试在受控环境中进行,开发者记录发现的错误和问题;Beta测试:用户在一个或多个客户场所进行测试,不受开发者控制,测试者记录发现的问题和错误,定期将问题报告发送给开发者
17、。,7.6 白盒测试技术,1.语句覆盖 语句覆盖是指:设计的测试用例能使程序中每条语句至少执行一次。,7.6.1 逻辑覆盖,例:一个被测试模块的源程序为(PASCAL语言):PROCEDURE EXAMPLE(A,B:REAL;VAR X:REAL);BEGIN IF(A1)AND(B=0)THEN X:=X/A;IF(A=2)OR(X1)THEN X:=X+1 END,选取测试用例:A=2,B=0,X=4,程序执行路径为:sacbed。,2.判定覆盖 判定覆盖是指:选取足够的测试用例,使得程序中每个判断的可能结果都至少执行一次,也就是说使程序的每个判断分支至少通过一次。,对于上例,选取如下测
18、试用例:I.A=3,B=0,X=3(覆盖sacbd)II.A=2,B=1,X=1(覆盖sabed),3.条件覆盖 条件覆盖是指:选择足够的测试用例,使得程序中每个判定表达式的每个条件都取到各种可能的结果。,上例中,有两个判定表达式,每个表达式有两个条件,为了做到条件覆盖,应该选取测试数据使得a点出现如下结果:A1,A1,B=0,B0在b点出现如下结果:A=2,A2,X1,X1,选取如下测试用例:I.A=2,B=0,X=4(满足A1,B=0,A=2和X1,执行路径为sacbed)II.A=1,B=1,X=1(满足A1,B0,A2和X1,执行路径为sabd),条件覆盖通常比判定覆盖强,但是条件覆盖
19、不一定包含判定覆盖。,如:IA=2,B=0,X=1(满足A1,B=0,A=2和X1,执行路径为sacbed)IIA=1,B=1,X=2(满足A1,B0,A2和X1,执行路径为sabed)只满足条件覆盖,并不满足判定覆盖。,4.判定/条件覆盖 判定/条件覆盖是指:选取足够的测试用例使得同时满足判定覆盖和条件覆盖的要求。,对于上例,选取如下测试用例:IA=2,B=0,X=4(满足A1,B=0,A=2和X1,执行路径为sacbed)IIA=1,B=1,X=1(满足A1,B0,A2和X1,执行路径为sabd),5.条件组合覆盖 条件组合覆盖指:选取足够的测试用例,使得每个判定表达式中条件的各种可能的组
20、合都至少出现一次。,对于上例,共有8种可能的条件组合:1)A1,B=0 2)A1,B0 3)A1,B=0 4)A1,B0 5)A=2,X1 6)A=2,X1 7)A2,X1 8)A2,X1,选取如下测试用例:IA=2,B=0,X=4(满足1、5组合:A1,B=0,A=2,X1,执行路径sacbed)IIA=2,B=1,X=1(满足2、6组合:A1,B0,A=2,X1,执行路径sabed),IIIA=1,B=0,X=2(满足3、7组合:A1,B=0,A2,X1,执行路径sabed)IVA=1,B=1,X=1(满足4、8组合:A1,B0,A2,X1,执行路径sabd),如果从对程序路径的覆盖程度分
21、析,可以提出下面一些逻辑覆盖标准:6.点覆盖 点覆盖是指:选取足够多的测试用例,使得程序执行路径至少经过程序图中每个节点一次。,7.边覆盖 边覆盖是指:选取足够多的测试用例,使得程序执行路径至少经过程序图中每条边一次。,选取如下测试用例:I A=3,B=0,X=3(执行路径1453)IIA=2,B=1,X=1(执行路径1267),8.路径覆盖 路径覆盖是指:选取足够多的测试用例,使得程序的每条可能路径都至少执行一次。,选取如下测试用例:I A=1,B=1,X=1(执行路径123)II A=1,B=1,X=2(执行路径1267)IIIA=3,B=0,X=1(执行路径1453)IVA=2,B=0,
22、X=4(执行路径14567),1)A=3,B=0,X=12)A=2,B=0,X=43)A=2,B=1,X=14)A=1,B=0,X=25)A=1,B=1,X=1,更强的测试数据:满足路径覆盖和条件组合覆盖,2)5)满足条件组合覆盖,执行路径分别是:sacbed、sabed、sabed、sabd,路径:sacbd,7.6.2 控制结构测试 现有的很多白盒测试技术,是根据程序的控制结构设计测试的技术,常用的控制结构测试技术有:基本路经测试条件测试循环测试,83,1、基本路经测试,基本路径测试,首先计算程序的环形复杂度,并用该复杂度为指南定义执行路径的基本集合,从该基本集合导出的测试用例可以保证程序
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件工程 导论
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-5387067.html