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

软件工程概论

文章目录

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

软件的定义

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

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

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

软件的特点

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

软件的种类

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

  • 系统软件

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

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

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

在这里插入图片描述

软件工程的起源

早期计算机程序

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

现在的信息产业

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

软件工程的三个阶段

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

软件工程概念的提出

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

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

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

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

软件开发的本质

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

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

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

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

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

软件工程框架

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

软件工程的目标

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

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

软件工程的原则

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

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

软件工程的活动

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

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

相关文章:

软件工程概论

文章目录 软件的定义软件的特点软件的种类软件工程的起源软件工程的三个阶段软件工程概念的提出软件开发的本质软件工程框架软件工程的目标软件工程的原则软件工程的活动 软件的定义 计算机系统中的程序及其文档。 程序是计算任务的处理对象和处理规则的描述; 文档…...

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

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

华为云云耀云服务器L实例评测|Elasticsearch的springboot整合 Kibana进行全查询和模糊查询

前言 最近华为云云耀云服务器L实例上新,也搞了一台来玩,期间遇到各种问题,在解决问题的过程中学到不少和运维相关的知识。 在前几期的博客中,介绍了Elasticsearch的Docker版本的安装,Elasticsearch的可视化Kibana工具…...

C++统一初始化和初始化列表

一直对C初始化使用圆括号和花括号的区别有所疑惑,参考书籍和博客简单总结一下 文章目录 常见的初始化操作统一初始化(Uniform Initialization)初始化列表(Initializer Lists) 常见的初始化操作 对于一个基础数据类型进行初始化,比如 int: i…...

【重拾C语言】六、批量数据组织(一)数组(数组类型、声明与操作、多维数组;典例:杨辉三角、矩阵乘积、消去法)

目录 前言 六、批量数据组织——数组 6.1 成绩统计——数组类型 6.1.1 数组类型 6.1.2 数组声明与操作 6.1.3 成绩统计 6.2 统计多科成绩——多维数组 6.3 程序设计实例 6.3.1 杨辉三角形 6.3.2 矩阵乘积 6.3.3 消去法 6.4 线性表——分类与检索 前言 ChatGPT C语…...

C++算法:寻找两个正序数组的中位数

题目 寻找两个正序数组的中位数 给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O(log (mn)) 。 示例 1: 输入:nums1 [1,3], nums2 [2] 输…...

2.1 关系数据结构及形式化定义

思维导图: 2.1.1 关系 笔记: 关系数据库模型是一个简单但强大的方式来表示数据及其之间的关系。下面是这节的关键内容: - **关系模型核心概念** * 关系数据模型的核心是“关系”,它在逻辑上表现为一个二维表。 * 此表中&a…...

“揭秘淘宝店铺所有商品接口:一键获取海量热销宝贝信息!“

淘宝店铺所有商品接口可以通过shop id或店铺主链接获取到整店商品,数据包括:商品ID,图片地址,店铺标题,优惠价,价格,销量,宝贝链接等整个店铺的商品。 要使用这个接口,需…...

跟着播客学英语-Why I use vim ? part two

在上一期作者讲到了他使用 Vim 的主要原因是提高效率,不需要再去使用鼠标,今天我们继续上次未听完的内容: if you type Vi, thats going to be alias to Vim anyway by default theres, not really a good reason for you to use vi that I c…...

【网络通信三要素】TCP与UDP快速入门

网络通信三要素 1.什么是网络编程? 可以让设备中的程序,与网络上其他设备中的程序进行数据交互,从而实现网络通信的手段,java.net.*包下提供了网络编程的解决方案 2.基本的通信架构 基本的通信架构有2种形式:CS架构…...

k8s集群的简单搭建

K8S简单集群搭建 前提条件 windos11电脑,内存16g以上安装vmware虚拟机软件安装三个centos7虚拟机,分配硬盘40g,内存4g,CPU4核心网络均采用NAT模式(新建虚拟机默认的模式) centos7镜像下载:https://mirrors.tuna.tsi…...

语义分割笔记(三):通过opencv对mask图片来画分割对象的外接椭圆

文章目录 mask图像介绍步骤代码 mask图像介绍 根据 mask 图像来画分割对象的外接椭圆是一种常见的图像分割任务。Mask 图像通常是一个二值图像,其中包含了感兴趣对象的像素。通常情况下,白色像素表示对象,黑色像素表示背景。 步骤 以下是一…...

