APP下载

软件维护性评估指标体系研究

2018-12-24刘凯陈军梁欣张俊萍郑思广

微型电脑应用 2018年12期
关键词:源代码文档一致性

刘凯, 陈军, 梁欣, 张俊萍, 郑思广

(1. 航天器在轨故障诊断与维修重点实验室, 西安 710043;2. 西安卫星测控中心, 西安 710043; 3. 63871部队, 华阴 714200)

0 引言

现代软件行业的经验表明:尽管软件的可靠性已经一再提高,但是软件中的bug却始终存在[1]。可见,软件维护(在软件交付使用后,为了改正错误或满足新的需求而修改软件的过程)是不可避免的。随着软件规模和复杂度的日益提高,软件维护日益成为软件生存周期中费用最高、难度最大的一个阶段。与此同时,如何对软件进行维护性评估(对软件维护性进行定性或定量评价)、及时发现并改正软件的维护性设计缺陷从而优化软件维护性日益成为一个重要的研究课题。目前,由于国内软件维护领域的理论研究相对匮乏,大多软件维护工作仍然依赖于维护人员对整个系统的熟悉程度,缺乏相关的标准来指导和约束软件维护性评估[2]。为了保证软件维护性评估的质量,建立一个完善的软件维护性评估指标体系是非常必要的。

借鉴美国空军软件维护性评估手册,本文从软件产品和开发过程两个角度深入分析了软件维护性的影响因素。在此基础上,本文建立了一个相对完善的软件维护性评估指标体系,用于指导软件维护性评估的实施。

1 软件维护性影响要素

对软件维护性进行评估是围绕影响软件维护性的诸多要素展开的,因此,实施软件维护性评估的首要工作是明确软件维护性的影响要素,确定软件维护性评估指标。尼德.查牝指出:“软件维护费用高昂的根本原因在于人们对当前程序和系统文档理解上的障碍。这些障碍的起因主要有以下几个:程序不可理解、对程序理解不准确、系统文档与程序的可用信息不充分、软件的复杂性、程序理解上存在的混淆、误解与遗忘。”[3]由此可见,要想控制维护费用,人们必须改善对程序源代码和系统文档的理解。因此,下面主要从文档和源代码两个方面阐述其对软件维护性的影响。

首先,软件文档资料的缺失或者文档结构的杂乱、文档管理的无序均会影响软件的维护性,引起软件维护时间和费用的增长。这里,软件文档是指在软件开发过程中生成的、陆续进行需求、概要设计、详细设计、测试等说明的一系列文档。举例来说,软件文档可能包括软件系统/子系统规格说明、系统/子系统设计说明、软件需求说明、接口需求说明、软件设计说明、接口设计说明、软件测试计划、软件产品说明、软件测试说明、软件测试报告等。除上述文档外,作为需求分析和设计之间的桥梁的软件体系结构设计文档也日益受到软件开发和维护人员的重视。总之,有必要统一软件文档结构,改进和补充不完善的软件文档,这将有助于维护人员对软件结构、界面功能和内部流程的理解[4]。尤其是在人员变动很快、跳槽率日益上升的软件行业的今天,完备的软件文档成为实施软件维护工作的重要参考依据。

其次,影响软件维护性的另一个重要因素是程序的源代码。由于用户需求变更或者环境变化而对程序进行部分修改时,容易引起程序一系列其它部分的改动,这种现象在软件维护领域被称之为“波动效应”[5]。实际上,任何系统都存在潜在的波动效应。完全由没有任何耦合关系的模块组成的系统是不存在的。这种情况下,采用模块低耦合、高内聚、可控制等程序结构化设计,可减少与其它模块的关联,大大提高程序模块的独立性,将波动效应的负面影响降至最小。这种结构化设计模块的优势体现在以下两点:其一,对该类结构化模块进行增删修改时,仅需对该模块进行改动即可,不致产生过大的波动效应,从而简化维护工作[6];其二,对于模块化的程序,可以应用备用件(用一个新的结构良好的模块替换掉整个模块),从而避免局部修改模块而引入新错误,大大提高软件的维护性。另外,程序设计语言的选择,对程序的维护性影响也很大[7]。举例来说,查询语言、图形语言、报表生成器等第四代语言编制出的程序都很容易理解和修改,其指令条数可能要比COBOL等低级语言编制出的少一个数量级,但开发速度快许多倍。可以说,新一代语言要比早期的语言更易于维护[8-9]。此外,程序风格的一致性、程序的简洁性、数据完整性以及构件的复用性也在一定程度上影响着软件的维护性,不再赘述。

