APP下载

反应堆专业程序适应性维护技术研究

2013-11-06肖安洪杨大为

机械设计与制造工程 2013年9期
关键词:编译器适应性代码

肖安洪,曾 辉,王 筝,杨大为,彭 辉

(中国核动力研究设计院核反应堆系统设计技术重点实验室,四川 成都 610041)

软件维护是软件生存周期的重要环节,二十世纪六七十年代发生的“软件危机”正是由于大量软件不可维护引起,并由此兴起软件工程的概念[1]。国内相关标准将国际电工委员会定义的5种软件维护类型经过合并整理,定义为:完善性维护、适应性维护和改正性维护,其中适应性维护是指为适应软件运行环境变化而作的修改[2]。通常我们称软件适应性维护过程为程序移植。核反应堆设计中采用了大量早期开发的专业程序,这些程序具有典型的“遗留软件”特征:生命周期长、业务功能关键和质量差[3]。随着计算机硬件的快速发展,反应堆专业程序的运行平台逐渐停产、淘汰和退役,因此迫切需要将这些专业程序移植到现有主流计算平台。此外,这类程序多是通过各种渠道从国外引进,移植工作只能由单位内部技术人员完成,缺乏开发方的技术支持以及足够的程序文档,技术难度很大。因此应用软件工程理论对反应堆专业程序适应性维护过程进行研究,建立相应的工作流程,可以规范维护过程,提高工作效率,并减少引入缺陷的风险。

1 适应性维护过程的建立

软件工程定义了许多过程模型用于软件开发和维护,包括线性模型、原型模型、快速应用开发模型、演化软件过程模型等[3]。这些模型各有优缺点,在此不一一赘述。总之在理论上要建立完美的过程模型是不现实的,只能衡量人力、资源、时间等各种成本和风险因素,灵活运用过程模型概念来开展软件项目。

对于反应堆专业程序适应性维护而言,技术人员在程序现有框架约束下完成修改,使其运行于新平台,需求明确,过程相对简单,适宜采用线性模型,并在关键节点进行迭代。根据软件工程化的相关理论,可以将反应堆专业程序适应性维护过程归纳为7个阶段,如图1所示。

图1 反应堆专业程序适应性维护过程

2 各阶段活动及要点

2.1 策划阶段

策划阶段的主要工作是识别用户需求并确定程序移植目标平台、移植总体技术路线、测试方案、工作计划、投入人力资源和所需配套设备、识别风险因素并进行风险分析。其中关键活动是识别用户需求并确定移植目标平台,结合主流计算机技术以及当前软硬件条件,从长远发展和当前可行两个方面综合论证总体技术路线。

2.2 准备阶段

准备阶段应完成以下几个方面准备工作。

2.2.1 系统环境准备

系统环境准备包括服务器硬件、操作系统、编译系统及库文件等资源的准备,完成目标平台的搭建。

2.2.2 工具软件准备

需要准备的工具软件包括源代码分析工具、程序调试工具等。由于适应性维护涉及到代码修改,所以在条件允许的情况下应部署配置管理系统对源代码版本进行控制。

2.2.3 资料准备

反应堆专业程序大多开发在早期的系统环境中,和现有系统环境差异显著,所以系统资料和程序资料显得尤为重要,包括操作系统命令脚本、编译器相关资料、程序开发语言资料、程序开发手册、编译手册等。

2.3 代码分析阶段

代码分析主要是对程序的规模、函数调用及依赖关系、程序流程进行分析。代码分析可以在人工分析基础上配合使用辅助工具,提高准确性和效率。

2.3.1 代码总体分析

分析掌握程序代码所使用的编程语言及版本、代码的规模(如代码行数、注释行数、子程序数、公用变量数等),可借助工具软件完成,如STI Understand。

2.3.2 静态结构分析

静态结构分析主要对程序调用或依赖的库文件、头文件等进行分析,并在目标平台进行相应配置。通常核反应堆专业程序依赖以下几种库文件、头文件:操作系统级、编译器级和程序自定义级。

2.3.3 动态运行分析

动态运行分析主要掌握程序运行流程及函数逻辑调用关系。程序动态运行分析有助于对程序移植过程中发现的错误进行定位及排查。程序动态运行结构分析主要输出成果为程序流程图、程序逻辑结构图等。

2.4 代码移植阶段

代码移植是适应性维护的核心阶段,其任务是将程序源代码在目标平台进行相应修改;然后编译、链接,得到目标程序;在目标平台对目标程序进行运行、调试,并解决在修改、编译、链接、运行、调试过程出现的错误。通常情况下编译、链接合并进行,运行、调试也合并进行。代码移植阶段可以按照以下步骤进行。

2.4.1 确定编译、链接选项

由于系统环境及编译器差异等原因,程序在不同平台进行编译、链接时采用的选项不同,通过查阅相关编译器文档可以了解选项信息。例如Alpha平台f77编译器的编译选项“-r8-i8”,作用是对浮点数和整数按双精度进行编译,而在Solaris平台对应选项为“xtypemap=real:64,integer:64”。

2.4.2 建立编译链接错误信息表

确定选项后即可着手程序编译链接。这个步骤的主要任务是记录编译过程中产生的错误和警告信息,并整理为错误信息表,表格包含的主要内容包括信息类别、产生信息的位置、信息描述等。

2.4.3 解决代码编译链接错误

