软件工程方法学
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
从传统的开发方法到ቤተ መጻሕፍቲ ባይዱ捷开发方法的转变
传统的开发方法:面向结构化开发方法、面向对象的开发方法 敏捷开发方法:极限编程、快速原型开发方法、测试驱动开发方法 传统开发方法的缺点: 1、与编码无关的工作量太大(非编码工作量大) 2、从需求分析==系统测试,所需的工作周期长(到客户参与度低) 3、客户变更要求响应较慢,极不情愿。 敏捷开发方法的优点: 1、开始周期短 2、频繁的需求变更、市场变更、工作方式、响应速度快 3、大量开发平台的成熟(UC,J2EE),以快速、灵活的开发方法出现 特点:只做核心事情====写代码,除此之外,尽量少做。 缺点:由于开发周期短,各个方面考虑不是很充分,不能保证软件开发质量。 使用范围:1、团队开发能力强,经验丰富 2、团队对开发领域熟悉 提出敏捷开发方法目的:1、提高软件开发效率 2、提高响应效率 3、提高质 量
极限编程(XP)
1、极限编程:一种敏捷开发方法,供中小型小组用于开发需求快速变化的软件。 2、极限编程组成的四个部分:价值、原则、实践、行为。 3、XP 的价值观:简单、交流、反馈、勇气 4、XP 的原则:快速反馈、逐步修改、拥抱变化、高质量工作 5、XP 的行为:倾听、测试、编码、设计 6、XP 的实践(12 种):规划游戏、小型分布、比喻、简单设计、测试、重构、结对 编程、集体拥有、现场客户、编码标准、每周工作 40 小时、持续集成。 7、XP 开发的关键特征: 明确的反馈= 逐步规划= 时间安排灵活= 自动化测试= 口头交流= 进化式 设计 8、XP 解决软件开发中的什么问题: 1、揭示软件开发中的问题: 软件危机:(软件失败的原因): 1、 未能全面地确定项目的目标 2、糟糕的规划和估计 3、对技术不熟悉 4、缺乏项目管理方法 5、小组中高级人员过少 6、硬件/软件供应商的表现糟糕 XP 解决方法:使用项目中的 4 个控制变量(时间、质量、成本、范围) 2、使用 XP 控制风险: 软件开发中常见的风险: 进度延迟、项目被取消、不被业务认可、技术上复杂、缺陷率高 解决方法: 进度延迟:XP 发布软件的周期非常短,首先交付的是业务价值最高且能被 客户看到的软件。避免了项目进度的延迟。 项目被取消:XP 项目中,首先完成的是最重要的工作,若项目被取消,则造 成的较小的损失。双方降低了风险预算。 不被业务认可:客户完全可以作为开发团队的一员,与开发团队一起解决问题。 驻地客户,可以进入开发团队内部,协同开发。 技术上复杂:XP 实践持续集成意味着小组可以自由自在地集成整个系统,不 会在最终交付时,形成‘大爆炸’ ;同时使用的工具和平台是较 为成熟,集成起来也不复杂。 缺陷率高:通过自动化测试和测试先行的编码方式确保缺陷少。 保证到用户 手上,BUG 和缺陷率低,减少投诉和返工。 3、使用 XP 提高质量 4、使用 XP 管理变化 补充: 目标:高速开发,从而实现快速响应。 理念:尽可能把多余的事物去掉 优势:XP 能较好地解决传统软件开发中的问题,如上述问题。 使用范围:开发团队较强的开发能力,或者开发团队对开发领域比较熟悉。 缺点:不适合一般的初学者开发。
4、数据流图-数据模型(HOW) 数据模型:在要实现的软件系统中,有什么数据要处理,他们的结构和关系 如何。用 ER 图、实体、实体关系 数据流图:数据流、数据存储、数据项、数字字典 方 法:先分解,再组合 分解:按功能划分,定义每一条数据流和数据存储 组合:再将分解彻底的数据项,作为一个个属性,组合成数据实体
结构化方法的总结:
特点(优点): 1、结构化思想的开发本质是:基于分解,自顶向下,逐步细化 2、简单(易学易用): 把一个复杂过程用多个单个小过程来实现 用数据流图可以完成整个分解过程(其他的内容都是从数据流图派生出来的) 3、结果唯一性: 同一个问题,不同的人分解出来的结果基本是一样的,即使用结构化方法,基本上是有标 准答案。 4、使用范围: 适合开发流程性软件, 比如说(科学计算、信息处理、生产制造、网站访问、工作流) 较适合初学者学习 缺点: 面向过程的思想 结构化语言------高耦合,低内聚-----软件重用型低、不灵活--软件开发效率降低 软件开发周期长
深入全面的结构化软件分析设计方法 1、结构化软件设计方法: 是第一个成型的、完整的软件工程方法 是伴随着函数和结构化语言(不用 goto 语句)的出现来诞生的。 第一次引入了模型图的使用(程序流程图) 2、传统的软件工程开始方法的基本流程: 1、项目调研 2、需求调查与分析 3、系统设计 4、系统实现 5、系统测试 6、系统维护 (根据这些基本步骤的不同排列,可以有瀑布型、迭代型、螺旋型等不同的软 件开发方法) 3、结构化方法: 分析和设计阶段的目标:就是将用户需要实现方案 1、需求调查与分析 内容:把需求描述清楚、规范,用模型图来描述需求 结果:系统化、条目化的软件需求文档和数据流图 需求分析: 描述业务中要处理的数据和业务数据的处理过程 2、系统设计(从上面的需求分析出发,完成概要设计和详细设计) 概要设计:完成软件组成单元的划分,功能模块和数据模块 详细设计:单元结构设计、业务处理流程设计、数据库设计、界面设计 3、结构化分析设计方法详解:
深入全面的面向对象分析设计方法
1、面向对象分析设计方法来完成需求调查分析以及系统设计的工作 需求调查:类似结构化方法一致,得到结果:系统化、条目化的软件需求文档。 需求定义: 用标准化的软件设计模型来描述已经获得的需求 结果:用例图 需求分析:从软件设计模型中(用例图)中提取相关内容,进行软件概要设计和详细 设计 系统设计:概要设计:完成软件组成单元的划分,功能模块和数据模块 构造软件的大模块------------类 详细设计:模块内部流程设计、数据库设计、界面设计 2、面向对象需求分析要完成的任务: 1、描述软件的大致结构和功能分工(划分类,确定类的属性和方法, 使用类图来描述) 2、描述出类的相互调用关系 3、描述出每项系统工作的工作过程(设计出每个模块的输入输出,使用交互图和活 动图来表达) 4、描述类的内部运作规律(用状态图来描述) 3、HOW 面向对象设计方法如何从用例图出发完成以上任务: 从用例图出发 1、描述需求中的业务处理过程的步骤: 1、细化用例图,用例是描述外部用户使用本软件系统的应用场景。一个用例可能进一 步分解成更小的应用场景序列来实现。 2、一个不可再分的应用场景不可再分成子用例图后,则需要使用其他图,如活动图来描 述功能实现过程,是针对某一个单一的用例。Ps:活动图:描述一个业务的执行过程,每一个执 行步骤。 3、其次用序列图(也叫顺序图) , 顺序图在活动图的基础上,加上运作之间的消息而形成。 4、将序列图生成协作图 2、设计类的任务,要完成:类、类的属性、类的方法、类之间的关系。 类:1、只要是在活动图和序列图中出现的实体,都自然而然是一个类。 2、在用例图中出现的参与者(Actor)一般也是一个类。 设计类的属性: 在序列图中, 要交换的数据, 必然是双方都要有的数据, 也就是属性。 设计类的方法:在序列图中,一个消息就是被指向类的方法 设计类的关系:从协作图中,可以看到类之间的关系。 类的进一步完善:类的归纳 1、极高的开发效率 2、统一的代码特性 3、不丧失高度灵活 4、面向对象的特点: 基于映射:把现实世界的工作过程或系统,用代码系统中的相对的元素模拟出来, 就完成了软件的设计和开发。 事物=对象;事物的特征==对象的属性;事物的行为对象的方法; 复 事物之间的信息交换与协同==类方法调用 杂:需要从多个角度来描述系统或者过程 静态关系:多态、继承、聚合、状态转换 动态关系:用例、活动、序列、协作 结果的不唯一性: 同一个问题, 有经验的人和没有经验的人, 进行面向对象设计时, 结果可能会判别很大。 使用范围:设计复杂系统、设计高质量、设计与现实世界对应程度比较大的系统
软件开始的历史演进过程
1、最早的软件和程序:机器语言---(编译器/解释器)---用 goto 语句来实现的循环等复杂 的流程和算法。由于 goto 语句的滥用,致使程序无法阅读、修改、扩展。导致必须要有结构 化的语言。 2、结构化语言: 产生原因:1、上述对 goto 语言的限制 2、可阅读、修改、扩展 3、必要时 将代码复制重 用。 缺点:1、重用只限制于复制代码 2、软件越多越复杂 结果导致了下一阶段:模块化 即函数 3、模块化(函数) 优点:1、函数集中存放代码的、独立功能单元、模块分解和设计、出现了开发包、函数的 独立性可以提高软件的质量 缺点:1、函数不能永久的存放数据(结果→函数之间不可避免的出现了高耦合或低效率; 解决结果→把数据和处理这些数据的代码放在一起) 2、函数式预编译的,即把所有的函数的代码集中在一起,形成一个 exe 执行文件。 4、软件的分散化: 至此之前,要求代码的所以函数都要集中,再编译成一个.exe 文件。由于很多函数不是以 开源的方式提供给我们使用,故开始使用已经编译好的代码(库文件.lib),库文件是一系列的函 数,而且已经编译好的。 缺点:生成一个大的 exe 文件 ;.lib 更新不方便。导致了动态链接库 动态链接库(dll): 好处: (1)代码和模块分离(不仅仅是逻辑分离,在物理上也分离了) :可以分别开发、分别 更新; (2)运行时,只载入.exe 和需要的.dll,其它不需要的代码/功能都可暂不载入内存。 5、由于动态链接库的出现,软件进入到了独立组建时代。 一个软件是由一系列物理分离的独立组件(component) ,每个组件可以单独复制、更新、 使用 独立组件时代,由于动态链接库的缺点,只是功能的组件化,并不灵活,接着导致了可视 化功能组件化--控件。 6、随着网络发展: 分布式组件模式 :一些软件的功能组件,被从软件所在的主机中取出,放到远距离的服务 器上(我们称之为”应用服务器” ) DCOM 和 CORBA 分布式组件形成了分庭抗礼之势。 7、软件开发历史发展的原动力: 尽可能提高开发效率 尽可能降低开发时间 尽可能降低开发成本 尽可能提高开发与设计的质量 最终目标就是:开发效率更高。产品质量更好
软件工程方法学 软件工程方法学是研究软件设计方法及工程开发技术的一门学科。 为什么要学习软件工程方法学? 1、应用的需要:方法学的发展、不同方法学的优缺点 2、从更宏观、更高的层次来看待软件开发 3、发展更新的\更完善的软件工程方法学的需要 相关知识体系: 1、结构化方法:基本结构化方法、复杂的结构化方法 2、面向对象方法:基本的面向对象;RUP 3、极限编程方法(XP) 4、快速原型软件开发方法 5、测试驱动的软件开发方法 6、形式化方法:1、基于规范的开发方法/函数式编程开发方法 2、净室/零缺陷软件开发方法 7、面向方面编程的软件开发 AOP 8、产生式编程 9、SOA:面向服务的体系结构 10、MDA/MDSD:模型驱动体系结构/软件开发 11、基于工作流引擎 基于软件的集成与复用的快速开发: 1、面向方面的编程:一个软件的某些功能,可以抽象为一个“方面” ,在需要的时候添加到一 个或多个类上,从而达到快速整合功能的目标。 2、SOA: (面向服务的体系结构)一个软件功能,就是一个可重用的 Service,这个 Service 可 以被企业内、企业外、甚至全世界所利用(集成) 。 3、 MDA/MDSD(模型驱动的软件开发): 对某类软件或某个领域的软件需求, 设计出一个通用的、 一般的、抽象的模型,描述这类系统的结构和动作规律 要开发软件时,依据这个模型,自动生成一个相应的软件系统(代码) ,从而达到快速开发的 目标. 4、产生式编程 (GP):用高级的、专用的“业务代码”去描述业务处理过程。将这些高级业务 代码,再通过一种工具或方式,转换成用常用的高级程序设计语言所实现的代码(块) ,从而 实现软件的快速开发。转换工具(设备) 业务代码--实现代码 5、基于工作流引擎(WF) :将这些高级业务代码,再通过一种工具或方式,转换成用常用的高 级程序设计语言所实现的代码(块) ,从而实现软件的快速开发。 (流程描述---功能实现) 基于集成与复用 形式化方法 传统的软件工程方法 敏捷开发方法