1、软件工程导论 - 信计13-1 韩慧珊第一章 软件工程学概述1、软件危机软件危机:是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。软件危机包含下述两个方面的问题:1.如何开发软件,以满足对软件日益增长的需求。 2.如何维护数量不断膨胀的已有软件。2、软件工程及软件工程的特性1.软件工程关注于大型程序的构造。2.软件工程的中心课题是控制复杂性。3.软件经常变化。4.开发软件的效率非常重要。5.和谐地合作是开发软件的关键。6.软件必须有效地支持它的用户。7.在软件工程领域中通常由具有一种文化背景的人替具有另一种文化背景的人创造产品。 3、软件工程的基本原理1.用分阶段的生命周期计划严格管
2、理。2.坚持进行阶段评审。3.实行严格的产品控制4.采用现代程序设计技术。5.结构应能清楚的审查。6.开发小组的人员应该少而精。7.承认不断改进软件工程实践的必要性。 4、软件工程方法学 包含3个要素:方法、工具和过程。使用最广泛的分别是传统方法学和面向对象方法学。5、软件生存周期3个时期:软件定义、软件开发和运行维护。软件定义:问题定义、可行性研究和需求分析。开发时期:总体设计,详细设计,编码和单元测试,综合测试。前两个阶段称为系统设计,后 两个称为系统实现。维护时期的主要任务是使软件持久的满足用户的需求。6、瀑布模型模型严格按照软件生存周期各个阶段来进行开发,上一阶段的输出即是下一阶段的输
3、入,并强调每一阶段的严格性。它规定了各阶段的任务和应提交的成果及文档,每一阶段的任务完成后,都必须对其阶段性产品(主要是文档)进行评审,通过后才能开始下一阶段的工作。因此,它是一种以文档作为驱动的模型。 瀑布模型特点:1.阶段间具有顺序性和依赖性。 2.推迟实现的观点。3.质量保证的观点。(以下看一下) 快速原型:是快速建立起来的可以在计算机上运行的程序,它所能完成的功能往往是最终产品能完成功能的一个子集。 增量模型:它分批地逐步向用户提交产品,整个软件产品被分解成许多个增量构件,开发人员一个构件一个构件地向用户提交产品。 螺旋模型:基本思想是使用原型及其他方法来尽量降低风险。理解这种模型的一
4、个简单方法,是把它看作在每个阶段之前都增加了风险分析过程的快速原型模型。(使用于内部开发的大规模软件项目) 喷泉模型:是典型的面向对象的软件过程模型之一。第二章 可行性研究1、可行性研究的任务 主要任务; 可行性研究的3个方面; 1:首先需要进一步分析和澄清问题定义。 2:在澄清了问题之后分析员应该导出系统的逻辑模型,然后从系统逻辑模型出发,探索若干种可选择的主要解法即系统实现方案。 一般说来,至少应该从下述3个方面研究每种解法的可行性:1)技术可行性 2)经济可行性 3)操作可行性 3:分析员应该为每个可行的解法制定一个粗略的实现进度。2、 可行性研究的步骤1. 复查系统规模和目标。2.研究
5、目前正在使用的系统3.导出新系统的高层逻辑模型4.进一步定义问题 5.导出和评价供选择的解法 6.推荐行动方针 7.草拟开发计划 8.书写文档提交审查3、系统流程图系统流程图是概括地描绘物理系统的传统工具。4、数据流图是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换。在数据流图中没有任何具体的物理部件,它只是描绘数据在软件中流动和被处理的逻辑过程。数据流图是系统逻辑功能的图形表示,容易理解。5、数据字典数据字典:是关于数据的信息的集合,也就是对数据流图中包含的所有元素的定义的集合。 数据字典的作用:在软件分析和设计的过程中给人提供关于数据的描述信息。6、成本效益分析 1
6、 .货币的时间价值设年利率i,现存p元,n年后得到的钱:N年后收入F元,这些钱现在价值:2 投资回收期:就是累积的经济效益等于最初投资所需要的时间。3 纯收入:就是在整个生命周期之内系统的累积经济效益(折合成现在值)与投资之差。4 投资回收率: 第三章 需求分析1、需求分析的任务1 确定对系统的综合要求 ,2 分析系统的数据要求,3 导出系统的逻辑模型,4 修正系统开发计划2、与用户沟通获取需求的方法1 访谈,2 面向数据流自顶向下求精,3 简易的应用规格说明技术,4 快速建立软件原型3、实体-联系图P 64 图3,。24、状态转换图定义:状态转换图通过描绘系统的状态及引起系统状态转换的事件,
7、来表示系统的行为。此外,状态图还指明了作为特定事件的结果系统将做哪些动作(例如处理数据)。4、层次方框图(在需求分析阶段使用)定义:层次方框图用树形结构的一系列多层次的矩形框秒回数据的层次结构5、Warnier图(在需求分析阶段使用)Warnier图用树形结构描绘信息,但是这种图形工具比层次方框图提供了更丰富的描绘手段,并且可以表明信息的逻辑组织。6、IPO图(在需求分析阶段使用)IPO图是输入,处理,输出图的简称,能够方便的描绘输入数据,对数据的处理和暑促数据之间的关系。7、验证软件需求从以下四个方面验证:1,一致性 2,完整性 3,现实性 4,有效性第五章 总体设计(概要设计)1、总体设计
8、过程总体设计过程通常由两个主要阶段组成:系统设计阶段,确定系统的具体实现方案;结构设计阶段,确定软件结构。 典型的总体设计过程包括下述9个步骤:1.设想供选择的方案 2.选取合理的方案 3.推荐最佳方案 4.功能分解 5.设计软件结构 6.设计数据库 7.制定测试计划 8.书写文档 9.审查和复审2、设计原理(模块化、抽象、逐步求精、信息隐藏与局部化)1,模块化:就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来够成一个整体,可以完成指定的功能满足用户的需求。2,抽象 3,逐步求精 4,信息隐藏和局部化3、模块独立原理模块独立:模块独立的概念是模块化,抽象,
9、信息隐藏和局部化概念的直接结果。每个模块完成一个相对独立的特定子功能,并且和其他模块之间的关系很简单。模块的独立程度可以由两个定性标准度量,这两个标准分别称为内聚和耦合。耦合衡量不同模块彼此间互相依赖(连接)的紧密程度;内聚衡量一个模块内部各个元素彼此结合的紧密程度。4、耦合和内聚耦合:在软件设计过程中应该追求尽可能松散耦合的系统。 内聚:设计好的软件标准:尽可能做到高内聚。5、启发规则1)改进软件结构提高模块独立性 ;2)模块规划应该适中;3)深度、宽度、扇出和扇入都应适当。一个设计的好的典型性系统的平均扇出通常是3或4,扇出的上限通常是59;4)模块的作用域应该在控制域之内;5)力争降低模
10、块接口的复杂程度;6)设计单入口单出口的模块;7)模块功能应该可以预测 6、描绘软件结构的图形工具(层次图、HIPO图、结构图)看例子7、面向数据流的设计方法 变换流: 定义:信息沿输入通路进入系统同时由外部形式变换成内部形式,进入系统的信息通过变换中心,经加工处理以后再沿输出通路变换成外部形式离开软件系统。当数据流图具有这些特征时,这种信息流就叫做变换流。 设计步骤 1)复查基本系统模型;2)复查并精化数据流图;3)确定数据流图具有变换特性还是事物特性;4)确定输入流和输出流的边界,从此孤立出变换中心;5)完成“第一级分解”;6)完成“第二级分解”;7)使用设计度量和启发式规则对第一次分割得
11、到的软件结构进一步精化。 事务流:定义:数据沿输入通路到达一个处理T,这个处理根据输入数据的类型在若干个动作序列中选出一个来执行,这类数据流称为事务流,这种数据流是“以事务为中心的” 。图5.9 P105 中的处理T称为事务中心,它完成一下任务:1)接收输入数据(输入数据又称为事务) 2)分析每个事务以确定它的类型 3)根据事务类型选取一条活动通路。第六章 详细设计1、结构程序设计结构化程序设计是一种设计程序的技术,它采用自顶向下逐步求精的设计方法和单入口单出口的控制结构。结构化程序设计的特点:1) 整个程序模块化。2) 每个模块只有一个入口和一个出口。3) 每个模块都应能单独执行,且无死循环
12、。4) 采用自顶向下。逐步求精的方法。2、人机界面设计(设计问题、设计过程、人机界面设计指南)设计问题:1)系统响应时间; 2)用户帮助设施;3)出错信息处理; 4)命令交互。 设计过程用户界面设计是一个迭代过程,直至与用户模型和系统假想一致为止。人机界面指南1)一般交互指南:2)信息显示指南;3)数据输入指南3、详细设计工具(过程设计工具)(绘图要求) 程序流程图 盒图(N-S图) PAD图 判定表一张判定表通常由四部分组成,左上部列出所有的条件,左下部为所有可能做的动作,右上部分表示各种条件组合的一个矩阵,右下部分是和每种条件组合相对应的动作,判定表的右半部的每一列实质上是一条规则,规定了
13、与特定的条件组合相对应的动作。 判定树 PDL定义:PDL是一种伪码,它是用正文形式表示数据和处理过程的设计工具。4、面向数据结构的设计方法Jackson图1)顺序结构 ;2)选择结构;3)重复结构Jackson方法5、程序复杂度的度量 McCabe方法1) 流图;2)计算环形复杂度的方法:1、控制流图中区域的数量对应于环形复杂度。2、给定控制流图G的环形复杂度V(G),定义为 V(G) = E-N+2 其中,E是控制流图中边的数量,N是控制流图中的节点数量。3、给定控制流图G的环形复杂度V(G),也可定义为V(G) = P+1 其中,P是控制流图G中判定节点的数量。 Halstead方法第七
14、章 实现1、编码中需要注意的地方A.选择程序设计语言B.编码风格2、软件测试基本知识软件测试目标1)系统测试软件测试是为了发现程序中的错误而执行程序的过程2)好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案3)成功的测试时发现了至今为止尚未发现的错误的测试。软件测试准则P150了解就行软件测试方法测试任何产品都有两种方法: (1) 黑盒测试(又称为功能测试)如果已经知道了产品应该具有的功能,可以通过测试来检验是否每个功能都能正常使用;(2) 白盒测试(又称为结构测试)如果知道产品的内部工作过程,可以通过测试来检验产品内部动作是否按照规格说明书的规定正常进行。软件测试步骤.1模块测试 2
15、.子系统测试 3.系统测试 4.验收测试 5.平行运行:。3、测试阶段的信息流(1)软件配置:包括需求说明书、设计说明书和源程序清单等;(2)测试配置:包括测试计划和测试方案。4、单元测试单元测试集中检测软件设计的最小单元模块。通常,单元测试和编码属于软件过程的同一个阶段。在编写出源程序代码并通过了编译程序的语法检查之后,就可以用详细设计描述作指南,对重要的执行通路进行测试,以便发现模块内部的错误测试重点(1)模块接口:对通过模块接口的数据流进行测试(2)局部数据结构:局部数据结构是常见的错误来源。 (3)重要的执行通路:由于通常不可能进行穷尽测试,因此,在单元测试期间选择最有代表性、最可能发
16、现错误的执行通路进行测试就是十分关键的。(4)出错处理通路(5)边界条件:单元测试中最后的也可能是最重要的任务。5、 计算机测试模块并不是一个独立的程序,因此必须为每个单元测试开发驱动软件和(或)存根软件。通常驱动软件也就是一个“主程序”,它接收测试数据,把这些数据传送给被测试的模块,并且印出有关的结果。存根程序代替被测试的模块所调用的模块,因此存根程序也可以称作“虚拟子程序”。它使用被它代替的模块的接口,可能做最少量的数据操作,印出对入口的检验或操作结果,并且把控制归还给调用它的模块。6、集成测试: 1)自顶向下集成;2)自底向上集成混合策略:1)改进的自顶向下集成;2)混合法7、 确认测试
17、: 8、白盒测试逻辑覆盖(8种逻辑覆盖)1)语句覆盖;2)判定覆盖;3)条件覆盖;4)判定/条件覆盖;5)条件组合覆盖;6)点覆盖;7)边覆盖;8)路径覆盖控制结构测试(基本路径测试)1) 根据过程设计结果画出相应的流图2) 计算流图的环形复杂度3) 确定线性独立路径的基本集合4) 设计可强制执行基本集合中每条路径的测试用例9、黑盒测试等价划分 边界值分析 错误推测 组合数据10、调试 调试也称作纠错,作为作为成功测试的后果出现,也就是说调试时在测试发现错误之后排除错误的过程。第八章 维护1、软件维护的定义软件维护就是在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程。2、软件
18、维护分类改正性维护为改正软件系统中潜藏的错误而进行的活动。适应性维护为适应软件运行环境的变化而修改软件的活动完善性维护根据用户在软件使用过程中提出的建设性意见而进行的维护活动。预防性维护为了进一步改善软件系统的可维护性和可靠性,并为以后的改进奠定基础。第九章 面向对象1、面向对象的几个概念A.对象 对象是现实世界中个体或事物的抽象表示,是其属性和相关操作的封装。属性表示对象的性质,属性值规定了对象所有可能的状态。对象的操作是指该对象可以展现的外部服务。对象的特点(1) 以数据为中心。(2) 对象是主动的。(3) 实现了数据封装。(4) 本质上具有并行性。(5) 模块独立性好。B.类。类表示某些
19、对象在属性和操作方面的共同特征。类是支持继承的抽象数据类型,而对象就是类的实例。C.实例 实例就是由某个特定的类所描述的一个具体的对象。D.消息 消息传递是对象与其外部世界相互关联的唯一途径。对象可以向其它对象发送消息以请求服务,也可以响应其它对象传来的消息,完成自身固有的某些操作,从而服务于其它对象。 E.方法 方法就是对象所能执行的操作,也就是类中所定义的服务。方法描述了对象执行操作的算法,响应消息的方法。 F.属性 属性就是类中所定义的数据,它是对客观世界实体所具有的性质的抽象。类的每个实例都有自己特有的属性值。G.封装 在面向对象的程序中,把数据和实现操作的代码集中起来放在对象内部。H.继承 广义地说,继承是指能够直接获得已有的性质和特征,而不必重复定义它们。I.多态性(polymorphism)在面向对象理论中,多态性的定义是:同一操作作用于不同的类的实例,将产生不同的执行结果,即不同类的对象收到相同的消息时,得到不同的结果。多态性包含编译时的多态性 运行时的多态性两大类。J.重载(overloading)有两种重载:函数重载是指在同一作用域内的若干个参数特征不同的函数可以使用相同的函数名字;运算符重载是指同一个运算符可以施加于不同类型的操作数上面。重载进一步提高了面向对象系统的灵活性和可读性精选文档