APP下载

工业软件测试验证方法研究★

2022-02-09刘务杨春晖吴蕾林军徐巍

电子产品可靠性与环境试验 2022年6期
关键词:工程化案例库试用

刘务, 杨春晖, 吴蕾,林军,徐巍

(1.工业和信息化部电子第五研究所,广东 广州 511370;2.工业软件工程化与应用技术工信部重点实验室,广东 广州 511370)

0 引言

工业软件是工业技术/知识、流程的程序化封装与复用,能够在数字空间和物理空间定义工业产品和生产设备的形状、结构,控制其运动状态,预测其变化规律,优化制造和管理流程,变革生产方式,提升全要素生产率,是现代工业的“灵魂”[1-2]。工业软件作为现代工业技术和信息技术结合的高端成果,对于推动工业产品创新发展、确保产业安全、提升国家整体技术和综合实力,起着至关重要的作用。

工业软件来源于工业产品研制过程中的应用需求,并服务于工业产品研制的全生命周期,因此,按照工业产品研制的全生命周期流程,工业软件可分为研发设计软件、生产制造软件、服务保障软件和经营管理软件等4个类别。其中,研发设计软件主要包含MBSE、CAD、CAE和PDM等,服务于工业产品的方案、设计和仿真分析;生产制造软件主要包含CAPP/CAM、MES、DCS和SCADA等,服务于工业产品的生产和制造;服务保障软件主要包含PHM、MRO等,服务于工业产品的维修和保障;经营管理软件主要包含PM、ERP和CRM等,服务于工业产品研制全生命周期涉及的项目管理、供应链管理和客户关系管理等。

工业软件在虚拟世界中对工业产品进行设计和验证,能够大幅度地节约研发成本,支撑产品的正向设计。工业软件的质量直接影响工业产品的研发效率和创新,特别是在高端制造领域,对其功能、性能效率、可靠性、安全性和兼容性等质量特性有着极高的要求,合格的工业软件产品应具备功能正确、性能效率高、可靠性强、数据互联互通和安全性高等特点。工业软件属于软件产品,为保障工业软件的产品质量,其研发流程亦可遵循软件工程的开发方法,而测试验证属于工业软件研发流程中的重要环节,对于提高工业软件产品的质量具有非常重要的作用。

按照软件工程开发方法,在工业软件的研发过程中需要进行“单元测试” “集成测试”和“系统测试”,从不同的维度对工业软件的功能、性能效率、可靠性、兼容性和安全性等质量特性进行测试,验证各个阶段成果是否符合阶段研制需求,减少软件故障、安全漏洞等软件缺陷。此外,工业软件来源于工业应用需求, “工业属性”亦是其最重要的属性,因此还需进行“工程应用验证”,即在实际的工业应用场景中对工业软件的功能、性能效率和可靠性等进行系统性的测试,从而验证工业软件是否符合用户需求,确保工业软件产品可用、好用[2]。因此,为了研发合格的工业软件产品,需要针对工业软件研制全生命周期构建测试验证体系,对保证工业软件产品的质量具有重要的意义。

1 通用软件测试技术

1.1 通用软件开发模型

在20世纪80年代后期,Paul Rook[3]首次提出了V模型,如图1所示,从图1中可以看出,软件研发全生命周期主要包含需求分析、概要设计、详细设计、编码、单元测试、集成测试和系统测试等阶段。

图1 通用软件开发模型

a)需求分析

根据客户需求分析出软件需求,即软件所具备的功能、硬件环境等,并保证软件功能需求覆盖用户需求。

b)概要设计

根据需求规格说明,对软件架构进行进一步的设计,并编制软件概要设计说明书。

c)详细设计

对概要设计中表述的各个模块,以及模块间的组合进行深入的分析,编制软件详细设计说明书,该阶段应达到伪代码级别。

d)软件编码

按照详细设计说明书,开发者编写代码。

e)单元测试

按照设定好的最小单元进行测试,目的是确保各个单元模块被正确地编译。单元的具体划分可以是模块,也可以具体到类、函数等。

f)集成测试

