大型企业软件开发是什么样子的? - Web Dev Cody
引用自大型企业软件开发是什么样子的? - Web Dev Cody_哔哩哔哩_bilibili
一般来说 学技术的时候 我们会关注 开发语言特性 ,各种高级语法糖,底层技术
但是很少有关注到企业里面的开发流程,本着以终为始(以就业为导向)关注企业
是如何进行 需求 开发 单元测试 CI 部署环境 的流程,我们必须对企业开发的流程做一个
大体的了解。我参考上面视频 对 企业开发进行了一个解析。
关键词:构建系统 编码 集成 测试 部署应用

人员:
| 9-10个Developer(开发人员) | 
| 1个SM(Scrum Master)敏捷教练 | 
| 1个PM(Product Master) 项目经理 | 
| 1个用户体验师(User Experience, UX) | 
| 1个用户界面师(User Interface, UI) | 
| 若干Client(客户) | 
| 若干User(User) | 

| 客户Client收集 User用户的需求 | 
| UX\UI会做用户研究,直接与用户对接 | 
| Developer开发者用户和客户展示原型 | 
| 用户经理直接与客户、开发者和UX\UI团队协作,确保项目顺利进行 | 
| Scrum主管会确保所有的会议都遵循Scrum指南 | 
开发者会在 新特性开发 优化旧版功能 修复漏洞 里来回开发(上图这个循环)
我们梳理一下流程(一个循环)
| 需求收集 | 客户(Client)或产品经理(Product Owner)通过各种方法(如访谈、问卷调查等)来收集用户(User)的需求。这些需求可以是新的功能要求(新特性开发)、对现有功能的改进(优化旧版功能),或是已知问题的修复(修复漏洞) | 
| 用户研究 | UX/UI设计师会对用户进行研究,这可能包括用户访谈、问卷调查、可用性测试等方法,以深入了解用户的行为、需求和偏好。 | 
| 需求分析与优先级排序 | 用户经理或产品经理根据收集到的信息,将需求转化为明确的用户故事,并按照优先级排序放入产品待办事项列表(Product Backlog)中。 | 
| 设计与原型制作 | UX/UI设计师根据用户研究的结果设计界面和用户体验。开发者可能会参与到这个阶段,帮助创建原型并将其展示给用户、客户及团队成员。 | 
| 规划与迭代 | 在Scrum框架下,团队成员(包括开发者、UX/UI设计师、用户经理)参加Sprint计划会议,讨论接下来一个迭代周期(通常是2-4周)内要完成的工作项。 | 
| 开发执行 | 开发者开始编码实现用户故事中的功能,同时也会处理一些优化工作或修复漏洞的任务。 | 
| 持续集成与测试 | 开发过程中,代码会被频繁地提交到共享仓库,并通过自动化测试来验证其正确性和稳定性。 | 
| 评审与回顾 | 每个Sprint结束时,团队会召开Sprint评审会议来演示所完成的工作,并在Sprint回顾会议上讨论过程中的优点和改进点。 | 
| 部署与发布 | 经过评审确认的功能会被部署到生产环境,并正式对外发布。 | 
| 监控与反馈循环 | 发布后,团队会持续监测应用的表现,并从实际用户那里收集反馈,从而开始新一轮的需求收集和迭代。 | 
那么我们怎么将需求转化为一个可部署的包?接下来来讲解

我们会让开发者分成小组来进行开发,我们一般叫组群编程。
我们使用GITHUB版本管理系统来进行开发,我们需要去进行版本管理系统某一些关键词的解释
| push 将你的本地更改推送到远程仓库 git push [remote] [branch] | 
| Pull 从远程仓库获取最新的更改 git pull [remote] [branch] | 
| Pull Request 在GitHub等平台上,你可以创建一个Pull Request来通知其他开发者审查你的代码更改,并请求将这些更改合并到目标分支。 | 
可以看到每一个小组的合作是很紧密的,视频里的小哥使用的是ZOOM视频软件进行团队的协作
小组需要去构建新功能特性,编写测试用例确保正常运行,新特性做完后,小组成员进行一个pull request

