1、1、软件危机在计算机软件的开发和维护过程中所遇到的一系列严重问题。几乎所有的软件,都不同程度地存在着这些问题。软件危机主要包括如下两方面的问题: 如何开发软件,满足增长需求; 如何维护软件;2、解决软件软件危机的途径解决软件危机的途径是软件工程。按工程化的原则和方法组织软件开发工作是有效的,是摆脱软件危机的一个主要出路。,第一章 软件工程学概述,3、软件软件是程序、数据及文档的完整集合。其中:程序是能够完成预定功能和性能的可执行的指令序列;数据是使程序能够适当地处理信息的数据结构;文档是开发、使用和维护程序的图文资料。 4、软件工程 软件工程是采用工程的概念、原理、技术和方法来开发与维护软件一
2、门工程学科,从而经济地开发出高质量的软件并有效地维护它。 5、软件工程方法学在软件生命周期全过程中使用的一整套技术方法的集合称为软件工程方法学。,软件工程 第一章,6、方法学三要素? 工程方法学包含3个要素:方法、工具和过程;方法:是完成软件开发的各项任务的技术方法,回答“怎样做”的问题。工具:是为运用方法而提供的自动的或半自动的软件工程支撑环境。过程:是为了获得高质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。,软件工程 第一章,7、传统方法学、面向对象方法学(1)传统方法学(生命周期方法学或结构化范型)强调自顶向下;(2)面向对象方法学强调主动地多次反复迭代;(3)
3、面向对象方法学4个要点:对象;类;继承;消息,软件工程 第一章,8、软件生命周期软件孕育、诞生、成长、成熟、衰亡的生存过程。,软件工程 第一章,软件生命周期,各阶段具体任务: 1.问题定义:必须回答的关键问题是:“要解决的问题是什么?”。 2.可行性研究:阶段回答的关键问题是:“对于上一个阶段所确定的问题有行得通的解决办法吗?” 3.需求分析:“目标系统必须做什么”,确定目标系统必须具备哪些功能。 4.总体设计:必须回答的关键问题是:“概括地说,应该怎样实现目标系统?”总体设计又称为概要设计。 5.详细设计:关键问题是:“应该怎样具体地实现这个系统呢?” 6.编码和单元测试:关键任务是写出正确
4、的容易理解、容易维护的程序模块。 7.综合测试:关键任务是通过各种类型的测试使软件达到预定的要求。 8.软件维护:通过各种必要的维护活动使系统持久地满足用户的需要。,8、软件过程为获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。是软件工程三要素之一的过程。 9、软件生命周期模型 软件过程通常用软件生命周期模型来描述,它规定了把生命周期划分成哪些阶段以及各个阶段执行的顺序,也称为过程模型。 10、典型的生命周期模型瀑布模型、快速原型模型增量模型、螺旋模型喷泉模型,软件工程 第一章,11、瀑布模型、,软件工程 第一章,实际的瀑布模型,传统的瀑布模型,12、快速原型模型,
5、软件工程 第一章,实线箭头表示开发过程 虚线箭头表示维护过程,13、增量模型,软件工程 第一章,增量模型,风险更大的增量模型,14、螺旋模型:增加了风险分析过程的快速原型。,软件工程 第一章,简单得螺旋模型,完整的螺旋模型,15、喷泉模型:面向对象软件开发迭代和无缝的特性,软件工程 第一章,喷泉模型,16、各模型特点 瀑布模型的特点:1.阶段间具有顺序性和依赖性。 2.推迟实现的观点。3.质量保证的观点。 快速原型:是快速建立起来的可以在计算机上运行的程序,它所能完成的功能往往是最终产品能完成功能的一个子集。 增量模型:它分批地逐步向用户提交产品,整个软件产品被分解成许多个增量构件,开发人员一
6、个构件一个构件地向用户提交产品。 螺旋模型:基本思想是使用原型及其他方法来尽量降低风险。理解这种模型的一个简单方法,是把它看作在每个阶段之前都增加了风险分析过程的快速原型模型。(使用于内部开发的大规模软件项目) 喷泉模型:强调的是“迭代”和“无缝“的特性,是典型的面向对象的软件过程模型之一。,复习重点,软件危机 软件工程 软件工程三要素 软件生命周期包含的过程(3个时期、8个阶段)及各过程的任务 瀑布模型 快速还原模型,1、可行性研究的目的:就是用最小的代价在尽可能短的时间内确定问题是否能够解决。必须记住,可行性研究的目的不是解决问题,而是确定问题是否值得去解决。从下述3个方面研究每种解法的可
7、行性:1)技术可行性 2)经济可行性 3)操作可行性其他方面:运行可行性、法律可行性 2、典型的可行性研究有下述一些步骤:1.复查系统规模和目标。 2.研究目前正在使用的系统3.导出新系统的高层逻辑模型 4.进一步定义问题5.导出和评价供选择的解法 6.推荐行动方针 7.草拟开发计划 8.书写文档提交审查。,第二章 可行性研究,3、系统流程图:是概括性地描绘物理系统的传统工具,它的基本思想是用图形符号以黑盒子形式描绘组成系统的每个部件。系统流程图表达的是数据在系统各部件之间流动的情况,而不是对数据进行加工处理的控制过程,因此尽管系统流程图的某些符号和程序流程图的符号形式相同,但是它却是物理数据
8、流图而不是程序流程图。基本符号如下,第二章 可行性研究,库存清单系统的系统流程图,4、数据流图(DFD)是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换。在数据流图中没有任何具体的物理部件,它只是描绘数据在软件中流动和被处理的逻辑过程。基本符号如下:,第二章 可行性研究,附加符号: 星号(*):表示“与”关系; 加号(+):表示“或”关系 异或():表示互斥关系,第二章 可行性研究,5、画数据流图的步骤:(1)从问题描述中提取数据流图的4种成分: 数据的源点/终点 处理:处于静止状态的数据 数据流:处于运动中的数据 数据存储:(2)画基本系统模型(3)细化,描绘系统的主
9、要功能(功能级数据流图)(4)对系统主要功能进一步细化,6、画数据流图举例:,银行计算机储蓄系统的工作过程大致如下:储户填写的存款单或取款单由业务员键入系统,如果是存款则系统记录存款人姓名、住址(或电话号码)、身份证号码、存款类型、存款日期、到期日期、利率及密码(可选)等信息,并印出存单给储户;如果是取款而且存款时留有密码,则系统首先核对储户密码,若密码正确或存款时未留密码,则系统计算利息并印出利息清单给储户。,第一步: 提取数据流图的四种成分:数据源点和终点:业务员、储户处理: (1) 事物处理(2) 处理存款(3)处理取款数据存储: (1) 存款信息 (2) 取款信息 数据流: 事物、存款
10、单、存单密码 、取款单、利息清单,顶层数据流图,第二步:画基本数据流图,功能级数据流图,第三步:画功能级数据流图,细化的数据流图,第四步:对系统主要功能进一步细化,7、数据字典:,数据的信息的集合,也就是对数据流图中包含的所有元素的定义的集合。可行性研究阶段,数据流图与数据字典共同构成系统的逻辑模型。没有数据字典,数据流图就不严格,然而没有数据流图,数据字典也难于发挥作用。数据字典应该由对下列4类元素的定义组成:数据流、数据流分量(数据元素)、数据存储和处理。由数据元素组成数据的方式只有下述3种基本类型:顺序、选择、重复和可选。数据定义符号:= + ( )= 等价于 ;+ 和即连接; 选择一个
11、; 重复 ;( )可选,8、定义数据的方法,数据组成方式(三种基本类型):顺序 选择 重复 附加类型:可选 数据定义符号:= + ( )含义:= 意思是等价于(或定义为);+ 意思是和(即,连接两个分量); 意思是或(即,从方括弧内列出的若干个分量中选择一个),通常用“|”号隔开供选择的分量; 意思是重复(即,重复花括弧内的分量);常常使用上限和下限进一步注释表示重复的花括弧。( ) 意思是可选(即,圆括弧里的分量可有可无)。,电话定义-应用举例,北京某高校可用的电话号码有以下几类:校内电话号码由4位数字组成, 第1位数字不是0;校外电话又分为本市电话和外地电话两类;a)拨校外电话需先拨0,若
12、是本市电话则再接着拨8位数 字(第1位不是0);b)若是外地电话则拨3位区码再拨8位电话号码(第1位不是0)。 请用定义数据字典的方法,定义上述的电话号码。,电话号码=校内电话号码|校外电话号码 校内电话号码=非零数字+ 3 位数字 /后面继续定义 校外电话号码=本市号码|外地号码 本市号码=数字零+8位数字 外地号码=数字零+3位数字+8位数字 非零数字=1|2|3|4|5|6|7|8|9 数字零0 3位数字3数字3 /3至3个数字 8位数字=非零数字+7位数字 7位数字=7数字7 数字0|1|2|3|4|5|6|7|8|9,9、成本/效益分析的目标,正式要从经济角度分析开发一个特定的新系统
13、是否划算,从而帮助客户组织的负责人正确地做出是否投资于这项开发工程的决定。,第二章可行性研究,复习重点:可行性研究的目的 可行性研究的内容数据流图的画法数据字典的实现,第二章 可行性研究,1、需求分析的任务,准确地回答“系统必须做什么”这个问题。而不必研究“如何做”。需求分析的结果,是提供准确完整的软件需求规格说明书。 2、软件系统的综合要求功能需求、 性能需求、可靠性和可用性需求、出错处理需求 接口需求、 约束 、 逆向需求 、 将来可能提出的要求 3、分析系统的数据要求(1)建立数据模型E-R图 (2)描绘数据结构层次方框图和Warnier图(3)数据结构规范化,第三章 需求分析,4、需求
14、分析过程建立三种模型 数据模型:实体-联系图 功能模型:数据流图 行为模型:状态转换图 数据字典是分析模型的核心,第三章 需求分析,5、实体-联系图数据模型中包含3种相互关联的信息:数据对象、数据对象的属性、数据对象彼此间相互连接的关系。联系可分为以下三种类型:一对一,一对多和多对,6、范式:第一范式、第二范式、第三范式,第三章 需求分析,7、状态转换图通过描绘系统的状态及引起系统状态转换的事件,来表示系统的行为。,8、层次方框图用树形结构的一系列多层次的矩形框描绘数据的层次结构。,第三章 需求分析,9、Warnier图Warnier图也用树形结构描绘信息,但是这种图形工具比层次方框图提供了更
15、丰富的描绘手段。,第三章 需求分析,软件产品的Warnier图,10、IPO图是输入、处理、输出图的简称,能够方便地描绘输入数据、对数据的处理和输出数据之间的关系。,第三章 需求分析,主文件更新处理的IPO图,第三章 需求分析,复习重点:需求分析的任务 需求分析阶段建立3种模型:数据模型功能模型行为模型实体-联系图(E-R图)的画法,第四章 形式化说明技术,第五章 总体设计,1、总体设计的目的,“概括地说,系统应当如何实现”,因此总体设计又称为概要设计或者初步设计。,2、总体设计的过程,由两个主要阶段组成: 系统设计阶段,确定系统的具体实现方案:包括:设想供选择的方案、选取合理的方案、推荐最佳
16、方案。 结构设计阶段,确定软件结构:包括:功能分解、设计软件结构、设计数据库、制定测试文档、书写文档、审查和复查。,3、模块,是由边界元素限定的相邻程序元素的序列,而且有一个总体标识符代表它。,第五章 总体设计,4、模块化,就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来够成一个整体,可以完成指定的功能满足用户的需求。每个程序都相应地有一个最适当的模块数目M,使得系统的开发成本最小。,5、模块化的作用,模块化可以使软件结构清晰,不仅容易设计也容易阅读和理解; 模块化使软件容易测试和调试,因而有助于提高软件的可靠性; 模块化能够提高软件的可修改性;模块化也有
17、助于软件开发工程的组织管理。,第五章 总体设计,6、抽象,抽象就是抽出事物本质特性而暂时不考虑细节。是人类处理复杂问题的基本方法之一,7、逐步求精,为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。,8、信息隐藏,设计和确定模块,使得一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说,是不能访问的。,9、局部化,指把一些关系密切的软件元素物理地放得彼此靠近。显然,局部化有助于实现信息隐藏。,第五章 总体设计,10、模块独立性,使得每个模块完成一个相对独立的特定子功能,并且和其他模块之间的关系很简单。 即功能专一,模块之间无过多的相互作用的模块。,11、模块独立程度的两个定性标准
18、度量,两个标准分别称为内聚和耦合。,12、耦合,是对一个软件结构内不同模块之间互连程度的度量。耦合要低,即每个模块和其他模块之间的关系要简单;,13、内聚,是衡量一个模块内部各个元素彼此结合的紧密程度。内聚要高,每个模块完成一个相对独立的特定子功能。理想内聚的模块只做一件事情。,14、耦合的种类(6种),(1) 非直接耦合/完全独立:两个模块中的每一个都能独立地工作而不需要另一个模块的存在; (2)数据耦合:两个模块彼此间通过参数交换信息,而且交换的信息仅仅是数据; (3)控制耦合:两个模块彼此间传递的信息中有控制信息; (4)特征耦合:把整个数据结构作为参数传递而被调用的模块只需要使用其中一
19、部分数据元素时,就出现了特征耦合; (5)公共环境耦合:两个或多个模块通过一个公共数据环境相互作用时,它们之间的耦合称为公共环境耦合; (6)内容耦合:最高程度的耦合是内容耦合。如果出现下列情况之一,两个模块间就发生了内容耦合:一个模块访问另一个模块的内部数据;一个模块不通过正常入口转到另一个模块的内部;两个模块有一部分程序代码重叠;一个模块有多个入口。 设计原则:尽量使用数据耦合,少用控制耦合和特征耦合,限制公共环境耦合的范围,完全不用内容耦合。,15、内聚的种类(7种),(1)偶然内聚:一个模块完成一组任务,这些任务彼此间即使有关系,关系也是很松散的,就叫做偶然内聚。 (2)逻辑内聚:一个
20、模块完成的任务在逻辑上属于相同或相似的一类,则称为逻辑内聚。 (3)时间内聚:一个模块包含的任务必须在同一段时间内执行,就叫时间内聚。 (4)过程内聚:一个模块内的处理元素是相关的,而且必须以特定次序执行,则称为过程内聚。 (5)通信内聚:模块中所有元素都使用同一个输入数据和(或)产生同一个输出数据,则称为通信内聚。即在同一个数据结构上操作。 (6)顺序内聚:一个模块内的处理元素和同一个功能密切相关,而且这些处理必须顺序执行,则称为顺序内聚。 (7)功能内聚:如果模块内所有处理元素属于一个整体,完成一个单一的功能,则称为功能内聚。功能内聚是最高程度的内聚。高内聚:功能内聚 、顺序内聚 中内聚:
21、通信内聚 、过程内聚低内聚:时间内聚 、逻辑内聚、偶然内聚,15、启发性规则(7条),(1)改进软件结构提高模块独立性:通过模块分解或合并,降低耦合提高内聚。 (2)模块规模应该适中:过大的模块往往是由于分解不充分,过小的模块将导致模块数目过多将使系统接口复杂。 (3)深度、宽度、扇出和扇入都应适当:深度:软件结构中控制的层数;宽度:软件结构内同一个层次上的模块总数的最大值;扇出:一个模块直接控制(调用)的模块数目;扇入:有多少个上级模块直接调用它。,15、启发性规则(7条),(4)模块的作用域应该在控制域之内: 模块的作用域:定义为受该模块内一个判定影响的所有模块的集合。 模块的控制域:是这
22、个模块本身以及所有直接或间接从属于它的模块的集合 。,(5)力争降低模块接口的复杂程度。 (6)设计单入口单出口的模块。 (7)模块功能应该可以预测:功能可预测:如果一个模块可以当做一个黑盒子,只要输入的数据相同就产生同样的输出,这个模块的功能就是可以预测的。,16、层次图(H图),层次图用来描绘软件的层次结构。很适于在自顶向下设计软件的过程中使用。 与层次方框图的区别是:层次方框图描绘的是数据结构。,17、HIPO图,HIPO图是 “层次图+ 输入 / 处理/输出图”的英文缩写。为了能使HIPO图具有可追踪性,在H图(层次图)里除了最顶层的方框之外,每个方框都加了编号。和H图中每个方框相对应
23、,应该有一张IPO图描绘这个方框代表的模块的处理过程。,18、面向数据流的设计方法,面向数据流的设计方法可以把数据流图变换成软件结构。通常所说的结构化设计方法(简称SD方法),也就是基于数据流的设计方法。,19、信息流有两种类型,变换流,事务流,20、变换分析,把具有变换流特点的数据流图按预先确定的模式映射成软件结构。,21、变换分析设计步骤,(1)复查基本系统模型:确保系统的输入数据和输出数据符合实际。 (2)复查并精化数据流图:确保数据流图给出了正确的逻辑模型,使数据流图中每个处理都代表一个相对独立的子功能。 (3)确定数据流图具有变换特性还是事务特性。 (4)确定输入流和输出流的边界,从
24、而孤立出变换中心。,21、变换分析设计步骤,(5)完成“第一级分解”。最顶层的控制模块协调下述从属的控制功能。输入信息处理控制模块Ca,协调对所有输入数据的接收;变换中心控制模块Ct,管理对内部形式的数据的所有处理操作;输出信息处理控制模块Ce,协调输出信息的产生过程。,21、变换分析设计步骤,(6)完成“第二级分解”。输入部分、转换部分、输出部分分别映射成接收模块、处理模块、输出模块。从变换中心的边界开始沿输入通路向外移动,把输入通路中每个处理映射成软件结构中Ca控制下的一个低层模块;,然后沿输出通路向外移动,把输出通路中每个处理映射成直接或间接受模块Ce控制的一个低层模块;最后把变换中心内
25、的每个处理映射成受Ct控制的一个处理模块。,21、变换分析设计步骤,(6)完成“第二级分解”,(7)使用设计度量和启发式规则对第一次分割得到的软件结构进一步精化,22、事物分析,23、举例,根据储蓄系统的数据流图利用面向数据流的设计方法设计其软件结构,23、举例,根据储蓄系统的数据流图利用面向数据流的设计方法设计其软件结构,第五章 总体设计,复习重点:总体设计的目的模块化模块独立及度量标准耦合、内聚及其种类启发性规则面向数据流的设计方法,第六章 详细设计设计,1、总体设计的目的,确定应该怎样具体地实现所要求的系统。,2、结构程序设计,经典的结构程序设计:只允许使用顺序、IF-THEN-ELSE
26、型分支和DO-WHILE型循环这3种基本控制结构;扩展的结构程序设计:如果除了上述3种基本控制结构之外,还允许使用DO-CASE型多分支结构和DO-UNTIL型循环结构;修正的结构程序设计:再加上允许使用LEAVE(或BREAK)结构。,描述程序处理过程的工具叫程序设计工具,分为图形、表格、和语言3类,必须提供对设计的无歧义的描述。包括:程序流程图(程序框图)、盒图(N-S图)、PAD图、判定表、判定树、过程设计语言(伪码)。,3、过程设计工具,4、程序流程图,程序流程图又称为程序框图,它是历史最悠久、使用最广泛描述过程设计的方法。也是用的最混乱的一种方法。,5、盒图(N-S图),出于要有一种
27、不允许违背结构程序设计精神的图形工具的考虑,Nassi和Shneiderman提出了盒图,又称为N-S图。,6、PAD图,是问题分析图(problem analysis diagram)的英文缩写,它用二维树形结构的图来表示程序的控制流,将这种图翻译成程序代码比较容易。,7、判定表,判定表却能够清晰地表示复杂的条件组合与应做的动作之间的对应关系。,8、判定树,是判定表的变种,用树形的方式清晰地表示复杂的条件组合与应做的动作之间的对应关系。 画判定树时分枝的次序可能对最终画出的判定树的简洁程度有较大影响。,9、过程设计语言,过程设计语言(PDL)也称为伪码,它是用正文形式表示数据和处理过程的设计
28、工具。,伪代码的基本控制结构: 简单陈述句结构:避免复合语句。 判定结构:IF_THEN_ELSE或CASE_OF结构。 选择结构:WHILE_DO或REPEAT_UNTIL结构,例题:某程序流程图如下图所示,请分别用N-S图和PAD图表示。,a,j,b,i,c,e,d,x2,x3,x4,f,g,h,xi=,PAD图:,x8,a,j,x1,b,T,F,f,x6,T,F,x7,i,g,h,CASE xi,x2,x4,x3,x5,c,d,e,N-S图:,例题: 某校制定了教师的讲课课时津贴标准。 对于各种性质的讲座,无论教师是什么职称,每课时津贴费一律是50元; 对于一般的授课,则根据教师的职称来
29、决定每课时津贴费:教授30元,副教授25元,讲师20元,助教15元。 请分别用判定表、判定树表示津贴标准。,10、面向数据结构的设计方法,面向数据结构的设计方法的根据数据结构最终得出对程序处理过程的描述。最适合在详细阶段使用。,11、Jackson方法,面Jackson结构程序设计方法由5个步骤组成: (1) 分析并确定输入数据和输出数据的逻辑结构,用Jackson图描绘数据结构。 (2) 找出输入数据结构和输出数据结构中有对应关系的数据单元。 (3) 用下述规则从描绘数据结构的Jackson图导出描绘程序结构的Jackson图:第一,为每对有对应关系的数据单元,按照它们在数据结构图中的层次,
30、在程序结构图的相应层次画一个处理框(层次不同时与图中层次低的那个对应);第二,根据输入数据结构中剩余的每个数据单元所处的层次,在程序结构图的相应层次分别为它们画上对应的处理框;第三,根据输出数据结构中剩余的每个数据单元所处的层次,在程序结构图的相应层次分别为它们画上对应的处理框。改进的Jackson图规定在构成顺序结构的元素中不能有重复出现或选择出现的元素,因此可能需要增加中间层次的处理框。 (4) 列出所有操作和条件(包括分支条件和循环结束条件),并且把它们分配到程序结构图的适当位置。 (5) 用伪码表示程序。,12、程序复杂程度的定量度量,定量度量程序复杂程度: McCabe方法、Hals
31、tead方法。,13、McCabe方法,根据程序控制流的复杂程度定量度量程序的复杂程度,这样度量出的结果称为程序的环形复杂度。 为了突出表示程序的控制流,通常使用流图。,14、计算环形复杂度的方法,有了描绘程序控制流的流图之后,可以用下述3种方法中的任何,第六章 详细设计,复习重点:程序的3种基本控制结构;程序流程图、N-S图(盒图)、PAD图的基本符号会画程序流程图、N-S图、PAD图和判定表、判定树计算环形复杂度的方法,第七章 实现,1、软件实现,通常把编码和测试统称为实现。 所谓编码:就是把软件设计结果翻译成用某种程序设计语言书写的程序。 源程序代码的逻辑简明清晰、易读易懂是好程序的一个
32、重要标准。 测试的目的:就是在软件投入生产性运行之前,尽可能多地发现软件中的错误。,2、软件测试的目标,测试是为了发现程序中的错误而执行程序的过程; 好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案; 成功的测试是发现了至今为止尚未发现的错误的测试。 注意: 测试决不能证明程序是正确的。 即使经过了最严格的测试之后,仍然可能还有没被发现的错误潜藏在程序中。 测试用例应由测试输入数据和与之对应的预期输出结果这两部分组成。 穷举测试是不可能的。,3、软件测试方法,(1)黑盒测试(功能测试): 把程序看作一个黑盒子; 完全不考虑程序的内部结构和处理过程; 是在程序接口进行的测试。,(2)白盒
33、测试(结构测试): 把程序看成装在一个透明的盒子里; 测试者完全知道程序的结构和处理算法; 按照程序内部的逻辑测试程序,检测程序中的主要执行通路是否都能按预定要求正确工作。,白盒测试、黑盒测试都不可能实现穷尽测试:,4、软件测试步骤,模块测试、子系统测试、系统测试、验收测试、平行运行 (1)模块测试(单元测试)模块测试又称单元测试,它把每个模块作为单独的实体来测试。保证每个模块作为一个单元能正确运行;发现的往往是编码和详细设计的错误。单元测试主要使用白盒测试技术。 (2)子系统测试把经过单元测试的模块放在一起形成一个子系统来测试;着重测试模块的接口。 (3)系统测试把经过测试的子系统装配成一个
34、完整的系统来测试;发现的往往是软件设计编码中的错误,也可能发现需求说明中的错误;不论是子系统测试还是系统测试,都兼有检测和组装两重含义,称为集成测试。 (4)验收测试(确认测试) 把软件系统作为单一的实体进行测试;它是在用户积极参与下进行的,而且可能主要使用实际数据(系统将来要处理的信息)进行测试; 发现的往往是系统需求说明书中的错误。验收测试也称为确认测试。 (5)平行运行:同时运行新开发出来的系统和将被它取代的旧系统;,6、驱动程序、存根程序,单元测试可以应用人工测试和计算机测试这样两种不同类型的测试方法;在计算机测试中,模块不是一个独立的程序,不能独立运行;它可能调用其它模块或被其它模块
35、调用。因此必须为每个单元测试开发驱动程序和(或)存根程序。 驱动程序是一个“主程序”,它接收测试数据,传送给被测试的模块。 存根程序代替被测试的模块所调用的模块。相当于“虚拟子程序”,7、集成测试的集成策略,模块组装成程序时有两种方法: 1)非渐增式测试方法:先分别测试每个模块,再把所有模块按设计要求放在一起结合成所要的程序。 2)渐增式测试:把下一个要测试的模块同已经测试好的那些模块结合起来进行测试,测试完以后再把下一个应该测试的模块结合进来测试。 当使用渐增方式把模块结合到程序中去时,有自顶向下和自底向上两种集成策略。 当使用自顶向下集成时有深度优先和宽度优先的策略。,7、回归测试,回归测
36、试:是指重新执行已经做过的测试的某个子集,以保证测试过程中的变化没有带来非预期的副作用。 回归测试就是用于保证由于调试或其他原因引起的变化,不会导致非预期的软件行为或额外错误的测试活动。,8、Alpha和Beta测试,Alpha 测试由用户在开发者的场所进行,并且在开发者对用户的“指导”下进行测试,是在受控的环境中进行的, Beta 测试由软件的最终用户们在一个或多个客户场所进行。开发者通常不在测试的现场,Beta测试是软件在开发者不能控制的环境中的“真实”应用。,9、 白盒测试技术,10、逻辑覆盖,(1)语句覆盖:选择足够多的测试数据,使被测程序中每个语句至少执行一次。 (2)判定覆盖 :不
37、仅每个语句必须至少执行一次,而且每个判定的每种可能的结果都应该至少执行一次。比语句覆盖强,但对程序逻辑的覆盖程度仍不高。 (3)条件覆盖 :不仅每个语句至少执行一次,而且使判定表达式中的每个条件都取到各种可能的结果。判定覆盖不一定包含条件覆盖,条件覆盖也不一定包含判定覆盖。 (4)判定/条件覆盖 :使得判定表达式中的每个条件都取到各种可能的值,每个判定表达式也都取到各种可能的结果。有时判定/条件覆盖也并不比条件覆盖更强。 (5)条件组合覆盖 :要求选取足够多的测试数据,使得每个判定表达式中条件的各种可能组合都至少出现一次。条件组合覆盖标准的测试数据并不一定能使程序中的每条路径都执行到。 (6)
38、 点覆盖:程序执行路径至少经过流图的每个结点一次。(语句覆盖标准相同) (7) 边覆盖:使得程序执行路径至少经过流图中每条边一次。(判定覆盖一致) (8) 路径覆盖:选取足够多测试数据,使程序的每条可能路径都至少执行一次(如果程序图中有环,则要求每个环至少经过一次)。,语句 覆盖,判 定 覆 盖,条 件 覆 盖,判定/条件覆盖,条件组合覆盖,路径覆盖,点覆盖,边覆盖,11、控制结构测试,(1)基本路径测试 (2)条件测试 (3)循环测试,12、黑盒测试技术,(1)等价划分 (2)边界值分析 (3)错误推测,13、等价划分,等价划分是一种黑盒测试技术,把程序的输入域划分成若干个数据类,每类中的一
39、个典型值在测试中的作用与这一类中所有其他值的作用相同。使用等价划分法设计测试方案首先需要划分输入数据的等价类。常常还需要分析输出数据的等价类,以便根据输出数据的等价类导出对应的输入数据等价类。,14、等价划分原则,如果规定了输入数据的个数,则类似地也可以划分出一个有效的等价类和两个无效的等价类。如果规定了输入数据的一组值,而且程序对不同输入值做不同处理,则每个允许的输入值是一个有效的等价类,此外还有一个无效的等价类(任一个不允许的输入值)。如果规定了输入数据必须遵循的规则,则可以划分出一个有效的等价类(符合规则)和若干个无效的等价类(从各种不同角度违反规则);如果规定了输入数据为整型,则可以划
40、分出正整数、零和负整数等3个有效类;如果程序的处理对象是表格,则应该使用空表,以及含一项或多项的表。,15、等价划分设计测试方案时步骤,为每一个等价类规定一个唯一编号;设计一个新的测试方案以尽可能多地覆盖尚未被覆盖的有效等价类,重复这一步骤直到所有有效等价类都被覆盖为止;设计一个新的测试方案,使它覆盖一个而且只覆盖一个尚未被覆盖的无效等价类,重复这一步骤直到所有无效等价类都被覆盖为止。 注意,通常程序发现一类错误后就不再检查是否还有其他错误,因此,应该使每个测试方案只覆盖一个无效的等价类。,例子: 某城市的电话号码由3个部分组成: 地区码空白或四位数字; 前缀 非0或1开头的四位数字; 后缀
41、四位数字。使用等价类划分方法进行测试用例设计。,16、边界值分析,验表明,处理边界情况时程序最容易发生错误。 使用边界值分析方法设计测试方案首先应该确定边界情况。 选取的测试数据应该刚好等于、刚刚小于和刚刚大于边界值。 通常设计测试方案时总是联合使用等价划分和边界值分析两种技术。,例:测试计算平方根的函数 :输入:实数、输出:实数 需求说明:当输入一个0或比0大的数的时候,返回其正平方根;输入一个小于0的数时,显示错误信息”输入值小于0非法”并返回0; 划分(1):边界为0和最大正实数;划分(2):边界为最小负实数和0。由此得到以下测试用例: a、输入 最小负实数 b、输入 绝对值很小的负数
42、c、输入 0 d、输入 绝对值很小的正数 e、输入 最大正实数,17、调试,调试是在测试发现错误之后排除错误的过程。 有下列3种调试途径可以采用:蛮干法回溯法原因排除法 : 对分查找法 归纳法 演绎法,17、软件可靠性,程序在给定的时间间隔内,按照规格说明书的规定成功地运行的概率。 平均无故障时间MTTF是衡量软件可靠性的重要指标。,18、软件可用性,软件可用性是程序在给定的时间点,按照规格说明书的规定,成功地运行的概率。,第七章 实现,复习重点:测试的目的、任务、步骤及方法(黑盒测试和白盒测试)Alpha和Beta测试掌握逻辑覆盖法掌握等价划分法和边界值分析法调试的概念,第八章 维护,1、维
43、护定义,所谓软件维护就是在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程。,2、维护的种类,可分为4项活动: 改正性维护 :把诊断和改正错误的过程称为改正性维护。 适应性维护 :为了和变化了的环境适当地配合而进行的修改软件的活动。 完善性维护 :为了满足在用户提出的增加新功能或修改已有功能的要求和一般性的改进要求,需要进行完善性维护。 预防性维护 :“把今天的方法学应用于昨天的系统以满足明天的需要。” 采用先进的软件工程方法对需要维护的软件或软件中的某一部分,主动地进行重新设计、编码和测试。 注意:只有预防性维护是主动的,其他维护都是被动的。,3、软件的可维护性定性,维护人员
44、理解、改正、改动或改进这个软件的难易程度。,4、决定软件的可维护性定性的因素,可理解性 可测试性 可修改性 可移植性 可重用性 文档是影响软件可维护性的决定因素 。,5、软件再工程过程,典型的软件再工程过程模型定义了: 库存目录分析 文档重构 逆向工程 代码重构 数据重构 正向工程 6类活动。,第八章 维护,复习重点:维护的定义维护的类型决定软件的可维护性定性的因素,第九章 面向对象方法学论,1、向对象方法学要点,(1)面向对象的软件系统是由对象组成的,软件中的任何元素都是对象,复杂的软件对象由比较简单的对象组合而成。 (2)把所有对象都划分成各种对象类(简称为类,class),每个对象类都定
45、义了一组数据和一组方法。数据用于表示对象的静态属性,是对象的状态信息。 (3)按照子类(或称为派生类)与父类(或称为基类)的关系,把若干个对象类组成一个层次结构的系统(也称为类等级)。 (4)对象彼此之间仅能通过传递消息互相联系。面向对象(oo)=对象 (objects)+类 (classes)+继承(inheritance)+通信 (communication with messages),2、面向对象方法的优点,与人们习惯的思维方法一致; 稳定性好; 可重用性好; 较易开发大型软件产品; 可维护性好。,3、对象,是客观事物或概念的抽象表述,即对客观存在的事物的描述统称为对象,对象可以是事、
46、物、或抽象概念 ,是将一组数据和使用该数据的一组基本操作或过程封装在一起的实体。 对象的特点: (1) 以数据为中心。 (2) 对象是主动的。 (3) 实现了数据封装。 (4) 本质上具有并行性。 (5) 模块独立性好。,4、类,类就是对具有相同数据和相同操作的一组相似对象的定义。 “类”好比是一个对象模板,用它可以产生多个对象,5、实例,实例就是由某个特定的类所描述的一个具体的对象。,6、消息,对象之间通信的手段,是一个对象要求另一对象执行类中定义的某个操作的规格说明。通常一个消息由三部分组成: 接收消息的对象 消息标识符(即消息名) 零个或多个变元 MyCircle.Show (Green
47、 ),7、其他概念,方法:方法就是对象所能执行的操作,也就是类中所定义的服务。 属性:属性就是类中所定义的数据,它是对客观世界实体所具有的性质的抽象。 封装:封装就是指把对象的数据和实现操作的代码集中起来放在对象内部。 继承:继承是子类自动地共享基类中定义的数据和方法的机制。单重继承:子类仅从一个父类继承属性和方法;多重继承:子类可从多个父类继承属性和方法; 多态性:是指子类对象可以像父类对象那样使用,同样的消息既可以发送给父类对象也可以发送给子类对象。即不同等级的类,可以公用一个方法的名字。不同层次中的每个类却各自按自己的需要来实现这个行为。 重载:有两种重载:1)函数重载:指在同一作用域内
48、的若干个参数特征不同的函数可以使用相同的函数名字。2)运算符重载:指同一运算符可以施加于不同类型的操作数上面。当被操作数类型不同时,运算符的含义是不同的。,8、面向对象建模,面向对象开发软件,需要建立3种形式的模型。 对象模型:描述系统数据结构数据结构。 动态模型:描述系统控制结构执行操作。 功能模型:描述系统功能数值变化。 对象模型始终都是最重要、最基本、最核心。 功能模型指明了系统应该“做什么”;动态模型明确规定了“什么时候做”;对象模型则定义了做事情的实体,即“对谁做”。,9、类图的基本符号,(1)定义类:类的图形符号为长方形、用两条横线把长方形分成上、中、下3个区域,别放类的名字、属性和服务。 (2)定义属性:可见性 属性名 :类型 = 缺省值 性质串 (3)定义方法:可见性 操作名(参数表):返回类型性质串,10、表示关系的符号,(1) 普通关联:,(2) 限定关联:,(3) 关联类: 关联中的每个连接与关联类的一个对象相联系。 关联类通过一条虚线与关联连接。,11、聚集,聚集是一种特殊的关联,聚集表示类与类之间是整体与部分的关系。除了一般聚集之外,还有两种特殊的聚集关系,分别是共享聚集和组合聚集。,