TDD、重构、持续集成和结对编程等XP(极限编程,eXtreme programming)技术实践支持紧急设计(emergent design),并推进了架构的不断演进。持续集成是持续交付所需的首个实践,即每日都提交到主线。编写干净、考虑周全、测试良好的模块化代码,这是开发人员的最重要技能。

\\

在Agile Summit 2017希腊大会上,ThoughtWorks北美技术负责人Rachel Laycock就敏捷技术实践做了一次演讲。InfoQ将以问答,摘要和文章报道本次会议。

\\

InfoQ采访了Laycock,采访内容涉及演进式架构、持续交付和技术技能等。

\\

InfoQ:您能为我们推荐一些演进式架构的实践吗?并介绍一下您推荐的原因。

\\

\

Rachel Laycock:演进式架构结构引入了一些新的原则。例如,在“最后责任时刻”(The Last Responsible Moment)做出架构决策,使用匹配功能去测试架构决策并尽早解决痛苦点。后者实际上是一种采纳自XP的理论。它提出对于可导致痛苦的事情,要增大做该事的频率。这通常会提高做事自动化的程度,进而消除做事的痛苦。这正是持续交付实践思想的来源。通过进行更频繁地部署,消除了设置和部署环境这一漫长等待时间所带来的痛苦。在做事的过程中,人们创建了新的工具去构建并部署环境。并且使得治理过程等存在延缓的挑战性问题也得以自动化。这样,整个部署过程平淡得就像去点击按钮,而非需要耗费整个周末纠缠于其中。所有这些都是拜痛苦所致。

\\

尽管我们具有这些新的原则,连续交付和XP的实践仍然是相关的和必要的。关键在于底层的特征,包括增量构建、模块化,以及围绕业务能力和实验进行组织等。XP技术实践(如TDD,重构,持续集成和结对编程)对紧急设计的支持,是架构得以随时发展的关键所在。由于我们的架构决策是作为“最后责任时刻”做出的,也是该时刻所需要的,因此我们需要经过充分测试的模块化代码,这样整个团队可以了解如何改进这些代码。这是我们从XP的实践中获得的。对我而言,如果要使用演进式架构,那么持续交付和XP的实践两者是“一并”的,而不是“二选一”的。

\

\\

InfoQ:在持续集成中,有哪些实践已被证明是具有价值的?

\\

\

Laycock:XP的实践支撑了持续交付。在人们开始进行持续交付时,一个着手之处就是创建持续集成的服务器和流水线。持续集成只是一种工具,一种用于实现每日向主线提交的实践。但是,我们要对提交的代码具有信心。如果代码中不存在错误,那么它们是有质量的。为此我们需要一套测试。如果我们在编写代码之后进行连续交付,或者我们处于一种遗留代码的状态,那么其中通常不存在测试,这是解决问题的根源所在。我所看到的一些实例使用了清晰易懂的方式编写代码,这些代码通常都是在TDD实践中编写的。

\\

持续交付解决了最终难题(the last mile problem),它引入了新的工具,创建并存储环境和部署的配置管理。即使在支持这些工具的生态系统中,我们依然可以编写一些测试,并且也应该这样做。在通常情况下,我们可对为配置管理而编写的代码做TDD。因此从根本上说,即使在此类情况下,底层的实践也不会发生改变。

\

\\

InfoQ:对于开发人员,最重要的技术技能有哪些?

\\

\

Laycock: 最重要的技能是能够编写干净,考虑周全、经过充分测试的模块化代码。真正地理解在耦合与凝聚上的挑战。之后,我们可以理解在各种语言上的一些细微差别。虽然语言会发生改变,但是这些基础技能不会发生改变。

\

\\

InfoQ:开发人员应如何提高自身的技术技能?

\\

\

Laycock:关键就是实践、实践、再实践。学习TDD是一件很难的事情,但如果我们坚持实践,我们就会在学习上做得更好,直到使TDD成为我们工作的一种常态。只有这样,我们才有能力在是否要对代码做TDD的问题上做出务实的决定。总体而言,我相信只要做事的方式正确,那么我们就应该执行重构的做法。这对于将来不创造“遗留”代码或“泥球”(Balls of Mud。译者注:指缺乏清晰结构的代码)是至关重要的。泥球将不可避免地延缓慢我们的速度。

\

\\

InfoQ:为立于技术实践的潮头,开发人员应如何做?

\\

\

Laycock:尽管引入了持续交付和DevOps,核心的技术实践并没有发生太大的改变。一旦我们学习会了这些技术,就可以将它们应用于我们所追求的软件设计和架构中,例如DDD、REST和演进式架构。

\

\\

查看英文原文: How Technical Practices Support Evolutionary Architecture and Continuous Delivery