Nosql redis高可用和持久化

Nosql redis高可用和持久化 1、redis高可用2、redis持久化2.1redis持久化2.2Redis 持久化方法2.3RDB 持久化2.3.1RDB持久化工作原理2.3.2触发条件2.3.3其他自动触发机制2.3.4执行流程2.3.5启动时加载 2.4AOF 持久化2.4.1AOF持久化原理2.4.2开启AOF2.4.3执行流程2.4.4文件重写的…...

软件工程(1、2;5~7小测参考答案)

目录 软件工程第1、2章小测 需求工程第5-7章小测 软件工程第1、2章小测 一 单项选择题(12分) 1、下列关于软件开发的描述不正确的是()。(1分) 软件是独立于计算机硬件的一部分,但它又依赖于计算机硬件。 软件既是一种复杂的逻辑实体,又是一种工具。 软件的核心是程序,…...

服务器存储面临的两大难题

服务器存储面临的两大难题 服务器存储为核心的IT系统承受着业务发展带来的巨大压力: 随着业务发展,IT应用数量不断增多,当前数据中心的IT基础设施愈加复杂,服务器、存储等设备的数量不断增加。服务器与存储管理更加复杂:随着业务应用对IT基础…...

Blind Signature盲签名与fabric区块链结合的应用

盲签名的概念 首先由 David Chaum 于1982年提出,盲签名实现了签名者对发送者的消息进行签名,却不能知道签名者消息的具体内容。 相当于将文件放入信封,签名者在信封上对文件进行签名,而不知道具体的文件内容。 盲签名的实现方式…...

ueditor

下载文件 文档 UEditor入门部署 入门部署和体验 1.1 下载编辑器 到官网下载 UEditor 最新版:http://ueditor.baidu.com/website/download.html#ueditor 1.2 创建demo文件 解压下载的包,在解压后的目录创建 demo.html 文件,填入下面的…...

2023年台州市第三届网络安全技能大赛(MISC)—Black Mamba

前言:当时比赛没有做出来现在来复现一下 就当记录一下(这个思路没想到) Black Mamba: 一张图片 常规得分离,属性,LSB,盲水印等都尝试过 无果! 考点:异或解密&#xff0…...

这道面试题工作中经常碰到,但 99% 的程序员都答不上来

小时候都被问过一个脑筋急转弯,把大象放进冰箱有几个步骤?我们一开始都会抓耳挠腮,去想着该如何把大象塞进冰箱。最终揭晓的答案却根本不关心具体的操作方法,只是提供了 3 个步骤组成的流程,「把冰箱打开,把…...

Linux安装单机PostgreSQL15.4

1. 联网rpm安装 1.1.关闭服务 ## 关闭防火墙 systemctl stop firewalld.service systemctl disable firewalld.service ## 关闭 selinux cat /etc/selinux/config SELINUXdisabled1.2.安装yum源 yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-…...

最新 SpringCloud微服务技术栈实战教程 微服务保护 分布式事务 课后练习等

SpringCloud微服务技术栈实战教程,涵盖springcloud微服务架构Nacos配置中心分布式服务等 SpringCloud及SpringCloudAlibaba是目前最流行的微服务技术栈。但大家学习起来的感受就是组件很多,不知道该如何应用。这套《微服务实战课》从一个单体项目入手&am…...

Docker搭建MySQL8.0主从复制(一主一从)

0. 配置说明 宿主机使用的版本为19045的win10专业版,MySQL使用的是8.0,Docker容器使用Linux。 1. 安装Docker Desktop 略 修改Docker默认安装路径 安装包自己就提供了修改安装路径的功能,CMD中运行: “Docker Desktop Installe…...

40V汽车级P沟道MOSFET SQ4401EY-T1_GE3 工作原理、特性参数、封装形式—节省PCB空间,更可靠

AEC-Q101车规认证是一种基于失效机制的分立半导体应用测试认证规范。它是为了确保在汽车领域使用的分立半导体器件能够在严苛的环境条件下正常运行和长期可靠性而制定的。AEC-Q101认证包括一系列的失效机制和应力测试,以验证器件在高温、湿度、振动等恶劣条件下的可…...

记录在搭建Jenkins时,所遇到的坑,以及解决方案

