软件工程基本要素
方法、工具、过程。
软件开发模型
- 瀑布模型
软件开发周期的各工程活动按顺序进行,最后阶段才产生可交付成果物。
适合软件需求明确,变更较少的项目。 - 原型模型(演化模型)
快速构建可运行的原型系统,然后根据运行过程获取用户反馈再进行改进。
适合最初需求不明确的情况。 - 螺旋模型
瀑布 + 原型模型 + 风险分析 - 喷泉模型
喷泉模型是典型的面向对象生命周期模型,是一种以用户需求为动力,以对象作为驱动的模型。该模型克服了瀑布模型不支持软件重用和多项开发活动集成的局限性。“喷泉” 一词本身体现了迭代和无间隙特性。迭代意味着模型中的开发活动常常需要重复多次,在迭代过程中不断地完善软件系统;无间隙是指在开发活动之间不存在明显的边界。
敏捷开发
敏捷开发方法XP是一种轻量级、高效、低风险、柔性、可预测的、科学的软件开发方法。
4大价值观
沟通、简单性、反馈、勇气
5个原则
快速反馈、简单性假设、逐步修改、提倡更改、优质工作
12个最佳实践
- 1.计划游戏:快速制定计划、随着细节的不断变化而完善;
- 2.小型发布:系统的设计要能够尽可能早地交付;
- 3.隐喻:找到合适的比喻传达信息;
- 4.简单设计:只处理当前的需求使设计保持简单;
- 5.测试先行:先写测试代码再编写程序;
- 6.重构:重新审视需求和设计,重新明确地描述它们,以符合新的和现有的需求;
- 7.结队编程;
- 8.集体代码所有制;
- 9.持续集成:可以按日甚至按小时为客户提供可运行的版本;
- 10.每周工作40个小时;
- 11.现场客户;
- 12.编码标准。
敏捷开发方法scrum步骤
- Product backlog 产品待办事项清单
- Sprint backlog Sprint待办事项清单
- Sprint 冲刺迭代
统一过程(UP)模型
- 起始阶段
专注项目的初创活动(项目范围等)。 - 精化阶段
专注需求分析和架构演进。 - 构建阶段
系统构建,产生实现模型。 - 移交阶段
软件提交方面的工作,产生软件增量。 - 产生阶段
运行软件并监控软件的使用。提供运行环境的支持,提交BUG报告和变更请求。
PERT图 Vs GANTT图
- PERT图不能清晰的描述任务的并行情况
- GANT图不能清晰的描述各任务的依赖关系
风险
风险是可能会发生,会造成损失的事件。
风险分析的4个不同的活动:
- 风险识别
风险识别是试图系统化地确定对项目计划(估算、进度、资源分配)的威胁。 - 风险预测
又称为风险估算,它从两个方面评估一个风险:- 风险发生的可能性或概率;
- 以及如果风险发生时所产生的后果。
- 风险暴露(Risk Exposure) = 风险发生概率 x 风险影响
- 风险评估
风险评估根据风险及其发生的概率和产生的影响预测是否影响 参考水平值。 - 风险控制。
风险控制的目的是辅助项目组建立处理风险的策略,有效的策略应考虑风 险避免、风险监控、风险管理及意外事件计划。
软件成本估算模型
- 基本COCOMO
静态单变量模型,利用已估算出的源代码行数(LOC)为自变量的函数来计算软件开发工作量。 - 中级COCOMO
多变量模型,基本COCOMO基础上,再用涉及产品、硬件、人员、项目等方面属性的影响来调整工作量的估算。 - 详细COCOMO
中级COCOMO为基础,估算是还要考虑对软件工程过程中分析
、设计等各步骤的影响。
CMM(Capability Maturity Model)
能力成熟度模型,共分为5级(由低到高):
- 初始级
过程无序,进度,预算,功能和质量等方面不可预测。
共性目标是过程将可标识的输入工作产品转换成可标识的输出工作产品,已实现支持过程域的特定目标。 - 可重复
已制度化,有纪律,可重复 - 已定义
过程实现标准化 - 已管理
已实现过程的定量化,使用标准的开发过程(或方法论)构建(或集成)集成 - 优化级
过程可自发的不断改进,防止同类问题二次出现
产品特性
特性 | 子特性 |
---|---|
易用性 | 易理解性、易学性、易操作性 |
可靠性 | 成熟性、容错性、易恢复性 |
可维护性 | 易分析性、易改变性、稳定性、易测试性 |
可移植性 | 适应性、易安装性、一致性、易替换性 |
效率 | 时间、资源 |
功能性 | 适合性、准确性、互用性、依从性、安全性 |
评审
模块结构评审
- 控制流结构:
规定了处理模块与处理模块之间的流程关系。检查处理模块之间的控制转移关系与控制转移形式(调用方式)。 - 数据流结构:
规定了数据模块是如何被处理模块进行加工的流程关系。检查处理模块与数据模块之间的对应关系;处理模块与数据模块之间的存取关系,如建立、删除、查询、修改等。 - 模块结构与功能结构之间的对应关系:
包括功能结构与控制流结构的对应关系;功能结构与数据流结构的对应关系;每个模块的定义(包括功能、输入与输出数据)。
设计质量评审
- 软件可靠性
- 可测试性
- 软件性能实现情况
冗余技术
- 结构冗余
- 静态冗余
- 动态冗余
- 混合冗余
- 时间冗余
重复执行以消除错误带来的影响。 - 信息冗余
信息冗余是在实现正常功能所需要的信息外,再添加一些信息,以保证运行结果正确性的方法。例如,检错码和纠错码就是信息冗余的例子。 - 冗余附加技术
冗余附加技术指实现其他类型冗余技术所需要的资源和技术。
屏蔽硬件错误的冗余技术中,冗余附加技术包括:
关键程序和数据的冗余存储及调用
屏蔽软件错误的冗余技术中,冗余附加技术包括:
冗余备份程序的存储及调用
实现错误检测和错误恢复的程序
实现容错软件所需的固化程序