- 软件工程概述
运用 工程化的思想进行软件开发:需求分析,软件设计,程序设计,软件维护
软件的定义:软件是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合。
程序:按事先设计的功能和性能要求设计执行的指令序列
数据:使程序能正常操作信息的数据结构
文档:与程序开发,维护和使用有关的图文材料
软件特征:开发复杂,成本高,风险大,维护困难
软件危机:
软件危机的表现:
- 软件成本高
- 软件质量得不到保证
- 进度难以控制
- 维护非常困难
产生软件危机的原因:
- 软件本身特点有关(难于维护,逻辑复杂)
- 与软件开发和维护的方法不正确有关
消除软件危机的途径
- 对计算机软件有一个正确的认识(软件≠程序)
- 充分意识到软件开发是一种有组织,有管理,需要各类人员配合完成的工程项目。而非个体劳动
- 使用成功的技术方法
- 开发和使用更好的软件工具
软件工程:
定义:建立和使用一套合理的工程原理,从而经济地获得可靠的,可以在实际机器上高效运行的软件。
目的:提高质量,降低成本
软件过程模型(软件开发或软件生命周期模型):
软件生命周期
- 软件定义
- 问题定义
- 可行性研究
- 需求分析
2.软件开发
3.运行维护
过程模型
1.瀑布模型(文档驱动型)
- 阶段间具有顺序性和依赖性。每个阶段的工作依次进行,后一阶段的输入文档即前一阶段的输出文档。
- 推迟实现的观点
- 以经过评审确认的阶段工作产品(文档)驱动下一阶段的工作,保证了质量。
- 整体开发模型,程序的物理实现集中在开发阶段的后期,用户在最后才能看到自己的产品。
优点:
- 可强迫开发人员采用规范的方法
- 严格地规定了每个阶段必须提交的文档
- 要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证
缺点:
- 实际项目很少按照该模型给出的顺序进行
- 用户常常难以清楚地给出所有需求
- 用户必须有耐心,等到系统开发完成
2.快速原型模型
快速建立起可以在计算机上运行的程序,所完成的功能往往是最终产品的一个子集。
工作过程:收集需求,快速设计出软件中对用户可见的部分,根据用户的反馈逐步调整原型。
存在问题:
- 为了使原型尽快的工作,没有考虑软件的总体质量和长期的可维护性。
- 为了演示,可能采用不合适的操作系统、编程语言、效率低的算法,这些不理想的选择成了系统的组成部分。
- 开发过程不便于管理。
有效的使用: 建造原型仅是为了定义需求,之后就被抛弃(或被部分抛弃),实际的软件在充分考虑了质量和可维护性之后才被开发。
3.增量模型(分批交付)
先完成一个系统子集的开发,再按同样的开发步骤增加功能 (系统子集),如此递增下去直至满足全部系统需求。 系统的总体设计在初始子集设计阶段就应作出设想。
优点:分批交付,用户先看到部分功能产品,开发者逐步增加产品功能同时用户有时间适应学习新产品。
缺点:软件体系结构必须开放,需要考虑构件无法集成的风险
4.螺旋模型(风险分析)
瀑布模型和快速原型模型结合起来降低风险,且每个阶段前增加了风险分析。
优点:降低风险,提高质量
缺点:开发人员需要相当丰富的风险评估经验和专门知识,要求用户参与阶段评估,过多的迭代次数增加了开发成本,延迟了提交时间