软件质量静态度量信息统计工具的设计与实现

2020-10-09 11:01张怡然唐跃川谭凯
软件 2020年8期
关键词:软件可靠性

张怡然 唐跃川 谭凯

摘  要: 软件代码的静态分析是一种针对代码的自动验证的非常有效的方法,其目的是在不运行代码的情况下,通过分析软件代码本身的语法和数据流,检查代码是否满足安全性和可靠性要求。为控制程序的复杂性,便于后期的检测与维护,《GJBZ 102A-2012 军用软件安全性设计指南》对软件的复杂性提出了控制要求,对此引入Understand软件对程序代码的模块规模进行分析。在分析Understand软件及其在分析程序代码后生成的TXT文件后,设计一种统计工具,利用C++语言对文件中的数据进行筛选,提取所需数据并对其进行处理,以此提高静态分析时的工作效率。

关键词: 软件质量;软件可靠性;静态度量;信息统计;C++

中图分类号: TP31    文献标识码: A    DOI:10.3969/j.issn.1003-6970.2020.08.027

本文著录格式:张怡然,唐跃川,谭凯. 软件质量静态度量信息统计工具的设计与实现[J]. 软件,2020,41(08):94-96

【Abstract】: The static analysis of program code is a very effective method for automatic verification of programs. The purpose is to check whether the code meets security and reliability by analyzing the syntax and data flow of the program code itself without running the code. In order to control the complexity of the program and facilitate the later detection and maintenance, GJBZ 102A-2012 The military software security design guide puts forward control requirements for the complexity of the software. Understand is introduced to analyze the module size of the program code. This article will focus on analyzing the statistical files generated by Understand software analysis program code, using C++ language to filter the data in the file, ignoring the useless information, extracting and processing the required data in order to improve the work efficiency in static analysis.

【Key words】: Software quality; Software reliability; The static measurement; Information statistics; C++

0  引言

静态分析工具主要检查源代码中的变量、模块接口的一致性、逻辑上可能存在的错误结构和不可达的程序段等[1-2]。大部分静态分析软件无法对程序进行详尽的复杂度分析,引入的Understand软件不仅可以分析多种编程语言,也可以对程序的复杂度、扇入扇出等方面进行分析。

Understand是一款内部支持代码编辑器和代码分析器的静态程序代码审查软件,该软件可以将分析结果以图表,文档,架构图等形式呈现[3],但是由于其生成的结果信息非常散乱,且不直观,尤其在统计函数扇出个数时,需要通过人工的方式,肉眼观察和统计调用的函数个数来获取扇出信息,这种工作方式效率极低,容易出错,而且,面对大型项目时,基本不具备可操作性。为增加工程实践的可操作性,本文提供了一种可以识别、分析、提取和统计结果信息的工具,高效完成对代码质量静态度量信息的统计和直观呈现。

本文将从实际出发,制定相应的技术要求方案,针对Understand软件输出的结果文件中的散乱的数据信息进行识别和读取、读取和分析,并分别通过GUI(Graphical User Interface)界面和Excel文件形式进行显示。同时,为保证对历史信息的可追溯性以及多次分析结果的效果比对,设计使用CSV文件对历次操作信息进行存储。

1  数据的读取和处理

1.1  数据的识别与读取

Understand软件输出的TXT文档包含20份report内容,其中,File Contents Report部分包含了被检查代码的文件名信息;Program Unit Complexity Report部分能包含了被检查代码的函数圈复杂度信息;File Metrics部分包含了被检查代码的行数、注释行数以及无效代码行数等信息;Simple Invocation Tree Report部分包含了被检查代码的函数扇出信息;Program Unit Metrics report 部分包含了被檢查代码的函数个数信息;Data Dictionary Summary Report部分包含了被调用函数所在的文件名信息。根据《GJBZ 102A-2012军用软件安全性设计指南》相关部分的要求,以上内容是需要识别、读取和处理的信息。

统计工具采用C++编程语言对文本信息进行数据的识别、读取和处理。首先定义一个CStdioFile类的File,并将File与待测文件关联,调用.Find()函数查找关键字符串,如:“Cyclomatic”、“Lines”、“|”等,然后获取所需数据并将数据存入vector类型容器中,完成数据的读取。图1为数据读取流程图。

1.2  数据的处理

1.2.1  数据的统计处理

在结束读取需要进行数据提取的report信息后,对存储相应数据的vector容器进行运算,通过使用.accumulate()对vector容器进行求和处理,获得代码的圈复杂度、函数行数和扇出个数的总和;通过.size()对vector容器的大小进行计算,获得代码函数个数信息;有些统计结果需要极值数据,通过max_element()对vector容器中的圈复杂度、函数行数、扇出个数等元素进行极值处理,获得所需项的最大值。

1.2.2  数据的排序处理

Understand软件生成的TXT文件的数据是按照代码函数调用的先后顺序来进行显示的,因此,数据提取中所获得的数据也是杂乱无章的。为保证最终显示的不符合规范的函数能够按照对应数值的大小,由高到低次序输出,这就需要对容器中的数据进行排序处理。

为保证重新排序的数值能够与函数名称及文件名称正确对应,需要定义一个结构体,将统计后需要的函数名和对应数值及文件名存入结构体数组,最后通过sort()函数对数值进行排序,对应的函数和文件也能够被正确排序。最后,将完成排序的数据存入vector容器中。

1.2.3  数据的输出处理

统计排序处理完成后的数据需要进行输出处理,输出内容有以下几种:

(1)GUI数据输出

