软件工程pipeline梳理

news2024/11/27 22:33:48

文章目录

  • 软件工程pipeline梳理
    • 为什么需要梳理软件工程的pipeline
    • 软件工程pipeline的概念与注意点
    • 软件工程pipeline中的最大挑战
    • rethink
    • 相关资料

软件工程pipeline梳理

为什么需要梳理软件工程的pipeline

  反思自己日常工作中的认知和行为。以算法/软件工程师为代表的技术工种往往会存在以下的“误区”(可能也仅仅是大家戏虐的段子):“需求沟通是扯皮”,“开会是浪费时间”,“代码review就是走个过场”。上述认知的获得,很大程度上是因为对一个完整的软件/项目周期的不了解,从而有点拘泥于“写代码”这一“有技术含量”的点上。成熟的算法/软件工程师尽量不要被一叶遮目,而不见泰山。
  梳理软件工程的pipeline可以强化自己的全局意识,更接近事物的真实面貌。

软件工程pipeline的概念与注意点

在这里插入图片描述
  软件工程领域针对流程建模兴起不同的流派,例如瀑布模型、V模型、增量过程模型、演化过程模型、螺旋模型、协同模型、演化模型等。上图左上角是一种保留各流派模型基本要素并吸纳众多模型思想的一种流派,称之为统一过程(Unified Process)。其阐释为:“用例驱动,以架构为核心,迭代并且增量”。
  Unified Process的概念一般与UML配合使用。实际开发中,有供方便使用的流程管理软件:国外的如Jira,国内的如Pingcode(这个目前也没太使用过,要尝试起来)。
  关于Unified Process中具体的步骤,在实际的工作中有以下的注意点:

  • 沟通、策划阶段:如果某个“故事”的成本超过了3个开发周(这里的3是一个概数,可以根据实际情况进行调整),则最好请客户把该故事做进一步细分,重新赋予权值并计算成本,否则增量就过大,不利于风险控制。
  • 建模阶段:建模阶段的设计应注重接口设计,而弱于内部的设计,因为可以随时重构(注:重构指改进设计的内部结构,但并未改变其外部功能)。
  • 构建:在编码的初期,建议团队不是直接开始编码,而是开发一系列用于检测本次(软件增量)发布的包的单元测试。因为一旦建立了单元测试,开发者就能够集中精力于必须实现的内容以通过单元测试。对于测试应可以做到自动实施,易于执行并可重复。另外一个建议是如果有条件建议可以尝试结对编程(Pair Programming),有点类似于电影乘风破浪中的驾驶员沈腾和领航员尹正共同配合完成比赛。

软件工程pipeline中的最大挑战

  在一个软件的生命周期中,目前我个人认为(需求)沟通是最具有挑战性的一个步骤。自己的现实体会可能需要不断的思考以下几点的答案:

  1. (需求)沟通参与者不积极甚至有一定的抵触心理,如何处理。
  2. (需求)沟通的核心关键要素有哪些。
  3. (需求)沟通中有不一致的意见和看法,如何处理。
  4. (需求)沟通的收尾应注意些什么。

  针对第一点,需求沟通应该和利益相关者召开。通常一个项目组里面不同参与者的利益相关程度是不同的,如果发现沟通的对象,存在消极甚至抵触的心理,可能是没有找到合适利益相关者或者利益相关者沟通的顺序不对。例如某一C端需求,产品侧总监,C端产品经理,自己直属的算法leader是第一层利益相关者;后端开发同事、数据标定资源和运维同事是第二层利益相关者;同团队的技术伙伴和B端产品经理是第三层利益相关者。如果想从技术的角度推动某一特性的资源支持。最先沟通达成共识的应该是自己的直属技术leader,然后是产品经理,然后是产品总监。在第一层利益相关者达成共识(或知晓)情况下,再与第二层利益相关者进行沟通,否则直接与后者进行沟通,因为从某种层面来讲,第二层利益相关者属于具体支持类的同事,从公利层面,这些同事的工作内容没有被leader层面知晓,对其不合适;从私利的层面,支持类的同事需要配合做事情,但身为同级的自己直接去提需求,也不合适。B端产品经理、和自己同组的技术伙伴身为第三层级的参与者,对诸如涉及到该特性的需求沟通仅仅起到一定的建议作用,如果没有特别上心也应理解。
  针对第二点,需求沟通至少应该要包含的四个要素:

  • 谁是这项工作的最初请求者?
  • 谁将使用该解决方案?
  • 成功的解决方案将带来什么样的经济效益?
  • 对于这个解决方案你还需要其他的资源吗?

  一方面要逐步积累、建立自己的需求文档模板,另外一方面要注意的是,上述内容要自己思考收集出来,写出文档初稿和选项,让参与者付出尽可能小的思考和精力。
  针对第三点,在日常情况中在一线的工作中遇到不同的意见(尤其是不同组)是极有可能遇到的。这是一个协商的过程,最好的协商是多赢的结果。有以下指导的原则:

  • 认识到这不是竞争。为了成功,为了获得多赢,多方不得不妥协。(Make it才是最重要的)
  • 制定战略。(协商前,要提醒自己保持理智。想好自己希望得到,设想对方希望得到什么,你将如何行动以使得这两方面的希望都能实现。)
  • 主动地听。听,是为了获取信息,这些信息有助于在磋商中更好地说明你的立场。
  • 关注对方的兴趣。如果想避开冲突,就不要太过于坚持自己的立场。
  • 不要进行人身攻击。应集中于需要解决的问题。
  • 要有创新性。当处于僵局时不要害怕而应考虑如何摆脱困境。

  如果是需求会议,如果担心造成1v1的对立局面,可以纳入协调人。并且为了速战速决,需求会议尽量不要考虑(1)技术细节(2)极端case. 需求可以以开发用例的方式呈现
  针对第四点,协商前,想好自己希望得到,设想对方希望得到什么,你将如何行动以使得这两方面的希望都能实现。随时准备做出承诺。一旦已经达成一致,不要闲聊胡扯,马上做出承诺。

