软件工程与计算总结(二)软件工程的发展

本章开始介绍第二节内容,主要是一些历史性的东西~ 

一.软件工程的发展脉络

1.基础环境因素的变化及其对软件工程的推动

抽象软件实体和虚拟计算机都是软件工程的基础环境因素,它们能从根本上影响软件工程的生产能力,而且是软件工程无法反向影响而只能适应的外界因素;不论是硬件水平的提升,还是系统软件的发展,都会要求软件工程方法和技术做出相应的调整~

2.现实问题的变化及其对软件工程的要求

软件工程的目标是解决现实问题,软件工程的进步能让问题解决的过程更顺利;反之,现实问题的变化也会给软件工程提出新的要求~

3.软件工程自身的发展

不论是实践经验的积累,还是研究上的进展,软件工程自身都会不断发展,既包括软件开发与技术上的发展,也包括软件开发过程中的发展,还包括一些影响深远的重要观念的形成。

二.20世纪50年代的软件工程

1.基础环境:

虚拟计算机:研究用大型机(出于军事和科研考虑)

主要的抽象软件实体:软件依赖于硬件,被视为硬件的零件

2.主要现实问题:科学计算

3.软件开发方法与技术:(没有普遍使用的开发技术)

4.软件开发过程:此时的理论是“制造软件和硬件是一样的”

5.重要思想:重视产品质量,进行评审和测试

6.总结:科学计算、机器为中心编程、软硬件生产方式相同

三.20世纪60年代的软件工程

1.基础环境

  • 虚拟计算机:商业大型机
  • 主要的抽象软件实体:第三代语言被广泛利用,促进了软件工程的问题从科学计算向业务应用转化

2.主要现实问题:商务应用

3.软件开发方法与技术:依靠程序员个人能力,是“工艺式”的开发

4.软件开发过程:“构建-修复”的过程(个人英雄主义编程)

5.重要思想:

软件不同于硬件:软件比硬件易于修改、软件没有损耗、软件不可见、软件于现实世界关系更密切

避免工艺式生产,采用工程式

(需要注意,这一阶段工艺式生产导致了“软件危机”的出现,主要现象为成本超支、质量不可靠等)

6.总结:业务应用、软硬件不同、工艺式开发

四.20世纪70年代的软件工程

1.基础环境

  • 虚拟计算机:商业微型计算机
  • 主要的抽象软件实体:结构化程序设计理论诞生,以高效率地开发正确、清晰和高质量的程序。结构化程序设计理论使用函数(也就是常说的面向过程)、块结构、和三种基本控制结构作为基础构建程序~

2.主要现实问题

随着商业微型计算机的销售量增加,软件产品的需求也在与日俱增,保证复杂软件系统开发的成功成为开发工作的主要指导思想~

3.软件开发方法与技术

前期采用逐步精化,自顶向下的软件开发方法,中后期采用结构化设计和结构化分析等结构化分析与设计方法。在这一年代,逐步产生了“低耦合高内聚”的模块化、抽象数据类型、信息隐藏等重要思想~

4.软件开发过程:采用瀑布模型,在开发过程中越早发现缺陷并进行修复,提高了开发效率,提高了项目成功率

5.重要思想:越早发现和修复问题,代价越低~

6.总结:结构化方法、瀑布模型、强调规则和纪律。奠定了软件工程的基础,是后续年代软件工程发展的支撑~

五.20世纪80年代的软件工程

1.基础环境

  • 虚拟计算机:个人计算机PC开始出现,并迅速普及大众人群;与此同时GUI技术出现,典范是Apple和微软~
  • 主要的抽象软件实体:面向对象编程方法开始被广泛使用

2.主要现实问题

业务应用仍是这一阶段软件工程面临的主要问题,同时软件开始服务消费大众的工作和生活

人们对软件产品的需求出现爆炸性增长,提高生产力成为他们的主要目标之一

此外,随着软件开发成本越来越高,人们更愿意通过维护延长一个软件产品的生存周期而不是将其废弃或重新开发~

3.软件开发方法与技术

结构化方法:该阶段的结构化方法更注重系统构建而㐊程序构建

面向对象编程:结构和关系能够为领域应用提供更加自然的支持,使得软件的复用性和可修改性更加强大~

软件复用:提高生产力的重要方法

4.软件开发过程

过程模型:软件过程的质量能够极大影响软件的质量,要保证产品质量就必须重视开发过程

过程评价:参照评估模型进行评估

使用工具支持的软件开发过程:对后续的软件工程发展尤其是过程管理的发展起到了重要的作用~

5.重要思想

