什么是A TS ATS(Acceptance Test Specification)是由AUTOSAR释放的针对AUTOSAR不同软件组件的标准测试规范。根据软件类型的不同,ATS分为了应用测试(Application level)和总线测试(Bus level): 应用测试 包括了例如RTE,BSW服务等组件的测试 总线测试 包括了CAN,LIN,FlexRay,Ethernet等总线的测试,也包括了更高层级协议的测试,比如网络管理,诊断通信等协议的测试 为什么需要A TS 我们知道AUTOSAR的通信协议栈(Communication Stack)是高度可配置的。对于同一协议栈,不同的用户会根据其具体项目中的应用需求来进行针对性的配置。 站在测试的角度,如果我们对这些不同配置的软件都进行单独的测试,这无疑存在很多重复性的工作,因为软件模块的基础都是相同的,只是因为配置的不同才产生了多种不同的变体。 于是我们把这些基础的和共性的需求梳理出来,并开发测试规范进行覆盖,这样在不同的项目中就不必再重复的执行这些测试了,而这些测试就是ATS定义的内容。 这样做的益处是显而易见的。 站在OEM的角度,他们不需要自己去开发和维护这些测试规范,甚至都不需要执行这些测试,只需审核供应商提交的报告 站在供应商的角度,针对同一软件组件的“标准接受性”测试只需要执行一次(针对同一硬件平台和编译环境) 站在测试服务商的角度,测试脚本只需开发一次,来自不同供应商的软件可以复用同一测试脚本主体。 所以不管站在谁的角度,这都极大的降低了测试的成本和工作量。 ATS 在整个测试活动中的位置与作用 图1: AUTOSAR 软件组件 完整 测试 活动 示意 一般来说,AUTOSAR软件组件一般经过如下几个阶段的测试: Unit Tests 单元级别的白盒测试。 Standard Acceptance Tests ATS定义的测试内容,可由第三方的测试服务商(Test House)完成,OEM可要求供应商来提交ATS的测试报告,作为“准入条件”。该要求由OEM制定,AUTOSAR并没有强制要求。 OEM Specific Qualification Tests 由OEM根据自己的企业标准或需求定制的测试,作为“认证”测试。只有经过“认证”的软件才可以在具体的项目中使用。和ATS类似,这个阶段也不包含配置相关的验证,所以测试方法可以参考ATS,也可在ATS的基础上进行扩展。 Project Specific Tests 与具体项目有关的配置测试。 因为ATS只覆盖了非常基础的和共性的需求,项目相关的或配置相关的需求都不在范围之内,覆盖度是非常有限的,所以ATS只能作为初步的验收测试,不能取代其他测试。就这一点来说,TC8也是类似的。 A TS 中 针对车载 以太网 的 相关 测试 ATS中涵盖了TCP/IP的IPv4,UDP,TCP三个部分,分别定义在AUTOSAR_ATS_IPv4, AUTOSAR_ATS_UDP,AUTOSAR_ATS_TCP三份规范中。 相信不少人有这样的疑问:为什么ATS中没有ARP,ICMP,DHCP等等这些内容? 经过上面几个部分的介绍,答案应该显而易见,那就是ATS中只覆盖基础的和共性的需求,而ARP,ICMP,DHCP等部分目前不属于这个范围,如果OEM有相关的需求,需要自行开发测试规范。 关于更多AUTOSAR架构下的TCP/IP特点分析,以及AUTOSAR架构下TCP/IP是如何优化配置使其更加适用于车内网络的话题,请持续关注北汇信息公众号后续的分享。 ATS规范体系中有一篇要特别介绍一下,那就是 AUTOSAR_PRS_TestabilityProtocolAndServicePrimitives 。 这篇文档中定义了一种测试桩(Test Stub)协议,用来支持车载以太网的测试,也就是我们常说的Upper Tester。我们在做TC8 TCP/IP测试时用到的Upper Tester,一般也是按照这份规范去开发的。更多关于Upper Tester的内容,可参考之前的文章 车载以太网-TC8 TCP/IP协议一致性测试实践-面包板社区 (eet-china.com) 中的介绍。 ATS与T C8 因为ATS本身属于AUTOSAR体系,所以ATS一般只适用于AUTOSAR节点。而TC8并没有对测试对象做要求,不论是AUTOSAR节点还是非AUTOSAR节点,都可以依照TC8进行测试。 但是有一点需要注意,有些商用AUTOSAR协议栈自带的Upper Tester(也称ETM)一般只能满足ATS中定义的测试,也就是只包含IPv4,UDP,TCP三个部分,如果需要完整的执行TC8的ARP,ICMP,DHCP等测试,需要进行额外的开发。 在TCP/IP的测试环境和测试方法方面,ATS与TC8并无本质的区别,可参考之前的文章 车载以太网-TC8 TCP/IP协议一致性测试实践-面包板社区 (eet-china.com) 进行了解。 在覆盖度方面,二者即有交集又有区别,我们做了一个简单的对比统计可供参考。 图2: AUTOSAR ATS 与 O PEN T C8 的 覆盖度 对比 大家可能有这样的疑问,针对ATS与TC8重叠的部分,所对应的测试脚本是否可以复用呢?答案是否定的,因为测试用例虽覆盖了相同的需求,但测试用例的设计方法不尽相同,所以测试脚本是不能完全复用的。 A TS 测试实践 下图展示了 A UTOSAR ATS TCP 部分 的 测试报告。 图3: A UTOSAR ATS TCP 的 测试报告 示意 可以看到TCP部分共有44条测试用例,其中有如下2条失败的条目。 IUT sends an ACK after receiving a data segment in FIN-WAIT-1 state IUT sends an ACK after receiving a data segment in FIN-WAIT-2 state 我们来分析一下失败的原因。 这两条测试用例分别验证了DUT作为TCP客户端时在FIN-WAIT-1和FIN-WAIT-2状态下接收数据的能力。 当客户端准备关闭连接时,会立即发送FIN,ACK来通知服务端,之后立即进入FIN-WAIT-1状态,当服务端应答之后,客户端会进入FIN-WAIT-2状态。 理论上,当TCP客户端发送FIN,ACK之后,就意味着客户端已经没有数据要发送了,但是此时还应具备接收数据的能力,也就是连接处于“半双工”(half-duplex)的状态,若此时收到服务端发送的数据,客户端应能够正确应答。 但是实际上被测设备并没有应答,而是发送了RST以通知服务端数据发生了丢失,这就导致了测试不通过。 关于连接半关的需求,最初源于RFC793,但是在RFC1122中重新进行了讨论,因为很多协议栈都由于操作系统的限制,不支持这个机制,在这些操作系统中,如果应用发起TCP关闭请求(比如调用close())之后,就不再具备发送或者接收数据的能力。 而我们可以在AUTOSAR_SWS_TcpIp的 这条需求中看到,AUTOSAR中其实并没有要求节点实现连接半关,这是测试用例的属性标记为“MAY“的原因。 图 4 : AUTOSAR_SWS_TcpIp 节选 如果协议栈不支持这个机制,就意味着在客户端发起连接关闭请求之后,如果服务端继续发送数据,这部分数据会被客户端丢掉,这在设计业务流程时要格外注意。 参考文档: AUTOSAR_EXP_AcceptanceTestsOverview.pdf AUTOSAR_ATS_IPv4.pdf AUTOSAR_ATS_UDP.pdf AUTOSAR_ATS_TCP.pdf AUTOSAR_SWS_TcpIp.pdf