软件工程概论

文章目录

    • 软件的定义
    • 软件的特点
    • 软件的种类
    • 软件工程的起源
    • 软件工程的三个阶段
    • 软件工程概念的提出
    • 软件开发的本质
    • 软件工程框架
      • 软件工程的目标
      • 软件工程的原则
      • 软件工程的活动

软件的定义

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

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

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

软件的特点

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

软件的种类

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

  • 系统软件

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

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

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

在这里插入图片描述

软件工程的起源

早期计算机程序

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

现在的信息产业

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

软件工程的三个阶段

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

软件工程概念的提出

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

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

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

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

软件开发的本质

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

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

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

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

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

软件工程框架

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

软件工程的目标

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

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

软件工程的原则

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

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

软件工程的活动

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/128747.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux: 进程(控制)

目录 1.进程的创建 1.1fork函数 1.2fork创建子进程,OS做了什么? 1.3为什么要写实拷贝? 2.进程的终止 2.1进程终止,操作系统做了什么? 2.2进程常见的退出方式 2.3进程常见的退出方法 3.进程的等待 3.1为什么进行进程等待…

Spring Boot如何配置CORS支持

Spring Boot如何配置CORS支持 CORS(跨源资源共享)是一种Web浏览器的安全性功能,用于控制网页上的脚本文件从不同的源加载其他网页资源。在开发现代Web应用程序时,通常需要跨域请求不同的资源,如API服务或其他Web应用程…

uniapp 在uni.scss 根据@mixin定义方法 、通过@include全局使用

在官方文档中提及到uni.scss中变量的使用,而我想定义方法,这样写css样式更方便 一、官方文档的介绍 根据官方文档我知道,在这面定义的变量全局都可使用。接下来我要在这里定义方法。 二、在uni.scss文件中定义方法 我在uni.scss文件中定义了…

分类预测 | MATLAB实现POA-CNN鹈鹕算法优化卷积神经网络多特征分类预测

分类预测 | MATLAB实现POA-CNN鹈鹕算法优化卷积神经网络多特征分类预测 目录 分类预测 | MATLAB实现POA-CNN鹈鹕算法优化卷积神经网络多特征分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现POA-CNN鹈鹕算法优化卷积神经网络多特征分类预测&#xff0…

头戴式耳机什么牌子最好?头戴式耳机推荐性价比高

脖子上挎个头戴式作为随身装备,不仅给服装配饰添加了潮流感,还可以可以随时聆听音乐,随着广大消费者的生活水平不断提高,市面上的头戴式耳机越来越多。 选择头戴式耳机时无非就是听音质、看外观、舒适度等等,那么头戴…

QT UI控件汇总介绍

按钮 ToolButton 和pushbutton没什么区别&#xff0c;可以用来设置图标 设置展示策略 RadioButton 一般用Container可以将其框起来设置互斥域&#xff0c;推荐选用GroupBox 使用方法 qDebug()<<ui->radioButton_3->isChecked(); CheckBox 可以勾选三态 stat…

主从复制的实现方案

读写分离技术架构图 实现读写分离的技术架构选型如上;需要自己去实践主从复制;为了节省资源&#xff0c;当然系统并发量并没有那么大,选择一主一丛;强制读主库,为了解决主从同步延迟带来的影响&#xff1b;对于实时性要求高的强制读主库&#xff1b;GTID 主要是一种事务标识技术…

【多线程进阶】线程安全的集合类

文章目录 前言1. 多线程环境使用 ArrayList2. 多线程环境使用队列3. 多线程环境使用哈希表3.1 HashTable3.2 ConcurrentHashMap 总结 前言 本文主要讲解 Java 线程安全的集合类, 在之前学习过的集合类中, 只有 Vector, Stack, HashTable, 是线程安全的, 因为在他们的关键方法中…

【debian 12】:debian系统切换中文界面

目录 目录 项目场景 基础参数 原因分析 解决方案 1.ctrlaltT 打开终端 2.查询当前语言环境&#xff08;我的已经设置成了中文 zh_CN.UTF-8&#xff09; 3.打开语言配置界面 4.最后一步&#xff1a;重启 不要放弃任何一个机会&#xff01; 项目场景&#xff1a; 这两…

【Linux基础】Linux的基本指令使用(超详细解析,小白必看系列)

&#x1f449;系列专栏&#xff1a;【Linux基础】 &#x1f648;个人主页&#xff1a;sunnyll 目录 &#x1f4a6; ls 指令 &#x1f4a6; pwd指令 &#x1f4a6;cd指令 &#x1f4a6;touch指令 &#x1f4a6;mkdir指令&#xff08;重要&#xff09; &#x1f4a6;rmdir指令…

产品需求分析师的基本职责

产品需求分析师的基本职责1 职责 1、主要对用友司库云产品进行调研及产品规划; 2、根据司库云业务需求进行详细需求的用户故事、原型设计、需求分析、详细需求文档编写等; 3、进行产品的需求管理、需求验证、产品演示等需求工作; 4、配合开发、UE人员完成对产品的开发任务;…

MOM与MES管理系统有哪些本质上的区别

随着企业业务的不断发展&#xff0c;许多制造企业开始面临车间管理失控、生产不透明等问题。这时候&#xff0c;很多企业选择上线MES生产管理系统来提高生产管理水平。然而&#xff0c;随着企业业务的不断拓展&#xff0c;MES系统也逐渐暴露出其局限性。于是&#xff0c;MOM平台…