rethink

  成型公司流程应该来讲是相对较完善的,有的时候大家认为存在流程僵化现象,可能是因为身处其中不知为何,没有经历过流程形成的过程。创业公司的员工会不知流程为何物,同样他们面对的是另外一种迷茫。但无论身处何种环境,常常留心、用心思考。
  需求沟通之后,软件工程pipeline中的第二大头可能是建模那一块中的设计,这部分感觉应该可以再单开几篇文章。总之,要有一个认知,在整个pipeline中,具体的构建(俗称码农的工作)无论是从时间还是从重要性来讲,其权重事实上都是一个较低的位置。
  本文的内容虽然是针对软件工程领域而讲,但其内容适用于软件工程师和算法工程师。因为一方面从现实意义上来讲,一些外企(例如微软)是将算法应用相关的工作纳入软件工程师之说,统称为SD(Software Development),当然researcher应该例外;另外一方面从概念上来讲,早在(至少)十几年前,《软件工程—实践者的研究方法》这本书中就提到:计算机软件被划分为7大类,人工智能软件本身就是之一。

相关资料

  • 流程图drawio原始文件见:https://upload.csdn.net/creation/uploadResources?spm=1011.2124.3001.5646

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024-10-10 问AI: [AI面试题]激活函数在神经网络中的作用是什么?

文心一言 激活函数在神经网络中扮演着至关重要的角色。它们的主要作用包括: 引入非线性: 神经网络中的每一层通常是由线性变换(如权重矩阵乘以输入向量再加上偏置)构成的。如果没有激活函数,多层神经网络将仅仅是一个…

正点原子讲解SPI学习,驱动编程NOR FLASH实战

配置SPI传输速度时,需要先失能SPI,__HAL_SPI_DISABLE,然后操作SPI_CR1中的波特率设置位,再使能SPI, NM25Q128驱动步骤 myspi.c #include "./BSP/MYSPI/myspi.h"SPI_HandleTypeDef g_spi1_handler; /* SPI句柄 */void spi1_init(void) {g_spi…

前端基础(四十):拖放功能的实现

