当前位置: 首页 > news >正文

软件工程概述(上)

1、软件的概念、特点和分类

       要了解软件工程,首先让我们重新认识一下软件。如今可以说是一个软件定义一切的时代,虽然人工智能发展的如火如荼,但究其本质,核心还是软件。那么,如何给软件下一个定义呢?软件又具有哪些特点?如何对软件进行分类?我们一起来了解一下。

       (1)软件的概念

软件的定义:软件是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合。

       一直以来,人们对软件的认识都存在误区,一种比较典型的误解是:软件就是程序,开发软件就是编程序。从上面的定义可以看出,软件是由程序、数据和文档三部分组成的。

  • 程序:计算机可以接受的一系列指令,运行时可以提供所要求的功能和性能。
  • 数据:使得程序能够适当地操作信息的数据结构。
  • 文档:描述程序的研制过程、方法和使用的图文资料。

       当然,对软件的定义还有其他一些具有代表性的说法:

  • IEEE定义(1983年):计算机程序、方法、规则、相关的文档资料以及在计算机上运行程序时所必需的数据。 
  •  计算机软件是由专业人员开发并长期维护的软件产品。

        注:IEEE是电气与电子工程师协会(Institute of Electrical and Electronics Engineers)的简称, 总部位于美国纽约,是一个国际性的电子技术与信息科学工程师的协会,也是全球最大的非营利性专业技术学会。在本栏目的文章中还会多次提到它,有关其详细介绍可参见百度百科。

  思考题:当前火遍全球的ChatGPT是不是软件?

(2)软件的特点 

        由上面的定义可以得知,软件是计算机系统不可缺少的组成部分,那么与硬件相比,它具有哪些特殊性呢?下面我们来一起认识一下。

  • 软件形态的逻辑性

        我们对事物的认识,一般都是首先从其外形入手的。不过,软件却让你失望了,因为它是一个逻辑实体,是抽象的、不可见的。这样导致其开发过程中进度难以衡量、质量难以评价、管理和控制相当困难

  • 生产过程的非制造性

       软件的生产过程就是软件的开发过程,不过,与一般产品的生产过程不同,它的开发过程中没有明显的制造过程。正如前面的定义所提到的,软件是由程序、数据和文档组成的,软件并不是传统意义上的制造产生的,软件一旦开发完成,只需经过简单的拷贝就可以完成其大规模的发布。在互联网时代,其发布更为简单,用户只需在网站上完成注册,即可轻松使用,你并不需要关心它是如何生产出来的。软件成本集中于开发上,这意味着软件项目不能象硬件制造项目那样来管理。

  • 使用方式的无磨损性 

        在软件的运行和使用期间,没有硬件那样的机械磨损和老化问题。软件不会被“用坏”,但是会存在“不好用”的问题,为了让其好用,软件开发者就需要对其进行维护,维护意味着改正或修改原来的设计。当一个硬件构件磨损时,可以用另外一个备用零件替换它,但对于软件则不然。每一个软件故障都表明了设计/编程中存在错误。因此,软件维护更复杂。 

  • 开发和运行对环境的依赖性

       正如定义中所提到的,软件的开发和运行常受到计算机系统的限制,对计算机系统有着不同程度的依赖性。 

  • 软件的复杂性

       软件可以说是人类能够创造的最复杂的产物,其复杂性体现在实际问题的复杂性、程序逻辑结构的复杂性和其他领域专门知识的复杂性。 

  • 开发方式的手工化

       正是由于软件具有的复杂性,软件的开发至今尚未完全摆脱手工的开发方式。大多数软件是定制的,而不是通过已有的构件组装而来的。 当前正处于人工智能时代,涌现出一批包括ChatGPT在内的“编程机器人”,但它们仅仅能处理一些通用的情况,对于特殊情况的软件开发,仍然需要开发人员手工来完成。

  • 成本的昂贵性 

       由于软件多为“纯手工打造”,所以软件的成本相当昂贵。在软件开发过程中,会投入大量的、复杂的、高强度的脑力劳动,投入的研发和管理成本相对比较高。

  • 社会因素

       软件之所以能够得到推广,就是由于它能够让人们借助计算机大大提高了工作的效率。也正因为如此,软件的使用必然会引起劳动力的释放、机构的重组,由此带来一系列的社会问题。这与人们一直以来讨论的“人工智能是否会替代人类”是一个道理。 

