白盒測試指南

 
1目的
本方案主要實施NC產品程序代碼的白盒測試。使界面符合設計規範,適用於用戶;保證程序創建的類與接口的完整與正確,以及程序模塊單獨正常運行。保證局部模塊功能完備性,運行正確性與穩定性。
2測試項
所要測試的類。如:
nc.ui.bd.*
nc.bs.bd.*
nc.vo.bd.*
3測試依據
1.       NC產品需求報告;
需求規格說明書、用例描述清單
2.       設計文檔;(OOA、OOD、CRC卡)
如:AOM(Analysis Object Model)表示類間的靜態關係,是多個相關的用例共用的。
ASD(Analysis Sequence Diagram)是按業務工作的順序表示每一工作步驟執行時類間的動態關係。一個用例對應一個ASD
CRC (Collaborators & Responsibilities Card)卡是一個類的完整表述
3.       界面規範
4.       編碼規範
5.       開發命名標準
4通過的準則
1.界面測試通過的標準:界面的樣式、大小、顏色、整體佈局的設置;各種標籤控件的使用及主題描述以及事件源控件的使用、快捷鍵使用都應符合《NC系統應用框架需求報告》和《設計文檔的相關規範》。
2.程序代碼通過的標準:創建的類、接口、方法、屬性應與《設計文檔》保持一致;程序的各種命名、註釋、代碼行的格式等應符合《程序開發命名標準》和《編碼規範》;程序模塊能獨立穩定運行。
5測試環境配置
1         測試工具:
2         軟件環境:
Client端:
                     操作系統:中文WINNT/2000
開發環境:VA3.5 專業版
待測試的源碼包
Server端:
                     操作系統:WIN NT4.0
                     開發環境:VA3.5 專業版
                     通訊環境:   Servlet      
3         DB Server端:DBMSSQL SERVER
4         資源文件
6白盒測試總流程
 
測試流程依據,請參見《代碼層次結構規範》。
NC系統中的對象主要分爲如下幾種:
·           界面對象(UIObject)
·           數值對象VO(ValueObject)
·           業務對象BO(BusinessObject)
·          數據管理對象DMO(DataManageObject)
 
測試流程可按二種方式,其優缺點對照:
 
BO
DB
DMO
UI
                            VO                                      VO
                                         
 
 
DB
UI
BO
DMO
 
 
 
 
 
 
前者:優點是便於測試者從界面層直觀地錄入數據,缺點是做迴歸測試時,錄入數據需重複
 
後者:
原則是從底層測試,底層測試通過了,再依次往上一層測試;否則不需往上層測試
缺點:需給中間層做一測試小程序:根據程序中類的對象構造輸入數據及將結果輸出到控制檯上,(可通過自行設計測試工具來改善,測試工具需求另附)
優點:做迴歸測試時,不用再構造輸入數據,只要再執行一遍小測試程序
 
7測試步驟:
需要列出所測試類的調用關係和關鍵方法的調用關係(依據爲數據流)。
1) 類關係圖。
 
(2) 方法的功能調用關係圖:只需要列出一些調用關係較複雜的方法。
 
1.         配置好測試環境;
 
2.         編寫測試用例;
另附
3.         靜態測試,走查代碼;
代碼走查使用測試用例啓發檢測錯誤,沿程序邏輯走一遍,檢測程序結構和實現上是否有問題
4.         動態測試
·           界面初始化狀態測試;
·           界面控件功能測試;(正反用例);
·           業務功能測試(正反用例);
·           數據流關聯測試(涉及多表的增、刪、改),並結合數據庫表的字段、外鍵、字段類型、精度、小數位數、非空、默認值、備註、數據對象等。
·           數據傳遞和接收一致,數據計算或處理後狀態正確;
·           組合模塊整體運行穩定,不出現死機;
 
1.          確定問題屬性:
分爲四類:錯誤、缺陷、失效、故障
錯誤是指計算值、觀測值、測量值之間,或條件與真值之間,不符合規定的或理論上的正確值或條件
缺陷是指與期望值或特徵值的偏差
故障是指功能部件不能執行所要求的功能。故障可能由錯誤、缺陷或失效引起。
失效是指功能部件執行其功能的能力喪失,系統或系統部件喪失了在規定限度內執行所要求功能的能力
 
2.          確定問題類別:
 
