APP下载

家用电器嵌入式软件可靠性研究

2023-10-18吴学伟

日用电器 2023年8期
关键词:嵌入式软件代码逻辑

吴学伟

(珠海格力电器股份有限公司 珠海 519070)

引言

随着生活水平的提高,用户对空调的需求已经逐渐从满足简单的制冷、制热基本功能向舒适、节能、健康和智能等多维度需求转变,控制器作为空调器的大脑,也随着需求的增加而越发复杂。而由于商用空调系统复杂,对其可靠性的要求更高,控制逻辑就更加复杂。表征软件复杂程度最直观的是软件需求规格书的规模,软件需求书的规模从早期定频空调的几页发展到现在智能化变频空调超过100 页,嵌入式软件的代码也增长了十倍以上,需求规模的爆炸式增加也导致了软件的缺陷问题越来越多,软件的可靠性已经成为空调开发进度及质量控制最为关键的难题。嵌入式软件的可靠性不仅涉及到系统的稳定性和安全性,还直接影响到整个系统的可靠性和性能,例如某开发项目因一个变量未初始化,导致产品在量产后出现室外机变频风机概率性无法正常启动运行,严重影响产品可靠性。因此,如何提高嵌入式软件的可靠性成为了一个重要的研究方向。查阅文献资料,在嵌入式软件可靠性方向仅有一些军用产品负方面有一些相关的文献和研究,家电产品目前研究较少,特别是软件开发过程在规范性方面存在较大不足,急需从工程管理和规范方面进行系统性的研究加以规范,提升软件产品的可靠性[1-4]。

1 软件可靠性基本概念

可靠性是指产品在规定的条件下和规定的时间内完成规定功能的能力,对应到软件,指的是软件在规定的条件下和规定的时间内不引起系统失效的能力[5]。

从图1可以看出,软件故障产生的根源是由于开发人员的失误导致,并且长期存在于产品中,但是只有在特定的环境条件下才会触发才会产生故障,其通常具有隐蔽性,较硬件故障更难以发现;软件还具有一致性和不变性的特征,如果软件设计存在缺陷,则在特定环境下将百分百会在产品使用过程中出现,导致产品出现批质量事故,严重的缺陷甚至导致空调完全无法使用甚至损坏。

图1 软件故障的因果关系

2 软件失效的原因

软件失效的原因都是因为在运行过程中出现了故障。故障产生有内在和外在原因,内因是开发过程中形成且未被排除的潜在缺陷,例如需求理解错误、算法错误、软件编码错误等原因。外因是软件外部给软件提供的各种非期望条件。

根据多年的嵌入式软件开发经验,空调嵌入式软件失效的主要原因是人为的偶然失误,统计本部门近三年的100 个嵌入式软件开发项目软件失效问题,发现主要原因是需求理解和软件编码,详细占比如图2。

图2 软件失效的原因分类

针对出现的软件问题,统计问题的特性,发现有接近90 %的问题是重复性出现的,甚至是多次出现。包括相同的需求逻辑不同的软件开发人员重复犯同样的错误,不同的软件开发人员犯了相似的编码错误,如图3、4所示。

图3 软件人为偶然失误的原因分类

图4 软件问题的重复比例

3 提升软件可靠性的主要措施

3.1 软件工程管理

大型的计算机软件高度复杂,普遍都适用了软件工程的方式进行开发和管理,但在相对简单的嵌入式系统软件开发中,很多场合还是一个或少数几个软件设计员包打天下,开发过程相对原始,容易把嵌入式软件开发简单化成编程,从而造成了软件质量难以管理,特别是软件规模的暴增之后,迫切需要采用软件工程的思路进行开发管理。

空调产品属于家用电器,但其使用年限、质量要求又近于工业产品,根据产品特点,软件开发模型选择了瀑布模型,主要阶段包括需求分析、设计、编码和测试。

根据前面对失效原因的统计分析,需求理解是软件人为失效的主要原因,需求的理解错误往往产生于软件开发人为对控制逻辑的想当然,对需求缺乏必要的评审以及对需求实现的过程管理,这点通过软件工程的需求分析,以及概要设计和详细设计可以较好的解决[6,7]。

3.2 需求分析

需求分析是指对用户需求进行分析和整理,确定系统的功能和性能要求。在嵌入式软件开发过程中,需求分析是非常重要的一步。如果需求分析不清晰、不准确,就会导致后期的开发和测试出现问题,从而影响系统的可靠性。

为了确保需求分析的准确性,可以采用以下方法:

1)充分与用户沟通,了解客户的真实需求。

2)制定合理的需求文档,明确系统的功能和性能要求。

3)对需求进行评审,确保需求的完整性和一致性。