另外,随着软件二元性概念——“软件包括软件产品和软件开发过程”的提出,仅从软件产品(包括了文档和源代码)的角度查找软件维护性的影响要素是很片面的。从过程角度上讲,常见的维护性影响因素有软件开发方法、软件维护性分析与设计技术、软件维护性审查方式以及复审技术等。有时,软件开发时间、费用等软件成本因素也会左右软件维护性的设计标准。此外,软件生命周期中软件资源(包括软件编程工具、计算机辅助软件工程工具等)、硬件资源(包括软件运行环境、接口等)、软件维护及纠错工具(维护性度量模型、方法、技术等)的可用性对软件维护性也有很大影响。还有,软件开发团队的规模与组织管理情况,程序员、需求分析师、文档编制人员等人员的技能与素质也间接影响着软件的维护性。可见,影响软件维护性的过程因素众多,但由于不易对其度量,本文尚未对该类过程因素进行深入研究。

2 软件维护性评估指标体系

上述软件维护性的影响要素繁多,有些要素可以量化度量,如模块的耦合性,而有些要素则需要人凭借感官进行定性评价,如程序风格的一致性,还有些要素很难进行评价,如人员素质。因此,不可能对上面所列出的产品和过程方面的因素尽数进行维护性评估,需要权衡要素的重要程度和可度量性进行对象与指标的选取。这里把握两个原则:一是数量不宜过多,要能突出主要因素(如文档和程序的易理解性)的影响;二是保证在可承受的度量成本范围内可通过主观或客观的手段进行度量,数据收集方便,可度量。

考虑到维护性评估的目的是“检验软件产品(文档、源代码)是否达到维护性技术标准、是否需要采取措施提高软件维护性”,这里将软件产品中的文档、源代码以及软件实现(同时检查软件文档和源代码,以全面评估软件)作为本文维护性评估的研究对象,如表1所示。

表1 若干研究对象的软件维护性评估指标

本文借鉴美国空军软件维护性评估手册,选取可描述性、模块化、可扩展性、简易性、结构化、可追溯性、一致性、可测试性和约定性这9项维护子特性作为对软件文档、源代码(模块源代码和计算机软件单元(CSU)源代码)以及软件实现进行评估的指标,如表1所示。下面逐项对这些指标进行分析。

1) 可描述性:当软件文档或源代码中包含需求、假设、约束、输入/输出、组件及其关系、外部接口、修订状态等重要信息时,可以说文档或源代码具有可描述性。

2) 可追溯性:可以在文档之间、文档与源代码之间进行特定信息的查找时,称软件文档具有可追溯性。

3) 结构化:当可以快捷、方便地定位信息时,称软件文档具有结构化这一特性。

4) 简易性:源代码的简易程度直接关系到程序的可理解性。源代码采用的技术和结构越简单,维护人员对其理解越容易,系统的维护性越好。因此,可以说简易性是软件维护性的精髓。

5) 模块化:由于小模块(代码块)比大的或复杂的模块更易于理解,因此对由大量独立模块组成的软件进行维护和管理要容易许多。

6) 一致性:当软件源代码采用一致的注释、术语和符号时,可以说源代码具有一致性,这将有助于维护人员对源代码进行不同抽象层次的理解。

7) 可测试性:如果源代码中还有错误识别和错误处理的语句,称源代码具有可测试性。

8) 可扩展性:指在一定时间段内,对软件源代码的数量、类型、方法进行修改或者增删的容易程度。

9) 约定性:采用工程化的约定有助于对软件的理解。该特性要求软件产品使用统一的标记、术语和符号,并保持这些约定符号在文档和源代码中的一致性。

3 软件维护性评估准则

对于不同的评估对象(软件文档、模块源代码、CSU源代码、软件实现),软件维护性评估的侧重点是不一样的。举例来说,对文档进行维护性评估侧重于检查文档的可描述性,而对源代码进行评估则主要审查代码的简易性[8-9]。相同的软件维护性评估指标反映在不同软件对象上的评估准则也是不一样的。

1) 对软件文档进行维护性评估时,主要根据可描述性、可追溯性和结构化三项指标对文档的格式和内容进行审核。理想情况下,软件维护性评估是贯穿于软件生命周期过程中的。不同阶段(如需求分析、设计、编码、测试、验收、交付使用等)所实施的软件维护性评估的评审文档对象是不一样的,如需求分析阶段根据系统/子系统规格说明、系统/子系统设计说明、软件需求说明、接口需求说明等进行维护性评估,而测试阶段将软件测试计划、软件测试说明、软件测试报告等作为评估对象。通常将文档印制成册供维护性评估专家审核,有时也会采取网上评审的方式。

2) 对模块源代码进行维护性评估时,主要审查模块源代码的格式与内容,以及模块相关文档和源代码的一致性。模块源代码的维护性评估指标主要有可描述性、可追溯性、简易性、模块化、一致性、可测试性和可扩展性。

