1.1 软件危机

1.1.1软件危机的介绍

  • 软件=程序+数据+文档
  • 软件发展——4个阶段
  1. 程序设计阶段
    1. 软件生产个体化规模小;
    2. 编写者和使用者同一个人;
    3. 软件是设计者头脑中的隐含过程;
    4. 除程序清单,无文档材料的保存;
  2. 程序系统阶段 ——>产生软件危机
    1. 产品软件——由专门的软件开发组织开发
    2. 软件作坊——软件开发组织、沿用早期个体软件开发方法
    3. 软件危机——软件维护消耗大量资源
    4. 软件工程——1968,北大西洋公约组织计算机科学家讨论软件危机,提出软件工程。
  3. 软件工程阶段
    1. 软件危机得到缓解——打破了软件生产个体化特征,建立了工程化的设计原则、方法和标准
    2. 新的挑战——微处理器和个人计算机,分布式处理系统局域网、广域网、宽带数据通讯
  4. 第四阶段
    1. 软件架构——从集中主机式软件发展到了C/S,B/S(多客户共享)
    2. 新技术—— 专家系统、人工智能、神经网络、并行计算网络技术、高信度计算机、云计算
      • 软件危机暴发于上个世纪六十年代末。是指计算机软件开发和维护过程中所遇到的一系列严重问题
  • 软件危机的典型表现
  1. 对软件开发成本和进度的估计常常很不准确。
  2. 用户对“已完成的”软件系统不满意的现象经常发生。
  3. 软件产品的质量往往靠不住。
  4. 软件常常是不可维护的。
  5. 软件通常没有适当的文档资料。
  6. 软件成本在计算机系统总成本中所占的比例逐年上升。
  7. 软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。

    1.1.2软件危机产生的原因

  • 软件开发与维护的方法不正确有关
  • 在软件开发的不同阶段进行修改需要付出的代价

第一章软件工程学概述 - 图1