该阶段主要测试各个模块组合后的功能实现情况,以及模块接口连接的正确性、数据传递的正确性等。

g)系统测试

该阶段按照软件需求规格说明书的要求,测试软件系统的功能、性能等是否满足用户的需求等。

1.2 通用软件测试方法

目前将通用的软件测试方法划分为静态方法和动态方法[4-7]两大类。静态方法是通过分析源程序来发现错误;动态方法则需要执行程序,通过设计测试数据和使用测试工具,检测程序运行的正确性并发现错误。动态方法和静态方法都有各自的特点,测试中可以起到互补的作用。

静态测试方法主要包含代码审查、代码走查和静态分析等,代码审查的目的是检查代码与设计的一致性、相关标准规范的执行情况、代码逻辑表达的正确性和代码结构的合理性等。代码走查的检查内容与代码审查的内容基本一致,但操作方法却不相同。代码审查是通过审查人员仔细阅读代码及相关材料,对照审查单,记录问题和明显的缺陷;而代码走查是走查小组人员提出一系列代表性的测试实例,其他人员对测试实例用人脑来执行程序,并记录发现的问题。静态分析的目的是发现编码规范问题和编码逻辑错误。静态分析一般包括代码的控制流分析、数据流分析、接口分析和表达式分析等。其中,控制流分析是使用控制流程图系统地检查被测程序的控制结构的工作;数据流分析是用控制流程图来分析数据发生的异常情况;接口分析主要用在程序静态分析和设计分析中,涉及模块之间的一致性分析,以及模块与外部数据库之间的一致性分析;表达式分析主要用于分析表达式的错误[8]。

静态分析有如下优点:1)可以更早地检测出缺陷,在软件开发早期占据主导地位;2)静态分析不需要产生额外的测试用例,针对不同的路径,它能对缺陷进行有效的试验;3)静态分析技术不仅自动化程度高而且效率也高。

动态测试指的是实际运行被测程序,输入相应的测试数据,检查实际输出结果和预期结果是否相符的过程。根据对被测对象内部情况的了解与否,分为黑盒测试和白盒测试,其中,黑盒测试[9-11]又被称为功能测试或数据驱动测试,是指不知道软件内部构造和设计,只按照软件的需求规格说明书对软件进行的测试;白盒测试又被称为结构测试或逻辑测试,需要了解软件内部的构造和设计,这种测试方法需要根据程序的逻辑结构,其有效性依赖于程序本身设计的正确性,无法发现由数据错误引起的程序错误。

2 工业软件测试方法研究

ISO 25000.10定义软件质量模型如图2所示,主要包含功能、性能效率、兼容性、可靠性、信息安全性、维护性、易用性和可移植性等质量特性。

图2 系统/软件产品质量模型

工业软件也属于软件,图2描述的质量模型也适合工业软件,同时通用软件的测试方法也适合于工业软件的测试。然而,工业软件是工业技术知识和软件融合的产物,属于高端的工业品,软件是工业软件的外在表现形式,其内在核心是工业知识,所以工业软件既具有工业属性,又具有软件属性,如图3所示;而工业属性是工业软件的核心属性,正是因为工业属性的存在,使得工业软件的测试方法和研发流程与通用软件的测试方法和研发流程稍有不同。

图3 工业软件属性

2.1 工业软件开发全生命周期模型

工业软件也属于软件,发展工业软件亦要遵循软件开发的客观规律。然而,工业软件除了具有软件属性,其本质是工业属性,如MBSE、CAD、CAE、EDA、CAPP和MES等软件,其核心是领域机理模型库、生产制造流程等,正因如此,其研发流程与传统V模型有一定的区别。

工业软件开发全生命周期模型如图4所示。

①盖帽:作用是密封和固定支撑板(A和B),同时,盖帽外形设计美观大方,上台面可以放置洗漱用品等杂物。如图1所示。

图4 工业软件开发全生命周期模型

从图4中可以看出,工业软件的研发全生命周期主要包含需求分析、物理问题分析、建模、概要设计、详细设计、编码实现、单元测试、集成测试、系统测试、应用验证和发布试用等阶段。

