跳转到主要内容

保存的帖子

是基本开发人员设置的CI部分吗?

Dave Nicolette |龙头
戴夫尼科尔特 高级顾问
读: 是基本开发人员设置的CI部分吗?

我们的一些人在龙舌兰一直在谈论如何最好地在客户环境中介绍技术实践和工具,这些环境并不完全在该地区最新。我们一直在通过如何在我们的模型专注的结构,治理和度量的改进方面对准技术改进。一个讨论点是延续持续整合(CI)的适当时间。

有些人觉得这是一个先进的实践,这将是根据敏捷和精益学校思考的轻量级方法来掌握的新手球队。根据我们的说法,他们觉得将CI带入Basecamp 2或3附近的图片中的图片。远征模型组织转型。That’s the time when, from a process and governance point of view, organizations are beginning to get significant traction, based on the foundation of stabilizing, visualizing, and measuring their current state on the journey from zero to Basecamp 1. Coming from a technical background myself, I favor introducing CI very early; I’m not convinced it has to wait for the organization to reach a high level of maturity with respect to process.

那天晚些时候,我正在家里做一个个人的业余项目。关于CI的讨论我还记忆犹新,我意识到我在创建一个新项目的时候有建立CI的习惯。我碰巧在编辑一个。travis。这个想法一闪过我的脑海。

我将CI视为常规,基准的一部分我的开发环境。它很容易做到,价值如此之大(特别是为了避免在我的机器上工作问题),这是一个禁智的人。这开始我思考哪些工具和设施是开发人员的工作环境的基础,并且是可选或高级的,原因以及这些事情多年来的改变。

开发人员认为他们需要的工具似乎主要由四个因素决定:

  • 他们正在研究的解决方案的特点
  • 他们使用的开发方法和技术
  • 实际使用哪种工具
  • 我们所在的年份(方法和工具的发展)

第一点可能很快演变成大量的选择。不同类型的解决方案可能需要非常不同的开发设置。例如,要开发嵌入式应用程序,您需要一些与一般业务应用程序开发无关的东西。亚博vip9通道为了简单起见,我们只关注一般的业务应用程序开发。亚博vip9通道

我们工作的方式也有助于决定我们所需的工具。

最后,当然,我们只能使用任何我们能掌握的工具或为自己建造的工具,无论如何什么我们想使用的方法。

让我们通过查看一些简化的例子来探索问题。

示例1:单片应用,传统方法,主流堆栈

假设您是在C#中支持Microsoft .NET解决方案的团队中的开发人员。广泛地说,该应用程序是“单片”的意义上,所有组件都是相同源代码库的一部分,并且整个解决方案都将作为单个单元部署到服务器。

通过“传统方法”我的意思是以下:您通常不成对或团体工作,而是单独使用。此外,您不处理全面的测试或部署。有独立的团队致力于这些功能。他们也可以支持其他开发团队,除了你的情况。

你的观点可能不同,但对我来说,这些特征暗示了以下类型的工具对开发人员是有用的:

  • 智能代码编辑器,“知道”c#的语法,并可以提供提示,以完成方法调用和样板代码结构
  • 调试器,帮助追踪正在开发的代码中的次要问题
  • 一个集成开发环境(IDE),它可以帮助您识别代码库中的源代码级依赖项,定位源文件,以及处理大型代码库。该工具通常还包括编辑器和调试器。

由于您的团队使用传统的开发方法,您还需要工具来帮助:

  • 遵守编码标准
  • 坚持建筑指南
  • 遵守可用性指南
  • 适当调查在单元测试中

考虑到第三点,工具可用性,我们发现有强大而成熟的工具可用于支持所有这些需求。Microsoft Visual Studio提供了智能编辑器,调试器,编译器和方法来应对大代码库中的众多源级依赖项。Team Foundation Server或VSTS可以配置为支持称为“门控登记”的登记策略。除非遵循某些规则,否则这是一种低信任策略,它使用静态代码分析(主要是样式检查器)来阻止提交。

