软件健康管理是近几年兴起的一个综合性研究领域,涉及到软件信息分析技术、缺陷检测技术、故障诊断技术、健康评估技术以及缺陷修复技术等多个方面。在软件研发过程中,通过对整个软件进行多维度监控、检测和分析,以提高软件运行安全性和可靠性。虽然说不同行业,对软件健康关注的角度不同,但是核心还是相同或相似的,包括软件故障模式分析、异常检测与故障诊断算法、度量分析技术以及故障修复技术等。如果对于武器装备系统软件,则可能还要关注软件传感器技术、软件容错技术等。对于互联网行业,则可能关注负载、容量、并发等技术。

软件健康管理包括两个方面,一方面是通过实施监控运行软件,对可能的异常情况进行检测、识别、定位和评估,并采取启动冗余备份、重启、复位等措施处理,保证软件的安全或将异常情况的影响降低到可接受范围之内。另一个方面则是通过软件静态检测技术,通过分析代码中的各种属性和缺陷等,进行综合度量。

 

现在我们抛离软件在不同行业、不同领域应用上的不同,从源代码的属性上进行分析,分析如何根据从代码静态分析结果,度量软件的健康情况。

 

由于当今对软件质量的重视程度日益加强,已经从原来软件六大质量属性评估软件质量,发展为八大质量属性评估质量。建下图:

软件健康管理技术浅析_软件健康

 

在上面图中,其中四个质量属性是可以根据代码静态属性来度量的,包括可靠性、性能效率、安全性和可维护性。

根据CISQ(信息和软件质量联盟)发布的国际标准来看,对四个质量属性的度量可以从代码静态属性上度量软件健康情况,且对该度量一直处于研究和不断完善之中。通过下面的图可以看到,对四个质量属性的度量元近三年来,一直在调整。在2019年,可靠性由29个子属性进行度量,安全性由22个子属性进行度量、性能效率和可维护性分别由15个和20个子属性进行度量。

软件健康管理技术浅析_功能点_02

 

对于安全性的度量子属性,下面截图可以看到,是由CWE公开的22个安全漏洞模式来进行度量。这些安全漏洞可以通过静态安全漏洞检测工具通过扫描源代码可以得到。

软件健康管理技术浅析_功能点_03

 

CISQ给出的度量方法是通过代码中检测到安全漏洞的总次数转化为百万分之一机会的弱点,以确定该度量属性的西格玛值。一个软件的安全性健康情况如果达到6σ,则每百万机会3.4个安全漏洞。通过我们多年对源代码安全检测的结果来看,要达到这个水平是一个非常难的过程。需要一个软件开发组织对源代码开发过程中,持续检测和修复才有可能达到这个水平。

 

那对于百万分之一机会是指什么呢?

根据CISQ给出的AFP(Automated Function Points)标准来看,CISQ自动化计算功能点需要通过应用程序的所有层进行分析,以创建可拆分为数据实体和用户事务的应用程序的功能映射。通过对数据功能点和事务性功能点进行分析获得。

数据功能点:

  1. 内部逻辑文件,主要是数据库记录文件和无结构的流式文件
  2. 外部接口文件,主要是对接外部的其它系统

事务性功能:

  1. 外部输入,主要是指用户的操作
  2. 外部输出和查询,主要是指接口系统的请求和响应

 

如果要自动的获取这些代码中的属性,则还是需要通过对源代码的扫描分别获得数据统计。业界目前还没有见到适用性比较好的AFP工具。但是对ATP的探讨近两年比较火,读者可以去百度相关的资料。

如果能够自动分析出源代码中的功能点数,就可以计算西格玛值,进而可以采用各种度量方式对源代码的质量情况进行计算并展示。例如下图,可以通过值的形式展示软件的健康情况,当然也很容易转化为西格玛值。

 

软件健康管理技术浅析_软件质量_04

 

随着计算能力和算法研究的深入,开发出自动分析功能点的工具是指日可待,将来会为企业管理层带来更多价值,对于评估软件质量可以建立一套公平、公正的标准,作为对提交代码的质量评估,是目前在单元测试推广遇到障碍情况下,评估开发人员代码质量的一个重要手段。当然也可以纳入DevOps工具链。

 

 

(完)