5.1 软件工程 ★★★★☆
5.1.1 软件工程定义
软件工程过程是指为获得软件产品,在软件工具的支持下由软件工程师完成的一系列软件工程活动,包括以下4个方面。
(1)P(Plan)——软件规格说明。规定软件的功能及其运行时的限制。
(2)D(Do) — —软件开发。开发出满足规格说明的软件。
(3)C(Check) — —软件确认。确认开发的软件能够满足用户的需求。
(4)A(Action)——软件演进。软件在运行过程中不断改进以满足客户新的需求。
5.1.2 软件过程模型 ★★★★★
软件要经历从需求分析、软件设计、软件开发、运行维护,直至被淘汰的全过程,这个全过程称为软件的生命周期。软件生命周期描述了软件从生到死的全过程。
1.瀑布模型 (Waterfall Model)
瀑布模型的特点是容易理解,管理成本低,每个阶段都有对应的成果产物,各个阶段有明显的界限划分和顺序要求,一旦发生错误,整个项目推倒重新开始。
适用于需求明确的项目,一般表述为需求明确、或二次开发,或者对于数据处理类型的项目
优点是:容易理解,管理成本低,强调开发的阶段性早期计划及需求调查和产品测试。
不足之处是:客户必须能够完整、正确和清晰地表达他们的需要,需求或设计中的错误往往只有到了项目后期才能够被发现。
2.原型化模型(Prototype Model)
两个阶段
(1)原型开发阶段。
(2)目标软件开发阶段。
3.螺旋模型 (Spiral Model)
螺旋模型是一种演进式的软件过程模型,结合了原型开发方法的系统性和瀑布模型的可控性特点,加入风险分析
它是由目标设定、风险分析、开发和有效性验证、评审这一循环组成
5.1.3 敏捷模型 ★★★★★
1.敏捷方法的特点
适应性、面向人的
2.敏捷方法的核心思想
(1)敏捷方法是适应型,而非可预测型。与传统方法不同,敏捷方法拥抱变化,也可以说 它的初衷就是适应变化的需求,利用变化来发展,甚至改变自己,最后完善自己。
(2)敏捷方法是以人为本,而非以过程为本。传统方法以过程为本,强调充分发挥人的特性,不去限制它。并且软件开发在无过程控制和过于严格烦琐的过程控制中取得一种平衡,以保证软件的质量。
(3)迭代增量式的开发过程。敏捷方法以原型开发思想为基础,采用迭代增量式开发,发行版本小型化。它根据客户需求的优先级和开发风险,制订版本发行计划,每一发行版都是在前一成功发行版的基础上进行功能需求扩充,最后满足客户的所有功能需求。
3.主要敏捷方法简介
敏捷开发是一种以人为核心、迭代、循序渐进的开发方法,适用于小团队和小项目,具有小步快跑的思想。常见的敏捷开发方法有极限编程法、水晶法、并列争球法和自适应软件开发方法。
(1)极限编程 (Extreme Programming,XP)。
极限编程是一个轻量级的、灵巧的软件开发方法;同时它也是一个非常严谨和周密的方法。
它的基础和价值观是交流、朴素、反馈和勇气,即任何一个软件项目都可以从4个方面改善:加强交流;从简单做起;寻求反馈;勇于实事求是。
XP是一种近螺旋式的开发方法,它将复杂的开发过程分解为一个个相对比较简单的小周期;通过积极的交流、反馈以及其他一系列的方法,开发人员和客户可以非常清楚开发进度、 变化、待解决的问题和潜在的困难等,并根据实际情况及时地调整开发过程。
(2)水晶系列方法。由Alistair Cockburn 提出。以人为中心,其目的是发展一种提倡“机动性 的”方法,包含具有共性的核心元素,每个都含有独特的角色、过程模式、工作产品和实践。Crystal 家族实际上是一组经过证明、对不同类型项目非常有效的敏捷过程,它的发明使得敏捷 团队可以根据其项目和环境选择最合适的 Crystal 家族成员。
(3)Scrum。侧重于项目管理。Scrum是迭代式增量软件开发过程,通常用于敏捷软件开发。Scrum包括了一系列实践和预定义角色的过程骨架(是一种流程、计划、模式,用于 有效率地开发软件)。
在Scrum 中,使用产品Backlog 来管理产品的需求,产品 Backlog 是一个按照商业价值排序的需求列表。根据Backlog 的内容,将整个开发过程被分为若干个短的迭代周期 (Sprint)。 在 Sprint 中,Scrum 团队从产品Backlog 中挑选最高优先级的需求组成 Sprint backlog。在每个 迭代结束时, Scrum 团队将递交潜在可交付的产品增量。当所有 Sprint结束时,团队提交最终 的软件产品。
(4)特征驱动开发方法 (Feature Driven Development,FDD)。FDD是由Jeff De Luca和大师Peter Coad提出来的。FDD 是一个迭代的开发模型。FDD认为有效的软件开发需要3个要素:人、过程和技术。
FDD 定义了6种关键的项目角色:项目经理、首席架构设计师、开发经理、主程序员、程序员和领域专家。根据项目大小,部分角色可以重复。
FDD 有5个核心过程:开发整体对象模型、构造特征列表、计划特征开发、特征设计和特征构建。其中,计划特征开发根据构造出的特征列表、特征间的依赖关系进行计划,设计出包 含特征设计和特征构建过程组成的多次迭代。
5.1.4 统一过程模型 (RUP) ★★★★★
软件统一过程 (Rational Unified Process,RUP)
1 .RUP 的生命周期
9个核心工作流
需求、分析与设计、业务建模、环境、项目管理、实现、配置与变更管理、测试、部署
4个阶段
● 初始 (inception) 阶段:定义最终产品视图和业务模型,并确定系统范围。
● 细化 (elaboration) 阶段:设计及确定系统的体系结构,制订工作计划及资源要求。
● 构造 (construction) 阶段:构造产品并继续演进需求、体系结构、计划直至产品提交。
● 移交 (transition) 阶段:把产品提交给用户使用。
- RUP 中的核心概念
● 角色 ( Role ): Who的问题。角色描述某个人或一个小组的行为与职责。
● 活动 (Activity):How 的问题。活动是一个有明确目的的独立工作单元。
● 制品(Artifact):What的问题。制品是活动生成、创建或修改的一段信息。
● 工作流 (Workflow):When 的问题。工作流描述了一个有意义的连续的活动序列,每个工作流产生一些有价值的产品,并显示了角色之间的关系。
3 . RUP 的特点
RUP是用例驱动、以体系结构为中心、迭代和增量的软件开发过程。
在“4+1”视图模型中,
分析人员和测试人员关心的是系统的行为,会侧重于用例视图;
最终用户关心的是系统的功能,会侧重于逻辑视图;
程序员关心的是系统的配置、装配等问题,会侧重于实现视图;
系统集成人员关心的是系统的性能、可伸缩性、吞吐率等问题,会侧重于进程视图;
系统工程师关心的是系统的发布、安装、拓扑结构等问题,会侧重于部署视图。
5.1.5 软件能力成熟度模型
软件能力成熟度模型 (Capability Maturity Model for Software,CMM)
CMMI(Capability Maturity Model Integration for Software, 软件能力成熟度模型集成)
5个成熟度等 级
1)Level 1 初始级
过程通常是随意且混乱的。能产出能用的产品与服务,但经常超出在计划中记录的预算与成本。
2)Level2 已管理级
组织需要为过程建立明确的目标,并能实现成本、进度和质量目标等。
3)Level3已定义级
企业能够根据自身的特殊情况定义适合自己企业和项目的标准流程,将这套 管理体系与流程予以制度化,同时企业开始进行项目积累,企业资产的收集。
4)Level 4量化管理级
组织建立了产品质量、服务质量以及过程性能的定量目标。成熟度级别3 级与4级的关键区别在于对过程性能的可预测。
5)Level 5优化级
关注于通过增量式 的与创新式的过程与技术改进,不断地改进过程性能。组织使用从多个项目收集来的数据对整体的组织级绩效进行关注。