程序性地,门控办理登机手续通常由团队中指定的“技术领导”的视觉检查,通常被称为“代码审查”。代码审查也很有用,因为个人开发人员独自工作,并且在代码审核之前,没有人会注意到小错误。即便如此,风险很小问题将被忽视,因为审稿人在此时没有积极参与设计和代码过程。然而,缺乏当代良好做法的代码审查可能是唯一可用的安全网。

从该示例中概括,使用传统方法支持单片应用程序的基本开发人员设置将包括:

  • 具有良好的调试器和功能的功能丰富的IDE,可以帮助使用源级依赖性的大型复杂的代码基础
  • 一个版本控制系统和旨在根据不同访问权限进行细分功能的版本控制系统和连续集成服务器,以帮助保护系统免受开发人员的保护
  • 减轻不受信任和低技能开发人员的损害的登记程序预计每次触摸任何东西都会导致

示例2:MicroServices应用程序,当代方法,主流堆栈

当我们使用不同的开发方法时使用不同的架构的解决方案时,基本开发人员设置是否更改?让我们考虑一个基于Ruby的微服务解决方案,该解决方案支持使用当代开发方法的团队。这里,解决方案分为多个小型代码基础。即使所有这些都包含在相同的版本控制目的内,也没有解决方案的不同组件之间的源级依赖性。将常见代码分为可重用的库(Ruby Gems,在此示例中)。

我所说的“当代方法”是指开发人员大部分时间都以协作的方式工作(结对编程和/或群体编程),而个体工作是例外的。它还建议采用严格的测试优先的方法来修改代码,并强烈强调所有抽象级别的测试自动化。该团队独立于组织中的其他团队处理所有测试、服务器配置和部署。使用了轻量级、高信任的签入策略。事情的设置是这样的,它很容易从错误中恢复,而不是试图防止所有错误。

支持此方案的基本工具可以包括:

  • 轻量级,低尺寸的文本编辑器,具有一些文本突出显示和完成功能
  • 旨在支持在同一源模块上工作的多个人员频繁检查更改的版本控制系统
  • 支持可执行的微测试和存根/模拟
  • 理想情况下,将受影响的Microtist案例自动执行为代码(例如,为Ruby或Infinitest for Java)进行更改
  • 样式检查和一般静态代码分析工具
  • 持续集成(CI)服务器
  • 一个运行时调试器,旨在支持分布式微服务
  • 支持自动部署的工具
  • 用于监控生产环境的工具

您可以看到两种方案,我们探讨了迄今为止呼叫非常不同的基线开发人员设置。在第二个方案中,我们不需要嵌入服务器的重量级IDE,并且可能每天挂起并崩溃多次。我们不需要IDE功能来处理复杂的源级依赖项,因为我们的解决方案架构消除了该问题。我们不需要我们的工具来试图保护我们的代码;相反,我们需要允许我们完成的工具。

传统方法的另一个方面在尝试使用一些当代实践的团队中变得很明显,特别是可执行的单元检查(或“单元测试”)。通常的做法是从之内IDE。对于C#示例,它将运行NUnit或MSTEST案例(或XUNIT.NET,如果您不介意乘坐出血边缘)。Java开发人员将在Intellij,Eclipse,NetBeans或其他IDE中运行JUnit或Testng案例中的相同做法。

当代的良好实践是尽量减少开发环境和目标环境之间的差异。开发人员通常在本地环境中运行“批”构建,其方式与CI服务器在签入后运行构建的方式完全相同。这有助于减少集成期间以及测试和部署后期阶段的意外情况。因此,当代开发方法不需要IDE内单元测试的“重量级”支持。一个功能齐全的文本编辑器就足够了。

