第一章 软件工程概论
● 什么是软件?
软件是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合。
- 程序——程序是按事先设计的功能和性能要求执行的指令序列
- 数据——数据是使程序能正常操纵信息的数据结构
- 文档——文档是与程序开发,维护和使用有关的图文材料
● 软件的特点
- 软件是一种逻辑实体,而不是具体的物理实体。因而它具有抽象性
- 软件的生产与硬件不同,在它的开发过程中没有明显的制造过程
- 在软件的运行和使用期间,没有硬件那样的机械磨损,老化问题
- 软件的开发和运行常受到计算机系统的限制,对计算机系统有着不同程度的依赖性
- 软件的开发至今尚未完全摆脱手工艺的开发方式
- 软件本身是复杂的,实际问题的复杂性,程序逻辑结构的复杂性
- 软件成本相当昂贵
- 相当多的软件工作涉及到社会因素
● 软件的分类
- 按软件的功能进行划分
- 系统软件——操作系统,数据库管理系统,设备驱动程序,通信处理程序等
- 支撑软件——文本编辑程序,文本格式化程序,磁盘向磁带向数据传输的程序,程序库系统,支持需求分析、设计、实现和测试和支持管理的软件
- 应用软件——商业数据处理软件,工程与科学计算软件,计算机辅助设计/制造软件、,统仿真软件,智能产品嵌入软件,医疗、制药软件,事务管理、办公自动化软件,计算机辅助教学软件
- 按软件工作方式划分
- 实时处理软件
- 分时软件
- 交互式软件
- 批处理软件
- 按软件服务对象的范围划分
- 项目软件(接受客户的委托,由一个或多个开发机构在合同的约束下开发的软件)
- 产品软件(由软件机构开发,直接推送给市场,以营利为目的,并且为众多用户服务)
- 按使用的频度进行划分
- 一次使用
- 频繁使用
- 按软件失效的影响进行划分
- 高可靠性软件
- 一般可靠性软件
● 软件发展阶段
- 程序设计阶段——50至60年代
- 程序系统阶段——60至70年代
- 软件工程阶段——70年代以后
● 系统开发生命周期
- 三个主要的阶段:
- 分析阶段:理解商业需求
- 收集信息
- 确定系统需求
- 建立需求发现的原型
- 划分需求的优先级
- 产生并评估可替换方案
- 与管理人员一起审查建议
- 设计阶段: 将计算机系统解决方案概念化
- 设计并集成网络
- 设计应用程序结构
- 设计用户界面
- 设计系统界面
- 设计并集成数据库
- 设计细节的原型化
- 设计并集成系统控制
- 实现阶段:实现、测试并安装系统
- 构建软件的部件
- 检验并测试
- 开发调整原型
- 转换数据
- 培训与文档
- 安装系统
- 分析阶段:理解商业需求
- 二个附加的阶段
- 项目计划阶段
- 定义问题
- 确认系统的可行性
- 制定项目进度表
- 为项目安排人员
- 启动项目
- 系统支持
- 目标:保证系统在安装后有效地运行
- 对最终用户的支持
- 帮助台,由技术人员组成
- 培训计划
- 维护并增强计算机系统
- 增强
- 升级
- 维护
- 项目计划阶段
● 软件开发过程
- 制定计划
- 确定要开发软件系统的总目标
- 给出功能、性能。可靠性以及接口等方面的要求
- 完成该软件任务的可行性研究
- 需求分析和定义
- 对待开发软件提出的需求进行分析并给出详细的定义
- 编写软件需求说明书(标志性产品)
- 软件设计
- 概要设计
- 详细设计
- 设计说明书
- 软件程序的编写
- 软件测试
- 单元测试,查找各模块在功能和结构上存在的问题并加以纠正
- 组装测试,将已测试过的模块按一定顺序组装起来
- 运行和维护
● 软件开发阶段需要解决的问题
- 计划阶段:基本任务就是理解工作范围,工作的结果是产生计划任务书
- 需求分析:定义用户的需求,工作的结果是产生软件规格说明书
- 设计阶段:基本任务是建立软件结构,工作结果设计说明书
- 编码阶段:编写程序,工作结果交付用户的程序清单
- 测试阶段:发现错误和排除错误。可以运行程序
- 维护阶段:运行和管理,工作结果是改进升级
● 软件工程三要素——方法、工具和过程
- 软件工程方法为软件开发提供了“如何做”的技术
- 软件工具为软件工程方法提供了自动的或半自动的软件支撑环境
- 软件工程过程定义了:
- 方法适用的顺序
- 要求交付的文档资料
- 为保证质量和适应变化所需要的管理
- 软件开发各个阶段完成的里程碑
● 软件生存期模型
● 软件工程项目的基本目标
- 付出较低的开发成本
- 达到要求的软件功能
- 取得较好的软件性能
- 开发的软件易于移植
- 需要较低的维护费用
- 能按时完成开发工作,及时交付使用
● 软件工程的原则(七条)
- 模块化
- 抽象
- 信息隐蔽
- 信息的局部化
- 一致性
- 完整性
- 确定性