面向对象软件工程实践指南 在建立起对象模型之后,需要观察对象的动态行为。所有对象都有自己的生存周期。每 个对象在生产周期的每个阶段都有特定的适合的运行规律和行为准则来规范其行为。动态模 型可以借助顺序图、通信图、状态图或活动图进行建模。 ●物理模型 物理模型关注的是系统实现过程的建模,常用组件图和部署图表示静态物理实现模型, 用交互图和状态图来描述动态实现模型。 2.3.2面向对象设计 面向对象设计(Object Oriented Design,OOD)是面向对象方法的核心阶段,它建立软 件系统的模型。面向对象设计与面向对象分析的建模原则和方法相同,但是面向对象设计模 型的抽象层次较低,包含了与具体实现有关的细节。面向对象设计的准则包含模块化、抽象、 封装、弱耦合、强内聚和可重用等。 面向对象设计的主要任务是将分析模型转换为设计模型,设计的目标是提高生产效率、 质量和可维护性,在面向分析的基础上,考虑如何实现系统。面向对象设计进一步细化分为 系统设计和对象设计。系统设计是针对整个系统的,主要包含系统高层结构设计、确定设计 元素、确定任务管理策略、实现分布式机制、设计数据存储方案和设计UI界面六个方面。 对象设计是对每个设计对象进行的详细设计,包含组成系统的类、子系统和接口、包等。 2.3.3面向对象实现 面向对象的实现(Object Oriented Implementation,OOI)主要包含两项工作:面向对象 编程(Object Oriented Programming,.OOP)和面向对象测试(Object Oriented Testing,OOT)。 1.面向对象编程 面向对象编程首先遇到的问题是程序设计语言的选择。根据语言的功能和产生时间,代 表性的面向对象编程语言如下: 1)面向对象兴盛时期(1980--1990年) ● Smalltalk80纯面向对象语言 ● C++ 从C和Simula发展而来 Eiffel 从Ada和Simula发展而来 2)框架的出现(1990--现在) ● Visual Basic简化了Windows应用的图像界面(GUI)开发 ● Java Oak的后续版本 ● Python 面向对象的脚本语言
面向对象软件工程实践指南 17 在建立起对象模型之后,需要观察对象的动态行为。所有对象都有自己的生存周期。每 个对象在生产周期的每个阶段都有特定的适合的运行规律和行为准则来规范其行为。动态模 型可以借助顺序图、通信图、状态图或活动图进行建模。 物理模型 物理模型关注的是系统实现过程的建模,常用组件图和部署图表示静态物理实现模型, 用交互图和状态图来描述动态实现模型。 2.3.2 面向对象设计 面向对象设计(Object Oriented Design,OOD)是面向对象方法的核心阶段,它建立软 件系统的模型。面向对象设计与面向对象分析的建模原则和方法相同,但是面向对象设计模 型的抽象层次较低,包含了与具体实现有关的细节。面向对象设计的准则包含模块化、抽象、 封装、弱耦合、强内聚和可重用等。 面向对象设计的主要任务是将分析模型转换为设计模型,设计的目标是提高生产效率、 质量和可维护性,在面向分析的基础上,考虑如何实现系统。面向对象设计进一步细化分为 系统设计和对象设计。系统设计是针对整个系统的,主要包含系统高层结构设计、确定设计 元素、确定任务管理策略、实现分布式机制、设计数据存储方案和设计 UI 界面六个方面。 对象设计是对每个设计对象进行的详细设计,包含组成系统的类、子系统和接口、包等。 2.3.3 面向对象实现 面向对象的实现(Object Oriented Implementation,OOI)主要包含两项工作:面向对象 编程(Object Oriented Programming,OOP)和面向对象测试(Object Oriented Testing,OOT)。 1. 面向对象编程 面向对象编程首先遇到的问题是程序设计语言的选择。根据语言的功能和产生时间,代 表性的面向对象编程语言如下: 1)面向对象兴盛时期(1980----1990 年) Smalltalk 80 纯面向对象语言 C++ 从 C 和 Simula 发展而来 Eiffel 从 Ada 和 Simula 发展而来 2)框架的出现 (1990----现在) Visual Basic 简化了 Windows 应用的图像界面(GUI)开发 Java Oak 的后续版本 Python 面向对象的脚本语言
面向对象软件工程实践指南 ● J2EE 基于Java的企业级计算框架 ● Visual C# NET框架下的Java的竞争者 ● Visual Basic .NET 针对微软.NET框架的Visual Basic 2)面向对象测试 完整的面向对象测试类型包括了面向对象分析测试、面向对象设计测试、面向对象编程 测试、面向对象单元测试、面向对象集成测试和面向对象系统测试。 ●面向对象分析测试 对于一个面向对象系统而言,对象是相对稳定的,关系是相对不稳定的。所以,对面向 对象分析的测试需要考虑对分析模型中对象、对象关系、对象属性和方法进行测试和确认。 ● 面向对象设计测试 面向对象设计是对面向对象分析的进一步细化和抽象。对面向对象设计的测试需要考虑 对设计模型中类、类的层次结构、类库进行测试和确认。 ● 面向对象编程测试 面向对象编程阶段把功能的实现分布在类中。面向对象编程的测试忽略类的实现细则, 主要集中在类功能的实现和相应的面向对象程序风格上,主要测试两个方面:数据成员是否 满足数据封装的要求和类是否实现了要求的功能。 ● 面向对象单元测试 单元测试是指对类及其实例的测试。最小的可测试单位是封装的类或对象,类包含一组 操作和属性,但在面向对象单元测试中,操作和属性作为整体进行测试。 ●面向对象集成测试 面向对象系统的集成测试主要有两种策略:基于线程的测试和基于使用的测试。基于线 程的测试一般应用回归测试,对系统的一个输入或事件所需要的一组类,每个线程被集成并 分别测试。基于使用的测试,首先测试那些几乎不依赖其他类的独立类,在独立类测试完成 之后,再测试依赖类,直到构造出完整系统。 ·面向对象系统测试 通过单元测试和集成测试只能保证软件的功能得以实现,但不能保证实际运行时,是否 满足用户的需求,因此,规范的系统测试是必要的。系统测试一般尽量搭建与用户实际使用 环境相同的测试平台,检测软件是否能够完全再现问题空间。 18
面向对象软件工程实践指南 18 J2EE 基于 Java 的企业级计算框架 Visual C# .NET 框架下的 Java 的竞争者 Visual Basic .NET 针对微软.NET 框架的 Visual Basic 2)面向对象测试 完整的面向对象测试类型包括了面向对象分析测试、面向对象设计测试、面向对象编程 测试、面向对象单元测试、面向对象集成测试和面向对象系统测试。 面向对象分析测试 对于一个面向对象系统而言,对象是相对稳定的,关系是相对不稳定的。所以,对面向 对象分析的测试需要考虑对分析模型中对象、对象关系、对象属性和方法进行测试和确认。 面向对象设计测试 面向对象设计是对面向对象分析的进一步细化和抽象。对面向对象设计的测试需要考虑 对设计模型中类、类的层次结构、类库进行测试和确认。 面向对象编程测试 面向对象编程阶段把功能的实现分布在类中。面向对象编程的测试忽略类的实现细则, 主要集中在类功能的实现和相应的面向对象程序风格上,主要测试两个方面:数据成员是否 满足数据封装的要求和类是否实现了要求的功能。 面向对象单元测试 单元测试是指对类及其实例的测试。最小的可测试单位是封装的类或对象,类包含一组 操作和属性,但在面向对象单元测试中,操作和属性作为整体进行测试。 面向对象集成测试 面向对象系统的集成测试主要有两种策略:基于线程的测试和基于使用的测试。基于线 程的测试一般应用回归测试,对系统的一个输入或事件所需要的一组类,每个线程被集成并 分别测试。基于使用的测试,首先测试那些几乎不依赖其他类的独立类,在独立类测试完成 之后,再测试依赖类,直到构造出完整系统。 面向对象系统测试 通过单元测试和集成测试只能保证软件的功能得以实现,但不能保证实际运行时,是否 满足用户的需求,因此,规范的系统测试是必要的。系统测试一般尽量搭建与用户实际使用 环境相同的测试平台,检测软件是否能够完全再现问题空间
面向对象软件工程实践指南 2.4面向对象软件开发流程 面向对象软件开发过程可以划分为阶段(Stages)。每个阶段又包含许多任务(Tasks), 每一个任务可以进一步分解为子任务(Sub-tasks)。图2-1说明了面向对象软件开发过程的 组织模式。 面向对象方法 阶段 阶段 任务 任务 任务 任务 子任务 子任务 子任务 子任务 子任务 子任务 子任务 子任务 图2-1面向对象软件开发流程的组织模式 面向对象软件开发过程通常包含以下阶段: 1.计划阶段 也被称为可行性与计划研究阶段,是软件开发的第一个阶段。在此阶段内,需要确定项 目的总体目标和范围,进行可行性分析、制定开发计划、考虑风险,并完成相应文件的编制。 2.需求定义阶段 此阶段的任务就是获取正确的需求,并通过规范的方式进行需求的表达。在面向对象方 法学中,该阶段除了获取需求外,也应该获取领域概念,作为对象识别的依据。 3.分析阶段 通过分析阶段,开发者对需求有了自己的理解,一方面对需求的正确性、全面性、可行 性进行检验,另一方面,建立需求与软件设计之间的桥梁,从而使得后续阶段中软件开发工 作能够顺利开展。因此,分析阶段依旧是围绕需求展开的,并不涉及到软件设计的细节。 4.设计阶段 在设计阶段,我们运用面向对象方法,对类的定义进行细化,并将类组织成组件、子系 统。 5.构造阶段
面向对象软件工程实践指南 19 2.4 面向对象软件开发流程 面向对象软件开发过程可以划分为阶段(Stages)。每个阶段又包含许多任务(Tasks), 每一个任务可以进一步分解为子任务(Sub-tasks)。图 2-1 说明了面向对象软件开发过程的 组织模式。 图 2-1 面向对象软件开发流程的组织模式 面向对象软件开发过程通常包含以下阶段: 1. 计划阶段 也被称为可行性与计划研究阶段,是软件开发的第一个阶段。在此阶段内,需要确定项 目的总体目标和范围,进行可行性分析、制定开发计划、考虑风险,并完成相应文件的编制。 2. 需求定义阶段 此阶段的任务就是获取正确的需求,并通过规范的方式进行需求的表达。在面向对象方 法学中,该阶段除了获取需求外,也应该获取领域概念,作为对象识别的依据。 3. 分析阶段 通过分析阶段,开发者对需求有了自己的理解,一方面对需求的正确性、全面性、可行 性进行检验,另一方面,建立需求与软件设计之间的桥梁,从而使得后续阶段中软件开发工 作能够顺利开展。因此,分析阶段依旧是围绕需求展开的,并不涉及到软件设计的细节。 4. 设计阶段 在设计阶段,我们运用面向对象方法,对类的定义进行细化,并将类组织成组件、子系 统。 5. 构造阶段
面向对象软件工程实践指南 在设计完成后,构造阶段是根据设计模型“生产”软件系统的过程。在这个阶段,关注 的重点是如何高效、高质量地把软件代码编写完成。我们需要确定开发环境、制定编码规范, 并按照计划协调各个团队开展工作。 6.测试阶段 在实际软件开发项目中,软件测试是一个不可缺少的环节,它通过将实际输出与预期输 出进行审核或者比较,来揭示软件中存在的缺陷,以便开发者进行改进。由于不可能执行所 有的情况,因此我们通过设计一些测试用例希望它们能够揭露尽可能多的软件中存在的缺陷。 同时,由于测试的时间和费用有限,我们也需要认真规划测试过程,使测试达到的效果最好。 7.交付阶段 经过努力开发完成软件后,整个项目并非结束了。开发出来的软件必须使得用户满意才 意味着项目的成功。因此,交付阶段就是使用户能够满意地应用上软件的过程。 8.总结阶段 在一个软件成功交付后,除了按照约定提供维护服务外,还需要对这个软件项目进行总 结,以分析此软件项目过程中成功的经验、失败的教训,这样才可以不断提高软件开发项目 的实施水平。 2.5统一开发过程-RUP 24中介绍的是一种瀑布方式来组织开发过程的方法。除了这种比较传统的方法外,还 有强调原型迭代的方法。其中,RUP(Rational Unified Process)就是迭代化开发方法的代表。 RUP是由Rational公司提出的软件工程方法,可以与UML良好的集成。它采用二维开 发模型,由软件生命周期和RUP的核心工作流构成的一个二维空间,如图2-2所示。 其中,横轴为时间轴,从组织管理者的角度来描述整个软件的开发生命周期,是RUP 的动态组成部分。RUP把软件开发周期划为四个阶段:初始、细化、构造和交付。纵轴表 示核心工作流。工作流描述了一个有意义的连续的行为序列。RUP中的9个核心工作流为 业务建模、需求、分析和设计、实现、测试、发布、配置与变更管理、项目管理和环境。前 六个为核心过程工作流,后三个为核心支持工作流。 在每个阶段,都将围绕用例展开多轮迭代。在每一次迭代中都将涉及各个工作流中的活 动,产生交付物甚至是可验证的原型。当然,在不同阶段中,涉及的各个工作流的比重是有 区别的。图2-2中每个工作流对应的波浪线就反映了在不同阶段中的工作量比例。 20
面向对象软件工程实践指南 20 在设计完成后,构造阶段是根据设计模型“生产”软件系统的过程。在这个阶段,关注 的重点是如何高效、高质量地把软件代码编写完成。我们需要确定开发环境、制定编码规范, 并按照计划协调各个团队开展工作。 6. 测试阶段 在实际软件开发项目中,软件测试是一个不可缺少的环节,它通过将实际输出与预期输 出进行审核或者比较,来揭示软件中存在的缺陷,以便开发者进行改进。由于不可能执行所 有的情况,因此我们通过设计一些测试用例希望它们能够揭露尽可能多的软件中存在的缺陷。 同时,由于测试的时间和费用有限,我们也需要认真规划测试过程,使测试达到的效果最好。 7. 交付阶段 经过努力开发完成软件后,整个项目并非结束了。开发出来的软件必须使得用户满意才 意味着项目的成功。因此,交付阶段就是使用户能够满意地应用上软件的过程。 8. 总结阶段 在一个软件成功交付后,除了按照约定提供维护服务外,还需要对这个软件项目进行总 结,以分析此软件项目过程中成功的经验、失败的教训,这样才可以不断提高软件开发项目 的实施水平。 2.5 统一开发过程--RUP 2.4 中介绍的是一种瀑布方式来组织开发过程的方法。除了这种比较传统的方法外,还 有强调原型迭代的方法。其中,RUP(Rational Unified Process)就是迭代化开发方法的代表。 RUP 是由 Rational 公司提出的软件工程方法,可以与 UML 良好的集成。它采用二维开 发模型,由软件生命周期和 RUP 的核心工作流构成的一个二维空间,如图 2-2 所示。 其中,横轴为时间轴,从组织管理者的角度来描述整个软件的开发生命周期,是 RUP 的动态组成部分。RUP 把软件开发周期划为四个阶段:初始、细化、构造和交付。纵轴表 示核心工作流。工作流描述了一个有意义的连续的行为序列。RUP 中的 9 个核心工作流为 业务建模、需求、分析和设计、实现、测试、发布、配置与变更管理、项目管理和环境。前 六个为核心过程工作流,后三个为核心支持工作流。 在每个阶段,都将围绕用例展开多轮迭代。在每一次迭代中都将涉及各个工作流中的活 动,产生交付物甚至是可验证的原型。当然,在不同阶段中,涉及的各个工作流的比重是有 区别的。图 2-2 中每个工作流对应的波浪线就反映了在不同阶段中的工作量比例
面向对象软件工程实践指南 阶段 工作流 初始化 细化 构造 发布 业务建模 需求 分析和设计 实现 测试 发布 配置与变更管理 项目管理 环境 初始 细化日细化2构造构婆发布发布 选代 图2-2RUP中的工作流 21
面向对象软件工程实践指南 21 图 2-2 RUP 中的工作流