在GUI界面添加两个ListCtrl表格:可显示代码的基本信息和度量值不符合标准的函数名称,对应数值以及源文件名称。

在设计中对统计工具添加listCtrl可编辑功能,实现分析人员直接对界面信息的操作。图2为界面可编辑功能部分代码。

m_ListCtrl.GetSubItemRect(m_row,m_column,LVIR_LABEL,rc);

m_edit.SetParent(&m_ListCtrl);

m_edit.MoveWindow(rc);

m_edit.SetWindowTextW(m_ListCtrl.GetItemText(m_row,m_column));

m_edit.SetFocus();

m_edit.ShowCaret();

m_edit.SetSel(-1);

(2)Excel数据输出

在进行Excel输出数据的操作时,需要设置Excel驱动,创建表格文件数据库。然后,在表格文件数据库中,进行写入数据信息的操作。图3为Excel写入数据的部分代码。

for (i = 0; i < iColumnNum; i++)

{if (!(m_ListCtrl.GetColumn(i,&lvCol)))

return;

if (i < iColumnNum - 1)

{sSql = sSql + lvCol.pszText + _T(" TEXT , ");

strInsert = strInsert + lvCol.pszText + _T(" , ");

}

else

{sSql = sSql + lvCol.pszText + _T(" TEXT ) "};

strInsert = strInsert + lvCol.pszText + _T(" )  VALUES ( ");

}

}

database.ExecuteSQL(sSql);

sSql = strInsert;

对于度量值不符合标准的Excel文件,设计添加两个sheet页用来存储不合标准扇出和函数行数的数据信息,来实现文件输出的简洁性。

(3)CSV数据输出

在文件处理中需要保证历史数据的可查性,避免程序误关后的数据遗失和重复操作等问题,实现可重用信息的提取和隔离[4]。通过对CSV文件的设计和编辑,设计CSV格式文件对系统的操作信息进行存储。

定义CStdioFile类File文件打开CSV格式文件,将操作时生成的数据存入文件,同时对文件添加追加功能,保证文件可以保存多次操作信息,最后在保存的信息中添加被统计的TXT文件的名称,实现对数据的查询操作。图4为CSV文件写入数据的部分代码。

if (pos == size1)

{str22="";

for (j = 0; j < iRowCount; j++)

{CString chTemp;

i = 1;

{

chTemp = m_ListCtrl.GetItemText(j, i);

str22+=chTemp;

str22+=str2;

}

}

2  結果与分析

2.1  数据结果呈现

GUI是现代软件的重要组成部分,其充分利用可复用的构件,可以使开发人员更加节省时间[5]。通过界面设计,在统计结束后,在GUI界面呈现出如图5和6所示的最终数据结果。

2.2  性能效率分析

仅仅依靠以密集为特征的传统手工测试,已经不能满足快节奏软件开发和测试的需求[6]。自动化测试及统计为此提供了解决方案,同时通过验证可以确定:代码基本信息中各数值统计值与实际值相同,函数名称与数值和文件名称能够一一对应,CSV文件能够存储历史操作信息。同时,通过大量的工程实践也能够看出统计工具能极大地提高工作效率。图7为工具统计与人工统计花费时间的对比示意图。

3  结论

软件测试是软件开发生命周期的重要组成部分,也是目前和今后相当长一段时间内保证软件质量和可靠性的关键手段[7]。本文通过介绍软件质量静态度量的重要性和必要性以及获取这些信息的一般方法和工具,对设计和开发的统计工具的实现方法进行了详细描述.在实际工程实践中,人工统计与工具统计相比较而言,统计工具对生产效率有明显的提升。通过比较人工统计和工具统计的时间,可以看出统计工具能够在保证正确统计软件质量静态度量信息的基础上极大地提高工作效率,在工程应用中具有较高的应用价值。通过可视化技术将程序的内部直观显示,有利于软件的测试和分析[8],并且保证了软件质量。

参考文献

[1] 张建. 精确的程序静态分析[J]. 计算机学报, 2008, 9(8): 1549-1553.

[2] 文昌辞, 王昭顺. 软件测试自动化静态分析研究[J]. 计算机工程与设计, 2005, 26(4): 987-989.

[3] 王相懂. 软件静态分析自动化工具的研究与实现[D]. 西安理工大学, 2006.

[4] 简峥峰, 谭建荣. 面向虚拟企业的应用-基于可重用信息表达的CSV文件设计[J]. 浙江工业大学学报, 2000, 7(28): 85-99.

[5] 谢伟伟. GUI软件自动化测试工具的开发研究[D]. 大连海事大学, 2008.

[6] 余公平. 软件自动化测试系统的研究与实现[D]. 上海交通大学, 2007.

[7] 姚砺, 束永安. 软件测试自动化关键技术的研究[J]. 安徽大学学报(自然科学版), 2003, 27(4): 27-33.

[8] 陳哲. 软件自动化测试系统的研究与实现[D]. 华中师范大学, 2008.

猜你喜欢
软件可靠性
软件可靠性耦合度量的测试用例约简优化
嵌入式应用软件可靠性自动测试方法研究
软件可靠性工程综合应用建模技术研究
软件可靠性设计技术应用研究
数控系统软件可靠性设计与故障分析技术
基于GQM的装备软件可靠性参数选取方法
简谈使用BoundsChecker进行计算机联锁系统人机界面软件可靠性测试
基于多准则决策的软件可靠性模型选择方法
IEEE软件可靠性系列标准分析*
软件可靠性数据预处理研究