软件工程学导论第一章-软件工程学概述

软件工程学概述

软件危机

软件危机的介绍

软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。

软件危机包含两方面的问题:如何开发软件,以满足对软件日益增长的需求。如何维护数量不断膨胀的已有软件。

软件危机主要有的典型表现:

  • 对软件开发成本和进度的估计常常很不准确。
  • 用户对“已完成”的软件系统不满意的现象经常发生。
  • 软件产品的质量往往靠不住。
  • 软件通常没有适当的文档资料。
  • 软件成本在计算机系统总成本中所占的比例逐年上升。
  • 软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。

产生软件危机的原因

与软件本身的特点和软件开发与维护的方法不正确有关

  1. 软件不同于硬件,管理和控制软件开发过程相当困难。
  2. 在测试阶段没能检测出在开发时期引入的错误。
  3. 软件规模庞大,程序复杂性将随着程序规模的增加而呈指数上升。
  4. 开发和维护还有不少糊涂观念,在实践过程中或多或少地采用了错误的技术和方法。
  5. 忽视软件需求分析的重要性,轻视软件维护。
  6. 对用户要求没有完整准确的认识就匆忙着手编写程序。

软件的生命周期:软件从定义、开发、使用和维护,直到最终被废弃的时期。

消除软件危机的途径

软件是程序、数据及相关文档的完整集合。

  • 程序:能够完成预定功能和性能的可执行的指令序列。
  • 数据:使程序能够适当地处理信息的数据结构。
  • 文档:开发、使用和维护程序所需要的图文资料。

途径:

  1. 首先应该对计算机软件有一个正确的认识。
  2. 充分认识到软件开发不是某种个体劳动的神秘技巧,而应该是各类人员协同配合,共同完成的工程项目。
  3. 推广使用在实践中总结出来的开发软件的成功技术和方法,并且研究探索更好更有效的技术和方法。
  4. 应该开发和使用更好的软件工具。

软件工程

软件工程的介绍

软件工程:采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发处高质量的软件并有效地维护它。

软件工程地本质特性:

  1. 软件工程关注大型程序的构造。
  2. 软件工程的中心课题是控制复杂行。
  3. 软件经常变化。
  4. 开发软件的效率十分重要。
  5. 和谐地合作是开发软件的关键。
  6. 软件必须有效地支持它地用户。
  7. 在软件工程领域中通常由具有一种文化背景地人替具有另一种文化背景地人创造产品。

软甲工程地基本原理

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

软件工程方法学

方法学(范型):在软件生命周期全过程中使用的一整套技术方法的集合。

三要素:

  • 方法:完成软件开发的各项任务的技术方法,回答“怎样做”的问题。
  • 工具:为运用方法而提供的自动的或半自动的软件工程支撑环境。
  • 过程:为了获得高质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。

传统方法学:

  • 概念:传统方法学也称为生命周期方法学或结构化范型。它采用结构化技术(结构化分析、结构化设计和结构化实现)来完成软件开发的各项任务,并使用适当的软件工具或软件工程环境来支持结构化技术的运用。
  • 特点:
    • 传统方法学把软件生命周期的全过程依次划分为若干个阶段,然后顺序地完成每个阶段的任务。
    • 每个阶段的开始和结束都有严格标准,对于任何两个相邻的阶段而言,前一阶段的结束标准就是后一阶段的开始标准。
    • 在每一个阶段结束之前都必须进行正式严格的技术审查和管理复审。
    • 采用生命周期方法学可以大大提高软件开发的成功率,软件开发的生产率也能明显提高。

