2014年9月16日 持续集成

与Simics的持续集成

由雅各布Engblom

Jakob-engblom-Intro-Picture

持续集成是现代软件工程实践的重要组成部分。与往常一样,它可能意味着不同的事情,这取决于您问的人,但通常关键的部分是这样的概念,即不要等到最后一刻才集成系统中的所有不同代码片段,集成和最重要的是集成测试尽早执行,即代码已准备好运行。这缩短了从编码到部署产品的提前期,并提前捕获错误。测试是作为所有代码的入住周期的一部分完成的,这使得可以访问开发人员的关键路径上的测试系统。添加到系统的每条代码应尽快测试,尽快测试,以确保在新软件仍然新鲜的情况下,确保反馈到达开发人员。尽快测试并快速测试可能不是一个问题对于任何标准计算机可用于测试的简单应用,而是对于嵌入式系统和分布式系统,它可能是一个真正的问题。除非当然,否则您使用模拟和仿真

SIMICS风格的全系统仿真是一个真正的启动器,用于持续集成复杂系统或系统与其环境进行交互。使用硬件板比使用模拟器更困难,特别是对于在任何代码录取代码存储库之前应该运行的快速短暂测试。模拟器可以自动化,并允许公司使用群集或标准计算机云以运行任何各种特定板或系统设置的代码。我们所看到的是,典型的持续集成工作流程从开发人员向构建系统提交新代码。如果构建失败,则必须修复它。一旦代码实际构建,运行快速单元测试(通常称为“烟雾测试”)以确保代码不完全损坏。整体流程往往会看起来像下面的图片 - 测试水平的精确数量,他们的名字会有所不同,但这种三层结构非常典型。

CI-FLOW.

单元测试应该运行得非常快,不超过几分钟。开发人员希望在喝杯咖啡的时间内得到结果。执行必须快,获得测试平台的延迟必须短。通过Simics风格的模拟,这两者都可以实现。特别是,使用模拟器时,让目标在其上运行要快得多。只需在计算服务器上启动一个新的模拟器进程,并运行测试。无需预留硬件,无需在硬件板上初始化和加载软件。马上去做。

一旦代码通过单元测试,它就可以进行更大的测试。首先,在真实上下文中测试代码但通常具有相当小的输入,运行某种形式的子系统测试。目标是在小时内获得子系统级测试。通过子系统测试的代码最终用于系统级测试,其中它与系统的所有其他代码和功能一起运行,并在高负载和大量流量下进行长期硬测试。系统级测试可以从简单的功能测试中的范围内的范围,以确保系统挂在一起,以“刻录”在满负载下运行周数的“刻录”测试,以确保硬件和软件能够掌握真实的严格世界。SIMICS可以处理大多数子系统测试和一些系统级测试。尽管如此,必须在硬件上运行最终的系统级测试。在某些时候,根本必要测试实际要发货的内容。Maxim始终“测试您发货并发货您的测试”。 Thus, the physical hardware that will be shipped to the customer must be used for final testing.

使用Simics这样的虚拟平台可以大大减少支持持续集成所需的硬件实验室数量。最影响开发人员的快速循环将独立于硬件,并且可以在需要时运行,而不考虑硬件实验室的可用性。在Jenkins这样的构建自动化系统中,很容易将Simics集成为自动化测试组件,Simics脚本可以用于自动化运行。下面的屏幕截图显示了Simics中的一个自动测试会话示例,其中一个脚本在一台机器上运行一个联网的客户机程序,并在充当服务器的另一台机器上检查结果(在本例中是段错误)。在Simics Timeline视图中注释正在发生的事情时。它是Simics中表达的一个演示,但它显示了注释结果是多么容易。

ci-screenshot.

当发现问题时,检查点可以用来捕获失败的运行,并将它们带回工程,使反馈循环更快,bug报告的方式更精确。流程应该是这样的:

ci-flow-feedback

首先,目标系统将被引导并设置到可以应用测试代码的位置。根据测试的性质和所执行的集成级别,这可以是从启动一个单板到启动和初始化一个复杂的自组织分布式多网络系统的所有事情。在任何情况下,起始点都保存为Simics检查点(a),用作许多测试的起始点。当要测试特定的代码段时,将启动检查点,并运行系统以加载新开发的代码。一旦代码就位并准备运行,就会保存另一个检查点(C)。然后,这个检查点被用作代码上一个或多个测试运行的起点。每个测试运行将使用不同的参数和输入以不同的方式驱动代码,这就是我们在上面的简单示例中所显示的。

如果在测试运行中发现问题,Simics协作检查点(Q)将被保存,并作为附件通过问题报告系统传递。如在以前的博客文章,协作检查点包括系统状态和系统输入的记录,因此它足以为开发人员重现问题。不再试图解释基于文本的错误描述中发生了什么。相反,问题是完全运送从测试系统到开发人员。这将关闭连续集成循环,并确保开发人员及时解决自动测试中的问题。

Simics对用于测试的集成的性质也有一个有趣的影响。正如前面所讨论的那样在本博客中,您可以很容易地将系统的物理方面的模拟与系统的计算机部分的模拟结合起来。这使得持续测试控制系统如何与其环境交互成为可能。另一个重要的方面是,你可以使用模拟器走捷径用存根和假人替换部分系统。这使得比使用硬件更早地测试更多的集成成为可能,因为对于硬件,您几乎只有拥有真实系统和不拥有它的选择。使用Simics,您可以在硬件实际可用之前,甚至在硬件设计稳定之前,就一直进行系统集成的持续集成测试。

在硬件中创建和管理用于测试的多个系统和网络配置通常很难。硬件实验室设置的数量受硬件可用性的限制,并重新配置具有不同板和网络连接的硬件设置是耗时和容易出错的。通过SIMICS,可以编写脚本并将安装程序保存为软件,使配置即时进程。配置也可以保存在版本控制系统中,允许将硬件和软件配置一起进行管理。看到以前的博客文章获取更多Simics中的网络模拟。

测试可以自然地进行平行,由于虚拟平台可用性仅受到可用于运行SIMICS的服务器数量的限制。与仅使用硬件设置相比,这增加了可以在给定时间内执行的测试量。使用技巧检查点,可以缩短测试执行时间从引导设置开始而不是重新启动每个测试的测试系统。循环时间也可以通过在模拟器中使用各种快捷方式将新构建的软件引入系统,如直接加载到RAM而不是闪烁启动闪存

这篇文章是即将上映的电影的编辑节录关于模拟和仿真的书我一直在努力,向您展示我们在本书中的信息。

以前的IDF 2014物联网关键要点:第一部分
下一个来自IDF 2014的关键IOT外带:第二部分