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

软件工程pipeline梳理

文章目录

  • 软件工程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

相关文章:

软件工程pipeline梳理

文章目录 软件工程pipeline梳理为什么需要梳理软件工程的pipeline软件工程pipeline的概念与注意点软件工程pipeline中的最大挑战rethink相关资料 软件工程pipeline梳理 为什么需要梳理软件工程的pipeline 反思自己日常工作中的认知和行为。以算法/软件工程师为代表的技术工种往…...

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

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

2024年软件设计师中级(软考中级)详细笔记【5】软件工程基础知识上(分值10+)

第5章软件工程 目录 前言第5章 软件工程基础知识(上)(分值10)5.1 软件工程概述5.1.4 软件过程 5.2 软件过程模型5.2.1 瀑布模型 (Waterfall Model)5.2.2 增量模型5.2.3 演化模型5.2.4 喷泉模型(Water Fountain Model&a…...

C++:vector(题目篇)

文章目录 前言一、只出现一次的数字二、只出现一次的数字 II三、只出现一次的数字 III四、杨辉三角五、删除有序数组中的重复项六、数组中出现次数超过一半的数字七、电话号码的字母组合总结 前言 今天我们一起来看vector相关的题目~ 一、只出现一次的数字 只出现一次的数字…...

JS 怎么监听复制事件 并获取复制内容 并修改复制文本内容

需求背景: 需要禁用部分文本内容的复制事件,并且在复制事件发生时,将复制的文本内容通过接口传给后端。 上代码: // 使用Dom获取需要操作禁用时间的元素let element: any document.getElementById(test1);// 为该元素添加 copy 事…...

安卓使用.9图实现阴影效果box-shadow: 0 2px 6px 1px rgba(0,0,0,0.08);

1.安卓实现阴影效果有很多种&#xff0c;一般UX设计会给以H5参数box-shadow: 0 2px 6px 1px rgba(0,0,0,0.08);这种方式提供背景阴影效果&#xff0c;这里记录一下实现过程 2.界面xml源码 <?xml version"1.0" encoding"utf-8"?> <layout xmlns…...

CSS3-Day1

CSS3圆角 border-radius CSS3盒阴影 box-shadow CSS3边界图片 border-image CSS3 background-clip属性 padding-box 沿着边框填充 content-box 在边框外面 CSS3 线性渐变 线性渐变 - 从上到下&#xff08;默认情况下&#xff09;#grad { background-image: linear…...

网站集群批量管理-Ansible(ad-hoc)

1. 概述 1. 自动化运维: 批量管理,批量分发,批量执行,维护 2. 无客户端,基于ssh进行管理与维护 2. 环境准备 环境主机ansible10.0.0.7(管理节点)nfs01 10.0.0.31(被管理节点)backup10.0.0.41(被管理节点) 2.1 创建密钥认证 安装sshpass yum install -y sshpass #!/bin/bash ##…...

github学生认证(Github Copilot)

今天想配置一下Github Copilot&#xff0c;认证学生可以免费使用一年&#xff0c;认证过程中因为各种原因折腾了好久&#xff0c;记录一下解决方法供大家参考。 p.s.本文章只针对Github学生认证部分遇到的问题及解决方法&#xff0c;不包括配置copilot的全部流程~ 1、准备工作…...

【SQL调优指南--附带实例】

以下是50个SQL调优的例子&#xff0c;每个例子都附带了可执行的SQL语句&#xff1a; 删除重复记录&#xff1a; DELETE FROM table_name WHERE id NOT IN (SELECT MIN(id) FROM table_name GROUP BY col1, col2);使用索引来加速查询&#xff1a; ALTER TABLE table_name ADD…...

Java基础(下)

泛型 Java 泛型&#xff08;Generics&#xff09; 是 JDK 5 中引入的一个新特性。使用泛型参数&#xff0c;可以增强代码的可读性以及稳定性。 编译器可以对泛型参数进行检测&#xff0c;并且通过泛型参数可以指定传入的对象类型 ArrayList<Person> persons new Arra…...

【python】极简教程1-何为程序

程序可以简单地理解为一系列执行运算的指令。这些运算可以是数学计算、符号运算(如检索或替换文档中的内容)或图形运算(如处理图像或播放视频)。 不同编程语言的基础指令大致相同,包括: 输入:从键盘、文件、网络或其他设备获取数据。输出:将数据显示在屏幕上、保存到文…...

【Transformer】Selective Attention Improves Transformer

这篇论文主要介绍了一种新方法——选择性注意力&#xff08;Selective Attention&#xff09;&#xff0c;用于改善Transformer模型的性能和效率。 &#x1f913; 摘要 无关元素在注意力机制中的存在会降低模型性能。论文提出了一种无需额外参数的简单调整方法&#xff0c;即…...

博客项目自动化测试(一)

1. 确认博客系统的环境搭建 http://49.235.129.183:8080/java109_blog_system/blog_list.html&#xff0c;即可访问我的小项目&#xff1b; 2. 确定测试用例 测试用例如下所示&#xff1a; 3. 关于登录的测试用例 3.1 初始化和退出浏览器 代码如下&#xff1a; package Blo…...

电商商品API接口系列(商品详情数据)商品比价、数据分析、自营商城上货

电商商品API接口系列中的商品详情数据接口&#xff0c;在商品比价、数据分析以及自营商城上货等方面发挥着重要作用。以下是对这些应用场景的详细分析&#xff1a; 一、商品详情数据接口概述 商品详情数据接口是电商平台上用于提供商品详细信息的API接口。这些接口允许开发者…...

排序算法总结(一)冒泡排序和选择排序

访问www.tomcoding.com网站&#xff0c;学习Oracle内部数据结构&#xff0c;详细文档说明&#xff0c;下载Oracle的exp/imp&#xff0c;DUL&#xff0c;logminer&#xff0c;ASM工具的源代码&#xff0c;学习高技术含量的内容。 冒泡排序 这个算法可以说是排序算法中最著名的…...

伺服电动缸

美国EXLAR原装K系列伺服缸 高精度运动&#xff0c;运动平稳&#xff0c;低噪音&#xff0c;高速度 向下翻动查看更多 力姆泰克伺服电动缸 k系列电动缸采用Exlar滚柱丝杠技术&#xff0c;提供多种不同性能等级的产品&#xff0c;可外配第三方电机。 通用型设计&#xff0c;无…...

深度学习中的logit到底是什么?

1. 问题 在做深度学习的过程中&#xff0c;经常会碰到logit。这个和在学校学的概率有出入&#xff0c;因而想弄明白这到底是个什么参数。 2. 使用logit的原因 定义几率&#xff08;odds&#xff09;和 logit 函数的主要原因在于使用了线性空间转换&#xff0c;使得非线性的概…...

idea使用记录

文章目录 1、idea调出maven窗口2、跳转到指定行 1、idea调出maven窗口 首先尝试菜单栏View→Tool Windows→Maven&#xff0c;如果没有maven那很有可能是idea没有识别到这是一个maven项目&#xff0c;此时可以尝试在项目的pom文件上右击&#xff0c;选择“add as maven projec…...

Python - HTTP servers

python的http.server模块用于HTTP服务器的功能&#xff0c;这个模块是python标准库的一部分&#xff0c;不需要pip install。 使用前需要import&#xff1a; import http.server 然后就可以编辑代码&#xff0c;使用此模块提供的接口&#xff0c;实现http server相关功能。 除…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式&#xff08;Python 实现&#xff09; 在 Python 中&#xff0c;你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是&#xff0c;.doc 是旧的 Word 格式&#xff0c;而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学&#xff08;ECC&#xff09;是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础&#xff0c;例如椭圆曲线数字签…...

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析&#xff08;Parser&#xff09; 2.4、执行sql 1. 预处理&#xff08;Preprocessor&#xff09; 2. 查询优化器&#xff08;Optimizer&#xff09; 3. 执行器…...

android13 app的触摸问题定位分析流程

一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...

论文阅读:Matting by Generation

今天介绍一篇关于 matting 抠图的文章&#xff0c;抠图也算是计算机视觉里面非常经典的一个任务了。从早期的经典算法到如今的深度学习算法&#xff0c;已经有很多的工作和这个任务相关。这两年 diffusion 模型很火&#xff0c;大家又开始用 diffusion 模型做各种 CV 任务了&am…...

[USACO23FEB] Bakery S

题目描述 Bessie 开了一家面包店! 在她的面包店里&#xff0c;Bessie 有一个烤箱&#xff0c;可以在 t C t_C tC​ 的时间内生产一块饼干或在 t M t_M tM​ 单位时间内生产一块松糕。 ( 1 ≤ t C , t M ≤ 10 9 ) (1 \le t_C,t_M \le 10^9) (1≤tC​,tM​≤109)。由于空间…...

2025年- H71-Lc179--39.组合总和(回溯,组合)--Java版

1.题目描述 2.思路 当前的元素可以重复使用。 &#xff08;1&#xff09;确定回溯算法函数的参数和返回值&#xff08;一般是void类型&#xff09; &#xff08;2&#xff09;因为是用递归实现的&#xff0c;所以我们要确定终止条件 &#xff08;3&#xff09;单层搜索逻辑 二…...