# 软件工程
# 软件开发模型
模型 | |
---|---|
瀑布模型 | 迭代模型/迭代开发方法 |
演化模型 | 快速应用开发 |
增量模型 | 构件组装模型/基于构件的开发方法 |
螺旋模型 | 统一过程/统一开发方法 |
快速原型模型 | 敏捷开发方法 |
喷泉模型 | 模型驱动的开发方法 |
V模型 | 基于架构的开发方法 |
# 瀑布模型(SDLC)
瀑布模型缺陷在于,软件需求分析阶段需求不明确。瀑布模型适合于需求分析已经很完善的情况,但是目前的软件开发流程期间都会存在需求变更的情况。
总结:适用于需求明确的情况,或二次开发的情况。
# 其他经典模型
原型法
快速开发项目的原型,跟需求方演示项目预期的效果,且讨论需要优化的地方。这种方法客户可以直观的了解到项目完成后的样子。要点:快速构建一个简易的系统,项目的雏形,在此之上与客户需求进行磨合。
演化模型
由原型模型改进后得到。
# 增量模型与螺旋模型
# V 模型
测试计划在需求分析阶段进行设计。
总结:该模型强调测试,让测试贯穿开发的始终,快速的发现问题。
# 喷泉模型
- 迭代
- 无间障
# RAD模型
结合了瀑布模型和构建化开发
RAD模型一般指快速应用开发。
- 业务建模
- 数据建模
- 过程建模
- 应用生产
- 测试与交付
# 构建组装模型(CBSD)
一个项目可以划分为很多构件组成,只需要将每一个构件设计开发的没有问题那么整体基本也无问题。
构件的标准有:
- COM/DCOM标准
- CORBA标准
- Java Beans/EJB标准
# 敏捷开发方法
适用于小项目。
# 信息系统开发方法
- 结构化法
- 用户至上
- 严格区分工作阶段,每阶段有任务与成果
- 强调系统开发过程的整体性和全局性
- 系统开发过程工程化,文档资料标准化
- 自顶向下,逐步分解(求精)
- 原型法
- 适用于需求不明确的开发
- 包括抛弃式原型和演化式原型
- 面向对象方法
- 更好的复用性
- 关键在于建立一个全面、合理、统一的模型
- 分析、设计、实现三个阶段,界限不明确
- 面向服务方法
- SO方法有三个主要的抽象级别:操作、服务、业务流程
- SOAD分为三个层次:基础设计层(底层服务构件)、应用结构层(服务之间的接口和服务级协定)和业务组织层(业务流程建模和服务流程编排)
- 服务建模:分为服务发现、服务规约和服务实现三个阶段
# 需求开发
# 需求分类与需求获取
# 结构化设计
# 基本原则
概要设计和详细设计
- 自顶向下、逐步求精
- 信息隐蔽
- 模块独立(高内聚、低耦合、复杂度)
保持模块的大小适中
尽可能减少调用的深度
多扇入,少扇出
单入口,单出口
模块的作用域应该在模块之内
功能应该是可预测的
# 内聚与耦合
内聚类型 | 描述 |
---|---|
功能内聚 | 完成一个单一功能,各个部分协同工作,缺一不可 |
顺序内聚 | 处理元素相关,而且必须顺序执行 |
通信内聚 | 所有处理元素集中在一个数据结构的区域上 |
过程内聚 | 处理元素相关,而且必须按特定的次序执行 |
瞬时内聚(时间内聚) | 所包含的任务必须在同一时间间隔内执行 |
逻辑内聚 | 完成逻辑上相关的一组任务 |
偶然内聚(巧合内聚) | 完成一组没有关系或松散关系的任务 |
耦合类型 | 描述 |
---|---|
非直接耦合 | 两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的 |
数据耦合 | 一组模块借助参数表传递简单数据 |
标记耦合 | 一组模块通过参数表传递记录信息(数据结构) |
控制耦合 | 模块之间传递的信息中包含用于控制模块内部逻辑的信息 |
外部耦合 | 一组模块都访问同一全局简单变量,而且不是通过参数表传递该全局变量的信息 |
公共耦合 | 多个模块都访问同一个公共数据环境 |
内部耦合 | 一个模块直接访问另一个模块的内部数据;一个模块不通过正常入口转到另一个模块的内部;两个模块有一部分程序代码重叠;一个模块有多个入口 |
# 系统结构/模块结构
# 软件测试
# 测试原则与类型
- 尽早、不断的进行测试
- 程序员避免测试自己设计的程序
- 既要选择有效、合理的数据,也要选择无效、不合理的数据
- 修改后应进行回归测试
- 尚未发现的错误数量与该程序已发现错误数成正比
动态测试
- 黑盒测试法
- 白盒测试法
- 灰盒测试法
静态测试
- 桌前检查
- 代码走查
- 代码审查
# 测试用例设计
# 测试阶段
# McCabe复杂度
计算有向图G的环路复杂度公式为:V(G) =m-n+2
说明:其中V(G)是有向图G中的环路个数,m是G中的有向弧数,n是G中的节点数。
# 系统运行与维护
软件维护是生命周期的一个完整部分,可以将软件维护定义为需要提供软件支持的全部活动,这些活动包括在交付前完成的活动,以及交付后完成的活动。交付前完成的活动包括交付后运行的计划和维护计划等;交付后的活动包括软件修改、培训、帮助资料等。
可维护性
- 易分析性
- 易改变性
- 稳定性
- 易测试性
维护类型
改正性维护
适应性维护
完善性维护
预防性维护
# 软件过程改进
# CMMI
# 项目管理
- 范围管理
- 时间管理
- 成本管理
- 质量管理
- 人力资源管理
- 沟通管理
- 风险管理
- 采购管理
- 整体管理
# 时间管理
Gantt图、PERT图
# 风险管理
风险是指“损失或伤害的可能性”
- 项目风险
- 技术风险
- 商业风险
风险曝光度=概率*损失值
根据风险曝光度来判断哪个风险应该重点管控。