提升人工智能装备软件测试效能研究
2022-02-13周伟娟钟伟张礼学
周伟娟 钟伟 张礼学
(1 中国电子科技集团公司 第三十四研究所,广西 桂林 541004;2 陆军装备部驻柳州地区军代室,广西 柳州 545000)
随着强化学习、深度学习等机器学习算法的强劲发展,微电子、计算机和数字化技术的广泛应用,以机器学习为主要实现途径的人工智能技术已在国防武器装备发展中崭露头角,解决了智能环境感知、辅助决策、控制执行领域中的一系列难题。人工智能的广泛应用对装备性能提升起到了巨大的推动作用,有力地推进了装备由机械化信息化向智能化发展。人工智能技术与装备的紧密结合是未来装备发展的大趋势。目前,以美国为首的军事强国正大力加强在人工智能装备领域的投资,并采取行政干预、经济制裁、科技脱钩等一切手段打压其他国家在这方面的发展,力图维持其在该领域的非对称优势。经过提前布局和多年的发展,中国在人工智能领域取得了长足发展,在许多方面都可以与美媲美。软件测试作为软件质量“卫士”,在软件的整个生命周期中起着非常重要的作用。但是当前针对人工智能装备的软件测试技术研究已明显滞后于人工智能技术在武器装备研发和生产中的应用速度。目前已公开的关于人工智能软件测试的研究文献比较少,许多人工智能项目的软件测试工作仍对标传统软件测试方法进行,忽视了人工智能软件独有的特点和质量形成规律,效率低且效果差,对其理论进行研究需求迫切[1]。为此,本文先对人工智能装备软件的新特点进行总结,再对现在软件开发过程中的常见问题进行梳理,接着分析人工智能装备给软件测试带来的新挑战,最后从“体系+测试”强化软件测试综合评价等六方面提出提升人工智能装备软件测试效能的对策措施。
1 人工智能装备软件的新特点
人工智能装备是集智能环境感知、信息处理、辅助决策、人机交互和控制执行等多种高新技术于一体并深度融合的装备。虽然其也由软硬件组成,但其软件特性已与传统装备的软件有很大区别,掌握人工智能装备软件的新特点是提升软件测试效能的前提和基础。
1.1 软件功能突出
具备较强的自主能力,能够实现智能感知、智能决策、智能行动、智能保障是人工智能装备区别于传统装备的最大特征,而实现这些功能的最大贡献来源于其功能强大的系统软件。在人工智能装备的软硬件构成中,软件占比大且功能突出主要体现在两方面:一是软件代码规模大,软件开发工作量大且周期长,占用成本高;二是与传统装备不同,人工智能装备在环境感知、信息融合、方向决策、行动执行等方面的自主功能的实现均深深依赖于系统软件功能的正常发挥。部分装备如具有认知功能的数字化雷达的开发模式正逐步由“以硬件技术为核心”转向“以软件技术为核心”[2]。
1.2 嵌入式软件与硬件强耦合
人工智能装备软件大多以嵌入式为主,如智能导弹的导航制导部件,无人运载车的智能感知部件等,其功能实现离不开系统软硬件的紧密配合。软件成为系统的重要组成部分,有些甚至是部件功能实现的关键部分。一旦软件因质量问题发生错误,就会导致硬件系统工作异常,甚至造成灾难性后果[3-4]。与此相对应,软件的附着体硬件会随着其所处环境(如温湿度、振动、电磁场等)变化,在某些方面发生性能变化(如晶振的时间漂移、电压的变大或减小等),而这些变化都会作为一种输入通过接口直接进入软件系统,影响软件功能的正常发挥。
1.3 需要学习训练和可成长
人工智能算法的灵感来源于人类大脑皮层的工作机制、生物群体的集群觅食迁徙活动模拟等,其通过构建一些参数靠日常学习训练而不是严密逻辑推理的数学模型来实现。这就决定了该类型模型的有效实现离不开大量的学习训练,系统功能的强弱与其所经历的训练场景息息相关。且由于学习是一个漫长而无止境的过程,因此人工智能装备性能的提升需要反复迭代,具有可成长性。其可以在与研发者、用户和电磁等外部环境的互动过程中使其自身性能得到提升。
1.4 与大数据、物联网联系紧密
人工智能技术的发展与大数据、物联网的发展联系紧密,大数据、物联网技术的发展为人工智能技术在装备上的应用提供了坚实基础,而人工智能技术的发展也为大数据、物联网的发展应用提供了强有力的支撑,但这也给软件测试增加了运行场景更加多元化、需要检测的功能增多等许多需要考虑的因素[5]。
2 软件开发过程常见问题
随着软件规模和复杂度的迅速增加,软件质量已成为人工智能装备中风险最大的部分。据统计我国装备软件交付验收时缺陷发现率约为6.65(千行代码缺陷数)[6]。如按每年交付定型1 000万行计,数以十万计的软件缺陷潜伏在已验收装备中,风险之大可想而知。从统计情况看,目前软件开发过程常见问题有以下几方面。
2.1 需求分析不到位
在需求分析阶段没有充分地与装备总体、装备硬件等相关部分进行有效沟通,纯粹从自身的经验和理解出发,形成相应的软件需求,从而导致软件的需求仅针对软件自身的功能,缺少从用户的角度、基于任务剖面的需求分析,从而导致需求分析不到位,甚至导致错误的需求[7]。
2.2 软件设计编码倒置
先编码再补设计文档,使得软件质量完全依赖编码人员的个人能力。如在最初编码时没有考虑到可测性、复用性要求,则无法产生高质量软件。后补的软件设计文档大多是由软件代码直接“翻译”过来,很少包含软件架构的整体设计思路,导致后期软件维护的时候,其他人员很难通过软件设计文档理解软件的整体逻辑,从而增加维护成本。
2.3 质量保证实施力度弱
承制单位在软件质量保证能力建设上参差不齐,人员配备或数量不足或质量不够。质量评审流于形式,无法发现深层次的需求逻辑或设计问题。软件测试不规范、测试时机滞后、测试深度不够,无法发现有价值的软件问题。对于评审、测试发现的相关问题,没有很好的机制督促研制单位及时闭环。
此外,在意识层面:一是目前对软件研制的管理一般依附于硬件研制,且节点往往落后于硬件研制,导致关键控制节点与实际研制进度脱节。二是部分软件尚未单独审价,研发单位对其投入不够,导致软件质量文化缺乏。软件工程化管理水平不高,仅仅注重功能的实现,对软件质量和可靠性重视不够。三是质量监督管理队伍中,软件专业人才较少,对软件项目管理、文档编制、编程技术等方面存在“先天性不足”。更不用说对算法选择科学性、时序设计合理性、接口参数匹配性、模块集成性、软件复用性等方面进行审核和监督[8-9]。
软件测试随软件开发的诞生而产生,是软件开发生命中的重要过程之一。常根据软件任务书、软件需求和软件规格说明书等编写一系列测试用例来验证软件产品性能,从而保证其质量。是一种审核比较输入与输出的过程,是为了发现错误而运行程序的过程[10]。据统计,随着软件产品复杂性的增加,软件测试需花费掉一半甚至更多的软件开发成本。
3 人工智能装备给软件测试带来的新挑战
3.1 软件故障占比增多,且呈随机性分布
与传统机械化信息化装备相比,人工智能装备由于软件占比大,软件引发的故障数在系统故障中的比例越来越大。且软件作为研发人员的精神产物,没有物理实体,不会自然变化,但容易人为变更。因其是脑力劳动,是无形的、不可见,难以控制。其系统的数据模型一般为离散型,输入空间巨大,关联关系复杂。故障一般由特定输入触发,无物理原因,无失效前兆,需要在无限的测试输入空间中通过适当的测试方法选取合适的输入进行测试,才可能找出潜在的软件缺陷。必须采取相异的冗余设计才能提高可靠性,必须修改源代码才能修复故障,但同时容易引入新问题,且故障没有明显的规律性,过程较复杂。
3.2 人工智能算法具有不可解释性,结果有效性难验证
人工智能算法具有逻辑性不强、算法训练规律难掌握和结果有效性难验证的特点[11]。人工智能算法并不遵循传统的编程规则,而是通过机器学习算法模型直接从大量数据中进行学习训练来固化模型参数。对于设计人员来说,这实际上就类似一个“黑箱”,计算机程序员可以查看机器学习的输出结果,了解结果的正误情况,但要理解系统为什么会得出某种结论,尤其是预测故障,则相当具有挑战性。此外,随着机器学习算法功能的更加强大,其能处理的事件也更为复杂,但这些都伴随着算法模型规模的不断扩大。规模的扩大会导致有越来越多的问题结果让人感觉迷惑不解,算法中存在的部分“反直觉、奇怪的”漏洞不容易察觉和排除。
3.3 测试环境复杂、实时性要求高
大数据存在体量大、多样性和变化快的特性,而物联网实现了万物互联互通,再加上装备自身的软硬件结合紧密等特点,使得软件测试面临着复杂的测试环境,给测试数据准备和测试数据组合带来巨大工作量,对测试过程的实时性提出了很高要求。如何验证数据的一致性、齐备性和完整性, 需要开发相应的工具。对系统的安全性、可伸缩性、可扩展性、协同感知等需要进行验证。要对系统多样化的应用场景进行充分的测试,需要对用户应用环境以及应用方式等做一系列科学合理的假设[12-13]。
4 提升人工智能装备软件测试效能的对策
4.1 “体系+测试”,强化软件测试综合评价
人工智能算法的逻辑性不强和软件故障的随机性特点决定了提高软件质量水平一靠设计开发过程符合规范要求,使得过程的策划和实施都能得到充分的论证和考核。二靠充分有效的测试,其能通过功能、边界、异常、接口和安全性等方面的测试尽早尽多的发现软件中存在的问题。因此,采用“体系+测试”的综合评价方法既能使程序开发者的开发过程做到规范标准,又可以在充分的测试下最大程度发现软件存在的问题。要在装备承制单位中大力推广GJB5000A软件能力成熟度模型,不断督促其提升等级水平,并根据其取得的认证范围和等级水平来分配合同任务。在人工智能装备型号研制项目的试验总案中,要根据其软件承担任务的重要程度将其分为关键软件、重要软件和一般软件。根据其来源划分为新研软件、改进软件和沿用软件(含货架软件),并采取不同的测试策略。对既是关重软件又是新研或改进类软件要加强关注。应前移第三方软件测试工作介入关口,并要求进行验证测试、鉴定测评和软件能力评估。此外,在软件测试工作策划时要加强风险预判和过程思维,将软件测试过程融入方案设计、开发调试、学习训练和使用完善的全寿命过程中。将事前预防工作提到和事后测试验证同等重要位置,提前发现问题隐患并采取控制措施,从根上提升软件质量。
4.2 拓展手段,智能化测试场景和用例的生成
巨大的数据量、多样化的应用环境和极高的实时性要求,使得开发一种能够对人工智能装备软件进行智能化测试的工具成为迫切。当然,这里的智能化测试涵盖了测试需求分析、测试策划、测试分析、测试设计与实现、测试执行、质量度量、测试过程监控与评估和测试结果评估等全流程的智能化。一是智能化测试用例生成。要利用人工智能技术根据约束要求自动生成大量测试用例,充分吸收借鉴软件测试专家积累的经验知识,丰富专家系统,并使用优化算法进行挑选形成最佳测试用例集。二是多样化测试手段。实景测试具有最真实的现实代表性,但其容易受限于安全性、复杂度、成本和效益等约束。许多时候,需要基于半实物以及仿真等手段构建相应的测试环境。仿真测试可解决实景测试场景不够丰富,操作者素质、熟练程度不一致等因素影响。其能根据测试项目需要利用图像合成、 参数化重组等进一步加工丰富测试场景内容, 从而生成合适复杂度的虚拟环境。纯仿真模型的软件测试有着成本低、场景可反复、细节易调节的特点,但也存在可靠性高度依赖模拟传感器和环境模型准确性的缺陷。主要用于在物理原型出现之前,其能在系统层面上验证和优化相关模块和功能的设计。三是基于体系能力统筹装备试验和软件测试条件建设。要加强装备数字化模型的构建工作,通过渐进式、螺旋式的迭代开发不断提升模型逼真度。要充分利用立体空间侦察、测量和重构,智能生成试验环境,并形成测试环境场景数据库。以模型、算法、算力为建设核心,实装和仿真互补一体化推进、缩短周期成本。要将测试工作融入装备演习演练中,让数实相互验证,避免缺要素导致环境复杂度不够[14]。
4.3 整合资源,一体化硬件试验和软件测试
万物互联、嵌入式软件与硬件的强耦合性使得传统将软件测试完全独立于硬件和工作环境的做法在进行人工智能装备软件测试时不再可行。要加强该类型装备的软硬件一体化测试考核。有机融合第三方软件测评和基地试验等考核环节,减少一些重复的同质化测试,增加部分联合测试项目。让施加的极限(温度、湿度、震动、盐雾、电磁)环境应力条件在考核硬件时也作为输入考核系统软件,同时让软件测试的大范围输入加强硬件考核的充分性。此外,当整机系统进行极限环境考核存在测试环境建设不足、试验成本过高等制约时,应加强人工智能装备关键组件的极限环境考核测试。
4.4 甄别质量,加强开源软件测评
人工智能装备的软件规模巨大,对其进行开发、调试和测试是一项巨大工程。开源软件的出现简化了分工合作模式,可大大减轻程序员的开发负担,是加快软件开发进程的有效捷径。但开源软件多采用分布式协作开发模式,其开发过程具有参与者众多、层次参差不齐等特点。在开源软件社区,很多软件开发人员都是因为兴趣爱好而参与到一起的,软件的开发过程无法像商业软件那样安排专业的第三方软件测试团队对其进行全方位测试。开源软件的测试工作大多是在使用者运行程序时进行,存在着测试不全面、问题反馈不及时不齐全等问题。此外,使用开源软件进行二次开发容易脱节软件原来的开发路线。这些都使得在对人工智能装备的软件进行测试时需要加强开源软件质量测评。要利用静态代码分析工具对软件代码进行全面分析,要积极关注该软件已产生缺陷的深层次原因,要对开源社区中该开源软件开发人员留下的活动踪迹进行仔细分析评估[11,15]。
4.5 注重积累,围绕可成长性开展训练和测试
智能化装备智能特性的可成长决定了其软件在研发阶段要经历反复训练和测试,需要有大规模的训练和测试数据。而生产、使用和维护阶段,人工智能装备将在不同的环境中使用,其又能产生大量可促进其智能特性提升的数据,因此围绕可成长性开展性能测试势在必行。人工智能应用程序地对大数据具有较大依赖性、随机性的输入/输出、难以预测所有应用场景和需要从过去的行为中不断自我学习成长等特点决定了智能化装备在开发和测试过程中均需用到大量数据,而且这些数据的质量将直接影响装备开发和测试的有效性验证质量。因此,负责智能化装备的承研单位和负责重要智能化装备的软件测试机构应尽早结合自身研发和测试需求建立自己独立的专业训练和测试数据库。此外,在日常工作中,要对研发单位、生产制造部门、使用客户、维修保养单位以及软件测试机构等的人工智能装备性能数据的采集、分析与存储过程的齐备性、完整性以及标准化、规范化问题进行统一,以方便数据能在各部门之间进行共享。
4.6 信息闭环,强化装备数据的分析和运用
由于人工智能装备系统能力是动态可提升的,因此其软件测试过程是一项持续周期长的活动,也决定了其测试过程中不能照本宣科的用机械化信息化尺子去衡量人工智能装备。装备的智能化要求软件测试过程中必须不断提升数据分析运用能力,只有对软件运行过程中的状态和质量数据进行实时采集、系统分析并加以充分利用,才能让人工智能装备在信息数据的闭环管理中不断学习训练并拓展能力。一是要精准采集数据。要充分利用自动化智能化监控和检测设备,实时准确采集人工智能装备在研发、生产、使用、维护等各环节的运行环境、运行状态数据。精准识别有用信息,并保证数据完整、准确、规范。二是要有效应用数据。要将当前采集到的数据与装备科研样机、历史批次的学习训练数据进行对比分析并深入挖掘。要使用数值分布、包络分析和SPC等统计分析方法,及时发现离群、异常数据,对过程控制的异常行为做出预警。这些闭环信息的有效利用既可为人工智能装备的软件性能升级改进提供训练数据,实现性能参数的及时优化,又可为软件测试综合评价提供决策支撑。
5 结束语
未来,人工智能装备将是战场上的主力军,其可代替战士在战场上冲锋陷阵,有效减轻战争中的人员伤亡。但其也存在着因自身设计论证、试验测试不充分等问题而发生工作异常甚至是“临阵倒戈”的风险,因此加强人工智能装备软硬件性能测试方法研究迫在眉睫。随着人工智能技术的继续进步,分布式、强协同的群智能技术将会是发展方向[16]。人工智能装备的软件测试也必然朝着云化、分布式、服务化、自动化、智能化方向发展。面对人工智能装备软件测试提出的新挑战,要加强顶层设计谋划,提前做好人才培养、技术和数据储备等工作。要不断摸索更为有效的软件测试方法和测试手段,不断开发功能强大、实时性高的自动化智能化测试设备。要不断总结人工智能装备软件质量的形成规律,找出关键控制点,让软件测试工作的开展更加有效。