問題類別分爲以下幾大類:
1.各層公用問題
2.JAVA語言規範
3.數據類型
4.SQL語句規範
5 界面UI
6.VO數值對象
7.BO業務對象
8.DMO數據管理對象
9.業務邏輯重點
10.事務處理與隔離級別測試(詳見總體技術部相關文檔
11.效率測試(詳見總體技術部相關文檔
 
1.         填寫測試報告
測試記錄需詳細填寫具體實施方法中的相關列表;
上交的測試報告只需填寫未通過的項。(詳見第10)
8具體實施方法:
8.1).   各層公用問題:
序號
測試項
測試內容
質量保證標準
問題屬性
出錯頻率
T1
代碼與設計對照
按需求、UI,CRC設計文檔與編碼對照,看是否完全地實現了所有的UI設計文檔和CRC卡中規定的內容?
完備性
錯誤
 
T2
代碼與設計對照
按需求、UI,CRC設計文檔與編碼對照,看是否創建了所需的數據庫或其他初始化數據文件?
完備性
錯誤
 
T3
參數
返回值
方法中被傳遞參數的類型、個數、順序及返回值是否正確?以符合UI設計文檔和CRC卡爲準。
正確性
錯誤
 
T5
參數的傳遞
當方法需要調用其它方法時,調用的參數是否正確?(UI設計文檔和CRC卡中有調用說明)
正確性
錯誤
 
T6
命名
是否按《命名規範》進行了類、方法、變量、屬性的命名?
正確性
錯誤
 
T7
公式
代碼中的公式是否使用了設計文檔中的相應數學公式。
正確性
錯誤
 
T8
註釋
註釋是否使用簡潔明瞭的語言對每一個方法都進行了充分必要的描述?是否對複雜的代碼進行了註釋?當程序的運行是受某些特殊因素限制時,是否做了限制註釋?是否列出限制模塊運行特性的全部特殊因素?
易理解性
缺陷
 
T9
冗餘語句和變量
是否存在永遠執行不到的語句和變量,而降低了程序的可理解性?
易理解性
缺陷
 
T10
程序是否冗餘
對於程序中的大量重複內容,是否使用了專門的類來實現?
可驗證性
缺陷
 
T11
代碼整體規範
是否自始至終使用了《程序員開發手冊》和《編碼規範》中要求的格式、調用約定、結構等?
一致性
缺陷
 
T12
代碼與書寫註釋
在一個函數內代碼的長度不允許超過100行。建議如果一個函數的代碼長度超過一個屏幕,那麼或許這個函數太長了。
使用統一的格式化代碼。將{放在所有者的後面,並且在下一行代碼前加入TAB鍵縮進;(TAB鍵比用若干個空格更容易控制使用統一的縮進距離)
類的註釋;
接口的註釋;
函數的註釋;
類屬性的註釋;
局部變量的註釋;
請詳見:《代碼與註釋書寫風格規範》
易理解性
缺陷
 
TT13
命名是否符合程序包命名規範
 
 
 
TT14
 
1.創建的屬性(字段)是否完整,類型與命名是否規範,註釋是否清楚合理。
2.創建的方法是否完整;命名是否規範;修辭是否正確;參數,參數類型,返回類型是否正確。
3.調用的方法和傳遞的參數是否正確。
1.      參數傳遞、返回值是否正確
2.      特殊校驗、處理是否有註釋
 
 
 
TT15
類命名
第一個字母大寫的英文正常語序
每個功能點的主程序(通常繼承系統管理框架)統一採用ClientUI類名稱。
業務邏輯代碼類以BO結尾,如:GeneralLedgerBO
數值對象類以VO結尾,如:EmployeeVO
數據管理對象類以DMO結尾,如:EmployeeDMO
查詢對象類以QO結尾,如:EmployeeQO
非參照對話框類以Dlg結尾,如:EditEmployeeDlg
參照對話框類以Ref結尾,如:WorkCenterRef
面板類以Panel結尾,如:GeneralLedgerPanel
 
 
 
TT16
接口
接口名的開頭加上字母I前綴
從第二個字母起,用首字母大寫的英文單詞描述
 
 
 
TT17
方法
1.是否正確定義了此方法(包括修辭詞、返回類型、參數、參數類型)
2.註釋是否清楚
3.命名是否正確:
·            方法函數名的第一個單詞小寫,後面的單詞第一個字母大寫;
·            第一個單詞必須是動詞,使函數的意義清晰明瞭;
·            存取對象的屬性使用setXXX()getXXX()函數形式
·            訪問布爾類型的屬性可以使用isXXX()函數
 
 
 
TT18
類屬性
·            所有類屬性全部以m_開頭,同其它變量區分開。
·            集合類型的域,如數組、向量,必須使用複數形式來指出它們多值特性。
·            所有的域都是私有的,用並且僅用getXXXsetXXX等的存取函數去訪問域,
·            存取函數的可見性儘量爲protected屬性的,getter函數可以是public屬性的
·            存取函數的命名規則是:
getter函數 = get + 域名(非布爾類型域)
                             is + 域名(布爾類型域)
setter函數 = set + 域名
 
 
 
TT19
常量
常量的命名全部使用大寫。用下劃線來分隔單詞。
MAX_VALUE
START_DATE
MINIMUM_BALANCE
 
 
 
TT20
類所實現的功能
是否實現了要求的所有功能
 
 
 
TT21
類中的校驗方法
1         界面級的校驗是否齊全
2         業務級的校驗是否齊全
完備性
錯誤
 
TT22
繼承性
封裝性
多態性
面向對象程序是否體現繼承、封裝和多態的特性?
 
 
 
TT23
面向對象特性
面向對象程序中,編寫類的方法時,是否同時考慮基類方法(Base::Function())的行爲和繼承類方法(Derived::Function())的行爲
 
 
 
TT24
數據封裝性
數據成員是否滿足數據封裝的要求。
有時強制的類型轉換會破壞數據的封裝特性。例如:
  class Hiden
  {private:
  int a=1;
  char *p= "hiden";}
  class Visible
  {public:
  int b=2;
  char *s= "visible";}
  …..
  …..
  Hiden pp;
  Visible *qq=(Visible *)&pp;
  在上面的程序段中,pp的數據成員可以通過qq被隨意訪問
 
 
 
TT25
類中成員方法
OOD爲依據,類中成員方法是否實現了設計中所要求的功能;如通過OOD仍不清楚,則還應依據OOA、及需求報告說明書
 
 
 
 
 
 
 
 
 
 
 
8.2).   JAVA語言規範走查內容
序號
測試項
測試內容
質量保證標準
問題屬性
出錯頻率
J1
下標
是否有下標變量越界錯誤?
健壯性
錯誤
 
J2
除數
是否包含有除零錯誤的可能?
健壯性
錯誤
 
J4
Get方法
當對一個不知是否爲空的對象取其屬性值會引起空指針異常。如果空指針異常沒有被接收程序將終止。例如:BusinessData1.getBusinessDate2.getOid()BusinessData1.getBusinessDate2null時,
BusinessData1.getBusinessDate2.getOid()將發生異常
健壯性
錯誤
 
J5
字符串
在字符串比較和將字符串寫入數據表前應Trim()掉它的前後空格。
健壯性
錯誤
 
J6
字符串連結符"+"
將字符串連結操作中的+操作符同加法運算中的+操作混淆將導致奇怪的結果。例如:yint類型,y的值爲5g.drawString("y+2="+y+2,30,30);將顯示y+2=52
正確性
錯誤
 
J7
Float
double
不要用等於或不等於來比較浮點值,而應該判斷其差別是否小於某一指定小的值。例如:89.6 實際可能爲89.59999232458
正確性
錯誤
 
J8
Float
double
不要對浮點值用做計數循環,應用整型值。
正確性
錯誤
 
J9
Float
double
不要使用類型float或者double的變量執行精確的金融計算。浮點數的不精確會導致引起不正確金融計算的錯誤。可定義若干類來完成不同的金融計算。
正確性
錯誤
 
J10
switch
switch語句的末尾如果沒有defaul語句將會不利於處理異常。
健壯性
缺陷
 
J11
switch
是否在switch結構中的每一個case語句體結束時都有break語句?
正確性
錯誤
 
J12
if語句
if語句體右括號後緊跟一個分號常常是一個錯誤,會使if語句成爲順序語句。
正確性
錯誤
 
J13
循環語句
通過循環語句對一Vector型變量賦值時,Vector變量的實例化語句是否被錯誤地包含在循環體內?
正確性
錯誤
 
J14
循環語句
注意循環的條件中是否有差1的現象?
正確性
錯誤
 
J15
循環語句
代碼是否有無窮循環的可能?(循環條件永遠爲真)
可預測性
錯誤
 
J16
數值範圍
是否存在溢出錯誤
 
 
 
J17
This
Super
ThisSuper的用法是否正確
 
 
 
J18
構造子
是否缺少構造子方法
 
 
 
J19
方法聲明、參數、
返回值
方法聲明錯誤
參數錯誤
返回值錯誤
 
 
 
J20
計算
計算錯誤
 
 
 
J21
比較
比較錯誤
 
 
 
J22
控制流
控制流錯誤
 
 
 
J23
類的修飾符
修飾符是否符合以下原則:
Public用於對所有的類可見,
Private用於對本類可見
Protected不僅用於對子類可見,也用於對同一個包的其它所有類可見
 
 
 
 
 
 
 
 
 
 
8.3).   數據類型:
 
