软件工程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中的最大挑战
在一个软件的生命周期中,目前我个人认为(需求)沟通是最具有挑战性的一个步骤。自己的现实体会可能需要不断的思考以下几点的答案:
- (需求)沟通参与者不积极甚至有一定的抵触心理,如何处理。
- (需求)沟通的核心关键要素有哪些。
- (需求)沟通中有不一致的意见和看法,如何处理。
- (需求)沟通的收尾应注意些什么。
针对第一点,需求沟通应该和利益相关者召开。通常一个项目组里面不同参与者的利益相关程度是不同的,如果发现沟通的对象,存在消极甚至抵触的心理,可能是没有找到合适利益相关者或者利益相关者沟通的顺序不对。例如某一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.安卓实现阴影效果有很多种,一般UX设计会给以H5参数box-shadow: 0 2px 6px 1px rgba(0,0,0,0.08);这种方式提供背景阴影效果,这里记录一下实现过程 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 线性渐变 线性渐变 - 从上到下(默认情况下)#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,认证学生可以免费使用一年,认证过程中因为各种原因折腾了好久,记录一下解决方法供大家参考。 p.s.本文章只针对Github学生认证部分遇到的问题及解决方法,不包括配置copilot的全部流程~ 1、准备工作…...
【SQL调优指南--附带实例】
以下是50个SQL调优的例子,每个例子都附带了可执行的SQL语句: 删除重复记录: DELETE FROM table_name WHERE id NOT IN (SELECT MIN(id) FROM table_name GROUP BY col1, col2);使用索引来加速查询: ALTER TABLE table_name ADD…...
Java基础(下)
泛型 Java 泛型(Generics) 是 JDK 5 中引入的一个新特性。使用泛型参数,可以增强代码的可读性以及稳定性。 编译器可以对泛型参数进行检测,并且通过泛型参数可以指定传入的对象类型 ArrayList<Person> persons new Arra…...
【python】极简教程1-何为程序
程序可以简单地理解为一系列执行运算的指令。这些运算可以是数学计算、符号运算(如检索或替换文档中的内容)或图形运算(如处理图像或播放视频)。 不同编程语言的基础指令大致相同,包括: 输入:从键盘、文件、网络或其他设备获取数据。输出:将数据显示在屏幕上、保存到文…...
【Transformer】Selective Attention Improves Transformer
这篇论文主要介绍了一种新方法——选择性注意力(Selective Attention),用于改善Transformer模型的性能和效率。 🤓 摘要 无关元素在注意力机制中的存在会降低模型性能。论文提出了一种无需额外参数的简单调整方法,即…...
博客项目自动化测试(一)
1. 确认博客系统的环境搭建 http://49.235.129.183:8080/java109_blog_system/blog_list.html,即可访问我的小项目; 2. 确定测试用例 测试用例如下所示: 3. 关于登录的测试用例 3.1 初始化和退出浏览器 代码如下: package Blo…...
电商商品API接口系列(商品详情数据)商品比价、数据分析、自营商城上货
电商商品API接口系列中的商品详情数据接口,在商品比价、数据分析以及自营商城上货等方面发挥着重要作用。以下是对这些应用场景的详细分析: 一、商品详情数据接口概述 商品详情数据接口是电商平台上用于提供商品详细信息的API接口。这些接口允许开发者…...
排序算法总结(一)冒泡排序和选择排序
访问www.tomcoding.com网站,学习Oracle内部数据结构,详细文档说明,下载Oracle的exp/imp,DUL,logminer,ASM工具的源代码,学习高技术含量的内容。 冒泡排序 这个算法可以说是排序算法中最著名的…...
伺服电动缸
美国EXLAR原装K系列伺服缸 高精度运动,运动平稳,低噪音,高速度 向下翻动查看更多 力姆泰克伺服电动缸 k系列电动缸采用Exlar滚柱丝杠技术,提供多种不同性能等级的产品,可外配第三方电机。 通用型设计,无…...
深度学习中的logit到底是什么?
1. 问题 在做深度学习的过程中,经常会碰到logit。这个和在学校学的概率有出入,因而想弄明白这到底是个什么参数。 2. 使用logit的原因 定义几率(odds)和 logit 函数的主要原因在于使用了线性空间转换,使得非线性的概…...
idea使用记录
文章目录 1、idea调出maven窗口2、跳转到指定行 1、idea调出maven窗口 首先尝试菜单栏View→Tool Windows→Maven,如果没有maven那很有可能是idea没有识别到这是一个maven项目,此时可以尝试在项目的pom文件上右击,选择“add as maven projec…...
Python - HTTP servers
python的http.server模块用于HTTP服务器的功能,这个模块是python标准库的一部分,不需要pip install。 使用前需要import: import http.server 然后就可以编辑代码,使用此模块提供的接口,实现http server相关功能。 除…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