没有银弹:软件该问题的银弹应该是能欧使得软件开发在生产率、可靠性和间接性上取得根本性提高的技术,由于软件有下列无法规避的内在特性,因此没有银弹:

  • 复杂度
  • 一致性
  • 可变性
  • 不可变性

重视人的作用:将个人与团队工作置于比开发过程更加重要的地位~

6.总结:追求生产力最大化、现代结构化方法/面向对象编程广泛应用、重视过程的作用

六.20世纪90年代的软件工程

1.基础环境

  • 虚拟计算机:阿帕网、因特网、万维网快速发展,网络操作系统成为主流
  • 主要的抽象软件实体:软件体系结构方法的出现、面向对象分析设计与方法逐渐成熟~

2.主要现实问题

  • 复杂度:探索新的开发技术
  • 可修改性:维护与修改来延续生存周期
  • 开发周期:防止用户等待时间过长
  • 用户价值:赢得市场非常关键

3.软件开发方法与技术

  • 面向对象方法
  • 软件体系结构
  • 人机交互
  • 需求工程
  • 基于软件复用的大规模软件系统开发技术
  • web开发技术

4.软件开发过程

  • 过程模型
  • 过程改进
  • 开源软件

5.重要思想:重视最佳实践方法

6.总结:web应用出现、追求快速开发、可变更新和用户价值

七.21世纪00年代的软件工程

1.基础环境

  • 虚拟计算机:嵌入式设备和移动终端与日增长
  • 主要的抽象软件实体:面向对象的思想做了一些更严谨的规格化

2.主要现实问题

  • 基于因特网的web应用日益成为主流
  • 面向消费大众的软件产品需求出现了爆炸性增长

3.软件开发方法与技术

  • 延续90年代的基础进展,并进一步完善
  • web技术发展
  • 领域特定的软件工程方法

4.软件开发过程

敏捷过程

5.总结:大规模web应用,大量面向大众的web产品,追求快速开发、可变更新、用户价值和创新

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

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

相关文章

231003-四步MacOS-iPadOS设置无线竖屏随航SideCar

Step 0:MacOS到iPad无线竖屏随航显示,最终效果 Step 1: 下载 Better Display Step 2:在设置中新建虚拟屏幕,创建虚拟屏幕 Step 3:进行如下设置 Step 4:注意事项 ⚠️ 设置后的虚拟屏幕与Sideca…

如何在 Google Earth 中创建轨迹、路线并制作动画

如何创建航迹 https://kurviger.de/en Google 地球飞行教程(天桥动画) 选择合适的点 (可调整视图快照)点击录制,依次点击图标即可

堆栈与堆(Stack vs Heap)有什么区别?

​编写有效的代码需要了解堆栈和堆内存,这使其成为学习编程的重要组成部分。不仅如此,新程序员或职场老手都应该完全熟悉堆栈内存和堆内存之间的区别,以便编写有效且优化的代码。 这篇博文将对这两种内存分配技术进行全面的比较。通过本文的…

selenium使用已经获取的cookies登录网站报错unable to set cookie的处理方式

用selenium半手动登录github获取其登录cookies后,保存到一个文件gtb_cookies.txt中。 然后用selenium使用这个cookies文件,免登录上github。但是报错如下:selenium.common.exceptions.UnableToSetCookieException: Message: unable to set co…

简化数据库操作:探索 Gorm 的约定优于配置原则

文章目录 使用 ID 作为主键数据库表名TableName临时指定表名列名时间戳自动填充CreatedAtUpdatedAt时间戳类型Gorm 采用约定优于配置的原则,提供了一些默认的命名规则和行为,简化开发者的操作。 使用 ID 作为主键 默认情况下,GORM 会使用 ID 作为表的主键: type User st…

喜讯 | 怿星科技获评SAE“优秀核心零部件企业”,测试软件平台工具广受赞誉

2023年9月22日-23日,SAE 2023汽车智能与网联技术国际学术会议成功举行。此次学术会议由SAE International与南昌智能新能源汽车研究院联合主办,大会汇聚了来自国内外智能网联领域的顶尖专家和学者。大会同期颁布的奖项旨在向行业推选出更多新时代涌现的杰…

OpenGLES:绘制一个混色旋转的3D圆锥

一.概述 1.1 对圆锥的拆解 上一篇博文讲解了绘制圆柱体,这一篇讲解绘制一个彩色旋转的圆锥 在绘制圆柱体时提到过,关键点是先将圆柱进行拆解,便于创建出顶点坐标数组 同样,绘制圆锥也先进行拆解 圆锥的拆解很简单&#xff0c…

最短路径专题3 最短距离-多边权

题目: 样例: 输入 4 5 0 2 0 1 2 1 0 2 5 1 0 3 1 2 1 2 1 6 3 2 2 3 输出 3 5 思路: 根据题目意思,其实还是Dijkstra 的题目,不同的是,多了一个最少花费边权的这个点,多添加一个spend数组&am…

