原书:《Software Engineering: A Prationer’s Approach 》—— Roger S. Pressman & Bruce R. Maxim
翻译版:《软件工程》,大黑书
文章目录
- 一、软件的本质
-
- 1.1 软件的本质
- 二、软件工程
-
- 2.1 定义
- 2.2 软件过程
-
- 1. 定义
- 2. 通用原则
- `general principles`
- 三、软件过程结构
-
- `software process structure`
- 3.1 通用过程模型
- 3.2 定义框架结构
- 3.3 明确任务集
- 3.4 过程模式
- `process pattern`
- 四、过程模型
-
- 4.1 常用的过程模型
- `Prescriptive Process Model`
-
- 4.1.1 瀑布模型和V模型
- `waterfall model`
-
- 4.1.2 增量过程模型
- `Incremental Process Model`
-
- 4.1.3 演化过程模型
- `Evolutionary Process Models`
-
- 4.1.4 并发模型
- `Concurrent Model`
- 4.2 专用过程模型
- `Specialized Process Models`
-
- 4.2.1 基于构件的开发
- `Component-Based Development`
-
- 4.2.2 形式化方法模型
- `Formal Methods Model`
-
- 4.2.3 面向切面开发
- `Aspect-Oriented Software Development`
- 4.3 统一过程
- `United Process`
-
- 4.3.1 统一过程简史
- 4.3.2 统一过程的各个阶段
- 4.4 个人与团队合作过程
- `Personal and Team Process Models`
-
- 4.4.1 个人过程
- `Personal Software Process, PSP`
-
- 4.4.2 团队过程
- `Team Software Process, TSP`
- 五、敏捷开发
-
- `Agile Development`
- 5.1 什么是敏捷
- 5.2 敏捷及变更成本
- 5.3 什么是敏捷过程
-
- 5.3.1 敏捷原则
- 5.4 极限编程
- `eXtreme Programming, XP`
-
- 5.4.2 工业极限编程
- 5.5 其他敏捷过程模型
-
- 5.5.1 Scrum
- 5.5.2 动态系统开发方法
- `Dynamic System Development Method, DSDM`
-
- 5.5.3 敏捷的统一过程
- `Agile Unified Process, AUP`
- 六、人员
一、软件的本质
1.1 软件的本质
1 – 软件即是产品,也是交付产品的载体。
2 – 硬件磨损——浴缸曲线(早期和末期磨损率高);软件退化——初期有未知的缺陷,变更时又会突然提高
3 – 软件应用领域:系统软件、应用软件、工程科学软件、嵌入式软件、产品线软件、Web/移动APP、人工智能软件
二、软件工程
2.1 定义
1 – 软件工程定义:将方法应用于软件的开发、运行和维护,也就是将工程化方法应用于软件。
2 – 软件工程层次:工具、方法、过程、质量关注点
7个关注软件工程整体实践的原则:
- 能为用户提供价值
- 保持简洁:尽可能简洁而不失简化
- 保持愿景:保持概念的一致性
- 关注使用者:让别人理解软件怎么用
- 面向未来:考虑到“如果发生了。。该怎么办”
- 提前计划复用
- 认真思考:清晰定位
三、软件过程结构
3.1 通用过程模型
3.2 定义框架结构
(详见第七章)
起始 、需求获取、需求虚化、协商、规格说明和确认
3.3 明确任务集
每个软件工程动作都由若干个任务集()组成
3.4 过程模式
过程模式的描述模版:
- 模式名称 :模式名称应能清除地表述该模式在软件过程中的含义(如技术评审)
- 驱动力 :模式的使用环境及主要问题。
- 类型 :定义类型模式
(1)步骤模式 :定义了与过程的框架活动相关的问题。(如建立沟通、收集需求)
(2)任务模式 :定义了与软件工程动作或是任务相关、关系软件工程实践成败的问题(如需求收集是一个任务模式)
(3)阶段模式 :定义活动序列(螺旋模型和原型开发是两种阶段模式) - 启动条件 :模式应用的前提条件-开发前做了什么程的开始的状态是什么有什么工程信息如策划模式需要1. 客户和工程师已沟通过;2. 任务模式已确定 3. 业务需求和项目限制已确定)
- 问题 :要解决的具体问题
- 解决方案 :如何成功实现模式
- 结果 :1. 团队还需要做什么2. 结束状态是什么3. 现有工程如何了/li>
- 相关模式 :以层次化或其他图的方式列举与该模式相关的其他过程模式,例如步骤模式沟通包括了一组任务模式(项目团队,合作原则,任务分解,需求收集、约束描述,场景模式创建)
- 已知应用和实例 :该模式可应用的实例。例如沟通在每一个项目开始时都是必须的。
四、过程模型
4.1 常用的过程模型
4.1.1 瀑布模型和V模型
瀑布模型() 又称为经典生命周期( ),它提出了一个系统的、顺序的软件开发方法,从用户需求规格说明开始,通过策划、建模、构建和部署的过程,最终提供完整的软件支持。
4.1.2 增量过程模型
增量模型结合了线形过程流和并行过程流的特征,在每个阶段都以线性序列的的形式进行,每个线性序列都产出软件的 “可交付增量” (每次都多写完一点功能,通常第一个增量是核心产品的基本需求)。
- 使用循环方式逐步加深系统定义和实现的深度,同时降低风险。
- 确定一系列里程碑作为支撑点,确保利益相关者认可。
一般而言,第一圈确定产品需求 ,然后建立原型,再接着进一步完善更复杂的版本。
和其他过程模型不同之处:其他模型以交付为终点,而螺旋式模型是会对产品不断进行改进的。()
缺点:需要风险评估专家。
4.2 专用过程模型
专用过程模型具有其他模型的某些特点,但只能应用于特定领域方法。
4.2.1 基于构件的开发
基于构件开发本质上是演化模型,具有许多螺旋模型的特点,以迭代方式构建软件,采用预先打包好的构件来开发应用。
优点:容易复用
4.2.2 形式化方法模型
形式化方法模型让开发这可以用严格的数学符 来定义、开发和验证()系统。
该方法的一个变形是净室软件工程()。
这个模型对开发者的要求很高,一般只用于安全性要求很高、不能出错的软件(如飞行器、医疗设施)。
4.2.3 面向切面开发
可以理解为在一个功能的流程中切开,在中间插入一部分其他功能的流程。AOP是Java Spring框架的核心思想之一。
如果一个东西(功能、特性、信息)在很多地方都出现的话,这个点就叫做横切点()。
4.3 统一过程
统一过程强调与客户沟通、以用户角度描述系统(用例 ),从而使得工程师能更好地专注于核心目标(如可理解性、变更的灵活性、复用性 )
4.3.1 统一过程简史
统一建模语言UML ,包含大量面向对象的建模符 。
4.3.2 统一过程的各个阶段
5.3 什么是敏捷过程
为什么要敏捷/strong>
大多数软件项目:
- 难以预测什么需求是稳定的,什么需求是经常迭代的。
- 软件的设计和开发通常是交错进行的。
- 制定分析、设计、开发、测试的计划没那么容易。
5.3.1 敏捷原则
- 快、持续交付、开发后期也可以变更需求
- 产品经理和开发者在一起工作,面对面交谈
- 给有积极性的个人充分放权,给予资源并信任他们能完成工作
- 可运行的软件是进度的首要衡量标准
5.4 极限编程
- 产品待定项 :项目需求的优先级列表。
- 冲刺 :一段时间内(,一般是30天)必须完成的工作任务。
- Scrum例会:每天开15分钟例会。
- 演示 :向客户交付软件增量、展示功能。
5.5.2 动态系统开发方法
DSDM 使用迭代软件过程,每一个迭代都遵循 80% 原则,即每个增量只完成能够保证顺利进人下一增量的工作,剩余的细节则可以在知道更多业务需求或者提出并同意变更之后
完成。
DSDM三个不同的迭代周期:
- 功能模型迭代
- 设计与开发迭代
- 实现
5.5.3 敏捷的统一过程
大方向上一致,小方面迭代。
六、人员
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!