项目场景: 记录在搭建Jenkins时,所遇到的坑,以及解决方案.问题描述1 在使用Jenkins构建时,报错如下: cp: cannot stat /project/xx/xxxx/dist/: No such file or directory Build step Execute shell marked build as failure Finished: FAILURE解决方…...

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

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

鼎盛合:adc芯片的五种结构

随着国内消费电子产品、通信、工业自动化、汽车电子等行业的快速发展,对ADC芯片的需求不断增加,国内ADC芯片近年也在持续稳定地发展着。ADC种类多样,可分为单通道ADC、多通道ADC、高速ADC、精密ADC和集成ADC等,主要应用于医疗仪器…...

CTF 全讲解:[SWPUCTF 2021 新生赛]Do_you_know_http

文章目录 参考环境题目hello.php雾现User-Agent伪造 User-AgentHackBarHackBar 插件的获取修改请求头信息 雾散 a.php雾现本地回环地址与客户端 IP 相关的 HTTP 请求头X-Forwarded-For 雾散 参考 项目描述搜索引擎Bing、GoogleAI 大模型文心一言、通义千问、讯飞星火认知大模型…...

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

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

头戴式耳机什么牌子最好?头戴式耳机推荐性价比高

脖子上挎个头戴式作为随身装备,不仅给服装配饰添加了潮流感,还可以可以随时聆听音乐,随着广大消费者的生活水平不断提高,市面上的头戴式耳机越来越多。 选择头戴式耳机时无非就是听音质、看外观、舒适度等等,那么头戴…...

第 366 场周赛 LeetCode 周赛题解

A 分类求和并作差 模拟 class Solution { public:int differenceOfSums(int n, int m) {int res 0;for (int i 1; i < n; i)res i % m ! 0 ? i : -i;return res;} };B 最小处理时间 排序&#xff1a;设四个 p r o c e s s o r T i m e processorTime processorTime 的元…...

上海市住房和城乡建设委员会网站/自己可以做网站吗

微软在开源路上做了不少事情&#xff0c;如今又释出另一项目&#xff0c;那就是从有 Windows 开始就有的小程序──小算盘开源释出&#xff0c;放到 Github 上面了。微软小算盘原始码采用 MIT 授权释出&#xff0c;原始码中&#xff0c;还包括组建系统 (build system)、单元测试…...

自己有服务器和域名怎么做网站/seo入门基础教程

在对数据字段进行分类管理时&#xff0c;利用动态树折叠数据是一个很好的方法&#xff0c;也就是点击数据前面的加号才展开对应下面的数据&#xff0c;如下图。那这样的效果在制作报表时该如何实现呢&#xff1f; 下面以报表工具FineReport为例介绍。 思路&#xff1a; 通过将模…...

做网站推广合同/如何创建一个个人网站

Fulutter 设置圆角背景图片&Container 设置边框、圆角、阴影 在 Flutter 中&#xff0c;如何实现背景图片呢&#xff1f;又如何实现带圆角的背景图片呢&#xff1f; Fulutter 设置圆角背景图片 使用 Container 的 decoration 可以很方便的设置一个容易组件背景图片的圆角…...

电子商务网站的建设流程/goole官网

近日&#xff0c;国内领先的金融科技公司信也科技(NYSE:FINV)主办的首届合作伙伴大会在上海顺利召开。大会以“新业态信未来”为主题&#xff0c;国务院发展研究中心金融研究所副所长陈道富分享了关于金融科技和金融行业发展的两点看法。 科技如何赋能金融 陈道富认为&#xf…...

wordpress仿大众点评/今天上海最新新闻事件

下面介绍一个SQL Server 2005 中的新东东&#xff1a;ROW_NUMBER返回结果集分区内行的序列号&#xff0c;每个分区的第一行从 1 开始。 语法&#xff1a;ROW_NUMBER ( ) OVER ( [ <partition_by_clause> ] <order_by_clause> ) 备注&#xff1a;ORDER BY 子句可…...

胶州专业网站建设公司/广东网络优化推广

昨天我尝试设计界面&#xff0c;但是遇到了问题&#xff1a;对于各种控件还是不太了解&#xff0c;所以 今天我将HelloWorld这个简单的小程序做了出来 转载于:https://www.cnblogs.com/D9412/p/4520447.html...