C/C++学习 -- 分组密算法(3DES算法)

1. 3DES算法概述 3DES(Triple Data Encryption Standard),又称为TDEA(Triple Data Encryption Algorithm),是一种对称加密算法,是DES(Data Encryption Standard)的加强版…

软件测试教程 自动化测试selenium篇(二)

掌握Selenium常用的API的使用 一、webdriver API public class Main {public static void main(String[] args) {ChromeOptions options=new ChromeOptions();//参数表示允许所有请求options.addArguments("--remote-allow-origins=*");WebDriver webDriver=new Chr…

【Kafka专题】Kafka快速实战以及基本原理详解

目录 前言课程内容一、Kafka介绍1.1 MQ的作用1.2 为什么用Kafka 二、Kafka快速上手2.1 实验环境2.2 单机服务体验2.3 认识Kafka模型架构2.4 Kafka集群2.5 理解服务端的Topic、Partion和Broker2.6 章节总结:Kafka集群的整体结构 三、Kraft集群(拓展&#…

openGauss学习笔记-88 openGauss 数据库管理-内存优化表MOT管理-内存表特性-使用MOT-MOT使用将磁盘表转换为MOT

文章目录 openGauss学习笔记-88 openGauss 数据库管理-内存优化表MOT管理-内存表特性-使用MOT-MOT使用将磁盘表转换为MOT88.1 前置条件检查88.2 转换88.3 转换示例 openGauss学习笔记-88 openGauss 数据库管理-内存优化表MOT管理-内存表特性-使用MOT-MOT使用将磁盘表转换为MOT …

【数据结构】排序(2)—冒泡排序 快速排序

目录 一. 冒泡排序 基本思想 代码实现 时间和空间复杂度 稳定性 二. 快速排序 基本思想 代码实现 hoare法 挖坑法 前后指针法 时间和空间复杂度 稳定性 一. 冒泡排序 基本思想 冒泡排序是一种交换排序。两两比较数组元素,如果是逆序(即排列顺序与排序后…

HTML详细基础(二)文件路径

目录 一.相对路径 二.绝对路径 三.超链接标签 四.锚点链接 首先,扩展一些HTML执行的原理: htmL(hypertext markup Language) 是一种规范(或者说是一种标准),它通过标记符(tag)来标记要显示…

求各区域热门商品Top3 - HiveSQL

背景:这是尚硅谷SparkSQL练习题,本文用HiveSQL进行了实现。 数据集:用户点击表,商品表,城市表 题目: ① 求每个地区点击量前三的商品; ② 在①的基础上,求出每个地区点击量前三的商品后&a…

【管理运筹学】第 8 章 | 动态规划(5,设备更新问题)

系列文章 【管理运筹学】第 8 章 | 动态规划(1,多阶段决策过程与动态规划基本概念) 【管理运筹学】第 8 章 | 动态规划(2,动态规划的基本思想与模型求解) 【管理运筹学】第 8 章 | 动态规划(3&…

MySQL进阶 —— 超详细操作演示!!!(下)

MySQL进阶 —— 超详细操作演示!!!(下) 五、锁5.1 概述5.2 全局锁5.3 表级锁5.4 行级锁 六、InnoDB 引擎6.1 逻辑存储结构6.2 架构6.3 事务原理6.4 MVCC 七、MySQL 管理7.1 系统数据库7.2 常用工具 MySQL— 基础语法大…

基于蜉蝣优化的BP神经网络(分类应用) - 附代码

基于蜉蝣优化的BP神经网络(分类应用) - 附代码 文章目录 基于蜉蝣优化的BP神经网络(分类应用) - 附代码1.鸢尾花iris数据介绍2.数据集整理3.蜉蝣优化BP神经网络3.1 BP神经网络参数设置3.2 蜉蝣算法应用 4.测试结果:5.M…

【C++】设计模式之——建造者

建造者模式概念模拟实现建造者模式代码实现 建造者模式 首先先大体了解一下,建造者模式是什么意思,它是怎么实现的? 首先,建造者模式是一种创建型设计模式再一个它是使用多个简单的对象一步一步的搭建出一个复杂的对象它可以将一个…

基于蚁狮优化的BP神经网络(分类应用) - 附代码

基于蚁狮优化的BP神经网络(分类应用) - 附代码 文章目录 基于蚁狮优化的BP神经网络(分类应用) - 附代码1.鸢尾花iris数据介绍2.数据集整理3.蚁狮优化BP神经网络3.1 BP神经网络参数设置3.2 蚁狮算法应用 4.测试结果:5.M…