概述
软件
程序+数据+文档
软件危机
软件危机是指落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发和维护过程中出现一系列严重问题的现象
软件危机的表现
- 对软件的开发成本和进度的估计不准确
- 用户对已完成的系统不满意
- 软件质量不可靠
- 软件可维护性差
- 缺乏文档资料
- 软件成本上升
- 生产速率跟不上计算机应用普及的趋势
软件危机的原因
软件自身原因
软件自身特点使得开发和维护困难,主要表现在两个方面:
- 复杂性
- 不可见性
软件开发和维护方法不正确
- 没有科学的工程化思想来组织和指导开发
- 没有完善的质量保证体系
- 软件文档没有得到重视
- 从业人员缺乏经验
软件工程
软件工程的定义
软件工程是指导计算机软件开发和维护的一门学科,
采用工程的概念原理技术和方法来开发与维护软件,
把经过时间考验而证明正确的管理技术和当前能够的到的最好的技术方法结合起来,
以经济地开发出高质量的软件并有效地维护它。
软件工程的本质特征
- 关注于大型程序的构造
- 中心课题是控制复杂性
- 软件经常变化
- 开发效率非常重要
- 和谐开发是关键
- 必须有效地支持用户
- 开发者与用户的文化背景不同
软件工程的基本原理
- 用分阶段的生命周期计划严格管理
- 坚持阶段评审
- 实行严格的产品控制
- 采用现代程序设计技术
- 结果应能清楚地进行审查
- 开发小组应少而精
- 承认不断改进软件工程实践的必要性
软件开发方法学
软件生命周期中使用的一整套技术方法的集合称为方法学,也称为泛型
方法学要素
- 方法:软件开发如何做?
- 工具:为软件工程方法提供的软件支撑工具
- 过程:用于开发、管理、维护软件的一系列活动,是将软件工程的标准、方法、工具综合起来以达到合理及时进行软件开发管理维护活动的序列
类型
- 传统方法学
- 面向对象方法学
软件生命周期
软件开发三个阶段
- 定义阶段
- 开发阶段
- 维护阶段
软件生命周期每个阶段的基本任务
- 可行性研究
- 需求分析
- 软件设计
- 编码
- 软件测试
- 软件维护
软件开发模型(软件过程)
软件过程是为了获得高质量软件所需要完成的一系列任务的框架。规定了完成各项任务的工作步骤
用UML 建模语言来描述软件工程模型
瀑布模型 ☆
各阶段间的组织方式就如同瀑布流水一样,逐级下落,完成前一阶段任务后才可开始下一阶段工作
特点
- 阶段间具有顺序性和依赖性
- 必须等前一阶段完成后,才能开始下一阶段工作
- 前一阶段的输出文档就是后一个阶段的输入文档
- 推迟实现的观点:规模大的软件,编码开始越早,最终完成所需时间越长,瀑布模型尽可能推迟程序的物理实现
- 质量保证的观点
- 基于里程碑的阶段过程,开发人员为每个阶段设立里程碑,并做好评审
优点:
- 过程模型简单
- 强迫开发人员采用规范的方法,严格要求文档并需要经过评审,能够保证软件质量
缺点:
- 无法适应变更
快速原型模型
快速建立起能反映用户需求的程序,让用户试用,以了解目标系统概貌,并按照客户要求快速修改原型系统,不断重复。
优点:
- 简单快速
缺点:
- 需要花费额外成本构造原型
- 不利于创新
增量模型 ☆
增量模型是把待开发的软件系统模块化,将每个模块作为一个增量组件,从而分批次地分析、设计、编码和测试这些增量组件。是一个递增的过程,分批次交付软件
优点:
- 模块化可分批次交付,便于客户了解进展
- 模块化降低开发风险,一个周期内的错误不会影响整个系统
- 开发顺序灵活
螺旋模型
用于风险较大的大型软件项目开发过程,可以看成是增加了风险分析过程的快速原型模型
喷泉模型
一种过程模型,支持面向对象,由于面向对象经常需要迭代,喷泉模型可随时回到底层
敏捷模型
敏捷方法是一种轻量级的软件工程方法,相对于传统的软件工程方法,它更强调软件开发过程中各种变化的必然性,通过团队成员间充分的交流和沟通以及合理的机制来有效地响应变化。
敏捷软件开发宣言:
- 个体和交互胜过过程和工具
- 可以工作的软件胜过面面俱到的文档
- 客户合作胜过合同谈判
- 响应变化胜过遵循计划