技术实践如何支持演进式架构和持续集成相关推荐

  1. 《持续集成实践指南》第2章 持续集成环境搭建Jenkins+Gitlab+Gerrit

    开发环境: 服务器:Ubuntu Server 20.04 2.1简介 Jenkins是一个独立的开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件 ...

  2. 基于Algolia的NoSQL技术实践及与逐浪CMS的集成分享

    事件缘起 有网友注意到了,最近上线之由逐浪CMS官方团队维护的全新bootstrap v4.0中文镜像与使用手册(网址http://code.z01.com/v4 )的搜索非常快,而且调用的是一个外部 ...

  3. 一个可供创业公司借鉴的持续集成技术实践

    互联网时代,人人都在追求产品的快速响应.快速迭代和快速验证.不论是创业团队还是大中型企业,都在探索属于自己的敏捷开发.持续交付之道.fir.im 团队也在全面实施敏捷,并推出新持续集成服务- flow ...

  4. fir.im 持续集成技术实践

    互联网时代,人人都在追求产品的快速响应.快速迭代和快速验证.不论是创业团队还是大中型企业,都在探索属于自己的敏捷开发.持续交付之道.fir.im 团队也在全面实施敏捷,并推出新持续集成服务 - flo ...

  5. Jekins持续集成在ERP研发中的应用实践

    源宝导读:"持续集成"是敏捷最佳实践中,保证高质量交付的关键环节之一.本文将介绍明源云ERP系统在研发过程中,应用Jekins平台完成持续集成自动构建的实践. 一.认识持续集成 持 ...

  6. MCI:移动持续集成在大众点评的实践

    一.背景 美团是全球最大的互联网+生活服务平台,为3.2亿活跃用户和500多万的优质商户提供一个连接线上与线下的电子商务服务.秉承"帮大家吃得更好,生活更好"的使命,我们的业务覆盖 ...

  7. Jenkins与Docker的持续集成实践

    本文讲的是Jenkins与Docker的持续集成实践[编者的话]持续集成(CI/CD)是一种软件开发实践.用于帮助团队成员频繁.快速的集成,测试他们的工作成果,以尽快发现集成错误. 更频繁.更早的集成 ...

  8. 《持续集成实践指南》第1章 DevOps实践简介

    1.1 Devops概念 DevOps(英文Development和Operations的组合)是开发和运维一体一组过程.方法与系统的统称,用于促进开发(应用程序/软件工程).技术运营和质量保障(QA ...

  9. [独孤九剑]持续集成实践(二)– MSBuild语法入门

    本系列文章包含: [独孤九剑]持续集成实践(一)- 引子 [独孤九剑]持续集成实践(二)– MSBuild语法入门 [独孤九剑]持续集成实践(三)- Jenkins安装与配置(Jenkins+MSBu ...

  10. [独孤九剑]持续集成实践(三)- Jenkins安装与配置(Jenkins+MSBuild+GitHub)

    本系列文章包含: [独孤九剑]持续集成实践(一)- 引子 [独孤九剑]持续集成实践(二)– MSBuild语法入门 [独孤九剑]持续集成实践(三)- Jenkins安装与配置(Jenkins+MSBu ...

最新文章

  1. crashpad 应用程序异常解决方案
  2. 学点Webpack吧
  3. python代码需要背吗-python代码运行需要编译吗
  4. SAP手工传输TP使用方法
  5. vscode 新建cpp文件_利用vscode搭建c
  6. SiteServer CMS 新版本 V6.11(2019年7月1日发布)
  7. from torchcrf import CRF
  8. 五种编程语言解释数据结构与算法——顺序表3(JavaScript与Python语言实现)
  9. 如何为物联网选择微控制器?
  10. python语言的语法_PYTHON语言常用语法摘要
  11. jquery html5引导页,jQuery插件实现的页面功能介绍引导页效果
  12. Spring之AntPathMatcher
  13. java的流套接_Java是什么原因导致网络套接字的流结束?
  14. 使用java命令执行函数反弹windows-shell
  15. java爬虫实例教程_Java爬虫的实例分析
  16. SVN下载安装及入门使用教程,详细到不能再详细了
  17. javascript回调函数详解
  18. 如果有家公司给你4300的工资,每天闲得发慌,朝九晚六,周末双休,你能坚持多久?
  19. stata蒙特卡罗模拟(二)模拟中心极限定理
  20. Java基础—心型代码

热门文章

  1. Spring.Net学习笔记(1)-容器的使用
  2. poj1942——组合数学
  3. 解决0RA-04031故障
  4. Hyper snap
  5. tomcat + apache组合配置
  6. 煤矿行业设备管理系统
  7. numpy.linalg——线性代数运算
  8. IFrame与window对象(contentWindow)
  9. Expected value at 1:0 异常解决方法
  10. 移动应用UI设计模式pdf