与传统的通用软件的V模型相比,工业软件的研发模型在传统V模型的左边增加了物理问题分析和建模两个阶段,在V模型的右边增加了应用验证和发布试用两个阶段,如图4虚框所示。

a)问题分析

该阶段是指算法工程师根据需求对所涉及的物理问题进行分析,以结构CAE分析软件为例,算法工程师需根据特定的应用场景,结合用户需求,分析需求涉及到的物理问题,如线性静力、模态和屈曲等。

b)建模

建模是指针对具体的物理问题,构建对应的数学模型,以结构CAE分析软件为例,建模就是针对具体的物理问题来构建对应的微分方程组,经过评审后,软件工程师再进入后续的软件设计阶段。

大量的实践经验表明,工业软件由于其特殊性,在企业内部完成传统的“系统测试”之后,仍然存在大量的缺陷。工业软件是用出来的,因此工业软件研发全生命周期还应包含“应用验证”和“发布试用”阶段。

a)应用验证

b)发布试用

工业软件经过应用验证后,能解决大部分的缺陷。为了进一步地完善产品质量,此时的软件版本应该在更大的用户范围内发布试用,使得缺陷得到进一步的暴露,大量的实践表明,通过发布试用能较大程度地提升工业软件的产品质量,可达到“好用”程度。

2.2 工业软件测试方法研究

工业软件具有与工业应用场景结合紧密、多学科融合和结果精度要求高等特点,不仅需要对工业软件的功能、性能效率、可靠性和兼容性等进行测试验证,还需要对工程化应用场景下的软件能力、结果真值标定等进行验证与确认(V&V),而传统的软件测试方法不能完全满足工业软件的测试需求。

工业软件测试方法主要划分为实验室测试方法和场景测试方法两大类,其中,实验室测试方法主要包含标准案例库测试方法和比对测试方法;而场景测试方法主要包含工程化应用测试和大规模试用验证。工程化应用测试和大规模试用验证是指由用户主导参与,在实际的应用场景下应用工业软件,对其功能、性能效率、兼容性、可靠性和易用性等指标进行验证。下面分别对这两类方法进行详细的介绍。

2.2.1 实验室测试

在实验室场景下,工业软件测试方法包含标准测试案例库测试方法和比对测试方法。

a)标准案例库测试

标准案例库测试是指测试人员在实验室研发环境下,利用标准的测试案例库对工业软件进行测试,属于工业软件测试中最常用的一种测试方法。

标准测试案例的收集途径主要包含:具备解析解的案例库、用主流软件生成的案例库和实际场景下试验产生的案例等,对于具有开源社区的软件,还存在有开源社区的案例。

标准案例库的测试流程如图5所示,计算案例库标准输出与被测软件的输出结果之间的误差,并与设定的阈值进行比较,若误差小于设定的阈值,则测试通过;若误差大于阈值,则测试不通过。

图5 标准案例库测试方法

b)比对测试

比对测试是指应用业界认可度高的商用工业软件作为比对“基准”,对工业软件进行测试的方法。当标准测试案例库中的案例不足时,可以采用比对测试方法。本质上,比对测试方法也属于标准案例库测试方法,只不过标准案例库是通过操作业界认可度高的商用工业软件生成的。其操作流程图如图6所示。

图6 工业软件比对测试方法

以三维CAD软件为例,在标准测试案例库中的案例不足的情况下,可以选取CATIA、PTC和NX等成熟的商业三维CAD软件作为基准,在被测CAD软件和一款或多款成熟商业软件上进行同样的建模操作,在结果模型中选取重要的参数进行比对,如面积、体积、质量和重心等指标,若误差小于设定的阈值,则测试通过;反之,则测试不通过。

对标测试需要对多款具备同样功能的软件进行操作,测试任务较大;在具体的实施过程中,可以借助于测试工具,减少实施成本。如三维CAD软件的对标测试可以借助于测试工具,测试工具应具备和多款CAD软件适配的功能。

2.2.2 场景测试

场景测试是在真实的应用场景下使用工业软件,从而发现工业软件的缺陷。场景测试主要包含工程化应用测试和大规模试用验证,两种方法也分别与工业软件研制全生命周期的应用验证阶段和发布试用阶段相对应。

