Lecture 2 软件过程
瀑布模型 Waterfall model
是第一个被提出的软件开发过程,起源于大型军事系统工程当中使用的一种工程过程模型。
它是一个 计划驱动(plan-driven) 的过程。要开始软件开发之前,对所有的过程活动进行计划和进度安排。
原则:前一个阶段完成之前,不进行下一阶段。When finished last step, continue next.
优缺点
应用
- 嵌入式系统(embedded system),因为硬件通常不是很灵活,所以不能把对于软件功能的 决策 推迟的开发的时候再进行,因此适用于瀑布模型
- 关键性系统(critical system),这种系统要求 规格说明书必须分析全面,文档必须完整。
- 大型软件系统(large software system),多家企业合作开发,所以需要 完整的规格说明书,才能让不同的子系统独立开发。
然而,如果是需求会快速发生变化的软件,就不适用瀑布模型。
V 模型
是瀑布模型的一种变体。
同时注重 development 和 testing。每个阶段,有的人负责设计,有的人负责编写测试用例。每个阶段都要有 verification 和 validation。
然而,不适用于那些不容易实现更改的项目。也不适用于长期项目。
增量开发 incremental development
一开始只有一点点,然后不断的从用户那里获取反馈,然后根据反馈往里面加入新东西。经过多个版本的演化,最终形成最终版本。
规格说明、开发、确认(validation)三个步骤是交织在一起(并行)的。
写一点,就测一点,以此来降低风险。而且在开发过程中可以很轻松的进行更改。
优缺点
优点:
- 当需求发生变化,重新修改文档的工作量相对很低
- 可以 及时的从用户处获取反馈
- 先发布一个版本,具有主要功能,如果用户有新增需求,以后再添加进去。换句话说,用户可以更早的使用上软件。
缺点:
- 过程不可见。通常领导需要下属上交报告啊之类的,来了解开发的进度。但是如果开发过程很快,每一个小更新,都要给领导交一份报告,这很不现实。换句话说,要产生反映系统每一个版本的文档,这不划算。
- 当不断加入新功能,可能会影响项目的管理负担和项目结构,然后就越来越复杂,往里面假如新东西就会越来越难。敏捷开发通过重构(refactoring)来解决这个问题。
- 不适用于长期维护的项目和大型项目。
螺旋模型 Spiral model
是一种 风险驱动(risk-driven) 的模型,了解即可。
螺旋当中的每一个循环表示软件过程当中的一个阶段。于是:
- 最里面的循环主要关注系统可行性
- 接下来的循环,主要关注需求定义
- 然后关注系统设计
螺旋模型,假设 变更(change) 是项目 风险(risk) 的结果。因此包含了显式的风险管理,来降低这些风险。
几个术语
验证 verification
检查一个系统是否符合规格说明(内部的)
确认 validation
检查系统是否满足了客户的需要和期望(外部的)
重构 refactoring
就是修改软件内部的结构,改进结构及其可读性,降低将来修改的成本,但不改变其功能。
原型 prototype
原型是系统某些功能子集的临时的实现,通常呈现给用户进行反馈和确认,然后在确认工作完成后丢弃。
也就是软件系统的一种早期版本,用来演示概念、尝试候选方案等。
概念验证 proof of concept
概念验证,是对某些想法的一个较短而不完整的实现(代码),以证明其可行性,示范其原理,其目的是为了验证一些概念或理论。概念验证通常被认为是一个有里程碑意义的实现的原型 。
骨架系统 skeleton system
骨架,就是实现了系统的主要结构,但也仅仅包含最小的一部分功能。它会被保留着,而不是被丢弃掉。
骨架,也叫做进化原型 evolutionary prototype。
集成与配置 integration and configuration
这里的集成是指,开发者在开发过程中,发现已有的一部分代码与现在的需求相似,就把那部分代码直接集成过来(或许会做一些修改)。然后,进行一定的配置,比如环境配置等,使这个外来的部分能与原系统一起使用。
面向 复用 的软件工程,其基本流程如图所示
- 其中,「软件发现」和「软件评估」是比较新的词,说白了意思就是,根据规格说明,搜索现成的东西,看看能不能用。
- 「需求精化(refinement)」表示根据可重用的构件,对需求进行一定的修改。
优缺点
由于现有的可用的构件,一般都是被测试验证过了的,比较稳定,所以可以降低风险,还能让整个开发周期变得更快。
但是可能导致所开发出来的系统,不满足用户需求初衷。而且有可能构件当中使用了比较旧、弃用了的东西,导致不兼容,失去对系统演化的控制。
统一过程 unified process(UP)
Rational 公司是早期开发统一过程的投资者,所以这个也称为 Rational unified process(RUP)。
统一过程(UP)有好多个阶段:起始、细化、构建、转换、生产。
1. 起始阶段 inception phase
包含与客户的沟通和策划。首先根据需求,提出 大致的 架构,制订初步计划,分析非关键的重要功能(安全性等),保证项目具有迭代和增量的特性,也就是准备开发环境。
此外,使用 用例(cases) ==还是用况?== 来描述用户所需的特性和功能。
2. 细化阶段 elaboration phase
扩展初始阶段的用况(例),对核心的、有风险的结构进行测试。确立了大部分的需求,风险降低。
这个阶段可能有一系列的迭代。
3. 构建阶段 construction phase
这个阶段主要关注系统各个部分的开发、测试,并集成。
这个阶段相当于对细化阶段的完善,产生了软件增量(如发布的版本)。
4. 转换阶段 transition phase
就是系统构建后期,以及部署。完成这个阶段后,软件增量配套设施(文档等)就应当完备,可以投入使用。
5. 生产阶段 production phase
不重要,略