3.构建错误是怎么来的
晓川在回到工位的路上,回想着跟老刘的谈话,心中感慨万千。老刘并不是去指责我,甚至不是命令或要求我,而是请我帮忙。对于我不成熟的想法,他没有贬低,甚至没有告诉我应该怎样做,而是让我继续想,提示我要多调查。
回到工位,晓川跟师父聊起这些。师父说:“老刘当然没法命令你了。他只是项目经理,不是你部门经理。他要是敢指责你,你就跟咱们领导说,有人给你撑腰。至于他不告诉你该怎么做,那要么是他也不知道,要么是他不愿意从他嘴里说出来。这人一看就是个老油条,你小心点儿。 ”
“谢谢师父提醒。 ”
都说公司里面有办公室政治,看来确实是这样啊,晓川心想。师父年长我很多,这方面我要多听听他怎么说。不过,到底为什么构建总是出错呢?老刘说得也对,我得调查分析一下才能知道。
晓 川着手调查。就以上个星期刚做完的集成为例吧。每次构建出错,我是定位到出错的源文件,然后通过源代码版本控制工具查一下这个文件昀近是谁动过,然后就找 相应的程序员去改正,然后把改正直接检入到集成分支。嗯,那我去看一下在集成期间,是谁把改正检入到集成分支上的,就能知道是谁的提交造成了问题。
晓川去查看源代码版本控制工具的版本库中集成分支上昀近所做的改动。咦,都是晓川改的……哦,是因为程序员都是跑到我的计算机上改的,所以都是以我的名义检入的。唉,这么查,查不出来了。
晓川只好根据每次改动所改的具体文件去查。因为修改这个文件,让编译能通过,那意味着这个文件的前一次改动是有问题的。这样,再去查这个文件当初是谁在哪个任务分支上改的,就能知道是谁在哪儿惹的祸了。
就这样,晓川用了大半天的时间,到快下班的时候,整理出了一张表,表明这次集成遇到的每个构建错误,各是由谁,在哪个提交中带进来的。下班啦!
下了班,晓川在外面随便买了点东西吃。吃着吃着,觉得不对劲儿。倒不是吃的东西不对劲儿,而是想起了自己下班前的工作成果,觉得不对劲儿。
每 个构建错误,确实是某个提交带来的,确实是因为某个提交的存在而存在的。如果没有那个提交,就没有相应的构建错误。但是,这并不能说,这个提交本身是有问 题的,是有构建错误的。因为程序员在提交前构建的内容,并不是我构建的内容。我构建的内容,是多个提交合并到一起之后的内容。
事实上,这正是老刘质疑我的地方。“如果程序员的提交都没问题,你确定你构建的时候就肯定没问题么?”我那时也觉得有点不对劲儿,自己的思路不严谨。怎么今天下午调查的时候又给忘了!不成,我得继续研究清楚。不然一周后,新的一轮构建又要开始了,就顾不上了。
星期二上班,晓川来到工位,解锁计算机,开始复现程序员在提交前的环境。这个比较简单,因为程序员工作在任务分支上,在提交前把所有要提交的内容都保存在任务分支上,所以,只要把任务分支末端的源代码取出来,放到本地工作区里,就得到程序员在提交前的环境了。
在这样的工作区里,晓川开始编译构建。构建要一个多小时的时间,因为没法做增量构建,只能全量构建。一个多小时后,构建结果出来了,构建是成功的!
晓川又做了几个试验。结果不尽相同。有的是成功的,有的报错。虽然不能完全确定,但是凭记忆,应该就是在集成分支上构建时报的错。这么说,集成分支上构建报错,有两种可能,一种是提交本身的问题,一种是几个提交相互合并带来的问题。在数量上,大概是一半儿一半儿。
得 到了分析结果,晓川觉得挺有成就感。高兴的时候想想,嗯,集成这工作呢,其实也挺轻松的,因为大部分时间都在等。等着程序员解决代码合并冲突,等着构建。 构建失败了,等着相关的程序员修复。而有时候是大家一起陪着等。等着把提交的代码都合并到集成分支,相关的程序员们才能回家。等出了基线,依赖于基线中内 容的新的任务才能开始。等着等着,时间就等过去了。青春就等过去了。
本文节选自《软件集成策略》一书
董越 著.
电子工业出版社出版。
相关推荐
最后,由于版图设计的复杂性,通常需要借助专业软件来辅助设计和验证。现代的电子设计自动化(EDA)工具能够提供从逻辑设计、电路仿真、版图设计到掩模生成等一系列集成解决方案。这些工具大大简化了版图设计的过程...
遵循《计算机软件开发规范 GB 8566-88》,可以有效减少开发过程中的错误和返工,提高软件的可维护性和可扩展性,同时也有助于提升团队的协作效率,降低项目的整体成本。 总结,GB 8566-88规范是软件开发过程中的...
### 软件测试基础之集成测试:深入解析与实践 #### 集成测试概述 集成测试,作为软件测试的重要组成部分,是在单元测试完成后,将通过单元测试的各个模块按照设计时确定的架构和接口连接起来进行的测试。这个阶段...
### 软件测试-集成测试指南 #### 1. 简介 ##### 1.1 目的 本文档旨在提供一个详尽的指南,帮助项目开发人员理解并执行软件集成测试的过程。集成测试作为软件开发生命周期中的一个重要阶段,确保各个独立的模块在...
在提供的压缩包`cas-overlay-template-5.3.zip`中,我们找到了CAS 5.3版本的源代码模板,这将帮助开发者快速构建自己的CAS服务器,并与Spring Boot集成。下面我们将详细讨论如何理解和利用这些资源。 首先,`cas-...
集成开发环境是程序员进行软件开发的主要工作平台,它整合了代码编辑器、编译器、调试器和各种辅助工具,提供了一站式的编程解决方案。TPC-ZK-II正是这样一款为微机程序设计定制的IDE,旨在简化开发流程,提高开发...
1. **持续集成(CI)**:CI是开发过程中的自动化流程,它要求开发者频繁地将代码提交到共享仓库,并立即通过自动化构建和测试来验证新代码的质量。蓝盾bk-ci提供了一个平台,使得每次代码提交都能触发构建和测试,...
对于VMware ESXi 6.5系统来说,如果在安装过程中遇到“nonetworkadapters”的错误提示,则通常意味着系统未能识别当前硬件的网络适配器。本文将详细介绍如何集成第三方驱动至ESXi 6.5安装包中,以便于成功安装。 ##...
车载软件架构在现代汽车行业中的重要性日益凸显,尤其是在持续集成持续交付(CI/CD)的实践上。CI/CD 是一种提升软件开发效率和质量的方法,通过自动化流程确保软件的频繁迭代和稳定交付。在车载软件领域,由于其...
**UAP-STUDIO 集成开发环境与Eclipse插件详解** UAP-STUDIO(统一应用平台工作室)是一款强大的企业级应用开发工具,它提供了一整套完整的开发、调试、部署解决方案,旨在提高开发效率并降低开发复杂度。Eclipse,...
Jenkins mavn git docker-compose swarm 构建持续集成及一键式部署
集成测试是软件开发过程中一个至关重要的阶段,其目的是在系统组件或模块被组合在一起时发现并修复接口错误、数据流问题和依赖性问题。通过集成测试,可以确保各个模块在集成后能够协同工作,提高软件的整体质量和...
【软件集成测试工作作业流程标准规范】 在软件开发过程中,集成测试是一个至关重要的阶段,它旨在验证各个独立组件在组合后是否能协同工作,确保软件的整体功能和性能满足预期。以下是一份详细的软件集成测试工作...
### 软件测试与持续集成技术教程 #### 第1章 软件测试与持续集成技术介绍 **软件测试概述** - **定义**: 软件测试是对软件应用程序进行实际测试的过程,目的是确保软件的质量和可靠性。 - **重要性**: 通过软件...
jeecg-boot 前后分离 集成Activiti6 页面
它支持多种版本控制系统,如Git、SVN等,并能与其他工具如JUnit、SonarQube等无缝集成,提供丰富的插件来扩展功能。 二、Hudson的安装 1. 环境准备:确保系统已安装Java运行环境(JRE)或Java开发工具集(JDK)。 2...
在Android应用开发领域,持续集成(Continuous Integration, CI)是一个重要的实践,它有助于开发者快速发现并修复代码中的问题,提高软件质量。而“Android-GreenBuild”正是一款专为管理Android应用程序CI构建而...