嵌入式软件的开发过程一直落后于web开发。当查看单元测试、自动化构建和代码分析时,流行的工具有许多限制。
根据我的经验,我已经不再使用Arduino IDE来使用platformIO和VS代码,因为在CI方面,它提供了改进的依赖安装和构建配置自动化。
问题是,哪些工具和流程已经存在,哪些可以在Arduino框架内重新使用,以便与web开发一样启用CI。
Meta:下一个最相关的堆栈交换组是IoT,但没有一个帖子提到持续集成。
发布于 2018-01-10 16:12:17
因为对IoT设备的“部署”,特别是批量部署,将不会使用CI系统完成。然后,CI系统的主要目的是确保它能正常工作。
这意味着您主要希望使用CI运行一些测试。自动化测试对于单元测试和集成测试都是绝对可能的。
对于大型代码库,如果可能的话,可以使用主机的本机编译器编译部分代码,并在其中运行单元测试--这是一个很好的选择。如果必须的话,您还可以交叉编译到目标平台,并使用一些模拟器运行单元测试,以获得所需的速度。为目标编译并在目标上运行单元测试,如果操作得当,将非常缓慢,但也可以完成--只需确保只闪烁尽可能小的代码,并让它通过串行报告它在设备上的工作情况。
对于集成测试,如果可能的话,可以在实际的设备上安装代码,并使用串行接口与设备进行一些聊天--您可以确保代码实际上在目标设备上工作。如果由于某种原因,代码失败或工作不正确,可能会绘制太多的电源和/或重新启动,那么集成测试就会捕捉到这一点。您还可以让另一个测试设备通过串行接口对CI作业执行测量和报告。可以使用Arduino或另一个ESP来测量代码部分的执行过程中的电压和/或安培,并根据已知的良好值对其进行检查。你不会期望设备在深度睡眠模式下拉动400 to,例如,这很容易用“测试线束”进行测试。
当然,您可能会让这个“服务器”在现场运行,而不依赖可能支持或不支持最新集成测试的云解决方案。
使用硬件,烟雾测试更“真实”,因为你实际上可以连接设备,并看到神奇的烟雾出来。通常,您甚至不需要在代码烧坏之前运行它,因为问题经常发生在硬件中。
由于我提到了测试,也有集成测试,这是在硬件层面上完成的。如果您有一个很好的测试工具,可以通过探测来检查设备是否正常工作,那么您可以使用相同的测试线束在工厂中执行QC周期,在工厂生产这些设备。关于制作这些测试床有相当多的信息。这方面的一个例子是https://www.sparkfun.com/tutorials/138。
发布于 2018-12-20 13:55:22
从你的评论
我希望能对目标代码进行单元测试,进行一些分析,直到CD。
我有对刚才提到的Arduino StackExchange问题的回答,它解决了其中的一些问题。但是自从写了这个答案之后,我给arduino_ci 坦白地说,我是作者添加了一些内存检查功能。
虽然它不进行静态分析,但它可以在运行单元测试时检测某些类型的内存问题:
==2284==ERROR: AddressSanitizer: heap-use-after-free on address 0x603000000280 at pc
0x0001032b987e bp 0x7ffeec94c0b0 sp 0x7ffeec94c0a8
READ of size 1 at 0x603000000280 thread T0
#0 0x1032b987d in Adafruit_WS2801::show() Adafruit_WS2801.cpp:203
#1 0x1032b84b1 in Strip::init(unsigned char, unsigned char) Strip.cpp:10
#2 0x1032baaff in test_set_strip_values::task() strip.cpp:10
#3 0x1032bd900 in Test::test() ArduinoUnitTests.h:165
#4 0x1032bcfd4 in Test::run(Test::ReporterTAP*) ArduinoUnitTests.h:137
#5 0x1032bcb79 in Test::run_and_report(int, char**) ArduinoUnitTests.h:155
#6 0x1032bcab8 in main strip.cpp:43
#7 0x7fff769d0114 in start (libdyld.dylib:x86_64+0x1114)修复此问题的拉请求。中的更多上下文
https://devops.stackexchange.com/questions/3050
复制相似问题