精华内容
下载资源
问答
  • 如何使用Web服务进行CRM应用集成 管理资料 近年来企业应用集成(EAI)供应商一直试图解决集成带来的挑战他们推出了一系列的专有适配器和集成服务器 市场研究机构Gartner公司高级分析师Daryl C. Plummer表示Web服务是...
  • 什么是集成测试(集成测试示例教程)

    万次阅读 多人点赞 2019-09-18 20:08:31
    集成测试是为了在集成时测试模块/组件,以验证它们是否按预期工作,即测试单独工作的模块在集成时没有问题。 在使用黑盒测试技术测试大型应用...什么是集成测试? 集成测试的含义非常简单- 将单元测试模块逐个集成...

    集成测试是为了在集成时测试模块/组件,以验证它们是否按预期工作,即测试单独工作的模块在集成时没有问题。

    在使用黑盒测试技术测试大型应用程序时,涉及多个彼此紧密耦合的模块的组合。我们可以应用集成测试技术概念来测试这些类型的场景。

    什么是集成测试?

    集成测试的含义非常简单- 将单元测试模块逐个集成/组合,并将行为测试为组合单元。

    该测试的主要功能或目标是测试单元/模块之间的接口。

    我们通常在“单元测试”之后进行集成测试。一旦创建并测试了所有单个单元,我们就开始组合这些“单元测试”模块并开始进行集成测试。

    该测试的主要功能或目标是测试单元/模块之间的接口。

    首先单独测试各个模块。模块经过单元测试后,逐个集成,直到所有模块都集成在一起,检查组合行为,验证需求是否正确实现。

    在这里我们应该理解,集成测试不会在周期结束时发生,而是与开发同时进行。因此,在大多数情况下,所有模块实际上都无法测试,这就是测试不存在的东西的挑战!

    为何进行集成测试

    我们认为集成测试很复杂,需要一些开发和逻辑技能。确实如此!那么将这个测试集成到我们的测试策略中的目的是什么?

    以下是一些原因:

    1. 在现实世界中,当开发应用程序时,它被分解为更小的模块,并且为每个开发人员分配1个模块。一个开发人员实现的逻辑与另一个开发人员完全不同,因此检查开发人员实现的逻辑是否符合预期并根据规定的标准呈现正确的值变得很重要。
    2. 很多时候,当数据从一个模块移动到另一个模块时,数据的面或结构会发生变化。附加或删除某些值,这会导致后续模块出现问题。
    3. 模块还与某些第三方工具或API进行交互,这些工具或API也需要进行测试,以确保该API /工具接受的数据是正确的,并且生成的响应也是预期的。
    4. 测试中一个非常常见的问题 - 频繁更改需求!:)许多时间开发人员在没有单元测试的情况下部署更改。当时集成测试变得很重要。

    好处

    这种测试有几个优点,下面列出的很少的一部分。

    • 此测试可确保集成模块/组件正常工作。
    • 一旦要测试的模块可用,就可以开始集成测试。它不需要完成其他模块以进行测试,因为Stubs和Drivers可以用于相同的操作。
    • 它检测与接口相关的错误。

    挑战

    下面列出的是集成测试中涉及的一些挑战。

    1. 集成测试意味着测试两个或多个集成系统,以确保系统正常工作。不仅应该测试集成链接,还应该考虑环境进行详尽的测试,以确保集成系统正常工作。
    2. 管理集成测试变得复杂,因为它涉及的因素很少,如数据库,平台,环境等。
    3. 在将任何新系统与遗留系统集成时,需要进行大量的更改和测试工作。在集成任何两个遗留系统时也是如此。
    4. 如果在任何一个系统中进行任何更改都不确定,那么两个不同公司开发的两个不同系统的集成对于其中一个系统如何影响另一个系统是一个巨大的挑战。

    为了最大限度地减少开发系统时的影响,应该考虑很少的事情,例如可能与其他系统集成等。

    集成测试的类型

    下面给出了一种测试集成及其优缺点。

    大爆炸方法:

    Big bang方法一次性集成了所有模块,即它不会逐个集成模块。它会在集成后验证系统是否按预期工作。如果在完全集成的模块中检测到任何问题,则很难找出导致该问题的模块。

    大爆炸方法是一个耗时的过程,找到一个自身有缺陷的模块,因为这需要时间,一旦检测到缺陷,修复相同的方法会花费很高,因为在后期检测到缺陷。

    大爆炸方法的优点:

    • 这对于小型系统来说是一种很好的方法。

    大爆炸方法的缺点:

    • 很难检测出导致问题的模块。
    • Big Bang方法需要所有模块一起进行测试,这反过来会导致更少的测试时间,因为设计,开发,集成将占用大部分时间。
    • 测试仅在一次进行,因此不会孤立地进行关键模块测试。

    集成测试步骤:

    1. 准备集成测试计划。
    2. 准备集成测试场景和测试用例。
    3. 准备测试自动化脚本。
    4. 执行测试用例。
    5. 报告缺陷。
    6. 跟踪并重新测试缺陷。
    7. 重新测试和测试一直持续到集成测试完成。

    测试集成方法

    从根本上说,有两种方法可以进行测试集成:

    1. 自下而上的方法
    2. 自上而下的方法。

    让我们考虑用下图来表述该测试方法:

    自下而上的方法:

    自下而上的测试,从应用程序的最低或最里面的单位开始,逐渐向上移动。集成测试从最低模块开始,逐步向应用程序的上层模块发展。这种集成一直持续到所有模块都集成在一起,整个应用程序作为一个单元进行测试。

    在这种情况下,模块B1C1,B1C2和B2C1,B2C2是经过单元测试的最低模块。模块B1和B2尚未开发。模块B1和B2的功能是调用模块B1C1,B1C2和B2C1,B2C2。由于B1和B2还没有开发,我们需要一些程序或“刺激器”来调用B1C1,B1C2和B2C1,B2C2模块。这些刺激计划称为驱动程序。

    简单来说,DRIVERS是虚拟程序,用于在调用函数不存在的情况下调用最低模块的函数。自底向上技术要求模块驱动程序将测试用例输入提供给被测模块的接口。

    这种方法的优点是,如果在程序的最低单元存在重大故障,则更容易检测到它,并且可以采取纠正措施。

    缺点是在最后一个模块被集成和测试之前,主程序实际上不存在。因此,只会在最后检测到更高级别的设计缺陷。

    自上而下的方法:

    该技术从最顶层的模块开始,逐渐向较低的模块发展。只有顶层模块是单独进行单元测试的。在此之后,下层模块逐个集成。重复该过程,直到所有模块都被集成和测试。

    在我们的图中,测试从模块A开始,下层模块B1和B2逐个集成。现在,较低的模块B1和B2实际上不可用于集成。因此,为了测试最顶层的模块A,我们开发了“ STUBS ”。

    “Stubs”可以称为代码片段,它接受来自顶层模块的输入/请求并返回结果/响应。这样,尽管模块较低,但是不存在,我们能够测试顶层模块。

    在实际情况中,存根的行为并不像看起来那么简单。在这个复杂模块和体系结构的时代,被调用模块大多数时候都涉及复杂的业务逻辑,如连接数据库。因此,创建Stubs变得像真实模块一样复杂和耗时。在某些情况下,Stub模块可能会比受激模块更大。

    Stub和驱动程序都是虚拟代码,用于测试“不存在”模块。它们触发函数/方法并返回响应,并将其与预期行为进行比较

    让我们总结一下Stubs和Driver之间的一些区别:

    StubsDriver
    用于自上而下的方法用于自下而上的方法
    首先测试最顶层的模块首先测试最低模块。
    刺激较低级别的组件刺激更高级别的组件
    较低级别组件的虚拟程序高级组件的虚拟程序

    唯一的变化是这个世界的常数,所以我们有另一种称为“ 三明治测试 ”的方法,它结合了自上而下和自下而上方法的特征。当我们测试像操作系统这样的大型程序时,我们必须拥有一些更有效的技术并增强信心。三明治测试在这里起着非常重要的作用,其中,自上而下和自下而上的测试同时开始。

    集成从中间层开始,同时向上和向下移动。在我们的图中,我们的测试将从B1和B2开始,其中一个臂将测试上部模块A,另一个臂将测试下部模块B1C1,B1C2和B2C1,B2C2。

    由于这两种方法同时开始,这种技术有点复杂,需要更多的人以及特定的技能组合,从而增加了成本。

    GUI应用程序集成测试

    现在让我们谈谈我们如何暗示黑盒技术中的集成测试。

    我们都知道Web应用程序是一个多层应用程序。我们有一个可供用户看到的前端,我们有一个中间层,它有业务逻辑,我们有一些更多的中间层做一些验证,集成一些第三方API等,然后我们有后层,这是数据库。

    集成测试示例:

    我们来看看下面的例子:

    我是一家广告公司的老板,我在不同的网站上发布广告。在本月底,我想看看有多少人看过我的广告以及有多少人点击了我的广告。我需要显示我的广告的报告,并相应地向我的客户收取费用。

    GenNext软件为我和以下开发了这个产品的架构:

    UI - 用户界面模块,对最终用户可见,其中给出了所有输入。
    BL - 是业务逻辑模块,具有所有计算和业务特定方法。
    VAL - 是Validation模块,它具有输入正确性的所有验证。
    CNT - 具有所有静态内容的内容模块,特定于用户输入的输入。这些内容显示在报告中。
    EN - 是Engine模块,该模块读取来自BL,VAL和CNT模块的所有数据,并提取SQL查询并将其触发到数据库。
    Scheduler- 是否根据用户选择(每月,每季度,每半年和每年)安排所有报告的模块
    DB - 是数据库。

    现在,在看过整个Web应用程序的体系结构后,作为一个单元,在这种情况下,集成测试将关注模块之间的数据流。

    这里的问题是:

    1. BL,VAL和CNT模块如何读取和解释在UI模块中输入的数据?
    2. BL,VAL和CNT模块是否从UI接收正确的数据?
    3. BL,VAL和CNT的数据以哪种格式传输到EQ模块?
    4. EQ如何读取数据并提取查询?
    5. 查询是否正确提取?
    6. 调度程序是否获得了正确的报告数据?
    7. EN收到的结果集是否正确并且符合预期?
    8. EN是否能够将响应发送回BL,VAL和CNT模块?
    9. UI模块是否能够读取数据并将其适当地显示到界面?

    在现实世界中,数据通信以XML格式完成。因此,无论用户在UI中输入什么数据,它都会转换为XML格式。

    在我们的场景中,在UI模块中输入的数据被转换为XML文件,该文件由3个模块BL,VAL和CNT解释。EN模块读取由3个模块生成的结果XML文件,并从中提取SQL并查询到数据库中。EN模块还接收结果集并将其转换为XML文件并将其返回到UI模块,该模块以用户可读的形式转换结果并显示它。

    在中间,我们有调度程序模块,它从EN模块接收结果集,创建和调度报告。

    那么整合测试的确在哪里?

    那么,测试信息/数据是否正确流动将是您的集成测试,在这种情况下将验证XML文件。XML文件是否正确生成?他们有正确的数据吗?数据是否正确地从一个模块传输到另一个模块?所有这些都将作为集成测试的一部分进行测试。

    尝试生成或获取XML文件并更新标记并检查行为。这与测试人员通常所做的常规测试非常不同,但这将为测试人员的知识和对应用程序的理解增加价值。

    其他几个样本测试条件可能如下:

    • 菜单选项是否生成正确的窗口?
    • 窗户是否能够调用被测窗口?
    • 对于每个窗口,标识应用程序应允许的窗口的函数调用。
    • 识别从窗口到应用程序应允许的其他功能的所有调用
    • 识别可逆调用:关闭被调用窗口应返回调用窗口。
    • 识别不可逆转的呼叫:在出现被叫窗口之前调用窗口关闭。
    • 测试执行对另一个窗口的调用的不同方式,例如 - 菜单,按钮,关键字。

    启动集成测试的步骤

    1. 了解应用程序的体系结构。
    2. 确定模块
    3. 了解每个模块的功能
    4. 了解数据如何从一个模块传输到另一个模块。
    5. 了解数据如何输入和接收到系统中(应用程序的入口点和出口点)
    6. 隔离应用程序以满足您的测试需求。
    7. 确定并创建测试条件
    8. 一次采取一个条件并记下测试用例。

    集成测试的进入/退出标准

    进入标准

    • 集成测试计划文档已签署并批准。
    • 已经准备好集成测试用例。
    • 测试数据已创建。
    • 开发的模块/组件的单元测试已完成。
    • 所有关键和高优先级缺陷都已关闭。
    • 测试环境设置为集成。

    退出标准:

    • 所有集成测试用例都已执行。
    • 没有关键和优先级P1和P2缺陷被打开。
    • 测试报告已经准备好了。

    集成测试用例

    集成测试案例主要关注模块之间的接口,集成链接,模块之间的数据传输,作为已经过单元测试的模块/组件,即功能和其他测试方面已经涵盖。

    因此,主要思想是测试集成时两个工作模块的集成是否按预期工作。

    对于示例集成Linkedin应用程序的测试用例包括:

    • 验证登录页面和主页之间的接口链接,即当用户输入凭证并记录时,应将其定向到主页。
    • 验证主页和配置文件页面之间的接口链接,即配置文件页面应该打开。
    • 验证网络页面和连接页面之间的接口链接,即单击网络邀请页面上的接受按钮,一旦点击,就会在连接页面中显示接受的邀请。
    • 验证通知页面之间的界面链接并说出恭喜按钮,即单击说恭喜按钮应指向新的消息窗口。

    可以为此特定站点编写许多集成测试用例。以上四点只是了解测试中包含哪些Integration测试用例的一个示例。

    集成是白盒还是黑盒技术?

    集成测试技术可以在黑盒子和白盒技术中统计。黑盒技术是测试人员不需要任何系统内部知识的地方,即不需要编码知识,而白盒技术需要应用程序的内部知识。

    现在,在执行集成测试时,它可能包括测试两个集成Web服务,这些服务将从数据库中获取数据并根据需要提供数据,这意味着可以使用白盒测试技术进行测试,而可以测试在网站中集成新功能使用黑匣子技术。

    因此,集成测试不是黑盒子或白盒技术。

    集成测试工具

    有几种工具可用于此测试。

    以下是工具列表:

    • Rational Integration Tester
    • TESSY
    • Protractor
    • Steam

    系统集成测试

    系统集成测试用于测试完整的集成系统。

    在集成组件之前,模块或组件在单元测试中单独测试。

    一旦测试了所有模块,就可以通过集成所有模块来完成系统集成测试,并对整个系统进行测试。

    集成测试和系统测试之间的区别

    集成测试是一种测试,其中集成了一个或两个经过单元测试的模块进行测试和验证,以验证集成模块是否按预期工作。

    系统测试是对整个系统进行测试的测试,即所有模块/组件都集成在一起,以验证系统是否按预期工作,并且由于集成模块而不会出现问题。

    结论

    这是关于集成测试及其在白盒和黑盒技术中的实现。希望我们用相关的例子清楚地解释它。

    测试集成是测试周期的一个重要部分,因为它可以在集成两个或多个模块时更容易找到缺陷,以便在第一步中将所有模块集成在一起。

    它有助于在早期发现缺陷,从而节省了工作量和成本。它确保集成模块按预期正常工作。

    转载于:https://my.oschina.net/hechunc/blog/3031766

    展开全文
  • 什么是 CI/CD? (持续集成/持续交付)

    万次阅读 多人点赞 2019-04-29 23:25:44
    但它们真正的意思什么呢? 在谈论软件开发时,经常会提到持续集成Continuous Integration(CI)和持续交付Continuous Delivery(CD)这几个术语。但它们真正的意思什么呢?在本文中,我将解释这些和相关术语...

    在软件开发中经常会提到持续集成Continuous Integration(CI)和持续交付Continuous Delivery(CD)这几个术语。但它们真正的意思是什么呢?

    在谈论软件开发时,经常会提到持续集成Continuous Integration(CI)和持续交付Continuous Delivery(CD)这几个术语。但它们真正的意思是什么呢?在本文中,我将解释这些和相关术语背后的含义和意义,例如持续测试Continuous Testing和持续部署Continuous Deployment。

    概览

    工厂里的装配线以快速、自动化、可重复的方式从原材料生产出消费品。同样,软件交付管道以快速、自动化和可重复的方式从源代码生成发布版本。如何完成这项工作的总体设计称为“持续交付”(CD)。启动装配线的过程称为“持续集成”(CI)。确保质量的过程称为“持续测试”,将最终产品提供给用户的过程称为“持续部署”。一些专家让这一切简单、顺畅、高效地运行,这些人被称为运维开发DevOps践行者。

    “持续”是什么意思?

    “持续”用于描述遵循我在此提到的许多不同流程实践。这并不意味着“一直在运行”,而是“随时可运行”。在软件开发领域,它还包括几个核心概念/最佳实践。这些是:

    • 频繁发布:持续实践背后的目标是能够频繁地交付高质量的软件。此处的交付频率是可变的,可由开发团队或公司定义。对于某些产品,一季度、一个月、一周或一天交付一次可能已经足够频繁了。对于另一些来说,一天可能需要多次交付也是可行的。所谓持续也有“偶尔、按需”的方面。最终目标是相同的:在可重复、可靠的过程中为最终用户提供高质量的软件更新。通常,这可以通过很少甚至无需用户的交互或掌握的知识来完成(想想设备更新)。
    • 自动化流程:实现此频率的关键是用自动化流程来处理软件生产中的方方面面。这包括构建、测试、分析、版本控制,以及在某些情况下的部署。
    • 可重复:如果我们使用的自动化流程在给定相同输入的情况下始终具有相同的行为,则这个过程应该是可重复的。也就是说,如果我们把某个历史版本的代码作为输入,我们应该得到对应相同的可交付产出。这也假设我们有相同版本的外部依赖项(即我们不创建该版本代码使用的其它交付物)。理想情况下,这也意味着可以对管道中的流程进行版本控制和重建(请参阅稍后的 DevOps 讨论)。
    • 快速迭代:“快速”在这里是个相对术语,但无论软件更新/发布的频率如何,预期的持续过程都会以高效的方式将源代码转换为交付物。自动化负责大部分工作,但自动化处理的过程可能仍然很慢。例如,对于每天需要多次发布候选版更新的产品来说,一轮集成测试integrated testing下来耗时就要大半天可能就太慢了。

    什么是“持续交付管道”?

    将源代码转换为可发布产品的多个不同的任务task和作业job通常串联成一个软件“管道”,一个自动流程成功完成后会启动管道中的下一个流程。这些管道有许多不同的叫法,例如持续交付管道、部署管道和软件开发管道。大体上讲,程序管理者在管道执行时管理管道各部分的定义、运行、监控和报告。

    持续交付管道是如何工作的?

    软件交付管道的实际实现可以有很大不同。有许多程序可用在管道中,用于源代码跟踪、构建、测试、指标采集,版本管理等各个方面。但整体工作流程通常是相同的。单个业务流程/工作流应用程序管理整个管道,每个流程作为独立的作业运行或由该应用程序进行阶段管理。通常,在业务流程中,这些独立作业是以应用程序可理解并可作为工作流程管理的语法和结构定义的。

    这些作业被用于一个或多个功能(构建、测试、部署等)。每个作业可能使用不同的技术或多种技术。关键是作业是自动化的、高效的,并且可重复的。如果作业成功,则工作流管理器将触发管道中的下一个作业。如果作业失败,工作流管理器会向开发人员、测试人员和其他人发出警报,以便他们尽快纠正问题。这个过程是自动化的,所以比手动运行一组过程可更快地找到错误。这种快速排错称为快速失败fail fast,并且在抵达管道端点方面同样有价值。

    “快速失败”是什么意思?

    管道的工作之一就是快速处理变更。另一个是监视创建发布的不同任务/作业。由于编译失败或测试未通过的代码可以阻止管道继续运行,因此快速通知用户此类情况非常重要。快速失败指的是在管道流程中尽快发现问题并快速通知用户的方式,这样可以及时修正问题并重新提交代码以便使管道再次运行。通常在管道流程中可通过查看历史记录来确定是谁做了那次修改并通知此人及其团队。

    所有持续交付管道都应该被自动化吗?

    管道的几乎所有部分都是应该自动化的。对于某些部分,有一些人为干预/互动的地方可能是有意义的。一个例子可能是用户验收测试user-acceptance testing(让最终用户试用软件并确保它能达到他们想要/期望的水平)。另一种情况可能是部署到生产环境时用户希望拥有更多的人为控制。当然,如果代码不正确或不能运行,则需要人工干预。

    有了对“持续”含义理解的背景,让我们看看不同类型的持续流程以及它们在软件管道上下文中的含义。

    什么是“持续集成”?

    持续集成(CI)是在源代码变更后自动检测、拉取、构建和(在大多数情况下)进行单元测试的过程。持续集成是启动管道的环节(尽管某些预验证 —— 通常称为上线前检查pre-flight checks —— 有时会被归在持续集成之前)。

    持续集成的目标是快速确保开发人员新提交的变更是好的,并且适合在代码库中进一步使用。

    持续集成是如何工作的?

    持续集成的基本思想是让一个自动化过程监测一个或多个源代码仓库是否有变更。当变更被推送到仓库时,它会监测到更改、下载副本、构建并运行任何相关的单元测试。

    持续集成如何监测变更?

    目前,监测程序通常是像 Jenkins 这样的应用程序,它还协调管道中运行的所有(或大多数)进程,监视变更是其功能之一。监测程序可以以几种不同方式监测变更。这些包括:

    • 轮询:监测程序反复询问代码管理系统,“代码仓库里有什么我感兴趣的新东西吗?”当代码管理系统有新的变更时,监测程序会“唤醒”并完成其工作以获取新代码并构建/测试它。
    • 定期:监测程序配置为定期启动构建,无论源码是否有变更。理想情况下,如果没有变更,则不会构建任何新内容,因此这不会增加额外的成本。
    • 推送:这与用于代码管理系统检查的监测程序相反。在这种情况下,代码管理系统被配置为提交变更到仓库时将“推送”一个通知到监测程序。最常见的是,这可以以 webhook 的形式完成 —— 在新代码被推送时一个挂勾hook的程序通过互联网向监测程序发送通知。为此,监测程序必须具有可以通过网络接收 webhook 信息的开放端口。

    什么是“预检查”(又称“上线前检查”)?

    在将代码引入仓库并触发持续集成之前,可以进行其它验证。这遵循了最佳实践,例如测试构建test build和代码审查code review。它们通常在代码引入管道之前构建到开发过程中。但是一些管道也可能将它们作为其监控流程或工作流的一部分。

    例如,一个名为 Gerrit 的工具允许在开发人员推送代码之后但在允许进入(Git 远程)仓库之前进行正式的代码审查、验证和测试构建。Gerrit 位于开发人员的工作区和 Git 远程仓库之间。它会“接收”来自开发人员的推送,并且可以执行通过/失败验证以确保它们在被允许进入仓库之前的检查是通过的。这可以包括检测新变更并启动构建测试(CI 的一种形式)。它还允许开发者在那时进行正式的代码审查。这种方式有一种额外的可信度评估机制,即当变更的代码被合并到代码库中时不会破坏任何内容。

    什么是“单元测试”?

    单元测试(也称为“提交测试”),是由开发人员编写的小型的专项测试,以确保新代码独立工作。“独立”这里意味着不依赖或调用其它不可直接访问的代码,也不依赖外部数据源或其它模块。如果运行代码需要这样的依赖关系,那么这些资源可以用模拟mock来表示。模拟是指使用看起来像资源的代码存根code stub,可以返回值,但不实现任何功能。

    在大多数组织中,开发人员负责创建单元测试以证明其代码正确。事实上,一种称为测试驱动开发test-driven develop(TDD)的模型要求将首先设计单元测试作为清楚地验证代码功能的基础。因为这样的代码可以更改速度快且改动量大,所以它们也必须执行很快。

    由于这与持续集成工作流有关,因此开发人员在本地工作环境中编写或更新代码,并通单元测试来确保新开发的功能或方法正确。通常,这些测试采用断言形式,即函数或方法的给定输入集产生给定的输出集。它们通常进行测试以确保正确标记和处理出错条件。有很多单元测试框架都很有用,例如用于 Java 开发的 JUnit

    什么是“持续测试”?

    持续测试是指在代码通过持续交付管道时运行扩展范围的自动化测试的实践。单元测试通常与构建过程集成,作为持续集成阶段的一部分,并专注于和其它与之交互的代码隔离的测试。

    除此之外,可以有或者应该有各种形式的测试。这些可包括:

    • 集成测试 验证组件和服务组合在一起是否正常。
    • 功能测试 验证产品中执行功能的结果是否符合预期。
    • 验收测试 根据可接受的标准验证产品的某些特征。如性能、可伸缩性、抗压能力和容量。

    所有这些可能不存在于自动化的管道中,并且一些不同类型的测试分类界限也不是很清晰。但是,在交付管道中持续测试的目标始终是相同的:通过持续的测试级别证明代码的质量可以在正在进行的发布中使用。在持续集成快速的原则基础上,第二个目标是快速发现问题并提醒开发团队。这通常被称为快速失败。

    除了测试之外,还可以对管道中的代码进行哪些其它类型的验证?

    除了测试是否通过之外,还有一些应用程序可以告诉我们测试用例执行(覆盖)的源代码行数。这是一个可以衡量代码量指标的例子。这个指标称为代码覆盖率code-coverage,可以通过工具(例如用于 Java 的 JaCoCo)进行统计。

    还有很多其它类型的指标统计,例如代码行数、复杂度以及代码结构对比分析等。诸如 SonarQube 之类的工具可以检查源代码并计算这些指标。此外,用户还可以为他们可接受的“合格”范围的指标设置阈值。然后可以在管道中针对这些阈值设置一个检查,如果结果不在可接受范围内,则流程终端上。SonarQube 等应用程序具有很高的可配置性,可以设置仅检查团队感兴趣的内容。

    什么是“持续交付”?

    持续交付(CD)通常是指整个流程链(管道),它自动监测源代码变更并通过构建、测试、打包和相关操作运行它们以生成可部署的版本,基本上没有任何人为干预。

    持续交付在软件开发过程中的目标是自动化、效率、可靠性、可重复性和质量保障(通过持续测试)。

    持续交付包含持续集成(自动检测源代码变更、执行构建过程、运行单元测试以验证变更),持续测试(对代码运行各种测试以保障代码质量),和(可选)持续部署(通过管道发布版本自动提供给用户)。

    如何在管道中识别/跟踪多个版本?

    版本控制是持续交付和管道的关键概念。持续意味着能够经常集成新代码并提供更新版本。但这并不意味着每个人都想要“最新、最好的”。对于想要开发或测试已知的稳定版本的内部团队来说尤其如此。因此,管道创建并轻松存储和访问的这些版本化对象非常重要。

    在管道中从源代码创建的对象通常可以称为工件artifact。工件在构建时应该有应用于它们的版本。将版本号分配给工件的推荐策略称为语义化版本控制semantic versioning。(这也适用于从外部源引入的依赖工件的版本。)

    语义版本号有三个部分:主要版本major、次要版本minor 和 补丁版本patch。(例如,1.4.3 反映了主要版本 1,次要版本 4 和补丁版本 3。)这个想法是,其中一个部分的更改表示工件中的更新级别。主要版本仅针对不兼容的 API 更改而递增。当以向后兼容backward-compatible的方式添加功能时,次要版本会增加。当进行向后兼容的版本 bug 修复时,补丁版本会增加。这些是建议的指导方针,但只要团队在整个组织内以一致且易于理解的方式这样做,团队就可以自由地改变这种方法。例如,每次为发布完成构建时增加的数字可以放在补丁字段中。

    如何“分销”工件?

    团队可以为工件分配分销promotion级别以指示适用于测试、生产等环境或用途。有很多方法。可以用 Jenkins 或 Artifactory 等应用程序进行分销。或者一个简单的方案可以在版本号字符串的末尾添加标签。例如,-snapshot 可以指示用于构建工件的代码的最新版本(快照)。可以使用各种分销策略或工具将工件“提升”到其它级别,例如 -milestone 或 -production,作为工件稳定性和完备性版本的标记。

    如何存储和访问多个工件版本?

    从源代码构建的版本化工件可以通过管理工件仓库artifact repository的应用程序进行存储。工件仓库就像构建工件的版本控制工具一样。像 Artifactory 或 Nexus 这类应用可以接受版本化工件,存储和跟踪它们,并提供检索的方法。

    管道用户可以指定他们想要使用的版本,并在这些版本中使用管道。

    什么是“持续部署”?

    持续部署(CD)是指能够自动提供持续交付管道中发布版本给最终用户使用的想法。根据用户的安装方式,可能是在云环境中自动部署、app 升级(如手机上的应用程序)、更新网站或只更新可用版本列表。

    这里的一个重点是,仅仅因为可以进行持续部署并不意味着始终部署来自管道的每组可交付成果。它实际上指,通过管道每套可交付成果都被证明是“可部署的”。这在很大程度上是由持续测试的连续级别完成的(参见本文中的持续测试部分)。

    管道构建的发布成果是否被部署可以通过人工决策,或利用在完全部署之前“试用”发布的各种方法来进行控制。

    在完全部署到所有用户之前,有哪些方法可以测试部署?

    由于必须回滚/撤消对所有用户的部署可能是一种代价高昂的情况(无论是技术上还是用户的感知),已经有许多技术允许“尝试”部署新功能并在发现问题时轻松“撤消”它们。这些包括:

    蓝/绿测试/部署

    在这种部署软件的方法中,维护了两个相同的主机环境 —— 一个“蓝色” 和一个“绿色”。(颜色并不重要,仅作为标识。)对应来说,其中一个是“生产环境”,另一个是“预发布环境”。

    在这些实例的前面是调度系统,它们充当产品或应用程序的客户“网关”。通过将调度系统指向蓝色或绿色实例,可以将客户流量引流到期望的部署环境。通过这种方式,切换指向哪个部署实例(蓝色或绿色)对用户来说是快速,简单和透明的。

    当新版本准备好进行测试时,可以将其部署到非生产环境中。在经过测试和批准后,可以更改调度系统设置以将传入的线上流量指向它(因此它将成为新的生产站点)。现在,曾作为生产环境实例可供下一次候选发布使用。

    同理,如果在最新部署中发现问题并且之前的生产实例仍然可用,则简单的更改可以将客户流量引流回到之前的生产实例 —— 有效地将问题实例“下线”并且回滚到以前的版本。然后有问题的新实例可以在其它区域中修复。

    金丝雀测试/部署

    在某些情况下,通过蓝/绿发布切换整个部署可能不可行或不是期望的那样。另一种方法是为金丝雀canary测试/部署。在这种模型中,一部分客户流量被重新引流到新的版本部署中。例如,新版本的搜索服务可以与当前服务的生产版本一起部署。然后,可以将 10% 的搜索查询引流到新版本,以在生产环境中对其进行测试。

    如果服务那些流量的新版本没问题,那么可能会有更多的流量会被逐渐引流过去。如果仍然没有问题出现,那么随着时间的推移,可以对新版本增量部署,直到 100% 的流量都调度到新版本。这有效地“更替”了以前版本的服务,并让新版本对所有客户生效。

    功能开关

    对于可能需要轻松关掉的新功能(如果发现问题),开发人员可以添加功能开关feature toggles。这是代码中的 if-then 软件功能开关,仅在设置数据值时才激活新代码。此数据值可以是全局可访问的位置,部署的应用程序将检查该位置是否应执行新代码。如果设置了数据值,则执行代码;如果没有,则不执行。

    这为开发人员提供了一个远程“终止开关”,以便在部署到生产环境后发现问题时关闭新功能。

    暗箱发布

    在暗箱发布dark launch中,代码被逐步测试/部署到生产环境中,但是用户不会看到更改(因此名称中有暗箱dark一词)。例如,在生产版本中,网页查询的某些部分可能会重定向到查询新数据源的服务。开发人员可收集此信息进行分析,而不会将有关接口,事务或结果的任何信息暴露给用户。

    这个想法是想获取候选版本在生产环境负载下如何执行的真实信息,而不会影响用户或改变他们的经验。随着时间的推移,可以调度更多负载,直到遇到问题或认为新功能已准备好供所有人使用。实际上功能开关标志可用于这种暗箱发布机制。

    什么是“运维开发”?

    运维开发DevOps 是关于如何使开发和运维团队更容易合作开发和发布软件的一系列想法和推荐的实践。从历史上看,开发团队研发了产品,但没有像客户那样以常规、可重复的方式安装/部署它们。在整个周期中,这组安装/部署任务(以及其它支持任务)留给运维团队负责。这经常导致很多混乱和问题,因为运维团队在后期才开始介入,并且必须在短时间内完成他们的工作。同样,开发团队经常处于不利地位 —— 因为他们没有充分测试产品的安装/部署功能,他们可能会对该过程中出现的问题感到惊讶。

    这往往导致开发和运维团队之间严重脱节和缺乏合作。DevOps 理念主张是贯穿整个开发周期的开发和运维综合协作的工作方式,就像持续交付那样。

    持续交付如何与运维开发相交?

    持续交付管道是几个 DevOps 理念的实现。产品开发的后期阶段(如打包和部署)始终可以在管道的每次运行中完成,而不是等待产品开发周期中的特定时间。同样,从开发到部署过程中,开发和运维都可以清楚地看到事情何时起作用,何时不起作用。要使持续交付管道循环成功,不仅要通过与开发相关的流程,还要通过与运维相关的流程。

    说得更远一些,DevOps 建议实现管道的基础架构也会被视为代码。也就是说,它应该自动配置、可跟踪、易于修改,并在管道发生变化时触发新一轮运行。这可以通过将管道实现为代码来完成。

    什么是“管道即代码”?

    管道即代码pipeline-as-code是通过编写代码创建管道作业/任务的通用术语,就像开发人员编写代码一样。它的目标是将管道实现表示为代码,以便它可以与代码一起存储、评审、跟踪,如果出现问题并且必须终止管道,则可以轻松地重建。有几个工具允许这样做,如 Jenkins 2

    DevOps 如何影响生产软件的基础设施?

    传统意义上,管道中使用的各个硬件系统都有配套的软件(操作系统、应用程序、开发工具等)。在极端情况下,每个系统都是手工设置来定制的。这意味着当系统出现问题或需要更新时,这通常也是一项自定义任务。这种方法违背了持续交付的基本理念,即具有易于重现和可跟踪的环境。

    多年来,很多应用被开发用于标准化交付(安装和配置)系统。同样,虚拟机virtual machine被开发为模拟在其它计算机之上运行的计算机程序。这些 VM 要有管理程序才能在底层主机系统上运行,并且它们需要自己的操作系统副本才能运行。

    后来有了容器container。容器虽然在概念上与 VM 类似,但工作方式不同。它们只需使用一些现有的操作系统结构来划分隔离空间,而不需要运行单独的程序和操作系统的副本。因此,它们的行为类似于 VM 以提供隔离但不需要过多的开销。

    VM 和容器是根据配置定义创建的,因此可以轻易地销毁和重建,而不会影响运行它们的主机系统。这允许运行管道的系统也可重建。此外,对于容器,我们可以跟踪其构建定义文件的更改 —— 就像对源代码一样。

    因此,如果遇到 VM 或容器中的问题,我们可以更容易、更快速地销毁和重建它们,而不是在当前环境尝试调试和修复。

    这也意味着对管道代码的任何更改都可以触发管道新一轮运行(通过 CI),就像对代码的更改一样。这是 DevOps 关于基础架构的核心理念之一。

    refer: https://opensource.com/article/18/8/what-cicd

    展开全文
  • 云平台是什么意思 云服务平台有哪些【详细介绍】  摘要:云平台是什么意思?随着云计算的不断发展,很多的云平台都应运而生,这种平台允许开发者们或是将写好的程序放在“云”里运行,或是使用“云”里提供的...

    云平台是什么意思 云服务平台有哪些【详细介绍】

      摘要:云平台是什么意思?随着云计算的不断发展,很多的云平台都应运而生,这种平台允许开发者们或是将写好的程序放在“云”里运行,或是使用“云”里提供的服务,云服务有哪些大企业平台搭建呢?

      【云平台】云平台是什么意思 云服务平台有哪些

      云平台是什么意思

      云平台 ( Cloud platforms ),提供基于“云”的服务,供开发者创建应用时采用。各种云平台的出现是该转变的最重要环节之一。顾名思义,这种平台允许开发者们或是将写好的程序放在“云”里运行,或是使用“云”里提供的服务,或二者皆是。

      云平台包括哪些

      无论在户内环境、还是在 “云”里,我们可以认为一个应用平台包含以下三个部分:

      1、基础( foundation )

      几乎所有应用都会用到一些在机器上运行的 平台软件 。各种支撑功能(如标准的库与存储,以及基本操作系统等)均属此部分。

      2、基础设施服务( infrastructure services )

      在现代分布式环境中,应用经常要用到由其他计算机提供的基本服务。比如提供远程存储服务、集成服务及身份管理服务等都是很常见的。

      3、应用服务( application services )

      随着越来越多的应用面向服务化,这些应用提供的功能可为新应用所使用。尽管这些应用主要是为最终用户提供服务的,但这同时也令它们成为应用平台的一部分。(也许你要奇怪,为什么要把别的应用视为平台的一部分,但在面向服务的世界里是这样的。)

      云服务平台有哪些

      1、 UAP 平台

      用友 NC 采用 J2EE 架构,致力于构建先进、开放的集团企业云计算应用平台,为集团企业提供建模、开发、集成、运行、管理一体化的 IT 解决方案。

      NC 以“高智能、高性能、高可用”成为中国集团企业商业模式创新、管理和竞争力升级的信息化平台。

      2、弹性虚拟计算

      根据企业不断变化的组织架构、管控模式和业务需求,为企业云应用服务快速提供动态、灵活、弹性、虚拟、共享和高效的计算资源服务。

      3、智能监控运维

      实现对计算资源、存储资源、网络资源、云应用服务进行 7*24 小时全时区、多地域、全方位、立体式、智能化的 IT 运维监控,保障 IT 系统安全、稳定、可靠运行。

      4、移动技术

    展开全文
  • 什么事持续集成? 持续集成(CI)是一种实践,可以让团队在持续的基础 上收到反馈并进行改进,不必等到开发周期后期才寻找和修复缺陷。通俗一点儿说,就是指对于开发人员的每一次代码提交, 都自动地把...

    什么事持续集成?
    
      持续集成(CI)是一种实践,可以让团队在持续的基础 上收到反馈并进行改进,不必等到开发周期后期才寻找和修复缺陷。通俗一点儿说,就是指对于开发人员的每一次代码提交,
    都自动地把Repository中所有代码Check out到一个空目录,并且自动运行所有Test Case。如果成功则接受这次提交,否则告诉所有人,这是一个失败的Revision。

     常用的持续集成服务器工具:Hudson

    Hudson是Jenkins的前身,是基于Java开发的一种持续集成工具,用于监控程序重复的工作,

    包括:
    1、持续的软件版本发布/测试项目。
    2、监控外部调用执行的工作。
    Hudson的特性
    1、易于安装-只要把hudson.war部署到servlet容器,不需要数据库支持。
    2、易于配置-所有配置都是通过其提供的 web界面实现。
    3、集成RSS/E-mail/IM-通过RSS发布构建结果或当构建失败时通过 e-mail实时通知。
    4、生成JUnit/TestNG测试报告。
    5、分布式构建支持-Hudson能够让多台计算机一起构建/测试。
    6、文件识别- Hudson能够跟踪哪次构建生成哪些 jar,哪次构建使用哪个版本的jar等。
    7、插件支持-Hudson可以通过 插件扩展,你可以开发适合自己团队使用的工具。

    持续集成的好处包括下面这些
    1 减少风险
     
     通过每天集成变化的代码并发布,我们将减少项目的风险。这样做将可以推动尽早发现缺陷;尽早估量软件的质量;尽早排除假设。
    ----尽早发现缺陷并修复缺陷 
      软件开发中每天持续集成,并进行测试和评审,这些过程有许多的机会发现缺陷。
    -----尽早估量软件质量 
      通过在持续集成中实施持续测试和评审的活动,软件产品的健康属性,例如复杂性,将被全程跟踪。
    -----尽早排除假设通过在一个纯净的环境中,用同样的脚本和过程构建和测试软件,开发人员可以减少假设:是否使用了不正确的第三方的库,是否使用了不同的环境参数等。

    2 减少重复的过程
     
     通过减少重复性的动作来节省时间,成本,提高效率。在软件的开发过程中,有许多重复性的活动,这些活动包括代码编译,数据库集成,测试,评审,部署,信息反馈等。通过自动化的持续集成,你将获得如下能力:
    ----任何时候都可以执行一致的流程;
    ----每个开发过程的步骤都是依次执行的;在构建脚本,将依次执行编译,自动测试等动作。
    -----在版本控制库中,当代码提交发生时,构建过程自动执行。
    通过减少在重复性工作上的劳动力,让开发工程师做更多有价值的工作。

    3 产生可部署的软件
    持续集成可以让项目组在任一点上及时提交可以安装的软件包。这是持续集成最可看见的一个益处。我们可以无休止地讨论改善软件质量和减少风险,但是对用户或者客户来说,可以安装的软件包是最切实可行的

    4 使得项目更加透明

    5 建立项目信心

    什么阻止团队使用持续集成?

    1 用于维护持续集成的费用比较高
    这通常是一个被误导的错误的理解,如论你是否使用持续集成,你依然需要集成,构建,测试,部署等工作。管理一个强壮的持续集成的系统比管理手动的过程更加高效率。
    2 太多的变更
    一些开发组织需要改变已有的开发习惯和过程。
    3 太多失败的构建
    当开发人员不做个人构建之后,就将变更的代码提交到版本控制库,从而导致太多的构建失败。
    4 额外的软件和硬件成本
    持续构建需要独立的集成构建主机和持续集成软件等,这些需要额外的成本。
    展开全文
  • 大数据是什么意思

    千次阅读 2018-10-19 11:58:54
    在大数据的越来越火的今天,相信很多朋友都不清楚大数据到底是什么?可以解决实际生活中的什么问题?那么今天科多大数据老师就给各位小伙伴儿普及下大数据的概念吧。大数据到底是什么勒? "大数据"是一个...
  • 数据集成是开放数据库还是接口?

    千次阅读 2018-03-21 19:05:11
    系统集成集成方少不了要读取对方的数据。这种数据共享方式,到底是直接读对方的数据库,还是对方提供一个接口,供集成方调用来获得数据? 接口,而不是直接开放数据库。为啥呢? 1、权限控制 2、后续维护 3、...
  • 持续集成 devops pipeline CI/CD Gitlab 运维
  • CRT是什么意思?LCD又是什么意思

    千次阅读 2008-11-20 17:41:00
    CRT是什么意思?LCD又是什么意思 CRT(Cathode Ray Tube)是阴极射线管。是应用较为广泛的一种显示技术。CRT投影机把输入的信号源分解到R(红)、G(绿)B(蓝)三个CRT管的荧光屏上,在高压作用下发光信号放大、...
  • ITIL是什么意思?ITIL是什么

    千次阅读 2020-09-24 17:25:53
    ITIL是什么? ITIL是Information Technology Infrastructure Library的缩写,即:信息技术基础架构库。 ITIL是由英国政府部门CCTA(Central Computing and Telecommunications Agency)在20世纪80年代末开发的一套IT...
  • 什么是物联网?看到这个问题,相信很多人都是蒙圈状态,虽然物联网已经10周年了,但是经过10年的发展,大多数的人都无法说不清楚物联网,说不清物联网到底是什么,更不用说看清物联网的商业模式,自然也就无法界定谁...
  • HDD是什么意思

    千次阅读 2021-05-29 09:46:49
    大多数硬盘驱动器使用增强型集成驱动电子设备(EIDE),包括主板的电缆和连接器。所有数据都以磁性方式存储,允许在电源关闭时保存信息。 硬盘驱动器需要一个只读存储器(ROM)控制器板来指示读/写磁头如何,何时...
  • 集成平台定义

    2018-12-06 15:47:10
    集成平台是一个支持复杂信息环境下应用开发和系统集成运行的软件平台。它基于制造业信息特征,在异构分布环境(操作系统、网络、数据库)下提供透明、一致的信息访问和交互手段,对其运行上的应用进行管理,为应用...
  • dp模式是什么意思 DP:显示图片 (DP: Display Picture) DP is an abbreviation of the Display Picture. It is also called a profile picture. It denotes a picture which is in commonly used as a display ...
  • spring boot集成ActiveMQ

    万次阅读 热门讨论 2017-08-26 20:01:54
    spring boot集成ActiveMQ。
  • dma是什么意思? 什么是dma?

    千次阅读 2010-01-18 11:51:00
    什么是dma?DMA的英文拼写是“Direct MemoryAccess”,汉语的意思就是直接内存访问,是一种不经过CPU而直接从内存了存取数据的数据交换模式。PIO模式下硬盘和内存之间的数据传输是由CPU来控制的;而在DMA模式下,...
  • 信息系统项目管理师EV、PV、AC、BAC、CV、SV、EAC、ETC、CPI、SPI各是什么意思
  • Spring Boot 集成Swagger

    万次阅读 多人点赞 2016-02-15 16:02:25
    文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。Swagger 让部署管理和使用功能强大的API从未如此简单。更多关于Swagger的作用,相信大家百度一下能了解的更全面,本文以SpringBoot中集成...
  • 医院需要什么样的集成平台

    万次阅读 2013-05-01 08:20:02
    很久没有写集成的故事了,今天这篇不知可否算是医疗集成这个专题的完结篇:因为想斗胆涉及一下集成平台,这个集成技术和经验在产品层面的集大成者。 -- 前几年,关于医疗集成平台的讨论开始热烈起来的时候,真觉得...
  • IC卡是什么意思?ID卡区别是?

    千次阅读 2010-03-23 16:48:00
    一IC卡是什么意思? ic卡是集成电路卡的意思,ic卡是一种内藏大规模集成电路的塑料卡片,其大小和原来的磁卡电话的磁卡大小相同。 ic卡通常可分为存储卡、加密卡和智能卡三类,存储卡是可以直接对其进行读、写操作的...
  • kaggle比赛集成指南

    万次阅读 多人点赞 2016-11-11 23:20:53
    集成模型是一种能在各种的机器学习任务上提高准确率的强有力技术。在这篇文章中,我会分享我在Kaggle比赛中的集成...我会在后续回答为什么集成能够减少泛化误差。最后我会展示不同的集成方法,包括它们的结果以及代码
  • OLAP是什么意思?

    千次阅读 2016-12-20 22:15:20
    什么是联机分析处理(OLAP) 联机分析处理 (OLAP) 的概念最早是由关系数据库之父E.F.Codd于1993年提出的,他同时提出了关于OLAP的12条准则。OLAP的提出引起了很大的反响,OLAP作为一类产品同联机事务处理 (OLTP) ...
  • Persist Security Info 是什么意思

    千次阅读 2012-08-10 09:31:03
     Persist Security Info属性的意思是表示是否保存安全信息,其实可以简单的理解为"ADO在数据库连接成功后是否保存密码信息",  SqlDataOperate sqlDataOperate = new SqlDataOperate("Data
  • 集成回归模型

    千次阅读 2017-07-06 17:18:03
    集成回归模型综合考量多个回归器的预测结果从而做出决策,这种“综合考量”的方式大体上分为两种: (1)利用相同的训练数据同时搭建多个独立的回归模型,然后通过投票的方式,以少数服从多数的原则作出最终的...
  • 微服务下的持续集成-Jenkins自动化部署GitHub项目

    千次阅读 多人点赞 2020-11-19 22:56:14
    文章目录一、DevOps概念二、为什么要做持续集成三、常见云服务四、手动部署Jenkins五、Jenkins + Maven +Git 自动化继承/测试 一、DevOps概念 持续集成服务(Continuous Integration,简称 CI) 它绑定 Github 上面...
  • RPA 软件技术是什么意思

    千次阅读 2019-07-19 10:29:18
    软件机器人易于设定,可以针对特定需求快速定制,无缝集成到任何系统中,并不断报告他们的进度。启用 RPA 软件技术来处理业务流程不仅可以转换和简化组织的工作流程。还能让企业提高可伸缩性和灵活性。RPA 软件通过...
  • 在RPA机器人投产前,拟定检查清单对各项内容逐一检查,主要包含流程信息、安全控制情况、异常控制方式、业务连续性、基础设施、控制台的操作、运营审计和报告、测试和回滚机制、代码标准、架构10个方面。 6.IT基础...
  • 类似有OA、ERP、CRM、RDM,一个员工可能需要同时使用ERP、RDM、OA,往往需要在多个系统之间进行切换,如果每次切换都需要重新输入账号和密码,将会非常麻烦,所以就需要把这些系统的部门定义、人员信息进行同步,并...
  • 编程中的api指什么?是什么意思

    千次阅读 多人点赞 2019-09-24 13:02:53
    在大多数情况下,API描述了服务的功能,解释了它如何被访问和使用,以及它将接受什么样的格式作为输入。好吧,对于普通读者来说,所有这些可能听起来都过于复杂,所以我们会尝试以更加平易近人的方式解释API。 让...
  • 持续集成 之 Jenkins

    万次阅读 2015-09-23 17:45:17
    持续集成 之 Jenkins

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 96,838
精华内容 38,735
关键字:

信息集成是什么意思