序號
測試項
測試內容
質量保證標準
問題屬性
出錯頻率
D1
Null轉化
在設置值對象VO時,在VO內部是否將空串""將轉化null,數值型數據(整數、浮點數)null轉爲0*
 
 
 
D2
Null轉化
在取得VO元素放到界面時(如放到UITextField)是否根據需要將null轉化爲"""0"0.0”
 
 
 
D4
控件數據類型的轉換
編輯控件數據類型是否與表中對應字段數據類型一致
1UITextField文本域數據類型在nc.ui.pub.beans.textfield包的UITextType接口中定義了TextStrTextIntTextDblTextDateTextDateTime5類,但布爾型使用UICheckBoxUIRadioButton控件,故沒有定義布爾型。
 
 
 
 
D5
UFDouble的使用
去掉原UFCurrency類型,重新封裝UFDouble,所有的數值型及運算是否採用UFDouble
 
 
 
D6
UFDateTime的使用
去掉原UFTime類型,重新封裝UFDateTime
 
 
 
D7
某些數據封裝類型的禁用
禁止使用的數據封裝類型,如BooleanShortLongFloatDoubleDate
 
 
 
D9
雙精度型控件的範圍控制
對雙精度型控件是否控制最大長度範圍:
如:對雙精度型,數據庫表中字段設爲Decimal類型,pricision20位,Scale8
 則需加入語句:
ivjtxtShipUnitNum.setMaxLength(20);
         ivjtxtShipUnitNum.setNumPoint(8);
 
 
 
D11
最大長度的設置
設置最大長度MaxLength(默認20位、對TextDateTextDateTime無效)
 
 
 
D12
小數位數的設置
設置小數位數NumPoint(默認4位、只對TextDbl有效)
 
 
 
D13
禁止輸入字符的設置
設置禁止輸入的字符DelStr,整數和浮點數也可設置禁止字符串,:
                            //禁止輸入負數
                            setTextType("TextStr");                
                            setDelStr("-");
                            //只輸入數字型字符
                            setTextType("TextDbl");               
                            setDelStr("-.");
 
 
 
 
D14
對齊方式
整數和浮點數默認右對齊,其它左對齊,可以改變
 
 
 
D15
左邊字符鎖定的設置
設置左邊字符鎖定
                      (1)setFixText(String)--設置串並鎖定和字符串相同的長度
                      (2)setFixText(Stringint)--設置串並鎖定參數給定的長度
                      (3)setFixTextLen(int)--鎖定參數給定的長度
                      (4)setText(String)--設置串並取消鎖定
                      任何設置都會修改以前設定的鎖定長度
 
 
 
 
 
8.4).   SQL語句規範:(詳見數據庫處理規範)
序號
測試項
測試內容
質量保證標準
問題屬性
出錯頻率
S1
書寫規範
語句全部用小寫
 
 
 
S2
SQL語法
·            禁止使用select * from ”語法。
·            禁止使用insert into table_name values(?,?,……)”語法,
·            統一使用insert into table_name (col1,col2,……) values(?,?,…...)”
 
 
 
S3
SQL語法
如果在語句中有not inin)操作,是否考慮用not existsexists)來重寫。
 
 
 
S4
類型轉換
避免顯式或隱含的類型轉換。例如在where子句中numeric 型和int型的列的比較
 
 
 
S5
 
SQL語句含有運算符時,運算符需與其他字符串用空格區分。否則容易導致以下類似問題。在語句select a–b from table 中, ab均爲變量。拼寫該語句時,如果a=6 b= -3,則語句變爲select 6--3 from table--變爲Sql的註釋,語句報錯
 
 
 
S6
查詢優化
爲提高索引的效率,查詢路徑優化(尤其是要盡力減少查詢嵌套)。
 
 
 
S7
視圖
使用靜態視圖,不允許動態創建視圖,索引,存儲過程等數據庫對象
 
 
 
S8
Null
不能將Null  空串“”視爲相同
 
 
 
S9
多表連接
1.SQL語句包含多表連接時,是否加上表的別名。
3. 子查詢問題。對於能用連接方式或者視圖方式實現的功能,不要用子查詢。
例如:select name from customer where customer_id in ( select customer_id from order where money>1000)。應該用如下語句代替:select name from customer inner join order on customer.customer_id=order.customer_id where order.money>100
3. 多表關聯查詢時,寫法必須遵循以下原則,這樣做有利於建立索引,提高查詢效率。格式如下select sumtable1.je from table1 table1, table2 table2, table3 table3 where (table1的等值條件(=) and (table1的非等值條件) and (table2table1的關聯條件) and (table2的等值條件) and (table2的非等值條件) and (table3table2的關聯條件) and (table3的等值條件) and (table3的非等值條件)
 
 
 
S10
複雜SQL語句
對複雜SQL語句必須單獨測試:如多表查詢拚寫語句是否符合業務要求
 
 
 
S11
多數據庫適配
1.Sql語句轉換類。調用方法:SqlTranslator trans = new SqlTranslator(); destSql = trans.getSql(sourceSql, databaseType)
2.提供SQLException信息轉換。同一個SQL在不同數據庫操作,JDBC返回的錯誤號以及錯誤信息不同。SQLException信息轉換器將不同JDBC返回的錯誤號統一爲以Sql Server7.0爲準,錯誤信息仍以不同JDBC返回的錯誤信息爲主
 
 
 
S11
多數據庫適配
3SQL語法限制
1              字符串連接必須用||”符號。例如: select f1 || f2 from test:而不是: select f1 + f2   from test如果用+”號,則Oracle不支持。
2              左連接的寫法必須帶outer”關鍵字。例如:select f1 from t1 left outer t2 on t1.f1 = t2.f1;而不是: select f1 from t1 left t2 on t1.f1 = t2.f1
3              參與左連接的列不能爲常量例如,不允許如下語句: select * from t1 left outer join t2 on t1.f1='A'
4              Case when語句中只能出現 =>=<= 以及is null運算符,不能出現 <> <>!=、以及is not null運算符。否則在Oracledecode函數無法表達。
5              Case when語句中參與比較的列只能有一個。例如不能使用如下
         case……when語句:case when f1 > 1 then …...when f2 > 1 then ……end
6              在對char類型比較時,要對列加上rtrim()函數,否則在Oracle中不會得到正確結果。
7              DeleteUpdateInsertSelect語句中char類型的數值引用使用單引,
         例如語句:Insert into t vlaues(“book”,5)SQL Server中可以使用,而在OracleDB2中不支持。應爲:Insert into t vlaues(‘book’,5)
8              通配符不能使用[a-c]%’這種形式,應寫成如:select * from table_name where col1 like ‘[a]%’ OR col1 like ‘[b]%’ OR col1 like ‘[c]%’
9              不能通過來top n/percent限制查詢結果集的記錄數,oracle不支持
10           Unionorder byGroup byhavingbetween…andinexistsis null 用法一致
 
 
 
S12
函數
不允許動態創建函數。
 
 
 
 
 
8.5).   界面UI層:
爲提高測試效率,界面UI層測試可將黑盒測試技術和白盒測試技術結合起來進行測試
1.         代碼規範:
序號
測試項
測試內容
質量保證標準
問題屬性
出錯頻率
UI1
繼承類
1.從ToftPanel繼承一個類。每個界面類都要繼承ToftPanel
        public class myUI extends ToftPanel{…}
 
 
 
UI2
添加按鈕
2. 是否爲界面類添加它需要的按鈕。
a)    添加按鈕屬性。
b)    添加按鈕組屬性
c)    將按鈕設置到界面上。在構造方法中是否添加如下語句:
            setButtons(m_aryButtonGroup);
 
 
 
UI3
響應按鈕
3. 響應按鈕。在onButtonClicked(ButtonObject bo)方法中,處理按鈕事件:
    public void onButtonClicked(ButtonObject bo) {
        if (bo == m_boNormalButton) {
            onNormalButtonClicked();
        } else if (bo == m_boXxxButton) {
            // other button disposing
        }
 
 
 
UI4
界面標題
4. 設置界面標題。在getTitle()方法中,返回界面的標題:
         public String getTitle() { return "我的標題"; }
 
 
 
 
UI5
其他業務代碼
5. 完成其他業務代碼。
    在完成業務代碼時,可能需要用到帳套編碼、單位編碼、用戶編碼等信息,這些信息保存在ClientEnvironment類中。你可以在ToftPanel的繼承類中使用方法getClinetEnvironment()獲得一個ClientEnvironment
 
 
 
UI6
客戶端調用BO對象
    對在客戶端用到的每個BOXxxBO,都要生成一個客戶端的代理類XxxBO_ClientXxxBO_ClientXxxBO的方法一一對應,XxxBO_Client實際上是XxxBO對象在客戶端的一個包裝。在UI層中,只使用XxxBO_Client訪問BS層。例如:如果你要調用XxxBO類中的一個update(MyVO vo)方法,那麼在客戶端的代碼是: XxxBO_Client.update(vo);
 
 
 
 
UI7
對話框須繼承和使用的類
    對話框繼承nc.ui.pub.beans.UIDialog
    對於提供消息的對話框,使用nc.ui.pub.beans.MessageDialog,不允許使用javax.swing.JOptionPane,因爲JOptionPane在瀏覽器中運行時存在問題
 
 
 
UI8
表格模型須繼承和使用的類
表格模型繼承nc.ui.pub.beans.table.VOTableModel或使用NCTableModel
 
 
 
 
 
1.         UI功能測試
分爲兩個主要手段:
·           非正常用例手段:此階段主要是採用不合法的輸入數據和非正常的操作手段。測試系統的錯誤控制與處理能力。保證系統不死機,能正常穩定運行。
·           正常用例手段:此階段主要採用合法的業務數據,正常的操作手段。保證UI符合設計要求和操作習慣,能正常穩定運行,能正確處理業務數據。
 
1、界面規範測試
2.界面初始化測試
3、編輯控件(除功能按鈕以外的控件)應用測試;
4、通用對話框測試
5、參照框測試;
6、狀態欄測試
7、業務功能測試(新建、保存、刪除、查詢、瀏覽、退出)
8. 界面級校驗測試
 
序號
測試項
測試內容
質量保證標準
問題屬性
出錯頻率
UI20
界面規範測試
1         同一界面,不能同時在同一屏上打開多個。
2         菜單、控件的一致性測試:與設計文檔相比較。主要查看菜單與控件是否齊全,控件的類型是否正確。
3         界面的整體佈局測試:控件的整體佈局是否協調,顏色,尺寸是否合理。具有操作邏輯的控件,其擺放的先後位置是否合理。
4         圖標、標題、標籤測試:各種圖標使用是否符合規範;標題文本、標籤文本是否正確合理。
5         控件的鼠標提示文本測試:是否有鼠標提示,提示文本是否正確合理(針對重要的控件)。
 
 
 
 
UI21
界面初始化測試
1.增加退出瀏覽按鈕是否被激活,取消按鈕是否變灰。
2.界面是否自動列示最後(或最前)一條記錄?(如在列表/卡片型界面中的卡片中)
3.各種標籤文本和圖標提示文本是否正確
 
 
 
 
UI22
界面控件功能測試
1.        最小化、最大化、關閉按鈕是否有效。
2.        菜單各種功能按鈕是否有效。
3.        按增加按鈕是否刷新界面,處於待輸入狀態。增加按鈕、刪除變灰,並激活取消、確定按鈕。光標是否定位於第一個文本域內。
4.        文本域內是否能輸入正常長度、數據類型的數據(各提示鍵顯示的內容是否正確);可根據前面已知文本自動顯示關聯的文本是否自動顯示。
5.        輸入非正常的數據,系統是否有相應的錯誤提示,術語是否正確
6.        在增加狀態下按取消按鈕,是否放棄當前操作,返回前一界面,並激活增加按鈕。
7.        按刪除按鈕是否能刪除選中的記錄。
8.        狀態欄顯示是否正確。
9.是否響應鍵盤事件(Enter,Delete,Tab
10。按退出按鈕是否能正常終止主應用程序。
 
 
 
UI23
編輯控件的應用測試:
 
1. 顯示控件和編輯控件應該加以區分
2.屬性是否齊全
3. 控件的應用是否合理
4. 能否正常接收數據,對非法類型數據是否進行了控制。
5. 允許輸入的數據長度是否符合要求。
6. 控件的邊界狀態是否設定。如文本框的滾動條等。
7. 是否有快捷鍵,快捷鍵是否有效。
8. 主要的功能按鈕是否響應鍵盤事件。(Esc:退出;   :前刪;delete:刪除選定的項;F1:調出幫助;F5:調出定位或查找界面;Enter:確定和光標移動;alt+F4:調出參照框;鍵盤上的4個瀏覽按鈕適用於樹的擴展與伸收,及控件內部的光標移動,其中向下的箭頭用於下拉框;Tab:用於控件的焦點移動;Alt-瀏覽按鈕:用於選定菜單功能)
 
 
 
 
UI24
通用對話框測試:
1         圖標,標題是否正確。
2         標籤,提示文本是否正確合理。
3         功能按鈕是否齊全,是否合理有效。(包括關閉小按鈕:X,相當於取消對話框的功能。)
 
 
 
UI25
參照框測試:
參照:分樹型、樹表、列表型參照:
 
·            對於樹型參照,是否應只顯示末級記錄,而不是所有記錄
·            可選擇參照編碼,名稱或者助記碼
·            模糊參照和預過濾的功能
·            參照可以設置欄目
·            可以對參照記錄進行快速匹配定位,且該定位記錄自動顯示在當前屏(目前存在此問題)
·            可以對參照記錄進行主,次關鍵字排序,或者通過單擊表頭對任一列排序
·            參照的自動檢查
·            參照文本框獲得焦點時顯示編碼,離開顯示名稱
·            模糊參照:輸入01* 再按參照按鈕,將只顯示以01開頭的記錄
·            輸入0101????顯示編碼爲8爲且以0101開頭的記錄
·            參照預定位,輸入01,再按參照按鈕,光標停在01開頭的記錄
·            雙擊參照表格的一行,結束參照並返回
·            對應參照返回的數據,在保存數據庫時也要進行業務合法性檢查,因爲參照返回的數據不一定是數據庫中存在的,可能在寫數據庫前基礎數據已發生改變,
 
 
 
 
UI26
狀態欄測試
1. 增加,修改,保存,刪除等操作應在狀態欄顯示其操作狀態(成功、失敗等)。
2. 隨操作不同,狀態應做相應的變化。
3. 在查詢大數據量時,是否有提示用戶等待窗口。
 
 
 
 
UI27
界面級校驗測試
如.起始日期不能大於截止日期,如果大於是否有錯誤提示,提示文本是否正確。
 
 
 
UI28
業務功能測試
系統初始化狀態測試
1. 系統初始化分爲兩種,初次使用本系統時各界面的初始化和再次使用本系統時各界面的初始化。主要測試各菜單和功能按扭的缺省狀態(變灰與激活)是否合理;各種控件的缺省值是否正確。
2.對於母子表的界面,注意母子表是否能同步顯示,顯示的明細記錄是否正確。
 
 
 
UI29
新增:
·            操作邏輯是否合理(包括業務數據輸入的先後順序)。比如應先定位樹節點,再按新增按鈕;
·            按下新增按鈕後,各功能按鈕和菜單狀態變化是否正確;界面的編輯框是否刷新(注意合理的保留值不應刷新);光標定位是否合理。
·            能否輸入合法的數據;能否正常地調出參照框,並導入所需的數據(包括下拉框,參照對話框,右鍵菜單等)。能否正常修改或清除數據(需要注意參照框的此項要求)。
·            在沒保存所編輯的記錄時,進行其他操作,系統是否提示保存新增記錄,對話框文本是否正確合理。
·            按保存按鈕後,是否進行全面的邏輯校驗(與設計文檔相符),與正常的業務邏輯保持一致;提示文本是否正確合理,對話框能否正常操作(見非正常用例階段的通用對話框測試描述)。退出對話框後光標定位是否合理。
·            能否正常保存數據。界面數據顯示是否正確。菜單、其它功能按鈕及控件狀態變化是否合理。
·            能否查詢到此記錄,查詢到的結果是否與輸入的一致。
 
 
 
UI30
修改:
·            能否正常修改數據。
·            不應該修改的編輯框是否鎖死。
·            在沒保存所編輯的記錄時,進行其他操作,系統是否提示保存新增記錄,對話框文本是否正確合理。
·            按保存按鈕後,是否進行全面的邏輯校驗(與設計文檔相符),與正常的業務邏輯保持一致;提示文本是否正確合理,對話框能否正常操作(見非正常用例階段的通用對話框測試描述)。退出對話框後光標定位是否合理。
·            能否正常保存修改數據,界面數據顯示是否正確。菜單、其它功能按鈕及控件狀態變化是否合理。
·            能否查詢到此記錄,查詢到的結果是否與輸入的一致。
 
 
 
 
UI31
刪除:
·            刪除分爲記錄刪除和行刪除兩種。
·            刪除操作邏輯是否合理。如先定位後刪除,一次性刪除多條等。
·            按刪除按鈕是否有提示,提示文本是否正確合理。
·            具有業務邏輯時,是否遵循邏輯刪除規則,是否有提示,提示文本是否正確。
·            記錄是否從界面上清除。是否顯示上一條記錄,菜單、功能按鈕、各種編輯控件狀態是否正確。
·            通過查詢,驗證是否正常刪除。
 
 
 
UI32
保存
·            按保存後是否進行所有的業務邏輯校驗。是否有提示,提示文本是否正確。
·            保存後,記錄是否從界面上清除。是否顯示上一條記錄,菜單、功能按鈕、各種編輯控件狀態是否正確。
 
 
 
UI33
查找
·            輸入正常的匹配值能否查詢到合適的記錄。
·            對於較長時間的查詢是否有等待提示窗口。
·            注意條件爲時間段的查詢。
·            如果沒有缺省條件,直接按查詢按鈕是否能查出所有的記錄。
·            對於組合查詢,應進行互相匹配驗證查詢。
·            注意通過雙擊記錄帶出明細的操作模式。
·            所有條件是否能單獨和組合查詢,列表框數據刷新是否正確。
 
 
 
UI34
定位
輸入合理的值,光標能否定位在適當的位置。
 
 
 
 
UI35
退出
·            在新增或修改狀態直接退出,系統是否提示保存,提示文本是否正確。
·            能否正常退出操作界面。
 
 
 
8.6).   ValubleObject:數值對象
一個VO類包裝一組代表業務含義的數據,負責在系統各層之間傳遞業務數據。通常一個VO對應一個數據庫表,但也可以對應多個數據庫表,或對應一個數據庫表的部分字段。
   
序號
測試項
測試內容
質量保證標準
問題屬性
出錯頻率
VO1
繼承性
該類是否繼承於VO
正確性
錯誤
 
VO2
get()set()方法是否齊全
VO類是否包含每個需要持久化屬性的setXXXgetXXX方法。
set方法中是否對屬性進行合法性校驗,校驗失敗拋出ValidationException異常
正確性
錯誤
 
VO3
構造子
該類應包含無參構造子、只含參數OID的構造子
正確性
錯誤
 
VO5
參數
全參構造子中參數的順序是否與set語句的順序一致?(去掉)
正確性
錯誤
 
VO6
語句體
在每個set方法中是否有修改對應屬性的語句體?
正確性
錯誤
 
VO7
語句體
在每個get方法中是否有返回對應屬性的語句體?
正確性
錯誤
 
VO8
空值問題
所有爲保存操作員的錄入數據而創建VO對象的類屬性應初始化爲null,直到操作員錄入數據時才爲相應屬性分配空間和賦值。在保存到數據庫時,把空屬性(null)映射爲數據庫相應字段的null。
 
 
 
VO9
Integer、Double包裝類型
由於Java的Primitive Type類型(如int、double)不是對象,所以不能使用它們作爲類屬性類型,應該採用對應的Integer、Double等相應的包裝類型。
 
 
 
 
 
8.7).   BO業務對象層:
每個BO類都繼承BusinessObject類。BO對象通過操縱DMO對象和其他BO對象完成業務邏輯。
 
序號
測試項
測試內容
質量保證標準
問題屬性
出錯頻率
BO1
 BO類中是否存在名稱相同且參數個數相同的方法
一個BO類中不能有名稱相同且參數個數相同的兩個方法同時存在。因爲目前中間件生成工具處理此情況存在問題
 
 
 
BO3
事件監聽器和處理事件
不建議使用可視化進行事件處理,請手工註冊事件監聽器和處理事件
因爲可以減少不必要的代碼
 
 
 
B4
打印異常
所有異常應打印出來,可使用下述語句:
e.printStackTrace(System.err);
 
 
 
B5
拋出異常
BO的所有業務方法都必須拋出異常:java.rmi.RemoteException;否則將不能生成EJB輔助代碼
 
 
 
B6
BO對象中使用其它BO對象或環境變量時
在BO對象中如要使用其它BO對象或環境變量,必須使用getBeanHome()和getEnvProperty()方法獲得,不要直接使用JNDI查詢。使用其它BO對象的方法代碼示例如下:
              BO2Home home = getBeanHome(BO2Name, BO2Home.class);
              BO2 bo2 = BO2Home.create();
 
 
 
B7
EJB規範
基類BusinessObject包含了SessionBean接口中的setSessionContext()、ejbCreate()、ejbActivate()、ejbPassivate()、ejbRemove()方法。這是提供給EJB Server的調用接口,不要在你的BO類中調用這幾個方法。
 
 
 
 
B8
工具生成代碼是否可用
在CodeSeed爲一個數據庫表生成代碼時,你可以選擇包含BO類以及home、remote接口、BO_Client(客戶端代理)。所有這些代碼演示系統各層之間的調用關係,這些類是否根據業務要求加以調整
 
 
 
 
 
B9
BO類的設計要遵循大粒度(coarse-grained)的原則
即儘量將一項業務的所有方法放入同一個BO類中。這是設計EJB(尤其是Stateless Session Bean)的一項原則,它能有效的提高對系統資源的利用。具體到我們的編碼實踐中,雖然CodeSeed針對每個DMO類生成了一個BO類,但我們要將相關的BO類整合成一個BO類。
 
 
 
B10
BO類中方法的命名是否反映該方法的業務含義
雖然CodeSeed生成的代碼中將方法命名爲insert()、update()等,還應將它們更名爲addBill()、auditBill()等業務名稱
 
 
 
B11
BO類是否生成供客戶端調用BS端的代碼
當設計完BO類後,需調用NC EJB開發工具集生成和部署代碼,生成瘦客戶端,供客戶端調用BS端的代碼。
 
 
 
B12
BODMO類中調用另一個BO對象時是否保證一個事務內的正確實現
BODMO類中,如要使用其它BO對象,必須使用getBeanHome()方法獲得。假如BO1的一個方法內要使用BO2,那麼示例如下:
        BO2Home home = getBeanHome(“BO2Name”, BO2Home.class);
        BO2 bo2 = BO2Home.create();
        bo2.method1();
其中,getBeanHome()方法的第一個參數(“BO2Name”)是一個字符串,代表BO2JNDI名稱。我們技術部的中間件默認的JNDI名稱由包名.remote接口名構成,例如,對上述BO2(假定它位於nc.bs.mypackage包中),默認的JNDI名稱是nc.bs.mypackage.BO2”
不可直接New一個BO對象的實例,否則中間件將無法控制和確保其事務屬性的正確實現
 
 
 
B13
向數據庫插入一條記錄時,是否爲它獲得唯一主鍵(OID)
提供OID的算法由系統管理統一處理,通過在DMO基類的兩個接口方法getOID(String pk_corp)和getOIDs(String pk_corp, int amount)提供給業務模塊使用。其中,參數pk_corp是此記錄所屬的公司的主鍵。如果參數pk_corp爲null,則默認爲集團公司的數據。
 
 
 
B14
業務級校驗
業務級校驗方法是否齊全
 
 
 
 
 
8.8).   DMO(數據管理對象):
 
 
序號
測試項
測試內容
質量保證標準
問題屬性
出錯頻率
DM0
繼承類
每個DMO類是否都繼承DataManageObject
 
 
 
DM1
數據庫的利用效率
爲了提高數據庫的利用效率,是否儘量使用PreparedStatement執行SQL操作,不要使用Statement
 
 
 
DM2
DMO類中方法的完整性
1         通常DMO類中應包含insert()delete()update()方法。還可以包括其它的查詢方法。
2         對一些特殊的繼承類,如處理參數設置的DMO類,可能不需要insert()delete()方法。
 
 
 
DM3
數據庫連接
DMO類中,數據庫連接必須通過getConnection()方法獲得,不允許直接使用JNDI查詢
 
 
 
DM4
數據庫資源的獲得和釋放
應在DMO類每個方法的獲得ConnectionPreparedStatement兩種數據庫資源,並在方法的結束位置釋放數據庫資源。
 
 
 
 
DM5
庫表主鍵值
DMO類的一個方法中向數據庫插入(insert)數據時,是否使用getOID()方法獲得一個自動產生的庫表主鍵值。
 
 
 
 
DM7
是否儘量使用VO數組
如果DMO類中的方法需要返回業務數據,則通常是VO對象或VO對象的數組(或集合)。當客戶端需要多個VO對象時,是否儘量使用VO數組的形式返回,以提高數據庫和網絡效率,不要將多個VO一個一個的查詢和返回
 
 
 
 
DM9
DMO對象調用另一個BO對象時
如果你在DMO對象中需要使用BO對象(通常是提供公共服務的BO),必須使用getBeanHome獲得BO對象的home接口。
 
 
 
DM11
自動生成代碼的調整
CodeSeed生成的代碼中包含了delete(VO)insert(VO)update(VO)insertArray(VO[])queryAll()等方法。是否根據業務需要增加、刪除、調整DMO類中的方法。
 
 
 
DM12
參數pk_corp的使用
DMO中的insert()等方法中,向數據庫插入記錄時,要通過getOID(String pk_corp)getOIDs (String pk_corp, int amount)爲該記錄獲得一個記錄主鍵(OID),如果參數pk_corpnull,則默認爲集團公司。
 
 
 
DM13
VO對象寫庫時
數據庫表中加一字段時,執行stmt = con.prepareStatement(sql)後,執行stmt.setString(3, invcl.getInvclasscode()語句中的序號是否與數據庫表中字段順序一致(舉例附後)
 
 
 
DM14
條件拚寫語句
條件拚寫語句是否符合業務邏輯
 
 
 
DM15
DMO類的查詢、增加、修改方法
查詢:執行完查詢Sql語句ResultSet rs = stmt.executeQuery()後,是否對查詢vo對象正確地賦值,且賦值屬性是否有遺漏
增加:執行完插入Sql語句stmt = con.prepareStatement(sql); 是否對stmt正確地賦值,且賦值屬性是否有遺漏,然後執行stmt.executeUpdate()更新數據庫
更新:執行完更新Sql語句stmt = con.prepareStatement(sql); 是否對stmt正確地賦值,且賦值屬性是否有遺漏,然後執行stmt.executeUpdate()更新數據庫
 
 
 
 
錯誤碼DM13舉例,如:數據庫表bd_invcl中加一字段avgprice,執行完後sql語句後,PreparedStatement類型的stmt中執行set語句的順序要與數據庫表中字段順序一致。否則出錯
String sql = "insert into bd_invcl(pk_invcl, invclassname, invclasscode, endflag, avgprice, invclasslev) values(?, ?, ?, ?, ?, ?)";
       Connection con = null;
       PreparedStatement stmt = null;
       try {
              con = getConnection();
              stmt = con.prepareStatement(sql);
              // set PK fields:
              String newOid = getOID();
              stmt.setString(1, newOid);
              // set non PK fields:
              if (invcl.getInvclassname() == null) {
                     stmt.setNull(2, Types.CHAR);
              }
              else {
                     stmt.setString(2, invcl.getInvclassname());
              }
              if (invcl.getInvclasscode() == null) {
                     stmt.setNull(3, Types.CHAR);
              }
              else {
                     stmt.setString(3, invcl.getInvclasscode());
              }
              if (invcl.getEndflag() == null) {
                     stmt.setNull(4, Types.CHAR);
              }
              else {
                     stmt.setString(4, invcl.getEndflag());
              }
              if (invcl.getAvgprice() == null) {
                     stmt.setNull(5, Types.INTEGER);
              }
              else {
                     stmt.setBigDecimal(5, invcl.getAvgprice());
              }
              if (invcl.getInvclasslev() == null) {
                     stmt.setNull(6, Types.INTEGER);
              }
              else {
                     stmt.setInt(6, invcl.getInvclasslev().intValue());
              }
              //
              stmt.executeUpdate();
              return newOid;
       }     catch (Exception e) {return "插入未成功";}
       finally {
              try {
                     if (stmt != null) {
                            stmt.close();
                     }
              }catch (Exception e) {}
              try {
                     if (con != null) {
                            con.close();
                     }
              }catch (Exception e) {}
       }
}
 
 
8.9).   業務邏輯重點測試項目(需根據不同業務要求進行細化)
1. 狀態校驗測試:
如:
        (1)作廢狀態的校驗:   RemoveUpdate單據時,需校驗狀態。如果記錄處於作廢時會拋異常,否則正常刪除或修改。(請構造正反用例分別測試)
2)審覈狀態的校驗:在RemoveUpdate單據時,需校驗狀態。如果記錄處於審覈狀態時會拋異常,否則正常刪除或修改。(請構造正反用例分別測試)
        3)凍結狀態校驗:同上。
2.關聯刪除測試:
 3.關聯增加測試:
4.靜態變量的測試:
       
8.10). 樣例:
如存貨基本檔案
 
UI層:
 
1).顯示控件和編輯控件應該加以區分,儘量避免任何引起用戶誤會的可能。如,存貨檔案中的查詢條件控件,使用戶誤以爲是用來錄入的
2).編輯控件數據類型沒有與表中對應字段數據類型一致
如:InvbasdocPanel類中的gettxtWeitUnitNum(){}
應加入ivjtxtWeitUnitNum.setTextType(nc.ui.pub.beans.textfield.UITextType.TextDbl);
3        控件沒有控制最大長度範圍:
如:對雙精度型,數據庫表中字段設爲Decimal類型,pricision爲20位,Scale爲8位
 則需加入下列語句:
ivjtxtShipUnitNum.setMaxLength(20);
ivjtxtShipUnitNum.setNumPoint(8);
4).參照問題
按增加時,從樹中所選分類沒有自動帶入,存貨分類參照應只顯示末級
5).樹表結構
·           1.樹中節點級次混亂
·           2.選擇末級節點時,樹中節點與列表中記錄沒有對應
·           3.一進入樹表結構型的界面中,選擇末級節點時,沒有激活增加按鈕,
·          4.按增加,沒有缺省切換到第一頁,從樹中所選分類沒有自動帶入
 
6)報錯信息:
·          1.錯誤信息提示不準確
·          2.當操作合法時,也出現報錯信息框
如:光標定位於左邊tree中的某一節點時,報錯信息爲:
只有第二級以下的節點或末級節點表才能展開。
9測試數據設計
 
測試數據表
 測試類名:
 :
測試人:
所屬模塊:
編號:
序號
測試目的
輸入數據
實際輸出
期望輸出
差異與否
(允許誤差)
估計錯誤原因
1
匹配條件
 
 
 
 
 
2
邊界測試
 
 
 
 
 
3
條件分支
 
 
 
 
 
4
循環
 
 
 
 
 
5
不合法數據
 
 
 
 
 
備註
 
 
 
 
 
 
 
 
 
 
 
10代碼測試報告填寫說明
代碼測試報告填寫說明
項目編號
1
類名稱及版本
2
項目名稱
3
測試人員
4
測試執行日期及版本
5
 
 
 
方法名稱
標識號
測試結果
問題描述
問題屬性
 
問題類別
修改確認
確定修改人員
返回次數
確認修改狀態
1
2
3
4
5
6
6
7
8
9
10
11
 
12
13
14
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章