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

                              單元測試的測試用例編寫方法
        我在這裏用最 經常使用的方法:基本路徑測試法來進行單元測試,由於我要用一個實際的例子來進行說明,因此就編寫了下面一個程序模塊,就暫且命名爲「詳細查詢模塊」吧。
     我先寫一下基本過程:
    1  分析模塊函數;
    2  在模塊中找到相應的關鍵點(函數);
    3  根據第二點,畫出模塊程序流程圖;
    4  計算圈複雜度;
    5  根據圈複雜度算出測試用例的最優個數;
    6  根據路徑測試法和圈複雜度寫出具體測試用例;
    7  進行測試。   
 
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
下面咱們開始寫測試用例。
     「詳細查詢測試」作完了嗎?沒有,由於對於上表的每個路徑,若是結果有不一樣的,即:結果有對的,也有不對的。那麼,咱們就還須要進行進一步的測試,下面的工做我就不作了,照搬就是。
相關文章
相關標籤/搜索