面向对象方法学:

  • 概念:与传统方法相反,面向对象方法把数据和行为看成是同等重要的,它是一种以数据为主线,把数据和对数据的操作紧密地结合起来的方法。
  • 要点:
    • 把对象(object)作为融合了数据及在数据上的操作行为的统一的软件构件。
    • 把所有对象都划分成类(class)。
    • 按照父类与子类的关系,把若干个相关类组成一个层次结构的系统。
    • 对象彼此间仅能通过发送消息互相联系。
  • 面向对象方法学基本原则:尽量模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界、解决问题的方法与过程,从而使描述问题的问题空间(也称为问题域)与实现解法的解空间(也称为求解域)在结构上尽可能一致。
  • 优点:降低了软件产品的复杂性,提高了软件的可理解性,简化了软件的开发和维护工作。面向对象方法特有的继承性和多态性,进一步提高了面向对象软件的可重用性。

软件生命周期

概念:软件生命周期由软件定义、软件开发和运行维护(也称为软件维护)3个时期组成,每个时期又进一步划分成若干个阶段。

  • 软件定义时期的任务是: 确定软件开发工程必须完成的总目标;确定工程的可行性;导出实现工程目标应该采用的策略及系统必须完成的功能;估计完成该项工程需要的资源和成本,并且制定工程进度表。这个时期的工作通常又称为系统分析,由系统分析员负责完成。
    • 软件定义时期通常进一步划分成3个阶段,即问题定义、可行性研究和需求分析。
  • 开发时期具体设计和实现在前一个时期定义的软件,它通常由下述4个阶段组成:总体设计,详细设计,编码和单元测试,综合测试。其中前两个阶段又称为系统设计,后两个阶段又称为系统实现。
  • 维护时期的主要任务是使软件持久地满足用户的需要。

软件生命周期每个阶段的基本任务:

  1. 问题定义。
  2. 可行性研究。
  3. 需求分析。
  4. 总体设计。
  5. 详细设计。
  6. 编码和单元测试。
  7. 综合测试。
  8. 软件维护。

软件过程

概念:软件过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。软件过程描述为了开发出客户需要的软件,什么人(who)、在什么时候(when)、做什么事(what)以及怎样(how)做这些事以实现某一个特定的具体目标

  • 瀑布模型:在这里插入图片描述

    • 特点:
      1. 阶段间具有顺序性和依赖性
        两重含义: ①必须等前一阶段的工作完成之后,才能开始后一阶段的工作; ②前一阶段的输出文档就是后一阶段的输入文档,因此,只有前一阶段的输出文档正确,后一阶段的工作才能获得正确的结果。
      2. 推迟实现的观点
        瀑布模型在编码之前设置了系统分析与系统设计的各个阶段,分析与设计阶段的基本任务规定,在这两个阶段主要考虑目标系统的逻辑模型,不涉及软件的物理实现。
      3. 质量保证的观点
        软件工程的基本目标是优质、高产。为了保证所开发的软件的质量,在瀑布模型的每个阶段都应坚持两个重要做法。
        1. 每个阶段都必须完成规定的文档,没有交出合格的文档就是没有完成该阶段的任务。
        2. 每个阶段结束前都要对所完成的文档进行评审,以便尽早发现问题,改正错误。
  • 增量模型:在这里插入图片描述

    • 优点:
      1. 能在较短时间内向用户提交可完成部分工作的产品。
      2. 逐步增加产品功能可以使用户有较充裕的时间学习和适应新产品,从而减少一个全新的软件可能给客户组织带来的冲击。
    • 使用增量模型的困难:
      1. 在把每个新的增量构件集成到现有软件体系结构中时,必须不破坏原来已经开发出的产品。
      2. 必须把软件的体系结构设计得便于按这种方式进行扩充,向现有产品中加入新构件的过程必须简单、方便,也就是说,软件体系结构必须是开放的。
    • 风险更大的增量模型:在这里插入图片描述
  • 螺旋模型:

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

      • 完整的螺旋模型:在这里插入图片描述

  • 喷泉模型:

    • 概念:“喷泉”这个词体现了面向对象软件开发过程迭代和无缝的特性。迭代是软件开发过程中普遍存在的一种内在属性。用面向对象方法学开发软件时,工作重点应该放在生命周期中的分析阶段。
    • 图示:在这里插入图片描述
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值