(3)软件的分类

        我们可以从不同的角度对软件进行分类,最直接的就是按照软件实现的功能来对其分类。包括:

  • 系统软件:用于管理和控制计算机硬件资源,并提供用户界面和其他系统服务。
  • 应用软件:包括办公软件、图形设计软件、音视频播放软件、游戏软件、网络通信软件、实用工具软件等,用于满足用户实际需求的各种软件。
  • 支撑软件:介于系统软件和应用软件之间,用于为应用软件的开发和运行提供支撑。包括开发工具软件、数据库管理软件等。

思考题:针对上面各类软件,你能举出一些具体的例子吗?其中哪些是国产的软件,与国外的软件相比,我们有哪些优势和劣势?

       除了按照功能分类以外,下图还给出了一些其他的软件分类方式。

      
2、软件危机   

       对软件有了基本的认识之后,我们就需要了解一下与软件工程发展有着密切关系的另一个基本概念,那便是“软件危机”。首先来看看对其的定义:

软件危机的定义: 软件危机是在计算机软件开发、维护过程中所遇到的一系列严重问题,导致软件的开发、维护出现风险。

       由定义可以看出, 软件危机通常包含两方面的问题:

    (1)如何开发软件,以满足对软件日益增长的需求。

    (2)如何维护数量不断膨胀的已有软件。

不管是开发还是维护,一旦出现问题,都将带来不可预估的风险和损失,我们先来看几个例子:

软件危机示例1199664日,Ariane5火箭在发射37秒之后偏离其飞行路径  并突然发生爆炸, 当时火箭上载有价值数亿美元的通信卫星。

事故原因:

  • 程序中试图将64位浮点数转换成16位整数时产生溢出
  • 缺少对数据溢出的错误处理程序
  • 备份软件通过复制而成

        在这个例子中,正是由于软件开发过程中出现的疏忽,导致了数亿美元的损失,想象一下,如果这样的事故发生在载人航天领域,其后果将更为惨痛。 

    
3、软件工程的发展历程

相关文章:

软件工程概述(上)

1、软件的概念、特点和分类 要了解软件工程,首先让我们重新认识一下软件。如今可以说是一个软件定义一切的时代,虽然人工智能发展的如火如荼,但究其本质,核心还是软件。那么,如何给软件下一个定义呢?软件又…...

阿里云ubuntu系统安装mysql8.0

一、安装mysql8.0 1.已安装其他版本的mysql,需要删除 若没有不需要此操作 1 #卸载MySQL5.7版本 2 apt remove -y mysql-client5.7* mysql-community-server5.7* 4 # 卸载5.7的仓库信息 5 dpkg-l | grep mysql | awk iprint $2} | xargs dpkg -P2.更新仓库 apt u…...

自己搭建远程桌面服务器-RustDesk 极简版

linux搭建RustDesk保姆间教程_rustdesk linux-CSDN博客https://blog.csdn.net/yzs2022/article/details/135136491 背景 在某公司工作,向日葵等远程办公软件均已屏蔽,无法使用(也没有明文规定不允许使用远程控制软件)&#xff0c…...

数字资产是什么?怎么产生?怎么增长?

数字资产是什么? 数字资产是指企业或个人拥有或控制的,以电子数据形式存在的,在日常活动中持有以备出售或处于生产过程中的非货币性资产。它涵盖了广泛的范围,包括但不限于数字货币、数字证券、数字艺术品、虚拟土地等。这些资产…...

Centos7升级gitlab(17)

在 CentOS 7 中将 GitLab 从版本 17.1.1 升级到 17.2.2,涉及以下步骤。请务必在升级前备份数据,以防止升级过程中出现问题导致数据丢失。 升级步骤 1. 备份 GitLab 数据 在升级之前,确保已经备份了 GitLab 的数据,包括数据库、…...

Zookeeper详解以及常见的高可用关联组件

一、ZooKeeper 详解 Apache ZooKeeper 是一个开源的分布式协调服务,用于分布式应用程序之间的协调和管理。ZooKeeper 提供了一个高效、可靠的服务来帮助管理分布式系统中的共享配置信息、命名、同步和组服务等。 二、主要特性 1. 高可用性 ZooKeeper 集群通过选…...

Docker Containerd初体验

