文章目录
- [1 内容概要](#1 内容概要)
- [2 信息系统的生命周期](#2 信息系统的生命周期)
-
- [2.1 单个系统开发周期](#2.1 单个系统开发周期)
- [3 软件开发方法](#3 软件开发方法)
- [4 软件开发模型](#4 软件开发模型)
-
- [4.1 概述](#4.1 概述)
- [4.2 其他经典模型](#4.2 其他经典模型)
- [4.3 瀑布模型](#4.3 瀑布模型)
- [4.4 V模型](#4.4 V模型)
- [4.5 喷泉模型](#4.5 喷泉模型)
- [4.6 W模型](#4.6 W模型)
- [4.7 迭代与增量](#4.7 迭代与增量)
- [4.8 增量模型与螺旋模型](#4.8 增量模型与螺旋模型)
- [4.9 构建组装模型](#4.9 构建组装模型)
- [4.10 快速应用开发模型(RAD)](#4.10 快速应用开发模型(RAD))
- [4.11 统一过程](#4.11 统一过程)
- [4.12 敏捷方法](#4.12 敏捷方法)
-
- [4.12.1 敏捷开发方法XP:4大价值观](#4.12.1 敏捷开发方法XP:4大价值观)
- [4.12.2 敏捷开发方法XP:12条过程实践规则](#4.12.2 敏捷开发方法XP:12条过程实践规则)
- [4.13 敏捷开发方法](#4.13 敏捷开发方法)
-
- [4.13.1 敏捷开发方法 - SCRUM](#4.13.1 敏捷开发方法 - SCRUM)
- [5 逆向工程](#5 逆向工程)
- [6 附录:思维导图](#6 附录:思维导图)
1 内容概要
2 信息系统的生命周期
- 立项阶段:企业全局、形成概念、需求分析
- 开发阶段
- 运维阶段:通过验收、移交之后
- 消亡阶段:更新改造、功能扩展、报废重建
2.1 单个系统开发周期
①系统规划
- 初步调查、分析系统目标、子系统组成、拟实施方案、可行性研究、制定系统建设方案
- 输出文档:系统设计任务书(系统建设方案、实施计划)
②系统分析
- 业务流程分析、数据与数据流程分析、软件需求分析、网络需求分析
- 输出文档:系统需求规格说明书、软件需求规格说明书、确认测试计划、系统测试计划、初步的用户手册
③系统设计
- 软件架构设计、软件概要设计、详细设计、网络设计
- 输出文档:架构设计文档、概要设计说明书、详细设计说明书、程序规格说明书、概要测试计划、详细测试计划、各类设计图
④系统实施
- 软件编码、软件单元/集成/系统测试、综合布线
- 输出文档:源码、单元测试、集成测试报告、操作手册
⑤系统验收
- 确认测试、试运行
- 输出文档:确认测试报告,项目验收报告
3 软件开发方法
结构化法
- 自顶向下,逐步分解求精严格区分阶段,阶段产出标准化
- 应变能力差
面向对象方法
- 自底向上
- 阶段界限不明
- 更好应变、更好复用
- 符合人们的思维习惯
面向服务的方法
- 粗粒度、松耦合
- 标准化和构件化
- 抽象级别:操作【低】->服务【中】->业务流程【高】
原型法
需求阶段,作用是展示及获取需求
针对需求不明确
- 按功能分:水平原型(界面)、垂直原型(复杂算法)
- 按最终结果分:抛弃式原型、演化式原型
形式化方法
- 净室软件工程【受控污染级别的环境】
- 数学模型化
- 所有东西均可证明/验证,而不是测试
统一过程方法【UP】
敏捷方法
例1
软件方法学是以软件开发方法为研究对象的学科。其中,()是先对最高层次中的问题进行定义、设计、编程和测试,而将其中未解决的问题作为一个子任务放到下一层次中去解决。()是根据系统功能要求,从具体的器件、逻辑部件或者相似系统开始,通过对其进行相互连接、修改和扩大,构成所要求的系统。()是建立在严格数学基础上的软件开发方法。
A:面向对象开发方法
B:形式化开发方法
C:非形式化开发方法
D:自顶向下开发方法
A:自底向上开发方法
B:形式化开发方法
C:非形式化开发方法
D:原型开发方法
A:自底向上开发方法
B:形式化开发方法
C:非形式化开发方法
D:自顶向下开发方法
解析
- 自顶向下开发方法特点,从整体到局部,逐步细化。因此,第一个空应该填 D;
- 自底向上开发方法的特点,即从具体的部件开始,逐步构建整体系统。因此,第二个空应该填 A;
- 形式化开发方法的特点,即使用数学方法来描述和验证软件系统。因此,第三个空应该填 B;
答案:D、A、B。
4 软件开发模型
4.1 概述
4.2 其他经典模型
- 原型法:构建一个简易原型,用来获取需求。针对需求不明确的项目
- 快速型原型:又称抛弃型原型,原型最终被抛弃掉了
- 演化模型:演化原型成为最终产品
- 螺旋模型:原型+瀑布模型
- 增量模型:一步一步新增模块完成任务
4.3 瀑布模型
- 严格区分阶段
- 只适合需求明确的项目
4.4 V模型
- 测试贯穿于始终
- 测试分阶段,测试计划提前
4.5 喷泉模型
- 早期著名的面向对象模型
4.6 W模型
- 测试和开发并行进行
4.7 迭代与增量
- 增量开发:逐步交付完整的子系统,每个增量都是独立的
- 迭代开发:通过多个迭代周期逐步改进和扩展系统,每个迭代都是一个完整的开发周期
4.8 增量模型与螺旋模型
- 以原型为基础+瀑布模型
- 考虑了风险问题
4.9 构建组装模型
- 需求分析和定义
- 软件架构设计
- 构件库的建立
- 构建标准:CORBA、COM/DCOM、EJB
- 构件库:构建获取、构建管理
- 应用软件构件
- 测试和发布
4.10 快速应用开发模型(RAD)
4.11 统一过程
- 统一过程:UP(Unified Process)或RUP(Rational Unified Process)
- 特点:用例驱动、以架构为中心、迭代和增量;
- 各阶段及其特点
-
初始
定义最终产品视图和业务模型
确定系统范围
-
细化
设计及确定系统架构
制定工作计划及资源要求
-
构建
开发剩余构件和应用程序功能,把这些构件组装为产品,并进行详细测试
-
交付
确保软件对最终用户是可用的,进行β测试,制作产品发布版本
-
例2
()把整个软件开发流程分成多个阶段,每一个阶段都由目标设定、风险分析、开发和有效性验证以及评审构成。
A:原型模型
B:瀑布模型
C:螺旋模型
D:V模型
解析
- 螺旋模型是一种风险驱动的软件开发过程模型,它将整个软件开发流程分成多个阶段,每个阶段都包括目标设定、风险分析、开发和有效性验证以及评审;
- 原型模型:通过快速构建原型来验证需求,但不强调风险分析和评审;
- 瀑布模型:线性顺序的开发模型,每个阶段完成后进入下一个阶段,不强调风险分析和评审;
- V模型:强调测试和开发的对应关系,但不强调风险分析和评审。
答案:C。
例3
基于RUP的软件过程是一个迭代过程。一个开发周期包括初始、细化、构建和移交四个阶段,每次通过这四个阶段就会产生一代软件,其中建立完善的架构是()阶段的任务。采用迭代式开发,()。
A:初始
B:细化
C:构建
D:移交
A:在每一轮迭代中都要进行测试与集成
B:每一轮迭代的重点是对特定的用例进行部分实现
C:在后续迭代中强调用户的主动参与
D:通常以功能分解为基础
解析
RUP(Rational Unified Process)是一种迭代和增量的软件开发过程框架,它将软件开发过程分为四个主要阶段:初始、细化、构建和移交。
初始阶段:确定项目的范围、目标和可行性,制定初步的项目计划。
细化阶段:详细分析需求,建立系统的架构,识别和解决主要风险。
构建阶段:实现系统的功能,进行集成和测试,逐步完善系统。
移交阶段 :准备系统的发布,进行用户培训和部署,确保系统顺利交付
建立完善的架构是细化阶段的任务。在细化阶段,开发团队会详细分析需求,设计系统的架构,并解决主要的技术和业务风险。
迭代式开发的特点是每个迭代周期都要进行测试与集成,以确保系统的质量和稳定性
答案:B、A。
4.12 敏捷方法
-
无软件开发方法 => 传统软件开发方法 =>敏捷方法
-
敏捷宣言
- 个体和交互胜过过程和工具
- 可工作的软件胜过大量的文档【实现与测试是核心】
- 客户合作胜过合同谈判
- 响应变化胜过遵循计划
-
传统软件开发方法和敏捷方法的对比
-
传统软件开发方法
- 预设性的
- 以开发过程为本
- 整体分阶段
-
敏捷方法
- 适应性的
- 以人为本
- 增量迭代,小步快跑
- 适合小型项目
-
例4
下列关于敏捷方法的叙述中,正确的是( ) 。
A:敏捷方法强调软件过程与工具胜过个体和交互
B:敏捷方法的思想是预设性,而不是适应性
C:敏捷方法尤其适合于开发团队比较大的项目
D:敏捷方法强调响应变化胜过遵循计划
解析
- 敏捷方法强调软件个体和交互胜过过程与工具
- 敏捷方法的思想是适应性,而不是预设性
- 敏捷方法尤其适合小型项目
- 敏捷方法强调响应变化胜过遵循计划
答案:D。
4.12.1 敏捷开发方法XP:4大价值观
- 沟通【加强面对面沟通】
- 简单【不过度设计】
- 反馈【及时反馈】
- 勇气【接受变更的勇气】
4.12.2 敏捷开发方法XP:12条过程实践规则
- 简单设计
- 测试驱动
- 代码重构
- 结对编程
- 持续集成
- 现场客户
- 发行版本小型化
- 系统隐喻
- 代码集体所有制
- 规划策略
- 规范代码
- 40小时工作机制
4.13 敏捷开发方法
- 极限编程(XP):一些对费用控制严格的公司中的使用,非常有效。
- 水晶方法:探索了用最少纪律约束而仍能成功的方法,从而在产出效率与易于运作上达到一种平衡。
- 开放式源码:程序开发人员在地域上分布很广【其他方法强调集中办公】。
- SCRUM:明确定义了的可重复的方法过程。
- 功用驱动开发方法(FDD):编程开发人员分成两类︰首席程序员和"类"程序员。
- ASD方法:其核心是三个非线性的、重叠的开发阶段:猜测、合作与学习。
- 动态系统开发方法(DSDM):倡导以业务为核心。
例5
()适用于程序开发人员在地域上分布很广的开发团队。()中,编程开发人员分成首席程序员和"类"程序员。
A:水晶系列(Crystal)开发方法
B:开放式源码(Open Source)开发方法
C: scrum开发方法
D:功用驱动开发方法(FDD)
A:自适应软件开发(ASD)
B:极限编程开发方法(XP)
C:开放统一过程开发方法(Open uP)
D:功用驱动开发方法(FDD)
解析
- 开放式源码:程序开发人员在地域上分布很广【其他方法强调集中办公】
- 功用驱动开发方法(FDD)∶编程开发人员分成两类︰首席程序员和"类"程序员
答案:B、D。
4.13.1 敏捷开发方法 - SCRUM
SCRUM 是一种广泛使用的敏捷开发方法,它强调迭代和增量式的开发过程,通过短周期的迭代(称为"冲刺"或"Sprint")来交付可工作的软件。SCRUM 的核心理念是通过自组织和跨职能团队的合作,快速响应变化,持续交付高质量的软件。
SCRUM 的核心组件
-
角色:
- 产品负责人(Product Owner):负责定义产品的需求和优先级,确保团队理解并专注于最有价值的功能。
- SCRUM 主管(SCRUM Master):负责确保 SCRUM 过程的正确执行,帮助团队消除障碍,提高效率。
- 开发团队(Development Team):负责实际的开发工作,通常由跨职能的成员组成,如开发人员、测试人员、设计师等。
-
工件:
- 产品待办列表(Product Backlog):包含所有需要完成的需求和功能,由产品负责人维护和优先级排序。
- 冲刺待办列表(Sprint Backlog):在每个冲刺开始时,从产品待办列表中选择一部分需求,形成冲刺待办列表,开发团队在此基础上进行工作。
- 增量(Increment):每个冲刺结束后,团队交付的可工作的软件部分,称为增量。
-
仪式:
- 冲刺计划会议(Sprint Planning Meeting):在每个冲刺开始时举行,团队选择产品待办列表中的需求,制定冲刺目标和计划。
- 每日站会(Daily Stand-up):每天举行,团队成员简短汇报昨天的工作、今天的工作计划和遇到的障碍。
- 冲刺评审会议(Sprint Review Meeting):在每个冲刺结束时举行,团队展示完成的增量,获取反馈。
- 冲刺回顾会议(Sprint Retrospective Meeting):在每个冲刺结束时举行,团队回顾冲刺过程,识别改进点。
SCRUM 的优势
- 灵活性:通过短周期的迭代,快速响应需求变化。
- 透明性:所有工作都记录在产品待办列表中,团队和利益相关者可以随时了解进度。
- 持续改进:通过冲刺回顾会议,团队不断识别和改进工作流程。
- 客户满意度:通过频繁的增量交付,客户可以尽早看到和使用产品,提供反馈。
SCRUM 的挑战
- 团队成熟度:SCRUM 需要团队成员具备较高的自组织能力和跨职能技能。
- 需求管理:产品负责人需要有效地管理和优先级排序产品待办列表。
- 文化适应:组织需要适应敏捷文化和价值观,如透明性、协作和持续改进。
5 逆向工程
- 逆向工程是设计的再恢复过程
- 实现级:包括程序的抽象语法树、符号表、过程的设计表示
- 结构级:包括反映程序分量之间相互依赖关系的信息,例如调用图、结构图、程序和数据结构
- 功能级:包括反映程序段功能及程序段之间关系的信息,例如数据和控制流模型
- 领域级:包括反映程序分量或程序诸实体与应用领域概念之间对应关系的信息,例如实体关系模型
相关概念
与逆向工程相关的概念有重构、设计恢复、再工程和正向工程
- (1)重构(restructuring)。重构是指在同一抽象级别上转换系统描述形式
- (2)设计恢复(design recovery)。设计恢复是指借助工具从已有程序中抽象出有关数据设计、总体结构设计和过程设计等方面的信息
- (3)逆向工程(reverse engineering) :逆向工程是分析程序,力图在比源代码更高抽象层次上建立程序的表示过程,逆向工程是设计的恢复过程
- (4)正向工程(forward engineering)。正向工程是指不仅从现有系统中恢复设计信息,而且使用该信息去改变或重构现有系统,以改善其整体质量
- (5)再工程(re-engineering)。再工程是对现有系统的重新开发过程,包括逆向工程、新需求的考虑过程和正向工程三个步骤
例6
软件逆向工程就是分析已有的程序,寻求比源代码更高级的抽象表现形式。在逆向工程导出信息的四个抽象层次中,()包括反映程序各部分之间相互依赖关系的信息;()包括反映程序段功能及程序段之间关系的信息。
A:实现级
B:结构级
C:功能级
D:领域级
A:实现级
B:结构级
C:功能级
D:领域级
解析
- 实现级:包括程序的抽象语法树、符号表、过程的设计表示
- 结构级:包括反映程序分量之间相互依赖关系的信息,例如调用图、结构图、程序和数据结构
- 功能级:包括反映程序段功能及程序段之间关系的信息,例如数据和控制流模型
- 领域级:包括反映程序分量或程序诸实体与应用领域概念之间对应关系的信息,例如实体关系模型
答案:B、C。