目录
-
- 系统开发基础
-
- 软件开发模型
- 软件开发方法
- 需求分析
-
- 需求的任务
- 需求的过程
- 需求的分类
- 应用的工具
- 软件设计
-
- 软件设计的任务与活动
- 模块设计原则
- 应用的工具
- 软件测试
-
- 测试
- McCabe复杂度
- 软件维护
-
- 可维护性因素决定
- 软件维护类型
- 文档
-
- 1、开发文档
- 2、产品文档(和用户有关)
- 3、管理文档
- 软件质量保证
-
- 外部和内部质量
- 软件过程改进-CMMI软件成熟度模型
- 项目管理
-
- Gant图(进度管理)
- Pert图
系统开发基础
软件开发模型
- 瀑布模型
线性开发:软件计划→需求分析→软件设计→程序编程→软件测试→运行维护
适用于解决需求比较明确的项目;优点是容易理解、管理成本低;缺点是对项目风险的控制能力较弱
- V模型
强调了软件开发过程中若干个测试级别

- 喷泉模型
面向对象的开发模型;以用户需求为动力,以对象为驱动的模型,使开发具有迭代性和无间隙性
- 原型化模型
适用于需求不明确的项目;项目开发初期,构造一个软件原型,通过调整原型使其满足客户要求,一旦确定真正需求,原型将被丢弃
- 演化模型
适用于对需求缺乏准确认识的项目;从初始的原型逐步演化成最终产品
- 螺旋模型
适用于大型复杂项目;结合了瀑布模型和演化模型的优点,加入了风险分析,成本会提高
- 统一过程(RUP)
适用于大型项目;以用例为驱动,以架构为中心,进行迭代和增量
初始→细化→构建→交付
- 敏捷方法
- 极限编程(XP)
- 4大价值观:沟通、简单、反馈、勇气
- 5个原则:快速反馈、简单性假设、逐步修改、提倡更改、优质工作
- 12个最佳实现:
- 计划游戏
- 小型发布
- 隐喻
- 简单设计
- 测试先行
- 重构
- 结队编程
- 集体代码所有制
- 持续集成
- 每周工作40小时
- 现场客户
- 编码标准
- 水晶法
- 并列争求法
- 自适应软件开发
- 极限编程(XP)
软件开发方法
- 结构化方法
- 面向数据流的开发方法
- 用户至上
- 严格区分工作阶段,每阶段有任务和结果
- 强调系统开发过程的整体性和全局性
- 系统开发过程工程化,文档资料标准化
- 自顶向下,逐步分解(求精)
- 不适用于大型项目
- 原型方法
- 适用于需求不明确的开发
- 包括抛弃式原型和演化原型
- 当系统规模不是很大也不是很复杂时,采用比较合适
- 面向对象方法
- 更好的复用性
- 关键在于建立一个全面、合理、统一的模型
- 分析、设计、实现三个阶段,界限不明确
- 面向服务的方法
- Jackson
- 面向数据结构的开发方法
需求分析
需求的任务
需求的过程
- 问题识别
- 分析与综合
- 编制需求分析文档
- 需求分析与评审
需求的分类
- 功能需求
- 非功能需求(性能……)
- 设计约束(比如限定开发语言)
应用的工具
- 数据流图(DFD)
- 数据字典
- 判定树
- 判定表
软件设计
软件设计的任务与活动
模块设计原则
高内聚低耦合
内聚类型(由高到底)
- 功能内聚:完成一个单一功能,各个部分协同工作,缺一不可
- 顺序内聚:处理元素相关,而且必须顺序执行
- 通信内聚:所有处理元素集中在一个数据结构的区域上
- 过程内聚:与处理元素相关,而且必须按特定的次序执行
- 瞬时内聚(时间内聚):所包含的任务必须在同一时间间隔内执行(如初始化模块)
- 逻辑内聚:完成逻辑上相关的一组任务
- 偶然内聚(巧合内聚):完成一组没有关系或松散关系的任务
耦合类型(由高到底)
- 内容耦合:当一个模块直接修改或操作另一个模块的数据或者直接转入另一个模块
- 公共耦合:两个或多个模块,通过引用一个公共区的数据(数据结构和变量)而发生作用
- 控制耦合:通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能
- 标记耦合:两个模块都只和一个数据结构有关,通过参数表传递记录信息
- 数据耦合:通过参数传递简单数据
- 外部耦合:通过全局变量,不是通过参数表
- 非直接耦合:模块之间没有直接关系,完全是通过主模块的控制和调用来实现的,独立性最强,耦合度最低
应用的工具
- IPO图 —— 输入处理输出
- PDL —— 程序描述语言
- PAD —— 问题分析图
- 程序流程图
- N/S盒图
软件测试
- 动态测试
- 黑盒测试法
- 等价类划分:确定无效与有效等价类;设计用例尽可能多的覆盖有效类;设计用例值覆盖一个无效类
- 边界值分析:处理边界情况时最容易出错;选取的测试数据应该恰好等于、稍小于或者稍大于边界值
- 错误猜测
- 因果法
- 白盒测试法
- 基本路径测试
- 循环覆盖测试
- 逻辑覆盖测试
- 语句覆盖
- 判定覆盖
- 条件覆盖
- 条件组合覆盖
- 路径覆盖
- 灰盒测试法
- 黑盒测试法
- 静态测试
- 桌前检查(形成小组)
- 代码审查(形成小组)
- 代码走查
测试
- 单元测试
- 模块接口
- 局部数据结构
- 边界条件
- 独立的路径
- 错误处理
- 集成测试
- 模块间的接口和通信
- 系统测试
- 模拟真实硬件环境、设备
- 性能测试
- 恢复测试
- ……
- 验收测试(如β测试)
- 以用户为主导的测试
- 回归测试
- 修改代码后,重新测试,确认修改没有引入其他错误或导致原有代码错误
McCabe复杂度
计算有向图G的环路复杂度公式为:V(G) = m - n + 2
说明:V(G)是有向图G中的环路个数,m是G中有向弧数,n是G中节点数
软件维护
可维护性因素决定
- 可理解性
- 可测试性
- 可修改性
软件维护类型
- 改正性维护:发布时就有错,修复错误
- 适应性维护:因为外部环境发生改变,适应新环境
- 预防性维护:为以后新增功能做准备
- 完善性维护(50%):增加功能,提高性能
文档
1、开发文档
- 可行性研究和项目任务书
- 需求规格说明
- 功能规格说明
- 设计规格说明(包括成熟和数据规格说明)
- 开发计划
- 软件集成和测试计划
- 质量保证计划、标准、进度
- 安全和测试信息
2、产品文档(和用户有关)
- 培训手册
- 参考手册和用户指南
- 软件支持手册
- 产品手册和信息广告
3、管理文档
- 开发过程的每个阶段的进度
- 软件变更情况的记录
- 相对于开发的判定记录
- 职责定义
软件质量保证
外部和内部质量
- 功能性
- 适合性
- 准确性
- 互操作性
- 安全保密性
- 功能性的依从性
- 可靠性
- 成熟性
- 容错性
- 易恢复性
- 可靠性的依从性
- 易用性
- 易理解性
- 易学性
- 易操作性
- 吸引性
- 易用性的依从性
- 效率
- 时间特性
- 资源利用性
- 效率依从性
- 维护性
- 易分析性
- 易改变性
- 稳定性
- 易测试性
- 维护性的依从性
- 可移植性
- 适应性
- 易安装性
- 共存性
- 易替换性
- 可移植性的依从性
软件过程改进-CMMI软件成熟度模型
- 初始级 : 混乱的
- 可管理级 : 可管控
- 已定义级 : 标本化、文档化
- 定量管理 : 对软件过程和质量都能进行度量
- 优化管理 : 不断优化、持续优化改进
项目管理
- 范围管理
- 时间管理
- 成本管理
- 质量管理
- 人力资源管理
- 沟通管理
- 风险管理
- 采购管理
- 整体管理
- 项目集成管理
Gant图(进度管理)
- 不能清晰地反映出各任务之间的依赖关系,难以确定整个项目的关键所在,也不能反映计划中有潜力的部分
- 能清晰地描述每个任务从何时开始,到何时结束,任务的进展情况以及任务之间的并行关系
Pert图
- 不能清楚描述各任务之间的并行情况
- 能清晰的描述每个任务从何时开始,到何时结束,以及各任务之间的依赖关系
- 关键路径=图中最长的路径
- 松弛时间=最迟开始时间-最早开始时间
- A-B-C-D-E:CD松弛时间=最迟时间(AE(max)-ED-DC)-最早时间(AB+BC)