空调主控的逻辑需求,其来源是公司内部的制冷系统工程师,其编写逻辑的思维与程序员思维往往差异较大,简单的一段话描述在不同的人会有多样的理解,这些都是需要在需求分析过程中加以避免的,特别是一些复杂的,时序性强的逻辑。通过长期的经验,笔者总结如果能够采用如下几种方式基本可以避免理解上的歧义:

3.2.1 格式规范和标准化

采用结构化的语言或思路进行描述,格式标准化,条件必须是独立完整的,条件要互斥且闭合,不能通过备注的方式二次甚至多层组合,备注作用仅做解释辅助理解(表1)。

表1 结构化语言格式

3.2.2 语言描述要求

1)语法:只使用祈使语句一种,明确的表达做什么。

2)词汇:名称表达要规范统一,参考各类国家标准的写法,需要解释的术语统一定义,如故障恢复方式。避免使用一些空洞的名词、形容词、副词等,可使用一些运算符、关系符等。

3)参数:所有参数(如压缩机连续运行时间,模式)都必须要有数值范围、初始化值和精度,如故障检测时间变量计时精度是0.1 s、1 s还是1 min。

4)逻辑层次:对条件较多,有“且”和“或”组合关系,用括号辅助表达层次关系。一个括号只有一种逻辑关系,括号可嵌套。

5)逻辑关系:“且” 和“或”要准确。

3.2.3 避错设计

1)模块化:严格按照功能模块划分,不写与主题无关内容

如:如故障检测逻辑只能写检测逻辑,不允许顺带写负载如何控制。

2)模块独立:和其他模块关联少,不同模块间的内容减少耦合,少跳转

如:如功能和保护的嵌套,化霜和回油嵌套等。

3)局部化:关系紧密的逻辑尽量彼此靠近。

4)简单化:在能实现功能的情况下条件判尽量简化,接口参数尽量少,总参数尽量少。

3.3 软件的可重用设计

针对同一功能重复出现问题,究其原因重用性低是主要原因,有完全一样的功能重复开发,也有功能接近的需求重复开发,这除了容易造成程序质量问题,还极大的浪费了公司的开发和测试资源。

代码可重用性是指代码的可复用性和可移植性。尽量使用成熟经过反复验证的可靠的功能模块,搭建软件CBB库,提炼可以在不同产品之间共用的、可靠性要求高的功能模块,可重用模块必须经过严格测试和入库评审机制才可入库,通过制定奖励制度鼓励软件开发人员积极的使用库文件,从而提升开发效率和质量。

3.4 编码规范化

嵌入式软件通常采用C语言编码,C语言语法简单灵活性高,灵活性高是把双刃剑,需要在工程使用中进行严格的限制,最大限度的规范化使用,避免出现代码千人千面,难以维护。

C语言可靠性设计在标准上没有明确的标准规范,但在一些可靠性要求较高的行业有一些成熟的规则可供借用,如MISRA C Coding Standard[5],这是被认为工业标准的C编程规范,包括了一百多条C语言编码标准,如果能够完全遵守这些标准,则你的C代码是易读、可靠、可移植和易于维护的。企业可以在MISRA的基础上,再根据自身产品的实际代码特点,结合设计开发过程出现的突出问题不断进行总结完善,形成公司级的编码规范。举例如下:

3.4.1 排版

排版不直接影响软件的质量,但不好的排版风格可能诱发可靠性问题,一个项目团队应该有统一的风格,包括缩进、空行、分行、大小括号使用等等都需要有规范并且严格执行。

3.4.2 注释

注释量不低于语句的20 %,注释的表达要规范。

3.4.3 可读性

变量命名尽量自解释,不能用拼音;常量命名要大写等。

3.4.4 编码可靠性规则

这是影响代码可靠性的最核心部分,也是所有编程人员应该熟记并强制执行的规则,如变量初始化问题,所有变量和寄存器都要有初始化,即使上电有默认值也要初始化。

4 结论

随着芯片、通讯和人工智能等技术的迅猛发展,嵌入式软件的应用将会越来越广,软件规模越来越大,复杂度越来越高,因软件故障造成的产品可靠性问题也将更加突出,急需引起重视。通过对软件工程化管理、需求分析、代码编写规范和提高代码的重用率等方面进行规范化标准化设计,可以有效地提高嵌入式软件的可靠性,项目团队在通过以上措施之后,每个项目的软件平均缺陷下降23 %,重复性问题下降33 %,效果显著。

猜你喜欢

嵌入式软件代码逻辑
刑事印证证明准确达成的逻辑反思
逻辑
创新的逻辑
创世代码
创世代码
创世代码
创世代码
实时嵌入式软件的测试技术
全景相机遥控器嵌入式软件V1.0 相关操作分析
女人买买买的神逻辑