0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

探究Harmony底座OpenHarmony的代码质量改进

北汇信息POLELINK 2023-04-03 15:23 次阅读

作者 |给你小鱼干小编 | 吃不饱 提到Harmony OS,想必大家并不陌生。其底座OpenHarmony是由华为捐出的OpenHarmony系统,并且由开放原子开源基金会孵化及运营, 目标是面向全场景、全连接、全智能时代, 搭建一个智能终端设备操作系统的框架和平台, 促进万物互联产业的繁荣发展[ 出自《OpenHarmony - 应用开发入门指南》。]。数月前,华为再度突破新的领域——与国航签约,华为将助力国航在以OpenHarmony为底座的HarmonyOS框架上构建应用/服务。作为汽车行业的新势力,华为在汽车领域拥有卓越的表现,市面上很多汽车已将Harmony OS作为其车机系统。

然而,OpenHarmony并不是专为汽车行业而研发。由于汽车行业的特殊性,车载软件对代码安全性的要求非常严格,在之前的文章中,我们使用了汽车行业主流的静态测试工具QAC验证OpenHarmony的安全性,过了这么久,OpenHarmony代码对汽车行业编码规范的合规性是否有所提升呢?接下来本文将使用汽车行业的另一款权威静态测试工具Klocwork,基于汽车行业内的常用编码规范MISRA C 2012(符合汽车功能安全要求,了解更多请见《带你走近MISRA C 2012》)和CERT(符合网络信息安全要求),对Harmony代码的合规情况进行测试。


本文对OpenHarmony主干源码1348版本的wifiiot_hispark_pegasus工程进行静态测试
01编译OpenHarmony
当前阶段,大部分的开发板源码还不支持在Windows环境下进行编译,如Hi3861、Hi3516系列开发板,因此需使用Ubuntu的编译环境对源码进行编译。
而在虚拟机中搭建Hi3861开发板环境步骤极为复杂,所以本文选择在OpenHarmony为开发者提供的Docker环境下进行编译,该方案在很大程度上简化了编译前的环境配置。伴随着越来越多的开发者使用Docker作为其开发环境,Klocwork也提供了Docker环境下静态分析方案支持。

搭建Docker环境

在使用Docker环境前需要先完成以下操作:1、安装Docker。2、获取OpenHarmony源码。具体操作请见官方文档(阅读原文查看)

编译源码

完成Docker环境搭建并获取源码后,我们就可以对源码的wifiiot_hispark_pegasus工程进行编译了。具体步骤如下:

进入源码根目录,执行hb set,根据提示选择wifiiot_hispark_pegasus工程。

83faa20e-cd4b-11ed-ad0d-dac502259ad0.png

执行hb build -f编译wifiiot_hispark_pegasus工程。显示build success说明编译成功。

840a6b9e-cd4b-11ed-ad0d-dac502259ad0.png编译的成功证明环境搭建成功,进而可以顺利进行Klocwork静态分析。02Klocwork静态分析
Klocwork是一款针对开发人员生产力、SAST和DevOps/DevSecOps的最佳静态代码分析工具,支持C、C++C#Java、JavaScript、Python和Kotlin,可以与CI/CD工具、容器、云服务和机器配置集成,使自动化安全测试变得容易。下面是Klocwork测试OpenHarmony代码的步骤。

执行如下命令创建Klocwork工程openharmony_test:

kwadmin --url http://192.168.9.116:8089/ create-project openharmony_test

Klocwork Validate平台是一个集中存储分析数据、趋势、度量和整个组织代码库配置的平台,可通过web浏览器访问。我们来到web端Validate中就可以看到刚才所创建的工程openharmony_test。
842422d2-cd4b-11ed-ad0d-dac502259ad0.png

执行下面同步命令,将wifiiot_hispark_pegasus工程源码同步到Klocwork的openharmony_test工程中来。

kwinject hb build -f

分析工程