通常是别的小组的1到2个人对本小组的pull request进行代码审查,一旦审查通过,这个支线就会合并在主线MAIN分支,这就触发了CI/CD一一系列流水线。
我们需要解释一下CI/CD
| 
 | 
| 
 | 
CI/CD的流程下面这个表给出,是按照流程一步一步进行操作
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
| 
 | 
 
在视频里是进行 是 GitHubAction进行了 构建 测试 部署
构建服务器是用于自动化构建、测试和部署软件的应用程序。常见的构建服务器工具包括Jenkins、Travis CI、CircleCI等。GitHub Actions 是一个内嵌于GitHub的CI/CD工具,可以直接在GitHub中定义和执行构建流程。
但是在企业里面通常不能将新特性分支直接合并到主分支里面,视频里提到,需要构建一个测试 环境供产品经理或者测试工程师来在测试环境下测试新特性进行评估。

可以看到上图 Develpor进行Pull Request的时候 是把新特性给放到了Dev环境下面 也就是开发环境
Pull Request(合并)的时候会进行自动触发的构建服务器(构建 测试 部署),也就是说在开发环境下面就会构建出一个环境 。
那么如何管理一个构建服务器环境呢?
在视频中 ,是使用AWS云器进行构建服务器的管理。
我们利用AWS的各种服务来支持构建服务器的功能。
AWS支持以下几种服务:
- 托管构建服务器:例如,在EC2实例上部署Jenkins服务器。
- 执行构建脚本:利用Lambda函数来执行轻量级的构建任务。
- 自动化基础设施管理:使用CloudFormation、Terraform或AWS CDK来创建和管理基础设施。
下面是流程
- 源代码变更:开发者提交代码到GitHub。
- 触发构建:代码提交触发GitHub Actions工作流。
- 编译和准备依赖项:使用构建工具(如Maven或Gradle)编译代码并准备依赖项。
- 基础设施配置:使用Terraform或其他IaC工具配置基础设施。
- 构建和测试:使用AWS CodeBuild或其他工具构建和测试代码。
- 部署:成功测试后,使用AWS CodeDeploy或其他方法将应用部署到生产环境。

当dev环境没有问题的时候,dev环境向test环境进行一个pull Request 然后test环境又会进行新一轮的构建服务器的环境生成。

test(预生产)环境和dev环境的区别在于 test环境包含更多的模拟数据,以便模拟真实环境
test环境可以邀请一批测试用户进行环境的体验,可以开视频会议 让他们控制电脑体验,也可以给一个账号让他们进去自由体验

通常 我们会在预生产环境下进行负载测试、快照测试和灰度测试
| 灰度测试 | 灰度测试(也称为金丝雀测试)是一种测试方法,用于在小范围内逐步推广新功能或版本,观察其表现并逐步扩大范围。 | 
| 快照测试 | 快照测试是一种用于前端或UI测试的技术,主要用于验证组件的外观是否符合预期。它通常用于React、Vue.js等前端框架中。 | 
| 负载测试 | 负载测试是一种测试方法,用于评估系统在高负载情况下(如大量并发请求)的表现。它的目的是确保系统能够稳定地处理预期的负载水平。 | 
在预发布环境,产品负责人(产品经理)、用户、客户都会参与进来

如果预发布环境没有问题,则会直接Pull Request到发布环境里面。
这就是Terraform的好处,基础设置即代码工具,程序员不用去AWS仪表盘去进行调整,这样子的话每一个构建服务器出来之后,还要每一个调整。

每一个团队都有自己的客户 用户 和 产品,他们都有独特的方式部署代码。
存在的问题:
主环境的发布流程存在问题,未完成的工作可能被投入到生产环境中,可以在代码里面采取特征flag这种方式,如果flag不打开,否则代码不会在生产环境执行

用户或者客户可以在FEATURE DB里面进行特征flag的设置,以启用某个特定的功能
行业里面规定需要达到100%的在线率,也就是5个9的标准(大约一个小时的故障率 一年内)
,所以说根据需要 还得再不同的区域内进行一个部署一个备用的环境

