Software-artifact Infrastructure Repository 學習筆記 1 :C Object Directory Specification

有兩種目錄模式,一種是早先的 siemens 程序和 space,有一個單一的基準版本 v0,其他不同的版本都是從 v0 派生出的;另一種的新的組織方式,vK+1是由vK派生出的。

一般的,任一目錄或子目錄如果它的功能不是很顯而易見,或者不合命名約定,會包含一個 CONTENTS 文件來描述。

一個 object 一般會包含如下子目錄:

1. source

空目錄,在實驗過程中,我們把使用的版本放這裏,結束後刪掉。

2. versions.alt

包含不同版本變體的源碼,當我們必須要修改源碼來容納一些工具時,我們就需要變體。

基本的變體在 versions.orig 子目錄下,裏面包含 v0, v1, ... , vK 子目錄。v0 是最早的版本,其他 vJ 包含按順序排列的下個版本。

每個 vK 包含 .c 文件和頭文件,附加的 Makefile,還有一些非系統庫的子目錄。(歷史上非庫代碼都會被合併到一個 .c 文件中,用於促進特殊的程序分析工具集,但是這在將來的 object 可能不會再出現了)

Makefile包含3個目標:

build:生成 <program>.exe 可執行文件

build-st:生成 <program>.st.int.exe 是一個 statement 插樁的可執行文件

build-bt:生成 <program>.bt.int.exe 是一個 branch 插樁的可執行文件

並且,編譯一個文件的命令必須包含 $(COMPILE_PARAMETERS) flag, 例如: gcc -c $(COMPILE_PARAMETERS) grep.c 或 gcc -o grep.exe $(COMPILE_PARAMETERS) grep.c 

這可能會被環境腳本使用來製作這次編譯。例如,它被一些腳本使用來實例程序錯誤版本(參見 C object handbook 的 Section 8)可能存在的第二個子目錄是 versions.seeded ,它包含 v1, ..., vK, 可能存在 v0。versions.seeded 目錄除了源碼和頭文件,也會有一些其他用於植入錯誤的文件。

如果我們把所有的錯誤關掉,.orgi 和 .seeded 效果應該是一樣的。

3. versions

空目錄,在實驗中用到,可能會保持一個或多個版本。

4. testplans.alt

Object 的測試信息。

它也包含子目錄 v0, ... , vK, 包含對應版本的測試信息。testplans.alt 可能包含一個 testscript 子目錄。

爲了避免對同一個文件的多份拷貝,我們把子目錄 vJ 組織成兩種類型的文件:

General Files:.tsl, .frame 和 .universe 文件

Link Files: 這是一些 link 到之前版本的 general file 的文件。這些允許從前一版本繼承相似的測試數據,從而避免多次拷貝。

5. testplans

空目錄,實驗中保存測試集

6. traces

空目錄,實驗中保存test trace

7. traces.alt

子目錄 v0,...,vK,保存各版本的 test trace 信息。

8. inputs

測試中使用的輸入文件或者子目錄

9. outputs

空目錄,實驗中保存測試輸出

10. outputs.alt

永久的存放測試輸出。在迴歸測試中能用來與之前的測試結果對比。

11. docs

object 的文檔。

12. originals

13. scripts

14. info

程序的其他信息,特別是分析工具收集的信息以及實驗需要保存的信息。

在版本區分出的目錄中,最重要的信息是 fault matrix 數據。






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章