软件工程概论

news2024/9/30 3:25:36

文章目录

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

软件的定义

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

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

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

软件的特点

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

软件的种类

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

  • 系统软件

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

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

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

在这里插入图片描述

软件工程的起源

早期计算机程序

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

现在的信息产业

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

软件工程的三个阶段

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

软件工程概念的提出

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

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

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

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

软件开发的本质

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

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

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

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

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

软件工程框架

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

软件工程的目标

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

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

软件工程的原则

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

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

软件工程的活动

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity 引擎变身收费大亨,程序员们的钱包开始减肥计划

变天了!Unity 引擎自 2024 年元旦起,要开始对我们开发者“开刀”了。别急,先听我慢慢道来这个悲欢离合的故事。 Unity 收费新政:别再白嫖了! 喜大普奔!Unity 引擎宣布从 2024 年 1 月 1 日开始&#xff0…

基于若依ruoyi-nbcio支持flowable流程分类里增加流程应用类型

主要考虑到流程分很多种,普通的是OA流程,还有自定义业务流程,钉钉流程等,所以这里加了一个appType的应用类型,以便后续对不同的应用流程做不同的处理。 1、首先增加一个字典wf_app_type的流程应用类型如下 2、先增加三…

【排序算法】插入排序

文章目录 一:基本概念1.1 介绍1.2 原理1.3 插入排序法思想 二:代码实现2.1 源码2.2 执行结果2.3 测试八万条数据 三:算法分析3.1 时间复杂度3.2 空间复杂度3.3 稳定性 一:基本概念 1.1 介绍 插入式排序属于内部排序法&#xff0…

计算机视觉简介(1)

任何计算机视觉处理流程都始于成像系统,它从景物中捕获反射出来的光线,并将光信号转换成计算机可以读取和处理的图像格式 在计算机成像技术发展的早期,图像通过把胶卷或印刷图像素 化后获得;而现在图 像通常直接由数码相机获取&a…

内网穿透的应用-本地部署Stackedit Markdown编辑器公网远程访问

文章目录 1. docker部署Stackedit2. 本地访问3. Linux 安装cpolar4. 配置Stackedit公网访问地址5. 公网远程访问Stackedit6. 固定Stackedit公网地址 StackEdit是一个受欢迎的Markdown编辑器,在GitHub上拥有20.7k Star!,它支持将Markdown笔记保…

四川天蝶电子商务有限公司怎么样?

近年来,随着抖音的迅猛发展,越来越多的企业开始涉足抖音服务领域,希望通过抖音平台来拓展自己的业务。这其中,四川天蝶电子商务有限公司便是备受瞩目的一家。那么,四川天蝶电子商务有限公司的抖音服务到底如何呢&#…

主从复制的实现方案

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

什么是网络安全?掌握网络安全技能可以做什么

前言 随着互联网时代的到来,越来越多的人依靠互联网工作和生活,网络安全变得越来越重要。市场对网络安全工程师职位的需求逐渐增加。越来越多的朋友希望发展网络安全技能。那么网络安全是什么?如何学习网络安全?学完网络安全可以…

物联网AI MicroPython传感器学习 之 4路电容式触摸开关

学物联网,来万物简单IoT物联网!! 一、产品简介 板载TTP224电容式4键触摸感应IC,开发者通过触摸该电容模块获取对应的高低电平状态,可以广泛应用于灯光控制、玩具、家用电器等产品中。 引脚定义: VCC&…

Java学习笔记(一)

目录 一、Java概述 (一)Java技术体系平台 (二)Java重要特点 (三)Java运行机制及运行过程 (四)JDK (五)JRE 二、Java的快速入门 (一&#…

岩土工程安全监测无线振弦采集仪在无线组网的关键要点

岩土工程安全监测无线振弦采集仪在无线组网的关键要点 岩土工程是一种奇特而又极其重要的工程。它涉及到土地、岩石、气候等等因素,需要重视安全因素。而无线振弦采集仪作为一种常用的监测设备,可以采集岩土工程中的振动数据,从而确保工程的…

Go代码包与引入:如何有效组织您的项目

目录 一、引言二、代码包概述基础定义常用标准库包 三、创建代码包文件结构命名规则公共与私有标识符举例 五、包引入基础包引入批量引入别名Dot Import匿名引入初始化顺序完整的引入声明语句形式 六、包的组织和管理使用 go mod 管理模块模块依赖本地替换和代理设置包的版本控…

leetCode 1143.最长公共子序列 动态规划 + 滚动数组

1143. 最长公共子序列 - 力扣(LeetCode) 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串…

好用的文件备份软件推荐!

为什么需要文件备份软件? 在我们使用计算机的日常工作生活中,可能会遇到各种不同类型的文件,例如文档、Word文档、Excel表格、PPT演示文稿、图片等,这些数据中可能有些对我们来说很重要,但是可能会因为一些意外状况…

二极管“天马行空”的作用,你知道吗?

网友:二极管怎么有这么多种类呀? 工程师:二极管可以说除了电阻电容外用的比较多的一种元器件,起到的作用多着呢 那么二极管都可以起到哪些作用呢: 一、防反作用,主回路中串联一个二极管,是利用…

如何在10分钟内让Android应用大小减少 60%?

一个APP的包之所以大,主要包括一下文件 代码libso本地库资源文件(图片,音频,字体等) 瘦身就主要瘦这些。 一、打包的時候刪除不用的代码 buildTypes {debug {...shrinkResources true // 是否去除无效的资源文件(如…

基于火山引擎云搜索服务的排序学习实战

排序学习(LTR: Learning to Rank)作为一种机器学习技术,其应用场景非常广泛。例如,在电商推荐领域,可以帮助电商平台对用户的购买历史、搜索记录、浏览行为等数据进行分析和建模;可以帮助搜索引擎对用户的搜索关键词进行分析建模&…

警惕Mallox勒索病毒的最新变种mallab,您需要知道的预防和恢复方法。

导言: 在我们数字化的世界中,.mallab勒索病毒如同一只潜伏的恶龙,威胁着我们的数据安全。本文将深入探讨.mallab勒索病毒的攻击方式,同时提供生动的对策,助您从这场数据恶梦中苏醒。如果受感染的数据确实有恢复的价值…

面试经典 150 题 4 —(数组 / 字符串)— 80. 删除有序数组中的重复项 II

80. 删除有序数组中的重复项 II 方法一 class Solution { public:int removeDuplicates(vector<int>& nums) {int len 0;for(auto num : nums)if(len < 2 || nums[len-2] ! num)nums[len] num;return len;} };方法二 class Solution { public:int removeDupli…

仅个人记录:复现dotspatialdemo、打包、

复现dotspatialdemo 原始文件 一、新建项目、工具箱设置&#xff0c;项目引用等看上一篇 二、根据Form1.Designer.cs设计界面Form1.cs[设计] SplitContainer控件&#xff1a;将容器的显示区域分成两个大小可调的、可以向其中添加控件的面板。 legend控件&#xff1a;图例 map控…