软件代码质量检测实践
2019-09-10罗来财
摘 要:随着软件系统规模的增加,软件代码质量越来越难以控制,需要借助有效的软件工程方法和工具来应对新的挑战。本文指出软件代码质量的主要问题是代码风格统一问题、C语言编码安全问题、GCC编译告警监控问题,然后根据CMMI的软件质量过程和ISO的软件质量模型对各类规则进行梳理,并编写相应的脚本程序静态检测代码质量,最后对检测数据进行统计分析并以Web形式输出报表。
关键词:代码质量;质量模型;代码风格;编码安全
中图分类号:TP311.1 文献标识码:A 文章编号:2096-4706(2019)23-0083-03
Software Code Quality Inspection Practice
LUO Laicai
(Ruijie Networks Co.,Ltd.,Fuzhou 350002,China)
Abstract:With the increase of software system scale,the quality of software code are more and more difficult to control,effective software engineering methods and tools are needed to meet new challenges. This paper points out that the main problems of code quality are code style unification,C language coding security,GCC compilation alarm monitoring. Then,according to the software quality process of CMMI and the software quality model of ISO,all kinds of rules are sorted out and corresponding script programs are written to statically check the code quality. Finally,the test data is analyzed and the report is output in the form of Web.
Keywords:software quality;quality model;code style;coding security
1 代碼质量存在的主要问题
在软件开发过程中,软件源代码质量是相对难以评测的要素。尽管行业的标准组织出台了很多相关规范,有些甚至提供了用来度量软件质量的工具,但实施成本过高,比较难落地。典型的瀑布开发模型,从需求分析到架构设计,再到详细设计,然后构造编码,最后测试集成维护,软件质量问题贯穿整个开发过程。代码质量是软件质量的一种内部表现,主要包括功能的适合性、可维护性等。具体到软件开发过程,代码质量问题主要分为代码风格统一问题、编程语言的安全问题、编译工具告警开关以及告警消除的监控问题。
开发团队中不同的人有不同的代码风格偏好,虽然没有绝对的对错,但是有一条原则需要遵守:少数服从多数。执行企业发布的编码标准规范保持代码风格统一是改善代码可维护性的一个重要方面。C语言以其灵活的类型转换和贴近底层机器实现、目标代码效率高的特性成为嵌入式软件领域最流行的编程语言。随着系统复杂度的不断提高,编码中的一些小瑕疵往往会引发严重的安全问题。SEI基于长期的C语言标准相关技术报告的研究总结了一套被普遍接受的CERT安全编码标准规则。为了使CERT安全编码规则落地,在软件开发的过程中,在编译工程环境里集成安全编码的静态分析工具是有必要的。GCC的告警种类很多,针对软件开发项目采用不同的编译器或者不同的编译器版本建立统一的告警等级状态并生成直观的报告信息是有必要的。
2 行业相关技术规范
2.1 CMMI的软件质量过程
能力成熟度模型集成(CMMI)中包含了代码质量改善相关的过程流程。
CMMI的过程与产品质量保证(PPQA)过程域指出,过程与产品质量保证嵌入在项目整个生命期,向项目员工与各层次的管理人员提供对过程与相关工作产品适当的可视化及反馈,由此支持高质量产品交付。这里强调的内容是,已经计划的过程得到实施,通过实施过程的有序开展确保交付产品的质量。另外,产品规定的需求是否得到满足由单独的验证过程域(VER)进行保障。PPQA的启示是,需要在软件开发的过程中分阶段实时反馈质量状况。
CMMI的量化项目管理(QPM)属于成熟度4级过程域,其中包括选择将用于量化管理的度量项,使用统计与其
他量化技术来监督所选子过程的性能。统计与其他量化管理技术用于预测过程的性能可以用于多个层面,从对单个子过程的关注到对跨越生命周期阶段、项目以及支持职能的分析。QPM的启示是,需要在软件开发的过程中采集量化数据评估预测质量状况。
2.2 ISO的软件质量模型
ISO关于产品质量的定义是:软件产品满足规定的和隐含的需求的能力有关的特征或者特征集合。由此可以看出,特征是软件质量状况的反映,软件属性可以做评价准则,定量化的度量软件属性可以知道软件质量的优劣。ISO/IEC 250nn系列技术标准描述了软件系统质量需求和评估方法,包含的系统软件质量模型的8个一级质量特征类型:功能适合性、运行效率、兼容性、易用性、可靠性、安全性、可维护性、可移植性。
为了能够在产品(软件系统)发布前对产品质量做出比较准确的判断,需要建立质量模型并根据质量模型进行度量评估。软件质量包括内部质量(过程质量)和外部质量(使用质量)两个方面,软件内部质量中重要的组成部分是源代码质量,包括代码风格统一、编码安全规则和编译告警消除等。
3 代码质量检测实践
3.1 嵌入式开发的编码过程
编码过程是软件开发过程的一个重要方面,在嵌入式软件开发领域,绝大部分代码还是需要程序员手工编码、编译、单元测试、提交代码库、集成编译、集成测试。通常的编码过程包括:
(1)编码人员计算机本地环境:根据设计编码、在工程环境里编译、单元测试调试;
(2)企业的代码集成服务器环境:代码版本管理、集成编译、集成测试调试。
基于软件领域中越早修复问题成本越低的原理,软件代码质量检测的实施应该尽量在计算机本地环境开发阶段进行,但是某些全局性问题必须在服务器环境开发阶段才可以实施,比如整个系统范围的代码重复率评测。
3.2 代码质量检测
静态代码检查主要的作用是提高软件的功能适合性和可维护性。其中功能适合性的提高通过实施C语言的CERT安全编码标准规则检查来达成;其中可维护性的提高通过实施企业编码标准的检查来达成。另外,GCC编译器编译告警开关的检查(消除告警)和代码重复率评测,也对功能适合性和可维护性有很大帮助。代码质量检测的一种有效的方式是把代码质量规则检查过程内嵌到编码过程中,让软件编码人员在日常的开发活动中就消除质量隐患。代码质量检测的系统模型如图1所示。
图1系统模型中描绘了静态代码检查的主要过程,在编码人员的本地环境编译工程环境里嵌入脚本程序检查编码风格、编码安全、编译告警开关;在企业的编译服务器進行集成编译时重复检查编码风格、编码安全、编译告警开关,另外还要评测代码重复率。
其中编码风格企业标准检查,主要的目的是落实企业的编码标准,统一编码风格,提高代码的可维护性。一份编码标准通常包含几十条至几百条具体的规则,比如函数类的规则:
FUNC-1:一个函数的代码规模应控制在120行(不含空白与注释在内)以内,不符合本条需特别给出说明;
其中CERT规则检查,主要是以CERT规则为基础减少因为C语言的指针等功能引入的编码问题。CERT的C语言编码安全规范列举了几百条具体规则,比如预处理类的规则:
PRE30-C:不要通过连接创建通用字符名称。虽然C语言支持通用字符名称,但是如果匹配通用字符名称的序列由符号连接(比如##)生成将产生未定义行为。
GCC编译告警开关检查,主要监控不同的GCC版本环境下的告警开关和告警消除情况。以GCC 8.1为例,可配置开关的有220多条规则,可以归到Wall和Wextra等类型。高质量的软件代码需要消除所有的编译告警。代码重复率评测是在整个项目分支范围内根据局部代码逻辑相似度排查代码片段的重复情况。通过代码重复率的评测和控制,可以减少需要维护的代码量,使软件模块具有高内聚低耦合特性。
代码分支的质量数据经过统计分析后以Web方式呈现,可以分类展示结果数据,包括编码标准、GCC告警、CERT安全。每一类的结果数据又分为综合统计数据和各个组件包明细数据。有了这些统计数据,软件项目管理人员就可以很方便地看出当前的代码质量状况,进一步采取措施改善代码质量。
4 结 论
本文通过软件代码质量检测的分析与实践,为代码软件质量的提高找到一种有效并且容易实施的方法过程。软件系统规模和复杂性的增加不可避免,同时,软件开发效率的提高和开发方法过程的增强也是大势所趋。本文论述的根据CMMI的软件质量过程和ISO的软件质量模型进行代码质量检测实践,可以通过较少的资源投入获取较好的软件代码质量,是一种科学有效的软件工程方法。
参考文献:
[1] 孙洋,袁玉宇.ISO/IEC 25010质量模型标准现状 [J].信息技术与标准化,2008(11):33-36.
[2] SEACORD R C .CERT® C Coding Standard,Second Edition,The:98 Rules for Developing Safe,Reliable,and Secure Systems,2nd Edition [M].Addison-Wesley Professional,2014.
[3] SEACORD R C .C和C++安全编码(英文版)(第2版) [M].北京:机械工业出版社,2013.
作者简介:罗来财(1981.11-),男,汉族,江西玉山人,本科,中级职称,主要研究方向:软件开发和软件工程相关技术。