目录
软件工程和系统开发
软件工程的基本要素:方法、工具和过程
1、软件开发模型
软件开发模型 | 解释 | 特点 |
---|---|---|
瀑布模型 | 将开发过程分解为一系列的顺序,当某一阶段出现问题时,返回上一阶段进行修改。如正常发开,则从一个阶段流动到下一阶段 | 适用于需求比较稳定,很少需要变更项目 难以适应变化的需求 |
V模型 | 瀑布模型的一种,说明测试活动如何与分析和设计相联系 | 与测试活动结合 |
演化模型 | 具有迭代开发的特性,可以看成多个重复执行,且有反馈的“瀑布模型” | 适用于对软件需求缺乏准确认知的情况,需求不明确 |
原型模型 | 沟通—制定开发计划—快速设计建模-构建原型—交付反馈 | 不适合大规模开发软件,比如火箭、卫星系统 |
螺旋模型 | 一般采用周期性开发,制定计划—风险分析—实事工程—客户评价 瀑布模型 + 快速原型模型 制定计划、风险分析、实施工程、客户评估 | 强调了风险分析,适合大型复杂系统开发 |
增量模型 | 本质上是迭代,采用若干有时间先后的序列,每个序列产生一个增量 | 模块划分是难点,当需要重新开发时,管理成本很大 |
喷泉模型 | 是面向对象的开发模型 | 迭代无间隙 开发活动之间不存在明显的界限 |
设计软件结构模块时,应做到合理适中原则
-
模块的扇入扇出要合理,尽量减少高扇入和高扇出
-
模块大小要适中,相似功能的模块合并
-
模块宽度和深度适中
若一个模块的作用范围不在其控制范围,应:上移判断点或下移受判模块
2、软件开发方法
阶段 | 产物 |
---|---|
环境搭建 | 开发环境搭建、开发工具、文档工具 |
需求分析阶段 (按优先级) | 需求规格说明、项目开发计划、设计标准、验证测试计划等 |
系统设计阶段 (做什么?怎么做?) | 系统设计规格说明、数据库设计、界面设计等 |
测试阶段 | 操作手册 |
2.1 结构化开发方法
特点:
-
自顶向下,逐层分解
-
基本原则是功能的分解和抽象
-
特别适合于数据领域的项目
-
不适合特别大规模的开发
结构化分析:
-
结构化分析(一套数据流图,一本数据字典、一组加工逻辑(描述的是实现策略而不是细节),无外部实体)
-
结构化设计
-
结构化程序设计组成
-
体系结构设计:各部件、体系设计
-
接口设计:主要依据需求分析阶段的数据流图,系统和模块间的调用,内部和外部交互设计
-
数据设计:数据库设计
-
过程设计:模块详细设计,包括数据结构、算法设计
-
遵循自顶而上的顺序,先进行整体、全局的设计,后进行细节、局部的设计,并将目标分解为一个个的模块
2.2 面向数据结构方法
原型方法:认为需求无法预先准确定义,可能需要反复修改,因此快速为用户搭建一个原型系统,反复修改,直到最后的产品
适用于需求不明确的情况
2.3 面相对象方法
迭代模型的生命周期:初级阶段—细化阶段—构建阶段—交付阶段
适合大规模、复杂开发
2.4 敏捷开发
不断快速迭代、改进、交流,强调个体和交互
-
极限编程(EP)
最佳实践 具体内容 小型发布 设计尽早交付,可控制工作量和风险,尽早得到用户反馈 清楚发开进度,小而短的周期 测试先行 先写单元测试代码,再开发 重构 不改变系统行