11.2 开发方法、产品线、软件复用、逆向工程与技术服务
在软件设计与开发领域,掌握核心的开发范式、复用策略及工程实践是提升效率与质量的关键。本节将系统梳理结构化开发与面向对象开发、软件产品线、软件复用、逆向工程以及相关的技术服务支持体系。
一、软件开发方法
- 结构化开发方法
- 核心思想:采用自顶向下、逐步求精的设计原则,将复杂系统分解为层次化的功能模块。强调功能的单一性与模块间的低耦合。
- 主要工具:数据流图(DFD)、结构图(SC)、状态转换图、数据字典等。
- 典型模型:瀑布模型。适用于需求明确、变更较少的场景。
- 面向对象开发方法
- 核心思想:围绕对象(封装了数据和操作)组织系统,通过类、继承、多态、封装等机制提高软件的复用性、灵活性和可维护性。
- 关键过程:包括面向对象分析(OOA)、面向对象设计(OOD)和面向对象编程(OOP)。
- 典型模型:迭代与增量模型(如RUP)、敏捷模型(如Scrum、XP)。
二、软件产品线
软件产品线是一组具有公共核心资产(如需求、架构、组件、文档)和共享特性的软件密集型系统集合。
- 核心思想:基于平台化、规模化复用,旨在快速、低成本地衍生出满足特定需求的系列产品。
- 两个核心过程:
- 核心资产开发:建立产品线共用的平台、架构和可复用组件库。
- 产品开发:利用核心资产,通过定制、配置和扩展,构建具体产品。
- 优点:显著提高生产率、缩短上市时间、降低成本、提升产品质量与一致性。
- 挑战:前期投入大,需要统一的管理和领域分析。
三、软件复用
软件复用是指在开发新软件系统时,重复使用已有的软件资产(如需求规格、设计、代码、测试用例、文档等)的过程。
- 复用层次:
- 代码复用:最基本的复用,如函数库、类库。
- 复用方式:
- 生产者复用:有目的地构建可复用的资产。
- 消费者复用:在新项目中寻找并使用已有的可复用资产。
- 关键技术:组件技术(如COM/DCOM、CORBA、EJB)、软件构件、领域工程、设计模式。
四、逆向工程与再工程
- 逆向工程
- 定义:分析目标系统(通常是缺乏文档的遗留系统),识别其组件及相互关系,并以另一种形式(通常是更高抽象层次,如设计模型或需求规约)创建系统表示的过程。
- 目的:理解系统、恢复设计信息、辅助维护、为再工程做准备。
- 级别:实现级(反编译)、结构级(程序结构)、功能级(功能逻辑)、领域级(业务概念)。
- 再工程(重构)
- 定义:在逆向工程的基础上,对系统进行重新构造或重组,以改善其可理解性、可维护性、性能或适应新的运行环境,同时保留其核心功能。
- 与正向工程的关系:再工程是“逆向工程 → 修改/优化 → 正向工程”的循环过程。
五、技术服务支持
软件交付后的技术服务是保障软件持续价值的关键环节,主要包括:
- 维护服务:纠错性维护(修复缺陷)、适应性维护(适应环境变化)、完善性维护(增强功能性能)、预防性维护(为未来改进做准备)。
- 技术支持与培训:为用户提供操作指导、问题解答和技能培训。
- 系统迁移与升级:协助用户将系统迁移到新平台或升级到新版本。
- 性能监控与优化:持续监控系统运行状态,并进行性能调优。
与关联
这些概念并非孤立存在,而是相互关联、相辅相成。例如:
- 产品线开发 是 软件复用 在组织级和系统级的最高形式体现。
- 高效的复用(如使用产品线资产)依赖于良好的 面向对象设计 和 组件技术。
- 对遗留系统进行现代化改造,常常需要结合 逆向工程 与 再工程 技术。
- 所有开发活动和交付的产品,最终都需要完善的 技术服务 来支撑其全生命周期。
掌握这些核心知识,有助于软件设计师在项目中选择合适的开发范式和复用策略,高效构建并维护高质量的软件系统。