1.1.3消除软件危机的途径

  1. 先进的技术
  2. 组织管理措施
  • 解决软件危机的途径就是软件工程学的生成过程。

    1.2软件工程

    1.2.1软件工程的介绍

  • 软件工程概述

    • 用工程科学中的观点进行费估算、制定制度、制定计划和方案
    • 用管理科学中的方法和原理进行软件生产的管理
    • 用数学的方法建立软件开发的各种模型和算法。
  • 软件工程具有的本质特性
  1. 软件工程关注于大型程序的构造
  2. 软件工程的中心课题是控制复杂性(分解)
  3. 软件经常变化
  4. 开发软件的效率非常重要
  5. 和谐地合作是开发软件的关键
  6. 软件必须有效地支持它的用户
  7. 在软件工程领域中通常由具有一种文化背景的人替具有另一种文化背景的人创造产品


  • 软件工程的目标
  • 软件的质量特性:功能性、可靠性、可使用性、效率、可维护性和可移植性。

    1. ![](https://cdn.nlark.com/yuque/0/2020/png/1118250/1584082356522-3c9fa466-dfb3-49c6-b063-7beccd737fab.png#align=left&display=inline&height=183&originHeight=318&originWidth=484&status=done&style=none&width=279)

    1.2.2软件工程的基本原理

  1. 用分阶段的生命周期计划严格管理
  2. 坚持进行阶段评审
  3. 实行严格的产品控制
  4. 釆用现代程序设计技术
  5. 结果应能清楚地审查
  6. 开发小组的人员应该少而精
  7. 承认不断改进软件工程实践的必要性

    1.2.3软件工程方法学

    通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学( methodology),也称为范型( paradigm)。

  • 软件工程方法学包含3个要素:方法、工具和过程

    1. 传统方法学

    概念:传统方法学也称为生命周期方法学或结构化范型。它采用结构化技术(结构化分析、结构化设计和结构化实现)来完成软件开发的各项任务,并使用适当的软件工具或软件工程环境来支持结构化技术的运用。

  • 特点:传统方法学把软件生命周期的全过程依次划分为若干个阶段,然后顺序地完成每个阶段的任务。每个阶段的开始和结束都有严格标准,对于任何两个相邻的阶段而言,前一阶段的结束标准就是后一阶段的开始标准。

    2. 面向对象方法学

    概念:与传统方法相反,面向对象方法把数据和行为看成是同等重要的,它是一种以数据为主线,把数据和对数据的操作紧密地结合起来的方法。

1.3软件生命周期

软件定义时期

  1. 问题定义——生成问题定义报告书:问题的性质;工程的目标;工程的规模。
  2. 可行性研究——生成可行性研究报告书和项目开发的粗略计划
  3. 需求分析——生成规格需求说明书(最重要文档)

    软件开发时期

  4. 总体设计(概要设计)——在充分权衡各种方案的利弊的基础上,推荐一个最佳方案

  5. 详细设计——应该怎样具体地实现这个系统
  6. 编码和单元测试
  7. 综合测试

    • 集成测试
    • 验收测试

      软件维护时期

  8. 软件维护

    • 改正性维护
    • 适应性维护
    • 完善性维护
    • 预防性维护

      1.4软件过程(了解)

      1.4.1瀑布模型

  • 瀑布模型一直是唯一被广泛采用的生命周期模型,现在它仍然是软件工程中应用得最广泛的过程模型。
  • 特点
  1. 阶段间具有顺序性和依赖性
  2. 推迟实现的观点
  3. 质量保证的观点

    1. 每个阶段都必须完成规定的文档
    2. 每个阶段结束前都要对所完成的文档进行评审

      1. 传统的瀑布模型        实际的瀑布模型           <br />![](https://cdn.nlark.com/yuque/0/2020/png/1118250/1584082356874-fa84bbb2-8f19-4a4f-9575-03414136dc6f.png#align=left&display=inline&height=443&originHeight=443&originWidth=295&status=done&style=none&width=295)![](https://cdn.nlark.com/yuque/0/2020/png/1118250/1584082357018-839705d8-64fb-4cfd-aef3-a6522474bd4a.png#align=left&display=inline&height=433&originHeight=502&originWidth=416&status=done&style=none&width=359)<br />
  • 优点:奠定了软件工程方法的基础;流水依赖;便于分工协作;

    推迟现实;文档易修改;有复审质量保证。

  • 缺点:用户见面晚:纠错慢;难于克服系统分析员不懂专业领域的知识,

    1. 用户不懂计算机的困难,成功率低。适合于系统要求明确的小系统。
  • 对于经常变化的项目,瀑布模型毫无意义。

    1.4.2快速原型模型

    概念:快速原型是快速建立起来的可以在计算机上运行的程序它所能完成的功能往往是最终产品能完成的功能的一个子集。

快速原型模型
第一章软件工程学概述 - 图2

  • 优点:与用户见面快;开发成功率高,适合于需求不确定的大系统。
  • 缺点:周期长,开发成本高,内部结构混乱。
  • 快速原型模型是不带反馈环的。

    1.4.3增量模型

    概念:増量模型也称为渐増模型。使用増量模型开发软件时,把软件产品作为一系列的增量构件来设计、编码、集成和测试。每个构件由多个相互作用的模块构成,并且能够完成特定的功能。使用増量模型时,第一个增量构件往往实现软件的基本需求,提供最核心的功能。

    1. 增量模型 <br />![](https://cdn.nlark.com/yuque/0/2020/png/1118250/1584082357428-08057729-701d-47d5-87b7-a5d41f1406e7.png#align=left&display=inline&height=316&originHeight=337&originWidth=535&status=done&style=none&width=502)
  1. 风险更大的增量模型<br />![](https://cdn.nlark.com/yuque/0/2020/png/1118250/1584082357621-af23b226-92ec-4f45-bb74-0c55034e204c.png#align=left&display=inline&height=199&originHeight=213&originWidth=728&status=done&style=none&width=679)<br />·
  • 优点:能在较短时间内向用户提交可完成部分工作的产品;逐步增加产品功能可以使用户有较充裕的时间学习和适应新产品,从而减少一个全新的软件可能给客户组织带来的冲击。
  • 缺点:在把每个新的增量构件集成到现有软件体系结构中时,必须不破坏原来已经开发出的产品;必须把软件的体系结构设计得便于按这种方式进行扩充,向现有产品中加入新构件的辽程必须简单、方便,也就是说,软件体系结构必须是开放。

    1.4.4螺旋模型

    概念:螺旋模型的基本思想是,使用原型及其他方法来尽量降低风险。理解这种模型的一个简便方法,是把它看作在每个阶段之前都增加了风险分析过程的快速原型模型。

    简化的螺旋模型
    第一章软件工程学概述 - 图3

完整的螺旋模型
第一章软件工程学概述 - 图4

1.4.5喷泉模型

概念:“喷泉”这个词体现了面向对象软件开发过程迭代和无缝的特性。迭代是软件开发过程中普遍存在的一种内在属性。用面向对象方法学开发软件时,工作重点应该放在生命周期中的分析阶段。

喷泉模型
第一章软件工程学概述 - 图5

1.4.6 Rational统一过程

RUP软件开发生命周期
第一章软件工程学概述 - 图6

1.4.8微软过程(主动寻找需求)

微软软件生命周期阶段划分和主要里程碑
第一章软件工程学概述 - 图7