软件工程的定义与发展历程

article/2025/6/8 0:40:16

文章目录

    • 一、软件工程的定义
    • 二、软件工程的发展历程
      • 1. 前软件工程时期(1940s-1960s)
      • 2. 软件工程诞生(1968)
      • 3. 结构化方法时期(1970s)
      • 4. 面向对象时期(1980s)
      • 5. 现代软件工程(1990s-至今)
    • 三、软件工程的发展趋势

一、软件工程的定义

在这里插入图片描述

软件工程是应用系统化、规范化、可量化的方法来开发、运行和维护软件的学科。它结合了计算机科学、项目管理、工程实践和其他相关领域的知识,旨在高效地生产高质量、可靠的软件系统。

国际电气电子工程师学会(IEEE)对软件工程的标准定义是:
“将系统化的、规范的、可度量的方法应用于软件的开发、运行和维护的过程,即将工程化应用于软件。”

软件工程的核心特征包括:

  1. 系统性:采用结构化的方法和流程
  2. 规范性:遵循既定的标准和规范
  3. 可量化:能够对过程和产品进行测量和评估
  4. 多学科交叉:融合计算机科学、数学、工程学和管理学

二、软件工程的发展历程

1. 前软件工程时期(1940s-1960s)

  • 1940-1950年代:计算机程序规模小,由个人编写
  • 1950年代末:高级语言(FORTRAN, COBOL)出现,软件开始与硬件分离
  • 1960年代:软件规模扩大,出现"软件危机"现象

2. 软件工程诞生(1968)

  • 1968年NATO会议上首次提出"软件工程"概念
  • 认识到需要工程化的方法来应对软件开发的复杂性
  • 瀑布模型等早期软件开发模型出现

3. 结构化方法时期(1970s)

  • 结构化编程(Dijkstra等)
  • 结构化设计(Yourdon, Constantine)
  • 结构化分析(DeMarco, Gane & Sarson)
  • 软件生命周期模型确立

4. 面向对象时期(1980s)

  • 面向对象编程语言兴起(Smalltalk, C++)
  • 面向对象分析与设计方法(Booch, Rumbaugh, Jacobson)
  • CASE(计算机辅助软件工程)工具出现
  • 软件过程改进模型(CMM)开始发展

5. 现代软件工程(1990s-至今)

  • 1990年代:互联网兴起,Web应用开发
  • 2001年:敏捷宣言发布,敏捷方法流行
  • 2000s:开源运动蓬勃发展
  • 2010s:DevOps、云计算、微服务架构
  • 2020s:AI辅助开发、低代码平台、量子计算软件

三、软件工程的发展趋势

  1. 敏捷与DevOps的持续演进:更快速的交付周期
  2. AI与自动化:AI辅助编程、自动化测试
  3. 云原生开发:基于云服务的分布式架构
  4. 安全工程:从开发初期考虑安全性(DevSecOps)
  5. 可持续软件工程:关注能源效率和环境影响

软件工程作为一门学科仍在不断发展中,随着新技术和新需求的不断涌现,其理论体系和方法论也在持续丰富和完善。理解软件工程的定义和发展历程,有助于我们把握软件开发的本质和未来方向。


http://www.hkcw.cn/article/wKoqMtxtJf.shtml

相关文章

基于SDN环境下的DDoS异常攻击的检测与缓解

参考以下两篇博客,最后成功: 基于SDN的DDoS攻击检测和防御方法_基于sdn的ddos攻击检测与防御-CSDN博客 利用mininet模拟SDN架构并进行DDoS攻击与防御模拟(Ryumininetsflowpostman)_mininet模拟dos攻击-CSDN博客 需求 H2 模拟f…

VS下C++及C#项目打包发布方法

