1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,本资料仅供参考,不能作为科学依据。谢谢。本资料仅供参考,不能作为科学依据。本资料仅供参考,不能作为科学依据。谢谢。本资料仅供参考!,软件工程复习,东北大学信息科学与工程学院 高岩,College of Information Science&Engineering,NEU,E-Mail:gaoyan_neu,gaoyan_neu,1/79,1,复习资料,课件PPT,本复习PPT,教材,教材P186模拟测试题,2/79,2,课程总体概览,非重点,重点,3/79,3,总体要求,软件开发各阶段所使用图中各种图
2、形表示,软件开发各阶段主要任务,重点在于需求分析和系统设计两个阶段,4/79,4,1 软件工程概述,软件工程产生原因,在软件危机背景下产生,为处理“软件危机”,软件工程概念,软件工程是,以质量为关键,,为了,经济地,开发,满足客户需求,软件而,研究、建立和应用,系统化,、,有规则,、,可度量,和,可控制,工程标准、方法,包括到,软件过程,、,项目管理,、,开发方法,、软件复用、软件度量、,开发工具,,甚至企业文化等各个方面,5/79,5,2 过程和活动,软件工程以“质量”为关键,质量焦点,过程,方法,CASE,工具,6/79,6,2 过程和活动,软件开发过程黑箱,软件开发过程不像硬件制造过程那
3、样直观、明确,人原因,需求变更原因,7/79,7,2 过程和活动,软件开发过程中(黑箱中)包含活动,基础活动,问题定义,需求,规约,设计,实现,软件验证,集成,测试,软件演进/维护,退伍,辅助性活动,软件项目跟踪和控制,正式技术复审,软件质量确保,软件配置管理,文档编制,复用管理,度量,风险管理,,8/79,8,2 过程和活动,问题定义,一个软件项目开发开始,是软件开发过程当中一个定义要处理问题并确定系统范围活动,可行性研究,以相对短时间和相对低成原来确定给定问题在其约束条件内是否有解、有几个解以及哪个是最正确解,9/79,9,2 过程和活动,需求分析,确定“做什么、不做什么、做到什么程度”,
4、需求:以一个清楚、简练、一致且无二义性方式,对一个待开发系统中各个有意义方面陈说一个集合,需求工程:指应用已证实有效原理、方法,经过适当工具和记号,系统地描述出待开发系统及其行为特征和相关约束;通常是一些过程集合:需求获取(需求引出)、需求分析和编写软件规格说明书(SRS)及验证(包含判定和证实),10/79,10,2 过程和活动,需求分析,功效性需求,描述了系统应该做什么,即具备功效或服务。(输入、输出和计算等),非功效性需求,描述了系统必须恪守约束条件。(响应时间、吞吐量、可靠性、可移植性、可扩展性、易用性、安全性、资源要求、可复用性、技术要求、文化和政策需求、法律需求、道德要求、隐私要求
5、等等),11/79,11,2 过程和活动,需求分析,描述需求标准,是完整、正确、必要、无歧义、可行、可验证、可追踪以及被设置了优先级别,12/79,12,2 过程和活动,设计,研究“怎样做”,是在系统约束条件下,为了实现系统功效性需求和非功效性需求,而找到并描述一个遵照高质量通用标准方法,其交付文档能够指导开发人员实现系统,分为总体设计(概要设计、架构设计)和详细设计两个阶段,13/79,13,2 过程和活动,实施,编码:是将软件设计结果转换成用某种程序设计语言书写程序。,单元测试:是把一个模块作为独立程序单元进行测试,以确保它能够正确执行要求功效。,集成:是指将单独软件构件合并成一个整体软
6、件系统。集成份为集成子系统和集成系统两个级别,14/79,14,2 过程和活动,测试,测试:是选择适当测试用例执行被测程序过程,其目标在于发觉程序错误。,缺点:是系统任首先(包含需求、设计或代码)缺点。该缺点会促成或潜在促成一个或多个失败发生。,错误:是指程序中缺点所产生不正确结果。,失败:当一个程序不能运行或者其表现不可被接收时称为失败。失败是系统执行中出现情况。失败源于代码缺点。,单元测试、集成测试、系统测试、(alpha)、(Beta)、验收测试,15/79,15,2 过程和活动,布署,是为确保最终用户能够正常使用软件产品而进行活动,布署单元:由一个工作版本(可执行构件集)、文档(最终用
7、户支持材料和公布说明)和安装工件组成,16/79,16,3 软件过程模型,怎样组织这些活动?,17/79,17,3 软件过程模型,经典模型,线性次序模型,瀑布模型,V 模型,国防部模型,RAD 模型,循环(圆形)模型,原型模型,边建边改模型,增量模型,螺旋模型,并发模型,XP模型,RUP模型,CBD Assembly Model(构件组装模型),形式化方法模型,IDEAL模型,18/79,18,3 软件过程模型,不好模型,线性次序模型,瀑布模型,V模型,DoD模型,环形模型,边建边改模型,19/79,19,3 软件过程模型,推荐使用模型,RUP模型,增量模型,螺旋模型,XP模型,20/79,2
8、0,3 软件过程模型,RUP(,R,ational,U,nified,P,rocess)Model,21/79,21,3 软件过程模型,过程模型选择,RUP适用与任何情况,螺旋模型适合用于风险较高情况,增量模型适合用于不停向用户交付产品情况,XP模型适合用于10人以下小组开发,而且客户随时参加情况,RAD模型和构件组装模型适合用于有许多复用资源情况,22/79,22,4 问题定义和可行性研究方法,可行性研究,是以相对短时间和相对低成原来确定给定问题是否有解,确定一个项目是否“可行”是本阶段任务,包含,市场可行性、政策可行性、竞争可行性、技术可行性、经济可行性、操作可行性、调度可行性、社会可行性
9、23/79,23,5 需求分析方法,需求分析,确定“做什么、不做什么、做到什么程度”,需求包含两大类:,功效性需求,非功效性需求,24/79,24,5 需求分析方法,分析标准,循序渐进,自顶向下,逐层分解,少涉实现,定义需求属性,可验证性,可追踪性,25/79,25,5 需求分析方法,可验证性,理由,证实所开发系统符客户和用户要求依据,不可验证需求,仅仅是对需求一个主观愿望,对于设计和测试等活动而言都是缺乏意义,度量出系统实现质量,26/79,26,5 需求分析方法,可验证性,示例,系统响应速度足够快,验收标准:,在90%情况下,响应时间不超出3秒,其它情况不超出10秒,系统应含有高应可靠性
10、验收标准:,在该产品运行3个月内,未发生瓦解或死机现象,系统应界面友好,验收标准:,管理员经3日培训即可掌握系统使用,27/79,27,5 需求分析方法,传统分析模型,28/79,28,5 需求分析方法,传统分析模型,功效建模,数据流程图(Data Flow Diagram,DFD),行为建模,状态变迁图(State-Transition Diagram,STD),Petri网,数据建模:E-R图,数据字典,判定表和判定树,29/79,29,5 需求分析方法,传统分析模型-数据流程图,是一个分层概念模型,目标,指明数据在系统中移动时怎样被变换,描述对数据流进行变换功效(和子功效),3,个层次
11、总体图,零级图,细节图,30/79,30,5 需求分析方法,传统分析模型-数据流程图,数据流程图分层表示,31/79,31,5 需求分析方法,传统分析模型-行为建模,状态变迁图,Petri网,32/79,32,5 需求分析方法,面向对象分析模型,33/79,33,5 需求分析方法,面向对象分析模型,用例建模,描述功效,使用用例图及用例描述,CRC建模,对象-关系建模,类图,对象-行为建模,时序图、活动图等,34/79,34,5 需求分析方法,面向对象分析模型-用例图,用例,是系统、子系统或类和外部参加者(Actor)交互动作序列说明,包含可选动作序列和会出现异常动作序列,参加者,是在系统之外
12、透过系统边界与系统进行有意义交互任何事物,包含人、设备和外部系统等,35/79,35,5 需求分析方法,面向对象分析模型-用例图,图例,参加者,用例,参加者与用例之间关联,36/79,36,5 需求分析方法,面向对象分析模型-用例图,参加者之间关系,仅有泛化关系,泛化关系,37/79,37,5 需求分析方法,面向对象分析模型-用例图,用例之间关系,泛化,包含,扩展,38/79,38,5 需求分析方法,面向对象分析模型-用例图,用例之间关系,泛化,39/79,39,5 需求分析方法,面向对象分析模型-用例图,用例之间关系,包含,40/79,40,5 需求分析方法,面向对象分析模型-用例图,用例
13、之间关系,扩展,41/79,41,5 需求分析方法,面向对象分析模型-CRC建模,实际上是一组表示类标准索引卡片集合,卡片顶部:类名字、类型和特征,卡片左边:列出类责任,,卡片右边:列出协作者,42/79,42,5 需求分析方法,面向对象分析模型-对象-关系建模,识别出系统候选类,分析这些类之间关系,以类图形式展现,可由CRC卡片导出,类间关系类型,泛化(,Generalization,)关系,关联(,Association,)关系,聚集(,Aggregation,)和合成(,Composition,)关系,依赖(,Dependency,)关系,43/79,43,5 需求分析方法,面向对象分析
14、模型-对象-关系模型,泛化(,Generalization,)关系,由一个超类和几个直接子类组成两层结构,改造为,44/79,44,5 需求分析方法,面向对象分析模型-对象-关系模型,泛化(,Generalization,)关系,利用开闭标准,使用玩家-角色模式,可深入改造为:,深入,改造为,45/79,45,5 需求分析方法,面向对象分析模型-对象-关系模型,关联(,Association,)关系,是模型元素间一个语义联络,46/79,46,5 需求分析方法,面向对象分析模型-对象-关系模型,聚集(,Aggregation,)关系,是一个特殊关联,表示类与类之间整体与部分关系,47/79,4
15、7,5 需求分析方法,面向对象分析模型-对象-关系模型,合成(,Composition,)关系,是一个强聚集,组合关系中类含有相同生存期,48/79,48,5 需求分析方法,面向对象分析模型-对象-关系模型,依赖(,Dependency,)关系,是类与类之间较弱关系,一个类向另一个类发送消息,一个类是另一个类某个或一些操作数据组员类型,一个类是另一个类操作参数类型,49/79,49,5 需求分析方法,面向对象分析模型-对象-行为模型,时序图,50/79,50,6 软件设计方法,是在系统约束条件下(如预算、时间、人力资源、用户软、硬件环境和用户对系统操作能力等),为了实现系统功效性需求和非功效性
16、需求,而找到并描述一个遵照高质量通用标准方法,其交付文档能够指导开发人员实现系统。,分为总体设计(概要设计、架构设计)和详细设计,51/79,51,6 软件设计方法,设计总体标准,不应陷入片面性,追踪分析模型,选择适当技术,适度分解,可集成,提升抽象层次,可复用,可维护和可扩展,有韧性,一致性,交互界面应该友好,设计评审,52/79,52,6 软件设计方法,软件构架,反应系统整体组织结构和基本特征,软件层次结构,模块相互作用方式,全局、主要数据变量和数据结构,数据库逻辑结构,接口,53/79,53,6 软件设计方法,详细设计,在软件构架基础上深入确定怎样实现目标系统,详细包含系统模块(如类及其
17、方法)逻辑详细设计、系统数据结构设计、系统数据库结构设计、系统人-机接口设计等,54/79,54,6 软件设计方法,分治思想,分治概念:将一个大系统分解为一系列小模块过程和方法,是软件工程最主要思想之一,分治不能无限分解,55/79,55,6 软件设计方法,分治思想,分治不能无限分解,软件开发成本随模块数量增加变小,但将模块组装起来集成成本将随模块数量增加变大,软件总成本为两个成本之和,模块成本和集成成本两个曲线交汇点M代表了最低软件总成本,应尽可能使系统划分模块数量在M点所在邻域内,即最小成本邻域,56/79,56,6 软件设计方法,抽象思想,开闭标准(,Open-Closed Princi
18、ple,),即一个软件实体应该对扩展开放,对修改关闭,57/79,57,6 软件设计方法,抽象思想,面向对象软件工程中抽象,抽象类,58/79,58,6 软件设计方法,抽象思想,面向对象软件工程中抽象,接口:接口隔离标准,使用接口,实现接口,59/79,59,6 软件设计方法,内聚,是一个模块内部各部件之间联络紧密程度度量,强调分解时将相关内容放到一起,一个模块内各个部件联络越紧越好,耦合,是模块间相互联络强弱度量,耦合强弱取决于模块间传递数据方式、接口复杂情况以及传递数据类型,各模块之间耦合越涣散越好,60/79,60,6 软件设计方法,内聚分类,功效内聚,次序内聚,通信内聚,过程内聚,时间
19、内聚,实用程序内聚,偶然内聚,层内聚,内聚程度由高到低,61/79,61,6 软件设计方法,内聚分类(续),功效内聚:全部部件处理同一组数据,共同完成单一功效,次序内聚:各部件之间现有数据联络又有控制联络,通信内聚:全部部件都访问同一组数据,各部件之间只有数据关系,没有控制关系,过程内聚:各部件之间只有控制联络,而没有数据联络,62/79,62,6 软件设计方法,内聚分类(续),时间内聚:全部部件之间既无数据联络,也无控制联络,不过部件之间含有时间关系,即把在执行过程中同一阶段内完成执行任务部件放到一起,而排除其它部件,实用程序内聚:部件经常是一些相关、可重用实用程序,偶然内聚:模块内部各部件
20、之间没有任何关系,层内聚:将相关服务功效放到一起,成为一层,而将其它内容排出在外,63/79,63,6 软件设计方法,耦合分类,内容耦合,公共耦合,外部耦合,控制耦合,印记耦合,数据耦合,耦合程度由高到低,64/79,64,6 软件设计方法,降耦方法-示例,印记耦合降耦方法,以下印记耦合降耦方法,public class Order ,public float calcTotalMoney(User user),int userLevel=user.getLevel();,int userConsumeScore=user.getConsumeScore();,/计算订单总金额,65/79,6
21、5,6 软件设计方法,降耦方法-示例(续),采取接口方法降耦,public interface IConsumeInfo ,int getLevel();,int getConsumeScore();,public class User:IConsumeInfo,public int getLevel(),/取得用户等级代码 ,public int getLevel(),/取得用户等级代码 ,public class Order ,public float calcTotalMoney(IConsumeInfo cinfo),int userLevel=cinfo.getLevel();,in
22、t userConsumeScore=cinfo.getConsumeScore();,/计算订单总金额 ,66/79,66,6 软件设计方法,降耦方法-示例(续),采取降为数据耦合方法降耦,public class Order ,public float calcTotalMoney(int serLevel,int consumeScore),/计算订单总金额,67/79,67,6 软件设计方法,复用,在新开发项目中使用以前已取得,概念和对象,尤其为复用目标而设计软件,过程,重复使用为了复用目标而设计软件过程,可复用资源及其回报,68/79,68,6 软件设计方法,复用,系统中可复用模块示
23、例,登录用验证码控件,联动下拉列表框控件,注册时如先选省份,再选城市,69/79,69,6 软件设计方法,传统设计描述方法,70/79,70,6 软件设计方法,传统设计描述方法,层次图,结构图,程序流程图,伪代码PDL,71/79,71,6 软件设计方法,面向对象设计描述方法,72/79,72,6 软件设计方法,面向对象设计描述方法,包,73/79,73,6 软件设计方法,面向对象设计描述方法,类图,构件图,布署图,74/79,74,6 软件设计方法,人机交互界面设计,以用户为中心,GUI,界面设计指导标准,75/79,75,7 软件实施与测试方法,测试:是选择适当测试用例执行被测程序过程,其
24、目标在于发觉程序错误。,测试用例:为特定目标开发测试输入、执行条件和预期结果集合,测试不能表明软件中不存在错误,它只能说明软件中存在错误,单元测试、集成测试、系统测试、(alpha)、(Beta)、验收测试,76/79,76,7 软件实施与测试方法,测试方法,白盒测试,黑盒测试,单元测试,集成测试,回归测试,系统测试,测试,测试,验收测试,77/79,77,8 软件项目管理方法,软件计划和进度控制,制订进度计划方法,关键日期表,甘特图,里程碑图,关键路径法,78/79,78,8 软件项目管理方法,人力资源管理,项目中主要软件开发角色,系统分析师,软件构架师,实施工程师,测试工程师,构件设计师,数据库设计师,界面设计师,以及参考双塔结构中角色,79/79,79,