Docker Containerd概述 ​ Containerd是一个开源的容器运行时,它提供了一种标准化的方式来管理容器的生命周期。该项目最初是由Docker开发团队创建的,并在后来成为了一个独立的项目,被纳入了Cloud Native Computing Foundation(C…...

开始使用 AWS SAM CLI

了解如何使用 AWS SAM CLI 在本地调试 lambda 函数 欢迎来到雲闪世界。我们将学习 AWS SAM CLI 的概念。SAM 是无服务器 应用程序 模型的缩写,是 Amazon Web Services 提供的一个框架,可以利用它在本地机器上构建应用程序并将其直接部署到 AWS Lambdas。…...

RK3588 RTL8125BG调试

RTL8125B是一款PCIE转RJ45的网卡控制器芯片,在底层调试时只需配置PCIE即可 diff --git a/arch/arm64/boot/dts/rockchip/rk3588-nvr-demo.dtsi b/arch/arm64/boot/dts/rockchip/rk3588-nvr-demo.dtsi index 798359eaf061..d8a7a43cdfa0 100755 --- a/arch/arm64/bo…...

Python自省(机制与函数)

Python 自省(Introspection)是一种强大的特性,它允许程序在运行时检查对象的类型、属性以及它们如何相互关联。这种能力让 Python 非常适合于快速开发、调试以及编写需要高度动态交互的代码。Python 的自省机制主要通过内置的函数和类型来实现…...

【JavaEE】JVM 内存区域划分,以及 Java 垃圾回收机制引用计数器,可达性分析等

目录 1. JVM执行流程 2. JVM运行时数据区 2.1 堆 2.2 Java虚拟机栈(线程私有) 2.3本地方法栈(线程私有) 2.4 程序计数器 2.5 元数据区 3. JVM的类加载机制 1) 加载 2) 验证 3) 准备 4) 解析 5) 初始化 双亲委派模型 4. java垃圾回收 4.1 死亡对象判断方法 a) …...

Web开发:C# MVC + Session机制实现授权免登录demo

token基础demo 【需求】 Home/Index 登录界面,校验成功后可以登录到Main/Index ,用户登录3分钟内关闭网站,再次访问Home/Index时可以免密登录Main/Index 【配置文件-Program.cs】 var builder WebApplication.CreateBuilder(args);// Add services t…...

【Qt】QWidget的font属性

QWidget的font属性 API说明 font() 获取当前 widget 的字体信息. 返回 QFont 对象. setFont(const QFont& font) 设置当前 widget 的字体信息. 关于Qfont 属性说明 family 字体家族. ⽐如 "楷体", "宋体", "微软雅⿊" 等. pointSiz…...

每天一个数据分析题(四百八十五)- 统计推断

假设检验中,关于p值说法正确的是? A. p值是在原假设成立时,样本观察结果发生的概率。 B. p值是接受原假设的概率 C. p值是相对样本统计量而言的 D. 用p值做决策比用域值做决策更准确 数据分析认证考试介绍:点击进入 题目来源…...

基于STM32的农业病虫害检测检测系统:OpenCV、MQTT、Flask框架、MySQL(代码示例)

一、项目概述 随着全球农业现代化的不断推进,智能农业监测系统应运而生。此项目旨在通过实时监测土壤湿度、温度等环境数据,结合作物生长状态的分析,提高农业生产效率和作物质量。通过引入STM32单片机、OpenCV图像处理技术和后端数据分析系统…...

算法日记day 39(动归之打家劫舍)

一、打家劫舍1 题目: 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。…...

Vue 生命周期详解含demo、面试常问问题案例

Vue 生命周期详解、面试常问问题案例 含 demo 文章目录 Vue 生命周期详解、面试常问问题案例 含 demo一、Vue 生命周期是什么二、Vue 中如何使用生命周期钩子1. **beforeCreate**2. **created**3. **beforeMount**4. **mounted**5. **beforeUpdate**6. **updated**7. **beforeD…...

表单自定义规则的校验

在 Vue 3 中使用 Element Plus 的表单组件进行自定义规则的校验非常方便。Element Plus 提供了 ElForm 和 ElFormItem 组件,它们内置了表单验证的功能。下面我将详细介绍如何使用 Element Plus 进行自定义规则的校验。 创建表单及规则 首先,你需要创建…...

JVM 有哪些垃圾回收算法(回收机制)?

JVM 有哪些垃圾回收算法(回收机制)? 标记-清除算法 在Java虚拟机中,标记-清除算法是一种用于垃圾回收的算法。它分为两个阶段:标记阶段和清除阶段。 在标记阶段,垃圾收集器会遍历堆内存中的所有对象&…...

