时间:2022-10-10 19:04:12 | 浏览:244
本文作者用对比非常鲜明的两个开发团队的故事,讲解了敏捷开发之道 —— 如果你的团队缺乏统一标准的环境,那么即使勤劳努力,不仅会极其耗时而且成果甚微,使用容器化技术、CI/CD,不仅能让开发环境、测试环境、预发环境、生产环境保持一致,同时也对测试和质量保证有至关重要的作用。
作者 | Tylor Borgeson,已获作者翻译授权
译者 | 罗昭成,责编 | 唐小引
头图 | CSDN 下载自东方 IC
出品 | CSDN(ID:CSDNnews)
以下为译文:
这是我「流行软件开发实践」系列文章中的第四部分,在本系列文章中,我计划包含软件工程师通过提升开发流程和实践来改善软件开发的一系列方法。我曾在 ThoughtWorks 担任软件顾问,现在我在德国一家大型的零售公司工作,这些方法都是我在职业生涯中学习并实践验证过的。
这么多年来,我参加过很多团队活动,如足球、棒球、摔跤、篮球、足球、田径……我基本上参加了所有与运动有关的团队活动。有趣的是,我也加入过很多软件开发团队。
在这些团队中,我注意到了一个共同点,优秀的人才可以为团队成功中做出重要的贡献(如赢得比赛,高效开发需求并上线),但是他们并非团队成功唯一的原因。
在运动项目中,训练很重要,但是并不是所有的训练都重要。真正有用的那些训练是那些看起来不像是训练的训练。所以,对运动项目来说,比赛才是最好的训练,对于软件开发来说,在和生产环境几乎一致的地方测试才是有效的。
这个观点也是本文的重点,在和生产环境一样的环境中,进行开发和测试的效果非凡。下面,我将用两个我以前所呆过的团队中的故事,来阐述这一观点。
勤劳有限责任技术公司 —— 团队一
这个公司名称是虚构的,但是团队的工作情况和公司名字一致。
公司中有一个很大的前端项目,很多团队都在上面贡献这自己的努力,当然,我们团队也写着其中一部分功能。这些团队各自提供着自己的服务,并且这些服务也存在着各种相互依赖的关系。
当第一天到公司的时候,我们不得不在自己的新电脑上设置基础的开发环境。这些环境不仅仅包含我们部门自己的依赖服务,还必须要包含很多其它部门需要依赖的服务。这就导致我很难在本地将整个应用程序跑起来。
经过我的努力,我花费了两天时间,终于在我的电脑上跑起了整个应用程序实例。但据我所知,很多其他的程序员并没有将本地环境跑起来,而是与其他人进行结对编程,共用同一个环境。
很多同事都不能在本地测试他们的代码,这就意味着,他们需要将他们的修改发布到测试环境中去,才能知道他们修改是否能够生效,是否能够正常地与其它服务进行交互。
这在实际工作中,具有相当大的挑战,很多团队并不能及时将所有的代码更改推送到所有的环境中去。这将会有可能出现在测试环境中的测试结果与生产环境的结果不一致。
有一次,我们部门的一个程序员对一个功能进行修改,该功能需要与另外一个部门提供的服务进行数据交换,他很快就开发完成了,并在测试环境中进行测试,但在测试环境中,一直无法正常的跑通。但当我们把修改发布到线上环境,却发现能良好地运行起来。最后排查到问题原因是因为在测试环境与线上环境依赖的服务版本不一致。线上环境使用的是一个新版本(5.0.2),而测试环境却是使用的一个旧版本(5.0.1)。
另外一件“有趣”的事是,我们的测试环境是一台虚拟机,当需要更新代码的时候,我们需要登录到那台机器,在上面跑一个脚本,将最新的代码拉到服务器上,并重启应用。并且,公司的虚拟机数量不足以提供给每一位开发者使用。
这些问题,也导致代码部署到生产环境的过程非常漫长。所以为了减少部署所花费的时间,所以我们会每两周在生产环境中(像测试环境那样)进行一次部署。当然,每当有新东西(新功能、Bug 修复等)要发布到生产环境中时,都需要重复一次这个耗时的部署过程。
聪明有限责任技术公司 —— 团队二
显然,这个公司名称也是虚构的,但是其团队的工作情况和公司名字一致。
就整个团队而言,这个团队和前文所述的团队几乎一致。我们也致力于多个微服务[1]的开发,我们也需要和其它做着类似事情的部门进行交互。我们通过 REST 接口接收请求,也发送请求到其他服务上。
当第一天到公司的时候,我再次开始设置我的基础开发环境。在代码库中的 README.md 文件中,列出了配置开发环境的几项说明:
安装 Docker;
如何从团队镜像库拉取和推送 Docker 镜像;
如何在本地运行容器;
如何将本地修改关联到容器中。
从我拿到项目权限,一个半小时后,我在本地跑起来了第一个服务,并且能够将本地的改动推送到这个服务上。
这个团队和前文所述的那个团队一样,也有测试环境、预发环境、生产环境。一旦代码提交到主干上,CI/CD[2]上的任务会自动将代码构建成 Docker 镜像,并开始跑测试用例,紧接着会给镜像打上版本和标签并将镜像推送到镜像库中,还会将测试环境与预发环境中的镜像替换成最新的版本。在必要的时候,通过手动触发,将镜像部署到生产环境。
整个过程,在最糟糕的一天,也最多花费 10 分钟时间。
在这个公司中,所有的团队都有类似的设置。
这些环境的区别在于,在测试环境中,使用的是测试数据,第三方的服务要么是被忽略掉,要么是被 mock 掉。在预发环境中,也是使用测试数据,但是其它的服务都是在正常运行状态。
关键点
这两个团队中的差异,我在很多团队都看到过,我能够轻松地指出他们存在的问题。如果让你选择加入其中某一个团队时,我相信大多数开发都会选择同一个团队。
容器化
第二个团队将他们的服务进行了容器化,这给他们带来了很多的好处。因为项目中所有的依赖都在容器中设置完成,所以在新的机器上部署非常的容易,不仅仅只有这一个优点,容器化也使它们在生产环境中的部署变得非常容易。
容器化让整个应用程序变成了一块,可以轻松、快速地进行更换(这也让敏捷开发四个关键指标中的部署频率提高了)。
容器化也能有助于实现多个环境的标准化。
标准化/一致性
在第一个团队中,主要的挑战就是源于他们没有统一标准的环境。
每一个虚拟机都需要单独去更新正确的程序包版本,如果忘记更新某一台虚拟机时,这就有可能会引起问题,这些问题要么是功能问题,要么安全问题,这都非常的严重。
环境不一致也会影响测试的有效性,因为我们不知道在测试环境测试的结果是否与线上环境的结果保持一致。很多错误都是由于环境不一致引起的。
在第二个团队中,使用容器化技术与自动化部署技术相结合,这样能很容易保证生产环境与测试环境一致。当然,即使环境一致也有可能会出现问题。不过,你也不必担心,这种错误的出现会被极大的降低(敏捷开发四个关键指标中的变更失败率)
用一句话总结:
使用容器化技术、CI/CD 能够更加容易地让开发环境、测试环境、预发环境、生产环境保持一致,也对测试和质量保证有至关重要的作用。
朋友们,更聪明地工作,而不是更辛苦地工作。
系列阅读:
为什么程序员如此“嫌弃”主干开发模式?
为什么持续集成和部署在开发中非常重要?
被高估了的测试驱动开发?
[1] https://microservices.io/
[2] https://levelup.gitconnected.com/heres-why-continuous-integration-and-deployment-is-so-important-to-the-software-development-c0caeead5881
英文:A Tale of Two Software Teams
原文:
https://levelup.gitconnected.com/a-tale-of-two-software-teams-5cb6cebd28bb
作者:Tylor Borgeson,全栈软件开发者,对机器学习、AI、基础架构、DevOps 及敏捷等拥有强烈兴趣。
译者:罗昭成
本文为 CSDN 翻译,转载请注明来源出处。
☞微信 iOS 版正式支持深色模式;谷歌宣布彻底取消I/O开发者大会;Visual Studio 2019 16.5发布|极客头条
☞5 亿微博数据疑泄露,Python 爬虫如何避免踩天坑?
☞对标Pytorch,清华团队推出自研AI框架“计图”
☞我就不信 35 岁做不了程序员!
☞破解面试难题8个角度带你解读SQL面试技巧!
☞在非托管钱包中可能会出现价值3000万美元的BCH SIM 交换黑客攻击吗?
在很多人眼里,程序员是一类高薪、“高危” 的职业。 他们穿着格子衫、顶着一碗超帅的光头,能修电脑、能黑网站、简直无所不能。 。 。但直到我自己当上程序员,才发现其实很多人都是对程序员的误解。除了外行的误解外,还有很多来自于程序员同行的误解。
多少次熬夜加班, 直至见到凌晨四点的太阳;多少个早晨洗漱的时候, 看到洗脸盆掉的全是头发;整天coding, debugging, 设计, 画图, 文档, 会议, 演示......看似充实饱和的工作, 又夹杂了多少苦涩与无奈; 程序员其实很
同样都是敲代码,为什么别人一个月工资五万,你一个月却只拿五千?是单纯在找工作的时候运气不佳?还是因为技术水平有差别?那些被大众膜拜信仰的技术大神到底牛在哪里,现状已定,普通程序员是否还有机会逆袭?看完这篇文章,或许你能从中找到答案。从思维和
首先,当前程序员职业确实存在职业生命周期偏短的问题,原因是多方面的,包括工作量大、工作周期长、技术迭代速度快、岗位竞争压力大等因素,但是当前不少技术团队中,也有很多70后、80后的程序员,而且随着人工智能等技术的发展,以及IT互联网行业产业
中国码农千千万,北上深杭一大半。虽然所有的程序员都有着相似的气质,几乎每个人衣橱里都有差不多款式的牛仔裤、旅游鞋、格子衬衫,无论男女都有至少一个双肩包,但一方水土养一方人,每个地方的程序员都可以从茫茫人海中找到"老乡"。比如,北京的程序员大
进入一个行业,开始一份工作,不论在最初的时候,你是因为喜欢还是被动接受,或多或少的都会成为你一段时间内为之奋斗的事业。边工作边迷茫也许是大多数人的常态,觉得这份工作不适合自己,可又不知道应该去做什么;喜欢着自己的工作,却又不知道怎么进一步提
整理 | 刘静出品 | CSDN(ID:CSDNnews)学位高就能够拿高薪?我们的薪资与全球其他国家或地区的同行相比中间有多大的差距?Hired 近日发布的 《2019 年度薪酬状况报告》 解答了技术者们的诸多疑问。该报告聚焦于全球 13
程序员是21世纪比较吃香的工作。程序员工资高还不需要和复杂的社会打交道。那么怎么成为一名程序员?当程序员需要学什么?怎么成为一名程序员?【有明确的职场定位】怎么成为一名程序员?程序员也分为很多种,使用的软件和工作范围也不同。想当程序员,就要
在职场中,我们应该追寻一种平等关系,也就是说公司看中求职者的能力,求职者希望公司给予自己满意的薪资和发展空间。因此,面试是选择和被选择的关系,拒绝和接受都是很正常的事情,而非一方的强人所难或是“王婆卖瓜”行为。近日,一名程序员在求职过程中由
从业一开始,加班就是常态很多人都说这个程序员的工资比较高,其实这种背后的心酸,其实很少人知道。就拿我来说吧其实我工作了有七八年,记得刚工作那个时候,天天加班的话,就是白天睡觉,晚上加班,当时其实也没什么经验,就是只是凑人数嘛。当时我们项目经
在目前互联网行业,计算机领域都离不开编程,程序员也受市场的大量需求,而且目前程序员的薪酬普遍很可观,在北上广深等一线城市,程序员的薪酬基本都是上万,两三万一月的都有的是,甚至很多都直接讲年薪,程序员在目前还是比较吃香的职的业。那么我们学怎样
程序有问题时不要担心。如果所有东西都没问题,你就失业了在我的编程生涯中,我碰到过很多奇奇怪怪的对手和同盟。我把这些编码战士们分成五类,有些人是你队伍中的好伙伴,有些人则是捣蛋者,让你的每一个计划都完不成。不管怎么说,他们在软件开发的诸神殿上
不是每一个写代码的都是程序员。这里,我把程序员定义为以编程为生的人。我认为世界上存在四类程序员:科学家、码农、专家和工匠。下面我一一介绍自己的观点。科学家,与其说他们是程序员,不如说他们是数学家。他们发明了各种理论、算法和术语,教科书上那深
网友一:我曾经招过的学生,后来进入了BAT的,各电商平台的,创业公司技术总监等等,现在很大部分都年薪都在30~40万,而且单身不少。因为我对他们比较熟悉,这里说说我的看法。单身的主要原因:1.工作忙碌,没时间谈恋爱。达到40万年薪的程序员工
要想成长为一名优秀的程序员,其过程是艰巨的,其道路是漫长的。不经过悉心栽培,花儿开不出鲜艳的花朵;不经过时间的历练,幼苗长不成参天大树。在软件行业更是如此。程序员必须具备的性格特点最基本的要求是能自主地编程。只有在经过多年的学习实践之后,我