对于工业软件该怎么看,业内专家的论述已经论述颇多,甚至汗牛充栋。但是,这些论述的着眼点大都聚焦在软件功能与技术层面。功能是表象,技术是支撑,思想是内核,而测试和验证则是确保软件本身质量、可靠性与安全性的有效措施。
软件测评既帮助软件开发方提升质量,又帮助软件需求方控制质量,还帮助供需双方协同、适配,消除争议,达成共赢。
软件基本特征是除了菜单界面显示的功能等内容之外,其余部分都不可见。如何体会工业软件里到底都有什么科技精华和“武功绝学”,如何透过现象看本质,充分认识工业软件的内涵,是评价、研究乃至开发工业软件要做的重要功课。
从用户视角看,使用、分析、测试一款工业软件:
首先映入眼帘的是软件界面(GUI),从层层叠叠的菜单上,用户可以看到、点击到、感知到的是各种软件功能,而软件功能正确与否,是软件质量的基本指标;
如果深入一步,能够看穿、弄懂软件功能背后是什么,就需要一定的技术功力和超越常人的理解力了,因为软件功能背后是支撑软件功能运行的、包括但是并不限于工业知识的各种知识体系,以及对产品、工艺、流程等细分专业领域的深入研究;
如果再深入一步,在知识体系背后的是工业软件的设计思路以及体现这种设计思想的软件架构。架构是对软件整体结构与组件等主要元素彼此之间关联的抽象描述,这些元素和关联能够反映该软件系统的本质特征。通常用户看不到这个层面的内容,除非由软件架构师做详细介绍,否则即使把这款软件很熟练地用上几年,用户也不一定能明白其设计思路和架构,但是能够明显感觉到“软件好用”“很容易扩展功能”。
如果深入到极致的话,软件设计思想和体系架构背后,隐藏的是设计者/企业的发展理念和工业思想。软件开发企业一定会把自己的理念写入软件中,由此形成无处不在但是难以捕捉的工业思想,而工业思想又在用户的人机交互使用过程中传达给更多的人。关于工业思想的论述,详见笔者写的前一篇文章“工业软件:工具?容器?思想利器!”
综上所述,评价测试一款工业软件,可以观察和研究其五个层次的内容:
软件界面→软件功能→知识体系→设计思路+架构→发展理念+工业思想
需要注意的是,软件界面(GUI)是比较专业的软件技术,甚至在设计上含有一定的艺术成分;软件功能是工业技术的数字化、可视化表达,是数字化的工业知识,属于数字化与工业化融合的产物;知识体系则是以工业知识为主体的工业技术内容;软件架构是更加专业的软件技术;工业思想是更高层面的工业精髓。这个像汉堡包一样的五个层次的叠加,展现了工业软件作为高端工业品的“工业属性”,定义了工业软件的基本内涵,也决定了工业软件的测评与与其它软件的不同。
工业软件的五个层级——“五层汉堡”(根据网络图片修改而成)
从测试和验证的视角看:
前两个层次,用户清晰可见,测试软件很容易操作;第三个层面,测试上也不难,软件中所蕴含的知识体系很快就会被测试者捕捉到;第四个层面,对于专业测试机构而言,如果没有源代码,无法对架构做测试,但是可以做人为主观评价,如果提供源代码,那么其软件架构基本上是比较容易看清的,即使是无法做技术评测的程序,仍然可以用人为主观评价的方式来体会其架构;而第五个层面,就属于深不可测的非技术内容了,这是工业软件开发商最隐秘的核心竞争力,秘不外宣,只能慢慢琢磨和用心体会。
软件代码测评
看界面,看功能,都是表面,直接观感;看知识,看架构,难以看穿,仍然可看;看理念,看思想,深不可见,体会很慢。
五层内容隐身工业软件,黑盒效应难把内涵看穿。借双慧眼检视层层要素,测试验证确保软件安全。
理解了软件的五个层次,业内常见问题是,由谁、怎样来开发工业软件?
笔者用盖大楼的过程来形象地类比一个软件开发过程。一栋大楼大致由三类人来建造,一类是建筑师,一类是结构工程师,一类是建筑工人。
建筑师必须是专业学建筑出身,他来决定这栋建筑应该具有什么样外观,传达什么样的美学理念,表达什么样的文化或设计思想(例如古典+环保),并且要考虑与周边环境(如天际线)巧妙融合等。类比到软件开发场景中,建筑师就是产品总师或软件规划师,是决定软件思想、理念和内涵的灵魂人物。这类人物少之又少,通常具有超常的思维模式,超细的市场观察,超级的脑洞回路,超前的开发决策。他们可能是史蒂夫·乔布斯、艾隆·马斯克、佛朗西斯·伯纳德(CATIA)、约翰·斯旺森(ANSYS)等,或者是活跃在工业软件领域里上万种软件的创始人。每一款伟大的软件产品背后,都有一个伟大的名字。他们以软件建筑师的角色赋予了软件思想的力量,理念的魅力。
结构工程师必须是专业学土木结构出身,他来决定这栋大楼的具体结构和力学状态(坚固程度)的,大楼地基如何打,地下地上各需要多少层,什么地方需要预置钢结构,什么地方用钢筋混凝土,什么位置必须留有足够的空间等。类比到软件开发中,结构工程师就是软件架构师,是决定软件架构和软件功能的人。软件架构师是为整个系统的开发打下基础的人,是技术方面的领导者,他制定了软件的架构风格和指导系统开发的原则,以确保在软件系统的生命周期内的所有开发活动都能遵循这些原则。
建筑工人就是盖楼现场做具体工作的人,负责推土、平地、铺管道、扎钢筋、搬砖、浇铸混凝土等具体工作,大楼就是由千千万万的建筑工人一层一层地盖起来的,他们人数最多,工作最辛苦,业务最具体。类比到软件开发中,建筑工人就是软件开发工程师,在业界还有一个略带自嘲的称谓:码农。他们大都精通几门计算机语言,擅长把设定的软件功能用代码一行一行地表达出来。
软件开发三类人群
产品总师、架构师和软件开发工程师,构成了开发工业软件的三大主力。当然,上述三类分工只是针对大多数工软企业而言。有些体量非常小(例如10人左右)的企业,每个人都是身兼几职的多面手。而对于超大软件企业来说,又不限于三类专业人员,而是有更加细分的工作分类。
产品总师尽量秉持超前的理念、深邃的工业思想,定义工业软件的产品特征、技术风格和性能表现,以形成对市场主流客户的吸引力,并由此而形成巨大的获客能力。
架构师决定怎么样去开发软件,确保软件架构不仅适用于今天的软件功能,还能在今后若干年内仍然支持功能扩展和系统集成,具有较大的功能弹性和发展潜力。
软件开发工程师按照架构师的功能分解、流程设定,遵循代码质量标准和项目进度安排,按时完成软件程序的开发,以尽量少的Bug(缺陷)、尽量高的代码质量来完成软件开发。软件开发工程师不可能掌握一款工业软件的设计思路、软件架构和全部功能,往往都是参与开发其中的一部分程序。软件开发工程师的必要性和存在感并不是很强,因为前两步完成之后,软件企业既可以用自己的软件开发工程师开发,也可以把开发任务外包给其它软件公司,用人力成本更低而技术水平相当甚至更好的国家和地区的软件劳力来完成开软件发任务。
产品总师、架构师和软件开发工程师都非常重要。
如果软件理念和思想出问题,软件走不远,缺乏生命力;
如果软件架构和功能出问题,软件活不久,缺乏用户群;
如果软件程序和代码出问题,软件质量低,缺乏好体验。
软件工程的常识告诉我们,不存在没有问题的软件。一个软件到底有什么问题,常人无法判定,只有第三方专业机构可以对工业软件做全面的测试和验证。
大厦盖好了,没有施工监理的测试和验证,项目不能交付。同理,软件开发完成后,没有经过严格的测试验证,按理说是不能上市销售的。由软件缺陷引发的事故比比皆是,如1999年美国探测器坠毁事件、温州动车追尾事件、波音737 MAX坠毁事件、特斯拉汽车失控事件等,软件缺陷会给用户带来不可估量的财产损失,威胁到其人身安全甚至国家安全。对工业软件来说亦是如此,如果工业软件不经过严格的测试验证就“无证上岗”,在当今软件定义产品和高质量发展的时代,不能不说这是工业软件应用领域的一个软肋和隐患。
工业软件的某一行代码,在一套动辄几百万、几千万行代码的程序海洋中,也许微不足道,但是软件的特点决定了,恰恰是一行代码的错误,就可能因为马太效应,导致整个软件的运行结果错误,进而造成软件失效,系统宕机,甚至是某种正在运行的工业装备停工停产。大家必须建立这样的概念:软件代码错误有可能造成机毁人亡!
因此,工业软件作为生产力工具服务于工业产品的研制和运行,在功能、性能效率、可靠性、安全性和兼容性等方面有着极高的要求。合格的工业软件产品应具备功能正确、性能效率高、可靠性强、安全性高、兼容性好等特点。为研发合格工业软件产品,需要针对工业软件研制全生命周期构建测试验证体系,确保工业软件产品的质量水平。
工业软件既属于高端工业品又属于软件产品,为保障工业软件产品质量,其研发过程也要遵循软件工程的开发方法,需在研制全生命周期中进行“需求分析”、“概要设计”、“详细设计”、“编码”、“单元测试”、“集成测试”和“系统测试”,测试作为工业软件研制全生命周期的重要内容,对保障产品质量,提升产品成熟度具有重要的作用。
通过单元测试、集成测试和系统测试验证各阶段成果是否符合阶段研制需求,经过测试的工业软件产品在功能、性能效率等方面具有较大的提升,亦能减少软件故障、安全漏洞等缺陷。然而,大量实践表明,工业软件研制厂商经过“单元测试”、“集成测试”和“系统测试”能解决软件大部分缺陷,但是仍然会存在部分问题,此时的工业软件产品若投入市场,会给用户带来诸多不便,因此工业软件的测试过程还远没有结束。
工业软件来源于工业应用需求,软件形式是其载体,工业机理模型、算法是软件核心,工业属性是其重要属性之一。针对工业属性的测试验证是工业软件测试验证的重点,工业属性测试反映在功能测试和性能测试上,因此,还需补充“工程化应用验证”,即在实际工业应用场景中,由工业软件用户主导对其功能、性能效率、兼容性、可靠性和安全性等特性进行测试,从而验证工业软件是否符合用户的需求。事实证明,经过工程化应用验证的软件产品能解决大部分缺陷,确保工业软件产品可用、好用。特别是在一些极端条件下确保软件稳定运行或者安全退出运行,而绝不能将极端条件下产生的问题放大或失控传导,导致不可预料的严重后果。
最新的软件测试验证技术,已经发展到不仅可以对工业软件进行代码验证、功能验证,甚至可以对软件所应用的模型进行验证。这些验证技术,已经发展成为一种专门的仿真技术,成为了仿真软件的一个细分专业。
软件需要测试验证的内容很多 (图片来自网络)
工业软件测试验证作为工业软件领域的重要内容,能有效地提高软件代码可靠性和软件功能安全性,保障最终产品的质量水平,提升产品成熟度,完善供应链。
对于供给侧,工业软件厂商在工业软件研制过程中通过软件测试、质量管理等方式提高产品质量,实现“以测促研”。
对于需求侧,工业软件用户通过软件测试确认需求,验证功能的实现,确保工业软件的有效应用,实现“以测促用”。
工业软件应该从可靠性、安全性等几个方面来降低安全风险。
(1)软件可靠性
IEEE(电气和电子工程师协会)曾经在1983 年给出了明确的定义标准:“软件可靠性是软件产品在规定的条件下和规定的时间区间完成规定功能的能力”。据此,软件可靠性测试就是对计算机软件中存在的瑕疵(Bug)或缺陷进行及时发现与排除,验证软件是否满足规定的可靠性定量要求。
在可靠性方面,有很多可以识别的造成瑕疵的错误来源,如:
设计缺陷/错误(系统和软件);
·编码缺陷/错误;
文书错误;
调试不足;
测试错误。
在具体的软件代码设计中,可能存在下列问题:
内存访问超出了程序的空间;
在程序中过度写代码;
由外部驱动程序覆盖代码;
失控程序;
堆溢出;
所有本地阵列的库例程溢出;
不释放块(内存泄漏)。
软件可靠性瑕疵还有很多,此处不做赘述。值得注意的是,软件可靠性问题不解决,可能就会转变成软件安全性问题。
(图片来自网络)
(2)软件安全性
软件安全性(Safety)是软件的一种内在属性。这种属性确定了软件在运行中,所具有的避免触发人身伤亡和设备损坏事故的能力。
在IEC 61508-1:2010《电气/电子/可编程电子安全相关系统的功能安全要求》中指出:“功能安全是指受控装备和受控装备控制系统整体安全相关部分的属性,其取决于电气/电子/可编程系统功能的正确性和其他风险降低措施。” ISO 840的定义认为,安全性是“使伤害或损害的风险限制在可接受的水平内”。
工信部电子五所软件评测专家刘奕宏描述了某些软件功能安全的典型现象,例如高铁的功能安全等级最高的功能项是紧急制动,需要达到SIL4(Safety Integrity Level,安全完整性等级,最高等级为4)。因此,在设计制动系统的软件和电控设备时,需要将紧急制动功能失效的概率降到最低,使残余风险达到人们可以接受的程度,即必须能安全刹车。例如,在没有拿出满足SIL4等级的软硬一体化紧急制动方案时,某企业鼓吹的“时速4000公里的飞铁”就是一种不负责任、误导视听的“博眼球”宣传。
电子五所软件评测专家黄晓昆指出:软件安全性主要考虑系统风险分析,软件安全需求提取的正确性和充分性,软件设计的安全性,软件实现的正确性,软件测试的充分性等。同时要保证安全功能的可靠性,当发生风险时,安全功能能可靠正确行使。
软件具有安全生命周期。在整个软件安全生命周期中,要考虑软件安全设计阶段的代码逻辑内容,软件实现阶段的代码严谨性、函数公式正确性等。至于功能的安全性、驱动物理设备动作的可靠性,应该是保障安全功能在风险发生时必须能可靠正确行使,这本身需要靠功能安全一系列保障措施来达到软件SIL等级要求。
自从病毒、后门、勒索、断供、工业物联网频曝被入侵等安全事态经常出现之后,工业软件的自主性在这两年被各界关注和认识,对“自主可控”的呼声越来越高。
“自主”意味着开发上的国产化,“可控”意味着信息安全、功能安全、物理系统安全等要求,总体上,希望软件有完整的开发过程,良好的质量控制,清晰的源代码,不存在软件后门、恶意程序,开发者愿意不断改进软件质量,修补程序瑕疵或漏洞。
笔者认为,自主与可控之间的关系是,自主不一定可控,可控也未必自主。绝对的“自主”是不现实的。将自主可控组合在一起,对软件开发者提出适度而不是绝对要求,是比较务实、严谨且合理的做法。自主可控是建立在可靠的产业能力基础上的,不应提出超出我国现有产业能力的“自主”要求。
适度把握自主可控 (图片来自网络)
首先,无论是非嵌入式的交互式研发管理软件还是嵌入式软件,只要是不自主,其实都面临着严重的安全风险,都可以成为“卡脖子”的着手之处。例如按照笔者粗略估算,在整个工业软件中,嵌入式软件营业额是交互式软件的5~6倍,因此,对工控设备中的嵌入式软件的安全性,就必须予以重点考虑。中国很多大企业的工业设备都是成套引进,嵌入式工控软件绑定在设备中一起进口。因此,对于这部分看不见、摸不着的嵌入式工业软件,国内用户一直是不敢改动。这些软件到底是怎么写的,程序的安全性如何,有没有软件漏洞或恶意代码,用户都不清楚。于是,在谙熟攻击门道的国外黑客面前,这些引进设备一直处于“裸奔”状态,有些企业的设备已经开始出现被攻击的问题。
其次,即使是某些已经买 断了十年使用权的交互式工业软件,在特殊情况下也有可能“挂掉”,因为黑盒效应用户并不知道里面有什么代码,例如某种可以受远程控制而停用软件的开关。有些人曾经天真地想,可以考虑通过第三方审核引进软件代码,甚至以为掌握了源代码就保证了绝对安全和可控,其实,即使是所有源代码审核没问题,你不得不用的编译器也有可能给加上一点“佐料”,因为编写软件的高级语言、编译器都不在“自主”之列。从“数字底座”上来看,我国软件产业尚不具备百分之百的“自主”能力。
第三,怎样解决自主可控问题?笔者认为比较务实的办法是:①加强对工业软件的测试验证,力争将潜在隐患消除在萌芽状态;②从民用大型装备中的嵌入式工业软件做测试验证,确保工业安全,逐步扩展到其它有必要测试验证的工业软件使用场景;③避免那种什么都要自己做、而且要做到全球第一的危险想法,因为到了那个“境界”时,全球同行都会视你为敌人;④加强技术创新,在若干领域掌握一些自己的“武功绝学”,培养出“反卡脖子”的能力,形成有效的制衡。当你对别人有反卡能力时,所有“卡脖子”的问题都是可控的,利益交换,共存共赢,毕竟是全球政治经济运行的基本规律;⑤制定工业软件行业标准,通过标准来规范和引导工业软件市场。
自主研发,道路漫长。安全可控,迫在眉睫。
测试验证,亟待推广。适度自主,确保可控。
工业软件的五层内容,一层比一层深入;开发工软的三类人群,一群比一群专业;工软的安全可靠问题,一个比一个要命;推广工软的测试验证,一天比一天紧迫。
充分认识软件内涵,清晰知晓软件构造,及早推行测试验证,适度把握自主可控,是发展工业软件必须遵循的几个基本准则。
“以测助研,以测助用”,将会极大地助力工业软件生态建设。测评不仅保障安全,也是消除产品和装备不确定性,度量设计和仿真量值,度量准确度和精度的重要方法,是确保产品和装备质量的必备手段。
(完)
(图片来自网络)
来源:英诺维盛公司
作者:赵敏、杨春晖
声明:本文图片、文字素材均来源网络,版权归原作者所有。如涉及版权,请联系删除!