在过程方面,我们不需要对封闭签入过程的支持,因为我们使用高信任策略。我们让事情变得有弹性和可恢复,而不是僵化。我们不需要正式的代码评审,因为我们的代码在工作时(通过结对和/或分组)会不断地被评审。出于同样的原因,我们不需要在团队中指定技术领导;我们可以成为专业人士。我们不需要集成调试器,因为我们使用测试优先的方法来更改代码;当修改单个微服务的源代码时,我们很少(如果有的话)不得不求助于使用调试器。调试的挑战发生在微服务之间的交互中,而不是在任何单个微服务的代码中。

另一方面,我们的开发环境中需要有工具,这些工具在第一场景中不必要。我们处理自己的测试和部署,因此我们需要工具旋转测试环境,按需,创建和管理测试数据,并将更改部署到生产(或至少到暂存环境)。我们还需要工具来监控生产环境,以便我们可以正确地支持它。

因此,我们支持的解决方案的性质以及我们用于支持的方法是确定包含“基本开发人员设置”的工具的因素。当我们从单片移动到基于服务的解决方案架构时,我们发现我们需要较少的重量级IDE和编辑器,但同时更广泛的工具来支持落入开发团队的额外任务。

示例3:遗留应用程序,当代方法,遗留堆栈

当我们想要将当代方法应用于旧平台上运行的现有代码基础时,呢?

有关讨论目的,让我们选择一个遗留平台。最广泛使用的是IBM大型机平台。现有代码的最广泛应用的应用程序编程语言是COBOL。

我们需要使用什么样的开发人员设置,我们需要使用当代方法来支持IBM大型机上的现有COBOL代码库?具有此平台的主要挑战是工具可用性。大型机平台或在COBOL语言中没有任何固有的,可以排除使用当代的开发方法。

传统上,开发人员使用一个相对基本的文本编辑器,称为在大型机平台上运行的OEdit。基于终端仿真软件存在替代方法,使您能够在桌面或笔记本电脑上编辑文件,但总的来说,开发人员不会使用富有特色的IDES在这个平台上工作。

大型机软件供应商一直在努力解决工具问题。我不会尝试提供全面的产品列表,但是多个例子是Compuware的Topaz Workbench和IBM的理性开发人员。

虽然供应商正在整理详细信息,以使其产品更轻,更加可用,但我一直在为大型机COBOL工作设置我的开发环境,如下所示:

  • 本地虚拟机,运行Linux,隔离开发环境
  • Bitbucket for Version Control,因为您免费获得私有呼气,而且这不是公共代码
  • Gnucobol(使用IBM兼容性支持开源COBOL编译器)
  • shell脚本以运行ftp命令传输文件并启动构建和测试作业
  • 平台手工轧制代码可以解决复制依赖项和驱动FTP传输
  • 开源COBOL MICROTENTING框架(COBOL单元测试
  • 平台手工滚动JCL和光编码,以支持批量测试运行

仍然缺少:持续集成,自动部署和生产系统监控。由于公司的典型组织顾虑足够大而具有大型机系统,这些功能通常不会与应用程序开发团队的工作集成。

一些现代开发实践在大型机环境中很容易实现。还记得以与“真正的”构建相同的方式运行本地构建的要点吗?这在大型机环境中是很自然的,因为我们不必打破在IDE中运行微测试的习惯。采用当代的协作方法,如结对和群聚,也没有技术障碍。这些都是技术无关的。

关键是在那里到达那里的实际方法,或者在那里的地方,即使我们支持最初设计的单片并且在尚未完整工具支持当代开发方法的系统上运行的应用程序也是如此。

结论

二十年前,CI可能只不过是前瞻性人们的眼中的闪闪发光。十年前,人们说CI是一种练习而不是工具。五年前,CI是一个“先进”的实践,许多发展团队没有使用。

我认为这是公平的说,截至2017年,这是合理的,以考虑CI是几乎所有环境的基本开发设置的一部分,以及几乎所有类别的应用程序开发。关于它的新的,实验或“先进”,不再有任何东西。对于连续递送(CD)的新出现实践而言,当要使用CD时,它也是一体的。

下一个>与Tim Wise一起成为敏捷教练

发表评论

您的电子邮件地址将不会被公布。必填字段被标记*