2024年高教社杯数学建模国赛A题思路解析+代码+论文

2024年高教社杯全国大学生数学建模竞赛(以下简称国赛)将于9月5日晚6时正式开始。 下文包含:2024国赛思路解析​、国赛参赛时间及规则信息说明、好用的数模技巧及如何备战数学建模竞赛 C君将会第一时间发布选题建议、所有题目的思路解析、相…...

解锁Blender操作可视化:6大核心价值与7个实战技巧提升300%教程质量

解锁Blender操作可视化:6大核心价值与7个实战技巧提升300%教程质量 【免费下载链接】Screencast-Keys Blender Add-on: Screencast Keys 项目地址: https://gitcode.com/gh_mirrors/sc/Screencast-Keys 在数字创作领域,操作可视化是连接创作者与观…...

Fay数字人框架全攻略:从技术原理到商业落地的完整实践指南

Fay数字人框架全攻略:从技术原理到商业落地的完整实践指南 【免费下载链接】Fay Fay 是一个开源的数字人类框架,集成了语言模型和数字字符。它为各种应用程序提供零售、助手和代理版本,如虚拟购物指南、广播公司、助理、服务员、教师以及基于…...

避坑指南:STM32输入捕获测量PWM时,如何处理计数器溢出的3种方案

STM32输入捕获测量PWM时的计数器溢出处理方案实战解析 在嵌入式系统开发中,精确测量PWM信号的频率和占空比是常见需求。STM32系列微控制器的输入捕获功能为此提供了硬件支持,但当PWM周期较长或测量高分辨率信号时,定时器计数器(CNT)溢出问题往…...

Windows下QT5.15.2安装MQTT模块全攻略(附分支选择避坑指南)

Windows下QT5.15.2安装MQTT模块全攻略(附分支选择避坑指南) 在物联网开发领域,MQTT协议因其轻量级和高效性成为设备通信的首选方案。对于使用QT5.15.2进行跨平台开发的工程师而言,在Windows环境下正确配置MQTT模块往往是项目起步的…...

功能越来越多,但 IT 系统却越来越难用了

在很多企业的信息化建设过程中,一个明显趋势是: 系统功能在不断增加。从最初的基础功能,到后来的审批流、自动化、报表分析,再到各种集成功能,系统看起来越来越强大,也越来越“全面”。按理说,功…...

别再为小程序合法域名发愁了!手把手教你用宝塔+FRP搞定内网穿透与HTTPS配置

微信小程序合法域名配置实战:从内网穿透到HTTPS全流程指南 当你兴致勃勃地开发完微信小程序的后端接口,准备在真机测试时,却遭遇"不在合法域名列表中"的报错——这种挫败感我深有体会。三年前我的第一个小程序项目就卡在这个环节整…...

惠普暗影精灵性能优化新选择:OmenSuperHub完全解析

惠普暗影精灵性能优化新选择:OmenSuperHub完全解析 【免费下载链接】OmenSuperHub 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 你是否厌倦了官方Omen Gaming Hub的臃肿体验?想要一个纯净、高效且完全离线的惠普暗影精灵控制工具…...

MYSQL中 find_in_set() 函数实战:从语法到场景的深度解析

1. 揭开find_in_set()函数的神秘面纱 第一次在项目中看到find_in_set()这个函数时,我也是一头雾水。它看起来和IN操作符很像,但又有明显的不同。经过多次实战应用后,我发现它其实是处理逗号分隔字符串的利器。 这个函数的语法非常简单&#x…...

量化模型实测:百川2-13B-4bits在OpenClaw复杂任务中的精度损失

量化模型实测:百川2-13B-4bits在OpenClaw复杂任务中的精度损失 1. 测试背景与实验设计 去年在部署本地AI助手时,我遇到一个现实矛盾:大模型的能力与硬件成本难以兼得。当尝试用OpenClaw实现自动化办公流程时,发现13B参数的百川原…...

因果模型评估完全手册:Python指标与验证方法详解

因果模型评估完全手册:Python指标与验证方法详解 【免费下载链接】python-causality-handbook 项目地址: https://gitcode.com/gh_mirrors/py/python-causality-handbook 在数据分析和决策科学领域,因果推断模型的评估是确保模型可靠性与实用性的…...