可编程控制器软件估算方法
2022-10-31李丹丹石晓婷
勾 璇,李丹丹,文 华,石晓婷,冯 楠
(邯郸净化设备研究所,河北邯郸 056011)
0 引言
可编程控制器是一种在电气控制和计算机基础上开发的工业控制装置,广泛应用于机械生产和自动化控制等领域。目前,应用较广的可编程控制器有西门子、施耐德、欧姆龙、台达等品牌。可编程控制器的编程语言繁多,不同品牌编程语言的表达方式也不相同,主要包括字符表达方式和图形符号表达方式。
GJB 5000A软件成熟度模型的核心思想:将软件开发视为一个过程,并根据这一原则对软件开发和维护进行过程监控和研究,以使其更加科学化和标准化。在GJB 5000A二级实施过程中,项目策划过程是软件项目管理的一个重要过程。软件规模估算作为项目工作量、成本和进度估算的主要依据,是整个项目范围管理的关键。
目前,可编程控制器普遍使用梯形图编程语言。梯形图编程语言注重逻辑控制,因而对其进行软件规模估算时需要考虑的客观影响因素较多。此外,大多数控制系统在完成逻辑编码的同时还需完成对人机交互界面(Human Machine Interaction,HMI)的编码。由于HMI采用图形式语言进行编程,其工作量和规模无法通过代码行直接估算,这也使软件精准化估算变得更为困难。结合项目实践,本文主要对3种可编程控制器软件估算方法(直接工作量估算法、代码行估算法和功能点估算法)进行研究,结合实例对3种方法进行详细的估算说明,并对估算结果进行对比分析。
1 直接工作量估算
可编程控制器大多采用梯形图语言编程,该语言不仅在代码上沿用电气工程师熟悉的继电器控制原理图的方式,还提供许多简单而又实用的指令。梯形图锁存逻辑编程代码示例见图1。
图1 梯形图锁存逻辑编程代码示例
直接工作量估算方法是指基于工作分解结构的工作量估算方法,主要包括4点实施步骤:1)进行工作分解结构(Work Breakdown Structure,WBS)分解,将整个项目的任务进行分解,分解粒度需要能进行独立估算;2)参考类似历史项目数据,采用类比法或专家法估计每类活动的工作量;3)汇总得到项目的总工作量;4)根据工作量进行计划安排。
某典型温度控制系统见图2,采用加热器加热容器设备,采用温度传感器测量设备的温度,采用可编程控制器采集传感器的数据,采用HMI显示温度值,在此基础之上进行人机交互。当设备温度到达上限值时,可编程控制器发出断开指令,加热器停止加热;当温度达到下限值时,可编程控制器发出闭合指令,加热器启动加热。
图2 温度控制系统示例图
WBS分解结果见图3,工作量的度量单位为人·时。根据以往相似软件的经验,在可编程控制器中1个模拟量输入(Analog Input,AI)功能设计的工作量约为0.5人·时;2个数字量输出(Digital Output,DO)功能设计的工作量约为1.0人·时;可编程控制器中完成1个变量在人机界面显示的工作量约为1.0人·时;在HMI中完成1个变量的图像设计工作量约为1.5人·时。因此,总计工作量为4.0人·时。
图3 控制系统WBS分解结果
2 代码行估算
代码行估算法是最早用于规模测量的方法,其核心是从开发者的技术角度对软件进行估算。在估算时,该方法对功能分解的详细程序要求较高。由于代码行数在很大程度上依赖于所用的编程语言和个人的编程风格,故在项目需求不稳定、设计不成熟时,代码行估算法很难准确地估算代码量,且其对代码行也没有公认的定义和标准。
在使用代码行估算法进行估算时,首先要把项目划分为若干个功能模块,再分别计算每个功能模块的代码长度,最后计算项目的总代码长度。此外,基于生产率参数可将代码规模转换为工作量。目前,在估算时默认以C语言的实际代码行数为准则进行规模统计。由于大多数可编程控制器不支持直接C语言编程,故需要根据历史经验按比例进行换算。
根据历史项目经验,梯形图-C语言转换系数为0.125,即1条梯形图指令程序对应8行C语言代码,直接工作量估计结果见表1。
表1 直接工作量估计结果
3 功能点估算
基于功能点的工作量估算法从用户的角度来度量软件,该方法与实现技术和语言无关,在项目需求明确时估算的准确性较高。功能点估算的主要方法有3种:IFPUG法、MarkⅡ法和COSMIC法。其中,IFPUG估算法应用范围最广,且适用于所有类型的软件。
功能点估算的主要步骤包括:确定项目类型、识别项目范围、分析未调整的功能点、计算交付功能点数。估算的内容包括外部接口数(External Interface File,EIF)、内部逻辑数(Internal Logical File,ILF)、外部输出数(External Output,EO)、外部输入数(External Input,EI),以及外部查询数(External Query,EQ)。其中,事务类包括EI、EO、EQ,数据类包括ILF和EIF。
依据某一功能单元涉及的数据元素类型数(Data Element Types,DETs)、记录元素类型数(Record Element Types,RETs)、引用文件类型数(File Type Referenced,FTRs),对照复杂度矩阵确定该功能单元的功能复杂度所属类型。其中,DETs是指在一个ILF或EIF内用户可认知的、唯一的、非重复的字段。RETs是指在一个ILF或EIF内用户可认知的数据元素子集。
为更加详细地了解功能点方法的估算内容,在某典型温度控制系统实例的原有基础上,增加用户对历史数据的查询功能。温度控制系统的功能点估算结果见表2。
表2 温度控制系统的功能点估算结果
调整后的功能点数(Adjusted Function Points,AFP)的计算公式为
式中:AF为影响因子,可根据行业数据和经验值进行适当取值。本例中,AF为0.89,调整后的功能点数为45。
4 结论
以提高软件的质量和可靠性为出发点,本文分别介绍了直接工作量估算法、代码行估算法和功能点估算法的实施步骤和估算特点,并依据实例进行了对比分析。直接工作量估算法依赖历史经验数据,在评估量化时无法提供科学支撑证据。代码行估算方法简单直观,但目前没有度量标准,不同人员的估算结果差异较大,不利于项目管理。功能点估算法基于用户需求建立量化指标,对于项目估算相对客观,但需设置较多的影响因子数值。
总的来说,为提高软件估算的准确率,软件项目管理人员应从软件本身的特性出发,兼顾项目的复杂度、重要度和进度要求等指标进行综合考虑。