一、瀑布模型
严格区分阶段,每个阶段因果关系紧密相连,只适合需求明确的项目
缺点:软件需求完整性、正确性难确定;严格串行化,很长时间才能看到结果;瀑布模型要求每个阶段一次性完全解决该阶段工作,不现实。
二、原型模型
适合需求不明确的项目
原型模型两个阶段:1、原型开发阶段 2、目标软件开发阶段
抛弃型原型与演化型原型
三、原型及相关模型
四、V模型
五、迭代与增量
增量型:一块一块有增加
迭代型:一轮一轮在变好
六、螺旋模型
七、构件组装模型
优点:易扩展、易重用、降低成本、安排任务更灵活。
确定:构件设计要求经验丰富的架构师、设计不好的构件难重用、强调重用可能牺牲其他指标(如性能)、第三方构件质量难控制。
八、基于构件的软件工程(CBSE)
CBSE体现了购买而不是重新构造的哲学
CBSE的特征:
- 可组装性:所有外部交互必须通过公开定义的接口进行
- 可部署性:构件总是二进制式的,能作为一个独立实体在平台上运行
- 文档化:用户根据文档来判断构件是否满足需求
- 独立性:可以在无其他特殊构件的情况下进行组装和部署
- 标准化:符合某种标准化的构件模型
构件的组装:
- 顺序组装:按顺序调用已经存在的构件,可以用两个已经存在的构件来创造一个新的构件
- 层次组装:被调用构件的“提供”接口必须和调用构件的“请求”接口兼容
- 叠加组装:多个构件合并形成新构件,新构件整合原构件的功能,对外提供新接口
九、快速应用开发模型(RAD)
主流程采用瀑布模型,在流程引入大量的构件
十、统一过程(UP,RUP)
十一、敏捷方法概述
11.1、敏捷方法-XP
强调四大价值观:沟通(加强面对面沟通),简单(不过度设计),反馈(及时反馈),勇气(接受变更的勇气)
实践规则:结对编程(两个人写代码,一个人写,一个人审核)、持续集成
11.2、敏捷方法-SCRUM
核心思想:每次选一部分进行迭代,一个迭代一到四周,侧重项目管理
11.3 其他敏捷方法
水晶方法:提倡“机动性”的方法,拥有对不同类型项目非常有效的敏捷过程
特征驱动开发方法(FDD):认为有效的软件开发需要三要素:人、过程和技术。定义了六种关键的项目角色:项目经理、首席架构设计师、开发经理、主程序员、程序员和领域专家。
开放式源码:程序开发人员在地域上分布很广,其他方法强调集中办公
ASD方法:其核心是三个非线性的、重叠的开发阶段:猜测、合作与学习
动态系统开发方法(DSDM):倡导以业务为核心
十二、逆向工程
实现级:包括程序的抽象语法树、符合表、过程的设计表示
结构级:包括反映程序分量之间互相依赖关系的信息,例如调用图、结构图、程序和数据结构
功能级:包括反映程序段功能及程序段之间关系的信息,例如数据和控制流模型
领域级:包括反映程序分量或程序实体与应用领域概念之间对应关系的信息,如实体关系模型
相关概念
(1)重构/重组。重构是指在同一个抽象级别上转换系统的描述形式。
(2)设计恢复:指借助工具从已有程序中抽象出有关数据设计、总体结构设计和过程设计等方面的信息
(3)逆向工程:逆向工程是分析程序。力图在比源代码更高抽象层次上建立程序的表示过程,逆向工程是设计的恢复过程
(4)正向工程:指不仅从现有系统中恢复设计信息,而且使用该信息去改变或重构现有系统,以改善其整体质量
(5)再工程/重构工程:再工程是对现有系统的重新开发过程,包括逆向工程、新需求的考虑过程和正向工程三个步骤
十三、净室软件工程
净室即无尘室、洁净室。就是一个受控污染级别的环境。
使用盒结构规约(或形式化方法)进行分析和设计建模,并且强调将正确性验证,而不是测试,作为发现和消除错误的主要机制。
使用统计的测试来获取认证被交付的软件的可靠性所必需的出错率信息。
技术手段
- 统计过程控制下的增量式开发:控制迭代
- 基于函数的规范和设计:盒子结构 定义3种抽象层次:行为视图(黑盒)->有限状态机视图(状态盒)->过程视图(明盒)
- 正确性验证:净室工程的核心
- 统计测试和软件认证:使用统计学原理,总体太大时必须采用抽样方法
缺点:
- 太理论化,正确性验证的步骤比较困难且耗时
- 开发小组不进行传统的模块测试,不现实
- 脱胎于传统软件工程,不可避免带有传统软件工程的一些弊端
十四、需求工程-概述
软件需求是指用户对系统在功能、行为、性能、设计约束等方面的期望