《软件工程-原理方法与应用.ppt》由会员分享,可在线阅读,更多相关《软件工程-原理方法与应用.ppt(139页珍藏版)》请在三一办公上搜索。
1、软件工程-原理、方法与应用,电子教案48学时(32理论+16理论),课程安排,理论内容:基本原理、方法和技术形式:讲授、自学、讨论实践内容:构造一个应用系统(包括分析、设计、编码、测试)形式:分组、分阶段文档、编码、集成,软件工程的主要内容,软件工程的基本概念软件开发模型软件开发各阶段的任务、技术、方法传统方法、面向对象方法软件工程管理软件质量保证软件工程环境,第一章 绪论,软件与软件危机软件工程学传统软件工程和面向对象软件工程软件工程的应用,软件,程序、软件与软件产品独唱-小合唱-合唱-万人大合唱|简单程序 较复杂程序 软件软件定义:软件=程序+数据+文档程序:按事先设计的功能和性能需求执行
2、的指令序列数据:是程序能正常操纵信息的数据结构文档:与程序开发、维护和使用有关的图文材料,软件的特征,软件是逻辑的,而不是物理的软件开发与人关系密切软件开发成本大软件生产是简单的拷贝软件不会磨损和老化软件受环境影响大软件维护易产生新的问题,软件开发的发展过程,计算机应用发展,软件数量多规模大,软件成本高质量低,个体化软件开发方法,软件维护困难,软件危机,软件工程,软件危机,定义计算机软件的开发和维护过程所遇到的一系列严重问题 表现对软件开发成本和进度的估算很不准确用户很不满意质量很不可靠没有适当的文档软件成本比重上升供不应求:软件开发生产率跟不上计算机应用迅速深入的趋势,硬件/软件成本变化趋势
3、,100%,0%,1955,1970,1985,软件技术进步落后于需求增长,软件危机,原因客观:软件本身特点逻辑部件规模庞大主观:不正确的开发方法忽视需求分析错误认为:软件开发=程序编写轻视软件维护,软件危机,解决途径组织管理工程项目管理方法技术措施软件开发技术与方法软件工具,软件工程学的范畴,软件工程学指导计算机软件开发和维护的工程学科 工程管理+开发技术软件开发技术软件开发方法学软件工具软件工程环境软件工程管理软件管理学软件经济学软件度量学,两种程序设计方法,程序设计的两次飞跃结构化程序设计程序=数据结构+算法面向对象程序设计程序=对象+消息,面向过程和面向对象的编码,两类软件工程方法,传
4、统软件工程软件分析 总体设计 详细设计 面向过程的编码 测试 面向对象软件工程软件分析与对象抽取 对象详细设计 面向对象的编码 测试,软件工程的应用,软件工程指导中小型软件软件工程指导大型软件软件工程的成就软件工程的局限,第二章 软件开发模型,传统开发模型瀑布模型(waterfall model)快速原型模型(rapid prototype model)演化开发模型增量模型(incremental model)螺旋模型(spiral model)面向对象开发模型构件集成模型(component integration model)形式化开发模型转换模型(transformational mod
5、el)净室模型(cleanroommodel),软件生存周期,计划时期问题定义可行性分析开发时期需求分析软件设计编码测试运行时期软件维护,瀑布模型,计划时期,开发时期,运行时期,瀑布模型,特点阶段的顺序性和依赖性推迟实现的观点质量保证存在问题不适合需求模糊的系统,快速原型模型,快速原型模型,特点快速开发工具循环低成本种类渐进型抛弃型,增量模型,规格说明,设计,实现和集成,交付客户,规格说明,设计,实现和集成,交付客户,规格说明,设计,实现和集成,交付客户,规格说明,设计,实现和集成,交付客户,增量1,增量2,增量3,增量n,增量模型,增量小而可用的软件特点在前面增量的基础上开发后面的增量每个增
6、量的开发可用瀑布或快速原型模型迭代的思路,螺旋模型,螺旋模型,特点瀑布模型+快速原型+风险分析迭代过程一个螺旋式周期 确定目标,选择方案,选定完成目标的策略 风险角度分析该策略 启动一个开发阶段 评价前一步的结果,计划下一轮的工作,构件集成模型,构件集成模型,特点面向对象基于构件库融合螺旋模型特征支持软件开发的迭代方法 软件重用,面向对象的基本概念,对象Object类Class继承Inheritance消息Message 面向对象对象+类+继承+消息通信,对象Object,客观世界中的实体状态(静态属性 Attributes)操作(动态行为 Methods)对象:=IdentifierMeth
7、od SetData StructureMessage Interface,对象的特点,以数据为中心对象是主动的实现数据封装本质上有并行性模块独立性好,类Class和实例Instance,类相同属性和行为的对象的抽象实例特定类所描述的一个具体对象,子类直接继承父类的数据和操作继承的传递性,单继承、多重继承,继承(Inheritance),家具,桌子,椅子,衣柜,床,椅子的实例,多态性Polymorphism,概念不同类层次共享一个方法名相同的参数特征和返回值类型多种不同实现C+中虚函数实现动态联编,重载Overloading,函数重载同一作用域多个名字相同的函数参数特征不同静态联编运算符重载,
8、消息Message,对象间的交互手段形式:Message:dest,op,paraDestination ObjectOperationParameters,转换模型,转换模型,特点形式化软件开发方法 形式化需求规格说明 变换技术程序自动生成技术 确保正确,净室模型,需求收集,盒结构规约,形式化设计,统计性使用测试,正确性证明,代码生成与检查,测试计划,认证,需求收集,盒结构规约,形式化设计,统计性使用测试,正确性证明,代码生成与检查,测试计划,认证,需求收集,盒结构规约,形式化设计,统计性使用测试,正确性证明,代码生成与检查,测试计划,认证,增量1,增量2,增量n,净室模型,净室思想在分析和
9、设计阶段消除错误在“洁净”状态下实现软件制作形式化盒结构表示分析和设计正确性验证增量模型,小结,软件开发模型是不断发展的各种软件开发模型各有优缺点选用时不必拘泥与某种模型可组合多种模型也可根据实际创建新的模型,第三章 软件需求分析,需求分析的任务与步骤 需求获取的常用方法 分析建模 软件需求说明 结构化分析方法面向对象分析方法,需求分析的任务和步骤,需求分析的任务建立分析模型 编写需求说明 需求分析的步骤需求获取 需求提炼 需求描述 需求验证,需求获取的常用方法,联合分析小组 用户代表、领域专家和系统分析员客户访谈 充分准备,寻找共同语言 循循序渐进、逐步逼近 问题分析与确认 多个来回,分析建
10、模,结构化分析模型面向对象分析模型分析模型描述工具DFD、DD和PSPEC CFD、CSPEC和STD E-R图 用例图,对象-关系图,对象-行为图,结构化分析模型,面向对象分析模型,分析模型描述工具,结构化分析工具DFD、DD和PSPEC CFD、CSPEC和STD E-R图 面向对象分析工具用例图,类对象图对象-关系图对象-行为图,数据流图DFD,描述系统逻辑模型信息在系统中的流动和处理用途交流信息的工具结构化分析和设计的工具,数据流图DFD,组成符号圆框代表加工箭头代表数据流向方框代表源点和终点双杠表示数据文件或数据库分层从高层到低层分解前后的数据流必须一致命名数据流处理,领书单 进书通
11、知,购书单 缺书单,DFD练习售书系统,领书单 进书通知,进书通知,购书单缺书单,DFD练习售书系统,F1教材存量表,F2缺书登记表,数据字典DD,DFD中所有元素的定义的集合内容数据流数据流分量数据存储处理(一般不用DD描述),数据字典DD,定义数据的方法自顶向下分解数据数据元素的组合方式顺序:A+B选择:A|B重复:1A5可选:(A),数据字典DD,DD的用途分析阶段的交流工具包含控制信息数据库设计的基础例子P41例3.6,加工说明,加工说明PSPEC说明DFD中的每个加工描述工具结构化语言判定表判定树,加工说明例子,结构化语言P42-43,例3.7,3.8判定树P44,例3.9判定表P4
12、4,例3.9,CFD和CSPEC,适合实时系统的分析与DFD和PSPEC类似和DFD与PSPEC配合使用表示控制流和控制加工,CFD和DFD的关系,数据条件,控制输入,输出数据,控制输入,CFD的符号表示,DFD和CFD例子-DFD,DFD和CFD例子-CFD,STD,描述软件状态变迁符号表示矩形-系统状态箭头-状态转变方向规则表达式-事件/触发行为,STD例子,E-R图,用于对复杂数据的用作数据分析和建模实体、属性和关系组成符号,0:1,1:1,0:m,1:m,E-R图例子,用例图,用例:系统和外部角色的交互符号表示:,Use Case图例子,用例之间的关系,扩展关系使用关系组合关系,对象-
13、关系图,从E-R图演变而来描述对象间关系,对象-行为图,描述对象的动态行为对象状态转换图事件轨迹图事件流图,对象状态转换图例子,事件轨迹图例子,打印机忙保存文件,打印机就绪打印文件,打印文件,打印文件,计算机,打印服务器,打印队列,打印机,事件流图例子,软件需求说明(SRS),引言信息描述功能描述行为描述质量保证接口描述其它,结构化分析方法,基本步骤自顶向下,功能分解分层DFD由后向前,定义数据和加工DD,PSPEC根据需要,分析复杂数据和动态模型E-R图,CFD,CSPEC,STD编写SRS,DFD的复审,父图和子图不平衡未区分局部文件和局部外部项分解的速度太快不遵守加工编号规则,面向对象分
14、析方法,基本步骤定义系统的用例领域分析,建立类对象模型建立对象-关系模型建立对象-行为模型编写SRS,定义用例,回答问题发现角色使用系统主要功能的人是谁?需要借助于系统完成日常工作的人是谁?谁来维护、管理系统,保证系统正常工作?系统控制的硬件设备有哪些?系统需要和哪些其它系统接口?对系统产生的结果感兴趣的人和事是哪些?,定义用例,回答问题发现用例角色需要从系统中获得哪种功能?需要角色做什么?角色需要读取、产生、删除、修改或存储系统中的某种信息吗?系统中发生的事件需要通知角色吗?角色需要通知系统某件事吗?这些事件能干什么?系统需要输入/输出的是什么信息?这些输入/输出信息从哪儿来?到哪儿去?系统
15、当前的实现要解决的问题是什么?,领域分析,目的发现或创建可广泛应用的类,以便复用 分析特定的应用领域 形式公共对象、类、子集合和框架等,类对象建模(一),确定分析模型中的类对象考察系统用例汇总名词、名词短语得到候选对象确定类对象必要的信息、需求、服务多个属性、公共操作,类对象建模(二),定义类结构与层次一般-特殊整体-部分定义主题和子系统高层抽象,例子,建立对象关系模型,步骤复审需求描述和用例陈述找出表示关系的动词或动词短语用线连接起来,箭头表示方向给连接命名,标上基数,对象-关系图例子,建立对象行为模型,基本过程评估用例,理解系统中的交互序列找出驱动交互序列的事件为每个用例创建事件轨迹为对象
16、创建状态转换图,第四章 软件设计概述,软件设计的任务软件设计的基本概念模块化设计设计需要处理的问题设计文档及其复审,软件设计的任务,分析模型 设计模型 设计文档回答How to do?可以分为概要设计、详细设计软件设计包括数据设计体系结构设计接口设计过程设计,软件设计的任务,数据设计信息模型 软件数据结构体系结构设计定义软件部件间的关系接口设计软件内部、外部及与人之间的通信过程设计软件组件的过程性描述,软件设计的基本概念,模块(module)与构件(component)模块:定义输入、输出和特性的程序实体构件:可重复使用的软件组件抽象(abstract)与细化(refinement)抽象:分层
17、次考虑和处理问题(数据和过程)细化:从高到低的逐步分解过程信息隐藏对其它模块隐藏模块内部的数据和过程软件复用Design with reuse,design for reuse,模块化设计(modular design),分解(decomposition)模块独立性(module independence)自顶向下(topdown design)自底向上(bottomup design),分解(decomposition),C(P1+P2)C(P1)+C(P2)E(P1+P2)E(P1)+E(P2)C为问题的复杂度,E为解题需要的工作量,模块独立性(module independence),内
18、聚(cohesion)模块内部各成分之间耦合(coupling)一个模块与其它模块之间模块的独立性高 块内联系强 块间联系弱,内聚,弱 强,低内聚中内聚高内聚,内聚 cohesion,.偶然性内聚 coincidental cohesion.逻辑性内聚 logical cohesion.时间性内聚 temporal cohesion.过程性内聚 procedural cohesion.通讯性内聚 communicational cohesion.顺序性内聚 sequential cohesion.功能性内聚 functional cohesion,逻辑性模块,耦合 coupling,1.非直接
19、耦合no direct coupling2.数据耦合data coupling3.特征耦合 stamp coupling4.控制耦合control coupling 5.外部耦合 external coupling6.公共耦合 common coupling7.内容耦合 content coupling,弱耦合,公共耦合,自定向下和自底向上设计,自顶向下顶层开始逐步分解由底向上选择关键部分先设计扩展到整个系统,设计需要处理的问题,协同设计谁最合适设计系统的某一方面?如何使组内成员相互了解别人的设计?如何协调设计组件使整个系统统一?用户界面设计让用户驾驭软件,不是软件驾驭用户 减少用户的记忆 保
20、持界面的一致性 并发系统设计怎样确保同时执行的组件间对共享数据的一致性,并发处理(顺序执行),1、组件1查询X是否为空。2、组件1被告知X不为空。3、组件2查询X是否为空。4、组件2被告知X不为空。5、组件1出栈,删除最后一个元素。6、组件2想出栈,但X已为空,系统进入非法状态。,并发处理,1、组件1询问栈X是否为空。2、组件1被告知栈X不为空。3、组件2询问栈X是否为空。4、组件2被告知栈X不为空。5、组件1出栈,删去最后一个元素,并锁住栈X。6、组件2想出栈,但被告知X已上锁。7、另一个组件加了一个元素到栈X中。8、组件2被告知X已开锁(由于外部进程或者因为组件2 再次尝试)9、组件2出栈
21、。,软件设计文档,软件设计说明书1)范围 2)数据设计 3)体系结构设计4)接口设计 5)模块的过程设计 6)其他 包括测试的考虑,确保设计满足所有需求,设计约束和一些特殊注解等内容。,设计复审(design review),及早发现设计中的缺陷差错的传播复审的内容概要设计复审 系统的总体结构,模块划分,内外接口 详细设计复审 各个模块的具体设计,设计复审(design review),复审的方式Formal reviewDesign review meetingInformal reviewWalk-through,第五章 传统的设计方法,结构化设计模型结构化设计方法过程设计Jackson方
22、法,PSPEC,结构化设计的内容,数据对象描述,CFD,DFD,E-R,DD,CSPEC,过程设计,接口设计,体系结构设计,数据设计,结构化设计的内容,结构设计概要设计体系结构设计SC图接口设计SC图数据库设计物理数据模型过程设计详细设计模块的处理过程N-S图,PAD,PDL等,描述工具SC图,SC图的组成符号(P88)矩形框来表示模块 带箭头的连线表示模块间的调用关系传入和传出模块的数据流 SC图中的模块符号传入传出变换源漏控制,SC图中的模块调用,简单调用 选择调用 循环调用,A,B,C,D,A,B,C,面向数据流的设计方法,DFD图的类型 变换型结构 事务型结构 从DFD图到SC图的映射
23、 复审DFD图,必要时可再次进行修改或细化鉴别DFD图的结构特征:事务?变换?按照规则,把DFD图为初始的SC图 改进初始的SC图,变换结构的DFD,传入,传出,信息,传入流,传出流,变换流,时间,事务型结构DFD,事务中心,接受路径,动作路径,同时存在两类结构,传入,变换,传出,事务中心,变换分析,划分DFD图的边界 建立初始SC图的框架顶层都只含一个用于控制的主模块 第一层包括传入、传出和中心变换三个模块 分解SC图的各个分支 分解实质上是“映射”,例子划分DFD,a,b,c,d,e,p,r,w,u,v,传入部分,变换中心,传出部分,第一级分解,c,e,c,e,u,w,u,w,传入分支的分
24、解,c,e,c,e,b,b,c,a,a,b,d,d,b,传出分支的分解,w,u,w,u,u,v,v,变换中心的分解,e,p,c,p,r,r,w,u,初始SC图,事务分析,在DFD图上确定边界事务中心接受部分(包括接受路径)发送部分(包括全部动作路径)画出SC图框架 DFD图的三个部分分别映射为事务控制模块,接受模块和动作发送模块 分解和细化接受分支和发送分支,例子划分DFD,接受部分,事务中心,动作部分,Example-firstlevel factoring,发送,事务控制,接收,顶层,第一层,混合结构,a,b,b1,b2,b3,c1,c2,c3,d,e,f,g,h,j,k,l,m,优化结构
25、设计的指导规则,对模块分割、合并和变动调用关系的指导规则 提高内聚,降低耦合后简化模块接口少用全局性数据和控制型信息保持高扇入/低扇出的原则 作用域/控制域规则 作用域不要超出控制域的范围 位置离受它控制的模块越近越好,扇入和扇出,M的扇入,M的扇出,例子:扇出,煎饼形结构不可取!,例子:扇出,塔型结构,过程设计,目的确定模块采用的算法和块内数据结构 任务:编写软件的“过程设计说明书”为每个模块确定采用的算法 确定每一模块使用的数据结构 确定模块接口的细节,过程设计的原则,清晰第一的设计风格结构化的控制结构逐步细化的实现方法,过程设计工具,流程图N-S图伪代码PDL语言,N-S图,顺序,选择,
26、循环,Jackson 方法,实体动作实体结构初始建模系统功能系统时间系统实现,Jackson表示法,Jackson图Jackson伪代码,A,B*,顺序,选择,重复,A seq A select cond1 A iter until 或while cond B B C or cond2 Bend A C end A end A(a)顺序(b)选择(c)重复,Jackson方法和SD方法,Jackson方法,数据结构,映射,程序结构,程序的过程性表示,(Jackson图),(Jackson图),(Jackson伪代码),程序分析,程序设计,SD 方法,问题结构,映射,软件结构,各模块的过程描述,(DFD图),(SC图),(PDL等工具),概要设计,过程设计,