软件工程概述
软件危机
介绍
- 软件危机包含两个问题:如何开发软件以应对日益增长的需求,以及如何维护数量不断增长的已有软件。
- 软件危机表现:
- 对软件开发成本和进度估计不明确
- 用户对已完成的软件系统市场不满意
- 软件质量靠不住
- 不可维护
- 软件通常没有合适的文档材料
- 软件成本在计算机系统的成本中所占的比例提升
- 软件开发生产率提高速度过慢
原因
- 软件开发不同于硬件,是逻辑部件,缺乏可见性,所以开发进展较难衡量
- 软件规模庞大,难以组织分工合作
消除途径
- 软件是程序,数据及相关文档的完整集合。(不仅仅是程序)
- 程序是能够完成预定功能和性能的可执行的指令序列
- 数据是使程序能够适当地处理信息的数据结构
- 文档是开发、使用、和维护程序所需要的图文资料
软件工程
软件工程是知道计算机软件开发和维护的一门工程学科
介绍
本质特征:
- 软件工程关注余大型程序的构造
- 软件工程的核心课题是控制复杂性:把大问题分解成几个小的问题
- 软件经常变化
- 软件开发效率非常重要
- 和谐合作是软件开发的关键
- 软件必须有效的支持他的用户
- 通常由具有一种文化背景的人体具有另一种文化背景的人创造产品
基本原理
- 用分阶段的生命周期计划严格管理
- 坚持进行阶段评审
- 实施严格产品管控
- 采用现代化程序设计技术
- 结果应能清楚地审查
- 开发人员小组应少而精
- 承认不断改进软件工程实践的重要性
方法学
- 软件生命周期全过程中使用的一整套技术方法的集合称为方法学
- 软件工程方法学包含三个要素:方法工具和过程。
- 传统方法学
- 又名生命周期方法学或结构化范型
- 采用结构化技术(结构化分析结构化设计结构化实现)
- 把软件开发的生命周期划分为若干个阶段,然后顺序的完成每个阶段。
- 维护较为困难
- 面向对象方法学=对象+类+继承+用消息通信
- 软件规模较大时,使用传统方法学往往不成功
- 数据和行为同等重要,以数据为主线,把数据和对数据的操作紧密的结合起来。
- 主要有以下四个要点:
- 把对象作为融合了数据以及在数据上操作行为的统一软件构件
- 把所有对象都划分成类
- 按照父类与子类的关系把若干个相关类组成一个层次结构的系统
- 对象之间仅能通过发送消息互相联系
软件生命周期
- 软件定义:问题定义,可行性研究,需求分析
- 软件开发:总体设计,详细设计,编码和单元测试,综合测试
- 软件维护
软件过程
瀑布模型
- 阶段间具有顺序性和依赖性
- 推迟实现的观点
- 质量保证的观点
- 每个阶段都必须完成规定的文档
- 每个阶段结束前都必须对所完成的文档进行评审
- 反馈环
- 文档驱动
快速模型原型
- 快速建立起可以在计算机上运行的程序,它所完成的功能往往是最终产品的一个子集。通过用户提出的修改意见来改进系统
增量模型
- 将系统分解为一系列的增量构件来设计编码和测试
- 分解必须遵守的约束:当把新的构件添加到系统中时,所形成的产品必须是可测试的
螺旋模型
- 风险驱动
喷泉模型
- 主要用于面向对象开发
Rational统一过程
- Rational Unified Process(RUP)
- 最佳实践
- 迭代式开发
- 管理需求
- 使用基于构建的体系结构
- 可视化建模
- 验证软件质量
- 控制软件变更
- RUP软件开发生命周期
- 二维的生命周期模型
- 纵轴核心工作流,横轴时间
敏捷过程与极限编程
- 敏捷过程
- 四个简单的价值观:
- 个体和交互胜过过程和工具
- 可以工作的软件胜过面面俱到的文档
- 客户合作胜过合同谈判
- 相应变化胜过遵守计划
- 四个简单的价值观:
- 极限过程
- 属于敏捷过程
- 极限编程的有效实践
- 极限编程的整体开发过程极限编程的迭代过程
微软过程
可行性研究
可行性研究的任务
- 技术可行性
- 经济可行性
- 操作可行性
可行性研究过程
- 复查系统规模和目标
- 研究目前正在使用的系统
- 导出新系统的高层逻辑模型:数据流图和数据字典
- 进一步定义问题
- 导出和评价供选择的解法
- 推荐行动方针
- 草拟开发计划
- 书写文档提交审查
系统流程图
概括的描述物理系统的传统工具
- 符号:基本符号,系统符号
- 例子
- 分层:先用高层次整体概括再具体细化每个功能
数据流图(DFD)用于建立功能模型
- 符号:四种基本符号:正方形,表示数据的源或终点;圆角矩形,表示数据的变换处理;开口矩形,表示数据的存储;箭头,表示数据的流动方向。
- 附加符号的含义。"* + 抑或"
- 通常忽略出错处理和内务处理,只考虑做什么而不考虑怎样做。
数据字典
数据字典内容:
- 数据流
- 数据流分量
- 数据存储
- 处理
需求分析
结构化分析方法准则:必须理解并描述问题的信息域,根据这条准则建立数据模型
必须定义软件应该完成的功能,根据这条准则建立功能模型
必须描述作为外部事件结果的软件行为,根据这条准则建立行为模型
必须对描述信息,功能,行为的模型进行分