敏捷、DevOps和嵌入式系统测试
01
覆盖率测试概念
“测试”在百度百科中的注释为:具有试验性质的测量,即测量和试验的综合。如今人们在提到“测试”时,通常指代的是软件测试(Software Testing),而本文着墨对象则为嵌入式系统测试(Embedded Testing)。嵌入式系统测试,特指对嵌入式系统中的软件部分进行测试,与软件测试有所不同。
1.1. 嵌入式系统的具体定义
IEEE(国际电机工程师协会):嵌入式系统是“控制、监视或者辅助装置、机器和设备运行的装置的简称”(Devices used to control, monitor, or assist the operation of equipment, machinery or plants)。
国内普遍认同的定义:以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统多功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。通常嵌入式系统对可靠性的要求比较高。
了解两种定义后,不难看出嵌入式系统是软件和硬件的综合体。
1.2. 嵌入式系统的软件部分
嵌入式软件通常包括嵌入式系统软件(操作系统、启动程序、中间件)和嵌入式应用软件,作为嵌入式系统的重要组成部分,其字面定义为“嵌入在硬件中的操作系统和开发工具”,如数字电视的中间件软件、洗衣机的自动控制软件、汽车的自动泊车辅助软件等。只有软件部分准确无误,嵌入式系统的功能才能被安全、准确地使用。
嵌入式软件通常具有专用性(一个嵌入式软件只进行特定的一项或几项工作)、实时性(运行时间受严格限制)、内存容量较小等特点。时至今日,嵌入式设备逐渐开始向物联网转变,所带来的安全隐患也更令人担忧。若嵌入式软件安全性出现问题,因其应用场景的特殊性,很有可能会带来灾难性的后果,造成重大的生命、财产损失。因此,嵌入式软件对可靠性与安全性的要求通常会高于普通软件,对测试的要求也更高更精细。
为迎合当前软件开发和实践逐渐向敏捷(Agile)和DevOps发展的趋势,本文将讨论如何将之应用于嵌入式软件开发和测试。
02
敏捷、DevOps及其价值
敏捷
敏捷,又称敏捷开发,指以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。在敏捷开发中,开发者在软件构建初期就将项目整体分为多个子项目,并对每个子项目的成果都进行测试,使之具备可视、可集成和可运行使用的特征。
DevOps
DevOps是一组过程、方法与系统的统称,用于促进开发、运维和质量保障部门之间的沟通、协作与整合。(点击查看更多DevOps相关内容)
▲敏捷和DevOps分别对应不同阶段
纵观过往可以发现,物联网设备制造商的新产品发布周期通常为2-3年,但其软件更新则非常频繁。产品发布首年软件可能会更新3-4次,频繁者甚至每月都会定期更新。但发布后时间一长,由于软件开发和测试成本过高,更新便会停滞不前,设备也会随之变得陈旧。
如何保证更新质量,提升产品生命周期,从而提升产品销量、提高品牌信任度呢?采用敏捷和DevOps是个不错的选择。
03
如何应用敏捷和DevOps?
敏捷通过流程管理手段,应用一些理论框架(比如Scrum、Kanban),主要解决业务部门和开发部门之间的矛盾点,让双方能够进行快速沟通,达成高效协作。而DevOps主要通过一些工程实践方法,结合自动化工具,解决开发、测试、运维部门之间的矛盾,使产品功能能够快速、稳定的上线运行。
具体应如何执行?
(1) 充分了解项目构成与开发、测试的步骤,尽可能独立测试每一组件。
(2) 尽量对不同组件进行独立发布,耦合度越高的组件越容易产生影响整体发布进度的问题。
(3) 先进行单元测试、完整组件测试,确保接口经过完全测试,为集成测试做好准备。
尽管上述步骤可以确保集成测试顺利进行,但仍然存在一些困难:某些功能需要多个组件汇总后才能被公开和正确地测试,如果没有合适的测试工具,该项工作的难度是巨大的——嵌入式设备通常隶属于某一特定领域,需要的测试工具垂直性较强。
04
嵌入式系统测试的难度
(1) 嵌入式系统经过大量优化,通常运行的内存较小,随着系统复杂度越来越高,后期更新系统软件的某一部分时,但凡出现任何差错,都可能对其他部分产生无法预计的后果。
(2) 嵌入式系统的复杂度导致测试人员很难通过运行简单的测试代码来调试系统,而附加调试器则会改变软件的运行方式。
(3) Bug复现异常困难,但只有对其进行稳定复现,才能正确地对问题进行定位、解决及验证。
为解决上述困难中出现的问题,开发团队应避免将功能测试放到开发和测试周期的最后阶段,而应该将其贯穿于整个项目周期并频繁而彻底地执行,仔细跟踪每次构建更新后的系统性能指标,避免新代码与功能增加造成的性能下降。
尽可能独立测试每个组件也同样重要。这不仅仅需要测试人员进行独立测试工作,更需要设计、运维人员协同合作,使用敏捷和DevOps方法,能够减少组件之间的依赖关系,以便定期、可预测地进行软件发布,使发布节奏适应每个组件的特性,也能透明化发布节点、发布内容,提升团队内部协调性。
SkyEye,中文全称天目全数字实时仿真软件(点击查看详情),是基于可视化建模的硬件行为级仿真平台,集合了自动化测试功能,在自动化测试完成后还可生成测试报告。嵌入式代码无需烧写到设备中即可通过SkyEye在PC机上运行。同时,SkyEye还可提供命令行工具的控制仿真,可以集成到持续集成工作流中,助力DevOps实践。
更多SkyEye相关内容,欢迎点击link或访问 www.digiproto.com 进行了解!
参考链接
https://www.devopsonline.co.uk/applying-devops-and-agile-to-embedded-testing/