软件开发模型
瀑布模型
瀑布模型的优点是:容易理解,管理成本低;签掉开发阶段早期计划及需求调查和产品测试
V模型
V模型是瀑布模型的一个变体
注重测试,但测试放在编码之后
喷泉模型
原型模型
螺旋模型
综合了瀑布模型和原型模型的优点,加入了风险分析,成本比较大
增量模型
统一过程(up)(用例驱动)
- 起始阶段
- 确定项目范围和边界
- 识别系统的关键用例
- 展示系统的候选架构
- 估计项目费用和时间
- 评估项目风险
- 精细化阶段
- 分析系统问题领域
- 建立软件架构基础
- 淘汰最高风险元素
- 构造阶段
- 开发剩余的构件
- 构件组装和测试
- 移交阶段
- 进行β测试
- 制作发布版本
- 用户文档定稿
- 确认新系统
- 培训,调整产品
敏捷方法
极限编程(XP) -> 费用控制严格的公司使用,解决代码质量低的问题,编码速度不能改变
水晶方法(Crystal) -> 用最少纪律约束而仍能成功的方法
开放式源码 -> 程序开发人员在地域上分布很广
并列征求法(Scram) -> 明确定义了的可重复的方法过程
软件开发方法
- 原型法:需求不清晰且多变
- 结构化:系统规模不太大且不太复杂,需求变化不大
- Jackson:一种面向数据结构的发放,以数据结构为驱动,适合小规模项目
需求分析
数据流图(重)
数据字典
软件设计
高内聚,低耦合
高内聚(越往上,内聚越高,越好)
- 功能内聚
- 完成一个单一功能,各个部分协同工作,缺一不可
- 顺序内聚
- 处理元素相关,而且必须顺序执行
- 通信内聚
- 所有处理元素集中在一个数据结构区域上
- 过程内聚
- 处理元素相关,而且必须按特定的次序执行
- 瞬时内聚(时间内聚)
- 所包含的任务必须在同一时间间隔内执行
- 逻辑内聚
- 完成逻辑上相关的一组任务
- 偶然内聚
- 完成一组没有关系或松散关系的任务
低耦合(越往上,耦合越低,越好)
- 非直接耦合
- 两个模块直接没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的
- 数据偶尔
- 一组模块借助参数表传递简单数据
- 标记耦合
- 一组模块通过参数表传递记录信息(数据结构)
- 控制耦合
- 模块之间传递的信息中包含用于控制模块内部逻辑的信息
- 外部耦合
- 一组模块都访问统一全局简单变量,而且不是通过参数表传递该全局变量的信息
- 公共耦合
- 多个模块都访问同一个公共数据环境
- 内容耦合
- 一个模块直接访问另一个模块的内部数据;
- 一个模块不通过正常入口转到另一个模块的内部
- 两个模块有一部分程序代码重叠
- 一个模块有多个入口
耦合取决
耦合取决于:
- 各个模块之间接口的复杂程度
- 调用模块的方式
- 通过接口的信息类型
软件测试
- 语句覆盖:每个语句执行一次
- 判断覆盖:每个判定真假至少一次
- 条件覆盖:每个判定中的每个条件至少一次
- 判断条件:2+3
- 路径覆盖
- 组合覆盖:条件组件覆盖,每个判定中的各个条件的各种可能的组合至少一次
测试阶段
- 单元测试
- 集成测试
- 系统测试
- 安全性测试
- 可靠性测试
- 确认测试
- 验收测试
测试配置管理
- 配置项标识
- 配置项控制
- 配置状态报告
- 配置审计
MnCabe复杂度(环路)
计算有向图的环路复杂度公式为:V(G) = m - n + 2 其中:
- V(G)是有向图G中环路个数
- m是G的有向弧数
- n是G中的节点数
注:V(G) = 封闭区域 + 1
软件维护
软件维护工具
- 版本控制工具
- 文档分析工具
- 开发信息库工具
- 逆向工程工具
- 再工程工具
文档
软件质量保证
软件过程改进 - CMMI
项目管理
十大知识领域
时间管理
关键路径
- ES 最早开始时间
- EF 最早完成时间
- LS最晚开始时间
- LF 最晚结束时间
总时差 = LS - ES = LF - EF
其他
软件工程基本要素:方法、工具和过程
软件配置管理包括:版本控制、变更控制、过程支持
顶层测试不需要写驱动模块,底层测试不需要写桩模块
需求分析阶段输出:数据字典,数据流图,ER图
系统生命周期
- 系统规划阶段产出:系统设计任务书(系统建设方案、实施计划)
- 系统分析阶段产出:系统需求规格说明书、软件需求规格说明书、确认测试计划、系统测试计划、初步的用户手册
- 系统设计阶段产出:架构设计文档、概要设计说明书、详细设计说明书、程序规格说明说、概要测试加护、详细测试计划、各类设计图
- 系统实施阶段产出:源码、单元测试、集成测试报告、操作手册
- 系统验收阶段产出:确认测试报告、项目验收报告
ISO/IEC
由三个层次组成:
- 质量特性
- 质量子特性
- 度量指标
软件质量,是软件满足规定或骑在用户需求的能力
- 内部质量
- 外部质量
- 使用质量
功能性包括了:
- 适应性
- 准确性
- 互操作性
- 功能依从性
- 安全性