注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

LabATSS

关注自动测试软件

 
 
 

日志

 
 

LabVIEW面向对象编程—初窥门径(7):Framework框架开发技术(下)  

2018-04-09 21:05:11|  分类: LabVIEW |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

引言:在去年年底左右(2017年11月底),由于单位业务调整,自己工作性质和内容发生较大的改变,由原先的计量参数日常运行检定改为软件维护与开发,遂开始着手对以往前同事开发完成的LabVIEW旧代码(直流电源校准/检定自动测试序列)进行重新梳理与维护,在此过程中开始边实践、边摸索的开发学习方式,应用面向对象技术(Object-Oriented Program)对旧代码进行了完全重新的改写,由于前段时间日常忙于开发工作,周末时间又要承担中年油腻男的上有老、下有小的生活“重任”,难得在春节及前后期间有一段相对空闲的时间,可以将近日的开发心得(设计思想、开发过程等)总结记录一下,以便日后回顾复习,并秉着互联共享的精神分享给大家,但是由于本人的工作内容为计量校准的测控行业,因此在实际代码开发实践时选用的案例为本行业的电学参数中的直流电源校准为样例,因此有其局限性,较为适合本行业或者是电子测试工程师们在碰到类似的代码开发情况下予以参考借鉴。

另外强烈建议大家在台式电脑上阅读该系列博客文章,缘由是:文章内容篇幅均较长,且图形化编程的截图显示效果要求大屏幕展示为宜,况且手机和平板等便携式设备易受干扰,导致碎片化式的阅读,从而恶化学习吸收效果;还请特别注意,该系列的博文并不讲述任何基础的LabVIEW面向对象概念与技术(基础部分内容将另行撰文编写),初窥门径系列重点是经典的设计原则在重构旧有面向过程代码的应用,实际发布面向对象工程代码中的填坑经验,因此并不适宜LabVIEW初学者学习, 如观看本文有云山雾里般的“恶心、头晕、眼花”等不适感,请立刻点击操作关闭页面,以免造成严重心理疾病,丧失了对LVOOP学习的浓厚兴趣!


目录:

LabVIEW面向对象编程—初窥门径(1):困惑




LabVIEW面向对象编程—初窥门径(5):开发方式漫谈


LabVIEW面向对象编程—初窥门径(6):Framework框架开发技术(上)


LabVIEW面向对象编程—初窥门径(7):Framework框架开发技术(下)


正文:

前一篇博客文章中我们讲述了框架基本概念、分层和设计三准则, 这些内容给人的直观感觉好像和面向对象编程范型的关联不大!实则不然,框架(Framework)开发设计的三准则:一致性、重用性和扩展性,从本质上与面向对象设计原则天然吻合,特别是面向对象设计中的核心原则DIP依赖反转原则提倡概念重用,高层策略和底层细节都依赖于抽象,LSP里氏替换来确保扩展的健壮性,从而最终达到面向对象程序框架(Framework)的效果原则OCP开闭原则,即程序发布后,无需修改,插件化动态扩展,实现最大化编程代码的规模经济化。

 

本篇博客文章核心是面向对象编程技术在框架(Framework)设计中的应用,特别学习和分析两个典型框架(Framework),分别是NI公司的操作者框架(Actor Framework),和Keysight公司的Test Automation Platform (TAP)

 

从宏观大的格局来讲,本来这里是想开始讲解NI公司的操作者框架(Actor Framework)的内容,但是没有想到AF是一个天然巨大的“大坑”,从201839日开始学习、分析该框架,一直到328日才刚刚梳理出眉目,掌握其基本概念,原先想的是该系列(略窥门径)的文章在春节后两周就可以能完成,没想到被AF框架一耽误,马上就都要写到清明节了!由于AF其内容较多,代码繁杂,简简单单的半篇博文篇幅肯定是说不明白,讲不清楚的,遂打算放置到最后单开两篇博文写写操作中框架(Actor Framework)

 

NI公司和Keysight两家公司的竞争为我们提供了更多功能特点优质框架解决方案,促进编程技术在测试测控领域快速的迭代更新,最近Keysight公司推陈出新地为我们提供了最新的测试框架解决方案Test Automation Platform (TAP) 2018,让我们看看行业领先者们对测试框架的下一步的技术思考。(特别是该框架还是个面向对象的框架,也就契合了我们本次的系列主题)

 