效果 源码 <div class"draggable-wrap"><div class"draggable-box" draggable"true" data-json{"name": "Lee"}><h1>Lee</h1><div class"drop-box" data-json{"name": &qu…

API网关之Hango

Hango 是基于云原生和服务网格技术的开源 API 网关&#xff0c;专为现代分布式系统设计&#xff0c;提供高效、安全、可扩展的流量管理解决方案。Hango 网关是基于 Envoy Proxy 构建的&#xff0c;能够处理复杂的微服务架构中流量控制、服务治理和安全需求。Hango 强调与 Kuber…

Java | Leetcode Java题解之第472题连接词

题目&#xff1a; 题解&#xff1a; class Solution {Trie trie new Trie();public List<String> findAllConcatenatedWordsInADict(String[] words) {List<String> ans new ArrayList<String>();Arrays.sort(words, (a, b) -> a.length() - b.length(…

大模型1-本地部署实现交互问答

任务 在本地部署大模型&#xff0c;调用大模型进行对话。 添加库&#xff1a; 1、Transformer Transformers 是由 Hugging Face 开发的一个开源库&#xff0c;广泛应用于自然语言处理&#xff08;NLP&#xff09;任务。其主要功能是简化了对大型预训练语言模型的加载和使用…

神经网络整体架构

文章目录 1.输入层Input2.卷积层Conv3.激活函数层(一)Sigmoid 函数(二)Tanh 函数(三)修正线性单元ReLU(四)Leaky ReLU函数(带泄露的Relu)(五)参数化ReLU 4.池化层POOL5.全连接层FC6.输出层Output 用全连接神经网络处理大尺寸图像具有三个明显的缺点&#xff1a; ①将图像展开为…

从加载到对话:使用 Transformers 本地运行量化 LLM 大模型(GPTQ AWQ)

&#xff08;无需显卡&#xff09;使用 Transformers 在本地加载具有 70 亿参数的 LLM 大语言模型&#xff0c;通过这篇文章你将学会用代码创建属于自己的 GPT。 LLM 的加载、微调和应用涉及多个方面&#xff0c;今天我们先聚焦于加载&#xff0c;本文的难点仅在于正确安装和知…

SQL第16课挑战题

1. 美国各州的缩写应始终用大写。更新所有美国地址&#xff0c;包括供应商状态&#xff08;Vendors表中的vend_state)和顾客状态&#xff08;customers表中的cust_state),使它们均为大写。 2. 第15课挑战题1要求将自己添加到customers表中&#xff0c;现在删除自己&#xff0c;…

活动预告丨第二十八期 “CCF 开源高校行”暨“木兰技术开放日”活动走进北京大学...

点击蓝字 关注我们 CCF Opensource Development Committee 开源高校行 北京大学站 在数字化转型的浪潮中&#xff0c;开源软件人才的培养是信息技术创新发展的重要根基&#xff0c;高校学子作为我国开源生态的源头活水备受重视。10月9日下午15:00-17:10 “CCF 开源高校行”暨“…

【VScode】如何使用详细步骤【笔记】、配置 C / C ++【笔记】

2024 - 10 - 10 - 笔记 - 24 作者(Author)&#xff1a;郑龙浩(仟濹) 该笔记写于 2024-07-02 摘抄到博客上的时间是 2024-10-10 VScode配置 C / C 笔记 我是看了下方链接的视频后为了方便后期复习做的笔记: B站某UP主的视频如下&#xff1a; VScode配置C/C开发环境&#xff…

科研绘图系列:R语言绘制SCI文章图2

文章目录 介绍加载R包导入数据图a图b图d系统信息介绍 文章提供了绘制图a,图b和图d的数据和代码 加载R包 library(ggplot2) library(dplyr) library(readxl) library(ggpmisc)导入数据 数据可从以下链接下载(画图所需要的所有数据): 百度网盘下载链接: https://pan.baid…

S14 瑞士轮胜者组 TES 2:0 击败 DK 晋级淘汰赛

电子竞技的赛场上&#xff0c;总有一些瞬间&#xff0c;让所有的质疑和嘲笑变得苍白无力。 今天&#xff0c;滔搏战队用自己的行动&#xff0c;再次证明了这一点。 他们不仅翻越了挡在面前的高山&#xff0c;更让世界听到了他们的故事。 这支曾被低估的队伍&#xff0c;在夏季…

使用Pytorch+Numpy+Matplotlib实现手写字体分类和图像显示

文章目录 1.引用2.内置图片数据集加载3.处理为batch类型4.设置运行设备5.查看数据6.绘图查看数据图片(1)不显示图片标签(2)打印图片标签(3)图片显示标签 7.定义卷积函数8.卷积实例化、损失函数、优化器9.训练和测试损失、正确率(1)训练(2)测试(3)循环(4)损失和正确率曲线(5)输出…

绘图技巧 | 矩形树状图(Treemap)绘图技巧分享~~

今天这篇推文&#xff0c;小编还是像往常一样交给大家绘图技巧&#xff0c;今天的主角就是-*树形矩阵图(Treemap)*。绘制树形图使用R或者Python都是可以绘制的&#xff0c;今天我们还是使用R进行绘制(Python绘制结果为交互式&#xff0c;后面统一介绍相应的库)。在R中有专门的包…

Java项目-----图形验证码登陆实现

原理: 验证码在前端显示,但是是在后端生成, 将生成的验证码存入redis,待登录时,前端提交验证码,与后端生成的验证码比较. 详细解释: 图形验证码的原理(如下图代码).前端发起获取验证码的请求后, 1 后端接收请求,生成一个键key(随机的键) 然后生成一个验证码作为map的valu…

npm运行时出现npm ERR! builtins is not a function报错!

项目场景&#xff1a; 项目运行时什么都没动都没改突然运行不起来了&#xff0c;报错 TypeError: builtins is not a function 代码什么都没动&#xff0c;不是代码问题&#xff0c;排查后只有可能是node和npm的问题&#xff0c;所以卸载掉node重装重启 解决方案&#xff1a; …

Python:赋值的本质其实是引用

相关阅读 Pythonhttps://blog.csdn.net/weixin_45791458/category_12403403.html?spm1001.2014.3001.5482 在Python编程中&#xff0c;我们经常会遇到各种赋值操作&#xff0c;无论是简单的变量赋值&#xff0c;还是复杂的数据结构操作。表面上看&#xff0c;赋值就是把一个值…

数字工厂管理系统如何优化生产流程

在当今快速变化的制造业环境中&#xff0c;提高生产效率、降低成本并确保产品质量是企业持续发展的关键。数字工厂管理系统作为智能制造的重要组成部分&#xff0c;正逐渐成为优化生产流程、推动产业升级的重要工具。本文将探讨数字工厂管理系统如何通过智能化、自动化和数据分…

目标检测中的损失函数

损失函数是用来衡量模型与数据的匹配程度的&#xff0c;也是模型权重更新的基础。计算损失产生模型权重的梯度&#xff0c;随后通过反向传播算法&#xff0c;模型权重得以更新进而更好地适应数据。一般情况下&#xff0c;目标损失函数包含两部分损失&#xff0c;一个是目标框分…