SEP编号: |
104 |
标题: |
在线与离线语言映射技术简述 |
创建日期: |
2008/03/04 |
修改日期: |
|
提交者: |
wayne |
提交者邮箱: |
wayne at ezTester.com |
状态: |
活动 |
类型: |
开发信息 |
修改记录: |
语言映射技术就是拿一种编程语言描述(或模拟)另一种编程语言,或者说,拿某种类编程语言仿真另一种编程语言。之所以有仿真的需求,首先因为两种语言不同质,可能适应环境不同,也可能使用方式不同,典型的情况比如:拿高级语言描述低级语言(过程语言或汇编语言等),拿某操作系统下的编程语言描述另一操作系统下的编程语言。
语言映射不外乎两种映射手段,一是某语言在线使用时实施映射,二是离线时实施映射,前者主要服务于仿真目的,后者主要服务于格式转换的目的。
VcTester系列工具,包括VcSmith、VcTester、VcAuto采用在线语言映射技术提供调测服务,将C/C++语言映射到CSE脚本语言,或者说拿CSE语言仿真C/C++的行为。在被测系统中驻留CSE脚本系统,将被测C/C++代码中的类型、变量、函数、类方法等映射为脚本系统中的实体,然后以脚本形式任意操作C/C++系统变量与函数。经此映射使CSE脚本系统具备与被测系统对等的表达能力,进而支撑各式各样的调试或测试。
CSE脚本语言系统采用离线语言映射技术,提供离线的格式转换服务。比如使用CSE脚本开发某系统,经调试、测试,脚本代码稳定后再转化成C/C++语言,这种离线转化通常是为了同时谋取两种异构系统的优势,因为采用脚本语言开发,研发效率很高,而系统运行效率很低,而C/C++语言开发,开发效率较低,但能很好的保证代码运行效率。
如上图,建立在线映射技术与离线映射技术的基础都是“C/C++语言开发环境”与“脚本语言开发环境”,在这两者之上实施“在线语言映射”,就提供从编码、单元、集成测试,直至自动化测试、诊断测试各个阶段的调测支持,而在这两者之上实施“离线语言映射”,就提供不同程度的代码转化能力(如直译、转译、编译),再进而支持脚本语言与过程语言混合编程,若代码转化再彻底一点,按编译方式进行转换,本系统就发展成扁平开发技术体系了。
借助在线映射技术,如上所述,可以提供良好的调测支持,被测C/C++中实体映射到脚本系统后,脚本系统就具备对等的仿真能力。用户从编写第一行代码开始,被测系统就具有两付面孔,其一是运行C/C++代码表现的产品功能,其二是调测脚本模拟出来的产品功能。两付面孔具备同样的魅力,在某种程度上说,后者更有内涵,因为它可以展示更多的东西,既包括客户看得到的(产品运行起来的样子),也包括只给自己看的(驱动调试或者构造测试运行环境)。
由在线映射技术支持的调测功能体现在VcSmart(参见VcSmart使用手册)、VcSmith(参见VcSmith使用手册)、VcTester(参见VcTester使用手册)与VcAuto软件中。这几款软件服务的测试阶段如下图所示:
离线语言映射技术在CSE脚本语言体系下发展,因为CSE是一款开源软件(参见CSE官方网站),这意味着基于离线语言映射提供的一系列功能,大部分是可以免费获取的。
CSE技术体系主要为高效软件开发服务,它首先遵循“软件研发就是撰写文档”的理念,当然,这句话不能按常规思路去理解,这里所指的“文档”,含义更丰富。在该理念下,UML图、UseCase图、软件设计说明书等都是文档,代码也是一种文档,都从不同角度体现目标软件想要展示的功能。
与“软件研发就是撰写文档”相对应的,还有一个概念“软件研发就是编写代码”,在实践中,我们可以把代码中的注释看成一种文档,然后再进一步,把文档中的注释看成一种代码,此时,“文档”与“代码”的概念渐渐统一起来。由此理解开去,研发中的软件工程自始至终具有两方面属性:“文档属性”与“代码属性”,而且在开发过程中,这两个属性是强列交互的,文档与代码要经常对比参考,同步修改,而且要顺应不同的要求,向不同的人展示目标软件的不同侧面。即:按特定视角过滤、整理出特定内容,再按特定格式展现出来,也这就是CSE技术体系所提的“滤镜”与“视图”的概念。
这种经过滤整理展现特定研发内容的过程,对于代码,有直译、转译或编译之分,对于文档,也有直译、转译或编译之分。直译是不作调整直接翻译,CSE计划从V1.6版本开始支持直译,即:将CSE脚本直接翻译成C/C++代码,翻译过程不附加优化措施,从CSE V2开始将支持CSE脚本转译成C/C++,转译中会局部优化生成的C/C++代码以提高运行性能,从CSE V3开始将支持编译操作,CSE代码既支持以脚本方式运行,也支持编译成可执行程序方式来运行。
对于文档而言,直译、转译或编译的概念与代码翻译近似,直译的场合比如开发人员编写代码,代码中特定格式的注释被工具软件解释成文档,直接显示出来(比方以HTML页形式),这样,开发人员一边开发,一边可得到设计文档提示,也可随时同时修改文档,让它的内容与编码维持一致。转译的场合,比如某模块开发人员提交他的开发成果,系统自动对它整理形成多个剖面视图方便不同的人查看,比如,另一模块人员(由于权限受限)只能看到接口函数使用说明,系统工程师能看到大部分信息,而相关管理人员只能查看相关度量数据。文档的编译是指按一定规则重新组装开发内容,比直译、转译更加彻底,常用在阶段交付的场合。
CSE离线映射技术还支持可视化开发过程,对于代码,可视化设计类似于Delphi、VB等语言,以组件或控件可视的方式开展设计,对于文档,可视化的含义是指在线处理XML格式的文档元素,以WEB页或WORD文档方式即时展示。
借助语言映射技术CSE软件最终实现扁平语言开发体系。当前编程语言多种多样,大致可归结为两大类:命令式语言与说明式语言(参见Michaeil.Scott, "Programming language pragmatics"),各种语言,比如汇编语言、过程语言、面向对象语言、脚本语言等,都在某些方面具有优势,都有其生存的理由,揉合几门主要语言的优势是很有价值的事。
所谓扁平语言,是指介乎命令式与说明式之间的编程语言,这类语言兼具命令式与说明式的语言优势,并支持在这两类语言之间灵活转换,此外,扁平语言还须支持可运营的,详情请参阅CSE语言相关说明文档。