a)工程化应用测试

工程化应用测试是指小范围特定用户在实装环境中应用工业软件,并对工业软件的功能性、性能效率、兼容性、可靠性和易用性等质量特性进行全面测试,这些用户返回有关错误信息给开发者。工业软件的工程化应用验证测试类似于β测试。

应用验证测试是十分关键的。例如:中国航空工业第一飞机设计研究院是世界上第一家在实际工程中使用CATIA V5软件的用户,通过在飞机研制过程中实际应用CATIA V5软件,陆续地发现了成百上千个问题,极大地帮助了该软件的成熟,被达索公司认为是最重要的战略伙伴之一。由此可见,工程化应用测试对工业软件研制方有重要的意义。

开展应用测试必须是实际项目,由用户主导,选择实际产品在真实的环境中应用。工程化应用测试工作的结果是给出以下报告和产品:

1)工程化应用测试过程和应用测试结论的报告;

2)与当前主流相应系统的优缺点比较的报告;

3)对软件系统的改进建议;

4)工程化应用测试生成的产品,如零部件的设计和加工的产品,数字样机等。

b)大规模试用验证

如Linux定律所述, “只要足够多的眼球关注,就可让所有的软件缺陷浮现”[12]。在软件产品的测试过程中,软件产品管理者希望能够快速地获得大量的反馈,以尽快地修复软件产品缺陷并改进软件产品质量。然而,招募/训练测试人员的巨大成本往往使得召集大量的专业测试人员变得困难。因此,如何快速地获得测试反馈,特别是大量真实用户的反馈以帮助产品的改进,同时以较低的成本高效地完成测试任务,是当前软件测试领域的困难之一[12]。

针对这个难题,目前一种有效的解决方法是众包技术,是互联网带来的一种分布式问题解决和生产组织模式,通过整合互联网上的未知大众和机器来解决机器难问题[13],即大量的在线测试人员参与完成测试任务,可以提供对真实应用场景和真实用户表现的良好模拟,测试周期短且测试成本相对较低[14]。这些优点使得众包测试技术得到了学术界和工业界的广泛关注,广大研究人员密切关注众包软件测试的理论和方法。

当工业软件经过工程应用测试后,小范围的特定用户会从自身使用的角度来提出问题,并反馈给开发者,经过应用测试后的工业软件产品能解决大部分问题,但仍然存在少数缺陷,仍需做进一步的优化处理。此时,工业软件企业可以根据工业软件的应用领域有条件地对外开放,在更大范围内有限制地发布试用,即大规模试用验证,以结构CAE软件为例,限定Licence时长,可在汽车、航天、航空和船舶等领域进行发布试用,使得工业软件产品在更大的用户范围内使用,发现问题并反馈给开发者,进而使得工业软件产品进一步地完善。

经过大规模试用验证的工业软件产品,此时已经相当成熟,只需在个别地方再做进一步的优化处理即可上市发行。

3 结束语

总的来说,本文提出的针对工业软件的测试验证方法弥补了通用软件测试方法的不足,作为工业软件生态建设的重要内容,能够保障产品的质量水平,提升产品的成熟度。对于供给侧,工业软件厂商在工业软件研制过程中通过软件测试提高产品质量,实现“以测促研”;对于需求侧,工业软件用户通过软件测试确认需求,验证实现,确保工业软件的有效应用,实现“以测促用”。因此,工业软件测试验证对于工业软件生态体系建设具有重大的意义。

猜你喜欢

工程化案例库试用
心血管外科教学案例库的建设及应用研究
血管吻合试验台的研制及试用
国内首个海事司法案例库正式上线
世界首台高温超导高速磁浮工程化样车下线
基于实践应用的基坑工程设计案例库建设研究
化工原理课程思政案例库建设初探
GYK-160G型和GYK-160X型轨道车运行控制设备通过试用评审
“小饼干”的诱惑 永诺YN 40mm F2.8N镜头试用
软件测试工程化模型及应用研究
玻璃纤维增强复合材料工程化应用进展