Software-artifact Infrastructure Repository 学习笔记 2:C Object Handbooky
2015-06-02 20:08
639 查看
1. Overview
本文探讨较新的C object 的组织方式,('siemens' 程序以及 space 参见附录)。一种使用 SIR 引导实验的方法是:
1. 下载或拷贝一份新的 object
2. 设置系统环境变量 "
experiment_root" 为 object 的绝对路径。
3. 确定你要使用的 artifact, 例如 specifications,versions, seeded faults, and inputs.
4. 创建脚本可以利用object 的公共组织架构。
5. 最终创建一个顶层的脚本,能够对 object 的所有版本都执行实验。
其中第2条是一定要做的。
2. Object Selection
3. Object Organization
4. General Object Setup
每个程序都已经集成到一个源码文件里了,这是为了适应我们用来收集 coverage 信息和 trace 文件的一个特殊工具集。当然也可能支持多文件,不过就要提供合适的Makefile, 只需要每个 Makefile 执行单次的运行。单个 .c 文件是用 cat 命令组合起来的,但是头文件保持分离。所以 version K 的 vK 目录下包含0个或多个头文件还有一个 .c 文件。每个版本的 makefile 至少有3个目标,默认的是正常 build,不做任何修改,‘build-st’ 对程序插桩用于收集 statement trace, "built-bt" 用于插桩收集 branch trace。
请注意对于一些 object,某些库是不会被合并进来的,因为库代码一般不会被测试。另外不支持配置。
一些 object 为了保证输出的确定性而被修改了,并且输出全部是 stdout。
4.1 Generalized Object Test Execution
为了复现 SIR 的测试结果,你的脚本必须要执行如下的一连串任务。1. 复制最初版本的 object 到 source 目录。最初版本的 object 在可能在不同的目录下,有些在versions.alt/versions.orig或 versions.alt/orig,其他的 siemens (tcas, printokens 等)在 source.alt/source.orig目录下
2. 使用合适的编译工具链编译最初版本。
3. 执行该 object 的测试集。 基本 object 都会提供一个基本的测试集脚本执行所有的测试。 提供多种测试集组合的object通常在 testplans.alt目录下提供对应为 tsl.universe的测试脚本。
4. 保存最初版本的测试输出到指定的目录,例如 outputs.alt,用于与之后的测试比较。
5. 把一个植入错误的 artifact 拷贝进 source 目录。artifact 在 versions.alt 目录下,simems 的目录不同,它在 source.alt 下也有最初版本,而植入错误的在 versions.alt,所以要注意到底把什么拷贝进 source。
6. 如果植入错误的 artifact 使用了 FaultSeeds.h 用来插入错误, 你需要去掉想要的错误的注释,例如:把
/* #define FAULT_AK_1 */
改为
#define FAULT_AK_1
这会告诉预处理程序这个错代码需要被编译进来。 C 的 object 使用这个方法来启用错误。
7. 应用错误之后,编译 object
8. 对错误程序执行测试
9. 与最初程序对比输出
10. 对每个合适的错误重复最后4步。
11. 最终对object 提供的每个版本重复上述所有步骤,并且列表这些结果对分析测试有所帮助。
5. Test Creation
C程序的测试是在两种构造方法中二选一。相关文章推荐
- QMetaObject分析
- ELF relocatable object file && ELF Executable object file && Run-time Memory Image 的结构
- Objective-C编码规范:26个方面解决iOS开发问题
- XPCOM (Cross Platform Component Object Model)
- Objective-C编码规范
- birt报表报错, There is no report design object available.org.eclipse.birt.report.exception.ViewerExcepti
- [iOS] performSelector:withObject:afterDelay:调用没有作用的问题及解决方法
- Objective-C 编码规范
- @synchronized (object)使用详解
- 为GCD队列绑定NSObject类型上下文数据-利用__bridge_retained(transfer)转移内存管理权
- Objective-c 字面量
- android 详细解答json解析与生成 JSONObject JSONArray
- swfobject.embedSWF与div的z-index问题
- SWFObject: 基于Javascript的Flash媒体版本检测与嵌入模块
- objective-C 的内存管理之-自动释放池(autorelease pool)
- ObjectInputStream\ObjectOutputStream用字节流将一个Object对象持久化和读取
- 黑马程序员_ Objective C 封装,继承,多态总结
- Objective-C的内存管理机制(非ARC)
- iOS(Objective-C语法)面试、笔试题目
- 线程函数的设计以及MsgWaitForMultipleObjects函数的使用要点