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

软件工程概述

软件开发生命周期

  1. 软件定义时期:包括可行性研究和详细需求分析,任务是确定软件开发的总目标。
    • 问题定义
    • 可行性研究(经济、技术、操作、社会可行性,确定问题和解决办法)
    • 需求分析(确定功能需求,性能需求,运行环境的约束,软件需求规格说明书 Software requirements specification SRS,软件系统测试大纲,用户手册概要
  2. 软件开发时期:涉及软件的设计与实现。
    • 概要设计(在SRS的基础上,建立总体结构,包括子系统的划分,模块之间的关系)
    • 详细设计(对功能模块细化,包括算法和数据结构)
    • 编码
    • 测试
  3. 软件运行和维护:将软件产品移交给用户使用。

软件系统文档

  1. 用户文档:描述系统功能和使用方法,不涉及具体实现。这类文档主要面向软件的最终用户,目的是帮助用户理解和使用软件。它包括软件的功能描述、使用方法、操作指南等。用户文档通常不需要详细说明软件内部的工作原理或实现细节。它的目标是让非技术人员能够无障碍地使用软件,了解软件如何满足他们的需求。
  2. 系统文档:描述系统设计、实现和测试等各方面的内容。系统文档则面向软件开发团队和可能需要进行维护的技术人员。它涵盖了软件的设计、实现、测试等详细的技术信息。系统文档通常包括需求规格说明书、设计文档、代码文档、测试计划和报告等。这类文档对于软件的开发、调试和维护非常重要,因为它提供了软件内部结构、工作流程和技术细节的详细信息。

软件工程过程

  1. P(Plan):软件规格说明,规定功能及其运行限制。
  2. D(Do):软件开发,实现满足规格说明的软件。
  3. C(Check):软件确认,确认软件满足用户需求。
  4. A(Action):软件演进,不断改进以满足新需求。

软件系统工具

  1. 软件开发工具:需求分析、设计、编码与排错、测试等工具。
  2. 软件维护工具:版本控制、文档分析、开发信息库、逆向工程、再工程工具。
  3. 软件管理和软件支持工具:项目管理、配置管理、软件评价、工具选择与评估等。

软件设计活动

  1. 数据设计:数据设计是确定系统需要处理的数据类型、数据之间的关系以及数据存储和管理的方式。它包括定义数据库结构、数据格式、数据字典等内容。良好的数据设计有助于确保数据的一致性、完整性和安全性,支持系统的高效运行和维护。

  2. 架构(体系结构)设计:架构设计是定义软件系统的高层次结构,包括确定系统的主要组件、组件之间的关系以及这些组件如何交互来实现系统的功能。架构设计通常涉及系统的技术选型、模块划分、数据流设计等,是一个关键的设计阶段,对软件的可扩展性、可维护性和性能有着重要影响。

  3. 人机界面(接口)设计:人机界面设计主要关注用户与软件系统的交互方式,包括用户界面的布局、颜色、字体、按钮等视觉元素的设计,以及用户操作流程的设计。目标是设计出易于理解和使用的用户界面,提升用户体验,使用户能够高效地使用系统完成任务。

  4. 过程设计:过程设计是指定义软件系统内部的工作流程和操作步骤,确保数据处理的正确性和效率。它包括算法设计、业务规则实现、工作流定义等。过程设计需要考虑如何高效地执行业务逻辑,如何处理异常情况,以及如何优化性能。

软件需求

  1. 业务需求:企业或客户高层次的目标要求,通常由项目投资人、客户或市场营销部门提供。通过业务需求可以确定项目视图范围
  2. 用户需求:用户的具体目标及系统需完成的任务,通过访谈、问卷等方式获取。对用户使用的场景进行整理,从而建立用户需求。
  3. 系统需求:从系统角度说明软件需求,包括功能需求、非功能需求和设计约束。
    • 功能需求(行为需求)
    • 非功能需求(质量属性、其他非功能需求)
    • 设计约束(限制条件、补充规约)
需求获取是一个确定和理解不同的项目干系人的需求和约束的过程
需求获取方法
  1. 用户访谈:一对一或小范围访谈,结构化或非结构化形式。
  2. 问卷调查:适用于用户众多,无法逐一访谈的情况。
  3. 采样:从种群中选取代表性样本,数量计算方法见文本。
  4. 情节串联板:使用图片序列讲述故事。
  5. 联合需求计划(JRP):关键用户、分析师、开发团队联合会议讨论需求。
  6. 需求记录技术:任务卡片、场景说明、用户故事、Volere白卡。

需求分析

  1. 需求特性:无二义性、完整性、一致性、可测试性、确定性、可跟踪性、正确性、必要性。
  2. 结构化的需求分析的结构化特点:自顶向下,逐步分解,面向数据。
  3. 结构化的需求分析的三大模型:功能模型(数据流图)、行为模型(状态转换图)、数据模型(E-R图)以及数据字典。

  1. 任务:
    • 绘制系统上下文范围关系图
    • 创建用户界面原型
    • 分析需求的可行性
    • 确定需求优先级
    • 建立需求模型
    • 创建数据字典
    • 使用QFD(质量功能部署)

需求定义

  1. 软件需求规格说明书(SRS):需求开发的结果,作为开发基础的重要文档。是需求开发活动的产物,编制该文档的目的是使项目干系人与开发团队对系统的初始规定有一个共同的理解,使之成为整个开发工作的基础。SRS是软件开发过程中最重要的文档之一,对于任何规模和性质的软件项目都不应该缺少。

需求定义方法

  1. 严格定义(预先定义):基于所有需求预先定义、清晰交流和图形文字表达的假设。
  2. 原型方法:迭代开发,涉及实际可参与的模型、合适的开发环境、反复验证,最终需求确定后按照严格方法执行。

需求验证

  1. 目的:确认需求无误,评审和测试需求规格说明书(SAS)
  2. 步骤:
    • 需求评审(正式评审、非正式评审)
    • 需求测试(设计概念测试用例)
  3. 需求验证通过后,要请用户签字确认,作为验收标准之一,此时,这个需求规格说明书就是需求基线,不可以再随意更新,如果需要更改必须走需求变更流程。

需求管理

  1. 需求基线:评审通过的需求说明书作为基线。

  1. 变更和风险:关注需求变更过程中的风险,包括风险做法和变更原因。
    1. 带有风险的做法有:无足够用户参与、忽略了用户分类、用户需求的不断增加、模棱两可的需求、不必要的特性、过于精简的SRS、不准确的估算。
    2. 变更产生的原因:外部环境的变化、需求和设计做的不够完整、新技术的出现、公司机构重组造成业务流程的变化。
  2. 变更控制委员会(CCB):也称为配置控制委员会,其任务时对建议的配置项变更做出评价、审批,以及监督已经批准变更的实施。
  3. 需求跟踪:双向跟踪(正向和反向),确保实现需求的完整性和准确性。

    如下图所示:

    • 正向跟踪:检查原始需求是否实现。
    • 反向跟踪:确认实现的功能是否符合需求。

相关文章:

软件工程概述

软件开发生命周期 软件定义时期:包括可行性研究和详细需求分析,任务是确定软件开发的总目标。 问题定义可行性研究(经济、技术、操作、社会可行性,确定问题和解决办法)需求分析(确定功能需求,性…...

文件系统 linux ─── 第19课

前面博客讲解的是内存级文件管理,接下来介绍磁盘级文件管理 文件系统分为两部分 内存级文件系统 : OS加载进程 ,进程打开文件, OS为文件创建struct file 和文件描述符表 ,将进程与打开的文件相连, struct file 内还函数有指针表, 屏蔽了底层操作的差异,struct file中还有内核级…...

一篇博客搞定时间复杂度

时间复杂度 1、什么是时间复杂度?2、推导大O的规则3、时间复杂度的计算3.1 基础题 13.2 基础题 23.3基础题 33.4进阶题 13.5进阶题 23.6 偏难题 13.7偏难题 2(递归) 前言: 算法在编写成可执行程序后,运行时要耗费时间和…...

微信小程序实现根据不同的用户角色显示不同的tabbar并且可以完整的切换tabbar

直接上图上代码吧 // login/login.js const app getApp() Page({/*** 页面的初始数据*/data: {},/*** 生命周期函数--监听页面加载*/onLoad(options) {},/*** 生命周期函数--监听页面初次渲染完成*/onReady() {},/*** 生命周期函数--监听页面显示*/onShow() {},/*** 生命周期函…...

S_on@atwk的意思

S_onatwk 可能是某种自动化或控制系统中的符号或标记,尤其在PLC(可编程逻辑控制器)编程中,类似的表达方式通常用于表示特定的信号、状态或操作。 我们可以分析这个表达式的各个部分: S_on:通常&#xff0…...

Liunx启动kafka并解决kafka时不时挂掉的问题

kafka启动步骤 先启动zookeeper,启动命令如下 nohup ./zookeeper-server-start.sh /home/kafka/kafka/config/zookeeper.properties > /home/kafka/kafka/zookeeper.log 2>&1 &再启动kafka,启动命令如下 nohup ./kafka-server-start.sh…...

16 | 实现简洁架构的 Store 层

提示: 所有体系课见专栏:Go 项目开发极速入门实战课;欢迎加入 云原生 AI 实战 星球,12 高质量体系课、20 高质量实战项目助你在 AI 时代建立技术竞争力(聚焦于 Go、云原生、AI Infra);本节课最终…...

华为hcia——Datacom实验指南——以太网帧和IPV4数据包格式(一)

实验开始 第一步配置环境 第二步配置客户端 如图所示,我们把客户端的ip配置成192.168.1.10,网关设为192.168.1.1 第三步配置交换机1 system-view sysname LSW1 vlan batch 10 interface ethernet0/0/1 port link-type access port default vlan 10 qu…...

ubuntu软件——视频、截图、图片、菜单自定义等

视频软件,大部分的编码都能适应 sudo apt install vlc图片软件 sudo apt install gwenview截图软件 sudo apt install flameshot设置快捷键 flameshot flameshot gui -p /home/cyun/Pictures/flameshot也就是把它保存到一个自定义的路径 菜单更换 sudo apt r…...

CSS中z-index使用详情

定位层级 1.定位元素的显示层级比普通元素高,无论什么定位,显示层级都是一样的; 2.如果位置发生重叠,默认情况是:后面的元素,会显示在前面元素之上; 3.可以通过CSS属性z-index调整元素的显示层级; 4.z-index的属性值是数字,没有单位,值越大显示层级越高; 5.只有定位的元素…...

qt 自带虚拟键盘的编译使用记录

一、windows 下编译 使用vs 命令窗口,分别执行: qmake CONFIG"lang-en_GB lang-zh_CN" nmake nmake install 如果事先没有 指定需要使用的输入法语言就进行过编译,则需要先 执行 nmake distclean 清理后执行 qmake 才能生效。 …...

杨辉三角形(信息学奥赛一本通-2043)

【题目描述】 例5.11 打印杨辉三角形的前n(2≤n≤20)行。杨辉三角形如下图: 当n5时 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 输出: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 【输入】 输入行数n。 【输出】 输出如题述三角形。n行&#…...

CentOS 7 系统上安装 SQLite

1. 检查系统更新 在安装新软件之前,建议先更新系统的软件包列表,以确保使用的是最新的软件源和补丁。打开终端,执行以下命令: sudo yum update -y -y 选项表示在更新过程中自动回答 “yes”,避免手动确认。 2. 安装 …...

程序化广告行业(13/89):DSP的深入解析与运营要点

程序化广告行业(13/89):DSP的深入解析与运营要点 大家好!一直以来,我都对程序化广告行业保持着浓厚的学习兴趣,在探索的过程中积累了不少心得。今天就想把这些知识分享出来,和大家一起学习进步…...

使用 Doris 和 LakeSoul

作为一种全新的开放式的数据管理架构,湖仓一体(Data Lakehouse)融合了数据仓库的高性能、实时性以及数据湖的低成本、灵活性等优势,帮助用户更加便捷地满足各种数据处理分析的需求,在企业的大数据体系中已经得到越来越…...

datax源码分析

文章目录 前言一、加载配置文件二、根据加载的配置文件进行调度三、根据配置文件执行读取写入任务总结 前言 在上一篇文章当中我们已经了解了datax的启动原理,以及datax的最基础的配置,datax底层java启动类的入口及关键参数。 接下来我将进行启动类执行…...

【HDLbits--分支预测器简单实现】

HDLbits--分支预测器简单实现 1 timer2.branche predicitors3.Branch history shift4.Branch direction predictor 以下是分支预测器的简单其实现; 1 timer 实现一个计时器,当load1’b1时,加载data进去,当load1’b0时进行倒计时&…...

优化Go错误码管理:构建清晰、优雅的HTTP和gRPC错误码规范

在系统开发过程中,如何优雅地管理错误信息一直是个棘手问题。传统的错误处理方式往往存在不统一、难以维护等缺点。而 errcode 模块通过对错误码进行规范化管理,为系统级和业务级错误提供了统一的编码标准。本文将带您深入了解 errcode 的设计原理、错误…...

批量压缩与优化 Excel 文档,减少 Excel 文档大小

当我们在 Excel 文档中插入图片资源的时候,如果我们插入的是原图,可能会导致 Excel 变得非常的大。这非常不利于我们传输或者共享。那么当我们的 Excel 文件非常大的时候,我们就需要对文档做一些压缩或者优化的处理。那有没有什么方法可以实现…...

MongoDB分页实现方式对比:PageRequest vs Skip/Limit

MongoDB分页实现方式对比:PageRequest vs Skip/Limit 一、基本概念1.1 PageRequest分页1.2 Skip/Limit分页 二、主要区别2.1 使用方式2.2 参数计算2.3 适用场景PageRequest适用场景:Skip/Limit适用场景: 三、性能考虑3.1 PageRequest的性能特…...

SAP Commerce(Hybris)营销模块(一):商城产品折扣配置

基于Hybris的Backoffice后台管理系统,创建一个基于模板的营销规则,并配置上对应的优惠活动。 架构设计 先从一张架构图说起 Hybris的促销模块,是基于Promotion引擎来实现的,可以通过Backoffice来进行配置。 通过上面的架构图又可…...

如何在 React 中实现错误边界?

在 React 中实现错误边界 错误边界是 React 提供的一种机制,用于捕获子组件树中的 JavaScript 错误,并展示回退 UI。它可以帮助开发者更好地处理错误,提升用户体验。本文将详细介绍如何在 React 中实现错误边界,包括其工作原理、…...

从头开始开发基于虹软SDK的人脸识别考勤系统(python+RTSP开源)(五)完整源码已上传!

本篇是对照之前代码剩余的部分代码做补充,分享给大家,便于对照运行测试。 完整版的全功能单文件版本已上传!https://download.csdn.net/download/xiaomage_cn/90484179 人脸识别抽象层,这个大家应该都知道,就是为了方…...

PySide(PyQT)的mouseMoveEvent()和hoverMoveEvent()的区别

在 PySide中,mouseMoveEvent 和 hoverMoveEvent 都是用于处理鼠标移动相关操作的事件,但它们之间存在明显的区别: 事件触发条件 • mouseMoveEvent: 当鼠标在对应的图形项(如 QGraphicsPixmapItem&#xff09…...

【通缩螺旋的深度解析与科技破局路径】

通缩螺旋的深度解析与科技破局路径 一、通缩螺旋的形成机制与恶性循环 通缩螺旋(Deflationary Spiral)是经济学中描述价格持续下跌与经济衰退相互强化的动态过程,其核心逻辑可拆解为以下链条: 需求端萎缩:居民消费信…...

【如何使用云服务器与API搭建专属聊天系统:宝塔面板 + Openwebui 完整教程】

文章目录 不挑电脑、不用技术,云服务器 API 轻松搭建专属聊天系统,对接 200 模型,数据全在自己服务器,安全超高一、前置准备:3 分钟快速上手指南云服务器准备相关账号注册 二、手把手部署教程(含代码块&a…...

Oracle数据库存储结构--逻辑存储结构

数据库存储结构:分为物理存储结构和逻辑存储结构。 物理存储结构:操作系统层面如何组织和管理数据 逻辑存储结构:Oracle数据库内部数据组织和管理数据,数据库管理系统层面如何组织和管理数据 Oracle逻辑存储结构 数据库的逻…...

C++ 左值(lvalue)和右值(rvalue)

在 C 中,左值(lvalue)和右值(rvalue)是指对象的不同类别,区分它们对于理解 C 中的表达式求值和资源管理非常重要,尤其在现代 C 中涉及到移动语义(Move Semantics)和完美转…...

《实战AI智能体》DeepSearcher 的架构设计

DeepSearcher 的架构设计 一个通往搜索AGI的Agentic RAG应该如何设计? 从架构上看,DeepSearcher 主要分为两大模块。 一个是数据接入模块,通过Milvus向量数据库来接入各种第三方的私有知识。这也是DeepSearcher相比OpenAI的原本DeepResearc…...

Kotlin 继承

Kotlin 继承 概述 Kotlin 是一种现代的编程语言,它具有简洁、安全、互操作性等特点。在面向对象编程中,继承是一种非常重要的特性,它允许我们创建具有共同属性和方法的类。本文将详细介绍 Kotlin 中的继承机制,包括继承的基本概…...

【6】树状数组学习笔记

前言 树状数组是我学的第一个高级数据结构,属于 log ⁡ \log log 级数据结构。 其实现在一般不会单独考察数据结构,主要是其在其他算法(如贪心,DP)中起到优化作用。 长文警告:本文一共 995 995 995 行…...

【RISCV LAB】0x01-安装实验仿真辅助工具

安装实验辅助工具 实验环境搭建安装 Verilator编译依赖下载源码编译安装测试安装 安装 RISC-V 交叉编译工具链编译依赖下载源码编译安装编译并安装添加环境变量并测试 安装 GTKWave其他模拟器推荐RARSemulsiV FAQ 实验环境搭建 Verilator 是一款开源的支持 Verilog 和 SystemV…...

OSPF-2 邻接建立关系

上一期我们说了OSPF的邻居建立关系以及OSPF邻居关系建立中建立失败的因素以及相关实验案例 这一期我们来说说OSPF的邻接关系建立时需要交互哪些报文以及失败因素及原因和相关实验案例 一、概述 在运行了OSPF的网络当中为了交互链路状态信息和路由信息,互相之间需要建立邻接关…...

操作系统知识点29

1.当用户使用外部设备时,其控制设备的命令传递途径依次为用户应用层->设备独立层->设备驱动层->设备硬件 2.通常用于管理空闲物理内存的方法:空闲快链表法;位示图法;空闲页面表 3. 可用于文件的存取控制和保护的方法&a…...

【Java篇】行云流水,似风分岔:编程结构中的自然法则

文章目录 Java 程序逻辑控制:顺序、分支与循环结构全面解析一、顺序结构二、分支结构2.1 if 语句2.1.1 基本语法2.1.2 if-else 语句2.1.3 if-else if-else 语句 2.2 switch 语句 三、循环结构3.1 while 循环3.2 break 语句3.3 continue 语句3.4 for 循环 四、输入输…...

代码块与设计模式

文章目录 1.代码块1.1基本介绍基本语法 1.2代码块的好处和案例演示1.3代码块使用注意事项和细节讨论!!! 2.单例设计模式2.1什么是设计模式2.2什么是单例模式2.2.1饿汉式2.2.2懒汉式2.2.3比较 1.代码块 1.1基本介绍 代码化块又称为初始化块,属于类中的成员[即是类的一部分]&am…...

要登录的设备ip未知时的处理方法

目录 1 应用场景... 1 2 解决方法:... 1 2.1 wireshark设置... 1 2.2 获取网口mac地址,wireshark抓包前预过滤掉自身mac地址的影响。... 2 2.3 pc网口和设备对接... 3 2.3.1 情况1:... 3 2.3.2 情…...

CentOS 系统安装 docker 以及常用插件

博主用的的是WindTerm软件链接的服务器,因为好用 1.链接上服务器登入后,在/root/目录下 2.执行以下命令安装docker sudo yum install -y yum-utilssudo yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.reposudo…...

统计字符(字符串)(gets与fgets的区别)

统计字符 #include<stdio.h> #include<string.h> int main(){char str1[5],str2[80];while(gets(str1)){if(strcmp(str1,"#")0)break;gets(str2);for(int i0;i<strlen(str1);i){int sum0;for(int j0;j<strlen(str2);j){if(str1[i]str2[j])sum;}p…...

Node.js REPL 深入解析

Node.js REPL 深入解析 引言 Node.js 作为一种流行的 JavaScript 运行环境,在服务器端开发中扮演着重要角色。REPL(Read-Eval-Print Loop,读取-求值-打印循环)是 Node.js 的一个核心特性,它允许开发者在一个交互式环境中执行 JavaScript 代码。本文将深入探讨 Node.js R…...

【测试语言基础篇】Python基础之List列表

一、Python 列表(List) 序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字 - 它的位置&#xff0c;或索引&#xff0c;第一个索引是0&#xff0c;第二个索引是1&#xff0c;依此类推。 Python有6个序列的内置类型&#xff0c;但最常见的是列表和元组。序列都可…...

中山六院团队发表可解释多模态融合模型Brim,可以在缺少分子数据时借助病理图像模拟生成伪基因组特征|顶刊解读·25-02-14

小罗碎碎念 在癌症诊疗领域&#xff0c;精准预测患者预后对临床决策意义重大。传统的癌症分期系统&#xff0c;如TNM分期&#xff0c;因无法充分考量肿瘤异质性&#xff0c;难以准确预测患者的临床结局。而基于人工智能的多模态融合模型虽有潜力&#xff0c;但在实际临床应用中…...

《基於Python的网络爬虫抓包技术研究与应用》

## 摘要 本文探讨了基于Python的网络爬虫抓包技术及其应用。随着互联网数据的快速增长&#xff0c;网络爬虫技术在数据采集和分析中扮演着越来越重要的角色。本研究首先介绍了网络爬虫的基本概念和Python在爬虫开发中的优势&#xff0c;然后深入分析了抓包技术的原理和常用工具…...

从零开始探索C++游戏开发:性能、控制与无限可能

一、为何选择C开发游戏&#xff1f; 在虚幻引擎5渲染的次世代画面背后&#xff0c;在《巫师3》的庞大开放世界中&#xff0c;在《毁灭战士》的丝滑60帧战斗里&#xff0c;C始终扮演着核心技术角色。这门诞生于1983年的语言&#xff0c;至今仍占据着游戏引擎开发语言使用率榜首…...

TypeScript 高级类型 vs JavaScript:用“杂交水稻”理解类型编程

如果把 JavaScript 比作乐高积木&#xff0c;TypeScript 就是一套智能积木系统。本文将用最生活化的比喻&#xff0c;带你理解 TypeScript 那些看似复杂的高级类型。 一、先看痛点&#xff1a;JavaScript 的“薛定谔类型” // 场景&#xff1a;用户信息处理 function getUserI…...

几款可用于绘制工艺原理图的开源框架

一、LogicFlow 由滴滴团队开发的开源流程图框架&#xff0c;支持高度定制的工艺原理图绘制。 • 核心特性&#xff1a; • 提供拖拽式界面和丰富的节点类型&#xff08;矩形、圆形、多边形等&#xff09;&#xff0c;支持自定义节点形状、样式和交互逻辑。 • 支持插件扩展&am…...

STM32如何精准控制步进电机?

在工业自动化、机器人控制等场合&#xff0c;步进电机以其高精度、开环控制的特性得到了广泛应用。而在嵌入式系统中&#xff0c;使用STM32进行步进电机的精确控制&#xff0c;已成为开发者的首选方案之一。 本文将从嵌入式开发者的角度&#xff0c;深入探讨如何基于STM32 MCU…...

Go语言入门基础详解

一、语言历史背景 Go语言由Google工程师Robert Griesemer、Rob Pike和Ken Thompson于2007年设计&#xff0c;2009年正式开源。设计目标&#xff1a; 兼具Python的开发效率与C的执行性能内置并发支持&#xff08;goroutine/channel&#xff09;简洁的类型系统现代化的包管理跨…...

WPF窗口读取、显示、修改、另存excel文件——CAD c#二次开发

效果如下&#xff1a; using System.Data; using System.IO; using System.Windows; using Microsoft.Win32; using ExcelDataReader; using System.Text; using ClosedXML.Excel;namespace IfoxDemo {public partial class SimpleWindow : Window{public SimpleWindow(){Initi…...

Ubuntu 服务器安装 Python 环境 的详细指南

以下是 在 Ubuntu 上安装 Python 3.10 的详细步骤&#xff08;兼容 Ubuntu 20.04/22.04&#xff09;&#xff1a; 方法一&#xff1a;通过 PPA 仓库安装&#xff08;推荐&#xff09; 1. 添加 deadsnakes PPA sudo apt update sudo apt install software-properties-common s…...