《软件设计师》复习笔记(11.2)——开发方法、产品线、软件复用、逆向
目录
一、信息系统开发方法
(1)结构化方法(生命周期法)
(2)面向对象(OO)方法
(3)原型法
(4)敏捷开发
(5)统一过程(RUP)
真题示例:
二、软件产品线
三、软件复用与逆向工程
(1)软件复用
(2)逆向工程
真题示例:
一、信息系统开发方法
(1)结构化方法(生命周期法)
- 核心思想:自顶向下、逐步求精、模块化设计。
- 组成阶段:结构化分析(SA)、结构化设计(SD)、结构化程序设计(SP)。
- 特点:
- 开发目标清晰化(用户第一原则)。
- 工作阶段化(分阶段审查)。
- 文档规范化(便于维护)。
- 设计结构化(全局到局部)。
- 局限性:
- 开发周期长,难以适应需求变化。
- 面向过程,较少考虑数据结构。
- 常用工具:数据流图、数据字典、判定表、判定树等。
(2)面向对象(OO)方法
- 核心思想:客观世界由对象组成,对象通过组合和交互构成系统。
- 特点:
- 复用性高(基于统一模型)。
- 阶段界限模糊(分析、设计、实现可交叉)。
- 适用于各类信息系统。
- 局限性:
- 依赖面向对象技术,大型项目分析阶段支持不足。
- 结合应用:结构化方法(整体规划) + OO方法(具体开发)。
(3)原型法
- 定义:快速构建系统模型,通过用户反馈迭代完善需求。
- 分类:
- 抛弃式原型(验证需求后丢弃)。
- 演化式原型(逐步完善为最终系统)。
- 水平原型(功能导航)、垂直原型(部分功能实现)。
- 特点:
- 缩短周期、降低风险,用户参与度高。
- 适用于需求不明确或分析难度大的系统。
- 局限性:
- 对开发环境和管理水平要求高。
- 需与其他方法结合使用(非独立方法论)。
(4)敏捷开发
分类 | 具体内容 |
---|---|
4大价值观 | 沟通、简单、反馈、勇气 |
5大原则 | 快速反馈、简单性假设、逐步修改、提倡更改、优质工作 |
12个最佳实践 | 计划游戏、小型发布、隐喻、简单设计、测试先行、重构、结对编程、集体代码所有制、持续集成、每周工作40小时、现场客户、编码标准 |
基本原则 | 短平快的会议、小型版本发布、较少的文档、合作为重、客户直接参与、自动化测试、适应性计划调整 |
常用方法 | SCRUM、极限编程(XP)、水晶方法、特征驱动开发(FDD)、自适应开发 |
- 核心理念:以人为核心,迭代交付,适应需求变化。
- 四大价值观:
- 个体与交互 > 流程与工具。
- 可运行软件 > 详尽文档。
- 客户合作 > 合同谈判。
- 响应变化 > 遵循计划。
- 常用方法:
- 极限编程(XP):测试先行、简单设计、持续集成。
- Scrum:30天“冲刺”迭代,优先级驱动。
- 特性驱动开发(FDD):模型驱动,适合需求变动项目。
(5)统一过程(RUP)
- 特点:用例驱动、架构为中心、迭代增量。
- 四个阶段:初始、细化、构建、交付。
- 适用性:通用框架,适合不同规模/类型的项目。
真题示例:
- 题目:以下关于结构化开发方法的叙述中,不正确的是( )。
- 选项:
- A. 总的指导思想是自顶向下,逐层分解
- B. 基本原则是功能的分解与抽象
- C. 与面向对象开发方法相比,更适合于大规模、特别复杂的项目
- D. 特别适合于数据处理领域的项目
答案分析:面向对象开发方法更适合大规模、特别复杂的项目,结构化开发方法在应对需求变化方面相对较弱。
- 题目:在敏捷过程的开发方法中,( )使用了迭代的方法,其中,把每段时间(30天)一次的迭代称为一个“冲刺”,并按需求的优先级别来实现产品,多个自组织和自治的小组并行地递增实现产品。
- 选项:
- A. 极限编程XP
- B. 水晶法
- C. 并列争球法(Scrum)
- D. 自适应软件开发
答案分析:在敏捷开发方法中,Scrum(并列争球法 )把每30天左右一次的迭代称为“冲刺”,并按需求优先级实现产品,多个小组并行递增实现产品。
二、软件产品线
- 定义:是一个产品集合,这些产品共享一个公共的、可管理的特征集,该特征集能满足特定领域的特定需求。是适合专业开发组织的软件开发方法,可有效提高软件生产率和质量,缩短开发时间,降低总开发成本。
- 核心资源:包括所有产品所共用的软件架构、通用的构件、文档等。
- 产品集合:指产品线中的各种产品。
产品线的建立方式
建立方式 | 基于现有产品 | 全新产品线 |
---|---|---|
演化方式 | 基于现有产品架构设计产品线的架构,经演化现有构件,开发产品线构件 | 产品线核心资源随产品新成员的需求而演化 |
革命方式 | 核心资源的开发基于现有产品集的需求和可预测的、将来需求的超集 | 开发满足所有预期产品线成员的需求的核心资源 |
三、软件复用与逆向工程
(1)软件复用
- 目标:利用已有知识(代码、设计、文档)缩减开发成本。
- 级别:代码复用 → 设计复用 → 领域知识复用。
(2)逆向工程
- 定义:从程序反向提取设计信息,分为四个抽象级别:
- 实现级:语法树、符号表。
- 结构级:调用图、程序结构。
- 功能级:数据流模型。
- 领域级:E-R模型(抽象最高,完备性最低)。
- 相关概念:
- 重构:同一抽象级别的系统描述调整。
- 设计恢复:从代码提取设计信息。
- 再工程:逆向分析 + 修改重构(改善质量)。
- 正向工程:基于恢复信息重新开发系统。
真题示例:
应用系统构建中可以采用多种不同的技术,( )可以将软件某种形式的描述转换为更高级的抽象表现形式,而利用这些获取的信息,( )能够对现有系统进行修改或重构,从而产生系统的一个新版本。
A. 逆向工程(Reverse Engineering) B. 系统改进(System Improvement)
C. 设计恢复(Design Recovery) D. 再工程(Re - engineering)
A. 逆向工程(Reverse Engineering) B. 系统改进(System Improvement)
C. 设计恢复(Design Recovery) D. 再工程(Re - engineering)
- 逆向工程(Reverse Engineering)可以将软件某种形式的描述转换为更高级的抽象表现形式,答案选A。逆向工程是从代码等较低层次的表示中提取出更高级别的设计信息等。
- 利用从逆向工程等获取的信息,再工程(Re - engineering)能够对现有系统进行修改或重构,从而产生系统的一个新版本。再工程涉及对现有系统进行分析、修改和重新构建等操作,以提高系统的质量、性能或使其适应新的需求等。
在软件系统工具中,版本控制工具属于( ),软件评价工具属于( )。
A. 软件开发工具 B. 软件维护工具 C. 编码与排错工具 D. 软件管理和软件支持工具
A. 逆向工程工具 B. 开发信息库工具 C. 编码与排错工具 D. 软件管理和软件支持工具
分类 | 子类 | 具体工具示例 |
---|---|---|
软件开发工具 | 需求分析工具 | 用例图工具、用户故事工具、需求跟踪工具(如JIRA、DOORS) |
设计工具 | UML建模工具(如Enterprise Architect、Visual Paradigm)、流程图工具(如Lucidchart) | |
编码与排错工具 | 集成开发环境(如VS Code、IntelliJ IDEA)、调试器(如GDB、Chrome DevTools) | |
软件维护工具 | 版本控制工具 | Git、SVN、Mercurial |
文档分析工具 | Doxygen、Sphinx | |
开发信息库工具 | 数据库管理工具(如MySQL Workbench)、知识库系统(如Confluence) | |
逆向工程工具(易错) | IDA Pro、Ghidra、JD-GUI | |
再工程工具 | 代码重构工具(如ReSharper、Eclipse重构功能) | |
软件管理和支持工具 | 项目管理工具 | Microsoft Project、Trello、Asana |
配置管理工具 | Ansible、Puppet、Chef | |
软件评价工具 | SonarQube、Coverity(代码质量分析) | |
工具评价与选择支持 | 功能对比矩阵、成本效益分析模板 |
- 版本控制工具所属类别:版本控制工具用于软件维护过程中对软件版本进行管理等,属于软件维护工具。版本控制工具可记录软件的不同版本、跟踪修改历史等,方便软件维护工作。
- 软件评价工具所属类别:软件评价工具用于对软件进行评估等操作,属于软件管理和软件支持工具。软件评价工具可对软件的质量、性能等方面进行分析和评价,为软件管理提供支持 。