`

软件集成策略故事连载----构建错误是怎么来的

阅读更多

 

3构建错误是怎么来的


    晓川在回到工位的路上,回想着跟老刘的谈话,心中感慨万千。老刘并不是去指责我,甚至不是命令或要求我,而是请我帮忙。对于我不成熟的想法,他没有贬低,甚至没有告诉我应该怎样做,而是让我继续想,提示我要多调查。

回到工位,晓川跟师父聊起这些。师父说:老刘当然没法命令你了。他只是项目经理,不是你部门经理。他要是敢指责你,你就跟咱们领导说,有人给你撑腰。至于他不告诉你该怎么做,那要么是他也不知道,要么是他不愿意从他嘴里说出来。这人一看就是个老油条,你小心点儿。

谢谢师父提醒。

都说公司里面有办公室政治,看来确实是这样啊,晓川心想。师父年长我很多,这方面我要多听听他怎么说。不过,到底为什么构建总是出错呢?老刘说得也对,我得调查分析一下才能知道。

晓 川着手调查。就以上个星期刚做完的集成为例吧。每次构建出错,我是定位到出错的源文件,然后通过源代码版本控制工具查一下这个文件昀近是谁动过,然后就找 相应的程序员去改正,然后把改正直接检入到集成分支。嗯,那我去看一下在集成期间,是谁把改正检入到集成分支上的,就能知道是谁的提交造成了问题。

晓川去查看源代码版本控制工具的版本库中集成分支上昀近所做的改动。咦,都是晓川改的……哦,是因为程序员都是跑到我的计算机上改的,所以都是以我的名义检入的。唉,这么查,查不出来了。

晓川只好根据每次改动所改的具体文件去查。因为修改这个文件,让编译能通过,那意味着这个文件的前一次改动是有问题的。这样,再去查这个文件当初是谁在哪个任务分支上改的,就能知道是谁在哪儿惹的祸了。

就这样,晓川用了大半天的时间,到快下班的时候,整理出了一张表,表明这次集成遇到的每个构建错误,各是由谁,在哪个提交中带进来的。下班啦!

下了班,晓川在外面随便买了点东西吃。吃着吃着,觉得不对劲儿。倒不是吃的东西不对劲儿,而是想起了自己下班前的工作成果,觉得不对劲儿。

每 个构建错误,确实是某个提交带来的,确实是因为某个提交的存在而存在的。如果没有那个提交,就没有相应的构建错误。但是,这并不能说,这个提交本身是有问 题的,是有构建错误的。因为程序员在提交前构建的内容,并不是我构建的内容。我构建的内容,是多个提交合并到一起之后的内容。

事实上,这正是老刘质疑我的地方。如果程序员的提交都没问题,你确定你构建的时候就肯定没问题么?我那时也觉得有点不对劲儿,自己的思路不严谨。怎么今天下午调查的时候又给忘了!不成,我得继续研究清楚。不然一周后,新的一轮构建又要开始了,就顾不上了。

星期二上班,晓川来到工位,解锁计算机,开始复现程序员在提交前的环境。这个比较简单,因为程序员工作在任务分支上,在提交前把所有要提交的内容都保存在任务分支上,所以,只要把任务分支末端的源代码取出来,放到本地工作区里,就得到程序员在提交前的环境了。

在这样的工作区里,晓川开始编译构建。构建要一个多小时的时间,因为没法做增量构建,只能全量构建。一个多小时后,构建结果出来了,构建是成功的!

晓川又做了几个试验。结果不尽相同。有的是成功的,有的报错。虽然不能完全确定,但是凭记忆,应该就是在集成分支上构建时报的错。这么说,集成分支上构建报错,有两种可能,一种是提交本身的问题,一种是几个提交相互合并带来的问题。在数量上,大概是一半儿一半儿。

得 到了分析结果,晓川觉得挺有成就感。高兴的时候想想,嗯,集成这工作呢,其实也挺轻松的,因为大部分时间都在等。等着程序员解决代码合并冲突,等着构建。 构建失败了,等着相关的程序员修复。而有时候是大家一起陪着等。等着把提交的代码都合并到集成分支,相关的程序员们才能回家。等出了基线,依赖于基线中内 容的新的任务才能开始。等着等着,时间就等过去了。青春就等过去了。

本文节选自《软件集成策略》一书

董越
.
电子工业出版社出版。

0
2
分享到:
评论

相关推荐

    Node.js-Abstruse-使用Node.js和Docker构建的持续集成平台

    Abstruse - 使用Node.js和Docker构建的持续集成平台

    集成电路掩模设计-基础版图技术

    最后,由于版图设计的复杂性,通常需要借助专业软件来辅助设计和验证。现代的电子设计自动化(EDA)工具能够提供从逻辑设计、电路仿真、版图设计到掩模生成等一系列集成解决方案。这些工具大大简化了版图设计的过程...

    持续集成软件质量改进和风险降低之道.pdf

    总结来说,《持续集成:软件质量改进和风险降低之道》提供了关于如何实施和优化持续集成策略的全面指导,帮助IT团队提升软件开发的效率和质量,降低项目风险,以适应快速变化的市场需求。通过理解和应用书中的原则和...

    软件工程中的系统集成与测试策略

    一个高效的集成与测试策略能够显著减少开发过程中的错误与缺陷,从而确保软件产品能够按时完成并达到预期的质量标准。 **软件集成的定义与分类** - **模块化集成**:这是一种将独立开发的模块按照一定的顺序和逻辑...

    SVN-Jenkins-Nexus-Maven-Tomcat持续集成构建调研报告

    它鼓励团队成员频繁地集成代码,通过自动化构建(包括编译、发布等)来确保代码质量。中科金审科技有限公司的《SVN-Jenkins-Nexus-Maven-Tomcat持续集成发布调研报告》旨在探索如何利用SVN、Jenkins、Nexus、Maven ...

    计算机软件开发规范 GB 8566-88

    遵循《计算机软件开发规范 GB 8566-88》,可以有效减少开发过程中的错误和返工,提高软件的可维护性和可扩展性,同时也有助于提升团队的协作效率,降低项目的整体成本。 总结,GB 8566-88规范是软件开发过程中的...

    软件集成测试工作指南

    ### 软件集成测试工作指南 #### 1. 简介 ##### 1.1 目的 本文档旨在提供一套详细的软件集成测试流程指南,帮助项目开发团队了解如何有效地进行集成测试,确保软件各个组成部分在集成后能够协同工作,满足预期的功能...

    持续集成-Maven-nexus-SNV-jenkins架构

    Jenkins是一个开源的持续集成/持续交付服务器,具有强大的插件生态系统,支持多种构建、测试、部署策略。在持续集成架构中,Jenkins作为核心的自动化工具,负责调度构建任务,执行测试脚本,触发部署流程,并收集...

    集成测试方法及策略

    在软件开发过程中,通常先进行单元测试,确保每个独立的模块都能正常工作,然后通过集成测试来验证这些模块之间的交互是否符合预期。 #### 二、基于分解的集成测试方法 ##### 1. 大爆炸集成 **目的**:尽可能缩短...

    软件测试-集成测试指南

    ### 软件测试-集成测试指南 #### 1. 简介 ##### 1.1 目的 本文档旨在提供一个详尽的指南,帮助项目开发人员理解并执行软件集成测试的过程。集成测试作为软件开发生命周期中的一个重要阶段,确保各个独立的模块在...

    软件工程与软件部署策略.pptx

    ### 软件工程与软件部署策略 #### 第一章:软件工程...以上内容涵盖了软件工程与软件部署策略的基本概念、方法和最佳实践,对于从事软件开发工作的专业人士来说,深入理解这些内容对于提高软件项目的成功率至关重要。

    Hudson 持续集成 continuous-integration-with-hudson 英文版

    Hudson是一种开源的持续集成工具,旨在自动化软件开发过程中的构建、测试及部署等环节。通过Hudson,开发者能够实现自动化的构建流程,确保代码质量的同时提高开发效率。本书《Continuous Integration with Hudson》...

    持续集成自动化构建与测试

    持续集成(Continuous Integration,简称CI)是一种软件开发实践,要求开发人员经常性地将代码提交到共享仓库中,每次提交后都会自动运行构建和测试流程。这种方法能够尽早发现集成错误并减少人工干预的需求,从而...

    持续集成(CruiseControl-2.7.3)

    持续集成是一种软件开发实践,它提倡频繁地将代码变更集成到主分支,以尽早发现并修复错误。CruiseControl是一款开源的持续集成服务器,版本2.7.3提供了自动化构建、测试和部署的功能,帮助团队高效协作,确保软件...

    软件集成.0.8

    ### 软件集成.0.8:如何做软件开发中的持续集成,提高软件质量 #### 关键知识点 **一、软件集成的概念** 1. **组装集成与合并集成:** - **组装集成:** 指的是将独立开发的模块或者组件组合在一起形成完整的...

    chai-webdriver, 为 chai.js 构建更具表现力的集成测试.zip

    chai-webdriver, 为 chai.js 构建更具表现力的集成测试 为链的断言库提供 selenium sugar 。 允许你创建表达式集成测试:expect('.frequency-field').dom.to.contain.text('One time')expect('.

    论文研究-通用测试系统硬件集成模型与集成策略.pdf

    提出了通用测试系统硬件集成的策略问题,给出了系统功能分层描述,建立了数学模型,定义了性能评价指标,并对指标进行了求解,基于此构建了基于遗传算法的硬件集成策略,给出了算法步骤,并以某测试系统的组建为例,...

    持续集成CI-jenkins

    每次集成都会通过自动化构建过程来进行验证,该过程包括编译、发布以及自动化测试等步骤,目的是尽早发现集成错误。 **持续集成的主要目标**: - 减少构建失败的次数并不是其核心目的; - 尽早发现问题,缩短问题...

Global site tag (gtag.js) - Google Analytics