


下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第第页开发和测试工程师写代码的高下之分开发和测试工程师写代码的高下之分
发表于:2023-05-12来源::点击数:标签:代码测试工程师开发高下
有来面试的同行问个一个问题:“如果微软的开发和测试工程师都需要写代码,那么两者写出来的代码有高下之分吗?”当时我只能简单的解释一下。现在可以多说一些了。举个例子,单元测试。适合不同语言的工具有一大堆,各个论坛上都能搜到大堆文章。出
有来面试的同行问个一个问题:“如果微软的开发和测试工程师都需要写代码,那么两者写出来的代码有高下之分吗?”
当时我只能简单的解释一下。现在可以多说一些了。
举个例子,单元测试。适合不同语言的工具有一大堆,各个论坛上都能搜到大堆文章。出现频率最高的不外乎CppUnit,NUnit,JUnit三种。比起NUnit和JUnit,CppUnit因为C++语言特性的关系,用起来较不方便。
这里我给大家秀一下,解决这个问题,测试工程师会如何的“不择手段”。
单元测试往往需要解决以下几个问题:
1.用户能在产品代码中指定需要测试的函数
2.用户能在测试代码中指定需要执行的函数
3.用户能指定各种控制执行过程的参数,比如优先级、重复、初始化/清理函数等等
其它就先不说了,待会大家就知道再多的都能做到,现在先做到这三个需求就挺不错了。需求1是可选的。VisualStudio从2023开始有这个功能,但是如果没有,估计大家也不会太在意,对吧?
那么,CppUnit如果要做到NUnit和JUnit的样子会遇到什么困难呢?首先就是C++缺乏反射(Reflection)功能。
你看NUnit和JUnit都是定义了一大堆attribute。用户通过为函数指定恰当的attribute,就能标明这个函数需要作为testcase执行,之前执行初始化函数Setup,之后执行Cleanup,还有重复100次,优先级2什么的,其它的往上堆attribute就行了。
VisualStudio2023之后为实现需求1,通过.NETReflection找出一个类的全部成员函数,然后列个表让你选要测试的函数,最后代码架子都给你搭好。
而CppUnit得用模板,还有另外一个我忘了名字的C++单元测试工具用的是宏。他们费这么些劲是为了什么呢?其实是为了取得这些信息:
具有特定标记的函数的名字或者入口地址/函数指针
附加在该函数上的各种整数,字符串或者函数指针的值
拿到之后呢?CppUnit也好,NUnit或JUnit也好,都是按照取得的信息规划每个函数的执行,保证异常和错误不干扰其它函数的执行,统计整理执行结果和记录日志,没什么区别。
我们来看看,Reflection对于取得那些信息是不是必需的呢?
没错,Reflection是能够在执行时(runtime)取得上述信息,然后在执行时利用它指导testcase的执行。
等等,我鸡蛋里挑个骨头:非要把“取得信息”和“指导testcase执行”放在同一段执行时期里面吗?或者说,先“取得信息”,停一下,再“指导testcase执行”,行不行?
甚至,“取得信息”放在一个程序里先执行,“指导testcase执行”放在另一个程序里后执行,又如何?
更甚之,“取得信息”是让别的程序做的,之后让“指导testcase执行”捡现成的呢?
可见,Reflection提供了比我们所需要的多得多的功能,实际上我们只需要知道“怎样指导testcase执行”就够了。
那可以如何实现呢?
一、编译链接两次
对,你没听错!编译链接之后除了可执行文件还会产生不少有用信息,最有用的当属PDB文件,包含了所有标识符(Symbol)的信息。VisualStudio2023开始就带有一个DIASDK,可以在其安装目录的DIASDK文件夹下面找到头文件、库文件、COM组件DLL和示例程序。用它分析一个DLL或者EXE可执行文件对应的PDB文件,你可以取得每个编译单元(用.c/.cpp编译得到的obj或者lib)里全部函数的情况,包括函数名字、是否成员函数、返回类型、全部参数的名字和类型、全部局部变量的名字和类型,甚至它在哪个文件的哪一行定义。
在这些信息中可以过滤出用户预先指定的信息,用来拼成另一个C/C++源文件,这个源文件叫做执行表,里面包含了所有需要执行函数的名字列表以及各项参数的静态定义。“指导testcase执行”是可以预
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【正版授权】 IEC 63584:2024 EN Open Charge Point Protocol (OCPP)
- 公司装修合同正规
- 浴场承包合同
- 电脑维护保养合同
- 公立医院职工购房借款合同
- 化粪池设备销售合同
- 房地产物业售楼处服务合同
- 场地房屋租赁服务合同
- 担保借款三方合同
- 挡土墙施工承包合同
- 教学课件-《旅行社业务》-(中职)
- 第二章 第一节 CT设备基本运行条件
- 某道路拓宽工程施工组织设计
- 第一章染整工厂设计
- 上虞市化工、印染企业名单-企业负责人信息及联系方式
- DL-T 736-2021 农村电网剩余电流动作保护器安装运行规程
- YS/T 431-2009铝及铝合金彩色涂层板、带材
- SB/T 10439-2007酱腌菜
- 与食品经营相适应的主要设备设施布局和操作流程文件
- 八年级数学下册-全一册-教学课件-(新版)浙教版
- 农产品电子商务培训资料课件
评论
0/150
提交评论