基于静态分析的应用代码质量管理体系研究及应用

来源 :中国新通信 | 被引量 : 0次 | 上传用户:yanjiawei2005
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  【摘要】 本文在分析电信运营商在应用代码质量管理方面存在的问题的基础上,结合静态分析技术、管理体系、代码质量等核心技术及理念,提出了基于静态分析的应用代码质量管理体系,并重点描述了该理论在省公司进行试点验证的成果。最后对该理论的应用前景进行了简要展望。
  【关键词】 代码质量 电信业务支撑系统 静态分析 管理体系 评估模型 质量规范
  随着软件项目规模越来越大,代码质量审计已变得非常重要,原始的作坊式的人工代码审计逐渐成为项目的瓶颈,如何有效地进行代码质量管理成为运营商面临的重要课题。
  一、电信运营商对应用代码质量管理体系的需求
  应用代码质量管理体系建设的需求驱动源于企业运营标准化、精细化管控的内在驱动和市场竞争的外在驱动。企业内部运营的需求驱动主要源于风险控制要求、系统标准化建设及企业精细化运营管理所要求的系统支撑要求。市场竞争的外在驱动源于市场竞争形势的变化以及客户对业务系统高质量服务能力的要求。
  内在方面,当前阶段企业在交付软件系统或验收软件系统时,除了验证软件所实现的功能,另一个重要的方面就是考察软件代码本身的质量。
  外在方面,随着电信行业运营商竞争的日益激烈,客户对服务的要求也不断提高,能否提供高品质的客户服务是我们重要的竞争筹码。确保系统保持稳定、健壮、高效支撑是业务系统支撑人员的首要任务,这就对业务系统的代码质量提出了更高的要求。
  针对电信运营商业务支撑系统的现状,本文提出的一种基于静态分析的应用代码质量管理体系,从系统源代码的角度出发,通过制定应用代码质量规范、建立评估模型、同时提出一套应用代码质量管理流程利用代码规范和评估模型对应用代码质量元素进行度量,评价和管理软件交付时的代码质量,从源头上把控业务系统质量。
  二、应用代码质量管理体系的研究内容
  2.1 静态分析技术
  静态分析技术是指在不执行源代码的情况下,对代码中组件关系和方法调用、代码复杂度以及代码编写方法进行评估的过程。程序的流程提供了对代码结构的理解,静态分析的目的是确保程序代码依从公司和业界的标准。
  静态分析的类型可以分为以下四类:代码审查、结构分析、软件度量、数据流分析。代码审查的内容包括:编码风格的常规检查、基于每一个类发现萌芽状态的bugs。结构分析主要能够发现交互类的依赖关系、发现循环依赖、hubs等。软件度量是指度量软件复杂度、大量标准度量指标,如代码行统计, McCabbe, Halstead度量集等。数据流分析主要检查代码符号执行、很好的发现资源和内存的泄漏。
  静态分析的过程通常包含两个阶段:运行工具阶段和人工审查代码阶段。如图1所示,按照事先定制好的规则,对系统源代码进行扫描分析,得到原始扫描结果,这一过程通常是借助静态代码扫描工具完成;接下来的阶段是人工参与审查代码,分析、确认、筛选结果,并通过汇总整理得到最终的结果。
  软件开发过程中的一个重要原则就是缺陷发现的时间越早越好,如果能控制软件缺陷,就可以得到高质量的软件。静态分析工具根据软件的结构、内容或文档来评价软件系统,而不需要执行程序。因此,可以较早地发现程序代码中的缺陷,使得后面的软件开发阶段可以着重分析复杂功能以及算法上的错误。
  2.2 管理体系概述
  管理是指通过计划、组织、领导、控制及创新等手段,结合人力、物力、财力、信息等资源,以期高效的达到组织目标的过程。管理是由计划、组织、指挥、协调及控制等职能为要素组成的活动过程。广义的管理是指应用科学的手段安排组织社会活动,使其有序进行。狭义的管理是指为保证一个单位全部业务活动而实施的一系列计划、组织、协调、控制和决策的活动。本文指的是狭义的管理。
  2.3 代码质量
  软件质量是指软件系统或系统中的软件部分的质量,即满足用户需求。它包含两个方面,功能(Functional)质量和结构(Structural)质量。软件功能质量反映了软件符合功能要求规格的能力;软件结构质量反映了软件满足支撑功能性的非功能够性需求的能力,如鲁棒性、可维护性。结构质量是通过对软件的内部结构、源代码进行评估,即检查代码有没有遵守现有成熟的规范;而软件功能质量更多的是依赖软件功能测试计量。
  代码质量是程序代码质量特性的总体,它是一个抽象的概念,无法直接度量。代码质量审计是对应用程序源代码进行系统性检查的工作。它的目的是为了找到应用程序在开发阶段存在的一些缺点或者程序逻辑错误,分析并找到可能引发的风险漏洞,并提供代码修订措施和建议,避免程序漏洞被非法利用给企业带来不必要的风险。代码质量维度(dimensions of quality):代码质量的子特性,是衡量代码质量的不同方面,是对代码质量的结构化细分,如图2所示。
  三、应用代码质量管理体系
  基于上述研究,本文提出基于静态分析的应用代码质量管理体系的方法论。该体系包含三个方面的内容:应用代码质量规范、应用代码质量评估模型和应用代码质量管理流程。
  3.1 应用代码质量规范
  应用代码质量,顾名思义,也就是从代码的角度评价软件系统的质量。它将代码质量属性划分为六个特性(维度),包括正确性、规范性、易读性、安全性、可维护性和可移植性(图3),并进一步细分为若干子特性,这些子特性可用相关的技术手段来测量。
  应用代码质量指标体系总体上可以分为以上6个维度:正确性、规范性、易读性、安全性、可维护性、可移植性。(1)正确性:是指软件程序能够符合编码正确无误的能力。包括:初始化、异常处理等相关的编码规范的约定。(2)规范性:是指软件程序符合国际、国内、行业标准的能力。包括页面元素的可访问性、最优化(符合特定语言的最佳实践)等。(3)易读性:是指软件程序能够被阅读、理解、学习的能力。易读性标志了代码能够被其他人员理解、维护的程度,包含代码里面的注释、函数、变量、类的命名、以及代码风格的约定。(4)安全性:是指软件程序规避安全漏洞,能够避免安全风险的能力。从代码层面规避安全漏洞的风险,如sql注入、跨站脚本攻击、内存溢出等等。(4)可维护性:是指软件程序可被修改的能力。主要包含代码复杂度的度量等。(5)可移植性:是指软件程序从一种环境迁移到另一种环境的能力。包括变量类型转换、数组长度、标识符的相关约定。   3.2 应用代码质量评估模型
  在介绍应用代码质量评估模型之前,我们先来介绍一下度量元的概念。
  3.2.1 代码质量度量元
  代码质量度量维度是将代码质量划分为不同的几个方面,但仍然不是可以直接度量的指标。在每个维度下面我们又细分出可以直接度量的质量元素,我们称之为度量元。度量元是最小的代码度量单位。比如,程序的圈复杂度、注释的频率等,这些都是可以采用具体的度量手段去衡量的指标。每一个度量维度的质量是通过多个该维度下的度量元的质量去评价的。下面介绍几个关键的度量元指标。
  圈复杂度(VG)是用来衡量一个模块判定结构的复杂程度,数量上表现为独立路径的条数。
  其计算方法为:VG=e-n+2,
  其中e是程序模块流程图的边数,n是节点数。
  如图4所示,若某一程序的流程图如图所示,则,VG=6-6+2=2。
  注释的频率(com_freq)是指程序中注释代码行占总代码行的比例。计算公式如下:
  com_freq =(lc_comm)/(lc_stat)
  其中:lc_comm是指注释行数;lc_stat 是指总的代码行数;该值应该不小于0.2,即注释应该占到代码总行数的20%以上。
  质量缺陷密度(Dd):是指程序中发现的质量缺陷数占代码规模的比例,基本的缺陷测量是以每千行代码的缺陷数(Defects/KLOC)来测量的。其计算公式如下:
  缺陷密度=缺陷数量/代码行或功能点的数量,
  可按照以下步骤来计算一个程序的缺陷密度:(1)累计开发过程中每个阶段发现的缺陷总数(D);(2)统计程序中新开发的和修改的代码行数(N);(3)计算每千行的缺陷数Dd=1000*D/N。例如,一个29.6万行的源程序总共有145个缺陷,则缺陷密度是: Dd=1000*145/296000=0.49 defects/KLOC。
  3.2.2 代码质量评估模型,如图5所示。
  代码质量模型分成六个维度去度量,分别为正确性、规范性、易读性、安全性、可维护性、可移植性。每个维度下面又由一组具体的度量指标来衡量,我们称之为度量指标集。代码质量等于各维度质量总和;各维度质量等于该维度下的所有度量指标的质量值之和。
  由此,我们给出该代码质量模型QOC_M(Quality Of Code Model)的形式化定义形式:
  QOC_M=
  其中,Dset指代码质量维度的集合;Eset指度量元素的集合;D-EMap指度量元素和代码质量维度的映射关系;Fset指的是度量元素的计算公式集合。
  代码质量最终的结果是各维度质量乘以其权重后再累加,用公式表示如下:
  QOC=∑Wdi*(∑ei*Wei)
  其中,QOC(Quality Of Code)代码质量;Wdi指维度Di在代码质量中的权重;ei指该维度下的度量指标值;Wei指度量指标ei所占其所属维度下的权重,则ei*Wei得到的是维度Di的质量分数。
  每个维度下的度量指标是可以根据用户的具体需求去个性化定制的,具体可以参照3.1节给出关于的每个维度所涵盖的范围,如可维护性包含McCabe度量指标集、Halstead度量集等。不同用户、不同厂商他们对代码质量的关注点有所差别,可按照自己的需求将该通用模型进行裁剪。
  3.3 应用代码质量管理流程
  应用代码质量评估是一个过程性的工作,需要按照一定的流程去执行操作。目前的制定的评估流程包括版本管理、执行评估、持续改进、风险应对四个环节,遵循PDCA的良性循环。具体的评估流程如图6所示:
  (1)版本管理。应用代码质量评估的对象是业务系统的源代码,随着业务的不断创新、需求的不断变更,做好版本的控制是应用代码质量评估首要的任务,以及新的版本在上一版本的基础上修复了哪些问题,又引入了哪些新的问题,这些问题都离不开版本管理。(2)执行评估。执行评估阶段需要做的事情有如下几点:①根据前期确定的应用代码质量规范和评估模型,选取适合的应用代码质量扫描工具。目前主流的白盒代码扫描工具有Checkmarx、McCabe、Klockwork、Fortify、Parasoft等等,工具各有所长,要根据需求选取合适的一款或几款。②制定扫描规则集。对照应用代码质量规范和评估模型在所选工具上配置扫描规则集。同时要注意不同语言的个性化区别。③扫描待评估代码。建立扫描项目、扫描任务,开始对源代码进行初步扫描。这一阶段根据代码规模以及工具的性能时间略有不同。代码规模小、工具效率高所耗费的时间就短,反之,时间越长。④分析工具扫描结果。这一步骤的工作是我们执行评估的一个重要方面,任何一款工具都不可避免的会有误报、漏报的情况,不能完全依赖工具,人工的参与是不可避免的。针对工具报出的代码质量问题我们要逐一确认、分析其风险的严重程度,删除误报或者我们认为无关紧要的质量问题。这一步骤的工作可以和开发人员共同完成。(3)风险应对。前一环节通过专家分析,确认发现代码中存在的质量问题,接下来我们要做的是按照应用代码质量评估模型,给出本次代码扫描评估的结果,同时针对确认的问题给出修复建议,并要求开放商方面给出系统改进的应对方案。(4)持续改进。持续改进环节系统按照评估给出的优化方案进行修改,对改进后的效果进行再评估。这一环节最重要的是监督系统改进方案的执行,所有问题落实到人,做到专门的问题有专人负责。同时在改进工作结束后能够进一步跟进,评估修复后的结果。这样总体上形成一个符合PDCA的闭环流程。
  四、在某省移动业务支撑管理过程中的应用
  本文提出的应用代码质量管理体系在某省移动进行了试点应用,取得了良好的效果。下面就本次试点情况做一个简单介绍。   4.1 评估模型
  该模型选取了规范性、可维护性、安全性三个维度,每个维度下所选取的规则和指标的计算方法如表1所列,并分别确定了各维度下应该遵守的规范,同时初步拟定了各维度的评价标准。通过选定适合的扫描工具,将理论模型转化为实际可操作的具体工作。
  4.2 管理流程及实践
  按照3.3节描述的管理流程,在试点实施过程中细化了几个关键点:版本管理(SVN)、评估的时间点(大版本、小版本)、评估的内容(全量、增量)。
  (1)版本管理采取既有的版本管理工具SVN,沿用当前的版本管理模式。(2)扫描时间的确立。每次小版本上线前以及大版本发布前。(3)评估内容的确定。小版本上线前按照增量扫描的原则,每次扫描一部分代码,逐步递增。大版本上线前采取全量扫描的原则,对系统源代码进行统一的评估。
  4.3 评估结果分析
  本次试点实施针对8月份某次小版本上线代码进行了评估。首次扫描发现不规范的问题数比较多,有代码编写错误、命名不规范以及大量的调试代码等。根据首次代码扫描评估的结果,给出相应问题修复建议,并要求开放商按照优化方案进行修改,对改进后的效果进行再评估。经过两轮的改进修复,要求整改的问题已经基本得到修复,扫描过程中发现的问题数目趋于稳定,如图7所示。
  五、小结
  本文在分析中国移动业务支撑工作在应用代码质量管理方面的现状、研究的代码质量静态分析技术、代码质量的理论并结合管理体系的基础上,提出了应用代码质量管理体系的方法论,该方法论在省公司的试点实施中得到了验证,取得了比较明显的成果,进一步证明了其在业务支撑工作中的可行性。
  应用代码质量管理体系有助于深化业务支撑工作的精细化管控,对电信运营商的支撑管理工作有借鉴意义。同时,该理论体系也适用于搭建应用代码质量评估私有云平台,有助于电信系统标准化、规范化建设的推进。
  参 考 文 献
  [1] 中华人民共和国国家标准 软件工程 产品质量 第1部分:质量模型GB/T 16260.1-2006/ISO/IEC 9126-1:2001
  [2] Brian Chess. Jacob West著. 董启雄.韩平.程永敬等译. 安全编程代码静态分析.机械工业出版社.
  [3] WIKIPEDIA Software Quality http://en.wikipedia.org/wiki/Software_quality.
其他文献
目的:分析脑外伤患者早期接受颅骨修补治疗的效果。方法:随机选择2014年1月-2016年12月在笔者所在医院接受治疗的脑外伤患者44例参与研究,根据患者接受颅骨修补术的时间分为两
随着经济的发展,用户对电能质量和供电可靠性提出了更高的要求,同时,供电企业为减少网损,实现经济和智能调度,通过配网智能化,达到用户负荷的实时监控。近年来,随着城网建设的飞速发