软件工程概述
概述
1. 软件
- 软件的概念:软件是与计算机操作系统操作有关的程序、规程、规则、及任何与之有关的文档及数据的完整集合(软件=程序+数据+文档)
- 软件的特点
- 逻辑产品
- 不存在磨损问题,存在退化问题
- 依赖于计算机操作系统
- 复杂性
- 软件的分类
- 按软件的功能分类
- 系统软件:操作系统、数据库管理系统、设备驱动程序、通信处理程序等。
- 支撑软件:文本编辑器、文件格式化程序、程序库系统等。
- 应用软件:类似于qq这种软件
- 按软件规模进行划分:微型、小型、中型、大型、甚大型、极大型
- 按软件的功能分类
- 软件的发展
- 程序设计阶段
- 软件设计阶段
- 软件工程阶段
2. 软件危机
-
软件危机的含义
指落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象。
-
软件危机的主要表现
- 花费超预期
- 不能按时完成
- 不得不重新设计
-
软件危机的主要特征
- 软件开发周期大大超过规定日期
- 软件开发成本严重超标
- 软件质量难于保证
-
软件危机产生的原因
- 用户需求不明确
- 缺乏正确的理论指导
- 软件开发规模越来越大
- 软件复杂度越来越高
-
如何解决软件危机?
- 软件工程就能解决
3. 软件工程及其三要素
-
软件工程的概念
软件工程:指用工程、科学和数学的原则与方法研制、维护计算机软件有关技术及管理方法
-
软件工程三要素
- 方法:分为传统方法和面向对象方法
- 工具:软件工具为软件工程的方法提供了自动或半自动的软件支持环境
- 过程:定义了以下
- 方法使用的顺序
- 要求交付的文档资料
- 为保证质量和适应变化所需的管理
- 软件开发各个阶段完成的产品的度量
-
软件工程项目的基本目标
- 付出较低的开发成本
- 达到要求的软件功能
- 取得较好的软件性能
- 开发的软件易于移植
- 需要较低的维护费用
- 能按时完成开发工作,及时交付使用
-
软件工程的原则
- 选取适宜的开发模型
- 采用合适的设计方法
- 提供高质量的工程支撑
- 重视软件开发过程的管理
4. 软件生存周期
-
软件生存周期概念
软件产品从形成概念开始,经过开发、运行(使用)和维护直到退役的全过程,称为软件生存周期,包括软件定义、开发、使用和维护三部分。 -
软件生存周期的阶段
-
可行性研究和项目开发计划:系统要解决什么问题、是否可行
-
需求分析
- 需求获取 --需求定义,系统功能的一个正确的陈述
- 需求规约 --系统需求规格说明
- 主要成分:系统模型(系统功能的一个精确、系统的描述)
- 需求验证
-
设计:在需求的基础上,给出系统的软件解决方案
- 概要设计
- 系统的软件体系结构
- C/S结构
- 以数据库为中心的结构
- 管道结构
- 面向对象的结构
- 详细设计
- 针对总体设计结果,给出每个模块的详细描述,把功能描述变为精确的。结构化的过程描述
- 概要设计
-
实现阶段:选择可用的构件,或以一种选定的语言,对每一构件进行编码
-
确定阶段:贯穿软件开发的整个过程,主要任务是软件测试
-
支持阶段:完善性维护,纠错性维护
5. 软件过程模型(软件开发模型、软件生存周期模型)
软件过程模型概念:
描述软件过程中各种活动如何执行的模型
-
瀑布模型
-
经典的软件开发模型,最早的软件开发模型
-
概念
-
将软件生命周期中的各项活动规定为依线性顺序连接的若干阶段
-
阶段包括:需求分析、设计、编码、测试、运行与维护。看起来像瀑布一样
-
特点
- 各项活动严格按照线性方式进行
- 以文档作为驱动
- 当前活动的工作结果需要进行验证
- 适合于软件需求很明确的软件项目
-
存在的问题
- 软件开发各个阶段划分固定,阶段间会产生大量文档,增加工作量
- 线性开发增加了开发的风险
- 无法解决需求不明确或者变动的问题
-
-
-
增量模型
-
非整体开发模型,分为渐增模型和快速原型模型
-
概念
-
将需求分解,划分为一系列增量,并为增量排序,急需的增量先开发。
-
每个增量都历经需求、设计、编码、测试、移交几个阶段
-
优点
- 按照增量持续不断的发布软件新版本,可以及时得到用户反馈,调整后续软件开发的策略
- 因为需求确定,可先设计软件体系结构,并在开发过程中保持
-
缺点
- 增量模型规模不能大
- 分解增量要求对需求十分了解,并有顶层的设计经验
- 基本服务的增量定义和实现比较困难
-
适用于
- 软件需求不明确,设计方案有一定风险的项目
-
-
-
螺旋模型
-
将瀑布模型和增量模型结合起来,并加入了风险分析
-
概念
-
螺旋模型是迭代模型,从里向外,螺旋线每个回路表示的软件工程都有四个阶段组成。
-
四个阶段:定义目标、风险分析、开发和验证、规划。
-
-
优点:边学习、边建模、边开发、边使用、边改进。
-
缺点:多次迭代导致软件体系结构变化,为软件理解和维护带来困难
-
适应于
- 大型的软件开发 如,电子商务,电子政务等业务软件的开发
-
-
喷泉模型
- 以用户需求为动力,以对象为驱动的模型
- 优点:可以提高软件项目开发效率,节省开发时间,适应于面向对象的软件开发过程
- 缺点:开发过程中需要大量的开发人员,因此不利于项目的管理;严格的文档管理,使得审核的难度加大
-
智能模型
-
基于知识的软件开发模型
-
概念
- 称为“基于知识的软件开发模型”,把瀑布模型和专家系统结合在一起,利用专家系统来帮助软件开发人员工作
-
-