根据错误信息表定位到故障代码,分析并确定错误原因,然后对代码进行修改,直至消除所有错误。从笔者程序移植经验来看,编译链接错误主要体现在3个方面:编译链接选项、编程语言语法和引用库文件。编译链接选项错误可以通过查阅编译器资料找到解决方法,编程语言语法错误也可以通过查阅程序开发语言手册找到答案。

下面以笔者在对早期Fortran程序移植过程中遇到的两个典型语法问题为例进行说明。

第一个是赋值问题,不同平台编译器对DATA赋值语句的解析不同,如对变量进行八进制赋值,Alpha平台使用“DATA TEMP/OXXXX/”,而 Solaris平台使用“DATA TEMP/O‘XXXX’/”。

第二个是函数同名,新版本编程语言中内置越来越多的内部函数,而早期程序中某些自定义函数,其名称可能已经被用作内部函数,这种情况会导致莫名其妙的错误。如调用函数报参数不匹配错误,而检查代码发现调用函数时传递的参数类型和函数定义时的参数类型一致,这就有可能是该函数名已被用作内部函数,并有了不同的定义。这类问题的解决办法就是将自定义函数改名。

编译链接过程中最难解决的问题是引用库文件问题。库文件是代码通过编译链接产生的,如果程序代码引用了没有源代码的库文件,对这个程序进行跨平台移植就会遇到很大的问题,因为不同平台的二进制文件结构是不一样的,库文件也是二进制文件,因此不能将原运行平台的库文件直接拷贝至目标平台使用,而没有库文件源代码,就不能在目标平台进行编译链接产生库文件。目前暂时还没有很好的办法能解决这样的问题,除非重构代码,剥离程序对库文件的依赖,但是花费的代价将更大。

在对代码进行修改过程中应重视注释的作用,注释可以帮助理解编程思路。对修改的代码也应增加注释以方便后来者阅读程序,修改代码的注释内容包括:修改者、修改时间、修改原因和修改的起止位置等;同时被修改的语句不能简单删除,而应将其转换为注释语句予以保存,以便代码后续使用者对比阅读。

2.4.4 调试、运行目标程序

在经过编译、链接得到目标程序后,还需要验证程序是否能正常运行,因此要对目标程序进行运行调试。目标程序只有在实际运行的时候才会将编译链接符号、函数、变量等进行加载,链接的动态库错误也只有在实际运行的时候才能体现。如果遇到运行调试错误,和解决编译错误一样,需要建立调试错误信息表,确定错误原因并提供解决方法,直至所有错误完全消除,这也涉及代码的修改,因此应注意添加和保存注释。

总之,代码移植阶段要完成程序的修改、编译、链接、运行、调试等任务,并且还应同步编写移植说明书,记录代码移植过程情况,对发现的具有普遍性的问题进行归纳总结,以便后续工作的开展。程序移植和程序开发有很大不同,更需要良好的编程技巧和丰富的实践经验,这些都需要在实际工作中进行总结和积累。

2.5 测试阶段

适应性维护是对原程序进行移植,对代码的修改主要是修正语法等方面的错误,不会影响程序框架结构,修改代码规模较小,因此相对来说测试需求比较简单,使用基准例题对程序进行回归测试即可。如果在测试阶段发现问题,则应回溯到代码分析阶段,查找分析原因,并通过修改代码解决问题。

在测试过程中需要准备测试记录表,记录测试人员、测试时间、测试例题及测试结果等信息,为程序验收提供见证记录。

2.6 验收阶段

适应性维护的软件产品应参照软件开发要求进行验收。验收由软件维护人员和软件使用人员共同参与完成。验收过程应评审程序的功能、相关文档是否满足要求,然后根据评审结果确定是否通过验收,并填写验收报告。验收报告应包括以下方面:程序是否在指定的平台上正常安装运行、测试例题是否正确运行、交付物是否完整。软件验收后,应将全部工作产品转入产品库进行归档。

2.7 交付与过渡阶段

软件通过验收后由软件维护人员部署在目标平台,供用户使用,并发布到相应软件库中进行管理。此外还应组织用户进行程序的使用培训。如条件允许应为程序提供适用过渡期,在过渡期内新旧平台上的程序均可正常运行,便于用户对不同平台的运行过程及结果进行比较,及时发现问题。

3 结束语

通过对反应堆专业程序的适应性维护过程、工作内容进行总结和分析,并应用软件工程理论和方法,建立了较规范的工作流程和方法。该项研究成果在国防技术基础科研基金项目中开展应用,完成了10余个反应堆专业程序的移植,实践证明可有效降低工作难度,提高工作效率,对提升移植软件的质量也起到了很大的积极作用。

[1] 张海藩.软件工程导论[M].3版.北京:清华大学出版社,1998.

[2] 石柱.软件工程标准手册[M].北京:中国标准出版社,2004.

[3] Pressman R S.软件工程:实践者的研究方法[M].郑人杰,马素霞,白晓颖,等译.6版.北京:机械工业出版社,2007.

猜你喜欢

编译器适应性代码
谷子引种适应性鉴定与筛选初报
基于相异编译器的安全计算机平台交叉编译环境设计
健全现代金融体系的适应性之“点论”
创世代码
创世代码
创世代码
创世代码
大型飞机A380-800在既有跑道起降的适应性研究
固有免疫和适应性免疫与慢性丙肝的研究进展
通用NC代码编译器的设计与实现