一.打包为单一exe文件 1.打开项目属性页(右键项目 → 属性) 2.选择配置(如 Release) 3.项目属性→ C/C → 代码生成→ 运行库 将 运行时库(Runtime Library) 设置为: /MT(Release 模…

【免费】2004-2020年各省电力消费量数据

2004-2020年各省电力消费量数据 1、时间:2004-2020年 2、来源:国家统计局、统计年鉴 3、指标:行政区划代码、地区、年份、电力消费量(亿千瓦小时) 4、范围:31省 5、指标说明:电力消费量是指在一定时期内&#xff…

[Python] python信号处理绘制信号频谱

python信号处理绘制信号频谱:scipy.signal.welch 文章目录 python信号处理绘制信号频谱:scipy.signal.welch一、函数介绍二、核心参数详解三、返回值四、算法原理五、关键特性六、完整示例七、应用场景推荐配置八、常见问题解决九、与FFT方法的对比 scip…

【图像处理入门】4. 图像增强技术——对比度与亮度的魔法调节

摘要 图像增强是改善图像视觉效果的核心技术。本文将详解两种基础增强方法:通过直方图均衡化拉伸对比度,以及利用伽马校正调整非线性亮度。结合OpenCV代码实战,学会处理灰度图与彩色图的不同增强策略,理解为何彩色图像需在YUV空间…

Mybatis--创建mapper接口

创建mapper接口 MyBatis中的mapper接口相当于以前的dao(原来的dao是有dao的接口以及dao的实现类)。但是区别在于,mapper仅仅是接口,我们不需要提供实现类。因为我们的mybatis里面有面向接口编程,只需要创建mapper接口…

vue3:Table组件动态的字段(列)权限、显示隐藏和左侧固定

效果展示 根据后端接口返回&#xff0c;当前登录用户详情中的页面中el-table组件的显示隐藏等功能。根据菜单id查询该菜单下能后显示的列。 后端返回的数据类型: 接收到后端返回的数据后处理数据结构. Table组件文件 <!-- 自己封装的Table组件文件 --> onMounted(()>…

力扣HOT100之多维动态规划:1143. 最长公共子序列

这道题之前刷代码随想录的时候做过&#xff0c;但是现在又给忘干净了&#xff0c;这道题需要用二维dp数组来做&#xff0c;看了一下自己当时写的博客&#xff0c;一下子就看懂了。这道题的子序列可以不连续&#xff0c;所以dp数组的定义和最长重复子数组不一样&#xff0c;我总…

无锁队列—C++内存序最佳实践

叙述方式&#xff1a; 1.背景介绍 &#xff08;使用场景&#xff09; 2.讲结论 (无锁队列实现) 3.讲内存序的使用&#xff08;通用方式&#xff09; 一、背景 本文通过一个“单生产者-单消费者”模型的场景&#xff0c;讲解基于C原子操作和内存序实现的无锁队列 在生产者…

ADC模数转换控制

目录 1. Convst信号的功能本质 1.1 核心作用 1.2 关键优势 1.3 Convst与SPI接口的协作关系 2.实际设计要点 2.1 硬件连接方案 2.2 时序约束&#xff08;以AD7685为例&#xff09; 2.3 多片ADC同步策略 3.高级应用技巧 3.1 动态调整采样率 3.2 抗干扰设计 3.3 故障排查 4.总…

QT常用控件(1)

控件是构成QT的基础元素&#xff0c;例如Qwidget也是一个控件&#xff0c;提供了一个‘空’的矩形&#xff0c;我们可以往里面添加内容和处理用户输入&#xff0c;例如&#xff1a;按钮&#xff08;QpushButton&#xff09;&#xff0c;基础显示控件&#xff08;Lable&#xff…

Linux系统-基本指令(5)

文章目录 mv 指令cat 指令&#xff08;查看小文件&#xff09;知识点&#xff08;简单阐述日志&#xff09;more 和 less 指令&#xff08;查看大文件&#xff09;head 和 tail 指令&#xff08;跟查看文件有关&#xff09;知识点&#xff08;管道&#xff09;时间相关的指令&a…

C 语言学习笔记(预处理和库文件)

内容提要 预处理库文件 预处理 预处理编译汇编链接 什么是预处理 预处理就是在源文件&#xff08;.c文件&#xff09;编译之前&#xff0c;所进行的一部分预备操作&#xff0c;这部分操作是由预处理器&#xff08;预处理程序&#xff09;自动完成。当源文件在编译时&#x…

谷歌地图高清卫星地图软件(Google Earth)v6.0.3.2197 中文版 - 前端工具导航

谷歌地图6.0Google Earth是一款谷歌地图高清卫星地图软件&#xff0c;能够实时监测并提供最准确的地图信息&#xff0c;地球上的任意一块地区都能够准确定位并放大查看&#xff0c;覆盖范围广&#xff0c;精度高&#xff0c;非常实用&#xff01; 谷歌卫星高清地图 下载链接&a…

全球治理指标数据(1996-2023)

1945 全球治理指标&#xff08;WGI&#xff09;(1996-2023&#xff09; 数据简介 全球治理指标&#xff08;WGI&#xff09;是一个由世界银行开发的综合性数据库&#xff0c;通过政治稳定、政府效能、监管质量、法治水平、腐败控制和公民话语权六个维度系统衡量全球各国的治理…

Blocked aria-hidden on an element because its descendant retained focus.

问题出在 Element UI 的 el-table 组件 全选功能上&#xff0c;这是一个常见的无障碍&#xff08;a11y&#xff09;问题。这个错误提示与网页 accessibility&#xff08;无障碍访问&#xff09;相关&#xff0c;涉及 aria-hidden 属性的不当使用。 问题原因分析 1. Element U…

2025 年人脸识别技术应用备案政策已落地

在 AI 技术深度渗透的当下&#xff0c;人脸识别作为重要的生物识别技术&#xff0c;已广泛应用于安防、金融、零售等多领域。但随之而来的个人信息安全风险也备受关注。2025 年 6 月 1 日起《人脸识别技术应用安全管理办法》正式实施&#xff0c;企业需重视人脸识别技术应用备案…

01电气设计-380V强电部分设计

目标&#xff1a;在电气设计过程中380V的强电部分&#xff0c;一般来自与工厂&#xff0c;一般为3相5线制的380V&#xff0c;下面的应用场景是当我的用电设备&#xff08;电机&#xff0c;冷水机&#xff0c;控制器&#xff0c;驱动器&#xff0c;激光器等等&#xff09;总功率…

文件批量重命名

mv只支持单个文件命名 批量重命名用rename 例子&#xff1a; #touch命令批量创建空文件&#xff0c;文件10-15 touch file{10..15}.txt批量重命名 # 批量重命名&#xff0c;file10-15重命名为test10-15 #这里file1? 匹配的是单个字符。比如10,11等 rename file1 test1 file1…

ES的开始

ES作用 在海量数据中&#xff0c;执行搜索功能&#xff0c;使用mysql&#xff0c;效率过低&#xff0c; 如果关键字输入不准确&#xff0c;一样可以搜索到想要的数据 讲搜索关键字&#xff0c;以红色字体展示 ES介绍 ES是基于java语言并且基于Lucene编写的搜索引擎框架&#x…