题
目前,我们的组织没有实行持续集成。
为了让我们启动并运行 CI 服务器,我需要生成一份文档来证明投资回报。
除了通过尽早发现和修复错误来节省成本之外,我很好奇我可以将其写入本文档的其他好处/节省。
解决方案
我喜欢 CI 的第一个原因是它有助于防止开发人员检查损坏的代码,这有时会削弱整个团队。想象一下,如果我在出发度假之前进行一次涉及某些数据库架构更改的重大签入。当然,在我的开发盒上一切正常,但我忘记签入数据库模式更改脚本,这可能很重要,也可能不那么简单。好吧,现在存在涉及数据库中新/更改字段的复杂更改,但第二天在办公室的人实际上没有人拥有该新架构,因此现在整个团队都陷入困境,而有人正在考虑重现您已经完成的工作,并且只是忘了签到。
是的,我使用了一个特别令人讨厌的数据库更改示例,但它实际上可以是任何东西。也许使用一些电子邮件代码进行部分签入,然后导致您的所有开发人员向您的实际最终用户发送垃圾邮件?你命名它...
因此,在我看来,避免其中一种情况将使这种努力的投资回报率很快得到回报。
其他提示
如果您正在与标准项目经理交谈,他们可能会发现持续集成在简单的投资回报率方面有点难以理解:对于给定的美元投资,他们会得到什么实物产品并不明显。
以下是我学会的解释方法:“持续集成消除了项目中的所有风险。”
风险管理 对于项目经理来说,这是一个真正的问题,这超出了软件工程类型的正常范围,他们花更多的时间编写代码,而不是担心金钱如何花掉。与这类人有效合作的一部分是学习用他们可以理解的方式表达我们所知道的好事。
以下是我在此类对话中提出的一些风险。请注意,对于明智的项目经理来说,我已经在第一点之后赢得了争论:
- 整合风险:在基于持续集成的构建系统中,诸如“他在回家度长周末之前忘记签入文件”之类的集成问题不太可能导致整个开发团队失去整个周五的工作量。避免发生此类事件为项目节省的成本 = 团队人数(由于坏人忘记签到而减去 1 人)* 每个工作日 8 小时 * 每个工程师的小时费率。在这里,这相当于数千美元不会计入该项目。投资回报率获胜!
- 回归风险:通过在每次构建后运行的单元测试/自动测试套件,您可以降低代码更改破坏正常工作的风险。这是更加模糊和不确定的。然而,您至少提供了一个框架,其中一些最无聊和最耗时(即昂贵)的人工测试被自动化取代。
- 技术风险:持续集成还为您提供了尝试新技术组件的机会。例如,我们最近发现 Java 1.6 update 18 在部署到远程站点期间在垃圾收集算法中崩溃。由于持续集成,我们非常有信心回退到更新 17 很有可能在更新 18 无法发挥作用的情况下发挥作用。这类事情很难用现金价值来表达,但你仍然可以使用风险论点:项目的某些失败=糟糕。优雅的降级=好多了。
CI助攻问题的发现。测量的时间量目前,它需要打破探索建立或代码中的主要缺陷。乘法由成本来公司利用该时间帧期间每个代码显影剂。乘上时间断裂次数年内发生。
有你的电话号码。
每一个成功的构建是一个候选版本 - 这样你就可以提供更新和bug修复更快
如果您的构建过程的一部分产生一个安装程序,这允许快速部署周期为好。
从 维基百科:
- 当单元测试失败或出现错误时,开发人员可以将代码库恢复到无错误状态,而无需浪费时间调试
- 开发人员不断检测和修复集成问题 - 避免在发行日期时进行最后一刻的混乱(当每个人都试图检查其略微不兼容的版本时)。
- 损坏/不兼容代码的早期警告
- 冲突变更的早期预警
- 立即对所有更改进行单元测试
- 用于测试、演示或发布目的的“当前”版本的持续可用性
- 直接向开发人员反馈他们正在编写的代码的质量,功能或全系统影响
- 频繁的代码签到推动开发人员创建模块化,较不复杂的代码
- 由自动测试和CI产生的指标(例如代码覆盖,代码复杂性和功能完整的指标)的重点开发人员对开发功能,质量代码和帮助在团队中开发动量
- 最佳实用性所需的完善的测试套件
我们使用 CI(一天两次构建),它为我们节省了大量时间,使工作代码可用于测试和发布。
从开发人员的角度来看,当自动构建结果通过电子邮件发送给全世界(开发人员、项目经理等)时,CI 可能会令人生畏。等),说: “加载‘XYZ.dll’的 DLL 构建失败时出错。” 而你是先生。XYZ 他们知道你是谁:)!
下面是我的例如,从我自己的经验...
我们的系统中有多个平台和配置有超过70工程师上相同的代码库的工作。我们从60%左右的构建成功某处不太常用的CONFIGS,85%为最常用的遭遇。有电子邮件的约编译错误或其他故障每天的基础上一个恒定洪水。
我做了一些粗略的计算和估计,我们失去了一个小时每程序员每天不好的建立,其总计每天工作近10人天的平均值。这并不因素发生在迭代时间成本当程序员拒绝同步到最新的代码,因为他们不知道,如果它的稳定,即成本我们甚至更多。
部署由Team城市管理构建服务器的机架后,我们现在看到的所有的configs的98%的平均成功率,在系统中的平均编译错误停留数分钟而不是数小时,最我们的工程师都在现在舒适的住宿最新版本的代码。
在一般我会说,我们的总储蓄的保守估计是大约的时间为6个月的人在过去三个月的项目与先前部署CI三个月的数字比较。这种说法已经帮我们争取资源,扩大我们的构建服务器,并集中更多的时间工程师额外的自动化测试。
我们的最大增益,距离总是具有用于QA每晚构建。在我们的旧系统中的每个产品,至少每周一次,将在凌晨2点发现有人在恶意代码已检查。这导致了QA没有每日构建与的补救办法是测试发送发行工程的电子邮件。他们将诊断问题并联系开发。有时,它花了,只要在中午之前QA竟然出现了一些与工作。现在,除了有一个良好的安装每一个夜晚,我们实际上对虚拟机的所有不同的支持的配置每个夜晚的安装。所以,现在当QA进来,他们可以开始在几分钟内测试。现在,当你想到的老办法,QA进来抓起安装,解雇了所有的虚拟机,安装了它,然后开始测试。我们保存QA每个配置大概15分钟的测试上,每QA人。
有免费提供的CI服务器,以及免费的构建工具,如恶性。你可以实现它在你的dev的盒子,发现的好处。
如果你使用源代码控制和缺陷跟踪系统,我想,始终是第一个bug报告(分钟内每办理入住手续后)将是非常引人注目的。再加上减少自己的错误率,你可能不得不出售。
投资回报率实际上是提供客户想要的东西的能力。这当然是非常主观的,但是当在最终客户的参与下实施时,您会发现客户开始欣赏他们所得到的东西,因此您在用户接受期间往往会看到更少的问题。
- 会节省成本吗?也许不会,
- 项目在UAT期间会失败吗?绝对不,
- 该项目会在这期间关闭吗?- 当客户发现这不会产生预期结果时,很有可能。
- 您会获得有关该项目的实时真实数据吗 - 是
因此,它有助于更快地失败,从而有助于更早地降低风险。