执行分析前可在Validate中进行分析配置,勾选分析过程所需的规则。
84339ef6-cd4b-11ed-ad0d-dac502259ad0.png配置完成后执行下面命令开始分析:

kwbuildproject --url http://192.168.9.116:8089/openharmony_test ./kwinject.out --tables-directory ./Openharmony/my_tables

显示下面结果表示分析成功。
84578708-cd4b-11ed-ad0d-dac502259ad0.png

将分析结果上传到Validate

kwadmin --url http://192.168.110.110:8089/ load openharmony_test my_tables/

下面结果表示上传成功:84783804-cd4b-11ed-ad0d-dac502259ad0.png03分析结果
来到Validate查看Klocwork分析结果。工程配置的详细信息如下:84b8287e-cd4b-11ed-ad0d-dac502259ad0.png
wifiiot_hispark_pegasus工程工1652个文件,共分析了1557个.c文件、95个系统头文件,源码共180720行,注释共138844行。分析模块类别为:C和C++分析、CERT分析以及MISRA分析。

MISRA规则分析结果

Category Details列举了wifiiot_hispark_pegasus工程对MISRA规则违规情况的汇总:84d1886e-cd4b-11ed-ad0d-dac502259ad0.png违反Mandatory Rules规则数量排名前十的文件汇总:84e3daaa-cd4b-11ed-ad0d-dac502259ad0.png

CERT规则分析结果

列举了wifiiot_hispark_pegasus工程对每条CERT规则违规情况的汇总:84f7a116-cd4b-11ed-ad0d-dac502259ad0.png违反每条CERT规则数量排名前十的文件汇总:85195e78-cd4b-11ed-ad0d-dac502259ad0.png

Validate合规报告

Validate可生成定制化合规报告。这里我选择生成pdf形式的Generic合规报告,列举出了违规情况详情、规则的分类与其对应的检查器、违反规则源码所在文件及行数。
852e3bf4-cd4b-11ed-ad0d-dac502259ad0.png8544aab0-cd4b-11ed-ad0d-dac502259ad0.png

下面我们选出部分违反的MISRA C 2012 with Amendment 2 (C11) certified与CERT规则进行简单介绍:

MISRA C 2012规则分为三种不同类别:Mandatory(强制)、Required(要求)和Advisory(建议)

Mandatory Rules

FUNCRET.GEN: Non-void function does not return value.

规则说明:

FUNCRET.GEN检查器用于查找没有return语句的非void函数。

违规源码:

856207fe-cd4b-11ed-ad0d-dac502259ad0.png

int32_t OH_HashMapCreate函数是非空函数,但返回空值,所以此处违规。

UNINIT.STACK.MUST: Uninitialized Variable.

规则说明:

UNINIT.STACK.MUST检查器查找变量未初始化的行为。

违规源码:

8585ec00-cd4b-11ed-ad0d-dac502259ad0.png

第28行的变量vargs未初始化,所以此处违规。

Required Rules

MISRA.LOGIC.SIDEEFF: Right operand in a logical 'and' or 'or' expression contains side effects.

规则说明:&&和||运算符的右侧操作数的求值取决于左侧操作数的值。如果右边的操作数包含副作用,那么这些副作用可能会发生,也可能不会发生,这可能与程序员的预期相反。如果程序员依赖于发生的副作用,则对其中一个逻辑运算符的右手操作数的条件求值很容易导致问题。
违规源码859d28f2-cd4b-11ed-ad0d-dac502259ad0.png在162行中,将第118行的FOR_EACH_HC_VECTOR函数定义为一个for循环,而在表达式index < (vec).size(&(vec)) && \ (iter = (vec).getp(&(vec), index))中,&&操作符的右操作数中发生了赋值运算,导致该表达式具有副作用,所以此处违规。Advisory Rules

MISRA.GOTO: Goto statement is used

规则说明:

不得使用goto语句,因为无限制地使用goto语句会导致程序的非结构化和极难理解。

违规源码:

85ad4098-cd4b-11ed-ad0d-dac502259ad0.png

第669行使用了goto语句,所以此处违规。


CERT C Recommendations: CERT MSC13-C: Detect and remove unused values

VA_UNUSED.GEN: Value is Never Used after Assignment.

规则说明:

VA_UNUSED.GEN检查器查找分配给局部变量的值,这些值在下一次赋值或函数结束之前从未使用过。

违规源码:

85be5da6-cd4b-11ed-ad0d-dac502259ad0.png

第141行对变量sessionKey赋值,但后面未使用该变量,所以此处违规。

CERT C Recommendations: CERT EXP00-C: Use parentheses for precedence of operation

CERT.EXPR.PARENS: The precedence of operators within expressions should be made explicit.

规则说明:运算符在表达式中的优先级应该是显式的。违规代码:85ecfe4a-cd4b-11ed-ad0d-dac502259ad0.png第395行的表达式if (altGroup != NULL && AddStringToJson(reqParam, FIELD_ALTERNATIVE, altGroup) != HC_SUCCESS)优先级不明确,所以此处违规。04总结
本文使用Klocwork对OpenHarmony部分代码进行静态测试,我们了解了OpenHarmony对于汽车行业常用编码规范的合规情况,同时也对MISRA与CERT编码规范有了初步的认识。通过此次分析我们不难看出,与过去的版本相比,OpenHarmony的代码质量在不断提升。但对于想将OpenHarmony应用于汽车行业的开发者来说,还需要根据汽车行业的要求,对OpenHarmony代码进行调整,以符合汽车功能安全与信息安全编码规范。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • OpenHarmony
    +关注

    关注

    25

    文章

    3713

    浏览量

    16254
  • Harmony
    +关注

    关注

    0

    文章

    52

    浏览量

    2601