Test Automation Platform (TAP) 2018 是美国是德科技基于微软公司的最新.Net Standard 2.0平台技术栈设计开发的新平台,在该平台上进行二次开发的编程语言为C#,新平台充分利用的.NET Framework的面向对象编程技术,以及程序集的二进制兼容部署、反射等动态技术特性,是一款跨操作系统平台(Windows,Linux)、灵活适用、便于扩展的全新测试调用框架系统软件。

LabVIEW面向对象编程—初窥门径(7):Framework框架开发技术(下) - labats - LabATSS

 

从框架层次分类上来看,TAP程序是属于典型的领域框架(Domain Framework)应用,根据我们前面的了解的知识背景,通常一个测量自动程序最少由四个功能模组构成,分别为:用户界面(User Interface)、测试序列子程序(Sequence Sub Program)、调用执行程序(Test Exec Program)、数据管理系统(Data Storage),而TAP程序除了有以上功能模组分别一一对应的模块外,还进一步将测试序列子程序拆分为测试步骤插件(Test Step Plugins)、被测件插件(DUT Plugins)和标准设备插件(Instrument Plugins,并在测试执行调用引擎(Test Exec Program Engine)的中央控制协作下,与用户界面组件(User Interfaces)模块和结果接收器模块(Result Listeners)一起共同完成相应的测试任务需求。

LabVIEW面向对象编程—初窥门径(7):Framework框架开发技术(下) - labats - LabATSS

 

TAP框架的架构设计核心是测试执行调用引擎(Test Exec Program Engine),支持底层的测试步骤(Test Step)的调用执行,其他的模组如测试步骤、测量结果存储、DUT和标准设备抽象接口为插件结构(Plug-ins, 可以便捷地进行自定义扩展,插件管理器(Plugin Manager)通过简易配置文件,动态查找和组合即可完成全新定制测试任务。测试执行调用引擎(Engine)对外提供一组调用API接口函数来进行与上层用户界面的通信。并在上层人机操作界面功能模组上提供了两种默认实现,分别是图形操作界面GUI和命令行模式CLI,特别值得一提的是,得益于微软.Net Core的跨平台的开源支持,TAP的命令行模式CLI支持在Linux操作系统环境(如Ubuntu 16.04)运行测试应用。

LabVIEW面向对象编程—初窥门径(7):Framework框架开发技术(下) - labats - LabATSS

 

研究TAP框架对我们开发自有项目面向对象技术的自动检定/校准软件(或者是自动测试软件)有着很好的学习、模仿与借鉴意义,TAP的上层逻辑也是通过抽象将测试步骤(TestStep)的运行、数据报告的存储(ResultListener)、以及标准设备的程控(Instrument)和被测件(DUT)的设置(DutSettings)等等都抽象成逻辑概念类(上图中的深紫色的图块示意),也就是前面博客文章(链接)介绍的面向对象设计原则的依赖倒置原则(DIP)的良好示范应用,并根据扩展的需要应用继承和多态完成动态插件的灵活替换(上图中的深绿色的图块示意)。

 

TAP平台本身并不提供任何的编程开发环境,而是站在了微软公司(Microsoft)这个巨人公司的肩膀上,借助宇内程序员都公认的最佳开发编程环境—Visual Studio ,以及基础功能库.NET Framework提供的基础功能函数来进行开发,而硬件相关的程控驱动则需要的Keysight IO Libraries Suite支持。

LabVIEW面向对象编程—初窥门径(7):Framework框架开发技术(下) - labats - LabATSS

 

当我们要进行TAP程序开发时,只需要在Visual Studio开发环境中选择 Keysight TAP Plugins 项目,并根据自己实际项目的具体任务要求,进一步细分来选择开发所对应插件(DUTInstrumentResultListenerSettingTestStep)的具体种类;举例说明:假设我们的测试,需要将测量结果数据保存至自定义的文件格式中时,该需求就是属于对测试结果(ResultListener)插件进行的存储扩展,那么就只需要从提供模板默认操作的ResultListener抽象类(或者是纯概念的IResultListener抽象接口)继承扩展出我们具体的定制类MyResultListener插件,并且将保存特殊文件格式的代码,按需复写(overide)到继承而来相应的概念接口功能函数体中,最终满足客户需求定制化目的。

LabVIEW面向对象编程—初窥门径(7):Framework框架开发技术(下) - labats - LabATSS

 

开发完成后的具体类型插件需要发布打包、分发与使用,每个具体类型插件都是独立的类(.NET class),通过编译打包成程序集(.NET Assembly DLL,并且几个插件类可以按照功能职责内聚的原则,一起打包至某个单一的程序集中。为了方便客户程序端的使用,以及降低客户的认知强度,通过压缩包可将所有的插件整体打包封装到后缀名为.TapPackage的文件压缩包中,除此之外,该压缩文件包还可以包括测试过程所需要的特殊文件(诸如波形文件)。插件包(Plugin Packaging)通过一个特定的Package.xml文件来提供版本、相关内容描述、包内所有文件清单等信息。而这些信息将被TAP Package Manager来读取识别,并以此安装和使用包内的具体插件类。

 

因为面向对象的插件结构必然要提供一种动态插拔的插件管理机制,来实现主程序对新扩展插件的支持,我们在自己的开发程序中应用的是ini配置文件,管理人员手动修改配置文件就能够达到更换新插件的目的,而TAP提供的是更为直观便捷易用的方案:通过插件打包及汇总压缩成整体单体文件形式,结合包清单定义文件(Package.xml,使用图形化管理配置软件进行安装与使用,替代手工繁琐配置,将客户人员的操作软件的扩展难度大幅度降低!当然,我们也要清晰的认识到:.NET程序集(Assembly)所独有的技术特性如元数据提供的二进制兼容、反射、版本控制与参考依赖等,也不是目前LabVIEW版本所能比拟的,只能寄托于LabVIEW NXG新推出的GLL打包库技术快速的成熟起来,能为我们带来更多的发布应用的便利性。
LabVIEW面向对象编程—初窥门径(7):Framework框架开发技术(下) - labats - LabATSS
 
LabVIEW面向对象编程—初窥门径(7):Framework框架开发技术(下) - labats - LabATSS
 

TAP平台调用软件提供了一个图形化的操作界面(keysight.Tap.Gui.exe,该界面通过API接口直接驱动调用引擎(Keysight.Tap.Engine.dll,完成测试步奏(TestStep)的调用与运行,在运行过中将过程状态和测试数据通过.NET的事件机制(面向对象设计模式中观察者模式的变形)发送给ResultListeners,特别的利用.NET 程序集提供动态反射(Reflecting)能力,可以在图形操作界面上直接灵活配置相关的属性。

LabVIEW面向对象编程—初窥门径(7):Framework框架开发技术(下) - labats - LabATSS

 

LabVIEW面向对象编程—初窥门径(7):Framework框架开发技术(下) - labats - LabATSS

 


整个TAP分析、学习和研究下来,感觉该框架最好的诠释了一个优雅的面向对象框架所达到的目标要求:软件实体(类、模块、函数等)应该是可以扩展的,但是不可修改。也就是前面博客文章提到过得,我们面向对象设计中开放-封闭原则(OCP),TAP最大化的提供可重用的组件,通过依赖于抽象概念让使用方(客户程序)包括整体框架可以继续得到概念性的整体复用,而TAP的扩展是指提供服务(功能)的模块(测试步骤、仪器控制、数据处理)可以通过继承和多态技术进行动态插件式的扩展,再经过灵活配置,而从而达到不需要修改使用者的代码而插拔替换,特别是不必改动源代码或者二进制代码就可以使用全新的软件功能,从而大大提升了开发人员的开发效率,特别是领域开发人员只需要关注自己的特殊需求,开发相应差异子类化程序模块类,完成对上层概念抽象类的扩展即可得到界面、数据保存、组件通信协作等等全家桶套餐。

 

当然使用框架开发就像前面提到过的,高效率也相应地带来的严制约,必须按照框架构建的抽象规定套路来进行开发编程,并且根据抽象遗漏原则,肯定有框架抽象不全的时候,这时候扩展就会变得异常困难,难以适用,但是瑕不掩瑜,框架开发还是我们代码进化的最终形态。

 

最后,使用框架特别是高层次领域框架(Domain Framework),看似降低了对领域开发人员的要求,只需要专注于自己的领域核心概念问题即可,其他的上层概念和基础功能都由框架进行了打包整体提供,但是如果开发人员没有良好的面向对象技术知识和设计原则的熟练掌握,往往很难驾驭起面向对象领域框架,由于对上层逻辑概念核心抽象的把控理解困难,并且很难将框架的扩展点与自己的具体业务进行抽象映射,从而导致失败的工程软件比比皆是。

 

所以,学习先进框架的开发理念与精巧架构,努力打造自己的仿制破车轮子,在不断的迭代开发中,提升编程开发技能才能更好的领悟和掌握高深框架的精髓。

 

参考文献:

TAP Developer Trainin(10/9/2017).pdf Keysight Corporation, 2017

Test Automation Platform (TAP) 2018 Technical Overview.pdf Keysight Corporation, 2018

  评论这张
 
阅读(31)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018