- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章阿里研究员:缩短软件开发中的反馈弧由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
开发者写好了某个功能的代码,想知道这个功能是不是实现了,代码还需不需要再改,这就是一种反馈。在软件开发中,尤其是联调时,缩短反馈弧有助于及时发现问题、采取对策,提高开发效率。那么什么样的反馈弧才算短?如何看待缩短反馈弧的投入产出比?本文分享阿里巴巴研究员南门对软件开发中反馈弧的相关思考和看法.
一 为什么缩短反馈弧是关键 。
都说“没有度量就没改进”。但这句话还不完整。度量对于改进的作用是给反馈,但单单有度量还不够,还要度量得足够频繁、度量得足够快,这样才能更有效的进行改进。缩短反馈弧(feedback loop)的价值在生活中有很多例子:
减肥。如果每天称体重,就有助于减肥、有助于控制体重。吃多了,看着体重一天天上去,心里就有压力了,就会控制。如果不是每天称体重,就容易放纵自己,一发而不可收拾。每天称体重,和每半年称一次体重,对减(gai)肥(jin)的作用是完全不一样的.
吃饭,如果吃太快,就容易吃太多。原因也是反馈弧太长。人的饱腹感是有delay的,从肚子已经吃饱了,到大脑感受到饱腹感,有一个delay。在这个delay这段时间里,如果继续吃,就会吃多了.
育儿,是反馈弧的另一个很好的例子。家里有小孩的人,都对育儿很焦虑。因为:不知道现在做的这些事情,对小孩将来的上学、就业会产生什么影响。在育儿这件事情上面,反馈弧的长度是论年记的.
工作中也有很多例子:
线上变更,我们强调“可监控”。做了一个变更,如果能马上得到高质量的反馈(高质量的反馈 = 监控覆盖率高、噪音低、阈值设定合理),就非常有助于判断我做的这个变更是好的还是不好的。资损核对,从T+1,到T+H,到TM,也是反馈弧不断缩短的过程。反馈弧缩短是非常有助于及时发现问题、及时采取对策的.
系统设计分析的评估遗漏,仍然是反馈的问题。我的这个系分,对不对,有没有遗漏。我系分的时候做了一个判断:这个链路可以复用。那么这个判断对不对?有没有遗漏、判断对不对,这些都是反馈.
我们平时说 “业务试错”,也是反馈。“试错”的意思就是:试一下,看看错不错,如果错了就掉头,如果对了就可以继续投入。“快速试错”就是业务效果的反馈弧要缩短。没有“快速试错”能力,就是反馈弧长,就不好。我们要有快速试错能力.
晋升,也是很痛苦。因为晋升的反馈弧也很长。辛辛苦苦干两三年,还要准备晋升述职,也不知道最后评委会怎么评价。为了解决这个问题,如果能在过程中增加了一些非正式的述职,提供反馈,效果就很好.
二 怎么算反馈弧短?
反馈弧短不短,有两个方面:
反馈的前置等待时间。理想状态是:反馈不需要等,任何时候想要反馈都可以.
反馈本身的耗时。理想状态是:反馈本身的耗时很短,结果立等可取.
打个比方,二三十年前,那时候量血压(量血压就是一种反馈)是要去医院量的,只有等早上医院开门了、挂个号、排队等,轮到你了医生给你量血压。所以不是任何时候想量血压就能量血压的,量血压的前置等待时间很长。但量血压这个事情本身,耗时很短,一分钟就知道结果了。后来,有了家用血压计,量血压就不用等了,也不需要求助于医生,自己在家里任何时候都可以量,可以每天早中晚量三次,甚至可以每小时都量一下。有了家用血压计,虽然量血压这个反馈动作本身的耗时并没有缩短很多,但提高了频次,任何时候想要反馈就可以给反馈,前置等待时间缩短到几乎为零。这个变化就大大的有助于病人控制自己的血压。类似的,控制血糖也是类似的道理。以前要知道血糖是要去医院验血的,现在有一些新技术,可以让病人自己就可以测量血糖,手指尖夹一下就可以了。这个变化就大大的有助于控制自己的血糖.
软件开发活动中的反馈也是类似的。我是一个开发,我改了一行代码,我想知道这行代码有没有问题。这就是给我反馈。我是一个开发,我写了大半天代码,把某个功能需要的代码写好了,我现在想知道这个功能是不是能work了、我的代码还要不要再改。这也是反馈。今天,在有些团队,一个开发要得到这些反馈,反馈弧还很长,长在两个方面:1)要等,不是任何时候想要反馈都可以。2)反馈本身的耗时长、成本高,结果也不是立等可取的。反馈弧一长,开发效率就降低了。在一些团队里,反馈弧长,在他们的开发联调中的体现就是:
反馈不是随时随地的,要等。因为不是随时随地都可以发起一笔的。也不是每个人都知道怎么发起一笔的,只有特定的同学才知道怎么发起一笔.
反馈不是立等可取的。就算发起了一笔交易,还要找一个个域的同学check数据。同时,反馈的质量也不高,反馈不consistent,因为check是人做的,不同人的做的check不一样.
持续集成就是要缩短反馈弧。我们平时一直在做各种事情,比如改代码、数据库加字段、修改DRM值、数据库里插入数据。持续集成就是每件事情做了以后、每个动作发生以后,都要尽可能快的给我反馈,告诉我各种场景是不是通的、代码是不是work。“持续”了,反馈要随时随地都可以给。自动化是缩短反馈弧的必要条件(但不是充要条件,因为自动化了以后,还有覆盖率、充分性、有效性等要素)。如果还有人工步骤,就不肯能做到反馈弧很短,因为人是不可能随时随地都available的,人的动作也是很慢的.
三 缩短反馈弧的成本和投入产出比 。
要缩短反馈弧、建设持续集成,的确是需要投入成本的。要花人花时间去写自动化、去维护整个基建、去维护持续集成的良好运行。但是,在缩短反馈弧上投入的成本,是能从其他地方收回来的。很多人只看到了建设持续集成需要的投入,但是他们没有算另一笔账:这个做好了,能节省多少时间.
例如,对每个项目来说,把每个联(ji)调(cheng)用例和check都自动化了,这个前期投入,在项目进行的过程中会收到回报。比如,人肉做一次check,算上找人的功夫,加起来每次人肉check可能要15分钟。而把这个check自动化,需要2小时的工作量(包括自动化、以及后面的维护)。那么,如果整个项目过程中要做的check次数超过8次,这个自动化就是一笔划算的买卖。事实上,一个check在一个项目里面何止跑8次。现在,可能一个check在一个项目里面只跑几次,但这是因为实在没法再多跑了,因为每次check都非常累。但如果自动化了,check就可以跑很多次很多次。我们是希望check跑很多次很多次的。因为:我们希望我们任何时候改了代码,都能随时随地的得到反馈.
另外,随时随地跑一下check、随时随地的得到反馈,还有一个很大的好处,就是:能使得排查问题变得很方便。九十年代的时候,IDE还没有今天这么好,比如那时候在Turbo C 2.0里面写代码,当时很多程序员的习惯是每写几分钟代码就编译一下。因为当时的IDE比较“简陋”,不像今天的IDE,哪个地方如果有typo,比如变量名打错了、关键字打错了,都会马上有波浪线提示。当时的IDE是没有这种提示的。如果写了半个小时、一个小时的代码,写了几百行,然后再编译,如果编译有问题,排查起来就比较辛苦(虽然编译错误会告诉我哪行错了,但是真正的问题根源未必就在报错的那一行)。所以,当时大家每写几分钟代码就编译一下,一旦有错就知道了,问题就出在刚才那几分钟写的代码里面。这就是为什么缩短反馈弧能让排查问题变得更方便.
投入在建设持续集成上的成本,不能孤立的看。如果只从单个开发同学的视角看,我的投入产出比未必很高,也许在某些情况下,用原来的方式反而对个人更方便。但在很多情况下,个体受益,往往会导致群体受损,进而导致每个个体都受损。个体做一些小的付出,会导致整个群体受益,进而让每个个体受益.
这样的例子在生活中也很多。如果每个人开车都不遵守秩序,都乱变道、乱加塞,那么整体的道路秩序就会很混乱,进而导致整个高速上面的车速都降下来,进而导致每个人都更晚回家。疫情防控也是这个道理。局部的一些隔离措施对个体来说是一个付出。但这些个体的付出,换来的是群体的受益,我们整个社会的疫情防控就做好了,整个社会的经济恢复了,进而让每个个体都受益.
最后此篇关于阿里研究员:缩短软件开发中的反馈弧的文章就讲到这里了,如果你想了解更多关于阿里研究员:缩短软件开发中的反馈弧的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 9 年前。 Improve this q
半径为r的圆上的点p(x,y)与圆心O(x0,y0)的关系: x = x0+rcosA; y = y0+rsinA ,A为弧度 1、圆 复制代码 代码如下:
我正在尝试找到一种方法来计算两条弧线之间的交点。我需要用它来确定在视觉上圆弧的右半边有多少,左边有多少。我考虑创建右半部分的弧线,并将其与实际弧线相交。但是我花了很多时间来解决这个问题,所以我想在这里
这听起来可能是一个新手问题,但我是 iOS 开发新手。 我在我的项目中跟踪了代码,该项目启用了 ARC,但我在执行时遇到错误(访问错误),并且想了解问题的原因并解决它。 按下某些按钮后,将在 MTCl
我想使用圆弧连接两个 SVG 点(例如两个圆的中心)。如果只有一个连接,则线 ( ) 将是一条直线。如果有两个连接,则两者都将是圆形的并且是对称的,这样: 所以,事实上,有一些规则: 一切都应该与连
我正在尝试实现多级饼图 我的初始代码在这里:JSFIDDLE var departments = [ { "name": "Sales", "color": "green",
我想在我的布局中制作一个弧形 View ,我尝试使用一个库但它不能正常工作,我如何制作这样的拱形 View 并在其上附加一个按钮,例如: 我尝试了一些代码,但它们在平板电脑和不同尺寸的屏幕上无法正常显
我有点 X 和 A, A',... 坐标: X [x,y](是起点) A [a,b], A'[a',b']等(是终点) 我还知道 Angular XCA、XCA'等 我找不到计算弧的公式,类似于图片上
我有一个 ViewController,它从 CoreData 获取对象并用它们构建一个 UITableView。当用户按下一行时,我得到报告文学对象并使用以下方法将其传递给下一个 View Cont
我有一个带有弧形的 Canvas ,里面有一些标签。 这是 fiddle 链接 - Fiddle下面是代码: var canvas = document.getElementById("myC
如何使用 css 创建这样的 Angular 弧? 这是入门模板:https://codepen.io/anon/pen/rwraXG 我希望我能够使用黑色外部 div 和红色内部 div,并使用边框
只是想完全理解 ARC。 MyView *testView = [[MyView alloc] init]; __weak MyView *weakView = testView; [weakView
假设我有一条线,我想为这条线设置动画,首先线是隐藏的,经过一点一点的线出现并完成后,我的问题是在 Android 中可以做到这一点还是我必须使用 Adobe After Effect? 更新 :
更新:2013 年 11 月 20 日:此问题仍未解决。 我正在尝试在自定义 View 中以动画方式创建圆圈。我想制作圆周的动画 - 在动画开始时有一个圆弧,在动画结束时圆是完整的。 我按照这个答案成
This is a basic code to create a pie chart for protocol distribution. In my .csv file, I have two co
我有一个 NSArray 对象,在我的 UIViewController 中使用。我可以将其声明为 ivar 或属性。这两种方法都有什么优点(考虑到我使用的是 ARC)? 选项 1: @interfa
此刻 Canvas 以不同的速度和大小绘制 15 个从 ltr 移动的圆圈。当其中一个离开窗口时,它将被设置为开始。问题是 Canvas 在圆圈之间画线,我不知道为什么?有人可以帮忙吗? window
我最近在这里和其他网站上阅读了很多关于 IBOutlets 应该强还是弱的文章。官方判定它们应该是弱的,除非它们引用顶级 xib 对象。 这很好。 然而,我还不清楚为什么将它们设置为强或弱实际上会对应
我有一个 CIImage,我正试图在鼠标沿路径拖动时画线。我可以这样做吗? 我正在为 mac 构建一个应用程序,我是 Core Image 的新手。 最佳答案 您需要先创建一个图形上下文,然后从中检索
我有一个使用 CAShapeLayer 绘制的圆弧,我希望它围绕圆的中心旋转。我正在尝试使用“transform.rotation”属性上的 CABasicAnimation 来获取此动画。但是旋转似
我是一名优秀的程序员,十分优秀!