软件工程学概述
软件的概念
软件的概念
软件是计算机系统中与硬件相互依存的另一部分,包括程序、数据以及其相关文档的集合。(软件=程序+数据+文档)
软件危机
在计算机软件开发和维护过程中所遇到的一系列严重问题
软件危机包含两方面的问题
- 如何开发软件,以满足对软件日益增长的需求
- 如何维护数量不断膨胀的已有软件
软件危机的原因
- 主观原因
- 忽视需求分析
- 轻视软件维护
- 没有认识到越到软件工程后期,引入变动付出的代价越高昂
- 客观原因
- 软件是逻辑实体,缺乏可见性,管理和控制困难
- 软件维护意味着修改设计,维护难度大
- 软件规模庞大,程序负责性随着规模的增加指数上升
软件危机带来的启示
解决软件危机要从技术和管理方面入手,即,既要有技术措施(方法和工具),也要有必要的组织管理措施。
- 消除软件就是程序的错误的概念
- 必须认识到软件的开发不是一个人的事,而是各类人员相互配合,相互协作配合之下共同完成的工程项目
- 推广使用更好的开发技术和方法,并研究探索更好更有效的技术和方法。
- 开发和使用更好的软件工具
软件工程
软件工程方法学:把软件生命周期全过程中使用的一整套技术方法的集合称为方法学,也称为泛型。
软件工程方法学包括三个要素:方法、工具、过程
软件工程的基本原理
- 用分阶段的生命周期计划严格管理
- 坚持进行阶段评审
- 实行严格的产品控制
- 采用现代程序设计技术
- 结果应能清楚地审查
- 开发小组的人员应该少而精
- 承认不断改进软件工程实践的必要性
软件工程方法学分类
- 传统方法学(生命周期方法学)
- 面向对象方法学
软件生命周期
软件生命周期由软件定义、软件开发、运行维护,三个时期组成
- 软件定义
- 问题定义
- 可行性研究
- 需求分析
- 软件开发
- 总体设计
- 详细设计
- 编码和单元测试
- 综合测试
- 软件维护
- 运行维护
软件过程
软件过程:是为了获得高质量软件所需要完成的一系列任务框架。通常用软件生命周期模型描述软件过程,主要包括:
- 瀑布模型
- 快速原型模型
- 增量模型
- 螺旋模型
- 喷泉模型
- 其他模型
瀑布模型(文档驱动模型)
特点:
- 阶段间具有顺序性和依赖性
- 推迟实现的观点
- 质量保证的观点
每个阶段必须完成规定的文档;每个阶段结束前完成文档审查,及早改正错误
优点
- 强迫开发人员采用规范的方法
- 严格的规定了每个阶段必须提交的文档
- 要求每个阶段交出的所有产品都必须经过质量保证小组的审查
缺点
- 可运行软件产品较复客户之前,用户只能通过文档来了解软件产品是什么样子
- 缺乏灵活性,开发过程中很难发现错误,从而使软件产品难以维护
快速原型模型
快速建立可运行的程序
优点
- 软件产品开发基本是线性过程
- 开发的产品通常满足用户需求
缺点
- 准确原型设计困难
- 所选用的开发技术和工具不一定符合主流发展
- 快速建立起来的系统结构加上连续的修改可能会导致产品质量低下
增量模型(渐增模型)
先完成一个系统子集的开发,再按同样的开发步骤增加功能,直至满足全部系统的需求
优点
- 短时间内向用户提交完成的产品的部分功能
- 逐渐增加产品功能,用户适应产品快
- 有利于系统维护
缺点
- 增加构件困难
- 容易退化为边做边改模型,从而使软件过程的控制失去整体性。
螺旋模型(风险驱动的模型)
在每个阶段之前都增加了风险分析过程的快速原型模型
可看作增加了风险分析的快速原型模型
适用范围:内部开发的大型软件项目
优点:
- 利于把软件质量作为软件开发目标
- 减少测试
- 维护和开发不分开
缺点
- 风险估计困难,要求开发人员具有丰富的风险评估经验和专业知识
喷泉模型(典型的面向对象的软件模型之一)
体现迭代和无缝的特性
优点:
- 提高软件的开发效率,节省开发时间
缺点:
- 开发中需要大量的开发人员,不利于项目的管理
- 要求严格的管理文档,审核难度大
其他模型
- Rational 统一过程
- 敏捷过程(例如:极限编程)
- 微软过程