• 软件工程概论


    软件的定义

    计算机系统中的程序及其文档。

    • 程序是计算任务的处理对象和处理规则的描述;

    • 文档是为了便于了解程序所需的阐明性资料

    软件的特点

    • 软件是无形的、不可见的逻辑实体
      • 它的正确与否,一直到程序在机器上运行才能知道
      • 这给设计、生产和管理带来许多困难
    • 软件是设计开发的,而不是生产制造的
    • 软件在使用过程中没有磨损、老化的问题
    • 软件是定制开发的
      • 虽然这弓工业想着基于构建的构造模式发展
      • 然而大多数软件仍是根据实际的顾客需求定制的
    • 软件开发是复杂的
      • 软件涉及人类社会的各行各业
      • 软件开发常常涉及其他领域的专业知识,这对软件工程师提出了很高的要求
    • 软件开发的成本高
    • 软件易于复制
    • 软件质量要求较高
    • 软件的开发与运行都离不开相关的计算机系统环境
    • 软件开发工作牵涉到很多社会因素
    • 不同于一 般工程项目的是,在软件项目开发过程中,实际开发(编写代码)的成本只是整个工程成本的一小部分,甚至可以说是“ 冰山一角 ”。而软件测试、系统维护等任务将占据工程的很大一 部分成本 。

    软件的种类

    按照软件的功能划分,软件一 般可以分 为系统软件、支撑软件和应用软件三类:

    • 系统软件

      • 居于计算机系统中最靠近硬件的一层。
      • 其他软件一般都通过系统软件发挥作用。它与具体的应用领域无关,如编译程序和操作系统等
      • 编译程序把程序人员用高级语言书写的程序翻译成与之等价的、可执行的低级语言程序
      • 操作系统则负责管理系统的各种资源、控制程序的执行
    • 支撑软件

      • 支撑软件的开发、维护与运行的软件。
      • 70年代后期发展起来的软件开发环境以及后来的中间件则可被看成现代支撑软件的代表
      • 软件开发环境主要包括环境数据库、各种接口软件和工具组。三者形成整体,协同支撑软件的开发与维护
      • 中间件是一种软件,它处于系统软件(操作系统和网络软件)与应用软件之间,它能使远距离相隔的应用软件可协同工作( 互操作)
    • 应用软件

      • 特定应用领域专用的软件

    在这里插入图片描述

    软件工程的起源

    早期计算机程序

    • 在1946年计算机刚诞生时,人们采用机器码编制程序,根本没有独立的软件的概念
    • 机器码指令只是为了驱动计算机硬件工作,就象人们调节电视机、录像机、洗衣机等家用电器的按钮一样
    • 1947年,冯·诺依曼首先提出用流程图描述计算机的运行过程,才使人们认识到程序设计是完全不同于硬件研制的另一项工作。从此以后,软件的开发和研究才逐渐开始独立地进行。

    现在的信息产业

    • 微电子是基础,计算机和网络是载体,软件是核心。

    软件工程的三个阶段

    1. 个人程序时期:这个时期大致可追溯到计算机的早期历史,特别是在上世纪50年代和60年代。在这个时期,计算机科学家和程序员通常是个人从事软件开发的主要从业者。他们独立编写和维护程序,通常是为了满足个人或特定组织的需求。由于硬件资源和开发工具的有限性,软件开发通常是一项相对较小规模和个人驱动的活动。
      • 个人驱动:软件开发主要由个人程序员完成,通常是计算机科学家或爱好者。
      • 缺乏规范:开发过程相对非正式,缺乏严格的方法和流程。
      • 小规模项目:项目通常较小,目标是解决特定问题或需求。
      • 有限的硬件资源:开发受到计算机硬件性能的限制。
      • 缺乏大规模协作:通常缺乏多人协作和团队合作。
    2. 软件作坊时期:软件作坊时期大致涵盖了上世纪70年代和80年代。在这个时期,软件开发开始逐渐从个人领域扩展到小型团队和组织。软件开发变得更加专业化,团队协作变得更为普遍。然而,开发过程仍然相对不够规范化,通常缺乏严格的项目管理和质量控制方法。
      • 小型团队:软件开发逐渐转向小型团队和组织,而不仅仅是个人。
      • 专业化:出现了更多专业的软件开发人员和团队,开发逐渐成为职业。
      • 有限的流程控制:项目管理和质量控制仍然不够严格。
      • 多样性的项目:软件应用范围扩大,包括商业应用、科学计算等。
      • 有限的工程化:虽然有更多的团队参与,但开发过程仍然不够规范化。
    3. 软件工程时期:软件工程时期可以追溯到上世纪80年代末至今。在这个时期,对软件开发过程进行了深入的研究和发展,出现了更多的开发方法和最佳实践。软件工程强调了系统化的方法,包括需求分析、系统设计、编码、测试、维护等方面的严格流程。这一时期还引入了面向对象编程、设计模式和软件开发生命周期等概念,旨在提高软件质量、可维护性和可重用性。软件工程方法也导致了更多的工程化和团队合作。
      • 工程化方法:引入了系统化的软件开发方法,强调需求分析、系统设计、编码、测试和维护等阶段的重要性。
      • 严格的项目管理:引入了项目管理技术,如进度追踪和资源分配。
      • 质量和可维护性:注重软件质量、可维护性和可重用性,采用更严格的测试和验证方法。
      • 面向对象编程:引入了面向对象编程思想和设计模式,提高了代码的组织和可扩展性。
      • 团队合作:强调多人协作,开发团队中有各种不同的专业角色,如开发人员、测试人员和项目经理。

    软件工程概念的提出

    随着计算机应用领域的进一步扩大,软件的规模和复杂性也在不断增加

    在软件开发的领域出现了一些现象(所谓的软件危机):

    • 软件质量差,可靠性难以保证
    • 成本难以控制,很少有在预算内完成的
    • 开发进度难以把握,周期拖得很长
    • 可维护性较差,维护人员和费用不断增加

    1968年,NATO(North Atlantic Treaty Organization,北大西洋公约组织)在联邦德国Garmisch-Partenkirchen举行的关于软件开发的会议上,首次提出了软件工程的术语,标志着软件工程作为一门学科的正式出现,至今已有40年的历史了。软件工程概念软件工程概念的提出其目的是倡导以工程的原理、 原则和方法进行软件开发,以解决软件危机。

    软件开发的本质

    • 问题域到不同抽象之间概念和计算逻辑的映射

    • 实现问题域中的概念和处理逻辑到运行平台的概念和处理逻辑的映射

    当我们得到一个问题域并且想要用软件开发来解决这个问题,我们必须一层一层向下抽象,抽象成软件层面可以理解的东西。所以建模是解决问题的一般途径:运用所掌握的知识, 通过抽象,给出该问题的一个结构

    • 模型是在特定意图下所确定的角度和抽象层次上对物理系统的描述,通常包含对该系统边界的描述, 给出系统内各模型元素 以及它们之间的语义关系

    之所以要一层一层的向下抽象,是为了控制开发的的复杂性。一个抽象层是一组确定的术语定义的。

    软件工程框架

    软件工程可以被定义为一个包含三个主要元素的三元组,这些元素是目标、原则和活动。下面是对这三个元素的简要说明:

    软件工程的目标

    目标是指在软件工程过程中所期望实现的结果或成果。这些目标通常与开发和维护高质量、可靠、安全、可维护和可扩展的软件系统有关。软件工程的目标可以根据项目的特定需求和约束而变化,但通常包括以下方面:

    • 交付高质量的软件产品。
    • 提高开发效率和生产力。
    • 减少软件开发和维护的成本。
    • 确保软件的安全性和可靠性。
    • 使软件易于维护和扩展。

    软件工程的原则

    原则是指软件工程的基本准则和指导原则,用于指导软件开发和维护过程,以实现上述目标。这些原则通常代表着最佳实践和经验教训,可以帮助开发团队在整个软件生命周期中做出明智的决策。一些常见的软件工程原则包括:

    • 模块化原则:将软件分解为小的可管理的模块。
    • 高内聚低耦合原则:模块应该具有高内聚性(相关功能放在一起)和低耦合性(模块之间的依赖关系最小化)。
    • 单一责任原则:每个模块或类应该只有一个单一的责任。
    • 开放封闭原则:软件应该对扩展开放,但对修改封闭。
    • 面向对象原则:使用面向对象的方法进行软件设计和开发。

    软件工程的活动

    活动是指在软件工程过程中执行的具体任务和活动,以实现上述目标和遵循原则。软件工程的活动包括项目计划、需求分析、系统设计、编码、测试、部署、维护等一系列步骤和阶段。这些活动通常根据软件开发生命周期模型(如瀑布模型、敏捷开发等)进行组织和管理。

    综合起来,软件工程的三元组概念强调了实现高质量软件的目标、遵循基本原则以及执行一系列活动来实现这些目标的重要性。这个三元组为软件开发提供了一个结构化的方法,有助于项目团队在整个软件生命周期中取得成功。

  • 相关阅读:
    java技术文档--多线程(3)--线程同步于互斥
    coreldraw2019安装包下载安装步骤教程
    并发原子类
    幻兽帕鲁游戏搭建(docker)
    相机图像质量研究(23)常见问题总结:CMOS期间对成像的影响--紫晕
    Android -- (静态广播) APP 监听U盘挂载
    电力布局三维编辑器功能设计
    深入Redis的切片
    Django基础之django模型层(一)单表操作
    【MySQL数据库和JDBC编程】第三章-第二节:MySQL的增删查改进阶篇
  • 原文地址:https://blog.csdn.net/weixin_58808338/article/details/133645607