3) 对CSU源代码进行评估时,主要审查CSU源代码的格式和内容,以及评估CSU相关文档和源代码的一致性。CSU源代码的维护性评估指标主要包括可描述性、可追溯性、简易性、模块化、一致性和可扩展性。评估是按照由简单到复杂、由粗略到具体的原则展开的,例如,在评估人员审阅CSU内部源代码之前,应事先评审CSU的注释块及其接口。另外,CSU相关参数、数据结构等也是软件维护性评估的对象。

4) 对软件实现进行软件维护性评估用于发现那些只有同时检查文档和源代码才能发现的软件维护性问题,以保证软件产品得到全面评估。软件实现的维护性评估指标包括简易性、模块化、可扩展性和约定性。有些维护性评估指标准则看似与源代码中的评估准则相同,但对象不同,这里是对整个系统提出的,而非单独的模块。

由于篇幅有限,仅列出了对模块源代码进行软件维护性评估的准则,如表2所示。

按照表2中所列的模块源代码的软件维护性评估准则,评估人员可以根据软件与指标的符合程度通过定性专家打分或者定量人工/工具度量的方式给出软件模块源代码可描述性、模块化、可扩展性、简易性、可追溯性、一致性、可测试性这七项维护性指标的分数。对于每个问题的特殊情况评估人员要进行书面说明,并给出针对性的修改建议。然后,根据重要程度分别分配给模块源代码中可描述性、模块化、可扩展性、简易性、可追溯性、一致性、可测试性这七项维护性评估指标其相应的权重。最后,对各指标的维护性分数进行加权处理,即可得出模块源代码的维护性分数。采用同样的方法可分别计算出软件文档、CSU源代码和软件实现的维护性分数。对软件文档、模块源代码、CSU源代码和软件实现的维护性分数进行加权综合,即可计算得出软件的整体维护性水平。

表2 模块源代码的维护性评估准则

指标说明评估准则可追溯性要求源代码的描述文档之间以及文档和模块源代码之间都有可追溯性信息,以实现信息在顶层需求到底层详细实现之间的追溯。1. 文档中包含对源代码的详细描述,以方便模块追溯2. 文档中包含对数据项的可追溯性描述信息,以方便模块追溯3. 数据库文档中包含对数据库数据项的可追溯性描述信息,以方便模块追溯简易性简单的模块更易于理解。可从模块规模、数据结构复杂度、控制结构复杂度、编码复杂度等方面度量模块的简单性。1. 模块中可执行语句的行数适当2. 模块中操作符的数量适当3. 模块包含大量的控制分支语句4. 模块中使用的嵌套语句可以控制5. 模块中使用的大量数据项易于处理6. 模块中使用的大量复合数据结构易于处理7. 模块中使用的复杂公式易于处理8. 模块内不存在技巧性的程序设计9. 模块不包含外来代码10. 模块运用大量易处理的机器相关技术或语言进行扩展模块化程序由大量相互独立的简单模块构成,且模块具备低耦合、结构化、功能内聚和可控制等特性。1. 模块与其它模块低耦合2. 模块高内聚3. 模块内功能上相关的数据元素被组织为逻辑数据结构4. 模块中未过多使用全局变量一致性要求源代码文档、代码注释块和源代码保持一致。1. 注释块信息与相关的源代码一致2. 文档的输入/输出信息与源代码一致3. 文档中模块控制流、数据流和数据处理信息与源代码一致可测试性源代码具备错误识别和错误精确处理的逻辑。1. 对非法输入进行适当处理2. 对模块内可能发生的错误进行适当处理可扩展性在一定时间内,能够快捷、方便地对模块源代码的数量和类型等进行增删或者修改。1. 模块内常量和数据结构的维数要参数化

4 总结

在对软件维护性影响要素进行深入剖析的基础上,文章把握突出重要因素的作用以及指标可度量、可评估两项原则,选取9项软件维护特性评估指标(可描述性、可追溯性、结构化、简易性、模块化、一致性、可测试性、可扩展性和约定性)对软件文档、模块源代码、CSU源代码和软件实现进行维护性评估,针对不同评估指标分别提出了相应的评估准则,为进一步的软件维护性定性或定量评估指明了方向。今后,本课题还需在软件维护性评估指标权重的计算方法上进行深入研究。

猜你喜欢

源代码文档一致性
关注减污降碳协同的一致性和整体性
浅谈Matlab与Word文档的应用接口
注重教、学、评一致性 提高一轮复习效率
有人一声不吭向你扔了个文档
IOl-master 700和Pentacam测量Kappa角一致性分析
基于TXL的源代码插桩技术研究
软件源代码非公知性司法鉴定方法探析
基于语法和语义结合的源代码精确搜索方法
基于RI码计算的Word复制文档鉴别
揭秘龙湖产品“源代码”