软件工程概述(上)

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

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

       (1)软件的概念

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

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

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

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

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

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

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

(2)软件的特点 

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

  • 软件形态的逻辑性

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

  • 生产过程的非制造性

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

  • 使用方式的无磨损性 

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

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

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

  • 软件的复杂性

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

  • 开发方式的手工化

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

  • 成本的昂贵性 

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

  • 社会因素

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

(3)软件的分类

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

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

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

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

      
2、软件危机   

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

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

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

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

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

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

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

事故原因:

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

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

    
3、软件工程的发展历程

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

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

相关文章

B站搜索建库架构优化实践

前言 搜索是B站的重要基础功能,需要对包括视频、评论、图文等海量的站内优质资源建立索引,处理来自用户每日数亿的检索请求。离线索引数据的正确、高效产出是搜索业务的基础。我们在这里分享搜索离线架构整体的改造实践:从周期长,…

Transformer架构;Encoder-Decoder;Padding Mask;Sequence Mask;

目录 Transformer架构 Transformer架构的主要组成部分: 简单举例说明输入和输出: Encoder-Decoder 编码器/解码器组成 6、位置前馈网络(Position-wise Feed-Forward Networks) 7、残差连接和层归一化 10、掩码Mask 10.1 Padding Mask 10.2 Sequence Mask 为什么…

二.PhotoKit - 相册权限(彻底读懂权限管理)

引言 用户的照片和视频算是用户最私密的数据之一,由于内置的隐私保护功能,APP只有在用户明确授权的前提下才能访问用户的照片库。从iOS14 开始,PhotoKit进一步增强了用户的隐私控制,用户可以选择指定的照片或者视频资源的访问权限…

java 面试 PDF 资料整理

“尊贵的求知者,作者特此献上精心编纂的Java面试宝典PDF,这份资料凝聚了无数面试精华与实战经验,是通往Java技术殿堂的钥匙。若您渴望在Java编程的求职之路上稳健前行,只需轻轻一点,完成这象征支持与认可的一键三联&am…

解决麒麟 V10 SP1 升级 Python 后 Yum 不可用问题

目录 一、前提概要 二、解决办法 1、卸载原有的 python 2、安装 Python 3.7.9 rpm 3、安装一系列 yum 相关 rpm 4、rpm 包下载 一、前提概要 在部署 gaussDB 的时候,安装代理时要求 python 版本满足 3.7.9,但已安装的麒麟 V10 内集成的 python 版…

docker安装es8和kibana

es8、kibana安装、ik分词器使用 1 拉取镜像2 创建网络3 安装ES3.1 启动临时的ES3.2 运行es3.3 修改用户密码 4 安装kibana4.1 启动临时的kibana4.2 修改配置文件4.3 重启创建并启动kibana容器4.4 调用5601端口(我映射的是8082) 5 安装ik分词器&#xff0…

Linux学习——文本处理工具与正则表达式

目录 一,grep 1,grep介绍 2,grep的常用选项 3,grep使用演示 1,基本使用 直接查找字符串: 使用选项 2,使用正则表达式进行匹配 1,正则表达式介绍 2,使用范例 二&…

servlet的执行顺序

执行的时候Tomcat先初始化 然后调用 server 根据server来回调请求方式下面会追入源码解释 package com.haogu.servlet;import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.…

Zookeeper的在Ubuntu20.04上的集群部署

安装资源 官方安装包下载地址:https://zookeeper.apache.org/releases.html 懒得找版本的可以移步下载zookeeper3.84稳定版本: https://download.csdn.net/download/qq_43439214/89646735 安装方法 创建安装路径&&解压安装包 # 创建路径 m…

STM32总线和时钟树(速记版)

一、存储器结构 1.1 STM32内存结构 型号说明 以STM32F103RBT6这个型号的芯片为例,该型号的组成为7个部分,其命名规则如下: ST 是公司名,意法半导体。M 代表Cortex-M内核。32 代表32位微控制器。 F103 是芯片系列。 R 代表引脚数…

Excel求和方法之

一 SUM(),选择要相加的数,回车即可 二 上面的方法还不够快。用下面这个 就成功了 三 还有一种一样快的 选中之后,按下Alt键和键(即Alt)

直流屏监控模块ACT-J04触摸屏ACT-J05控制器的应用

直流屏监控模块ACT-J04触摸屏ACT-J05控制器的应用,电力智能监控系统ACT-J03,ACT-J02,ACT-J06,高频开关电源模块M1B10,M1A10,M1B10L,M1B20,M1B10L-2,MK1B10L,M…

Hive:大数据时代的SQL魔法师

时间:2024年08月17日 作者:小蒋聊技术 邮箱:wei_wei10163.com 微信:wei_wei10 音频地址:https://xima.tv/1_ZRh54d?_sonic0 希望大家帮个忙!如果大家有工作机会,希望帮小蒋内推一下&#x…

Rust学习笔记1--下载安装和使用

一、下载和安装: 官网:https://www.rust-lang.org/ 直接下载即可,windows:按照教程执行步骤。 二、使用: 2.1 在vscode中安装rust 2.2 编译与运行rust文件: 后缀名rs: 编译: …

Eureka原理与实践:深入探索微服务架构的核心组件

在微服务架构日益盛行的今天,服务之间的注册与发现成为了保证系统高可用性和灵活性的关键。Eureka,作为Netflix开源的服务注册与发现框架,凭借其简单、健壮的特性,在微服务领域占据了举足轻重的地位。本文将深入剖析Eureka的原理&…

当前人形机器人公司及产品介绍

产品型号属地公司名字Optimus美国特斯拉Figure02美国FigureAIAtlas美国波士顿动力通用人形Apollo美国ApptronikPhoenix加拿大Sanctuary AIRoBee意大利OversonicASIMO日本本田NAO日本软银GR-1上海傅利叶远征A1上海智元XR4上海达闼先行者K1上海开普勒青龙上海国创AstribotS1深圳星…

网络安全实训第一天(dami靶场搭建,XSS、CSRF、模板、任意文件删除添加、框架、密码爆破漏洞)

1.环境准备:搭建漏洞测试的基础环境 安装完phpstudy之后,开启MySQL和Nginx,将dami文件夹复制到网站的根目录下,最后访问安装phptudy机器的IP地址 第一次登录删除dami根目录下install.lck文件 如果检测环境不正确可以下载php5.3.2…

Windows Server 域控制服务器安装及相关使用

目录 1.将客户机加入域 2.安装域控制器 3.新建域用户 4.设置用户登录时间,账户过期时间 5.软件分发 ​编辑 6.换壁纸 7.OU与GPO的概念 域为集中控制,拿下域控是拿下目标的关键 以Windows Server 2022为例 1.将客户机加入域 前提:客…

代理模式Proxy

一、代理模式(Proxy) 1.代理模式的定义 代理模式给某一个对象提供一个代理对象,并由代理对象控制对真实对象的访问,起到对代理对象已有功能的增强 通俗的来讲代理模式就是我们生活中常见的中介。 2.作用 中介隔离作用&#x…

前端读取response.headers异常:Cannot read properties of undefined (reading ‘split‘)

[TOC](前端读取response.headers异常:Cannot read properties of undefined (reading ‘split’) ) 前端读取response.headers异常 Cannot read properties of undefined (reading ‘split’) TypeError: Cannot read properties of undefined (reading ‘split’) 报错解释&a…