基于c代碼模型的構件接口單元測試方法
【技術領域】
[0001]本發明涉及計算機軟件技術領域,具體涉及一種測試工具軟件,尤其涉及一種基于C代碼模型的構件接口單元測試方法。
【背景技術】
[0002]隨著計算機技術的迅速發展和越來越廣泛深入的應用于國民經濟和社會生活的各個方面,隨著軟件系統的規模和負責性與日倶增,軟件的生產成本和軟件中存在的缺陷和故障造成的各類損失也大大增加,甚至會帶來災難后果。軟件質量問題已成為所有使用軟件和開發軟件的人關注的焦點。由于軟件是人腦的高度智力化的體現和產品這一特殊性,不同于其他科技和生產領域,因此軟件與生倶來就有可能存在著缺陷。防止和減少這些可能存在的問題就是進行軟件測試。測試是最有效的排除和防止軟件缺陷與故障的手段,并由此促進了軟件測試理論與技術實踐的快速發展。新的測試理論,測試方法,測試技術手段在不斷涌出,軟件測試機構和組織也在迅速產生和發展。
[0003]軟件測試方法按是否查看程序內部結構分為黑盒測試和白盒測試,白盒測試是把測試對象看作一個打開的盒子。按階段劃分可分為單元測試,集成測試,系統測試,驗收測試。
[0004]由于大部分測試研究集中在應用軟件方面,對系統軟件的測試研究又多偏于編譯程序的測試,致使不可靠的系統軟件給用戶帶來許多麻煩。很多測試工具要求用戶提供大量輔助信息,甚至嚴格要求測試者控制測試進程,這增加了測試者的工作量,測試工具常常輸出很多信息,而其中一部分又無關緊要,這也增加了用戶的負擔。
【發明內容】
[0005]本發明的目的在于克服現有技術存在的以上問題,提供一種基于C代碼模型的構件接口單元測試方法。
[0006]為實現上述技術目的,達到上述技術效果,本發明通過以下技術方案實現:
一種基于C代碼模型的構件接口單元測試方法,包括以下步驟:
步驟一,源代碼掃描,掃描所測函數的源代碼,判斷此函數是否出現調用外部函數,若出現調用函數,則將代碼中所調用的外部函數全部做上標記;
步驟二,配置測例,為此測例編寫輸入,預期輸出,粧函數實現代碼,使測例運行函數的某一個分支;
步驟三,生成測試工程,根據上一步驟的測例配置生成測例工程,其中包含可編譯運行的測試代碼,代碼中被標記的外部調用函數若被確定為粧函數,則其代碼用粧函數代碼替換,若函數不被打粧,則其代碼還是使用其原函數代碼;
步驟四,代碼編譯,調用visual std1進行代碼的編譯;
步驟五,代碼運行,運行編譯后的程序,得到運行輸出結果;
步驟六,結果檢查,檢查預期輸出和實際輸出是否相等,若兩者相等,則此測例通過,若不相等,則此測例測試失敗。
[0007]進一步的,所述步驟二的配置測例包括以下步驟:
1)指定輸入值,為此測例編寫輸入參數的初始化值,對于每個測例,函數的輸入值都會不同,不同的輸入值導致函數運行不同的分支,產生不同的輸出;
2)函數調用,指出此測例所測試的函數;
3)確定粧函數,若函數中出現外部調用函數,則確定此測例中所需要的粧函數,并編寫粧函數代碼;
4)判斷輸出,指出此測例在指定輸入值下預期得到的輸出。
[0008]本發明的有益效果是:
本發明所述的基于C代碼模型的構件接口單元測試方法,通過識別構件代碼中的需要打粧的接口,在生成測試代碼時自動替換粧函數,從而在不改變被測代碼的情況下實現測試用例代碼的自動生成,便于進行手工調試,并提供測例配置界面和準確的測試輸出信息,從而降低測試工作的復雜度,減輕測試的工作量,提高效率。
[0009]上述說明僅是本發明技術方案的概述,為了能夠更清楚了解本發明的技術手段,并可依照說明書的內容予以實施,以下以本發明的較佳實施例并配合附圖詳細說明如后。本發明的【具體實施方式】由以下實施例及其附圖詳細給出。
【附圖說明】
[0010]此處所說明的附圖用來提供對本發明的進一步理解,構成本申請的一部分,本發明的示意性實施例及其說明用于解釋本發明,并不構成對本發明的不當限定。在附圖中:
圖1為基于C代碼模型的構件接口單元測試方法流程示意圖。
【具體實施方式】
[0011 ]下面將參考附圖并結合實施例,來詳細說明本發明。
[0012]參照圖1所示,一種基于C代碼模型的構件接口單元測試方法,包括以下步驟:
步驟一,源代碼掃描,掃描所測函數的源代碼,判斷此函數是否出現調用外部函數,若出現調用函數,則將代碼中所調用的外部函數全部做上標記;
步驟二,配置測例,包括以下步驟:
1)指定輸入值,為此測例編寫輸入參數的初始化值,對于每個測例,函數的輸入值都會不同,不同的輸入值導致函數運行不同的分支,產生不同的輸出;
2)函數調用,指出此測例所測試的函數;
3)確定粧函數,若函數中出現外部調用函數,則確定此測例中所需要的粧函數,并編寫粧函數代碼;
4)判斷輸出,指出此測例在指定輸入值下預期得到的輸出;
步驟三,生成測試工程,根據上一步驟的測例配置生成測例工程,其中包含可編譯運行的測試代碼,其中被標記的外部調用函數若被確定為粧函數,則其代碼用粧函數代碼替換,若函數不被打粧,則其代碼還是使用其原函數代碼;
步驟四,代碼編譯,調用visual std1進行代碼的編譯;
步驟五,代碼運行,調用visual std1進行代碼的運行,得到運行輸出結果; 步驟六,結果檢查,檢查預期輸出和實際輸出是否相等,若兩者相等,則此測例通過,若不相等,則此測例測試失敗。
[0013]假設要測試的構件代碼如下所示: struct Node;
typedef struct Node *PtrToNodetypedef PtrToNode Posit1n;typedef PtrToNode List;int Insert(int X, List L)struct Node{
int Element;
Posit1n Next;
}
int Delete(int X, List L)
{
Posit1n P, TmpCell;
P = L;
//查找前一個節點 while(P_>Next ! = NULL && P->Next_>Element != X)
P = P->Next;
if(! IsLast(P, L)) //判斷是否是最后一個 {
TmpCell = P->Next;
P->Next = TmpCell->Next;free(TmpCell); //釋放空間return 1;
}
else
return 0;
}
當要測試Delete函數時,則首先掃描Delete函數的代碼,查找其中是否出現外部函數,此代碼中出現了 IsLast和free函數,對其做出標記。
[0014]此函數的輸入參數為X,L兩個參數,其功能是在鏈表L中找到值為X的節點,并刪除.此時要測試節點不是鏈表最后一個節點的分支,即進入if分支內運行,因此會運行IsLast和free函數,由于free函數是系統函數,能夠保證其正確性,故不用打粧,而IsLast函數是用戶自定義函數,因此IsLast函數需要被打粧,粧函數代碼為:int IsLast(Posit1n P, List L)
{return P->next == NULL;
}
完整的測試代碼為:
/*初始化*/ int result = 0; int X = 1;
L = (Node *)malloc(sizeof (Node)*2); //申請結點空間 if (L == NULL) //判斷是否有足夠的內存空間printf(〃申請內存空間失敗\n〃); L->next =
NULL;
//調用插入節點函數,插入兩個節點 Insert(l,L);
Insert(2, L);
/*函數調用*/ result = Delete(X, L);
/*輸出*/
ASSERT_UINT8_EQUAL(result,1); //判斷result的值是否為 1在函數運行時,不會調用的原IsLast函數,而是調用粧函數IsLast,以保證函數正確運行。
[0015]代碼編譯運行后會得到一個運行結果result,若result的值為1,則此測例運行通過,若result的值不為1,則此測例運行失敗。
[0016]以上所述僅為本發明的優選實施例而已,并不用于限制本發明,對于本領域的技術人員來說,本發明可以有各種更改和變化。凡在本發明的精神和原則之內,所作的任何修改、等同替換、改進等,均應包含在本發明的保護范圍之內。
【主權項】
1.一種基于C代碼模型的構件接口單元測試方法,其特征在于,包括以下步驟: 步驟一,源代碼掃描,掃描所測函數的源代碼,判斷此函數是否出現調用外部函數,若出現調用函數,則將代碼中所調用的外部函數全部做上標記; 步驟二,配置測例,為此測例編寫輸入,預期輸出,粧函數實現代碼,使測例運行函數的某一個分支; 步驟三,生成測試工程,在掃描到的源代碼以及輸入的配置參數間自動插入連接代碼,從而自動生成可編譯的測例工程,其中包含可編譯運行的測試代碼,代碼中被標記的外部調用函數若被確定為粧函數,則其代碼用粧函數代碼替換,若函數不被打粧,則其代碼還是使用其原函數代碼; 步驟四,代碼編譯,調用Visual std1進行代碼的編譯; 步驟五,代碼運行,運行編譯后的程序,得到運行輸出結果; 步驟六,結果檢查,檢查預期輸出和實際輸出是否相等,若兩者相等,則此測例通過,若不相等,則此測例測試失敗。2.根據權利要求1所述的構件接口單元測試方法,其特征在于:所述步驟二的配置測例包括以下步驟: 1)指定輸入值,為此測例編寫輸入參數的初始化值,對于每個測例,函數的輸入值都會不同,不同的輸入值導致函數運行不同的分支,產生不同的輸出; 2)函數調用,指出此測例所測試的函數; 3)確定粧函數,若函數中出現外部調用函數,貝_定此測例中所需要的粧函數,并編寫粧函數代碼; 4)判斷輸出,指出此測例在指定輸入值下預期得到的輸出。
【專利摘要】本發明公開了一種基于C代碼模型的構件接口單元測試方法,包括以下步驟:源代碼掃描;配置測例;生成測試工程,其中被標記的外部調用函數若被確定為樁函數,則其代碼用樁函數代碼替換,若函數不被打樁,則其代碼還是使用其原函數代碼;代碼編譯;代碼運行,得到運行輸出結果;結果檢查。本發明所述的基于C代碼模型的構件接口單元測試方法,通過識別構件代碼中的需要打樁的接口,在生成測試代碼時自動替換樁函數,從而在不改變被測代碼的情況下實現測試用例代碼的自動生成,便于進行手工調試,并提供測例配置界面和準確的測試輸出信息,從而降低測試工作的復雜度,減輕測試的工作量,提高效率。
【IPC分類】G06F11/36
【公開號】CN105468525
【申請號】CN201510843755
【發明人】蔣潔, 張和華, 潘加俊, 趙祖乾, 南野野, 董薔薇
【申請人】蘇州同元軟控信息技術有限公司
【公開日】2016年4月6日
【申請日】2015年11月27日