比如说东海岸部署一个环境 西海岸部署一个环境,万一东海岸出现错误,可以切换到西海岸的节点(主动被动部署方式)
也有双活模式- 就是 东海岸用户只链接东海岸服务器,西海岸等同,他们之间的服务器或者其他的数据会进行同步操作,系统也要有韧性,也就是比如说opensearch集群挂掉了,那么可以从别的系统的opensearch获取数据和服务,但是一般来说国家禁止用户跨境流动。
那么 整个部署的系统如果出现bug?如何排查?
第一步,根据用户或者客户的反馈来定位,如果通过特征值数据库作为防御手段,可以进入数据库立马关闭这个特性
第二步,进行回滚部署,可能是只修改了某个lambda的代码,所以只需要lambda回滚
行业里面常见的做法是从MAIN 主分支单拉出来一个分支 在上面做改动

但是这种有问题 因为在MAIN分支上做了修改 但是 dev环境和预发布环境还是修改之前的代码,所以必须把修改好的代码合并到dev 和 staging里面去。
相关文章:
 
大型企业软件开发是什么样子的? - Web Dev Cody
引用自大型企业软件开发是什么样子的? - Web Dev Cody_哔哩哔哩_bilibili 一般来说 学技术的时候 我们会关注 开发语言特性 ,各种高级语法糖,底层技术 但是很少有关注到企业里面的开发流程,本着以终为始(以就业为导向…...
 
【stm32】DMA的介绍与使用
DMA的介绍与使用 1、DMA简介2、存储器映像3、DMA框图4、DMA基本结构5、DMA请求6、数据宽度与对齐7、数据转运DMA(存储器到存储器的数据转运)程序编写: 8、ADC连续扫描模式DMA循环转运DMA配置:程序编写: 1、DMA简介 DM…...
 
哈希表的魔力
哈希表与字典 普遍存在一种误解,认为“哈希表”和“字典”这两个术语可以互换。这种观念从根本上是不准确的,至少在计算机科学领域是如此。 字典是将键映射到值的数据结构的一般概念。而哈希表是字典的具体实现。 本质上,字典扮演着一个总体…...
 
《YOLO 目标检测》—— YOLO v3 详细介绍
!!!!!!!!!!!!!还未写完!!!!!!!…...
 
WNN 多模态整合 | Seurat 单细胞多组学整合流程
测试环境:CentOS7.9, R4.3.2, Seurat 4.4.0, SeuratObject 4.1.4 2024.10.23 # WNN library(ggplot2) library(dplyr) library(patchwork)1. 导入数据 (1). load counts of RNA and protein dyn.load(/home/wangjl/.local/lib/libhdf5_hl.so.100) library(hdf5r)…...
 
【Linux】磁盘文件系统(inode)、软硬链接
文章目录 1. 认识磁盘1.1 磁盘的物理结构1.2 磁盘的逻辑结构 2. 引入文件系统2.1 EXT系列文件系统的分区结构2.2 inode 3. 软硬链接3.1 软链接3.2 硬链接 在讲过了内存文件系统后,我们可以知道文件分为两种: 打开的文件(内存中)未…...
 
网安加·百家讲坛 | 徐一丁:金融机构网络安全合规浅析
作者简介:徐一丁,北京小西牛等保软件有限公司解决方案部总监,网络安全高级顾问。2000年开始从事网络安全工作,主要领域为网络安全法规标准研究、金融行业安全咨询与解决方案设计、信息科技风险管理评估等。对国家网络安全法规标准…...
 
九、pico+Unity交互开发——触碰抓取
一、VR交互的类型 Hover(悬停) 定义:发起交互的对象停留在可交互对象的交互区域。例如,当手触摸到物品表面(可交互区域)时,视为触发了Hover。 Grab(抓取) 概念ÿ…...
 
老机MicroServer Gen8再玩 OCP万兆光口+IT直通
手上有一台放了很久的GEN8微型服务器,放了很多年,具体什么时候买的我居然已经记不清了 只记得开始装修的时候搬家出去就没用了,结果搬出去有了第1个孩子,孩子小的时候也没时间折腾,等孩子大一点的时候,又有…...
 
jmeter 从多个固定字符串中随机取一个值的方法
1、先新增用户参数,将固定值设置为不同的变量 2、使用下面的函数,调用这写变量 ${__RandomFromMultipleVars(noticeType1|noticeType2|noticeType3|noticeType4|noticeType5)} 3、每次请求就是随机取的值了...
 
priority_queue (优先级队列的使用和模拟实现)
使用 priority_queue 优先级队列与 stack 和 queue 一样,也是一个容器适配器,其底层通过 vector 来实现的。与 stack 和 queue 不同的是,它的第一个元素总是它所包含的元素中最大或最小的一个。 也就是说,优先级队列就是数据结…...
VisionPro 手部骨骼跟踪 Skeletal Hand Tracking 虚拟首饰
骨骼手部跟踪由XR Hands Package中的Hand Subsystem提供。使用场景中的Hand Visualizer组件,用户可以显示玩家手部的蒙皮网格或每个关节的几何图形,以及用于基于手部物理交互的物理对象。用户可以直接针对Hand Subsystem编写 C# 脚本,以推断骨…...
 
class 9: vue.js 3 组件化基础(2)父子组件间通信
目录 父子组件之间的相互通信父组件传递数据给子组件Prop为字符串类型的数组Prop为对象类型 子组件传递数据给父组件 父子组件之间的相互通信 开发过程中,我们通常会将一个页面拆分成多个组件,然后将这些组件通过组合或者嵌套的方式构建页面。组件的嵌套…...
Laravel|Lumen项目配置信息config原理
介绍 Laravel 框架的所有配置文件都保存在 config 目录中。每个选项都有说明,你可随时查看这些文件并熟悉都有哪些配置选项可供你使用。 使用 您可以在应用程序的任何位置使用全局 config 辅助函数轻松访问配置值。 可以使用“点”语法访问配置值,其中…...
2024系统分析师考试---论区块链技术及其应用
试题三论区块链技术及其应用 区块链作为一种分布式记账技术,目前已经被应用到了资产管理、物联网、医疗管理、政务监管等多个领域,从网络层面来讲,区块链是一个对等网络(Peer to Peer,P2P),网络中的节点地位对等,每个节点都保存完整的账本数据,系统的运行不依赖中心化节…...
为您的 Raspberry Pi 项目选择正确的实时操作系统(RTOS)
在嵌入式系统设计中,实时操作系统(RTOS)的选择对于确保项目的实时性能和可靠性至关重要。Raspberry Pi,尤其是其最新的RP2040微控制器,为开发者提供了一个功能强大的平台来实现各种实时应用。本文将探讨如何为您的Rasp…...
鸿蒙应用的Tabs 组件怎么使用
鸿蒙应用中的Tabs组件是一个用于通过页签进行内容视图切换的容器组件,每个页签对应一个内容视图。以下是Tabs组件的使用方法: 一、基本结构 Tabs组件的页面组成包含两个部分,分别是TabContent和TabBar。TabContent是内容页,TabB…...
第四天 文件操作与异常处理
在Python中,文件操作是处理输入输出的基本操作之一,而异常处理则用于管理潜在的错误情况,确保程序的健壮性和稳定性。下面将介绍Python中的文件操作和异常处理的基本用法。 文件操作 打开文件 使用内置的 open() 函数可以打开一个文件&…...
【密码分析学 笔记】ch3 3.1 差分分析
ch3 分组密码的差分分析和相关分析方法 3.1 差分分析 评估分组密码安全性通用方法可用于杂凑函数和流密码安全性 预备知识: 迭代性分组密码(分组密码一般结构)简化版本 mini-AES CipherFour算法 3.1.1 差分分析原理 现象:密…...
Go:strings包的基本使用
文章目录 string前缀和后缀字符串包含判断子字符串或字符在父字符串中出现的位置字符串替换统计字符串出现次数重复字符串修改字符串大小写修剪字符串分割字符串拼接 slice 到字符串 strconv 本篇主要总结的是go中的string包的一些函数的操作讲解 string 在各个语言中&#x…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
 
大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
 
【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...
 
华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...
