1、1,第5章 软件开发的方法学主讲人:xxx,2018/10/19,2,学习目标:理解软件生产的经典阶段比较静态(结构化)建模和动态(基于时间的)建模理解UML的表示法,5.1 引言,方法学:做事的系统方法、一个可接受的过程注:包括过程、步骤和其产品 适用于软件的整个生命周期,即自软件开发的早期阶段至已安装系统的维护。,2018/10/19,3,5.1 引言,方法学涉及软件开发、阶段管理、资源管理、规划、调度和其他管理任务的建议或技术 优秀的、适用范围广的方法学是成熟软件业的基础。,2018/10/19,4,5.2 软件开发中的经典阶段,需求 分析 设计 规范,2018/10/19,5,实现 测
2、试 部署 维护,5.2.1 需求,需求包括: 业务需求:反映了组织机构或客户对系统、产品高层次的目标要求 用户需求:描述了用户使用产品必须要完成的任务 功能需求 :定义了开发人员必须实现的软件功能,使得用户能完成他们的任务,从而满足了业务需求。 非功能需要:对系统性能、界面等的要求,2018/10/19,6,5.2.2 分析,分析:(从用户角度)对问题域中事物 的识别和它们之间相互关系的判定。,2018/10/19,7,5.2.3 设计,设计:(从系统角度)解决系统如何实 现问题,将分析过程所创建的分析模型 转化成设计模型,如体系结构、类等等。,5.2.4 规范,规范:对软件开发过程的清晰、明
3、确的 描述,指出软件组件的用法、如何正确 操作。规范是按合同设计的、至关重要的 底层规则,2018/10/19,8,5.2.5 实现,实现:编写代码,形成子系统,各种子 系统协同工作,形成整个系统,5.2.6 测试,测试:根据系统需求验证系统的实现 包括单元测试、集成测试和移交测试,2018/10/19,9,5.2.7 部署,部署:将硬件和软件交付给最终用户, 并提供手册和培训材料,5.2.8 维护,维护:包括改正性维护、完善性维护和 适应性维护,2018/10/19,10,5.2.9 关键问题,通过一些关键问题可以帮助了解、记住个软件开发阶段及其目的。(略),5.3 软件工程和瀑布方法学,这
4、两种方法是软件开发的最初的方法学。 软件工程是指软件开发中专家提出的想法。 瀑布方法学:在经典阶段中,开发非常顺畅(斋求、分析、系统设计等),每个阶段都满意地完成,之后进入下一个阶段。 瀑布式开发 瀑布方法学是一个很好的想法。但是,瀑布方法学不切实际,且有很多问题,如很难写出可重用的代码等。,2018/10/19,11,5.4 新方法学,螺旋式方法学 迭代式方法学 递增式方法学 合并式方法学,2018/10/19,12,螺旋式方法学,首先是需求分析;接着进行一些探索性分析,增进要处理的事务的理解;然后勾画出一个大致满足需求的系统设计,并设计部分系统;之后可以编写一些代码。一旦完成了最初的编码,
5、就可以测试已有的部分系统。在经过三四遍的开发过程,完成系统后,就可以全面测试和部署系统 但这种方法也不是完美的。只是把瀑布开发过程进行了三四次,它只是将问题会变小,并没有消失。 它仍有一些不灵活的地方。 螺旋式开发方法,2018/10/19,13,返回,迭代式方法学,2018/10/19,14,允许重复各个阶段,根据需要前后移动或来回移动。 但是在过程中的传递需要避免混乱,于是在这个需要注意三个原则。 与螺旋式方法学一样,仍像要吃掉一头大象。 迭代式开发方法,返回,递增式方法学,在交付的系统10版本中,将包含最基本的、最重要的功能。在以后的某个时间,交付11版本,其中包含附加的功能(替代10版
6、本)。之后,在对整体进行大的修改后,交付20版本。这将延续至系统的生命周期。(这样逐步增加) 需避免为每个递增部分重新编写所以的代码。 递增式开发方法,2018/10/19,15,返回,合并方法学,瀑布方法学的各个阶段有正确的逻辑顺序,而螺旋式、迭代式和递增式都有比较理想的特性,但都不够完美,所以合并。 在最高的层次上,必须规划一系列递增部分;在每个递增部分,开发每个递增部分至少应进行两遍;在每一遍中,瀑布方法学指定了各个阶段和它们的顺序;在每个子瀑布中,迭代式方法学允许重复各个阶段,或合并各个阶段,直到满足需求为止(例如需求和分析的几次循环)。迭代式方法学还允许一发现问题就更正它。(合并方法
7、学) 合并螺旋式、迭代式和递增式开发方法,2018/10/19,16,返回,基本过程:软件分析与对象抽取 对象详细设计 编码 测试基本思想:模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界解决问题的方法与过程,也就是使描述问题的问题空间(问题域) 与实现解法的解空间(求解域)在结构上尽可能一致。,2018/10/19,17,5.5 面向对象的方法学,5.5 面向对象的方法学,每个方法都会包含:每个阶段的哲理每个阶段的工作流和各个活动应生产的制品(图、文本说明和代码)制品之间的依赖关系不同制品的表示法需要给静态结构和动态行为建模,2018/10/19,18,面向对象方法的优点
8、:与人类习惯的思维方法一致稳定性好可重用性好可维护性好,5.5.1 UML、RUP和XP,20世纪90年代中叶,最著名的方法学是Ivar Jacobson、James Rumbaugh和Grady Booch发明的方法学。 1996年,Jacobson和Rumbaugh合并为Rational公司,开发出一系列表示法,称为统一建模语言(UML)。 之后,UML由对象管理组(OMG)保管和改进。 UML采用螺旋式、迭代式和递增式方法实现对软件的分析和设计,称之为Rational Unified Process(RUP)。 另一常见方法学:极限编程(extreme programming, XP)。
9、,2018/10/19,19,为了提高效率,任何螺旋式、迭代式和递增式方法学需要端对端的开发工具,因此要求开发工具应支持: 可跟踪性 修改历史 多用户访问控制 减少冗余 一致性检查 联网操作 在开发过程中测试已制作出来的制品,2018/10/19,20,5.5.2 开发工具的需求,5.6 Ripple概述,Ripple是一种方法学,吸收了所有软件开发涉及的阶段,适合真正的系统开发。 Rational Unified Process(RUP)是Ripple的具体体现。 对于Ripple,采用UML表示法进行描述。 注:各阶段的Ripple制品有些在UML中,有些不在UML中。(见图5-1),20
10、18/10/19,21,5.6.1 用列图,在UML建模语言中,用例图被用来描述用户与系统之间的交互关系,说明系统所具有的业务能力和业务流程,能够方便开发者理解用户领域的专有术术语和业务内容。 用列图是静态制品。(第6章介绍) 用例图(Use Case Diagram)符号 :,2018/10/19,22,参入者(Actor):系统之外与系统有关的类,涉及与系统交互的人,机器或其他系统,用于反映系统跟周围环境的关系。关系分为通信关系、使用关系和扩展关系。 用例(Use Case):用例是系统的功能模块,它展示系统所能完成的功能。 通信关系(Communicates Relationship):
11、描述参入者与用例之间的关系,其中单个参入者可以与多个用例联系,反之,一个用例也可与多个参入者联系。清晰的描述了“谁使用了哪个用例” 用例图示例,2018/10/19,23,5.6.1 用列图,5.6.2 类图,类图显示了在业务(在分析阶段)或系统本身(在子系统设计)中存在的类。 类图的获取是一个不断细化的过程,一般我们先从分析类开始,是进行类设计。因此,类图有分析类图和设计类图。 类图是静态制品。(第7章介绍分析类图,第10章介绍设计类图) 在类图中,每个类用带标签的方框表示,并用关系符表示类之间的关系。 分析类图和设计类图的区别:设计类图较分析类图使用更多的可用表示法,它扩展了分析类图的部分
12、,显示了方法、构造函数和可导航性。,2018/10/19,24,5.6.3 通信图,通信图显示了对象之间的协作 通信图是动态制品。(第7章介绍) 通信图示例:,2018/10/19,25,5.6.4 部署图,部署图展示了运行时处理节点及其组建的部署。 描述系统硬件的物理拓扑结构以及再次结构上执行的软件。它可以包括所以的特性,例如机器、过程、文件和依赖性。 部署图是静态制品。(第8章介绍) 部署图示例。,2018/10/19,26,5.6.6 顺序图,顺序图是将交互关系表示为一个二维图。显示了对象之间的交互,强调的是顺序。 顺序图可在系统设计阶段使用,也可以应用于分析阶段、系统设计阶段、甚至需求
13、分析阶段的动态建模。 顺序图是动态制品。(第10章介绍) 顺序图构造:纵向是时间轴,时间沿竖线向下延伸。横向轴代表了在协作中各独立对象的类元角色。类元角色用生命线表示。当对象存在时,角色用一条虚线表示,当对象的过程处于激活状态时,生命线是一个双道线。(设计阶段的顺序图) 注意:顺序图中,消息显示为竖条之间的箭头,竖条表示对象(每个对象的名称位于竖条的顶部),时间轴的指向是从上向下。,2018/10/19,27,5.7 小结,本章主要内容: 软件开发的经典阶段:需求、分析、系统设计、规范、实现、测试、部署和维护。如何在螺旋式、迭代式和递增式方法学中使用它们。 静态建模和动态建模,静态建模描述了如
14、何构建系统;动态建模描述了系统在运行时如何操作。 本书后面使用的是UML表示法和Ripple方法学。 介绍了UML中的一些图。,2018/10/19,28,2018/10/19,29,谢谢!,2018/10/19,30,瀑布式开发,返回,螺旋式开发方法,2018/10/19,31,返回,迭代式开发方法,2018/10/19,32,返回,递增式开发方法,2018/10/19,33,返回,合并螺旋式、迭代式和递增式开发方法,2018/10/19,34,返回,静态建模,静态结构定义了系统中的重要对象的属性和操作,以及这些对象之间的相互关系。其中最主要的有用例图、类图和部署图。 静态建模描述系统的组织
15、和结构,指对象之间通过属性互相联系,而这些关系不随时间而转移,决定系统的逻辑或物理部分有哪些及其如何连接。,2018/10/19,35,返回,动态建模,动态行为定义了对象的时间特性和对象为完成目标而相互进行通信的机制,其中最主要的为顺序图、通信图、协作图和状态图等。 动态建模描述系统的动作和行为,决定静态部分如何互相协作。 在开发的每个阶段,至少要建立一个静态模型和一个动态模型。,2018/10/19,36,返回,统一建模语言(UML),是一种可视化的建模语言,能让系统构造者用标准、易于理解的方式表达出系统蓝图便于用户、开发者之间进行交流设计的结构。 UML模型和程序源代码之间可以通过代码生成器和逆向生成器进行转换。 有的开发员把UML看做一种表示方法用于集体讨论和高级文档;有的认为UML是一种图示的编程语言从中生成代码或者从已有的代码中合成图形。 UML有13种类型的图,它还有一种类规范语言对象约束语言(Object Constraint Language) (OCL),2018/10/19,37,返回,分析类图,2018/10/19,38,返回,设计类图,2018/10/19,39,返回,2018/10/19,40,返回,部署图,设计阶段的顺序图,2018/10/19,41,返回,5.6.1 用例图,2018/10/19,42,返回,