單元測試的測試用例編寫方法

發表于:2010-05-05來源:作者:點擊數: 標簽:單元編寫
我在這里用最 常用的方法:基本路徑測試法來進行 單元測試 ,因為我要用一個實際的例子來進行說明,所以就編寫了下面一個程序模塊,就暫且命名為“詳細查詢模塊”吧。 我先寫一下基本過程: 1 分析模塊函數; 2 在模塊中找到相應的關鍵點(函數); 3 根據第
 我在這里用最常用的方法:基本路徑測試法來進行單元測試,因為我要用一個實際的例子來進行說明,所以就編寫了下面一個程序模塊,就暫且命名為“詳細查詢模塊”吧。
     我先寫一下基本過程:
    1  分析模塊函數;
    2  在模塊中找到相應的關鍵點(函數);
    3  根據第二點,畫出模塊程序流程圖;
    4  計算圈復雜度;
    5  根據圈復雜度算出測試用例的最優個數;
    6  根據路徑測試法和圈復雜度寫出具體測試用例;
    7  進行測試。   
 
ant; ">void CXIANGXIDLG::OnOK() 

CoInitialize(NULL);//初始化COM環境 
_ConnectionPtr m_pConnection;//連接對象 
  HRESULT hr;    
 
  try 
  { 
hr = m_pConnection.CreateInstance("ADODB.Connection");//創建Connection對象    
if(SUCCEEDED(hr))    
    { 
hr=m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;DataSource=shouji.mdb","","",adModeUnknown);//連庫 
    } 
  } 
  catch(_com_error e) 
  { 
AfxMessageBox("數據庫連接失敗,確認數據庫連接字符串是否正確"); 
  } 
  //操縱表 
_RecordsetPtr m_pRecordset; //記錄集對象 
  UpdateData(TRUE); 
  CString strSQL
if (m_name=="")                         //路徑1 
  { 
MessageBox("用戶名不能為空!"); //函數A 
  } 
  else                                                                                                                                                         {UpdateData(TRUE);        //函數B 
  int lenth=0; 
  lenth=m_name.GetLength(); 
if (lenth>12 || length<2)        //路徑2 
  {MessageBox("輸入的用戶名不正確或沒有該用戶!請重新輸入!");                 //函數C 
  } 
  Else                                                                                                                                                                                 
  { 
if(m_pipei)                        //路徑3 
  { 
strSQL="SELECT * FROM sj_T_ShouJiKa where 用戶姓名 = '"+m_name+"'"//函數D 
  } 
  Else    
  { 
strSQL="SELECT * FROM sj_T_ShouJiKa where 用戶姓名 like '%"+m_name+"%'";//函數E 
  } 
 
  try 
  { 
    hr=m_pRecordset.CreateInstance("ADODB.Recordset"); 
    if(SUCCEEDED(hr))    
    { //從數據庫中打開表 
m_pRecordset->Open(_bstr_t(strSQL),m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText); 
    } 
    else 
    { 
  AfxMessageBox("查詢不成功!"); 
    } 
  } 
  catch (_com_error e) 
  { 
    CString strError; 
strError.Format("警告:打開數據表時發生異常。 錯誤信息: %s",e.ErrorMessage()); 
  AfxMessageBox(strError); 
  return
  } 
while(!m_pRecordset->adoEOF)     //路徑4 
  {                                                                                 //函數F 
    _bstr_t name=""; 
    _bstr_t shoujikahao=""; 
    _bstr_t tongxinzhishi=""; 
    _bstr_t fuwushang=""; 
 
    int i=0; 
    m_list5.DeleteAllItems(); 
 
    while(!m_pRecordset->adoEOF) 
    { 
name=(_bstr_t)m_pRecordset->GetCollect("用戶姓名"); 
shoujikahao=(_bstr_t)m_pRecordset->GetCollect("手機卡號"); 
tongxinzhishi=(_bstr_t)m_pRecordset->GetCollect("通信制式"); 
fuwushang=(_bstr_t)m_pRecordset->GetCollect("服務商"); 
  m_list5.InsertItem(i,name);    
m_list5.SetItemText(i,1,shoujikahao);//設置該行的不同列的顯示字符 
m_list5.SetItemText(i,2,tongxinzhishi); 
m_list5.SetItemText(i,3,fuwushang); 
m_pRecordset->MoveNext(); 
i=i+1;     
    }    
  }    
  //關閉連接、釋放com資源m_pRecordset->Close();     //路徑5 
  m_pRecordset.Release(); 
  m_pConnection->Close(); 
                 m_pConnection.Release(); 
  CoUninitialize(); 
  } 
  } 

 
     我們根據這個程序來畫出它的程序流程圖,如下,是我畫好的:
        有了圖以后我們就要知道到底我們要寫多少個測試用例,才能滿足基本路徑測試。
  這里有有了一個新概念——圈復雜度。
  圈復雜度是一種為程序邏輯復雜性提供定量測試的軟件度量。將該度量用于計算程序的基本獨立路徑數目。為確保所有語句至少執行一次的測試數量的下界。
  公式圈復雜度    V(G)=E-N+2,E是流圖中邊的數量,N是流圖中結點的數量。
  從圖中我們可以看到,
V(G)=8條邊-6結點+2=4
  上圖的圈復雜圖是4。這個結果對我們來說有什么意義呢?它表示我們只要最多4個測試用例就可以達到基本路徑覆蓋。
下一步我們就要導出程序基本路徑。
程序基本路徑:基本獨立路徑就是從程序的開始結點到結束可以選擇任何的路徑遍歷,但是每條路徑至少應該包含一條已定義路徑不曾用到的邊。
我們可以得到基本路徑是:
1:  A
2:  B->C
3:  B->D->F
4:  B->E->F
下面我們開始寫測試用例。
     “詳細查詢測試”做完了嗎?沒有,因為對于上表的每一個路徑,如果結果有不同的,即:結果有對的,也有不對的。那么,我們就還需要進行進一步的測試,下面的工作我就不做了,照搬就是。

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97