收稿日期:2023-07-05
DOI:10.19850/j.cnki.2096-4706.2024.04.019
摘 要:系统测试是系统开发的一个重要环节,是验证所设计的系统是否满足功能要求和性能要求的重要手段。测试进行得越早,解决缺陷所需要的成本越低。可测试性设计做得越好,越能提高测试的效率。这大大地降低项目进度,项目成本和产品质量的风险。文章首先介绍了系统测试的意义和可测试性设计的意义,然后从可测试性设计总则和可测试性设计方法详述两方面阐述了在系统设计中如何实现可测试性设计,并提供了一些具体的设计实例,为系统的可测试性设计提供了一些从理论到实践的参考。
关键词:可测试性;非功能性需求;质量属性
中图分类号:TP311 文献标识码:A 文章编号:2096-4706(2024)04-0092-05
Significance of System Test and Design of System Testability
ZOU Hairong
(Siemens Shanghai Medical Equipment Co., Ltd., Shanghai 201318, China)
Abstract: System test is an important part of system development, and an important means to verify whether the designed system meets the functional and performance requirements. The earlier the test is performed, the lower the required cost of fixing defects. The better testability is designed, the more efficient testing. The risk of project schedule, project cost and product quality is greatly reduced. This paper firstly introduces the significance of system testing and significance of testability design, then elaborates how to do testability design in system design from two aspects of general principles and method details. In the meantime, it provides some concrete design examples. The contents can be referred from theory to practice in system testability design.
Keywords: testability; NFR; quality attribute
0 引 言
系统测试是系统开发的一个重要环节,但很多人并不是很清楚系统测试的意义,甚至对系统测试有一些误解,认为测试本身并没有创造价值,却要消耗大量的人力,物力和时间成本,是很大的浪费。这导致有些组织重开发,轻测试,使得大量问题难以在设计过程中发现和解决,造成大量的客户抱怨,和无法估量的后期补救成本。所以每一个利益相关人都应该充分了解测试的意义。同时,如何通过系统的可测试性设计来提高测试效率,从而最大限度地减少测试成本,是每一位系统设计者需要面对的问题。
1 测试的意义
1.1 测试的定义
测试是用于测试的实践和过程的集合,测试是确定被检测的产品/系统/服务是否符合设计,设计是否正确地反映了功能需求,产品及其系统性能是否满足其用户的需求的重要手段。
1.2 测试的意义
1.2.1 降低产品风险保证产品质量
测试可以提供对产品的认知和了解。这些认知和了解可以为管理产品开发,生产,运行和维护过程中的风险提供帮助,从而保证产品质量。比如:测试可以在早期识别出技术,运行或是系统层面的缺陷,以便于及时采取纠正措施,避免这些问题发生在客户现场;测试可以识别出系统的能力和局限性,以便于系统工程师采取措施来改进系统性能,或是给用户提供一些可以优化系统使用的方法。测试进行的越早,对系统的优势和劣势的认知就越早,这对于功能开发和性能提升两方面都有意义。
1.2.2 给利益相关人提供信息和证据
测试的结果可以给利益相关人提供与产品质量相关的信息和证据,测试越充分意味着可以提供更多更好的信息和证据。这些信息和证据可以用于决策,改进产品及流程。
1.2.3 设计确认和产品认证
测试结果中的顺利通过的测试项,是对设计的确认,确认所测试的产品在功能和性能上符合设计的要求。另外有一种专门的测试,是产品过程认证的必要步骤,从产品标准的维度上验证了产品的质量。
1.2.4 加速开发过程
在传统的瀑布式开发模式向敏捷开发模式的转换过程中,一边开发一边测试,小步迭代的模式已经被越来越多的组织接受并采用。在这个过程中,测试是对开發的一种有力的支持和驱动,在一定程度上有效的测试可以加速开发的过程。
1.3 小结
测试结果是质量的指标,提供关于质量的信息。测试本身并不能提高质量,但是设计者可以根据测试结果采取相应的措施来提高质量。
测试的行为在整个开发周期里发生的越早,解决测试中发现的缺陷所需要的成本越低,如图1所示。所以越是一个成熟的组织,越会在产品开发的早期给予测试更多的投入,以便在早期就可以发现产品的风险,避免错误,保证开发质量。
图1 有效的测试
2 可测试性设计
2.1 可测试性设计的意义
测试需要各种资源,比如人力,物力,所以说测试活动本身是非常昂贵的,有效的可测试性设计可以在保证测试质量的前提下,最小化测试需要消耗的资源,从而保证测试的有效性和效率。
可测试性(Testability)是ISO 25010里所描述的质量属性,即非功能性需求(NFR)中的一个重要的部分。架构师在架构设计阶段就需要考虑可测试性的解决方案。
可测试性在提高测试的效率的同时,也提高了可维护性(serviceability),因为在一个可测试性好的系统上进行故障诊断会相对容易和有效率得多。
2.2 可测试性设计的方法总则
2.2.1 观察系统
通常认为系统能被看到的部分就是能测试的部分。为此,系统设计时应实现:
1)能够观察或测量输出,组件状态,内部的资源使用,以及被测试系统的其他不良表现。
2)能够通过观察点与被测系统进行交互。
3)通过诊断功能提供系统运行状态的反馈。
2.2.2 控制系统
系统可以被更好地控制就意味着系统可以被更好地测试。为此,系统设计时应实现:
1)能够给定一定的输入到被测试系统,从而将其带入特定状态。
2)通过控制点与被测系统进行交互。
2.2.3 以简单、一致和可分解为目標
很显然,要测试的东西越少,测试工作就完成得越快。为此,系统设计是应遵循:
1)已定义的标准。定义并使用产品所属领域的通用架构。
2)系统元素、组件有明确定义的职责和接口,并做好独立测试的准备。
3)系统可配置的组合不要太多。
2.2.4 保证可操作性
系统工作得越正常,越稳定(这里指的是不出或者少出故障),测试的效率就越高。原因如下:
1)故障增加了分析和报告这些问题的人力资源消耗。
2)故障掩盖了其他没有被测试出来的问题。
在开发阶段,完全没有故障是不可能的。为了保证测试的有效性,测试前要确认系统的故障不会阻碍测试的执行。在架构设计上也尽可能地模块化,减少不同模块之间的依赖性。这样即使一个模块出现故障,不会影响另一个模块的测试。
2.2.5 保持稳定
这里的稳定指的是被测试系统硬件和软件版本的稳定性,尽可能在一个测试周期内保持不变。更改越少,对测试的破坏就越少。为此,系统设计时需保证如下:
1)对系统及其接口的更改是受控的,不会导致现有的测试无效。
2)系统可以从故障中很好地恢复状态(鲁棒性)。
2.2.6 确保可理解性
我们拥有的信息越多越好,我们就会越聪明地进行测试。系统设计时应保证如下:
1)架构易于理解,使得所有的利益相关人都能很好地理解系统架构。
2)技术描述文档要有良好的格式,并且能及时更新。
2.3 可测试性设计方法详述
2.3.1 测试架构
如图2所示,采用一个合适的测试架构。针对系统架构设计一个合适的测试架构对于系统测试,特别是自动化的系统测试来说至关重要。
通常情况下,测试系统包含测试系统本身,测试管理和测试数据几个部分。测试系统通过测试总线与仿真的测试环境通信,或者是直接与真实的测试系统通信,完成测试所需要的发送指令和接收数据。
下面以我们目前产品使用的自动化测试系统(SITA)的架构为例来详细说明(如图3所示)。
如图3所示,SITA系统的硬件包含两个部分:测试PC和SITA Box。测试PC通过USB接口与SITA Box相连。SITA系统软件部分安装在测试PC上,SITA Box可以提供系统测试中所需要的硬件IO信号。
SITA系统软件部分包含以下功能:翻译脚本,识别UI,发送XCS(XRAY Communication System) 报文,驱动IO信号,生成测试日志文件。
测试总线包含两个部分,一个是通过TCP/IP协议与影像系统通信,完成脚本的翻译,通过UI识别软件,把脚本转化成用户的操作;另一个是通过XCS协议与整个系统通信,即通过发送特定的XCS报文完成某一个功能的模拟。另外,当某一功能需要IO信号输入时,测试软件会控制IO box产生相应的信号输入。
图3 自动化测试系统(SITA)的架构图
2.3.2 测试点
设计必要的控制点和观察点。观察点可以是一些测试点,需要用万用表,示波器,剂量仪等仪器进行测量,从而知道系统的状态;也可以是指示灯或是数码管等可以不用仪器就能够观察系统状态的设计。控制点是在测试的过程中可以加入激励的点。
为了测试方便,控制点和观察点都要尽量靠近模块外侧容易触及的位置。
2.3.3 测试接口
设计测试接口。测试接口包括硬件测试接口和软件测试接口。硬件测试接口可以是测试点,控制点,观察点,也可以是特定的通信接口。软件测试接口可以是支持测试系统的特殊协议。比如,我们在产品的运动控制模块中增加了一个报文ST_ACTUATOR,目的就是为了用报文模拟操作者操作按键。测试系统发送该报文就可以完成一个工作流程的测试。
2.3.4 自检功能
设计自检功能。大部分自检功能通常是在启动的时候被执行,但也可以在一些触发条件满足的时候被执行,比如时间,特定事件,特定报文等。
2.3.5 诊断功能
设计诊断功能。通常情况下,可以在服务软件里设置一些针对不同模块的诊断功能。服务工程师可以选择某一个特定模块的某一个特定项目进行诊断,也可以选择全部。
图4是我们目前产品中所设计的诊断功能的用户界面。如图4所示,第一列是可以做诊断的模块,当某一个模块被选中,所有与该模块相对应的可以被诊断的项目会出现在第二列。诊断开始以后,诊断的详细结果会出现在第三列。
系统通常会发送一个固定的报文用于触发诊断和收集诊断结果,通过不同的标识符来区分被诊断的模块和项目。比如:报文ST_DIAG/SH_DIAG可以包含如下标识符 (仅举几个例子来说明):
ACS_DIAG_ID_IS_VERSION 300影像系統的版本信息
ACS_DIAG_ID_IS_HOST_ID 301影像系统的host ID
ACS_DIAG_ID_IS_CPU_INFO 307影像系统CPU的信息
ACS_DIAG_ID_FD2430_TYPE 340平板的类型
ACS_DIAG_ID_FD2430_SN 341平板的序列号
ACS_DIAG_ID_FD2430_SW 342平板的SW版本
ACS_DIAG_ID_FD2430_FW 343平板的FW版本
ACS_DIAG_ID_FD2430_TEMPERATURE 346平板的温度
ACS_DIAG_ID_FD2430_WIFI 347平板的Wifi状态
ACS_DIAG_ID_FD2430_SHOCK 348平板被摔的次数
2.3.6 日志
提供日志和跟踪文件。日志和跟踪文件都是为记录每个模块在系统中的行为而设计的,通过查看日志和跟踪文件所记录的每个模块的执行,数据流,状态是否正确来分析产生错误的原因,以及重现错误的方法。
日志文件记录模块重要的行为,数据,状态。日志文件的生成除了记录日志的工具外,通常需要模块设计者在编码过程中主动打印重要的日志信息。
跟踪文件记录通信总线上的报文。跟踪文件的生成是由特定的跟踪工具实现的,不需要模块设计者额外的工作。跟踪工具运行后,是通信网络上的一个有监控能力的节点,可以监控到通信网络上的所有报文。跟踪工具把这些报文记录下来,形成跟踪文件。跟踪工具可以实现报文的收集,可视化和分析功能。
日志文件和跟踪文件对于模块测试,系统集成,系统测试,系统监控和分析等至关重要,所以在一个项目的前期要尽早确定实现日志文件和跟踪文件的方案。
2.3.7 程序崩溃记录
增加应用程序崩溃记录。应用程序有可能在运行过程中出现崩溃的情况,这时候,应用程序本身无法发出有用的信息用于判断哪里出了问题,操作系统在正确的设置下可以提供dump文件,记录应用程序运行到哪个模块出现了崩溃,从而有助于进一步分析原因。
2.3.8 版本信息
提供版本信息和配置文件的信息。这些信息可以帮助重现错误和分析错误产生的原因。
3 结 论
系统的可测试性设计与项目进度和产品质量密切相关。不良的可测试性设计是项目进度和产品质量的主要风险。
可测试性不仅仅是可控性和可观察性,本文介绍的可测试性设计的很多方面都要尽可能地在系统设计的初期予以考虑,并给出充分有效的适合特定产品的解决方案。
测试系统的复杂性和成本取决于系统的可测试性,也就是说,系统的可测试性设计的好,可以大大降低测试系统的复杂性和成本。
参考文献:
[1] 王娟,潘卫,陈奎.航电设备测试性与外部自动测试系统一体化平台设计 [J].航空计算技术,2023,53(1):87-90+95.
[2] 孙安全,关莉,刘正圆,等.一种电传飞控系统测试性架构设计与评估技术研究 [J].测控技术,2022,41(1):51-57.
[3] 胡尊帆,吴丽媛,李春雷,等.直升机机电综合管理系统通用测试性试验平台设计 [J].中国科技信息,2021(7):36-37.
[4] 陈慧琍,陈晓轩.一种ATS系统自动化测试工具的设计与实现 [J].铁道通信信号,2021,57(1):72-76.
[5] 张秀.CAN总线协议与自动化测试系统的设计分析 [J].今日制造与升级,2023(7):60-63.
[6] 贾占强,梁保卫,王江辉,等.基于多信号流图模型的典型无人机测控系统测试性优化设计方法研究 [J].测控技术,2022,41(6):26-32.
[7] 张强,黄家成,赵文俊,等.某型机载通信对抗设备自动测试系统设计与实现 [J].测控技术,2021,40(12):51-58.
[8] 申宇皓,马春雷.系统级可测试性设计 [J].华北工学院学报,2004(5):348-352.
[9] 温熙森,胡政,易晓山,等.可测试性技术的现状与未来 [J].测控技术,2000(1):9-12.
[10] 张延欣,吴涛,王明涛.系统工程学 [M].北京:气象出版社,1997.
作者简介:邹海蓉(1973—),女,汉族,上海人,副高级工程师,硕士,研究方向:医疗影像设备系统。