`
landmine
  • 浏览: 95052 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

全面分析持续集成优缺点(2)

阅读更多

持续集成的关键是自动化。绝大多数的集成都可以而且应该自动完成。读取源代码、编译、连接、测试,这些都可以自动完成。最后,你应该得到一条简单的信息,告诉你这次创建是否成功:"yes"或"no"。如果成功,本次集成到此为止;如果失败,你应该可以很简单地撤消最后一次的修改,回到前一次成功的创建。在整个创建过程中,完全不需要你动脑子。

  如果有了这样一套自动化过程,你随便想多频繁进行创建都可以。唯一的局限性就是创建过程本身也会消耗一定的时间。(译注:不过与捉虫所需的时间比起来,这点时间是微不足道的。) [Page]

一次成功的创建是什么样的?

  有一件重要的事需要确定:怎样的创建才算是成功的?看上去很简单,但是如此简单的事情有时却会变得一团糟,这是值得注意的。有一次,Martin Fowler去检查一个项目。他问这个项目是否执行日创建,得到了肯定的回答。幸亏Ron Jeffries也在场,他又提了一个问题:"你们如何处理创建错误?"回答是:"我们给相关的人发一个e-mail。"实际上,这个项目已经好几个月没有得到成功的创建了。这不是日创建,这只是日创建的尝试。

  对于下列"成功创建"的标准,我们还是相当自信的:

  所有最新的源代码都被配置管理系统验证合格

  所有文件都通过重新编译

  得到的目标文件(在我们这里就是Java的class文件)都通过连接,得到可执行文件

  系统开始运行,针对系统的测试套件(在我们这里大概有150个测试类)开始运行

  如果所有的步骤都没有错误、没有人为干涉,所有的测试也都通过了,我们就得到了一个成功的创建

  绝大多数人都认为"编译+连接=创建"。至少我们认为:创建还应该包括启动应用程序、针对应用程序运行简单测试(McConnell称之为"冒烟测试":打开开关让软件运行,看它是否会"冒烟")。运行更详尽的测试集可以大大提高持续集成的价值,所以我们会首选更详尽的测试。

单一代码源

  为了实现每日集成,任何开发者都需要能够很容易地获取全部最新的源代码。以前,如果要做一次集成,我们就必须跑遍整个开发中心,询问每一个程序员有没有新的代码,然后把这些新代码拷贝过来,再找到合适的插入位置……没有什么比这更糟糕的了。

  办法很简单。任何人都应该可以带一台干净的机器过来,连上局域网,然后用一条命令就得到所有的源文件,马上开始系统的创建。

  最简单的解决方案就是:用一套配置管理(源代码控制)系统作为所有代码的来源。配置管理系统通常都设计有网络功能,并且带有让开发者轻松获取源代码的工具。而且,它们还提供版本管理工具,这样你可以很轻松地找到文件以前的版本。成本就更不成问题了,CVS就是一套出色的开放源代码的配置管理工具。

  所有的源文件都应该保存在配置管理系统中。我说的这个"所有"常常比人们想到的还要多,它还包括创建脚本、属性文件、数据库调度DLL、安装脚本、以及在一台干净的机器上开始创建所需的其他一切东西。经常都能看到这样的情况:代码得到了控制,但是其他一些重要的文件却找不到了。

  尽量确保所有的东西都保存在配置管理系统的同一棵代码源树中。有时候为了得到不同的组件,人们会使用配置管理系统中不同的项目。这带来的麻烦就是:人们不得不记住哪个组件的哪个版本使用了其他组件的哪些版本。在某些情况下,你必须将代码源分开,但是这种情况出现的几率比你想象的要小得多。你可以在从一棵代码源树创建多个组件,上面那些问题可以通过创建脚本来解决,而不必改变存储结构。

自动化创建脚本

  如果你编写的是一个小程序,只有十几个文件,那么应用程序的创建可能只是一行命令的事:javac *.java。更大的项目就需要更多的创建工作:你可能把文件放在许多目录里面,需要确保得到的目标代码都在适当的位置;除了编译,可能还有连接的步骤;你可能还从别的文件中生成了代码,在编译之前需要先生成;测试也需要自动运行。 [Page]

  大规模的创建经常会耗费一些时间,如果只做了一点小小的改动,当然你不会希望重新做所有这些步骤。所以好的创建工具会自动分析需要改变的部分,常见的方法就是检查源文件和目标文件的修改日期,只有当源文件的修改日期迟于目标文件时,才会重新编译。于是,文件之间的依赖就需要一点技巧了:如果一个目标文件发生了变化,那么只有那些依赖它的目标文件才会重新编译。编译器可能会处理这类事情,也可能不会。

  取决于自己的需要,你可以选择不同的创建类型:你创建的系统可以有测试代码,也可以没有,甚至还可以选择不同的测试集;一些组件可以单独创建。创建脚本应该让你可以根据不同的情况选择不同的创建目标。

  你输入一行简单的命令之后,帮你挑起这副重担常常是脚本。你使用的可能是shell脚本,也可能是更复杂的脚本语言(例如Perl或Python)。但是很快你就会发现一个专门设计的创建环境是很有用的,例如Unix下的make工具。

  在我们的Java开发中,我们很快就发现需要一个更复杂的解决方案。Matt用了相当多的时间开发了一个用于企业级Java开发的创建工具,叫做Jinx。但是,最近我们已经转而使用开放源代码的创建工具Ant(http://jakarta.apache.org/ant/index.html)。Ant的设计与Jinx非常相似,也支持Java文件编译和Jar封装。同时,编写Ant的扩展也很容易,这让我们可以在创建过程中完成更多的任务。

  许多人都使用IDE,绝大多数的IDE中都包含了创建管理的功能。但是,这些文件都依赖于特定的IDE,而且经常比较脆弱,而且还需要在IDE中才能工作。IDE的用户可以建立自己的项目文件,并且在自己的单独开发中使用它们。但是我们的主创建过程用Ant建立,并且在一台使用Ant的服务器上运行。

自测试的代码

  只让程序通过编译还是远远不够的。尽管强类型语言的编译器可以指出许多问题,但是即使成功通过了编译,程序中仍然可能留下很多错误。为了帮助跟踪这些错误,我们非常强调自动化测试--这也是XP提倡的另一个实践。

分享到:
评论

相关推荐

    综合论述SSH的优缺点

    标题“综合论述SSH的优缺点”指的是对Secure Shell(SSH)协议的全面分析,包括它的优点和不足。SSH是一种网络协议,用于安全地远程登录到服务器,执行命令,传输数据,以及在不安全的网络环境中提供加密通信。SSH...

    bk-ci蓝鲸持续集成平台 v1.14.0.zip

    对于计算机案例研究,可以对比分析bk-ci与其他同类工具(如Jenkins、Travis CI)的优缺点,或者探讨其在特定行业的应用情况和效果。模板建站则可能涉及如何利用bk-ci快速搭建和部署网站项目。 总的来说,bk-ci蓝鲸...

    软件工程中的测试自动化与持续集成.pptx

    ### 软件工程中的测试自动化与持续集成 #### 第一章:软件工程中的测试自动化与持续集成 **软件测试的重要性** 软件测试是确保软件质量和可靠性的关键步骤。通过全面而深入的测试,可以在软件发布前发现并修复...

    系统集成项目案例系统集成项目案例

    案例分析可能揭示了在实际操作中如何权衡不同技术的优缺点,以及如何设计出可扩展、可维护的系统架构。 实施阶段通常包括设备采购、安装调试和系统测试。在这一环节,案例可能详细描述了如何进行硬件部署、软件安装...

    ### GitHub: 信息、使用技巧和优缺点

    4. **自动化部署**:结合 GitHub Actions、Travis CI 等持续集成/持续部署(CI/CD)工具,实现自动化构建、测试和部署。这不仅提高了开发效率,还确保了软件质量的一致性和可靠性。 5. **社区参与**:积极参与 ...

    CRM优缺点.pdf

    4. **定制和集成**:不同的企业有不同的需求,系统可能需要定制或与其他业务系统集成,这可能带来复杂性和额外成本。 5. **持续维护和升级**:CRM系统需要持续的维护和升级,以应对市场变化和技术进步,这也是一项...

    OA厂商优缺点 方面的文档 我在网上找的

    OA厂商众多,各有优缺点,选择合适的OA系统对于企业的数字化转型至关重要。以下是对一些常见OA厂商的详细分析: 1. 泛微(www.weaver.com) 泛微采用J2EE开发技术,拥有强大的市场地位和理念,其产品功能齐全,品牌...

    BIM软件的优缺点及BIM软件的选择.pdf

    6. **可持续性分析:** 可进行能源效率、环境影响等分析,促进绿色建筑的发展。 7. **施工模拟:** 可以模拟施工过程,优化施工计划。 **BIM软件的缺点:** 1. **学习曲线陡峭:** 对用户的技术要求较高,需要专门...

    淘宝网产品优缺点分析报告,抛砖引玉.ppt

    作为中国网络卖家和购物者的首选平台,淘宝网凭借其独特的战略和产品特性,成功地构建了一个全面的商业生态系统。 淘宝网的战略定位是电子商务基础服务提供商,它的市场策略主要针对卖家和买家。对卖家,淘宝采取...

    【淘宝网产品优缺点分析报告】.pptx

    综上所述,淘宝网通过其全面的产品策略和优秀的交易保障制度,成功地建立了中国最大的网络零售市场,吸引了大量买家和卖家,并持续推动着中国电子商务的发展。同时,其开放的API也为第三方开发者提供了创新和拓展...

    2014年上半年系统集成项目管理工程师案例分析考试学习重点

    每种模型都有其适用场景与优缺点,文章中简要介绍了这些模型的基本概念及其在项目管理中的应用。 - **知识点五:沟通管理** 沟通管理对于项目的成功同样至关重要。有效的沟通能够确保团队成员之间信息的准确传递...

    2021-2025年中国集成电路制造行业调研及投资战略研究报告.pdf

    7. 集成电路制造行业投资战略的类型与选择:报告详细讨论了企业在投资战略中的各种选择,包括重点投资战略、稳定型投资战略和紧缩型投资战略,并分析了其优缺点。 8. 投资战略选择的原则与注意事项:报告探讨了企业...

    电子功用-数字集成电路自动测试系统

    4. 测试策略与方法:讨论如何选择合适的测试模式,包括边界扫描测试、功能测试、静态时序分析等,并分析不同测试方法的优缺点。 5. 故障模型和检测覆盖率:介绍常见的故障类型,如短路、开路、参数漂移等,以及如何...

    2021-2025年中国集成吊顶行业调研及社交媒体营销战略研究报告.pdf

    本报告基于社交媒体的内涵、特点、优缺点,从营销概念和特点出发,结合微信营销案例,分析了社交媒体营销的具体应用和传播策略,包括品牌展示、客户维护、业绩提升、服务改善和形象宣传。而传播策略方面则着重于情感...

    电子功用-用于太阳能电池模块的集成背板

    集成背板的材料选择通常包括聚氟乙烯(Teflon)、聚酯(PET)、聚酰胺(PA)和氟化乙丙烯(FEP)等,这些材料各有优缺点,选择时需根据实际应用环境和成本考虑。 此外,集成背板的设计也至关重要,包括背板的厚度、...

    系统集成项目管理工程师

    - **典型架构**:如客户端/服务器架构、分层架构、微服务架构等,每种架构都有其适用场景和优缺点。 - **软件架构设计方法**:包括自顶向下、自底向上、基于模式的设计等,选择合适的方法对于构建稳定可靠的系统至关...

    软件及系统集成行业客户满意度调查问卷.doc

    在软件研发业务部分(问题8-9),调查问卷关注了软件产品的来源渠道和质量评价,这有助于企业了解产品推广的有效途径以及产品本身的优缺点,以便优化产品开发和市场营销策略。 综上所述,这份调查问卷旨在全面评估...

    系统集成项目管理工程师知识要点一览

    它包括系统开发审计、数据中心和网络通信设施的结构审计、支持其他审计工作、提供增值服务、灾难恢复和业务持续计划审计、系统安全审计、网站信息审计、全面控制审计、系统运营效能审计、投资回报率审计以及供应商...

    jbpm选择理由及其优势

    8. **JavaEE标准接口集成**:预留了WebService、JCA、JMS等JavaEE标准接口,使得jBPM能够轻松地与标准JavaEE程序集成,增强了系统的互操作性。 9. **跨平台能力**:作为完全的Java工作流引擎,jBPM可以无缝移植到...

Global site tag (gtag.js) - Google Analytics