软件工程导论(第7章)

上传人:无*** 文档编号:247337829 上传时间:2024-10-18 格式:PPT 页数:152 大小:1.42MB
返回 下载 相关 举报
软件工程导论(第7章)_第1页
第1页 / 共152页
软件工程导论(第7章)_第2页
第2页 / 共152页
软件工程导论(第7章)_第3页
第3页 / 共152页
点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第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,)有良好的独立编译机制。,选择语言时除了考虑理论上的标准,还必须同时考虑主要的实用标准:,(1)系统用户要求,(2)可以使用的编译程序,(3)可以得到的软件工具,(4)工程规模,(5)程序员知识,(6)软件可移植性要求,(7)软件的应用领域,1.程序内部的文档,选取含义鲜明的名字,如果使用缩写,缩写规则要一致,并给每个名字加注释;,通常在每个模块开始处要有一段注释,描述模块功能、算法、接口特点等;,程序清单布局应利用适当的阶梯形式,使程序的层次结构清晰明显。,7.1.2 写程序的风格,2.数据说明,数据说明的次序应该标准化,如按数据类型确定说明的次序;,多个变量名在一个语句中说明时,应该按字母顺序排列这些变量;,如果设计时使用了复杂的数据结构,应该用注释说明实现该数据结构的方法和特点。,3.语句构造:语句分行、分段、复杂条件语句规则、嵌套规则等等。,4.输入/输出:数据检验、格式、合法性等等,5.效率,A,程序运行时间,B,存储器效率,C,输入/输出效率,程序设计工具实例:,Visual C,运用,Visual C+,开发工具需要掌握:,C,语言特点、语法;,Windows,编程基础;,MFC,相关知识;,Visual C,集成开发工具环境的使用;,一、,C,语言特点、语法:,C+,语言是在,C,语言的基础是扩展而成的,两种语言的基本语法和语义是相同。,C+,中加入了面向对象程序设计(,OOP),的特征:,封装性,:通过“类”把属性和函数组合在一起。,继承性,:派生类可从先前定义的基类中继承函数和属性。,多态性,:一个函数名,由不同的对象解释执行,可得到不同的执行效果。,二、,Windows,编程基础:,API,:,API,是,Windows,应用程序编程接口。,API,是一个程序内(或一组相关程序内)的一组函数调用,程序员用它创建其他程序。,程序员不必知道函数内部,只要知道,API,的函数原型及返回值。,API,的函数原型及返回值形式可由相关的技术规范资料获得。,现在的,Win32 API,中,核心部分依靠三个主要组件提供,Windows,的大部分函数,这三个组件分别是:,USER32.DLL,;,GDI32.DLL,;,KERNEL32.DLL,。,Windows,消息机制,:,1)基于消息的事件驱动,消息可以是由硬件发来的(存于系统队列),也可以由,Windows,系统和应用程序发来(存于程序队列中);,每一个,Windows,程序在不停的捕捉各种消息,并进行处理;,每个窗口都必须有一个窗口函数,来负责消息的判断与处理。,2)窗口函数对消息的处理,窗口函数是一个回调函数,可以处理收到的消息,在程序中不需要用户显式调用。,该窗口函数的形式通常为:,WndProc(),每个窗口类必须在初始化时指定一个窗口函数。,三、,MFC,:,MFC,,即,Microsoft,基本类,该类库封装了,SDK(,软件开发工具包)结构、功能及应用程序框架内部技术。,它提供了许多可以重用的类,使得,Windows,程序员避免了许多重复性工作。,四、,Visual C,集成开发工具环境,1)开发工具的使用;,2)掌握,Win32,程序开发流程;,一个,win32,程序由两大块组成:,程序代码,;,用户接口资源,。,用户接口资源,:菜单,对话框,图标,光标等;,这些资源的实际内容(二进制代码)由各种工具产生,并以各种扩展名的文件存在;,资源描述文件(*,.,rc,),中对用户接口资源进行描述;,RC,编辑器(,RC.exe,),根据该资源描述文件(*,.,rc,),将所有用户接口资源集中构造一个*,.,RES,文件;,*,.,RES,文件与程序代码结合起来,构成一个,Win32,程序。,关于函数库和头文件,:,动态链接库,:应用程序调用的,API,函数在“执行期间”才链接上的函数库,,,扩展名可以是.,dll,,也可以是,.exe、.fon、.mod、.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,)把,Pareto,原理应用到软件测试中;,Pareto,原理说明测试发现的错误中的,80%,很可能是由程序中,20%,的模块造成的。,4,)应该从“小规模”测试开始,并逐步进行“大规模”测试;,5,)穷举测试是不可能的;,穷尽测试,:包含所有可能情况的测试称为穷尽测试。,程序,main(),a2,a1,a3,b,输入,输出,a1、a2、a3:,Integer 16bits,输入数据的穷尽测试组合:,2,16,2,16,2,16,2,48,3 10,14,6,)为了达到最佳测试效果,应该由独立的第三方从事测试工作。,黑盒测试,:,如果已经知道软件应该具有的功能,可以通过测试来检验是否每个功能都能正常使用,这种测试称黑盒测试。也称功能测试。,7.2.3 测试方法,白盒测试,:,也称结构测试。,如果知道软件内部工作过程,可以通过测试来检验软件内部动作是否按照规格说明书的规定正常进行,这种测试称为白盒测试。,1.,模块测试,模块测试又称单元测试,它把每个模块作为单独的实体来测试。,2.,子系统测试,子系统测试是把经过单元测试的模块放在一起形成一个子系统来测试。,7.2.4 软件测试的步骤,3.,系统测试,系统测试是把经过测试的子系统装配成一个完整的系统来测试。,4.,验收测试,验收测试把软件系统作为单一的实体进行测试(利用用户的实际数据测试)。,5.,平行运行,平行运行是同时运行新开发出来的系统和将被它取代的旧系统,以便比较新旧两个系统的处理结果。,7.2.5,测试阶段的信息流,测试,评价,调试,可靠性模型,软件配置,测试配置,测试结果,预期结果,错误,错误率数据,正确,可靠性预测,图7.1 测试阶段的信息流,7.3 单元测试,单元测试的一般方法是:,首先通过编译系统检查并改正程序中所有的语法错误;,然后用详细设计模块说明为指南,对重要的控制路径进行测试,以便发现模块内部的错误。,通常,单元测试使用白盒测试方法。,1),模块接口,应该对穿过模块接口的数据流进行检测,以保证正确的输入和输出。,2),局部数据结构,这是错误的主要来源,应该设计相应的测试用例,以便发现数据结构方面的错误。,7.3.1 测试重点,3),重要的执行路径,由于不可能进行穷尽测试,因此选择测试路径是非常关键的。,4,),出错处理通路,5),边界条件,审查小组:,1,)组长;,2,)程序的设计者;,3,)程序的编写者;,4,)程序的测试者。,7.3.2 代码审查,7.3.3 计算机测试,由于软件模块不是一个独立的系统,不能独立运行,要依靠其他模块调用,或需要调用其他模块。,因此,必须要为测试的单元开发,驱动程序,或,存根程序,。,1),驱动程序,相当于一个“主程序”,用来把测试数据传送给被测试的模块,并打印有关结果。,2,),存根程序,用来代替被测试模块所调用的模块,相当于,“,虚拟子程序,”,。,如,测试,B,模块,设计了,A,模块和,C,模块。,由,A,负责传送测试数据,由,C,负责模拟被,B,调用的模块。,C,模块可能没有,这取决于,B,有没有调用其他程序。,A、C,都是一次性程序,只在测试时临时使用,应尽量设计得简单一些,以节省费用和时间。,B,A,C,被测试模块,驱动模块,存根模块,例:,正文加工系统,输入,1.0,输出,2.0,编辑,3.0,加标题,4.0,存储,5.0,检索,6.0,编目录,7.0,格式化,8.0,添加,3.1,删除,3.2,插入,3.3,修改,3.4,合并,3.5,列表,3.6,图7.2 正文加工系统,TEST DRIVER,编辑,3.0,TEST STUB,对“编辑”功能的测试:,7.4 集成测试,集成测试是组装软件的系统化技术,它将经过单元测试的模块联系在一起进行测试。,由模块组装成程序时有两种方法:,1),非渐增式测试方法,先分别测试每个模块,再把所有模块按设计要求放在一起结合成所要的程序。,2,),渐增式测试方法,每次增加一个待测试模块,把它同已经测试好的那些模块结合起来进行测试,反复进行直到完成所有模块测试的方法。,使用渐增式测试方法把模块结合到软件系统中去时,有,自顶向下,和,自底向上,两种集成方法。,自顶向下,集成是一种递增的装配软件结构的方法,这种方法应用非常广泛。它需要存根程序,但是不需要驱动程序。,7.4.1 自顶向下集成,这种方法的思想是:从主控模块(主程序)开始,沿软件的控制层次向下移动,逐渐把各个模块结合起来。,在自顶向下结合方法中,如何将所有模块组装到软件结构中,又有两种方法:,1),深度优先策略,先组装软件结构的一条,主控制通路,上的所有模块,选择哪条主控制通路,具有较大的任意性。,如图,如果选取左通路,就先把模块,M1、M2、M5,结合起来测试,然后结合模块,M8、M6,,再构造中央和右侧的控制通路。,M1,M2,M3,M4,M6,M5,M7,M8,图7.3 自顶向下结合实例,2),宽度优先策略,沿着软件结构水平地移动,把处于同一个层次的所有模块组装起来。,如图,首先结合,M2、M3、M4,和主控模块,M1,,然后结合下一个控制层次中的模块,M5、M6,和,M7,,最后结合模块,M8。,M1,M2,M3,M4,M6,M5,M7,M8,图7.3 自顶向下结合实例,自顶向下集成方法的基本过程如下:,1)对主控模块进行测试,测试时用存根程序代替所有直接被主控模块调用的模块;,M1,M2,M3,M4,M6,M5,M7,M8,图7.3 自顶向下结合实例,M1,M2,M3,M4,M6,M5,M7,M8,图7.3 自顶向下结合实例,2)根据选定的结合策略(深度优先或宽度优先),每次用一个实际模块代替一个存根程序(新结合的模块往往又需要新的存根程序);,3)每结合一个模块,就测试一个;,4)为保证不引入新的错误,需要进行回归测试,即重复以前进行过的部分或全部测试;,5,)重复回到第二步,直到构成整个软件结构。,M1,M2,M3,M4,M6,M5,M7,M8,图7.3 自顶向下结合实例,自底向上集成方法是从软件结构最底层模块开始进行组装和测试,它与自顶向下结合方法相反,需要驱动程序,不需要存根程序。,7.4.2 自底向上集成,自底向上集成方法的基本过程如下:,1)把底层模块组合成实现一个特定软件子功能的族,如图族1、2、3。,Mc,Ma,Mb,D2,D1,D3,族1,族2,族3,图7.4 自底向上实例,2)为每个模块设计一个驱动程序,作为
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!