收藏 人收藏

    评论

    相关推荐

    【「OpenHarmony开发与实践 | 基于红莓RK2206开发板」阅读体验】+初体验2连发发

    啥也不说先上图 对于《OpenHarmony开发与实践 | 基于红莓RK2206开发板》这本书的热爱,简直就像夏日里的一股清泉,让人忍不住想要一探究竟! 这本书的排布,简直就是一场视觉盛宴,章节
    发表于 09-18 18:01

    【龙芯2K0300蜂鸟板试用】OpenHarmony代码

    收到龙芯2K0300蜂鸟开发板后,对开发板做了一些了解和研究,现将OpenHarmony代码提供给大家测试,也希望大家能更多的认识龙芯2K0300蜂鸟开发板,下面先简单介绍一下这块开发板。 广东
    发表于 09-18 11:42

    基于ArkTS语言的OpenHarmony APP应用开发:HelloOpenharmony

    开发板验证通过,具体代码可参考:https://gitee.com/Lockzhiner-Electronics/lockzhiner-rk3568-openharmony/tree/master
    发表于 09-14 12:47

    高文院士:低空经济“起飞”,要筑牢这三个“底座

    代表,围绕“数字低空”全面探讨数字底座如何为低空经济的发展保驾护航。 中国工程院院士、鹏城实验室主任、广东院士联合胡高文在会上表示,推动低空经济高质量发展, 要筑牢三个“底座”,即政策“底座
    的头像 发表于 08-06 09:20 527次阅读

    DevOps中的质量门工作原理,以及静态代码分析Klocwork和Perforce Helix QAC在质量门中的实践应用

    质量门”正如其名:它们在软件开发生命周期(SDLC)的各个阶段充当质量里程碑(或 "门槛"),防止不良代码通过,从而确保交付高质量的软件。 阅读本文,您将了解什么是
    的头像 发表于 07-29 15:12 387次阅读

    400万!深开鸿OpenHarmony主仓代码贡献量再创里程碑!

    2024年7月8日,据OpenAtomOpenHarmony(以下简称“OpenHarmony”)官网显示,深开鸿在OpenHarmony社区主仓代码贡献总量超过400万行,在华为以外
    的头像 发表于 07-09 08:33 349次阅读
    400万!深开鸿<b class='flag-5'>OpenHarmony</b>主仓<b class='flag-5'>代码</b>贡献量再创里程碑!

    直击HDC2024:海思携手OpenHarmony,产品力+生态圈引爆AIoT场景应用

    海思携手OpenHarmony,其构成的核心竞争力是什么?带来哪些物联网场景体验的提升?海思与OpenHarmony合作有哪些阶段性的成果?跟随电子发烧友记者的脚步,我们一起来海思+OpenHarmony展区一
    的头像 发表于 06-28 09:15 4706次阅读
    直击HDC2024:海思携手<b class='flag-5'>OpenHarmony</b>,产品力+生态圈引爆AIoT场景应用

    基于STM32单片机的电脑底座系统设计

    电脑智能底座系统可以监测和控制底座的工作状态,包括温度控制和角度调节功能,提升了底座的智能化和实用性,为用户提供了更加舒适和便利的使用体验。
    的头像 发表于 06-24 09:58 482次阅读
    基于STM32单片机的电脑<b class='flag-5'>底座</b>系统设计

    报名开启!第二届OpenHarmony开发者大会2024重磅来袭!

    操作系统根社区”,截至2024年4月25日,OpenHarmony版本迭代到 4.1 Release 版本,已有超过7500名贡献者、70家共建单位,累计产出1亿多行代码;社区已有293家伙伴,构建
    发表于 05-14 15:23

    【开源鸿蒙】下载OpenHarmony 4.1 Release源代码

    本文介绍了如何下载开源鸿蒙(OpenHarmony)操作系统 4.1 Release版本的源代码,该方法同样可以用于下载OpenHarmony最新开发版本(master分支)或者4.0 Release、3.2 Release等发
    的头像 发表于 04-27 23:16 904次阅读
    【开源鸿蒙】下载<b class='flag-5'>OpenHarmony</b> 4.1 Release源<b class='flag-5'>代码</b>

    OpenHarmony南向能力征集令

    、DRM等; 3、芯片接入OpenHarmony的时候有什么困难,是否有改进建议? 大家的意见,会反馈给OpenHarmony开发团队。 可以在 Laval社区原帖评论区 留言。
    发表于 04-09 15:32

    鸿蒙开发学习:【OpenHarmony HAR】

    OpenHarmony js/ts三方库使用的是OpenHarmony静态共享包,即HAR(Harmony Archive),可以包含js/ts代码、c++库、资源和配置文件。通过HA
    的头像 发表于 03-18 16:27 743次阅读

    [鸿蒙]OpenHarmony4.0的Rust开发

    OpenHarmony 为了集成 C/C++ 代码和提升编译速度,使用了 GN + Ninja 的编译构建系统。GN 的构建语言简洁易读,Ninja 的汇编级编译规则直接高效。 为了在 OpenHarmony
    的头像 发表于 02-26 17:28 876次阅读
    [鸿蒙]<b class='flag-5'>OpenHarmony</b>4.0的Rust开发

    【鸿蒙】OpenHarmony 4.0蓝牙代码结构简析

    OpenHarmony 4.0蓝牙代码结构简析前言 OpenHarmony 4.0上蓝牙仓和目录结构进行一次较大整改,本文基于4.0以上版本对蓝牙代码进行分析,便于读者快速了解和学习
    的头像 发表于 02-26 16:08 1535次阅读
    【鸿蒙】<b class='flag-5'>OpenHarmony</b> 4.0蓝牙<b class='flag-5'>代码</b>结构简析

    open harmony照明开关应用介绍

    最近几年,智能家居成为了人们日常生活中的热门话题。其中,智能照明系统作为智能家居的重要组成部分之一,正在迅速流行起来。而今天我将为大家详细介绍一款智能照明系统中的开关——open harmony照明
    的头像 发表于 01-05 17:00 1121次阅读