測試開發筆記

測試開發筆記

第一章 測試基礎 7

  1. 什麼是軟件測試: 7
  2. ★軟件測試的目的、意義:(怎麼做好軟件測試) 7
    3.軟件生命週期: 7
    第二章 測試過程 8
    1.測試模型 8
    H模型: 8
    V模型 9
    2.內部測試 10
    3外部測試: 10
    驗收測試:(在系統測試之後) 11
    迴歸測試: 11
    4.測試過程(幹什麼,怎麼幹) 12
    5.各階段輸入、輸出標準以及入口、出口準則:(測試階段過程要素) 12
    第三章 測試方法 14
    測試方法對比 14
    測試方法組合 16
    第四章 軟件質量 19
    1.什麼是軟件質量 19
    2.質量要素 19
  3. 6大特性27個子特性ISO國際標準組織CMM/CMMI(Capability maturity model)能力程度度模型 19
    4.CMMI把企業分爲5個等級 22
  4. CMM與CMMI的區別 23
    第五章 SQL 24
    約束: 29
    1主鍵約束 29
    2 非空約束 not null 30
    3 外鍵約束 FOREIGN KEY 30
    4 默認約束 31
    5 檢查約束 check 31
    6 唯一約束 unique 32
    SQL語句 32
    創建數據庫. 32
    表、字段、類型 33
    查詢 35
    批量處理? 40
    視圖/虛表 view 41
    索引 42
    存儲過程 procedure 42
    事務 transaction 43
    觸發器 trigger 46
    練習 46
    一、單表查詢練習 46
    二、聚合函數練習 47
    三、分組查詢練習 47
    四、嵌套查詢練習 48
    五、聯接查詢練習 48
    六、外聯接查詢 48
    七、補充提高 49
    第六章 C語言 49
    C語言中的存儲 50
    數據類型 50
    常量 53
    結構體 54
    條件/分支邏輯 54
    Switch 54
    If 55
    循環 55
    For 55
    while 56
    do…while 56
    函數 56
    第七章 Windows環境搭建 59
    一、名詞註解與定義: 59
    C/S 60
    B/S 60
    進銷存系統 64
    OA系統 69
    第八章 需求管理 78
    1.什麼是需求 78
    2. 需求工程在做什麼 78
    3. ★需求變更 78
    4.★需求的跟蹤 78
    需求跟蹤矩陣的作用: 78
    需求的特點: 79
    需求工程 79
    變更控制流程圖 82
    第九章 缺陷管理 83
    缺陷相關概念 83
    缺陷管理相關概念 83
    BUG管理基本流程: 84
    BUG單 84
    第十章 測試需求分析 86
    概念: 86
    ★如何做測試需求分析 86
    ★UML統一建模語言(Unified Modeling Language) 86
    第十一章 配置管理 88
    1.什麼是配置管理 88
    2.配置管理流程 88
    3.SVN實戰 88
    配置管理工具SVN操作過程手冊 90
    一、 如何創建“project”項目版本庫 90
    二、 如何查看創建的“project”項目版本庫 95
    三、 在版本瀏覽器裏面,創建文件,並進行檢出 99
    四、 如何對該項目入基線 103
    五、 分支文件進行合併 105
    六、 分支衝突的解決 112
    第十二章 系統測試 117
    概念: 117
    分類: 117
    功能測試:(Function testing中國 Feature testing國際) 118
    性能測試:(Sercarity testing) 118
    安全性測試:(Security Testing) 118
    安裝測試 119
    GUI測試(Graphical user interface) 120
    可用性測試(Usability testing) 120
    異常性測試 121
    文檔測試 121
    備份測試 121
    配置測試 121
    網絡測試 121
    第十三章 用例設計 122
    等價類 122
    練習 122
    1.1年齡註冊 122
    1.2.年齡註冊 123
    1.3.擴充 124
    邊界值 125
    2.1.年齡 125
    2.2.用戶名註冊 126
    2.3.變量命名 127
    2.4.進銷存價格 127
    2.5.Windows文件命名 127
    總結 128
    邊界值 129
    第十四章 系統測試執行 129
    測試環境搭建文檔: 130
    用例執行: 130
    填BUG報告: 130
    第十五章 QC(Quality Center) 131
    QC後臺: 133
    QC前臺: 134
    Requirements 需求模塊 134
    Test Plan 測試用例模塊 135
    Test Lab 測試執行模塊 135
    第十六章 PYTHON 137
    Python的安裝 137
    Python的集成環境: 137
    數據類型: 137
    運算符: 137
    縮進: 138
    控制語句: 138
    IF條件 138
    WHILE循環 139
    FOR循環 141
    BREAK \ CONTINUE 141
    函數 143
    定義: 143
    調用: 143
    第十七章 單元測試 144
    單元測試概念: 144
    單元測試靜態測試: 144
    單元測試動態測試: 144
    測試評價準則: 144
    邏輯覆蓋率 144
    單元測試策略 145
    ⑴ 孤立測試 145
    ⑵自頂向下的單元測試策略 146
    ⑶自底向上的單元測試方法 147
    單元測試用例設計(基本路徑覆蓋法)★ (面試) 148
    程序控制流圖 148
    單元測試執行 150
    單元測試框架 151
    第十八章 集成測試 153
    第一階段總結 155
    Test platform 155
    Bug的其他說法 155
    第二階段項目筆記 156
    一.建立項目JXC 156
    二.佈置JXC 156
    三.配置SVN 157
    四.訪問SVN 157
    進銷存項目 158
    2011年10月20日 158
    進銷存項目總結 160
    測試需求分析 160
    1、定義測試範圍 160
    2、建立需求項 160
    3、細化需求項 162
    4、需求覆蓋率分析 164
    課前複習: 164
    判定表 166
    3.1.讀書選擇 166
    3.2.Counter 168
    3.3:word中的判定表舉例 169
    3.4.合併判定表 170
    3.4.密碼修改 171
    3.5.進銷存 173
    3.6.總結 175
    因果圖 176
    4.1.字母判定 177
    4.2.自動售貨機 179
    課前複習: 180
    狀態遷移 181
    5.1.飛機售票系統 181
    5.2.缺陷跟蹤 183
    流程分析 184
    6.1.處理流程 185
    6.2.系統登錄 186
    6.3.字母判斷 187
    6.4.組合查詢 188
    課前複習 191
    正交試驗 192
    7.1.環境搭建 192
    7.2.Counter 193
    7.3.組合 193
    7.4.環境搭建 195
    其他 196
    輸入域 196
    輸出域 196
    異常分析 196
    錯誤猜測 196

第一階段
第一章 測試基礎

  1. 什麼是軟件測試:
    兩個依據(需求、測試用例),兩個方法(手工、自動),一個對比(預期結果和實際結果的對比)
  2. ★軟件測試的目的、意義:(怎麼做好軟件測試)
    初期: 儘量多的發現缺陷生成相關規範
    中期: 儘量早的發現缺陷
    後期: 儘量預防問題:通過以往的經驗積累
    控制成本(貫穿始終)儘量少的時間和人力發現更多的缺陷
    3.軟件生命週期:

就個人價值而言,一是給我們職業發展方向
如何儘量多的發現缺陷?

溝通
在測試前期與開發溝通 確認測試重點 確認測試的優先級
瞭解開發人員技術和業務背景 業務水平 技術水平 代碼質量 人員流動性
在測試結束後
對已發現的bug進行統計 知道高發概率bug 在新項目中要進行重點測試
針對代碼 代碼複雜度
版本管理
針對基礎測試基礎版本要進行充分的測試
驗收前的最後一個版本一定要進行完全重複測試
測試方法
黑盒方法 功能問題 無法保證所有的代碼邏輯都被執行到 用白盒測試思想補充黑盒測試
靜態測試方法 文檔評審 代碼走查
測試過程
上一階段爲下個階段提供重點指導
用戶參與的測試或用戶反映回來的錯誤和問題爲下次測試的或測試補充的必備內容

第二章 測試過程
1.測試模型
H模型:

H模型圖
優點:
1 介入早 與開發並行 更早的發現問題
2 測試過程獨立於開發過程 更客觀 更主動
V模型

雙V模型圖
㈠需求階段
產品經理,項目經理,產品工程師寫《需求規格說明書》Software Reqwirment Specaficalion(SRS)
內容:需求項(業務,主要功能)需求子項,對子項的詳細描述
測試的工作:對需求進行測試和評審A系統測試計劃《系統測試計劃書》B系統測試計劃《系統測試方案書》C系統測試實現《系統測試用例》
㈡設計階段
開發經理,架構師,開發工程師寫出《概要設計說明書》High-level design(HLD)
內容:系統程序中的模塊,子模塊和他們之間的關係和接口
測試的工作:對HLD進行測試和評審A集成測試計劃《集成測試計劃書》B集成測試設計《集成測試方案書》C集成測試實現《集成測試用例》
㈢詳細設計階段
開發工程師,架構師,寫出《詳細設計說明書》Low-level desragn(LLD)
內容:函數 代碼 邏輯
測試工作:對LLD進行測試和評審A單元測試計劃《單元測試計劃書》B單元測試設計《單元測試方案書》C《單元測試用例》
㈣編碼階段
開發工程師寫代碼
優點:介入早,提高測試質量; 分成三個階段,發現問題更有針對性;測試與開發並行,更好的利用項目資源。
缺點:項目成本高;技術要求高,對人員要求高;並行工作中,一方未完成就會對整個造成延誤。
適用範圍:規模大、軟件成熟度高的項目。
2.內部測試
測試階段 測試對象 測試方法 測試目的 經濟價值 優點 缺點 必要性 資源
系統測試
system testing(ST) 整個系統
(整個產品) 黑盒測試 驗證產品是否符合需求規格說明書 能夠保證產品以較高的的質量儘早的上市銷售,從而使公司獲取利潤 1簡單
2技術要求低 1測試介入時間晚,修改成本高
2有一些問題可能被遺留不會被修改 必須保證 1對被測產品
2需求規格說明書
3系統測試工程師
4需求開發人員
集成測試
integration testing(IT) 模塊
子模塊
接口 灰盒測試 驗證模塊、子模塊、接口是否符合
概要設計說明書 能夠幫助更準確的 定位缺陷的所在,從而降低了定位缺陷的成本 定位準確快速 1接口測試有技術要求,技術實現難度大
2接口太多,數量龐大,做所有接口的集成測試成本高 不是必須做的,
必須做測試的
1公共的主要模塊
2核心模塊
3和外界軟件接口模塊 1被測的產品
2概要設計說明書
3集成測試工程師
4概要設計人員
單元測試
unit testing(UT) 函數
代碼
邏輯 白盒測試 驗證函數代碼邏輯是否符合詳細設計說明書 能夠最早的開展測試工作,降低修復成本,防止缺錢被擴大化(注意:加以重視:1公共的模塊2全局性的數據結構3重要的使用頻率較高的功能4以往項目經常出錯的嚴重問題5複雜度較高的模塊6當開發人員業務不熟悉編碼不熟練的模塊要進行單元測試) 介入時間早,發現問題早,修改成本低。 1技術難度高
2工作量太大 不是必須的 1開發環境
2LLD
3單元測試工程師
4架構師(詳細設計人員)
3外部測試:
使用驗收測試的原因
1內部測試只能模擬用戶使用卻不能代替用戶使用
2由於專業不同業務背景不同無法模擬用戶使用的習慣
3測試人員和用戶對產品的理解可能不同
驗收測試:(在系統測試之後)
α測試:由用戶組織一部分人在開發環境下來對產品進行測試 如網遊的內側
β測試:所有系統使用者都可以參加的測試(在實際使用環境下) 如網遊的公測
分類 測試過程 參與人員 目的 過程主要內容
針對項目類軟件 驗收測試 開發人員:提供滿足驗收要求的軟件或系統,或用戶需要的相關開發文檔
測試人員:
1、搭建驗收測試環境
2、準備驗收測試用例
3、準備用戶需要的相關測試文檔
4、組織人員進行驗收演示
用戶代表:對系統進行一定的試用
客戶代表:簽字確認驗收是否通過
行業:負責在驗收過程中提出問題並協助用戶和客戶檢查系統是否滿足需求 1、檢查軟件的功能是否與用戶最初需求相一致
2、是客戶回款的標誌 1、進行驗收前準備
A、準備相關的資料
B、搭建驗收測試環境
C、指定相關的驗收參與人
2、進行驗收演示
A 、對產品使用進行演示
B、回答專家、用戶的提問
3、簽署驗收報告
針對產品類軟件 α測試 開發人員:
1、提供可以進行α測試的軟件
2、負責修改用戶代表發現的問題
測試人員:
1、檢查或協助用戶填寫缺陷報告
2、向用戶學習相關的使用關注點
邀請的用戶或客戶代表(付費)
1、按照自己的操作習慣使用軟件,提出易用性等方面的問題和改進建議 明確用戶的使用體驗,提高產品的適用範圍和使用質量標準 1、明確進行α測試的版本
2、邀請潛在用戶進行使用體驗
3、針對用戶提出的問題進行修復或改進
β測試 潛在用戶:
1、安裝軟件並使用
客服人員:
記錄並反饋用戶的問題 提前佔領市場 1、發佈一個下載地址
2、用戶進行軟件下載並使用
迴歸測試:
迴歸測試可以發生在任何一個階段
分爲完全迴歸和選擇迴歸
迴歸範圍 迴歸分類 特點 優點 缺點 適用範圍
完全迴歸 完全重複法 每次迴歸測試都要執行全部測試用例 迴歸測試充分,覆蓋面廣,不容遺漏 工作量大,時間長,成本高 時間充裕且測試資源較充分時,第一次和最後一次做迴歸測試的時候用這種方法
選擇性迴歸 覆蓋修改法 每次迴歸測試時只執行發現錯誤的用例 時間最短,成本最低,簡單效率高 迴歸測試不充分,漏洞較多 時間較緊且人力資源不足時,中間版本的測試輪次可以使用,關聯度比較小的模塊和功能
周邊影響法 每次迴歸除了執行發現bug的用例外,還要執行與其相關的用例 在考慮了測試成本的基礎上有效提高了迴歸測試的質量 效率 很難確定影響的周邊範圍,相關用例定位較困難 適合於全局數據結構被修改或公共模塊被修改,或核心算法業務被修改時,公用的模塊,關係、關聯複雜的模塊
指標達成法 每次迴歸測試達到規定的語氣指標
就可以停止測試了 所有的測試都可度量 1指標生成需要很長的週期,
很多的項目區累計經驗
2要有比較穩定的團隊這個指標纔有意義 成熟度較高的測試團隊應用於指標達成法
(適用度很低,很少有公司使用)

分類 步驟 優點
確定周邊
範圍的方法 界面檢查法 1明確被修改的功能 簡單
2修改功能的上下游功能
3調用修改功能的功能和
修改功能調用了的功能
4和修改功能遊相同輸入輸出的功能
5在測試中執行上訴關聯的用例
代碼檢查法 1明確被修改的函數和代碼 準確,全面
2在整個系統中檢查所有
調用了修改函數的函數
3明確上訴所有函數對應的界面
4測試上訴界面測試用例
4.測試過程(幹什麼,怎麼幹)
整個系統的內容 需求項(業務、主要功能) 需求項 測試計劃 測試需求項 系統測試階段
需求子項 測試方案 測試需求子項
詳細內容 測試用例 具體如何進行測試
整個系統的集成 概要設計 概要設計項 測試計劃 集成測試階段
概要設計子項 測試方案
具體內容 測試用例
整個系統最小單元 詳細設計 函數 測試計劃 單元測試
邏輯 測試方案
代碼 測試用例

5.各階段輸入、輸出標準以及入口、出口準則:(測試階段過程要素)
系統測試 入口準則 輸入文檔 輸出文檔 出口準則
系統測試計劃 開發計劃通過評審併入基線
需求規格說明書通過評審併入基線 開發計劃書
需求規格說明書 系統測試計劃書 系統測試計劃書通過評審併入基線
系統測試設計 系統測試計劃書通過評審併入基線 需求規格說明書
開發計劃書
系統測試計劃書 系統測試方案書 系統測試方案書通過評審併入基線
系統測試實現 系統測試方案書通過評審併入基線 需求規格說明書
系統測試計劃書
系統測試方案書 系統測試用例
預測試項 系統測試用例、預測試項通過評審併入基線
系統測試執行 系統測試用例、預測試項通過評審併入基線
集成測試報告通過評審併入基線 需求規格說明書
系統測試計劃書
系統測試方案書
系統測試用例
預測試項 缺陷報告
預測試項報告
系統測試報告 系統測試報告、預測試項報告、缺陷報告通過評審併入基線
集成測試 入口準則 輸入文檔 輸出文檔 出口準則
集成測試計劃 概要設計說明書通過評審併入基線 概要設計說明書 集成測試計劃書 集成測試計劃書通過評審併入基線
集成測試設計 集成測試計劃書通過評審併入基線 集成測試計劃書
概要設計說明書 集成測試方案書 集成測試方案書通過評審併入基線
集成測試實現 集成測試方案書通過評審併入基線 集成測試計劃書
集成測試方案書
概要設計說明書 集成測試用例 集成測試用例通過評審併入基線
集成測試執行 集成測試用例通過評審併入基線
單元測試報告通過評審併入基線 集成測試計劃書
集成測試方案書
集成測試用例
概要設計說明書 集成測試報告
缺陷報告 集成測試報告、缺陷報告通過評審併入基線
單元測試 入口準則 輸入文檔 輸出文檔 出口準則
單元測試計劃 詳細設計說明書通過評審併入基線 詳細設計說明書 單元測試計劃 單元測試計劃通過評審併入基線
單元測試設計 單元測試計劃通過評審併入基線 詳細設計說明書
單元測試計劃書 單元測試方案書 單元測試方案書通過評審併入基線
單元測試實現 單元測試方案書通過評審併入基線 詳細設計說明書
單元測試計劃書
單元測試方案書 單元測試用例 單元測試用例通過評審併入基線
單元測試執行 單元測試用例通過評審併入基線 詳細設計說明書
單元測試計劃書
單元測試方案書
單元測試用例 單元測試報告
缺陷報告 單元測試報告、缺陷報告通過評審併入基線

第三章 測試方法
測試方法對比
分類方法 測試方法名稱 依據 測試對象 理論上的測試目的 實際工作中的測試目的 測試評估標準 測試環境 測試工作介入點 優點 缺點 適用範圍
按照不同的測試對象劃分(黑白灰盒的區別) 黑盒 SRS 整個軟件產品 檢查軟件的功能實現是否與SRS相一致 儘早進行驗收,收回開發成本 需求覆蓋率 儘量與用戶環境相一致 只要功能可以進行操作 簡單,測試效率高 1、無法保證所有的代碼邏輯都被測試到
2、後臺相關的非界面處理可能會遺漏(文件、數據庫)
3、當前功能與其他功能有聯繫的部分可能也會被遺漏 適合進行功能、性能等使用和外部特性的測試適用範圍廣泛,適用所有可見功能
白盒 LLD 代碼邏輯函數 檢查代碼的邏輯實現是否與LLD相一致 儘早發現問題缺陷,降低缺陷修復成本.便於定位問題 邏輯覆蓋率
語句覆蓋
分支覆蓋
條件覆蓋
分支-條件覆蓋
路徑覆蓋 開發環境 只要獨立的函數或類代碼編寫完成後 覆蓋充分,可以覆蓋到每行代碼 技術較難
效率較低
成本較高 針對核心業務、複雜算法、公共模塊、全局數據結構、新增功能
灰盒 HLD 模塊\子模塊接口 檢查接口實現是否與HLD相一致 逐步集成,降低缺陷定位成本 接口覆蓋率 子系統集成儘可能和用戶環境一致,模塊內部接口以及模塊間接口可以在開發環境下進行
子系統間的接口最後要在與用戶環境下測試 進行測試的接口模塊已完成 可以提早定位和發現問題 技術最難
成本最高 公共模塊之間的調用,複雜度較高的模塊調用、使用頻率較高的模塊調用

特點 分類 優點 缺點 適用範圍
按照是否運行程序劃分 靜態 不執行程序 1、文檔評審
A、正規檢視
B、技術評審
C、同行評審
2、靜態分析技術
A、控制流分析
可以發現以下缺陷
1、死循環
2、執行不到的語句
3、不存在的語句
B、數據流分析
可以發現以下缺陷
1、變量未定義被使用
2、變量已定義未使用
C、信息流分析
可以幫助開發人員定位缺陷
1、輸入變量與語句的關係
2、輸出變量與語句的關係
3、輸入變量與輸出變量的關係 較動態測試時間早,不用寫代碼 工作量大 重要的功能模塊、核心的業務、算法
公共模塊
動態 執行程序 黑和測試
動態白盒:插裝—在代碼中加入print打印語句,檢查程序的中間運行結果 複雜,效率高 測試較晚,寫代碼 所有功能

優點 缺點 適用範圍
按照不同的測試手段劃分 手工 能夠主動的發現bug 重複工作量大,容易引入疲勞缺陷,只能依靠見到的界面 絕大多數的場合
自動化 可以無限制不斷重複,把人從勞動裏解放出來,提高勞動效率,提高了測試質量,能發現人不能發現的錯誤 無法發現腳本中未寫明的缺陷 GUI界面穩定
迴歸階段
需求穩定且功能已實現時才進行腳本的編寫
性能測試工具:提取相關的系統數據,構造併發用戶
測試方法組合
測試方法組合 典型案例 使用時機 特點
黑盒
黑盒靜態手工      
黑盒靜態自動化      
黑盒動態手工      
黑盒動態自動化功能測試 Mercury的QTP:用於檢測應用程序是否能夠達到預期的功能及正常運行
通過自動錄製、檢測和回放用戶的應用操作 1、能夠有效地幫助測試人員對複雜的企業級應用的不同發佈版進行測試
2、提高測試人員的工作效率和質量,確保跨平臺的、複雜的企業級應用無故障發佈及長期穩定運行
IBM Rational Robot 是功能測試工具 它集成在測試人員的桌面 IBM Rational TestManager 上,在這裏測試人員可以計劃、組織、執行、管理和報告所有測試活動,包括手動測試報告。這種測試和管理的雙重功能是自動化測試的理想開始。
Borland SilkTest屬於軟件功能測試工具 是Borland公司所提出軟件質量管理解決方案的套件之一。這個工具採用精靈設定與自動化執行測試,無論是程序設計新手或資深的專家都能快速建立功能測試,並分析功能錯誤。
基於Java語言的功能和性能測試工具 JMeter是Apache組織的開放源代碼項目 主要針對Java語言 它是功能和性能測試的工具,100%的用java實現
黑盒動態自動化性能測試 Mercury的LoadRunner:是一種預測系統行爲和性能的負載測試工具。 通過以模擬上千萬用戶實施併發負載及實時性能監測的方式來確認和查找問題 能夠對整個企業架構進行測試。通過使用LoadRunner ,企業能最大限度地縮短測試時間,優化性能和加速應用系統的發佈週期。
Microsoft Web Application Stress Tool 是由微軟的網站測試人員所開發,專門用來進行實際網站壓力測試的一套工具。 功能強大的壓力測試工具 您可以使用少量的Client端計算機仿真大量用戶上線對網站服務所可能造成的影響
webload是RadView公司推出的一個性能測試和分析工具 它讓web應用程序開發者自動執行壓力測試; webload通過模擬真實用戶的操作,生成壓力負載來測試web的性能。
白盒
白盒靜態手工      
白盒靜態自動化   檢查語法規範、語法邏輯  
白盒動態手工 目前的最流行的單元測試工具是xUnit系列框架 常用的根據語言不同分爲JUnit(java),CppUnit(C++),DUnit(Delphi ),NUnit(.net),PhpUnit(Php )等等。 該測試框架的第一個和最傑出的應用就是由Erich Gamma (《設計模式》的作者)和Kent Beck(XP(Extreme Programming)的創始人 )提供的開放源代碼的JUnit。
白盒動態自動化 Jtest是parasoft公司推出的一款針對java語言的自動化白盒測試工具,它通過自動實現java的單元測試和代碼標準校驗,來提高代碼的可靠性。parasoft同時出品的還有C++ test,是一款C/C++白盒測試工具    
灰盒
灰盒靜態手工      
灰盒靜態自動化      
灰盒動態手工      
灰盒動態自動化 BMC的APPSight 系統會將問題發生的相關信息完整錄製下來,包括問題發生的現場場景、信息及分析等,從而快速切入到問題根源  
測試管理工具 是業界第一個基於Web的測試管理系統,它可以在您公司內部或外部進行全球範圍內測試的管理。通過在一個整體的應用系統中集成了測試管理的各個部分,包括需求管理,測試計劃,測試執行以及錯誤跟蹤等功能,TestDirector極大地加速了測試過程。

1自動化測試就是用程序驅動程序的測試
2黑白灰測試的區別
測試的對象不一樣,對於代碼實現邏輯程度不一樣(黑盒不需要了解代碼實現,白盒需要完全瞭解代碼實現,灰盒需要部分了解代碼實現)
3靜態與動態測試的區別
被測程序執行與否 靜態不執行程序包括文檔評審靜態分析技術代碼走讀,動態包括黑盒測試和動態分析技術
4自動化合手工測試的不同
測試手段不同

第四章 軟件質量
1.什麼是軟件質量
質量:確定一個實體的特性滿足需求的程度
內部質量:軟件研發過程中,評價的軟件質量
外部質量:軟件上市後,用戶評價的質量
過程質量:評價軟件研發中每個過程的質量
軟件質量的三個層次
⑴流程質量,領導關注 ⑵產品質量 測試工程師關注 ⑶使用質量 用戶關注
2.質量要素
質量鐵三角 : 技術 過程 組織
3. 6大特性27個子特性ISO國際標準組織CMM/CMMI(Capability maturity model)能力程度度模型

質量模型列表
質量模型特性 子特性 特點 常見測試點 案例說明
功能性 適合性 合適的功能(用戶提出要有哪些功能)功能的必要性 驗證功能是否滿足需求的要求,檢測做沒做 打電話、聽音樂、發信息
準確性 正確的功能 需求文檔中的預期動作和預期輸出,做對沒有 信息的發送內容是否正確
互操作性 和其他軟件的互相操作 第三方軟件的交互 word文檔對打印機驅動程序的操作
保密安全性 保護信息和數據 保護得到授權的人或者系統能正常訪問相關的信息或數據 1、登錄的用戶名和密碼
2、權限使用
3、防止DOS攻擊(拒絕訪問攻擊)4、系統數據的保護和加密,如密碼的加密
5、傳輸加密,如密碼的網絡傳輸
6、防病毒
7、放溢出,如char與varchar的字符數
保證未授權的人或系統無法看到相關的信息或數據
功能性的依從性 遵循功能性相關的標準、約定或法規 是否符合國家法律規定 如色情網站
可靠性 成熟性 缺陷儘可能的少    
容錯性 提前考察的異常情況出錯問題 整個系統的外部接口 如word打印時,打印機死機出現報錯,但不影響word的使用
易恢復性 失效後恢復原有功能、性能 系統的性能測試 如網遊延遲卡死現象。系統提示內存不足。銀行系統的心跳監聽。災難備份。
可靠性的依從性 法律法規   災難備份。
易用性(CUI測試) 易理解性 (快速理解) 系統交互的信息是否準確、清晰、易懂,指導下一步操作。 系統提示信息是否準確 如網銀密碼超出位數報錯
易學性 (快速上手) 易用好學 是否有說明書、是否在線幫助、是否有提示信息 msn的幫助手冊
易操作性 (快速做完) 方便快速使用 操作的直觀程度,操作步驟、操作動作多少與時間長短 鼠標、gui層數、安裝過程
易測試性 軟件可控 提供工具給測試工程師,可以控制系統運行,以達到測試目的 windows的性能工具與服務管理工具
軟件可觀察 通過輔助手段可  
吸引性 外觀 外觀  
易用性的依從性 法律法規    
可移植性 適應性 (跨平臺、跨語言) 軟件產品無需採用有別於爲考慮該軟件的目的而準備的活動或手段就可能適應不同的指定環境的能力;是否適應其他系統環境 軟件、硬件、外設、數據庫 微軟與蘋果的前期競爭。主板與CPU
易安裝性 在指定環境中是否易於安裝 主流平臺和系統100%測試用例,非主流10% flash安裝
共存性 不同的其他系統能共同運行 1、功能是否能正常運行滿足要求
2、系統性能能滿足要求 是否會搶佔資源。迅雷和pplive搶佔資源。殺毒軟件,瑞星和金山不能共存
易替換性 替代爲其他相同功能的產品的能力 升級過後的系統是否會造成系統崩潰 軟件升級補丁升級
可移植性的依從性 法律法規    
效率-性能 時間效率 規定條件下,軟件產品執行其功能時,提供適當的響應和處理時間以及吞吐率的能力 系統的反應時間 提款機取款時間的快慢
資源效率 在規定條件下,軟件產品執行其功能時,使用合適的資源數量和類別的能力 做一件事所佔用的系統資源 電器所消耗的電能多少
效率依從性 法律法規    
維護性-維護的難易程度與成本 易分析性 軟件產品診斷軟件中的缺陷或失效原因或識別待修改部分的能力 輔助工具或者日誌文件或者常用問題幫助手冊 qq異常退出的幫助文件
易改變性 代碼容易被修復或修改 高內聚,低耦合  
穩定性 軟件產品避免由於軟件修改而造成意外結果的能力 長期的監控一個系統的運行情況和系統的資源情況 淘寶的系統監控
維護性的依從性 法律法規

配置管理
配置工具 有的話 用的工具叫什麼名字
安裝------B/S(瀏覽器)(check in /check out:原理) C/S(客戶端)

4.CMMI把企業分爲5個等級

  1. CMM與CMMI的區別
    cmmi:是不同cmm的集成,集成併發揚cmm的優點,並借鑑其他模型的優點融入新理論和實際研究成果,不僅能應用於軟件領域,而且能應用於系統過程和其他過程領域,Cmmi和cmm最大不同: Cmmi1.1版本包含4個成分:系統工程(SE)、軟件工程(SW)、應用集成產品和過程開發(IPPD)、供應商外包管理(SS) Cmmi有2種表示方法: 階段式 連續式

第五章 SQL
數據庫的價值目標:
數據庫的技術(不只是界面 還要知道數據庫邏輯 1.要對數據庫的設計理解 2.還有數據庫對象的關係3.數據庫的常見命令)
常見數據庫:MySQL Access(單機) MS-SQL(交互好) Oracle Sybase DB2
MySQL 小巧 效率高 免費
後三種Oracle Sybase DB2是大型收費,數據安全和備份好
數據庫作用:組織、存儲、處理
關係型數據庫
第一日:
關係型數據庫
數據庫的作用

索引
視圖
存儲過程
觸發器
事務 對象 優缺點 使用範圍
SQL Server具體操作
建庫
建表
備份 恢復 操作手冊: 建庫 建表 備份 恢復
第二日:
查詢命令
單表查詢
多表查詢
查詢 統計功能測試點
第三日:
新增功能 新增功能測試點
更新命令 修改功能測試點
刪除命令 刪除功能測試點
補:
存儲過程 學會構造大量測試數據
觸發器 瞭解 看懂 如何測試

RDBMS 關係型數據庫
SQL Structured Query Language 結構化查詢語言
C/S Client/Server 客戶 服務器
B/S Browser/Server 瀏覽器 服務器
第一天:
文件類型:文件存儲位置改變 程序代碼更新 對大量數據量處理不恰當
數據庫的意義”
1數據的重用(硬盤)
2檢索速度要提高(分類存儲)
3把數據與代碼的耦合度降低(數據存放位置與代碼無關)
數據庫管理系統 SQLServer
Oracle
MySQL
DB2
數據庫的表結構
1.數據分類
2.數據關聯
數據庫設計評審點
1.數據存儲是否有重複現象 不同表中是否存在相同字段(該字段既不是主鍵也不是外鍵)
2.是否符合範式要求 同一個表中存在數據重複字段不要超過兩個以上 可以保證冗餘數據很少
可以考慮有適當冗餘
3.對於業務有頻繁查詢要求的數據表
4.表間關係是否正確 是否按照業務要求進行了數據關聯
5.數據庫字段以及表的設計是否充分 數據字段內容是否涵蓋需求要求的所有數據
數據字段類型 及長度是否符合需求

表 基本組成單元 有記錄和 字段組成
表中每一條數據
存儲數據
數據分類
字段位置變化 不影響程序
索引 建立在字段上 可以對字段進行排序 同一張表索引
更新索引字段值的時候 新增會打亂索引的順序時
視圖 建立在數據庫上 封裝查詢命令 存儲數據 方便查詢調用 提示安全性 顯示結果固定
如果在執行事務時沒有執行完就實行事務回滾
事務:是有兩條以上的數據庫命令組成的原子集合.該事務中的那條命令要麼一次性執行成功,要麼都不執行,如果在執行過程中執行失敗那麼該事務就進行回滾,將數據恢復到執行之前的狀態
是否存在某些業務要封裝成事務?
優點:可以保證有關聯的數據庫操作所對應的關聯所需要的完整性和統一性
缺點:不要將不相關的操作放在同一個事務中,否則會降低執行成功率和效率

存儲過程 存儲過程封裝了多條SQL命令,必須存放在數據庫服務端
優點: 減少了網絡傳輸SQL命令的壓力
提高了訪問的安全性
SQL 命令存放在服務器端執行效率高
缺點:需要編寫和設計調試 它是一段程序 對於大批量的數據較弱 避免分支和循環
觸發器 自動執行 並且只能對一張表中進行觸發 當某一張中發生操作時需要同時對其讓表的數據進行操作可以考慮創建觸發器

過程:
檢查SQL服務是否啓動
圖形界面建庫 建表
企業管理器
命令行方式
查詢分析
主鍵 用一標記該表中的記錄 不能重複 不能爲空
外鍵 通過外鍵與其他表中的數據進行關聯 只能是以存在主鍵值

當前表的數據要被其他表使用時 要有主鍵
外鍵 有主鍵存在時就要設置對應的外鍵

搭建測試環境時或給用戶安裝產品
海達票務處理
C/B 建立空庫hdpw1
恢復
安裝服務器端
安裝客戶端
admin admin

約束:
1主鍵約束
1 主鍵約束 primary key
–特點:約束的字段數據,不能爲空、不能重複。
如果插入或者更新的數據爲空或者重複將不允許進行操作。

–語法:
1)不命名的主鍵約束
create table student
(
No int primary key,
Name char(10),
Sex char(2),
ruxu datetime
);
2)命名的主鍵約束
create table student
(
No int,
Name char(10),
Sex char(2),
ruxu datetime,
constraint pk_001 primary key(No)
);
3)刪除主鍵約束
–語法:alter table 表名 drop constraint 約束名;
alter table student drop constraint pk_001;
4)改主鍵約束
–語法:alter table 表名 alter column 字段名 類型 not null;
–alter table 表名 add constraint 約束名 primary key (字段名);
alter table student alter column No int not null;
alter table student add constraint PK_002 primary key(No);
2 非空約束 not null
1)增加非空約束
create table student1
(
No int not null,
Name char(10),
Sex char(2),
ruxu datetime
);

2)改非空約束
alter table student1 alter column Name char(10) not null;
3 外鍵約束 FOREIGN KEY
–新增外鍵關係
1)非命名的外鍵約束
create table grade
(
no int foreign key references student(No),-- 字段名 字段類型 foreign key references 主表(主鍵字段)
grade float
);
2)命名的外鍵約束
create table grade
(
No int,
grade float,
constraint fk_001 foreign key (no) references student(no)
);
3)刪除外鍵約束
alter table grade drop constraint fk_002;
4)改外鍵約束
alter table grade add constraint FK_002 foreign key(no) references student(no) on delete cascade; --當主表進行數據刪除時,從表一起刪除
alter table grade add constraint FK_002 foreign key(no) references student(no) on update cascade; --當主表進行數據更新時,從表一起更新
alter table grade add constraint FK_002 foreign key(no) references student(no) on delete no action; --當主表進行數據刪除時,違反了外鍵約束,拒絕進行刪除操作
alter table grade add constraint FK_002 foreign key(no) references student(no) on update no action; --當主表進行數據更新時,違反了外鍵約束,拒絕進行更新操作
4 默認約束
–default 當 一個字段不填寫內爲空時,默認插入一條數據
1)增加default 約束
create table sex
(
id int,
sex char(2) default ‘男’
);
2)改 default 約束
5 檢查約束 check
–只有滿足檢查約束的數據才能添加到表中,不滿足的加不進來
1)不命名的檢查約束
create table balance
(
id int,
money float check (money >= 0)
);

2)命名的檢查約束
create table balance
(
id int,
money float,
constraint CK_001 check (money >= 0)
);
3)刪除檢查約束
alter table balance drop constraint ck_001;

4)改檢查約束
alter table balance add constraint CK_002 check (money >= 0);
6 唯一約束 unique
–對於字段輸入的內容必須是唯一的,不能重複,但可以爲空,多個字段都可以輸入唯一約束
1)不命名唯一約束
create table tiger
(
tig_id int,
tig_name char(10) unique
);

2)命名唯一約束
create table tiger
(
tig_id int,
tig_name char(10),
constraint UN_001 unique(tig_name)
);

3)刪除唯一約束
alter table tiger drop constraint UN_001;
4)改唯一約束
alter table tiger add constraint UN_002 unique(tig_name);
SQL語句
創建數據庫.
語法:create database 數據庫名字;
數據庫名字不能使用數字作爲開頭。可以使用字母或者_作爲開頭
create database _51testing;

開闢兩塊空間,一個是保存日誌的,一個是保存表的
刪庫 DROP DATABASE 庫名;
單行註釋 ——
多行註釋 /* */
切換數據庫
語法:use 數據庫名;
use _51testing;
轉換當前使用數據庫
備份數據庫
BACKUP DATABASE 庫名 TO DISK=’文件名’;
如BACKUP DATABASE xuanke TO DISK=’d:\test.bak’;
恢復數據庫
RESTORE DATABASE 庫名 FROM DISK=’文件名’;
如RESTORE DATABASE xuanke FROM DISK=’D:\test.bak’;
表、字段、類型
建表
語法:create table 表名字 ( 字段名 字段類型 字段約束 , 字段名 字段類型 字段約束 );
create table tmp
(
NO int primarykey,
NAME char(10)
);
字段約束可以沒有
刪除表
語法:drop table 表名
注意:外鍵約束
drop table grade
建立外鍵
Sid INT FOREIGN KEY (sid) REFERENCES student (sid)
CREATE DATABASE xuanke1;
USE xuanke1;
–DROP database xuanke1;
CREATE TABLE student1
(sid INT PRImary KEY,
sname CHAR(20) NOT NULL,
sex CHAR(2) NOT NULL CHECK(sex IN (‘男’,‘女’)),
card_id CHAR(20) NOT NULL unique CHECK(len(card_id) = 18),
calss ChAR(20) NOT NULL,
major CHAR(20) NOT NULL,
birth_year INT CHECK(birth_year BETWEEN 1900 And 3000) NOT NULL,
enrollment DATETIME NOT NULL,
tel CHAR(20)
)
CREATE TABLE course1
(
cid INT PRIMARY KEY,
cname CHAR NOT NULL,
tname CHAR(20) NOT NULL,
ctime DATETIME NOT NULL,
cadress CHAR(20) NOT NULL,
pre_course_id INT,
)
CREATE TABLE student_course1
(
sid INT FOREIGN KEY (sid) REFERENCES student1 (sid),
cid INT FOREIGN KEY (cid) REFERENCES course1 (cid) PRIMARY KEY(sid,cid),
grade INT
)
插入一條記錄
在表中增加數據(insert into)
語法:
1對錶中所有的字段添加數據:insert into 表名 values (第一個字段的值,第二個字段的值,第三個字段的值…);
注意1:values 值得個數一定要和表中字段的個數相等,一一對應。
注意2:values 值得數據類型,必須要和表中字段的數據類型相匹配。int fload 值是數字,如果char 值得字符要用’值’。
注意: 英文單引號 逗號 ,日期 要加單引號

insert into student values (5,‘鄭佳祺’,‘男’,‘003’,‘2011-08-23’,‘北京’,‘1979-01-01’);
insert into student values (6,’’,‘男’,‘003’,‘2011-08-23’,‘北京’,‘1979-01-01’);
insert into student values (7,‘龐鵬珏’,‘男’,3,‘2011-08-23’,‘北京’,‘1979-01-01’);

2對錶中指定字段添加數據:insert into 表名(字段1,字段2,字段3) values (值1,值2,值3);
insert into student(stuid,stname,sex,family) values (8,‘齊倩’,‘女’,‘天津’);
insert into student(stuid,stname,sex,family,birthday) values (9,‘例子1’,‘女’,‘天津’,’’);
insert into student(stuid,stname,sex,family,class) values (10,‘例子2’,‘女’,‘天津’,’’);
insert into student(stuid,stname,sex,family,class) values (11,‘例子3’,‘女’,‘天津’,NULL);
insert into student(stuid,stname,sex,family,class) values (12,‘例子4’,‘女’,‘天津’,‘NULL’);
刪除數據
語法:1.delete from 表名
注意: 刪除表中數據時要考慮約束。
同樣用法 truncate table 表名
delete from grade
truncate table grade;
2.delete from 表名 [where 條件]
delete from student where stname = ‘例子1’;
1)單一條件
DELETE FROM student WHERE sid=500;
2)複合條件
DELETE FROM student WHERE sex=‘男’ AND major=‘計算機’;
DELETE FROM student WHERE major=‘計算機’ OR major=‘1’;
DELETE FROM student WHERE sid BETWEEN 1 AND 500;
DELETE FROM student WHERE sid>=1 AND sid<=500;
3)模糊條件
DELETE FROM student WHERE major LIKE ‘計算機%’; ———— % 通配符(計算機後面任意位任意字符)
DELETE FROM student WHERE major LIKE ‘%務’;
DELETE FROM student WHERE class LIKE ‘4%期’;
DELETE FROM student WHERE class LIKE ‘4_期’; ———— _ 通配符(4後面一位的任意字符)
DELETE FROM student WHERE sname LIKE ‘[xw]%’; ———— [] 從括號中取任意一個值
Truncate table student 刪除student表記錄內容 但是後面不能加條件(不記錄日誌,速度快)
更新表數據(修改一條記錄)
更新表數據
–語法:update 表名 set 字段 = 值,字段2=值[where 條件]
–注意1:字段類型 和 值得類型 要匹配,主鍵的值可以被修改
–注意2:爲了保證表數據的完整一直,最好在更新是增加WHERE 條件。
select * from student
update student set sex = ‘男’ ;
update student set sex = ‘女’ where family = ‘天津’
update student set family = ‘廣州’ where family = ‘北京’
將學號小於50的記錄的入學時間更改爲2011-5-18
UPDATE student SET enrollment=‘2011-5-18’ WHERE sid<50;
將‘計算機’專業的學生轉成“計算機科學與技術”
UPDATE student SET major=‘計算機科學與技術’ WHERE major LIKE ‘計算機’;
將專業爲“信管”開頭和“汽車”開頭的專業轉成“自動化控制”
UPDATE student SET major=‘自動化控制’ WHERE major LIKE ‘信管%’ OR major LIKE ‘汽車%’;
將所有省爲“北京”和“北京市”的記錄統一成“北京”,並將這些記錄的班級改成49期
UPDATE student SET province=‘北京’,class=‘49期’ WHERE province LIKE ‘北京%’;
將入學時間大於1985-1-1記錄的出生時間改爲比入學年月早18年
UPDATE student SET borth_year=year(enrollment)-18 WHERE enrollment > ‘1985-1-1’;
year() 是求DATE類型的年份
查詢
簡單的查詢記錄基礎語法
基礎語法 select 查詢的內容(也就是字段名1,字段名2) from 表名 where 條件
(用*號可以顯示所有字段)
查詢李進峯的所有基本信息
SELECT * FROM student WHERE sname=‘李進峯’;
查詢李進峯和菲菲的所有基本信息
SELECT * FROM student WHERE sname=‘李進峯’ OR sname=‘菲菲’;
SELECT * FROM student WHERE sname IN (‘李進峯’, ‘菲菲’);
查詢所有姓張的同學的所有基本信息
SELECT * FROM student WHERE sname LIKE ‘張%’;
查詢姓名中有“宇”的同學的所有信息
SELECT * FROM student WHERE sname LIKE ‘%宇%’;
查詢姓名長度爲3,第一個字爲“李”最後一個字是“照”的記錄
SELECT * FROM student WHERE sname LIKE ‘李_照’;
查詢所有姓張和姓李的同學的學號和姓名以及出生年月
SELECT sid,sname,borth_year FROM student WHERE sname LIKE ‘張%’ OR sname LIKE ‘李%’
SELECT sid,sname,borth_year FROM student WHERE sname LIKE [張李]%’;
查詢姓“楊”並且所在省份爲“河北省”的同學的學號
SELECT sid FROM student WHERE sname LIKE ‘楊%’ AND province=‘河北省’;
查詢”北京”、”湖南”和”河南省”同學的所有信息
SELECT * FROM student WHERE province=’北京’ OR province=‘湖南’ OR province=‘河南省’
SELECT sid,sname,borth_year FROM student WHERE province IN (‘北京’, ‘湖南’, ‘河南省’);
查詢姓“”李但是所在省份沒有“湖南”字樣的同學的省份證號碼
SELECT card_id FROM student WHERE sname LIKE ‘李%’ AND province NOT LIKE ‘%湖南%’
查詢18歲(不含18)以前上學的同學的姓名和電話
SELECT sname,tel FROM student WHERE year(enrollment)-borth_year<18;
查詢所有大於25歲的人的所有信息
SELECT * FROM student WHERE year(getdate())-year(enrollment)>25;
通配符
使用環境,用於模糊查詢,連接符號用Like 而非 =

  • 代表全部,所有,沒有規定數量和內容。一般用於select 後面 不作爲條件
    _ 代表一個字符,一個數據位。中文要用兩個__ 。作爲條件使用
    % 代表任意的,沒有規定數量和內容。作爲條件使用
    [值1,值2,值3] 從括號內的任意值。作爲條件使用
    select * from student where stname like ‘張%’
    select * from student where stname like ‘[張李]%四’
    運算符。條件
    – = 兩邊內容相同。
    – > 左邊大於右邊。
    – < 右邊大於左邊。
    – >= 左邊大於等於右邊。
    – <= 右邊大於等於左邊。
    – <> 或者 != 不等於
    – between A and B 介於 A 和 B 之間,並且 >=a <=b .前面的數要小於後面的數,包含邊界數的。
    select * from grade where coursegrade = 80
    select * from grade where coursegrade between 80 and 100
    條件關聯
    – 條件1 and 條件2 :要同時滿足條件1 和 條件2 是並且的關係。
    – 條件1 or 條件2 :只要滿足一個條件就可以 是或的 關係。
    – () :先去執行括號中得條件
    – 字段 in (值1,值2,值3) :字段的內容要滿足 值1 或 值2 或 值3
    select * from student where family = ‘北京’ and stname like ‘張%’
    select * from student where family in (‘上海’,‘天津’)
    排序
    –對查詢到的結果按照升序或者降序的方式進行排列。
    –語法 order by 字段 排序方式 (desc,asc) asc 可以省略
    –注意:order by 一定要寫在所有查詢sql 的最後面
    select * from grade order by coursegrade
    聚合函數
    對查詢的結果中某個字段進行函數運算
    sum(字段) :求和函數 字段需爲數字類型
    avg(字段) :求平均值 字段需爲數字類型.不會計算爲空的條目。
    min(字段) :最小的值
    max(字段) :最大的值
    count(字段) :統計字段的個數,這裏可以使用 * ,統計所有結果的行數。
    distinct(字段) :去重複
    注:聚合函數,不能放在WHERE中,需要放在HAVING裏
    – 顯示學生的總成績
    select sum(coursegrade) from grade
    – 顯示最高的成績是多少
    select min(coursegrade) from grade
    select avg(coursegrade) from grade
    select * from grade
    select count(*) from student
    DISTINCT 去除重複行
    SELECT DISTINCT province FROM student;

別名AS (Alias)
as 臨時別名
列別名在WHERE中不能使用 GROUP BY 中不能使用 ORDER BY 中可以
表別名可以在任何地方使用
select class, sex, count(sex) as數量 FROM student GROUP BY class,sex ORDER BY class;
select count(*) as 學生個數 from student
select stname as 姓名,stuid as 學號from student
SELECT和ORDER BY 不影響表中數據 所以可以使用別名
分組裏加WHERE和ORDER BY

對真空的處理
查詢爲空的字段 : 字段名 is null
查詢 不爲空的字段 : 字段名 is not null
select * from grade
select * from grade where coursegrade is not null

–統計每個課程的選修人數大於2個人的信息
對課程分組,顯示課程和對應的人數
select couid,count(stuid) from grade group by couid having count(stuid) >2
–統計<學生選修信息表>,統計每個同學的總成績
統計記錄條數 count?
查多少名學生
SELECT count(*) FROM student
查有多少種班級
SELECT count (DISTINCT class) FROM student;
查入學時間在1990-1-1到2000-12-31的學生個數
SELECT count(enrollment) FROM student WHERE enrollment BETWEEN ‘1990-1-1’ AND ‘2000-12-31’ ;
分組查詢 GROUP BY
先對查詢內容進行分組、分類,然後在對一個組中的數據進行查詢或者運算
select 查詢的內容 from 表名 group by 字段名
select stuid,sum(coursegrade) from grade group by stuid
select * from grade
select stuid,sum(coursegrade) from grade where coursegrade is not null group by stuid
分組前條件
在group by 之前使用where 條件去選取數據
分組後條件
在 group by 分組後 + having 條件
select stuid,sum(coursegrade) from grade where coursegrade is not null
group by stuid having sum(coursegrade) >=200
–統計<學生信息表>,統計每個班級中每種性別的學生人數
select * from student
–統計按照性別分得學生人數
select sex,count(stuid) from student group by sex
–統計<學生信息表>,統計每個班級中每種性別的學生人數,兩個分組條件
–統計<grade表>,統計每門課程的平均成績,並按照成績降序排序
select couid,avg(coursegrade) from grade group by couid order by avg(coursegrade) desc

RIGHT函數
取身份證最後5位數
SELECT right(card_id, 5) FROM student;
將身份證補齊20位,前面用0補
SELECT right(‘00’+card_id, 20) FROM student;
SELECT ‘00’+card_id FROM student;
LEFT函數
取身份證的前10位
SELECT left(card_id, 10) FROM student;
將學號小於50的電話設置成NULL
UPDATE student SET tel = NULL WHERE sid< 50;
將電話爲NULL的學生信息查詢出來
SELECT * FROM student WHERE tel IS NULL;
判斷條件是NULL的時候不能用= 要用IS IS NOT
HAVING
分組查詢中,如果條件中有聚合函數,不能放在WHERE中,需要放在HAVING裏
查詢平均出生年>1991的班級信息
SELECT class,avg(borth_year) FROM student GROUP BY class HAVING avg(borth_year) > 1991 ;
統計哪些班級男生平均年齡大於20
SELECT calss FROM student WHERE sex=’男’ GROUP BY class HAVING avg(year(getdate())-borth_year)>20;
優先級WHERE——GROUP BY——HAVING——PRDER BY
查詢學生的姓名和出生年,年齡最大的放前面
SELECT sname, borth_year FROM student ORDER BY borth_year ;
TOP 查詢結果去前幾個結果
查詢年齡最大的學生信息 年齡最大的前10名
SELECT TOP 1 sname, borth_year FROM student ORDER BY borth_year ;
SELECT TOP 10 sname, borth_year FROM student ORDER BY borth_year ;
查詢年齡最小的學生信息 年齡最大的前10名
SELECT TOP 1 sname, borth_year FROM student ORDER BY borth_year DESC;
SELECT TOP 10 sname, borth_year FROM student ORDER BY borth_year DESC;
查詢按照學號排序,前50個學生的信息
SELECT TOP 50 * FROM student ORDER BY sid;
查詢最近入學的10名學生信息
SELECT TOP 10 * FROM student ORDER BY enrollment DESC;
關聯查詢(等值聯接)
內連接 等值連接
外連接 1、左連 2、右連
多表關聯
1內連接 等值連接 inner join
語法 select 內容 from 表1 inner join 表2 on 等值條件
select * from student inner join grade on grade.stuid = student.stuid
select grade.couid,couname,coursegrade from grade inner join course on grade.couid = course.couid
2外連接 outer join
1)左連 select 內容 from 表1 left outer join 表2 on 條件
2)右連 select 內容 from 表1 right outer join 表2 on 條件
select * from grade outer join student on student.stuid = grade.stuid
注:左連接 以 outer join 左邊的表爲準,要顯示全部的左邊表的數據,如果右邊表沒有關聯的數據顯示Null 與右邊表比較 當右邊表沒有值時 只取左邊表的記錄
select * from student right outer join grade on student.stuid = grade.stuid
注:右連接 以 outer join 右邊的表爲準,要顯示全部的右邊表的數據,如果左邊沒有關聯數據,顯示Null
多表關聯
語法:select 內容 from 表1,表2,表3 where 條件
select stname,couname,coursegrade from student,course,grade
where student.stuid = grade.stuid and course.couid= grade.couid and coursegrade >80
select * from grade
–所有男同學的平均成績
select avg(coursegrade) from student,grade where student.stuid = grade.stuid and sex = ‘男’ and coursegrade is not null
select * from student
3子查詢,嵌套查詢
–當某一個查詢的條件,是在另一個查詢的結果集裏面時,使用嵌套查詢
–查詢李四的成績。
select * from grade where stuid = (select stuid from student where stname =‘李四’)
–查詢 張三和李四的成績
select * from grade where stuid in
(select stuid from student where stname =‘張三’ or stname = ‘李四’)
select * from grade where stuid = (select stuid from student where stname =‘張三’)
or stuid = (select stuid from student where stname =‘李四’)
–有考試成績在 70~90的學生的姓名
select stname from student where stuid in
(select stuid from grade where coursegrade between 70 and 90)
批量處理?
DECLARE @sid INT 申請一個變量
DECLARE @card_id CHAR(18)
SET @sid=1 賦初值
SET @card_id = ‘000000000000’+right(‘00000’+convert(VARCHAR(6),@sid),6) convert 強制轉換數據類型
PRINT @sid
PRINT @card_id
INSERT INTO student2 VALUES (@sid,‘蔣豔梅’,‘女’,‘49期’,‘計算機’,@card_id,1999,‘1999-9-9’,‘1111111’,‘1111’)

CREATE PROCEDURE btInsert AS 或者 CREATE PROC btInsert AS --(保存一個過程)
DECLARE @sid INT
DECLARE @card_id CHAR(18)
SET @sid = 1
WHILE (@sid <= 100000)
BEGIN
SET @card_id=’1111111111111’+right(‘00000’+convert(VARCHAR(6),@sid),6)
INSERT INTO student2 VALUES (@sid,‘蔣豔梅’,‘女’,‘49期’,‘計算機’,@card_id,1999,‘1999-9-9’,‘1111111’,‘1111’)
SET @sid = @sid +1
END
EXECUTE btInsert 或者 EXEC btInsert (執行已經保存的過程)
視圖/虛表 view
創建視圖 create view 視圖名 as (SQL)
create view tiger as (
select stname,couname,coursegrade from student,grade,course
where student.stuid = grade.stuid and grade.couid = course.couid)
–注意1.視圖中不保存數據,不保存表結構,不保存表,沒有約束。只保存sql 語句。
–注意2.視圖可以當表來使用,可以用視圖去建視圖。但是,不建議做 增 刪 改的操作。
–注意3.刪除視圖時,不會影響到原來的基礎表。可以直接在視圖中使用SELECT
create view big_tiger as (select stname,coursegrade from tiger )
delete from big_tiger where coursegrade is null
刪視圖
–語法:drop view 視圖名
drop view big_tiger
drop view tiger

視圖的優點
–1.對於使用sql 不熟練來說。視圖是個很簡單的查詢途徑
–2.對於經常重複的複雜sql,使用視圖可以提高查詢效率
–3.可以輔助用於權限管理,提高數據的安全性
–4.幫助保護表和數據的完整一致性

視圖的缺點
–1.降低了查詢效率
–2.增加保存空間
–3.無法對數據和表進行操作。使得操作測試不方便進行。
create view cll as (
select class,count(stuid) as 人數 from student group by class
)
select * from cll where 人數 = 2

–視圖在企業中如何應用
1.對於測試而言,降低測試的複雜度。例如:複雜 sql 寫一次保存視圖,以後都直接調用視圖。
2.對於測試而言,降低工作難度。例如:新來的新人可能對錶結構不熟悉,對sql 也不熟悉,使用視圖可以儘快上手開始工作。
3.對於開發而言,降低服務器的工作。提高服務器運行效率。例如:如果不用視圖,查詢語句要在服務器端生成傳給數據庫。如果使用視圖,服務器直接查詢視圖就可以滿足查詢功能。
4.對產品設計和業務人員而言,降低了工作難度,不用學習和使用複雜sql 語言。例如:如果產品或者業務人員想去查詢某些指定的數據時,只要讓開發或測試人員建一個視圖。直接去查詢視圖就可以了。
索引
–索引就像目錄,表中對於一個字段的目錄結構。如果想操作表中的數據,先在索引字段中找到那一行,然後再去操作那一條數據。
–注意1:建議索引設置在主鍵、外鍵、唯一約束,效率高
–注意2:索引是應用於查詢條件的。經常使用的查詢條件字段,應該被設置爲索引字段。
–注意3:一個表中可以有多個索引,索引之間可以交叉字段,一個索引可以有多個字段。

索引的優點:
–1.提高查詢效率
–2.提高了排序效率

索引的缺點:
–1.佔用數據庫資源
–2.降低了對數據庫增、刪、改的效率

索引在企業中如何應用:
–1.頁面上如果有很多的查詢條件並且需要排序時,建議一一創建索引。
–2.檢查是否主鍵和外鍵、唯一約束建立了索引關係。
–3.在測試過程中應該檢查,運行查詢條件時是否使用了索引。
–4.測試中檢查,平凡被更新的表,不要設置太多的索引。

–建索引
–語法:create index 索引名 on 表(字段,字段…);
create index suoyin1 on student(stname,family);

–刪索引
–語法:drop index 表名.索引名
drop index student.suoyin
存儲過程 procedure
–把一些sql 放在一起執行,並且有邏輯的執行。存儲過程。
–語法1:簡單的無參數存儲過程。
– create procedure 存儲過程名 as sql語句
create procedure aa as
update grade set couid = 6 where couid =1;
update course set couid = 6 ,couname = ‘生物’ where couid =1;

執行存儲過程
–語法 exec 存儲過程名
exec aa;

select * from grade;
select * from course;

語法2:有參數的存儲過程
– create procedure 存儲過程名 (@參數1 參數類型,@參數2 參數類型…) as sql語句
create procedure BB (@id int,@NewId int,@name char(10))
as
update grade set couid = @NewId where couid = @id;
update course set couid = @NewId ,couname = @name where couid =@id;

執行存儲過程
–語法 exec 存儲過程名(參數1,參數2,參數3)  
SQL SERVER 參數不加括號
–注意1.參數的個數和 數據類型必須與定義相一致
–注意2.存儲過程中的sql 是按照順序執行的
–注意3.當存儲過程中一個sql失敗時。不會影響其他sql的執行。
exec BB 3,13,‘SQL SERVER’
alter table grade add constraint CH check (couid < 20)
update grade set couid = 21 where couid = 13;
exec BB 13,21,‘ORACLE’
create database bank;
use bank;
create table bj_bank
(
name char(10),
money int check(money>=0)
constraint pk_nanme_bj primary key (name)
事務 transaction
把所作的操作放在一組,如果有一個失敗就全失敗,都成功時候才成功
事務是存儲過程的一個部分,存儲過程的一個寫法
– begin transacion 事務名
– commit transacion 事務名
– rollback transacion 事務名
create procedure zz1
(
@a_name char(10),
@b_name char(10),
@a_money int,
@b_money int,
@c_name char(10)
)
as
begin transaction c1 --開始事務c1
if (select money from bj_bank where name = @a_name) > 0 --判斷a賬戶
begin
update bj_bank --從a中減去
set money=money-@a_money
where name=@a_name;
update zs_bank --向c中添加
set money=money+@a_money
where name=@c_name;
commit transaction c1
end
else
rollback transaction c1 --如果判斷失敗回滾所有操作

begin transaction c2 --開始事務c2
if (select money from bj_bank where name = @b_name) > 0 --判斷b賬戶
begin
update bj_bank --從b中減去
set money=money-@b_money
where name=@b_name
update zs_bank --向c中添加
set money=money+@b_money
where name=@c_name
commit transaction c2
end
else
rollback transaction c2 --如果判斷失敗回滾所有操作

update bj_bank set money = 5000 where name = ‘a’;
update bj_bank set money = 1000 where name = ‘b’;
update zs_bank set money = 0 where name = ‘c’;

exec zz1 a,b,250,600,c
select * from bj_bank
union
select * from zs_bank
exec zz2 a,b,500,700,c
exec zz2 a,b,1000,500,c

存儲過程 zz2 開始
create procedure zz2
(
@a_name char(10),
@b_name char(10),
@a_money int,
@b_money int,
@c_name char(10)
)
as
begin transaction guopeng
if (select money - @a_money from bj_bank where name = @a_name) >= 0
begin
update bj_bank set money = money - @a_money where name = @a_name;
update zs_bank set money = money + @a_money where name =@c_name;
commit transaction guopeng;
end
else
begin
rollback transaction guopeng;
end
begin transaction qiqian
if (select money - @b_money from bj_bank where name = @b_name) < 0
begin
rollback transaction qiqian;
end
else
begin
update bj_bank set money = money - @b_money where name = @b_name;
update zs_bank set money = money + @b_money where name =@c_name;
commit transaction qiqian;
end
存儲過程zz2 結束
存儲過程循環。大批量的製造測試數據。
create procedure ww
(
@name char(10),
@money int,
@count int
)
as
declare @num int;
set @num = 0;
while (@num < @count)
begin
insert into bj_bank values (@name,@money);
set @num = @num +1;
end;
drop procedure ww
alter table bj_bank drop constraint pk_nanme_bj
exec ww ‘王沙’,900,1000000;
select * from bj_bank where money = 30
truncate table bj_bank

–存儲過程在企業中如何應用:
–1.對於開發、對於測試而言,存儲過程簡化了工作難度。
–2.對於開發、測試而言,存儲過是可以實現邏輯的。
–3.對於測試而言,幫助我們大批量的生成測試數據。
–4.對於測試而言,幫助我們去檢查對數據庫的操作數據是否符合預期
–5.對於開發而言,存儲過程支持事務,可以做邏輯編程

–刪除存儲過程
–語法 drop procedure 存儲過程名
drop procedure ww
觸發器 trigger
當滿足觸發條件時,執行後面的觸發sql,支持事務
語法: create trigger 觸發器名 on 工作表表名 for 觸發方式 as sql語句
觸發條件 delete,update 觸發條件因數據庫而異
create trigger trigger_student_delete
on student
for delete
as
delete grade from grade,deleted where grade.stuid = deleted.stuid;
select * from student
select * from grade
delete from student where stuid = 1
alter table grade drop constraint FK__grade__stuid__7D78A4E7
練習
一、單表查詢練習
1、查詢<學生信息表>,查詢學生"張三"的全部基本信息
Select * from student where stname=’張三’;
2、查詢<學生信息表>,查詢學生"張三"和”李四”的基本信息
select * from student where stname in (‘張三’,‘李四’)
3、查詢<學生信息表>,查詢姓"張"學生的基本信息
select * from student where stname like ‘張%’;
4、查詢<學生信息表>,查詢姓名中含有"四"字的學生的基本信息
select * from student where stname like ‘%四%’;
5、查詢<學生信息表>,查詢姓名長度爲三個字,姓“李”,且最後一個字是“強”的全部學生信息。
select * from student where stname like ‘李_強’;
6、查詢<學生信息表>,查詢姓"張"或者姓”李”的學生的基本信息。
select * from student where stname like ‘張%’ or stname like ‘李%’;
7、查詢<學生信息表>,查詢姓"張"並且"所屬省份"是"北京"的學生信息
select * from student where stname like ‘張%’ and family =‘北京’;
8、查詢<學生信息表>,查詢"所屬省份"是"北京"、”新疆”、”山東”或者"上海"的學生的信息
select * from student where family in (‘北京’,‘新疆’,‘山東’,‘上海’);
9、查詢<學生信息表>,查詢姓"張",但是"所屬省份"不是"北京"的學生信息
select * from student where family!=‘北京’ and stname like ‘張_’;
10、查詢<學生信息表>,查詢全部學生信息,並按照“性別”排序,性別相同的情況下按照“所屬省份”排序,所屬省份相同的情況下再按照“班級”排序
select * from student order by sex,family,class; (多個排序條件,用逗號以此分開,先排第一個、再排第二個。。。。)
11、查詢<學生信息表>,查詢現有學生都來自於哪些不同的省份
select distinct (family) from student;
(注意distinct使用方法)
12、查詢<學生選修信息表>,查詢沒有填寫成績的學生的學號、課程號和成績
select couid,couid,coursegrade from grade where coursegrade is null;
13、查詢<學生選修信息表>,查詢全部填寫了成績的學生的選修信息,並按照“成績”從高到低進行排序
select * from grade where coursegrade is not null order by coursegrade desc;
二、聚合函數練習
1、統計<學生信息表>,統計共有多少個學生
select count(stname) from student;
2、統計<學生信息表>,統計年齡大於20歲的學生有多少個
select count(stname) from student where (year(getdate())-year(birthday))>20;
3、統計<學生信息表>,統計入學時間在1998年至2000年的學生人數
select count(stuid) from student where year(enrollment) between 1998 and 2000;
4、統計<學生選修信息表>,統計學號爲"S001"的學生的平均成績
select avg(coursegrade) from grade where stuid=‘1’;
5、統計<學生選修信息表>,統計學號爲"S001"的學生的總成績
select sum(coursegrade) from grade where stuid=‘1’;
6、統計<學生選修信息表>,查詢課程號爲”C001”的課程的最高成績
select max(coursegrade) from grade where couid=‘1’;
7、統計<學生信息表>,查詢所有學生中的最大年齡是多少
select max((year(getdate())-year(birthday))) from student;
三、分組查詢練習
1、統計<學生選修信息表>,統計每個課程的選修人數
select count(*) from grade group by couid;
2、統計<學生選修信息表>,統計每個同學的總成績
select sum(coursegrade) from grade group by stuid;
3、統計<學生信息表>,統計每個班級中每種性別的學生人數,並按照班級排序
select class,sex,count(stuid) from student group by sex,class order by class;
4、統計<學生選修信息表>,統計每門課程的平均成績,並按照成績降序排序
select avg(coursegrade) from grade group by couid order by avg(coursegrade) desc;
5、統計<學生選修信息表>,顯示有兩門以上課程不及格的學生的學號
select stuid from grade where coursegrade<60 group by stuid having count(stuid)>2;
6、統計<學生信息表>,統計每個班級中的最大年齡是多少
select max(year(getdate())-year(birthday)) from student group by class ;
四、嵌套查詢練習
1、用子查詢實現,查詢選修“高等數學”課的全部學生的總成績
select sum(coursegrade) from grade where couid=(select couid from course where couname=‘高等數學’);
2、用子查詢實現,統計<學生選修信息表>,顯示學號爲"S001"的學生在其各科成績中,最高分成績所對應的課程
思考:如果該學號學生有兩個課程分數都爲最高的100分,查詢會有什麼結果(顯示2個結果)
select couname from course where couid=(select couid from grade where coursegrade in (select max(coursegrade) from grade where stuid=1)
3、用子查詢實現,查詢2班選修"數據庫技術"課的所有學生的成績之和
select sum(coursegrade) from grade where stuid in(select stuid from student where class=‘002’) and couid=(select couid from course where couname=‘數據庫技術’);
4、用子查詢實現,查詢3班"張三"同學的"測試管理"成績
select coursegrade from grade where stuid in (select stuid from student where class='003’and stname=‘張三’) and couid=(select couid from course where couname=‘測試管理’);
五、聯接查詢練習
1、查詢"張三"的各科考試成績,要求顯示姓名、課程號和成績
select stname,couid,coursegrade from student inner join grade on student.stuid=grade.stuid and stname=‘張三’;

select stname,couid,coursegrade from student,grade where student.stuid=grade.stuid and stname=‘張三’;
2、查詢"張三"的各科考試成績中,哪科沒有記錄考試成績,要求顯示姓名、課程號和成績
select stname,couid,coursegrade from student inner join grade on student.stuid=grade.stuid and stname='張三’and coursegrade is null;

select stname,couid,coursegrade from student,grade where student.stuid=grade.stuid and stname='張三’and coursegrade is null;
3、查詢"張三"的各門課程成績,要求顯示姓名、課程名稱和成績
select stname,couname,coursegrade from student,course,grade where student.stuid=grade.stuid and course.couid=grade.couid and stname=‘張三’;
4、查詢3班"張三"的"測試管理"成績,要求顯示姓名、成績
select stname,coursegrade from student,course,grade where student.stuid=grade.stuid and course.couid=grade.couid and couname=‘測試管理’ and stname='張三’and class=003;
5、查詢所有2000年以前入學的,各班男生的各科考試平均成績
select class,avg(coursegrade) from grade,student where grade.stuid=student.stuid and sex='男’and year(enrollment)<2000 group by class ,couid;
六、外聯接查詢
查詢”李堅強”所有課程的成績,並顯示學號、姓名、課程號和成績,沒有成績記錄的學號包括:(‘S009’,‘S010’,‘S011’)
1、使用右聯接
select grade.stuid,stname,couid,coursegrade from grade right outer join student on student.stuid=grade.stuid and stname=‘李堅強’;
2、使用左聯接
select grade.stuid,stname,couid,coursegrade from student left outer join grade on student.stuid=grade.stuid and stname=‘李堅強’;
3、對比等值連接
select grade.stuid,stname,couid,coursegrade from grade inner join student on student.stuid=grade.stuid and stname=‘李堅強’;
七、補充提高
1、查詢“張三”比“王三”入學早幾年
select year(enrollment)-(select year(enrollment) from student where stname=‘王三’) from student where stname='張三;
2、查詢所在班級和該班內學生的年齡之和,其中每個人的年齡都大於20歲,每個班的年齡之和大於60歲
select class,sum(year(getdate())-year(birthday)) from student group by class;

第六章 C語言
ATM機
1.取錢 2.存錢 3.查詢餘額 4.轉賬

作業1:存錢、查詢、轉賬的流程圖

軟件模塊結構圖
需求:十進制一位數加法
XX.C ——C語言的源文件
編譯 ——轉換成二進制的機器語言
XX.exe ——可執行文件

不需要編譯的腳本語言: PHP ASP JSP PYTHON VBS PEER TCL
需要編譯的高級語言: C VC C# Delphi Java .Net

註釋: // 和/* */

作業3:繪製流程圖中所有界面

C語言 面向過程的語言 執行過程是自上向下 函數
F10 單步執行 但不進入函數體
F11 單步執行 進入函數體
C語言中的存儲
數據類型
基本數據類型
1浮點型
默認小數位是6位,若輸出《6位,完成四捨五入
若賦予的值小數位《5,後邊會隨機補數
vc 對於定義的浮點型變量會默認爲double類型,因此會產生警告。想沒有警告,強制在賦值語句中的數據後加f. 比如,
float x;
x=0.33f;

數組
1)一維數據
定義:數據類型 數組名[長度];
初始化:1)先定義,後賦值;
int a[3];
a[0]=34;
a[1]=45;
a[2]=345;
2) 邊定義,邊初始化
float b[2]={4556.234,45.345};
3) 只給第0個初始化,後邊補0
double c[3]={345.345345};
訪問:下標從0開始遍歷數組

2)二維數組
定義:數據類型 數組組[行的長度][列的長度];
初始化: 1)先定義,後賦值

     int a[2][4];
       a[0][0]=3;
       a[0][1]=4;
       a[0][2]=5;
       a[0][3]=6;
       a[1][0]=7;
       a[1][1]=8;
       a[1][2]=9;
       a[1][3]=10;
       2)邊定義,變賦值;
         int b[2][4]={{3,4,5,6},{7,8,9,10}};

訪問: 行和列的下標從0開始遍歷數組

2字符串
定義:char 字符串名[長度];
初始化:先定義,後賦值
邊定義,邊賦值
1)
char p1[5]=“abcd”; 對 (因爲自動補\0佔一位)
char p2[5]=“abcde”; 錯
2)
char p3[5]={‘a’,‘b’,‘c’,‘d’,’\0’}; 對
char p4[5]={‘a’,‘b’,‘c’,‘d’,‘0’}; 錯
輸出:prinf("%s",p1);
printf("%c",p1[0]);
輸入:scanf("%s",&p1); /讀整個字符串/
scanf("%c",&p1[2]); /讀單個字符/
注意:賦值的長度小於定義長度時,會逐個補空

結構體
邊定義,邊初始化: struct 結構體名 {
數據類型 數組名[長度];
數據類型 變量名;
…} 結構體變量名={初始化對應值}
struct student {
char name[10];
int age;
} s1={“zhangsan”,18};
訪問:結構體變量名.結構體內部定義的變量名。
printf("%s",s1.name);
printf("%d",s1.age);

結構體數組
邊定義,變初始化:
struct 結構體名 {
數據類型 數組名[長度]; /表示長度/
數據類型 變量名;
…} 結構體數組變量名[長度]={{初始化對應值1},{初始化對應值2},} /這裏的長度表示多少個,相當於表中的記錄數/

  struct student {
              char name[10]; /*name這個字符串能有效存儲字符數9個,還有1位補空*/
          int age;
        } s[2]={{"zhangsan",18},{"lisi",20}};   /*這裏的2表示有2條記錄*/

3運算符
算數運算符: + - * /(求商) %(取餘)
關係運算符: > < >= <= ==(等於) != (不等於)
真(非0) 假0
邏輯運算符
&& (與) || (或) ! (非)

常量
const 數據類型 常量名=值;
例如,圓周率 const int pi=3.14;

變量

  1. 變量是什麼?

  2. 先定義,後使用
    標準c
    int x;
    x=3;
    int j;
    j=89;

    vc
    int x;
    int j;
    x=3;
    j=89;

  3. 使用賦值語句修改變量值

  4. 變量賦予的值由數據類型決定

  5. 變量包含名字、值和地址

  6. 不同的數據類型在計算機中存儲的字節大小不一樣
    16位 32位
    int 2個字節 4
    long 4 4
    float 4 4
    double 8 8
    char 1 1

  7. 變量的名字
    首字母:字母,下劃線
    包含:字母,下劃線,%, 數字
    不能使用c語言的保留字

  8. 全局變量和局部變量
    1)局部變量如何定義:在函數中定義的變量都成爲局部變量。離開函數(調用完函數),該變量消失。
    2)全局變量如何定義:在main函數上邊定義的變量成爲全局變量。對所有的函數都生效。
    3)當局部變量和全局變量同名時,實際上修改的是局部變量。
    常量
    常量的定義

define 常量名 常量值

常量名要全用大寫字母
常量沒有數據類型
1.數組
定義數組
數據類型 數組名[N] ;
N 代表數組的個數

結構體
定義
Struct 結構體名
{
變量1
變量2



}
例:
Struct
{
Char name[8];
Char sex[2];
Int age;
Int grade;
} Stu_49[2]={{“張三”,”男”,18,60},{“李四”,”女”,19,100}};
結構體的顯示
Printf(“ %s”,Stu_49[0].name);
條件/分支邏輯
Switch
switch (表達式)
{
case 值1: 處理語句1;
break;
case 值2:處理語句2;
break;
case 值3:處理語句3;
break;
。。。。

}
注意1:值的數據類型要和表達式返回值的類型要匹配;
注意2:不要忘了使用break退出後續執行;
注意3:表達式要使用括號括起來;

條件 只能輸入固定的值
If
分支結構
條件
情況1: 對應流程圖,假分支直接指向後續語句,不含有處理語句
if (條件)
處理語句1;
處理語句2;

情況2: 對應流程圖,處理語句1和處理語句對應真分支,處理3和4對應假分支
if (條件)
處理語句1;
處理語句2;

else
處理語句3;
處理語句4;

情況3
If (表達式1)
if(表達式2)
語句2;
Else
語句3;
Else
語句1;
循環
For
循環結構
定義循環控制變量
for (控制變量賦初始值;控制變量終止條件;累加(減)器)
{
循環體語句;
}

while (條件)
{

循環體語句;
}

do
{
循環體語句;
} while (條件)

for(表達式1;滿足循環條件;表達式2)
{
循環體;
}
while
while (表達式)
{
循環體
}
do…while
do
{
循環體
}
While(表達式)
申請卡號時,多申請一位 並用\0座位數據的結束
Do while 在條件不滿足時,會執行一次do中的循環體
有參數有返回值的函數
錯誤跟蹤 寫日誌
函數
函數:

  1. 輸出函數
    1.1 printf(控制格式,變量);
    控制格式 %d - 整形
    %c - 字符型
    %ld -長整形
    %f -浮點型 (想控制小數位 %.3f)
    %lf --雙精度 (想控制小數位 %.5lf)
    1.2 printf(“你想輸出的內容”);
  2. 輸入函數
    scanf(“控制格式”,&變量1,&變量2,…);
    %c
    %d
    %ld
    %f
    %lf
    int x,y;
    x=234;
    y=234;
    scanf("%d%d", &x,&y);
  3. 存在的必要性
    1) 職能單一
    2)定位問題
    3)便於使用
    4) 減少代碼冗餘
  4. 項目中只能有一個main函數。否則移除。
  5. 函數使用
    先定義(在main函數外定義)-》調用-》申明(在main函數外邊申明)
    注意1:定義的函數名、調用的函數名、申明的函數名必須同名
    5.無返回且無形參的函數
    定義:
    void 函數名()
    {
    語句1;
    語句2;
    。。。。。
    }
    調用:
    函數名();
    申明:
    void 函數名();
  6. 無返回有形參的函數
    定義:
    void 函數名(形參列表)
    {
    語句1;
    語句2;
    。。。。。
    }
    在這裏,形參列表實際上就是變量定義列表,只是因爲放在函數定義中就叫叫它形參。
    比如:int x,int y,int z,char m
    調用:
    函數名(實參列表);
    在這裏,實參列表的個數和形參列表個數一致;類型一致;實參列表可以相同數據類型的值,也可以是相同數據類型的變量
    申明:
    void 函數名(形參列表);
  7. 有返回有形參的函數
    定義
    數據類型 函數名(形參列表)
    {
    語句1;
    語句2;
    。。。。。
    return 值
    }
    在這裏,return的值必須和函數名之前的數據類型匹配。
    調用:
    定義一個和函數返回數據類型相同的變量
    變量=函數名(實參列表);
    申明
    數據類型 函數名(形參列表);
  8. 函數名在一個程序中不能同名
    程序結構
    #include 語句
    #include <stdio.h>
    函數申明
    main函數
    自己定義的函數
    其他
  9. 字節
  10. ascii
    char m;
    m=“k”;
    /* 輸出k字符的ascii碼*/
    printf(“m=%d\n”,m);
  11. 轉義
    \ - 轉義符
    \n -控制換行
    \t -控制tab鍵的距離
    \0 -空
  12. 註釋
    單行
    跨行 /* 語句 */
    Void 函數名()
    Void 函數名(參數1,參數2…)
    Int 函數名()
    Int 函數名(參數1,參數2…)
    注:1調用函數時 傳入的參數類型 要和函數參數的類型一致,返回值也是一樣
    2對有參數沒有返回值的函數測試
    3對沒有參數 沒有返回值的函數測試
    4 測試main()函數 複製了一個定義爲test_main()

補充知識:
1個字節=8位 編碼是ASCII碼 又叫ANSI(美國標準碼)
用兩個字節表示中文 編碼是GB2312
當16位全部佔用時 編碼是GB18030
後來同意標準 全部用16位表示 編碼用UTF-8 只翻譯16位中的低8位
注: C語言中main()函數默認是返回int 類型的值
第七章 Windows環境搭建
一、名詞註解與定義:
環境:分爲{1、生產環境;2、測試環境;3、開發環境。
生產環境(也稱爲:上線環境)是運維人員的工作環境,有時候測試人員也會參與運維的部署工作)。
測試環境:測試人員爲了測試軟件在生產環境中的功能和性能的表現,而儘量可能的模擬了一個生產環境來進行軟件測試。
開發環境:就是開發人員編寫軟件代碼的工作環境。
一個軟件要從開發環境——>測試環境——>生產環境這個環境流程。
問:爲什麼不在開發環境中進行軟件測試,要測試環境中進行?
答:因爲開發環境它具有可變性,其影響測試的準確性,所以爲了保證數據獨立性和其測試的準確性,軟件測試最好在測試環境中進行。
測試環境-分爲:1、硬件環境;2、OS(操作系統)環境;3、軟件環境。
其硬件環境和OS(操作系統)環境都是要根據被測軟件的需求來搭建;軟件環境包括:被測試軟件和一些用戶常用軟件,主要測試被測軟件和常用軟件之間的兼容性、衝突。
搭建:先要根據需求架設硬件環境,再根據需求架設OS系統環境,要保證架設的OS系統是無毒的,最後架設軟件環境,卸載無用的軟件,確認軟件的證件號來保證一些不必要的錯誤和衝突。
爲什麼要保證架設的OS操作系統環境是無毒的?因爲病毒可能產生一些和被測軟件無關的BUG。解決方法:可安裝殺毒軟件,重裝系統來防止和保證。
被測軟件-分爲:1、單機版;2、C/S(client/server);3、B/S(browser/server)。三種運行模式。
C/S(client/server):是分爲客戶端、服務端和數據庫端(如:PPS、QQ需要用戶先安裝客戶端)。其架設的軟件會用客戶端來分擔一部分工作;
優點:運行速度快、部分數據存放在本地;
缺點:兼容性差,要根據不同的系統來開發不同的系統版本,成本高和測試成本高。
B/S(browser/server):是可以用IE瀏覽器直接訪問和運行的一種模式,不用預先安裝客戶端(如:網頁遊戲、網上訂票系統等)。
優點:兼容性好,數據保密性好;
缺點:運行速度較慢。
軟件要根據不同的運行環境、性能的要求來選擇使用C/S架設,還是用B/S架設。
擴展內容:
app:應用軟件,是安裝在OS(操作系統)上面的。
光的三原色:紅。綠。藍。
服務器(軟件):
1、應用服務器:IIS,Weblogic,JBoss;
2、Web服務器軟件:Apache,Nginx,LightHttpd;
3、數據庫服務器:SQL Server,MySQL(Strucrure Query Language),Oracle;
4、郵件服務器:QMail,Exchange,Lotus;
5、FTP服務器

C/S
海達票務系統
1.硬件環境和操作系統(略)
2.安裝SqlServer,安裝客戶端和服務器端軟件
3.測試數據準備,環境初始化
DROP DATABASE hdpw1;
CREATE DATABASE hdpw1;
RESTORE DATABASE hdpw1 FROM DISK=‘D:\training\doc\win\student\海達票務\hdpw1’;
4.參數配置
4.1 Client端配置,和Server端的鏈接
4.2 服務器端配置,和數據庫的鏈接
4.3 數據庫端配置(略)
5.啓動整個海達票務系統
系統更新時,需要更新C和S端,而B/S架構只用更新S端
B/S
安裝虛擬機:
1.打開VMWare
2.新建一個虛擬機

3.更改光驅加載的ISO

4.開啓電源
5.將鼠標焦點放到GuestOS裏(如何到HostOS?熱鍵)
6.格式化磁盤
7.後續安裝的步驟
8.配置網絡
9.安裝VMWareTools

配置共享文件夾:

進銷存系統
1.安裝IIS (通過本機IP訪問和netstat查看進程是否成功啓動)

2.把jxc文件夾拷貝到guest
3.在IIS裏新建一個虛擬目錄->指向jxc文件夾

4.設置jxc文件夾的權限

5.啓動相關擴展

6.啓用虛擬目錄的父路徑

7.設置默認首頁

OA系統
1.安裝JDK

2.將Jdk的bin目錄追加到環境變量的Path變量裏(如:C:\jdk6\bin)
注:放在path裏可以在cmd中輸入命令運行,系統將自動定位jdk所在目錄

3.新建一個系統變量 JAVA_HOME,值爲jdk的安裝目錄(如:C:\jdk6)

4.新建一個系統變量 CLASSPATH,(如:.;C:\jdk6\lib\tools.jar;C:\jdk6\lib\dt.jar) . 指當前目錄 注:CLASSPATH (java的類庫)

注: . 表示當前目錄 允許jdk查找當前目錄
5.安裝Tomcat,解壓後運行startup.bat
通過127.0.0.1:8080 訪問,可以看到Tomcat的歡迎頁面
也可以修改conf/server.xml文件,更改Tomcat啓動的端口號

注:在conf下server.xml中查找8080(默認端口)修改端口號 更改配置後要重啓服務器
用startup.bat啓動tomcat
6.安裝MySql

7.部署OA的程序,將程序拷貝到tomcat的webapps目錄

1)先到Mysql裏把測試數據導入
登錄mysql mysql -uroot -p
進入mysql控制命令行,顯示如下
mysql>

從硬盤上導入一個sql文件

mysql> source c:~~~~~\oa\setup\redmoon.sql (本質是執行Sql文件裏的每一個SQL語句)
2)修改和數據庫的連接、日誌和緩存參數
oa/WEB-INF/proxool.xml 改裏面的數據庫密碼即可

oa/WEB-INF/log4j.properties 改日誌的路徑,並創建相應的路徑

oa/WEB-INF/classes/cache.ccf 改緩存的路徑

8.重新啓動Tomcat
訪問 127.0.0.1/oa
admin
111111
注:參考 windows環境搭建
補充知識:
查看服務:

MySql相關命令
show databases 查看有哪些庫
show tables 查看庫有哪些表

desc 表名 查看錶結構

瀏覽器引擎: 1.渲染頁面 2.執行客戶端腳本JavaScript 3.執行自由控件
w3school.com.cn學習前端語言的網站

Trident IE
Gecko FireFox
Presto Opera
Webkit Safari

Cookies 保存用戶名 密碼 根據瀏覽器、域名保存 一個瀏覽器、域名一個Cookies 唯一標識一個客戶
Session 和cookies類似 是服務器端保存的
Session 和cookies是一一對應的
TCP/IP分四層 OSI七層

應用層傳輸協議:http pop3 smtp
傳輸層協議:tcp udp
網絡層協議:ip arp
物理層協議:mac pppo
三次握手
目的:建立連接
1.給服務器發送一個包[SYN] 處於send狀態
2.服務器回覆一個包[SYN,ACK] 處於receive狀態
3.給服務器返回一個包[ACK] 兩邊同步待命 準備發送

注:參考 網絡模型和協議.vsd
Session/Cookie:Session是存在服務器的,關閉瀏覽器則刪除Cookie存在客戶端,可以設置生命週期

JAVA環境搭建
1.安裝jdk程序
2.配置環境變量
1)增加JAVA_HOME,值爲jdk的根目錄
2)修改Path,在後面追加 ;%JAVA_HOME%/bin
3)增加CLASS_PATH,值爲 .;%JAVA_HOME%/lib/tools.jar
3.運行cmd,檢查java版本
java -version
4.運行一個java程序
1)編輯文件 HelloWorld.java,內容爲
public class HelloWorld {
public static void main(String[] args) {
System.out.println(“Hello, world!”);
}
}
2) 編譯java文件,生成字節碼文件
javac HelloWorld.java
3) 運行字節碼文件
java HelloWorld

安裝Tomcat

  1. 解壓至某目錄
  2. 運行 bin/startup.bat
  3. 使用瀏覽器訪問
    http://127.0.0.1:8080

安裝MySQL

  1. 運行MySQL安裝程序,next
  2. MySQL的配置
    1. 編碼
    2. 密碼
    3. 服務
  3. mysql -uroot -p

部署oa

  1. 將程序文件拷貝到tomcat的webapps目錄
  2. 初始化測試數據,登錄到mysql控制檯,運行source命令
    mysql> source c:…\redmoonoa.sql
  3. 程序配置
    1. oa程序和數據庫的連接配置
      WEB-INF\proxool.xml
      修改用戶名和密碼
    2. oa的日誌配置文件
      log4j.properties
      log4j.appender.R.File=C:/apache-tomcat-7.0.6/webapps/oa/log/oa.log
    3. oa的緩存配置文件
      WEB-INF\classes\cache.ccf
      jcs.auxiliary.DC.attributes.DiskPath=C:/apache-tomcat-7.0.6/webapps/oa/CacheTemp
  4. 重啓一下tomcat
  5. 訪問
    http://127.0.0.1:8080/oa
    admin
    111111

第八章 需求管理
1.什麼是需求
明確要什麼做什麼
2. 需求工程在做什麼
㈠需求開發:需求獲取 需求分析 需求格式化 需求驗證
㈡需求管理:需求分配 需求評審 需求基線 需求變更 需求跟蹤
3. ★需求變更
a)爲什麼要變更:外因:市場,客戶。內因:技術不足 缺陷 人員資源
b)變更影響了什麼:SRS HLD LLD SP UI ZI CODE
c)怎麼做變更的控制(需求變更控制目標):控制項目成本,控制項目風險
d)需求變更的越早,影響範圍越小,變更越晚,影響範圍越大
    原則 方法
變更控制的目標 降低變更引起的成本 防止隨意的變更 通過評審和會議讓用戶或者企業負責人在變更上簽字來確認變更
儘量早的發生變更 多設計一些產品原形,由用戶確認,
儘量控制變更影響的範圍 儘量不變更,如果變更儘量發生在後續版本
儘量減少變更所引起的反工 當變更的需求穩定後在介入開發和測試
降低變更引起的風險 高內聚,低耦合 代碼內部乾的是一件事,函數與函數之間關聯儘量小,儘量使變更隻影響到局部,而不影響到整個系統
4.★需求的跟蹤
a)目的(爲什麼要需求變更跟蹤)將和SRS有關的文檔統一管理和關聯起來,從而可以從任何一點找到其他文檔的相關內容
b)★★★★★輸入、輸出(RTM)
①開發的需求跟蹤:SRS HLD LLD
②系統的需求跟蹤:SRS ST計劃 ST方案 ST用例
③集成的需求跟蹤:HLD IT計劃 ITf方案 IT用例
④單元的需求跟蹤:LLD UT計劃 UT方案 UT用例
輸出(RTM)Requirement Tvace Matrix需求跟蹤矩陣
c)每個階段,跟蹤的內容和變更的跟蹤.
SRS編號 SRS名稱 系統測試項ID ST描述 ST子項ID ST子項描述 系統測試用例ID 系統測試用例描述
HLD編號 HLD名稱 集成測試項ID IT描述 IT子項ID IT子項描述 集成測試用例ID 集成測試用例描述
LLD編號 LLD名稱 單元測試項ID UT描述 UT子項ID UT子項描述 單元測試用例代碼聲明 單元測試用例代碼描述
需求跟蹤矩陣的作用:
開發RTM: 保證所有的需求都被設計實現了
測試RTM: 保證所有的需求都被測試了
保證可以通過需求,確定需求變更影響的範圍,找到所有的成果物(HLD、LLD、系統測試計劃…)
需求的特點:
只關心想要什麼,不關心怎麼去做
需求工程

不同階段的需求變更的影響範圍      
       
需求階段需求變更影響      
需求規格說明書 系統測試計劃    
開發RTM 系統測試RTM    
       
概要設計需求變更影響      
需求規格說明書 概要設計    
系統測試計劃 系統測試方案 系統測試用例  
集成測試計劃      
開發RTM 系統測試RTM 集成測試RTM  
       
詳細設計需求變更影響      
需求規格說明書 概要設計 詳細設計  
系統測試計劃 系統測試方案 系統測試用例  
集成測試計劃 集成測試方案 集成測試用例  
單元測試計劃      
開發RTM 系統測試RTM 集成測試RTM 單元測試RTM
       
編碼以及後期測試階段需求變更      
需求規格說明書 概要設計 詳細設計 編碼
系統測試計劃 系統測試方案 系統測試用例  
集成測試計劃 集成測試方案 集成測試用例  
單元測試計劃 單元測試方案 單元測試用例  
開發RTM 系統測試RTM 集成測試RTM 單元測試RTM
補充知識:
1代碼編寫原則:
1).高內聚,低耦合
2).可續性高
3).查閱代碼編寫規範
2在公司中出現以下問題如何解決
(1)業務背景不同,導致項目延期
明確需求文檔的格式和標準,儘可能細化需求文檔
(2)需求變化頻繁
建立變更控制
(3)需求相關的代碼,用例找不到,找不全
建立雪球跟蹤

CR(Changes requirement)需求變更
CCB(Changes control board)變更控制委員會
CMO(Configuration management officer)配置管理員
PM 項目經理
SWE 軟件開發工程師
STE 軟件測試工程師
QA 質量保證人員
CI 基線

—基線變更流程
1)項目成員提交CR
2)CMO將CR狀態標識爲已提交,並將CR提交給CCB進行簽發
3)CCB召開會議對CR進行評估
4)未通過CMO將CR狀態標識爲已拒絕並返回提交人
5)通過,CMO將CR狀態標識爲已接受,將CR與要修改的配置項發給項目組成員並開放CI的配置庫權限
6)項目組成員執行更改並進行驗證
7)CCB召開會議對修改進行審覈,如果通過將CR狀態標識爲已驗證,發給CMO,否則返回修改人
8)CMO檢查驗證CR記錄,收回配置權限,將CR狀態標識爲已關閉,返回提交人
變更控制流程圖

第九章 缺陷管理
缺陷相關概念
1什麼是缺陷:被測得產品部符合需求和用戶使用的實際結果,不符合法律法規
軟件:滿足某個功能的邏輯體
系統:硬件、支撐軟件、人員、數據等,綜合起來滿足某個業務需求的集合體
2什麼可以被定義爲缺陷:(缺陷的分類)
①缺陷(defect)產品設計與需求設計部符合
②錯誤(error)沒有定義的或者未知的錯誤信息
③故障(fault)由於一些原因導致產品失效,重新啓動調整後可以恢復用戶使用
④失效(failure)由於一些原因產品失效,無法自行恢復
3缺陷提出的目的和意義
對開發:更好發現缺陷現象,重現和定位缺陷,查找原因,保證所有的缺陷都被修復
對測試:記錄和保證BUG完整一致,迴歸保證所有的 BUG都驗證
提出問題,把問題交給開發去改
跟蹤缺陷,看是否已經修改
測試報告,統計數據
缺陷管理相關概念
1.BUG管理的目的:
①.保證每個缺陷都被修改
②.保證每個缺陷都被迴歸
③.缺陷的完整性和一致性
④.避免糾紛,降低溝通成本
2缺陷管理的意義:
①提高工作效率(BUG分類,狀態負責人)
②記錄唯一的缺陷信息,保證BUG完整一致(通過設置權限實現)
③記錄中間環節,是BUG可追溯
④統計爲測試報告提供數據
3.參與缺陷管理的角色:
測試工程師:發現和迴歸BUG
測試經理:判斷BUG的有效性
開發經理:分配BUG
開發工程師:修改BUG
評審:解決矛盾
4.缺陷的分類(屬性)
①按模塊分類:例如:登錄模塊,查詢模塊
②按嚴重級別分類:blocker阻礙的(不修改該BUG之後的開發測試無法執行)
Critical崩潰(系統部能用)
major嚴重的(嚴重影響功能使用流程)
anormal一般的(不會影響主要的功能流程)
minor輕微的(不會2影響業務流程也不影響使用)
trvival 界面的
suggestion建議(可用性,易用性,側重用戶體驗)
③按優先級別分類:P1----P5(同意 BUG可能會變)
BUG管理基本流程:

BUG管理基本流程及相關角色
1缺陷管理常見流程
1)BUG迴歸時沒有修改好:測試工程師REOPEN——開發工程師
2)測試經理認爲BUG無效,原因:不是BGU,對需求的理解誤差,描述不清楚。BUG不全,重複
測試工程師NEW----測試經理CAN OPEN-----REJECTED-----測試工程師CLOSED
3)開發工程師拒絕修改BUG,原因:修復提高項目風險,理解分歧,技術難度大,修復成本高,修改範圍廣,優先級低
測試工程師NEW----測試經理OPEN-----開發經理ASSIGNED-----開發工程師CANFIX------開發經理
4)開發經理拒絕修改或分配BUG,原因:開發與測試已經不同意,偶發,項目風險高,關係進度成敗,技術難度大,無法實現,修改成本高,難度大,影響大,影響進度優先級別低
測試工程師NEW----測試經理OPEN----開發經理ASSIGNED----評審委員會CAN LATER----Y(LATER)-----N開發經理
5)一般BUG生命週期
測試工程師NEW----測試經理OPEN—開發經理ASSIGNED----開發工程師fixed----測試工程師CLOSED
2缺陷狀態:
New新BUG單 Open確認 Reject拒絕 Assigned已分配 Fixed已修復 Reopen迴歸時未修改正確重新開放 Closed關閉 Later稍後再改 Postpone延遲 Abandon放棄 duplicate重複 verify驗證
測試人員: 無 → New Fixed → Reopen Fixed → Close
測試組長: New → Open New → Abandon
開發經理: Open → Reject Open → Postpone Open → Assign
開發人員: Assign → Fixed
項目經理: Reject → Passed Reject → Faild Faild → Abandon
BUG單
1.BUG單寫作準則(5C):
correct(準確)每個組成部分的描述準確,不會引起誤解
clear(清晰)每個組成部分的描述清晰,易於理解
concise(簡潔)只包含必不可少的信息,不包括任何多餘的內容
complete(完整) 包含復現改缺陷的完整步驟和其他本質信息
consistent(一致)按照一致的格式書寫全部缺陷報告

2.BUG單模板

注意:
1一定可以重現的BUG可以不寫“重複幾次操作,出現幾次,我認爲,標題裏不能寫步驟,不能用主觀的話描述,我在 。。。。的,不確定語句:某些好像,禁止使用”之後”,然後之類的語句”之類的話
2需求規格說明書以外的錯誤可以當建議報告,不當BUG報告,開發可以改,也可以不改
3若是隨機出現的BUG,要寫出操作幾次,出現幾次
4若被測軟件是跨平臺軟件,要寫上在其他平臺下無誤
5禁止寫冗餘的操作的步驟。常識性的步驟不用寫進缺陷操作步驟
6寫明環境數據,如何選擇數據,數據如何被破壞
7一定要交代清楚測試書記,明確處理對那些數據進行操作

第十章 測試需求分析
概念:
1.什麼是需求分析:明確做什麼,明確測什麼,怎麼測
2.需求分析的目的(針對測試而言):
1)對需求進行細化和分解,從而找到所有的測試點
2)使從測試覆蓋所有的需求(方法:先覆蓋業務流,然後模塊,關聯 非功能)
3)更細緻的需求分析有利於提高測試質量(非軟件質量)
3.測試需求分析的特徵
1)所有的需求項要通過需求分析被覈實
2)測試需求分析應明確指出滿足需求的前置條件和不滿足需求的前置條件
3)測試需求分析不涉及具體的測試數據,測試數據是在測試用例中產生
★如何做測試需求分析
1.明確系統框架,有多少個業務流程
2.明確業務流中有多少個功能測試點,細化分解業務流:
a)明確每個功能模塊的輸入、輸出、邏輯
b)滿足功能需求的條件和不滿足功能需求的條件
3.明確每個功能的獨立處理流程關係
4.明確功能之間的處理、聯繫
5.明確非功能需求和隱性需求 如:安全性、性能、界面美觀、易用性等…
6.系統運行環境包括代碼 硬件、軟件、外設、數據庫、網絡
羅老師的答案
1考慮非功能性需求
2挖掘規範需求形成規範需求流程
3仔細閱讀需求規格說明書(找出問題所在)形成問題列表
4明確該系統的子系統,模塊,子模塊,功能,子功能(可以藉助用例圖的方法)
5明確功能,子功能的流程和邏輯(可以使用活動圖,狀態圖或流程圖)
6挖掘隱性功能,形成隱性功能規範需求
7找出模塊與模塊,功能與與功能之間的 關係,確定組合測試需求
★UML統一建模語言(Unified Modeling Language)
1.用例圖:被稱爲參與者的外部用戶所能觀察到的系統功能模型圖
關係:
1.關聯
2.泛化 指向父用例 如:
3.依賴
a)擴展 指向被擴展者
b)包含 大的指向小的
2.活動圖:描述了一組順序的或併發的活動
狀態 活動 開始 結束
狀態轉移 循環 集 判斷
泳道
3包含3個因素:參與者(Actor執行者),系統(Use Case用例),關係(Association關聯,Dependency依賴,Generalize繼承)

第十一章 配置管理
1.什麼是配置管理
a)對所有配置項進行標識,解決了在不同時間週期內,這些文檔貫穿整個項目的生命週期並且對配置項進行權限的控制
b)配置管理的目的(配置管理在解決生命事情,爲什麼要進行配置管理):解決了保證了軟件產品的完整性,一致性,共享性、權限,變更可控、可追溯性
c)配置管理管理了什麼(配置項都包括哪些):配置項 版本 狀態
配置項:項目過程中每個階段文檔產物(SRS,HLD,LLD)代碼,開發工具,測試工具,環境(應用服務器,數據庫服務器)第三方軟件、用戶手冊,方案、用例等等,
對象的版本:XX.YY.ZZ.PP
XX 主版本號——內核程序,核心代號
YY 子版本號——主要功能、添加功能
ZZ 維護版本號——增加次要功能,功能改進
PP 補丁號——SP
對象的狀態狀態: 未檢查 入基線 衝突 鎖
注:BUG單也算配置項,但是一般單獨管理 常用管理工具:QC、Jira、Bugfree、Bugzilla
2.配置管理流程

角色:
項目經理(Project Manger PM)配置管理員(Configuration Mange Officer CMO)開發經理(Development Manger)測試經理 開發工程師 測試工程師
質量保證人員(Quality Assurance)變更控制委員會(Change Control Board CCB)
3.SVN實戰
開發可以生成branch 測試經理可以合併branch入trunk 評審可以使trunk入基線並打tag
啓動數據庫服務器subversion: 用start svnserve.exe –d –r

爲每個文檔建立trunk 然後再爲單獨的文檔建立branch 測試後合併入trunk生成新版本的該文檔
優點:節省空間 缺點:tag版本不配套

爲所有文檔建立trunk 每次建立branch都包括所有文檔
優點:所有文檔版本相同 缺點:浪費空間
配置管理工具SVN操作過程手冊
一、如何創建“project”項目版本庫
第一步:在D盤根目錄下創建文件夾:“SVNROOT”如圖所示:

第二步:在“SVNROOT”文件夾內創建兩個文件夾分別爲:“project”,“project1”兩個項目。

第三步:對“project”創建版本庫;
A.選中“project”文件夾,點擊右鍵;

B.點擊“在此創建版本庫”。

C.版本庫創建成功後,“project”文件內自動生產以下文件;

D.打開“conf”文件夾

備註:對上述三個文件進行解釋
“authz”文件設置“project”操作人員的權限“read、write”;
“passwd”文件設置操作的用戶名和密碼;
“svnserve.conf”文件是“系統配置文件”
E.對上述3個文件分別進行修改;
修改“svnserve.conf”

未修改
修改處:

修改方法:將“#”及空格,去掉即可。

修改後
修改後對文件另存,存儲過程中格式選擇“UTF-無BOM”然後點擊“保存”。

點擊“保存後”在原文件夾內生產如圖文件,這個是ultra edit 的備份文件

修改完成。

修改“authz”文件

未修改前
添加內容:
p1_group_a=p1_a1
p1_group_d=p1_d1,p1_d2
p1_group_t=p1_t1

[/]
*=r
root=rw

[project:/]
@p1_group_a=rw
@p1_group_d=rw
@p1_group_t=rw

修改後
修改後對文件另存,存儲過程中格式選擇“UTF-無BOM”然後點擊“保存”。
點擊“保存後”在原文件夾內生產如圖文件

修改完成。
修改“passwd”文件

未修改前
添加內容爲:
p1_a1=p1_a1
p1_d1=p1_d1
p1_d2=p1_d2
p1_t1=p1_t1

修改後對文件另存,存儲過程中格式選擇“UTF-無BOM”然後點擊“保存”。
點擊“保存後”在原文件夾內生產如圖文件

修改完成。
二、如何查看創建的“project”項目版本庫
通過“版本庫瀏覽器”進行查看
任意空白處點擊“鼠標右鍵”

點擊:“版本庫瀏覽器”

輸入:“svn://localhost/project”

備註:“localhost”本機的IP地址;
Project爲項目工程名;
點擊“確定”

問題:爲何會出現“無法連接主機“localhost”:由於目前機器積極拒絕,無法連接”
分析:“Subversion”服務器端“svnserve”服務未啓動;

如何啓動“svnserve”服務,操作步驟:
A.桌面“開始”----“運行”----輸入“cmd”;

B.用“DOS”命令打開此服務
首先找到該文件:cd c:\Program Files\subversion 進入該目錄

查看該目錄裏面有哪些文件,用到命令“dir”

3啓動該項服務
輸入:start svnserve.exe –d –r D:/SVNROOT
備註:D:/SVNROOT爲客戶端路徑。

運行後彈出一個窗口

表示此服務已經運行。

備註:在SVN運行過程中,此窗口 必須一直打開運行。

服務運行後再次查看創建的版本庫

如圖所示,創建版本庫成功。
三、在版本瀏覽器裏面,創建文件,並進行檢出
如何在版本庫裏面創建文件
A.在根目錄下點擊“右鍵”點擊“創建文件夾”

C.點擊“創建文件夾”

輸入文件夾名“trunck”
D.填寫“創建日誌”

E.認證:輸入用戶名稱和密碼:
用戶名:p1_a1
密碼:p1_a1

F.創建成功
按照此方法在“trunck”根目錄下創建“需求分析、RTM文檔、測試報告、代碼文檔、概設文檔、詳設文檔、用例文檔”7個文件夾。

在代碼文檔裏面添加5個代碼程序

A.將5個代碼程序 選中後直接拖入“代碼文檔”中;
B.點擊“複製項到此”

添加成功。
C.同樣的方法,添加另外4個文件:min.c;mul.c;div.c;main.c;

添加完成。
檢出添加的文件夾及文件
A.A.在D盤根目錄下建立文件夾“worksp”

備註:此文件夾爲空文件夾
B.空白處點擊“點擊右鍵”

C.點擊“SVN檢出(K)….”

D.檢出完成

備註:檢出成功
E.打開“wroksp”文件夾,出現“trunck”文件夾

F.打開“trunckt”文件

G.打開“代碼文檔”

備註:版本庫瀏覽器裏面的文件全部被檢出,檢出成功(如圖所示)。

四、如何對該項目入基線
第一步:打開D盤文件夾“worksp”找到“trunck”文件夾。
第二步:選中“trunck”文件夾點擊“右鍵”
選擇“分支/標記”

點擊“確定”

第三步:在D盤根目錄中選擇“worksp”文件夾,點擊“右鍵”選擇“提交更新”

第四步:查看入基線是否成功,打開文件“worksp”

第五步:通過“版本瀏覽器”進行查看;

入基線成功。

五、分支文件進行合併
第一步:在D盤根目錄下創建兩個文件夾“group1”、“group2”

第二步:用入基線的操作的方式,創建兩個分支“branch1”、“branch2”

“group1”文件夾

“group2”文件夾

第二步:
“group1”–“branch1”中“代碼文檔”內添加文件:chengfang.c
“group2”—“branch2”中“代碼文檔”內添加文件:kaifang.c
以添加“chengfang.c”爲例:
A.添加文件“chengfang.c”

B.選中“chengfang.c”文件點擊“增加”

C.點擊“增加”後

D.選中後“右鍵”點擊“SVN提交”:

備註:未提交前“代碼文檔”顯示爲:

E.點擊確定、添加成功

添加“kaifang.c”
同樣的方法進行添加
添加成功後:

校驗是否添加成功
方法1:點擊“worksp”進行更新,檢查“branch1”、“branch2”中是否存在添加的兩個文件;
方法2: 版本瀏覽器查看

將“chengfang.c”和“kaifang.c”進行合併;
A.“合併”前“trunck”裏面如圖

B.“合併”步驟:
a.點擊 “worksp”中的“trunck”點擊“右鍵”

將“kaifang.c”合併

同樣的方法對“branch1”中的“changfang.c”進行合併
C.對“trunck”文件右鍵進行“提交”

D.查看合併是否成功
方法1:“worksp”----“trunck”----“代碼文檔”查看

方法二:版本瀏覽器進行查看

六、分支衝突的解決
在D盤根目錄下創建2個文件夾分別爲“dev1”、“dev2”

分別點擊該文件夾的“右鍵”—“檢出”—“trunck”

針對“dev1”裏面的“代碼文檔”

進行修改添加“除數不能爲0”;

修改後“保存”

“右鍵”點擊“提交”

針對“dev2”—“代碼文檔”裏面

進行修改添加“除數不能爲0”;

修改後“保存”

“右鍵”進行提交“提交”

提交失敗,起衝突。
解決衝突
A.對“dev2”中的“div.c”文件進行更新

B.更新完成後打開該文件:

C.對該程序進行修改,完成後對該文件進行“提交”

D.然後對“代碼文檔” —“右鍵”進行“更新”

E.查看衝突是否解決
方法1:“worksp”—“trunck”—“代碼文檔”—“dev.c”
方法2: 版本瀏覽器進行查看。

第十二章 系統測試
概念:
1什麼事系統測試
在對軟件,硬件,外設,第三方軟件,數據,人員,環境,代碼,數據庫考慮了的情況下,儘可能的模擬用戶的使用環境下所做的測試
另一答案:將已集成的軟件系統,作爲整個基於計算機系統的一個元素,與計算機硬件、外設、數據、支撐軟件、人員等其他元素結合在一起,在實際運行環境下,對計算機系統進行的一系列測試活動
注:代碼稱之爲數據流,數據稱之爲信息流
2系統測試在做什麼工作
驗證系統是否滿足需求規格說明書SRS
驗證是都滿足隱性需求
驗證系統可以支付用戶使用
3系統測試的工作過程
系統測試個階段(計劃,設計,實現,執行)的輸入,輸出,入口準則,出口準則

4系統測試的對象:對整個產品(整個軟件系統)
5系統測試依據什麼:SRS
6系統:整體性、獨立性、功能性、環境適應性
7軟件系統:包括支撐軟件、數據、硬件、外設、人員及目標軟件
分類:

功能測試:(Function testing中國 Feature testing國際)
根據產品的功能是否滿足用戶需求
工作內容 1業務,業務流是否正確實現
2功能點是否正確實現
3輸入是否正確實現
4輸出是否正確實現
測試工具:QTP(使用 B/S和C/S軟件),LR(C/S軟件),RIA TEST(針對Flash,Flex軟件,用Flash編寫),Selenium(firefox的插件), IBM Rational Robot
工作原理:模擬用戶操作
性能測試:(Sercarity testing)
定義:驗證產品是否滿足性能需求
常用測試點:響應時間和資源性能(CPU,I/O,內存,信道,傳輸速度)
例:1.先確認記事本的性能需求(加入50萬行內正常)
2.先輸入50萬行文本(造場景)
3.監控所佔用的系統資源
4.報告,提出改進意見
注:1內存和硬盤的區別
內存臨時存儲,電腦關機,信息就消失,內存容量速度快
硬盤是靠執行存儲,斷電後也能保存數據,硬盤存儲量大,速度慢
2信道與寬帶有關,與訪問人數有關
3吞吐量,每個時間單元的處理數據
4測試方法:壓力測試(stres stesting)短時間
負載測試(load testing)正常負荷下,長時間運行
容量測試(volume testing)最大訪問量
5高級錄製能找到每個按鈕的控件名,低級錄製只能找到鼠標移動到的位置
6沒有需求的性能測試無法進行
測試工具:LR,Webload , Jmeter(開源軟件,JAVA編寫),Silk Performance
工作原理:(B或者C端通過傳送協議與S進行通信)
錄製協議,模擬多個永和傳送協議(可以幾句到以點,同時發給S也可以迭代發送給S)通過IP騎在變成不通的IP地址,突顯多線程併發操作
安全性測試:(Security Testing)

定義:驗證產品在系統的內部的安全保護機制和系統外對入侵的防護能力
考慮內容:1內部包括身份驗證,權限,數據的完整一致,數據的保密性(DB中有些數據加密保存)
2外部,病毒木馬,未授權攻擊,傳輸數據安全(傳輸過程中密碼加密,通過HTTP協議傳輸)
注:病毒與木馬的區別:病毒主要是針對計算機程序的破壞,木馬主要用於盜取計算機內的相關機密
測試工具:MBSA(Microsoft Basehne Sercurity Analyzer),IBM Rational Appscan,X-scan(某黑客組織開發)
工作原理:監控服務器或客戶端那些端口應該被禁止
安裝測試
定義:產品的安裝過程和結果進行測試
工作內容:根據軟件的測試特性列表,軟件安裝,配置文檔,設計安裝過程的測試用例
包括安裝前

安裝後

安裝過程中

安裝時異常終止包括:進程終止(操作系統未關閉)斷電模式,斷網
測試對象:安裝文件、安裝系統、安裝文檔、配置項
安裝後檢查:1件是否產生,是否正確
2否按人工修改的方式安裝
3裝日誌是否記錄正確
4否有臨時目錄,垃圾文件,是否清理掉冷補丁(需要關閉系統的補丁) 熱補丁(多數網站補丁屬於熱補丁)
GUI測試(Graphical user interface)
又稱爲用戶界面測試,接口測試
注:GUI測試無法脫離功能測試而獨立存在,否則只能測試外觀,佈局,無法測試行爲
測試內容:對界面元素進行測試,
驗證產品界面是否與SRS設計一致(包括佈局,外觀,配色,元素行爲,元素功能)
驗證界面元素的交互是否正確
界面元素包括:整體界面,獨立元素組合,獨立元素
思路:先找整體界面,再測獨立元素組合和獨立元素(據對用戶的影響嚴重程度不同)
測試步驟:對完整的界面進行測試 (包括佈局,功能組合,頁面展現的外觀)
組合元素(包括拆分,組合行爲,獨立行爲,展現,外觀)
獨立元素(包括外觀,爲)
工具:所有做功能測試的工具都可以做GUI的測試
可用性測試(Usability testing)
又稱易用性測試

定義:驗證用戶管理和使用軟件的容易程度
工作內容:是否符合用戶的實際習慣
是否符合用戶的特殊要求
操作是否合理,簡單,容易理解
是否有明確的提示可以指導下一步操作
異常性測試
系統允許的操作
健壯性測試,系統不允許的操作
文檔測試
說明書,與易用性一起做
備份測試
主要測試備份策略
目的:爲了解決風險
備份策略包括:本地備份,異地熱備份(實時備份),本地異步備份,異地異步備份
還原策略:(又稱恢復策略)
配置測試
又稱兼容性測試
包括軟件配置和硬件配置,驗證系統都可以使用那些軟硬件配置
網絡測試

主要測試網絡中的協議和數據
工作內容:1網絡協議測試(協議是否正確)
2網絡傳輸是否正確(不同網絡是否正常)
3網絡結果測試

第十三章 用例設計
等價類
定義:1、等價:如果多個輸入在程序中處理方式(路徑)相同,則認爲這些輸入是等價的,測試一個即可。(前提:測試不能窮舉)
2、輸入:分爲兩類,有效輸入(可以保存)、無效輸入(不可保存)
3、結合:有效等價類、無效等價類
滿足規則:只需尋找一個全部滿足規則的(有效等價類)
不滿足規則:需分開,每條不滿足條件的舉出一個,方便定位錯誤(無效等價類)
規則的幾種情況:
1 若規則是布爾式的
有效、無效分別取一個 一個真,一個假
2. 若規則是區
有效的取一個 無效的,在小於區間的取一個,大於區間的取一個,空或零取一個
3. 規則是集合:
有效取一個 無效的在集合外取一個
4. 規則是必須滿足的一個條件:
對無效,要細分無效(先試試其他有效等價類,再試試全部等價類全都不滿足)
例:郵箱註冊,註冊名只能以小寫字母開頭,設計無效等價類時,先試試其他有效等價類,如大寫字母、數字等,再試試其他有效全部都不滿足的情況
有效等價類:程序規格說明有意義,合理的輸入數據
無效等價類:程序規格說明無意義,不合理的輸入數據

ASCII碼
7位 表示27=128個字符 每個字符存儲佔用1個字節
分類:不可見字符
控制字符:LF(換行)、CR(回車)
通信字符
NULL(空)
可見字符
空格
數字
字母(大寫、小寫)
符號
練習
1.1年齡註冊
註冊頁面要求輸入年齡,限制:1到150期間的正整數
1、需求分析—找出全部的輸入條件
1)、正整數
2)、[1,150]
注意:分解的過程中,條件之間不用組合(完全獨立),在設計有效用例輸入的時候再考慮組合(一對多)
2、繪製等價類表格
條件 有效等價類 有效編號 無效等價類 無效編號
正整數 >1 A01 數字 小數 B01
負數 B02
0 B03
非數字 空(NULL) B04
空格 B05
字母 B06
符號 B07
[1,150] [1,150] A02 <1 B08
>150 B09

3、設計測試用例輸入
原則:有效輸入—儘可能多去覆蓋有效等價類 (一對多)
無效輸入—只能覆蓋一個無效等價類 (一對一)
目的:A、出現問題可以更好的去定位
B、有可能第一個無效處理後,後續無效值被漏測
輸入序號 有效輸入值 覆蓋有效等價類 輸入序號 無效輸入值 覆蓋無效等價類
1 100 A01、A02 2 1.8 B01
3 -9 B02
4 0 B03、B08
5 空(NULL) B04
6 空格 B05
7 W B06
8 @ B07
9 200 B09
1.2.年齡註冊
某保險公司註冊頁面要求輸入年齡,限制:1到150期間的正整數,其中:
[1,10] 適用的費率 10%
[11,50] 適用的費率 30%
[51,150] 適用的費率 80%

條件 有效等價類 有效編號 無效等價類 無效編號
正整數 >1 A01 數字 小數 B01
負數 B02
0 B03
非數字 空(NULL) B04
空格 B05
字母 B06
符號 B07
[1,150] [1,10] A02 <1 B08
[11,50] A03 >150
[51,150] A04

輸入序號 有效輸入值 覆蓋有效等價類 輸入序號 無效輸入值 覆蓋無效等價類
1 5 A01、A02 4 1.8 B01
2 30 A01、A03 5 -9 B02
3 100 A01、A04 6 0 B03、B08
7 空(NULL) B04
8 空格 B05
9 W B06
10 @ B07
11 200 B09
1.3.擴充
考慮全角和半角問題(GB231)
其中,半角佔1個字節
全角佔2個字節

字符集
1、ASCII
2、GB2312 -> GB18030 一個漢字佔2個字節
BIG5(繁體)
3、ISO Unicode (UTF-16) -> UTF-8(變長存儲) 一個漢字可能佔3個字節
條件 有效等價類 有效編號 無效等價類 無效編號
正整數 >1(半角) A01

			0	B03
>1(全角)	A02	半角字符	空(NULL)	B04
			空格	B05
			字母	B06
			符號	B07
		全角字符	空格	B08
			字母	B09
			符號	B10
		漢字

(字符集) GB-2312 B11
BIG-5 B12
[1,150] [1,150] A03 <1 B13
>150 B14

分解粒度:根據功能的重要性決定(用例圖----執行者角色,考慮用戶的關注功能)
根據成本、時間決定
取消負數、小數的原因:
1、前提:在編輯框內輸入年齡,程序在接收編輯框的內容時,一般以字符(或字符串)的形式接收,再根據需要進行類型轉換,如年齡,需要轉換爲整型
2、小數中的“小數點”和負數中的“負號”都認爲是符號,不允許保存
邊界值
取值(5個):上點、內點、離點
1、上點、內點取值與區間的開閉無關
2、離點和上點互爲有效
作用:(有序、有範圍)等價類的補充
補充:考慮數據類型的邊界
如 int 類型 佔4個字節 即 32bit 取值範圍[-231, 231-1]
上點:邊界上的點
內點:區間內的點
離點:離邊界值最近且與上點不屬於同一等價類的點(對於小數,沒有離點,不用取)
規則的幾種情況:

  1. 規則是區間:
    按上點、內點、離點取
  2. 規則是取值的個數:
    取最小、最大、中間個數
    3.規則是a~z序列:
    取a、z
    4.規則是集合:
    取一個集合內的,取一個集合外的
    (0,20)上點是0,20 離點是1,19 [0,20]上點是0,20 離點是-1,21
    若規則是下拉菜單:建議每個下拉值都選擇一個
    2.1.年齡
    條件 有效等價類 有效邊界值 有效編號 無效等價類 無效邊界值 無效編號
    正整數 >=1 上點:1 A01 數字 小數 B01
    內點:100 A02 負數 B02
    離點:0 0 B03
    非數字 空(NULL) B04
    空格 B05
    大寫字母 上點:A B06
    上點:Z
    內點:M
    符號 離點:@ B07
    離點:[
    [1,150] [1,150] 上點:1 A03 離點: 0 B08
    上點:150 A04 離點: 151 B09
    內點:100 A05
    有效用例輸入:1 、100、150
    2.2.用戶名註冊

1、測試需求分析
1、內容:字母、數字、
2、長度:[6,18]
3、約束:字母開頭
字母或數字結尾
不允許重名
不允許使用保留字
自動去除首尾空格
2、等價類劃分
條件 有效等價類 有效編號 無效等價類 無效編號
內容 字母 大寫字母 A01 符號(除下劃線) B01
小寫字母 A02 NULL(空) B02
數字 [0,9] A03 空格 B03
下劃線 下劃線 A04 GB2312 B04
BIG5 B05
長度 [6,18] [6,18] A05 <6 B06
>18 B07
約束 字母開頭 大寫字母開頭 A06 數字開頭 B08
小寫字母開頭 A07 下劃線開頭 B09
符號(非下劃線)開頭 B10
漢字開頭 B11
字母或數字結尾 大寫字母結尾 A08 下劃線結尾 B12
小寫字母結尾 A09 符號(非下劃線)結尾 B13
數字結尾 A10 漢字結尾 B13
不允許重名 不重名 A11 重名 B15
去除首尾空格 A12
不允許使用保留字 不使用 A13 使用保留字 B16
3、用例設計
序號 有效輸入 有效邊界值 序號 無效輸入 無效邊界值
1 (當前系統無AAb_4)
AAbb_4 A01、A02、A04、A03
A05、A06、A10
A11、A13 5 abc@a B01
2 (當前系統無AAb_4)
aAbcvb_A A01、A02、A04、A03
A05、A07、A08
A11、A13 …………
3 (當前系統無AAb_4)
aA555b_b A01、A02、A04、A03
A05、A07、A09
A11、A13 (當前系統存在aaf5bc)
(空格)aaf5bc(空格) B15
4 (當前系統無aaf5bc)
(空格)aaf5bc(空格) A12 Administrator B16
2.3.變量命名
在某一版的編程語言中對變量名稱規格作如下規定:變量名稱是由字母開頭的,後跟字母或者數字的任意組合構成,並且區分字母大小寫。編譯器能夠區分的有效字符數爲8個,並且變量名稱必須先聲明,後使用,在同一聲明語句中,變量名稱至少必須有一個。
1、測試需求分析
內容:字母、數字
長度:[1,8]
約束:字母開頭
大小寫敏感
先聲明後使用
變量的個數[1,?] (需要和需求人員溝通)
在同一作用域中不允許重名
不能使用關鍵字
2、等價類劃分
3、確定邊界值
4、設計用例輸入
2.4.進銷存價格

代碼實現:
if (isNumberString(document.form2.tichen.value,“1234567890.”)!=1)
{
alert(“價格只能爲數字!”);
return false;
}

根據代碼的實現,價格編輯框只接受鍵盤的“數字鍵”和“小數點”共11個字符

等價類
條件 有效等價類 無效等價類
內容 數字 字母
字母、符號處理方式(路徑)相同,認爲都是等價的
小數點
約束 小數點最多有1個 >1個小數點

2.5.Windows文件命名
目錄 目錄長度 文件最大長度 目錄+文件最大長度
C:\ 3 255個 = 258
C:\ABCD 7 251個 =258
C:\ABCD\AAAA 12 246個 =258

根目錄: 255
非根目錄: 254 (文件夾最小長度爲1)

1、測試需求分析
內容:非“/😗?"<>|”的字符
長度: 根目錄: 255
非根目錄: 254 (文件夾最小長度爲1)
約束:同目錄下不能重名(去除首尾空格)
不同擴展名使用不同的圖標
不能爲空
總結
1、適用範圍:針對程序的輸入
2、使用步驟
1)、測試需求分析,找出全部條件(顯示、隱士)(條件之間不能交叉或者組合,到設計用例的時候再考慮多條件的組合)
2)、劃分等價類
劃分依據:相同的處理方式(路徑)
分類:有效等價類、無效等價類
3)、使用邊界值補充(有序、有範圍的)等價類
內容:上點、離點、內點
要求:上點、內點與區間開閉無關,離點和上點互爲有效
分類:將邊界值分爲有效邊界和無效邊界,填入等價類表格
4)、對每個等價類進行唯一的編號
5)、設計用例的輸入
原則:有效等價類,一對多
無效等價類,一對一
3、優點:對輸入的考慮充分
4、缺點:如果不清楚系統的實現方式,造成大量的冗餘用例(黑盒方法共有)
對於多輸入的組合不太適宜
規則的幾種情況:
1 .若規則是布爾式的
有效、無效分別取一個 一個真,一個假
2. 若規則是區間
有效的取一個 無效的,在小於區間的取一個,大於區間的取一個,空或零取一個
3. 規則是集合:
有效取一個 無效的在集合外取一個
4. 規則是必須滿足的一個條件:
對無效,要細分無效(先試試其他有效等價類,再試試全部等價類全都不滿足)
例:郵箱註冊,註冊名只能以小寫字母開頭,設計無效等價類時,先試試其他有效等價類,如大寫字母、數字等,再試試其他有效全部都不滿足的情況
有效等價類:程序規格說明有意義,合理的輸入數據
無效等價類:程序規格說明無意義,不合理的輸入數據
邊界值
上點:邊界上的點
內點:區間內的點
離點:離邊界值最近且與上點不屬於同一等價類的點(對於小數,沒有離點,不用取)
規則的幾種情況:

  1. 規則是區間:
    按上點、內點、離點取
  2. 規則是取值的個數:
    取最小、最大、中間個數
    3.規則是a~z序列:
    取a、z
    4.規則是集合:
    取一個集合內的,取一個集合外的
    (0,20)上點是0,20 離點是1,19 [0,20]上點是0,20 離點是-1,21
    若規則是下拉菜單:建議每個下拉值都選擇一個

第十四章 系統測試執行
測試用例
編號組成: 項目名—測試階段—需求—用例
測試環境搭建文檔:
1.爲日後迴歸測試等搭建環境做指導
2.剛開始寫完後,評審,防止日後因環境搭建而引起測試時的問題
3.可爲日後上線的文檔做參考
4.可以做自動化步驟的參考
5.項目留存
用例執行:
1.嚴格按照用例步驟,執行用例
2.發現結果與預期結果不一致:
a)重複步驟,重現發現的問題
b)找同類型的數據,重新執行用例
c)定位發現問題的步驟 (每執行一步都要做記錄)
3.提交BUG (先確認不是重複BUG)
填BUG報告:
(一)若開發返回”不可重現的BUG”,可能原因:
1.開發步驟不對
2.測試環境和開發環境不同
3.出現時有概率的,或者其他原因導致,不是每次重現 (環境、概率)
(二)合併BUG的原則
1)同樣的原因產生的BUG可以合併
2)與開發溝通後如果修改一處就可以修改一些BUG可以合併
3)當BUG之間有制約關係,BUG可以合併
(三)補充 爲什麼.TXT文件中報春”聯通”重新打開後會有亂碼
文件保存格式默認爲ASCII碼,但恰好”聯通”是以EF開頭的,保存時誤認爲UFT-8格式,導致重新打開時歘先亂碼
(四)書寫測試用例應該注意一下幾點
1)測試輸入數據必須是唯一的,並且明確的
2)步驟要完整,按照步驟可以測試測試點和預期結果,建議每個步驟後面都有預期結果,步驟要編號
3)結果要和需求規格說明書完全一致,如果SRS沒有明確結果,需要產品人員補充和定義
4)無效等價類不能合併

第十五章 QC(Quality Center)
QC (Quality Control)質量控制
QC(前身TD Test Director與QTP、LoadRunner同是MI公司開發)
QC是B/S架構的
QC 9.0支持JBoss、IIS兩款服務器支持SQL Server和Oracle兩個數據庫
QC默認端口是8080 數據庫連接端口是1433
Quality Center QC前臺
Site Administration QC後臺
Add-Ins Page QC插件
Qcsiteadmin_db 是保存後臺數據的 而前臺中項目的數據,是單獨保存在另一個數據庫中

QC預置5個用戶組,只能查看,不能修改權限
Developer Project Manger QATester TDAdmin Viewer
外部測試人員,只有Defects Module權限,只執行測試,報BUG
組內測試人員,有QC所有模塊權限
QC後臺:
Site Project 設置項目
Create Domain 建立區域
Create Project 建立項目
Create an empty Project 建立一個空項目
Create project by copying data from an existing project
從已有項目拷貝創建一個新項目

Create a project by importing data from an exported Quality Center project file
從一個已有項目的導出文件創建一個新項目

QC前臺:
TOOLS下的Customize…選項
Customize Project Entities 設置輸入項 可添加新選項
Customize Project Lists 項目列表 可設置下拉列表中的項
Requirements 需求模塊
菜單欄下Requirements菜單項
Covert to Tests 將需求轉換成測試用例 用於比較系統的測試
Generate Test…將需求生成測試執行 用於臨時的測試
菜單欄中View菜單項
Expend 擴展,全部展開
Collapse 收起
Numeration 排序
Full Coverage 完全覆蓋(考慮測試覆蓋率)
Requirements Tree 需求樹結構 用於項目經理等管理者
Requirements Grid 需求表結構 用於瀏覽者(可用Favorites)
Requirements Coverage 需求覆蓋率 用於測試人員
Coverage Analysis 需求分析視圖 用於測試管理者
菜單欄中Analysis菜單項
Reports選項下
Standard Requirements Report 標準需求表 用於評審
Tabular Requirements 概要表 用於產品經理
Requirements with Coverage Tests 帶覆蓋率的表 用於測試經理
Requirements with Coverage Tests and Steps 帶步驟的 用於測試用例評審
Requirements with Linked Defects 帶缺陷的 用於生成測試報告
Graphs選項下
Progress 給項目經理
Requirements Coverage 給測試經理
Trend 給BOSS
工具條中Set filter/Sort 過濾器 用*做通配符
View Order 結果排序 同級才能排序
雙擊一條需求 Requirement Details 需求詳細信息
Coverage 覆蓋率
Linked Defects 連接缺陷
需求的狀態:not covered not run not complete passed failed
Test Plan 測試用例模塊
點擊一條測試用例,右側在Design Steps標籤頁下
Call to Test 調用測試用例 只能調用到一個參數 可用於迴歸測試
Generate Script 生成腳本
Insert Parameter 添加參數
Renumber Steps 重新寫序號 (不影響步驟的內容)
菜單欄中Tests菜單項
Flag for Follow up 標記一個執行
Mark as Template Test 標記成爲模板用例
菜單欄下View菜單項
Trace Changes 變更跟蹤警告
Analysis中所有報表均是測試工程師用
Test Lab 測試執行模塊
需要添加一個集,用例才能被添加到集
菜單欄下Test Sets菜單項
Reset Test Set 重置測試集 用於測試迴歸,所有狀態均爲No Run
Purge Runs 清理執行的狀態 清理執行的狀態,上個是全部,此爲條件式
狀態優先級:
Failed > Not Complete或N/A或No Run > Passed
Trace Changes
在Test Plan中,跟蹤的是需求Requirements
在Test Lab中,跟蹤的是缺陷Defects狀態時”Fixed”時
在Defects中,跟蹤的是Test Lab成功運行時
其中紅色! 表示未看過 灰色表示已看過
QC中,Defects只能連接自己,不能連接其他而 Requirements、Test Plan、Test Lab可以連接其他任何一個,不能連接自己,所以,Defects單獨劃出一個模塊
權限設置:
需求人員:寫需求
測試人員:用例、BUG、執行用例
開發人員:改BUG
項目經理:所有權限
當產生糾紛時,在設置中增加一個狀態,在Defects中的Description選項中的Comments下添加分歧的描述、原因等等,分配給解決糾紛的人,只有被分配的人可以修改狀態,其他人不能更改

變更控制:
能否變更 用Reviewed(評審)字段,將之設置成必填項,默認值是Not Reviewed
設置權限中,不給需求人員修改Reviewed的權限

第十六章 PYTHON
Python 是面向過程、面向對象,跨平臺的高級腳本語言。 是解釋性語言,執行源代碼,提供豐富的庫,支持多線,多進程,網絡編程,可以支持C/C++的代碼,可以測試C/C++和Python開發的單元產品,Python越來越多的成爲開源測試自動化工具的首選語言
Python的安裝
1.安裝之前,先退出殺毒軟件
2.安裝 缺省安裝
3.完畢後,配置系統環境變量 path (把解釋器pathon.exe所在目錄加入path)
Python的集成環境:
1.Python文件夾下IDLE
2.新建文件 New Window
3.保存(用Save As…後綴.py)
4.運行方式:
a)Run Module (若提示”Socket Error”是因爲殺毒軟件引起的錯誤)
b)命令行方式 在DOS下,進入文件目錄,輸入命令python hello.py
python可以用#來做註釋
輸入中文時在前面加#coding:gbk
在GUI界面下 若不加保存時會報警告

補充知識:
DOS命令:
切換盤符 盤符名:
進入文件夾 cd 文件夾名\文件夾名…
退到根目錄 cd
退出一層目錄 cd…
數據類型:
Str字符型字符串(可以用單引號、雙引號) Int 整形 long長整形 float浮點型 bool(布爾型):True真/False假(首字母大寫,不用加引號)
運算符:
算術運算符: + — * /
邏輯運算符: and or not
比較運算符: 相等 = = 不等於 != < > <= >=
縮進:
在行首用空格或者Tab 縮進相當於C語言中的{ } 表示對應一段完整的邏輯
一般用TAB 因爲一段代碼中不能同時使用兩種縮進方式,默認是TAB
控制語句:
IF條件
1 if (條件1):
處理語句1
處理語句2
處理語句3

語法解釋:滿足條件1執行語句1,2,3,不滿足條件1執行語句
2 if (條件1):
處理語句1
處理語句2
elif
處理語句3

語法解釋:滿足條件1執行語句1,2不滿足條件1,執行語句3
3 (1) if (條件1): (2)if (條件1):
處理語句1 處理語句1
處理語句2 處理語句2
elif (條件2): else:
處理語句3 if(條件2):
處理語句4 處理語句3
… 處理語句4
else: else:
處理語句5 處理語句5
處理語句6 處理語句6
… 。。。。
處理語句7 處理語句7

語法解釋:滿足條件1執行語句1,2,7,不滿足條件1,滿足條件2,執行語句3,4,7,不滿足條件1,2,執行語句5,6,7
注:條件中可以用邏輯運算符 比較運算符
條件後面要加“;”
WHILE循環
while (條件):
處理語句1
處理語句2

處理語句3

語法解釋:條件爲真(滿足條件)執行語句1,2,在判斷條件,還滿足條件的話,還執行1,2直到不滿足條件,執行語句3

while (條件1):
if (條件2):
處理語句1
處理語句2

elif (條件3):
處理語句3
處理語句4

else:
處理語句5
處理語句6

處理語句7

語法解釋:條件1爲真,判斷條件2,條件2爲真,執行語句1,2,在判斷條件1,當條件1 爲假,執行7
條件1爲真,判斷條件2,條件2爲假,,在判斷條件3,當條件3爲真,執行語句3,4,判斷條件1,當條件1爲假,執行語句7
條件1爲真,判斷條件2,條件2爲假,,在判斷條件3,當條件3爲假,執行語句5,6,判斷條件1,當條件1爲假,執行語句7
FOR循環
for 變量 in 集合函數: 注:range是一個集合函數
處理語句1
處理語句2

處理語句3

語法解釋:變量值在這個集合函數之內執行語句1,2,循環執行1,2,直到變量值不在集合函數範圍內,執行語句3
例題:for I in range(1,7); #循環了6次
print”sjsddsj”
BREAK \ CONTINUE
break \ continue 只能用在循環語句中(for ,while)。
break:跳出循環,執行循環體外的第一條語句,無論循環體內還有多少語句
continue:跳過循環體內的語句去執行循環條件的條件判斷

	while (條件1):
		  處理語句1
        處理語句2
			if (條件2):
    			處理語句3
   			break
		 	else:
    			處理語句4
    			continue

處理語句5
處理語句6

語法解釋:條件1爲真,條件2爲真,執行1,2,3,6
條件1爲真,條件2爲假,執行語句1,2,4,1,2,4執行到條件1爲假後,執行語句6
條件1爲假,執行語句6
這個程序沒有執行過語句5

程序舉例:
a=1
i=1
while (a<=10):
a=a+1
if (a==10):
break
else:
continue
i=i+1
print a
print i
運行結果:a=10 i=1
函數
1 type () 查看變量的數據類型

2 Raw-input (“提示信息”) 輸入函數(從界面輸入的均是字符型)

3 isdigit() 判斷變量a是否是純數字

4 int() 強制轉換類型

5 Print輸出函數
6 range 集合函數
Range(起始值,結束值,步長)求從開始值到小於結束值,並且以步長爲某一個值的等差數列

定義:
Def 函數名(形參列表):
函數體語句
Return 返回值 #若沒有返回值,不加這句
程序舉例:Def fun(a,b,c):
Print a,b,c
Return a+b+c
調用:
有返回值
變量名=函數名(實參列表)
例:M=fun(‘3’,’4’,’asd’)
無返回值
函數名(實參列表)

第十七章 單元測試
單元測試概念:
1什麼是單元測試:對軟件的基本組成單元所作的測試(面向過程(一組函數或一個函數)面向對象(類中得方法))
2語句:真正的處理語句纔算是語句(判斷框中的語句不算)。
判定:流程圖中的菱形框;
判定數:流程圖中菱形框的個數;
分支:判定的真或假;
分支數:判定數2;
條件:判定中關係(比較)運算符;
條件數:判定中關係(比較)運算符的個數;
條件結果數:條件數
2(每個條件有真、假兩個取值)。
3單元測試的目的:與LLD是否符合;與SRS是否符合;編程是否存在問題。
4關注重點包括:單元接口(類型,順序,長度,參數個數);局部數據結構;獨立路徑;邊界值;出錯處理。
5單元測試環境包括:被測單元、驅動單元(把被測單元驅動起來,完成被測單元的調用)、樁單元(被測單元的調用的替代品,替代輸入與輸出),測試用例(測試數據)。
6驅動單元的四個職責1)接收側四數據包含測試用例輸入好預期輸出
2)吧測試用例輸入傳送給要測試的單元
3)將被測單元的實際輸出和預期輸出進行比較,得到測試結果
4)將測試結果輸出到指定位置
7輔助技術:評估,框架應用
8樁單元:通過一組輸入和輸出模擬被替代單元的行爲
單元測試靜態測試:
1.從詳設的評審開始介入
2.詳設評審、編碼完成後,作代碼的靜態檢查
(可以用專門的檢查工具 如:PC_lint)
3.代碼的交叉走讀 (要制定標準,標準越清晰,任務被分配者越有目標,工作越細)
單元測試動態測試:
1寫用例之前,先確定覆蓋率標準
2寫用例
3搭建測試環境
4執行
5測試報告
測試評價準則:
系統測試評價準則:需求覆蓋率(=至少被用例覆蓋一次的需求項數/測試需求分析列表中的需求項數)。
單元測試評價準則:邏輯覆蓋率(=item至少被評估一次的次數/item總數)【這是一個總公式】。
邏輯覆蓋率
邏輯覆蓋率包括以下幾種:語句覆蓋率、分支覆蓋率、條件覆蓋率、分支條件覆蓋率、路徑覆蓋率。【掌握計算公式、每種覆蓋率的問題】
1語句覆蓋率=語句至少被執行一次的次數/語句總數。
問題:有可能語句覆蓋率爲100%,有可能發現邏輯運算符的問題
2判定覆蓋率=每個分支取值至少被執行一次的次數/分支總數(判定數2)
問題:當分支覆蓋率爲100%時,可能不能發現關係運算符的缺陷
3條件覆蓋率=每個條件取值至少被執行一次的次數/條件結果總數(條件數
2)
問題:條件覆蓋率爲100%時,有可能某個分支沒有執行到,若該分支有缺陷,可能會遺漏。
4分支覆蓋率=(每個分支至少被執行一次的次數+每個條件取值至少被執行一次的次數)/(分支總數+條件結果數)
問題:分支條件覆蓋率爲100%時,有可能漏路徑,若該路徑上有缺陷,可能遺漏
5路徑覆蓋率=每個路徑至少被執行一次的次數/路徑總數
問題:路徑覆蓋率爲100%時,條件覆蓋率可能不爲100%
注:獨立路徑覆蓋,若路徑覆蓋率100%則條件、語句、分支覆蓋率均100%
路徑一定要從始點到終點
可以用軟件來計算路徑覆蓋率 如BullseyeCoverage

單元測試策略
孤立、自頂向下、自底向下。
⑴ 孤立測試
缺點:需要大量的樁和驅動
優點:改方法是最簡單最容易操作的 ,可以達到高的結構覆蓋率,該方法是純粹的單元測試
方法:不考慮每個模塊與其他模塊之間的關係,爲每個模塊設計樁模塊和驅動模塊,每個模塊進行獨立的單元測試
【例1】
對象 驅動 樁
A Driver-A Stub-B
B Driver-B Stub-C
C Driver-C X

【例2】
對象 驅動 樁
A Driver-A Stub-B,C
B Driver-B Stub-D
C Driver-C Stub-E
D Driver-D X
E Driver-E X

⑵自頂向下的單元測試策略
方法:先對最頂層的單元進行測試,把頂層所調用的單元做成樁模塊。其次,對第二層進行測試,使用上面已測試的單元做驅動模塊。如此類推直到測試完所有模塊。
優點:可以節省驅動函數的開發工作量,測試效率高。
缺點:隨着被測單元一個一個被加入,測試過程將變得越來越複雜,並且開發和維護的成本將增加。
【例1】
對象 驅動 樁
A Driver-A Stub-B
B Driver-A Stub-C
C Driver-A Stub-D
D Driver-A X

【例2】
對象 驅動 樁
A Driver-A Stub-B,C,D
B Driver-A Stub-E,C,D
C Driver-A Stub-E,D
D Driver-A Stub-F,E
E Driver-A Stub-F
F Driver-A X

【例3】
對象 驅動 樁
A Driver-A Stub-B,C
B Driver-A Stub-C,D
C Driver-A Stub-E,D
D Driver-A Stub-F,E
E Driver-A Stub-F
F Driver-A Stub-G,H
G Driver-A Stub-H
H Driver-A X

a. 看被測函數下邊有沒有調用,如果被調用則打一個樁
b. 假如曾經被測過的函數的時候,這些函數下邊是否有調用,而那些調用是否也被測過,如果沒有被測過,也需要打樁
c. 只要驅動單元驅動的時候,所依賴的函數要run的時候,相關的調用都需要加入
⑶自底向上的單元測試方法
方法:先對模塊調用層次圖上最低層的模塊進行單元測試,模擬調用該模塊的模塊做驅動模塊。然後再對上面一層做單元測試,用下面已被測試過的模塊做樁模塊。以此類推,直到測試完所有的模塊
優點:可以節省樁函數的開發工作量,測試效率較高。
缺點:不是純粹的單元測試,底層函數的測試質量對上層函數的測試將產生很大的影響。
對象 驅動 樁
E Driver-E X
C Driver-C X
F Driver-F X
B Driver-B X
D Driver-D X
A Driver-A X

如果樁難寫,採用自底向上;如果驅動難寫,採用自頂向下。
打樁原則:1被測函數有沒有調動,若有調動則打樁
2加入曾經被測過的函數,這些函數是否有調動,這些調動是否被測過,都沒有則打樁
【例子】
自底向下
對象 驅動 樁
F Driver-F X
I Driver-I X
J Driver-J X
G Driver-G X
H Driver-H X
E Driver-E X
C Driver-C X
D Driver-D X
B Driver-B X
A Driver-A X
自頂向下
對象 驅動 樁
A Driver-A Stub-B
B Driver-A Stub-C,D
C Driver-A Stub-E,D
D Driver-A Stub-E
E Driver-A Stub-F,G,H
F Driver-A Stub-G,H
G Driver-A Stub-I,H
H Driver-A Stub-I,J
I Driver-A Stub-J
J Driver-A

單元測試用例設計(基本路徑覆蓋法)★ (面試)
步驟:(所有的循環僅執行一次)
1)畫流程圖
2)根據流程圖畫出流圖
3)根據流圖找出獨立路徑
4)根據獨立路徑設計用例
結點:表示一個或者多個無分支的語句
邊:表示處理流向
分支:判定真假的語句
區域:由結點和邊構成的,域的個數等於獨立路徑的條數
注:路徑一定要從始點到終點
複雜性計算 :V(G)=E-N+2
V ( G ) =P+1
E:邊,
N:結點數量,
P:條件結點的數量,
V最好不要大於10
程序控制流圖
1順序結構
2if結構
3while循環結構
4until重複結構
5Case分支結構(swith結構)

單元測試執行
單元測試執行的過程:
單元計劃—單元設計—單元測試用例腳本----單元測試執行
1.搭建環境 引入googletest
a)將googletest的include和lib兩個文件夾複製到VS的項目文件夾下
b)在Visual Studio中選擇項目,屬性,將include和lib導入

c)引入googletest頭文件
#include “gtest/gtest.h”
d)在main函數中初始化GTEST
testing::InitGoogleTest(&argc,argv); 初始化google test
RUN_ALL_TESTS(); 運行當前工程所有test
2.加入被測代碼
將被測代碼頭文件引入
3.新建測試代碼
新建一個文件,編寫測試代碼
調用googletest宏
TEST(測試套名字,測試用例名字)
{
………
}
用斷言函數(ASSERT、EXPECT)來判斷預期結果與實際結果
ASSERT:致命斷言,若前一個執行失敗,則不繼續執行
EXPECT:一般斷言,前一個執行失敗,繼續執行
系統測試中發現不了在單元測試中比較容易發現的問題,如內存泄露、算法缺陷
補充:
C語言中,用malloc申請內存,free釋放內存
C++中,用new申請內存,delete釋放內存
TDD(測試驅動開發)
內存中的堆、棧
編譯器自動分配的內存是在棧中,棧會自動維護、清理
手工分配的內存是在堆中,堆不會自動清理,需要手工釋放,容易忽略造成內存泄露

單元測試框架

  1. 框架是一組爲重用而設計的方法,單元測試框架包括junit\cppunit\phpunit\c#unit\pyunit
  2. pyunit是 d:\py26\unittest.py
  3. 單元測試框架概念
    測試固件(test fixture)
    一組測試函數執行前或執行後要執行的語句。
    例如,void insertDB(chr sql[30])
    {
    //執行insert語句
    }
    若現在測試該函數,實際上每次測試之前都要建立數據庫連接,測試完成之後都要斷開斷開數據庫連接。
    建立連接和斷開連接稱之爲測試固件。測試固件在框架如何體現:
    setUP(…) —表示測試函數執行之前要執行的語句,比如建立連接
    teardown(…) —表示測試函數執行之後要執行的語句,比如斷開連接
    有沒有測試固件,取決於被測函數在測試執行需要否

測試用例
主要以測試函數爲主,什麼是測試函數?就是對被測單元完成測試的函數,類似於原始的驅動單元。
在框架中一般來說要繼承單元測試框架的TestCase。

測試套件
裝配測試用例的車間。
在框架中一般來說使用TestSuite的addTest方法來進行裝配,裝配的就是測試用例,實際上裝配的用例中的測試函數。

測試運行器
加載測試套件,對套件中裝配的測試函數的運行。
在框架中一般來說使用TestRunner中的run方法來進行運行TestSuite。
4. pyunit框架中有:
unittest.py
測試固件 -----》TestCase類中有setUp和tearDown有這兩個方法
測試用例 -----》TestCase類,在該類中寫測試函數的方法 ????
測試套件 -----》通過TestSuite類中的addTest方法將測試用例中的測試函數加載
測試運行器-----》通過TextTestRunner中的run方法將測試套件運行起來。
5. 實例:
見例子
6. 使用pyunit單元測試步驟:
1)import unittest
2)繼承unittest.TestCase構建自己的測試類
3)在自己構建的測試類中,若對於測試函數有測試固件,則在setUp和tearDown中進行代碼編寫。否則跳到1)

第十八章 集成測試
1什麼是集成測試
依據概要設計說明書,對軟件組成的所有函數模塊和子模塊進行的測試
2目的:檢查軟件是否符合概要設計說明書,是否符合需求
3關注重點
全局變量 組合功能(集成後的問題)單元接口(1穿越模塊的數據是否會丟失,即做輸入輸出的的形參定義是否正確2全局數據結構是否被異常修改)
4集成測試環境
集成後的功能:單個功能都沒有問題,組合在一起時否有問題,單個功能之間是否相互影響
進程:是一個程序在計算機上的一次執行活動,當運行了一個程序就啓動了一個進程,進程是操作系統進行資源分配的單位
線程:是進行中的一個片段
集成測試沒有聯繫,不存在集成,聯繫時全局變量,全局變量可能是內存的一片區域,也可能是同一份文件,數組,堆棧,字段,記錄,變量,隊列,集成也需要考慮到性能匹配問題,網絡集成
5集成測試的依據:LLD
6集成測試的對象:接口
7集成測試策略:大爆炸集成測試,自頂向下,自底向上,三明治集成,基於集成,分層集成,基於功能集成,基於消息集成,基於進度的集成,基於風險的集成
1)大爆炸集成測試
方法:對每個模塊分別進行單元測試,在吧所有單元組裝在一起測試
優點:從未投入模塊間,子系統間角度節省時間,減少樁和驅動的開發,節省成本,方法簡單

使用範圍:小型項目,大型項目已經穩定,只有少量修改
2)自頂向下集成測試

深度優先:在系樹的根優先,根—左—右
廣度優先:從上到下,從左到右,一層一層的
注:調用沒有加入過的都需要打樁
優點:減少驅動的開發,測試充分(一個模塊一個模塊的加入)定位問題容易,效率有所下降,最容易讓高層人物建立信心
缺點:打樁開發成本較高,效率有所下降,下層容易測試不充分
適用範圍:上層穩定,下層相對不穩定的系統
3)自底向上集成測試
優點:樁少,定位問題容易,小測試成分,下層測試充分,問題容易暴漏
缺點:驅動開發成本高,頂層測試不充分
適用範圍:下層穩定,上層變化較多
4)三明治集成測試方法

優點:樁和驅動都減少,測試靈活,問題好隔離,好定位
缺點:測試中間層可能不充分
適用範圍:大項目
注:採用哪種方法根據系統本身確定
8集成測試用例可借用單元測試和系統測試用例設計技術進行用例設計
9接口覆蓋率:每個接口至少被覆蓋一次的次數/系統中所有的接口
10集成測試的層次:子系統間集成測試,模塊內集成測試,子系統內集成測試,還要考慮模塊間集成測試

11集成測試過程:計劃(輸入HLD測試計劃,輸出IT計劃)——設計(輸出IT方案)——實施(輸出IT用例,腳本——執行(輸出集成測試報告,缺陷報告)

第一階段總結
基礎課程:測試基礎、測試過程、測試方法、軟件質量
開發基礎:SQL、C語言
需求分析、需求管理(變更控制、需求跟蹤)
環境搭建
配置管理、QC
缺陷管理
系統測試、集成測試、單元測試、python
要做好測試還應該學習DB 網絡知識 數據結構 算法 語言(C JAVA PYTHON)OS
所有課程全部基於測試目的:儘量多、儘量的發現BUG,並預防BUG
在做測試之前,先考慮可以套用哪些軟件質量特性,再根據特性考慮測試點

Test platform
管理工具:QC ,RQM
執行工具:QTP,LR ,WinRunner,BRAT
數據庫:SQL,Oracle,MySQL
配置管理工具:SVN,CVS,VSS,CC,DB2
服務器:Tomcat,IIS,JBOSS
2. 系統測試流程:
測試流程:需求階段(產出測試計劃):1)來自客戶(用戶需求)特點:用戶自身根據自己的需要提出來,不考慮技術的實現能力,功能和具體細節的實現不2)來自研發(開發文檔):特點,進一步明確客戶的需求3)來自標準協議(手機網絡協議:CSM,CDMA,WCDMA,TD_WCDMA,EDEE)
需求分析(產出測試方案):分析測試項。羅列功能模塊和功能點,產出測試項1)從質量特性的角度對測試項進行分析,包括6大特性,27個子特性2)從功能交互的角度對測試項進行分析,功能是否存在交合,交互過程中有什麼影響3)按用戶場景進行測試分析
設計階段(產出測試用例)設計方法:等價類、邊界值、狀態遷移圖、因果圖等
執行階段(產出測試報告)提交缺陷報告: 測試結束,研發人員根據提交的bug進行修改,之後release 1.1(新版本),進行迴歸測試(REG)。
補充:
敏捷開發模式 scrum 短小、快。 沒有需求、不便於管理。
User story 功能點。
3. 與bug相關
Bug的其他說法
Defect、CR(change Request)(Moto使用這種說法、submit a CR)、issue。
缺陷流程:
缺陷管理工具:QC、Mantis(開源工具)、bugfree(開源)、bugzilla、DDTS(Moto)、DMS(索愛)。
缺陷狀態:New、open、fixed、reopen、assigned、reject、later(postpone)、closed、abandon、duplicate(很常見的一個狀態,重複bug,原有的有效,引用時引用原來的bug)。摩托羅拉的缺陷管理系統DDTS
Postpone原因:有爭議的、項目進度緊,優先級低的bug、以後版本就沒有這個功能了。
Retest時可能是不同的測試人員做迴歸測試:testerA(原)、TesterB(新),測試完後需要測試經理verify
驗證完成後bug沒問題tester是否可以直接closed?如果tester沒有對bug進行測試,直接closed後可能導致bug遺漏。

第二階段項目筆記
JXC項目
擴展名爲ASP的文件是微軟開發的
擴展名爲JSP的文件是JAVA編寫的
一.建立項目JXC
1把JXC項目方在d:
2點JXC右鍵—共享和安全----WEB共享----編輯別名----執行包括腳本等權限都選上
3刪掉JXC佈置:控制面板—管理工具—Internet—網站----默認網站----JXC—右鍵刪除
4給權限:d:\點上邊的文件夾—JXC—data—右鍵屬性----安全與共享----添加—everyone----檢查名稱----確定----點中everyone—權限都選上—確定
5登錄:控制面板—管理工具—Internet信息服務-----JXC—右邊欄裏找到index.asp右鍵—瀏覽
6找WEB共享或者安全:工具—文件夾—查看—使用簡單文件共享前面的對號去掉
7客戶端需要建TSVN,服務器需要建SVN(必須)/TSVN(可建,可不建)
二.佈置JXC
1建立倉庫:新建文件夾SVN—新建文件夾jxc52-niuxiaoqing和文件夾JXC—在文件夾jxc52-niuxiaoqing裏分別新建文件夾trunk branches tags—在文件夾trunk裏分別新建文件夾doc code tools—在文件夾doc裏分別建立文件夾croup person—在文件person裏分別新建文件夾niu wang guo
2點SVN文件夾—jxc52-niuxiaoqing右鍵----create repository here
3創建的文件結構放到倉庫:SVN文件夾------tortoisvn----import
4binary文件時二進制文件(可執行的文件)
5.Dll動態鏈接庫文件有什麼作用
6 1)開始—運行—CMD—目錄—cd空格c:\program files\svbversion\bin(svnserve的路徑)—回車
2)svnserve.exe空格–(2個下劃線)help-------回車
3)svnserve.exe空格-d空格-r空格d:\svn\jxc52-niuxiaoqing----回車
4)停掉服務ctrl+c
5)上光標,又出現3)回車,啓動服務

三.配置SVN
1、svn搭建的服務環境:svnserve方式

2、修改文件:

svnserve.conf //修改服務器配置文件
anon-access = none //去除註釋 匿名訪問 不允許
auth-access = write //去除註釋 指定用戶訪問 允許

 password-db = passwd //去除註釋 啓用密碼文件passwd
 authz-db = authz     //去除註釋 啓用用戶文件authz

passwd //增加用戶並設置密碼
zhangsan = 1111 // 用戶名 = 密碼

authz //控制倉庫的訪問權限
[groups]
組名 = 用戶名(逗號分隔)

 [/] 代表倉庫的根目錄
 如果使用組:@組名 = rw

 [/trunk/doc/person/lisi] 控制倉庫裏具體目錄的權限

 如果沒有特別規定某個目錄的權限,則使用根目錄[\]權限

3、啓動服務
1、進入svn安裝目錄:cd C:\Program Files\Subversion\bin

四.訪問SVN
1 svn checkout
輸入要訪問的電腦IP
File:///倉庫建立在之間的計算機上
SVN://倉庫建立在其他機器上,要通過網絡方式訪問
Apache爲HTTP協議請求提供服務
Tomcat爲JAVA的容器,爲JAVA編譯的文件解釋
IIS爲ASP提供服務
QC的前身叫testdirector
9.0之前是mercury公司
10.0之後是惠普公司
支持的數據庫SQL ,Oracle
支持的應用服務器JBoss
支持的WEB服務器JBoss,IIS

進銷存項目
2011年10月20日
上傳圖片:數據庫中保存的是圖片名稱,實體保存在jxc/upload下。access中沒有存儲圖片的類型。

【SqlServer數據庫中binary(二進制)類型可以用來保存圖片。】

爲什麼改名? ------有可能重名,同一個windows目錄下不能重名

爲什麼是日期時間?------重名的可能性小

在哪見過類似的實現方式?----QC生成日誌,日誌保存名稱,年月日秒毫秒(1秒=1000毫秒)
系統生成的文件,爲了解決文件重名的問題,使用日期時間命名,做好精確到毫秒級。

日誌功能怎麼測?
保存4個內容:日誌級別、日誌的最大保存行數(邊界值)、保存天數(邊界值)、日誌保存路徑。

QC非活動狀態(選擇域後項目下拉列表中沒有這個項目了)才能導出(export)----沒有人操作

離點(10001):預期結果(有三種實現方式):保存一個新的日誌、覆蓋第一條、整個全刪了從第一條開始寫。

保存天數(-1):不限制。
保存路徑:目錄空間是否夠,如果不限制保存時間,硬盤保存空間不夠時怎麼辦?tester是否對硬盤空間

可操作?

安裝文件後會有一個bin目錄,存有大量二進制文件(編譯後),擴展名爲.exe,爲可運行程序。

路徑寫到上一級,不包括本級
文字相同

001 用戶名 用戶名和編號
002 密碼

新密碼 確認新密碼合爲一個需求 新密碼處驗證特殊符號等,確認新密碼只驗證是否與新密碼相同。

排序 翻頁 打印 詳細信息

所在倉庫 有讀取數據庫的代碼

測試需求:

測試需求的目的:保證測試的完整性。
將需求導入QC中,能得出什麼東西??-------not covered 應該被用例覆蓋但是還沒被覆蓋。
細化需求
每個需求項下邊的description:描述該項需求具體的 測試內容,提供測試思路。
例如:
產品圖片:
1.瀏覽功能
支持的圖片格式 jpg、gif(打開文件窗口對該文件類型進行過濾,默認顯示過濾類型爲jpg、gif)(不區分擴展名的大小寫)。
瀏覽本地路徑、網絡路徑。
2.上傳功能
被選文件路徑是否合法(選擇U盤中的文件,上傳前拔掉U盤;存在本地,上傳前刪除);
文件的大小限制(0,1M】
被上傳文件是否被獨佔打開(需要編寫程序來獨佔打開該圖片)。
圖片被上傳到服務器的upload目錄中,而且被修改圖片名稱(防止該目錄下出現重名文件),名稱格式:YYYYMMDDHHMMSS。
上傳成功後相關圖片信息(圖片的新名稱)被保存到buy(photo字段)和produit(photo字段)。
3.預覽功能
預覽模式:平鋪、拉伸、居中【一般預覽功能就這幾種模式】
使用“居中”的預覽模式。

Buy表中 shulian(數量)保存時採用四捨五入。(有bug)。如何提bug???
輸多個小數點出錯 編輯框輸入的內容按字符(字符串)處理,放到數據庫前需要進行字符轉換,多個小數點時不能轉換成float型,導致語法錯誤。
Bug:
頁面允許輸入浮點類型,數據庫中爲整形。
頁面控制的類型和數據庫的類型不一致。

進銷存項目總結
測試需求分析
工作思路參考QC需求工作流:

1、定義測試範圍

    依據:ISO9126質量模型
    確定測試範圍:被測質量特性

2、建立需求項
參考需求(SRS),明確具體要測試的需求項(測試點、需求點、功能點。。。)
樹形結構,考慮分析的“粒度”(參考QC)

    (1)、粗:文件夾級(只分解到模塊或者頁面層次)
    (2)、中:用例級  (只分解到頁面中的具體控件,如“產品名稱”、“入庫數量”,意味這最底層需求可以直接轉換爲測試用例)
    (3)、細:步驟級  (分解到用例的操作步驟 Step)
    (4)、默認使用級別:用例級

     考慮後期用例執行,分解出一些特殊的需求(以後會專門對應某些測試類型)

    (1)、頁面同名:(作爲模板),只考慮該頁面中所有控件都輸入最正確的值
                   (控件同名的需求,目的從有效、無效兩方面反覆驗證該控件輸入的合法性)
    (2)、頁面同名 Page: 以後作爲“界面測試”使用
    (3)、模塊同名:(調用該模塊內所有頁面同名的用例)作爲預測試使用,證明版本的基本功能是否正確

3、細化需求項
描述每個需求項的詳細內容

詳細內容:
1、頁面:(星號)是否允許爲空
2、數據庫: 輸入類型、長度(邊界值)
3、設計:跑到(所有)的路徑----精簡測試用例的個數

如:入庫管理模塊–新產品入庫頁面–入庫數量控件:
1、頁面:入庫輸入量不能爲空

2、數據庫:
數字類型(整型)
邊界:-231 ~ 231-1
31:整型類型佔用4個字節(4B),每個字節有8位(8bit),每位有兩個取值(0、1),考慮符號(正、負)佔用1位
2:代表每位(bit)有兩個取值(0、1)
31:除去符號位,還剩31位

3、代碼實現:
1)、當鍵盤擡起的時候,重置輸入
測試思路:(1)、擡起按鍵,非法字符的輸入被重置
(2)、繞過該事件,按下字母鍵不擡起進行鼠標焦點切換
2)、當粘貼之前,重置輸入
考慮粘貼功能的實現(鼠標右鍵進行粘貼,快捷鍵粘貼 Crtl+V)
3)、小數點個數最多1個(考慮邊界值0,1,2個)

 具體分析思路:

4.需要進行評審
藉助Rose的活動圖統一思路

4、需求覆蓋率分析
藉助工具----QC
將寫好的需求導入到QC中的需求模塊
切換到需求的第四種視圖方式:Coverage Analysis (需求覆蓋率分析),看需求的狀態(Not Covered 未覆蓋狀態),得知應該被覆蓋到的需求的數量(只統計最底層需求的個數)(被測對象的測試規模),進而預測試出用例的數量

當粘貼之前
課前複習:
需求名稱爲必填項,有空行不能導到QC中。
把相同需求分類
從需求詳細描述從哪幾方面去找?(1)頁面角度 獲取需求(星號—是否允許爲空);(2)數據庫 (長度----邊界值、類型);(3)代碼 實現方式----【目的:精簡用例的個數,路徑全部覆蓋】
代碼實現講解:
onKeyUp="value=value.replace(/[^\d.]/g,’’)
Onkeyup:當鍵盤鍵擡起的時候
Replace:重新設置
(/[^\d.]/g,’’):正則表達式 d----代表數字(0~9) .------代表小數點
整個句子解釋:
當鍵盤擡起的時候,判斷按鍵是否屬於數組或者小數點,如果不屬於這些鍵,則重置該輸入(取消該輸入)。

這樣只要設計2個用例就可(1)輸入字母;(2)輸入1.5。
如果沒有的代碼,只按照等價類邊界值的思想設計用例,需要考慮很多情況(此處略)。
此處總結如下:

onbeforepaste=“clipboardData.setData(‘text’,clipboardData.getData(‘text’).replace(/[^\d.]/g,’’))” value=“1”>
onbeforepaste:當粘貼之前
入庫數量測試(設計):
1.輸出-------入庫輸入量不能爲空;
2.代碼實現:
(1)當鍵盤擡起的時候,重置輸入;
測試思路:繞過該事件,按下字母鍵不擡起鼠標焦點切換
(2)當粘貼之前,重置輸入
考慮粘貼功能的實現(鼠標右鍵進行粘貼,快捷鍵粘貼Ctrl+V)
3.小數點個數最多1個
測試需求分析:
如何做??1.工作思路參考QC需求工作流
2.定義測試範圍; 依據:ISO9126質量特性確定測試範圍:被測質量特性
3.建立需求項------參考需求(SRS)明確具體要測試的需求項(又叫測試點、需求點、功能點….)樹型結構,考慮分析的“粒度”
【粗—文件夾級(只分解到模塊或者頁面層次);
中------用例級(只分解到頁面中的具體控件,如“產品名稱”、“入庫數量”)
細-----步驟級】
考慮後期用例執行,分解出一些特殊的需求(以後)
1.頁面同名
2.頁面同名page
3.模塊同名
4.細化需求項
5.需求覆蓋率分析

判定表
解決:多個輸入的組合問題

方法1:利用數據庫的查詢命令—笛卡爾積(全排列組合)
計算最終的組合數量:每個表記錄數的乘積
如:A(a1,a2)
B(b1,b2,b3,b4)
C(c1,c2,c3)
Select * from A、B、C

方法2:判定表多個條件,每個條件2個取值

3.1.讀書選擇
1、如果覺得不疲倦,並且對書中的內容不感興趣,同時書中的內容讓你不糊塗,跳到下一章去讀
2、如果覺得不疲倦,並且對書中的內容不感興趣,同時書中的內容讓你糊塗, 跳到下一章去讀
3、如果覺得不疲倦,並且對書中的內容感興趣, 同時書中的內容讓你不糊塗,繼續讀下去
4、如果覺得不疲倦,並且對中書的內容感興趣, 同時書中的內容讓你糊塗, 回到本章重讀
5、如果覺得疲倦, 並且對書中的內容不感興趣,同時書中的內容讓你不糊塗,停止閱讀,請休息
6、如果覺得疲倦, 並且對書中的內容不感興趣,同時書中的內容讓你糊塗, 請停止閱讀,休息
7、如果覺得疲倦, 並且對書中的內容感興趣, 同時書中的內容讓你不糊塗,繼續讀下去
8、如果覺得疲倦, 並且對書中的內容感興趣, 同時書中的內容讓你糊塗, 回到本章重讀

提煉需求:多個條件的組合生成不同的結果
1、需求分析:
條件:是否疲倦(是、否)、是否感興趣(是、否)、是否糊塗(是、否)
結果:跳到下一章、繼續讀、本章重讀
2、繪製判定表
1、分別填入條件和結果,確定表格的“行數”
2、計算條件組合的數量,規劃表格的“列數”
3、將條件進行排列組合(全排列–笛卡爾積),利用二進制原理(0代表否,1代表是)。
4、根據每種組合方式(每列),推出其對應的結果

	1	2	3	4	5	6	7	8

條件 是否疲倦 0 0 0 0 1 1 1 1
是否感興趣 0 0 1 1 0 0 1 1
是否糊塗 0 1 0 1 0 1 0 1
結果 跳到下一章 X X
繼續讀 X X
本章重讀 X X
休息 X X
注:雖然1、2的結果是一樣的,但是不能使用等價類的思想將其合併,原因:處理路徑不同。(時間緊張可以合併)。

3、編寫測試用例
原則1:判定表中的每一列生成一個測試用例,多個測試用例
原則2:判定表中的每一列生成一個測試用例的步驟,一個測試用例

我們項目使用:原則2
兩個原則測試的充分程度(覆蓋率)相同;
第二種進行需求跟蹤更簡單易操作;

原則1:----8個測試用例
用例編號 用例標題 用例輸入 操作步驟 預期結果
ST-001 不疲倦+沒興趣+不糊塗 是否疲倦: 否
是否感興趣:否
是否糊塗: 否 1、啓動系統
2、輸入以上內容
3、點擊“提交”按鈕 跳到下一章
ST-002 不疲倦+沒興趣+糊塗 是否疲倦: 否
是否感興趣:否
是否糊塗: 是 1、啓動系統
2、輸入以上內容
3、點擊“提交”按鈕 跳到下一章
ST-008 。。。。。。。。 。。。。。。。。 。。。。。。。。 。。。。。。。。

原則2:-----1個測試用例,8個步驟
用例編號 用例標題 步驟名稱 步驟輸入 操作描述 預期結果
ST-001 讀書選擇 啓動系統 。。。。。。。。 。。。。。。。。 。。。。。。。。
準備測試 。。。。。。。。 。。。。。。。。 。。。。。。。。
Step 1不疲倦+沒興趣+不糊塗 是否疲倦: 否
是否感興趣:否
是否糊塗: 否 1、啓動系統
2、輸入以上內容
3、點擊“提交”按鈕 跳到下一章
Step 2不疲倦+沒興趣+糊塗 是否疲倦: 否
是否感興趣:否
是否糊塗: 是 1、啓動系統
2、輸入以上內容
3、點擊“提交”按鈕 跳到下一章
Step 8 。。。。。。。。 。。。。。。。。 。。。。。。。。 。。。。。。。。

3.2.Counter

1、測試需求分析
條件:是否統計代碼行、是否統計空行、是否統計註釋行、是否統計總行
結果:統計代碼行、統計空行、統計註釋行、統計總行

2、繪製判定表
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
條件 是否統計代碼行 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
是否統計空行 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
是否統計註釋行 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1
是否統計總行 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
結果 統計代碼行 X X X X X X X X
統計空行 X X X X X X X X
統計註釋行 X X X X X X X X
統計總行 X X X X X X X X

3、生成測試用例
每一列生成一個測試用例,一共16種組合方式
原則1:----16個用例
用例編號 用例編號 用例輸入 操作步驟 預期結果 編寫人 編寫時間
ST-001 1.
ST-002 1.
ST-003
ST-004
ST-005

原則2:----1個測試用例,16個步驟
用例編號 用例標題 步驟名稱 步驟輸入 操作描述 預期結果 編寫人 編寫時間
ST-001 Counter統計

3.3:word中的判定表舉例
Word中的判定表舉例:
(1)字體和字號

輸入太多,選擇有代表的處理(等價類—減少輸入個數)。
字體:中文、英文(英文又可以分爲2類:帶橫線(serif—如times new roman)、不帶橫線(sens serif----arial Unicode ))
(2)

組合:4個條件,每個條件2個值。
(3)

這個不能用判定表,因爲不能同時選中“左對齊”和“右對齊”,不滿足判定表使用條件。

3.4.合併判定表
前提:時間緊張,成本過高;
原則:結果相同,條件有一個不同(貌似該條件沒有作用);
風險:被合併的條件可能走不同的“路徑”,合併可能會造成漏測。
對練習1(讀書選擇)中的判定表進行合併:

	1	2	3	4	5	6	7	8

條件 是否疲倦 0 0 0 0 1 1 1 1
是否感興趣 0 0 1 1 0 0 1 1
是否糊塗 0 1 0 1 0 1 0 1
結果 跳到下一章 X X
繼續讀 X X
本章重讀 X X
休息 X X

判定表合併:

	1	2	3	4
	1、2	3、7	4、8	5、6

條件 是否疲倦 0 ---- ---- 1
是否感興趣 0 1 1 0
是否糊塗 — 0 1 —
結果 跳到下一章 X
繼續讀 X
本章重讀 X
休息 X

前提:
合併:時間緊張,成本過高
原則:結果相同,條件有一個不同(“貌似”該條件沒有作用)
風險:被合併的條件可能走不同的“路徑”,合併會造出漏測

3.4.密碼修改
若需修改密碼,系統驗證舊密碼正確,兩個新密碼相同,則更新密碼,舊密碼即失效,其他修改項也生效,並提示“用戶信息修改成功”; 若舊密碼不正確,則提示“用戶密碼錯”,系統將不修改個人信息;若兩個新密碼不同,則提示“新密碼與驗證新密碼不同”,系統將不修改個人信息。
若只修改密碼外其他信息,則不需輸入兩個新密碼,系統只驗證舊密碼正確,就成功更改個人信息,並提示“用戶信息修改成功”;如果系統驗證舊密碼輸入不正確,則提示“用戶密碼錯”。
流程圖如下

答案:
(1)需求分析
條件:只修改密碼外其他信息(是/否)、舊密碼(正確/錯誤)、新密碼和驗證新密碼(相同/不相同)
結果:提示“用戶信息修改成功”、提示“用戶密碼錯”、提示“新密碼與驗證新密碼不同”
(2)繪製判定表
1 2 3 4 5 6 7 8
條件 只修改密碼外其他信息 0 0 0 0 1 1 1 1
舊密碼 0 0 1 1 0 0 1 1
新密碼和驗證新密碼 0 1 0 1 0 1 0 1
結果 提示“用戶信息修改成功” x x x
提示“用戶密碼錯” x x x
提示“新密碼與驗證新密碼不同” x
說明 無效 無效
(3)編寫測試用例
原則2:----1個測試用例,8個步驟
用例編號 用例標題 步驟名稱 步驟輸入 操作描述 預期結果
ST-001 修改信息 啓動系統 無 雙擊 系統正常啓動
Step1:修改密碼+舊密碼錯誤+新密碼與驗證密碼一致 是否只修改密碼外其他信息:否;
舊密碼是否正確:否;
新密碼和驗證新密碼是否一致:否 1.啓動系統;
2.輸入以上修改信息;
3.點擊“提交”按鈕
無任何提示信息
Step2:修改密碼+舊密碼錯誤+新密碼與驗證密碼一致 是否只修改密碼外其他信息:否;
舊密碼是否正確:否;
新密碼和驗證新密碼是否一致:是 1.啓動系統;
2.輸入以上修改信息;
3.點擊“提交”按鈕
提示“用戶密碼錯”,個人信息未修改
Step3:修改密碼+舊密碼正確+新密碼與驗證密碼不一致 是否只修改密碼外其他信息:否;
舊密碼是否正確:是;
新密碼和驗證新密碼是否一致:否 1.啓動系統;
2.輸入以上修改信息;
3.點擊“提交”按鈕
提示“新密碼與驗證新密碼不同”,個人信息未修改
Step4:修改密碼+舊密碼正確+新密碼與驗證密碼一致 是否只修改密碼外其他信息:否;
舊密碼是否正確:是;
新密碼和驗證新密碼是否一致:是 1.啓動系統;
2.輸入以上修改信息;
3.點擊“提交”按鈕
提示“用戶信息修改成功”,舊密碼生效,其他個人信息修改
Step5:只修改密碼外信息+舊密碼錯誤 是否只修改密碼外其他信息:是;
舊密碼是否正確:否;
新密碼和驗證新密碼是否一致:否 1.啓動系統;
2.輸入以上修改信息;
3.點擊“提交”按鈕
提示“用戶密碼錯”,個人信息未修改
Step7:只修改密碼外信息+舊密碼正確 是否只修改密碼外其他信息:是;
舊密碼是否正確:是;
新密碼和驗證新密碼是否一致:否 1.啓動系統;
2.輸入以上修改信息;
3.點擊“提交”按鈕
提示“用戶信息修改成功”,其他個人信息修改

3.5.進銷存
進銷存中的下列選框可以使用判定表的方法設計用例:

(1)需求分析
條件: 倉庫(所有倉庫/具體倉庫)(0表示所有倉庫,1表示具體倉庫)【“具體”只測試一個即可,處理方式相同,等價類思想】
類別(包括大類和小類,有三種組合,分別爲所有/所有、具體/所有、具體/具體)(分別使用0、1、2表示)
關鍵字(填/不填)(0表示不填,1表示填)
結果:所有倉庫所有庫存、所有倉庫具體庫存、具體倉庫所有庫存、具體倉庫具體庫存
(2)繪製判定表
1 2 3 4 5 6 7 8 9 10 11 12
條件 倉庫 0 0 0 0 0 0 1 1 1 1 1 1
類別 0 0 1 1 2 2 0 0 1 1 2 2
關鍵字 0 1 0 1 0 1 0 1 0 1 0 1
結果 所有倉庫所有庫存 X X
所有倉庫具體庫存 X X X X
具體倉庫所有庫存 X X
具體倉庫具體庫存 X X X X
(3)編寫測試用例
使用原則2:----1個測試用例,12個步驟
用例編號 用例標題 步驟名稱 步驟輸入 操作描述 預期結果
ST-001 庫存查詢信息組合查詢 進入庫存查詢頁面。 無 1.打開進銷存網頁;2.點擊庫存管理模塊中的庫存查詢頁面。 界面顯示庫存查詢頁面。
Step1:所有倉庫+所有大類+所有小類+不填關鍵字 倉庫:所有倉庫;
類別:所有大類和所有小類;
關鍵字:不填 1.在頁面右上角搜索處選擇所有倉庫;
2.在頁面右上角搜索處選擇所有大類和所有小類;
3.不填寫關鍵字;
4.點擊“查詢”按鈕。 頁面中顯示所有倉庫的所有庫存信息
Step2:所有倉庫+所有大類+所有小類+填關鍵字 倉庫:所有倉庫;
類別:所有大類和所有小類;
關鍵字:填 1.在頁面右上角搜索處選擇所有倉庫;
2.在頁面右上角搜索處選擇所有大類和所有小類;
3.填寫關鍵字;
4.點擊“查詢”按鈕。 頁面中顯示所有倉庫的所有庫存信息
Step3:所有倉庫+具體大類+所有小類+不填關鍵字 倉庫:所有倉庫;
類別:具體大類和所有小類;
關鍵字:不填 1.在頁面右上角搜索處選擇所有倉庫;
2.在頁面右上角搜索處選擇具體某一個大類和所有小類;
3.不填寫關鍵字;
4.點擊“查詢”按鈕。 頁面中顯示所有倉庫的具體庫存信息
Step4:所有倉庫+具體大類+所有小類+填關鍵字 倉庫:所有倉庫;
類別:具體大類和所有小類;
關鍵字:填 1.在頁面右上角搜索處選擇所有倉庫;
2.在頁面右上角搜索處選擇具體某一個大類和所有小類;
3.填寫關鍵字;
4.點擊“查詢”按鈕。 頁面中顯示所有倉庫的具體庫存信息
Step5:所有倉庫+具體大類+具體小類+不填關鍵字 倉庫:所有倉庫;
類別:具體大類和具體小類;
關鍵字:不填 1.在頁面右上角搜索處選擇所有倉庫;
2.在頁面右上角搜索處選擇具體某一個大類和具體某一個小類;
3.不填寫關鍵字;
4.點擊“查詢”按鈕。 頁面中顯示所有倉庫的具體庫存信息
Step6:所有倉庫+具體大類+具體小類+填關鍵字 倉庫:所有倉庫;
類別:具體大類和具體小類;
關鍵字:填 1.在頁面右上角搜索處選擇所有倉庫;
2.在頁面右上角搜索處選擇具體某一個大類和具體某一個小類;
3.填寫關鍵字;
4.點擊“查詢”按鈕。 頁面中顯示所有倉庫的具體庫存信息
Step7:具體倉庫+所有大類+所有小類+不填關鍵字 倉庫:具體倉庫;
類別:所有大類和所有小類;
關鍵字:不填 1.在頁面右上角搜索處選擇具體某一個倉庫;
2.在頁面右上角搜索處選擇所有大類和所有小類;
3.不填寫關鍵字;
4.點擊“查詢”按鈕。 頁面中顯示具體倉庫的所有庫存信息
Step8:具體倉庫+所有大類+所有小類+填關鍵字 倉庫:具體倉庫;
類別:所有大類和所有小類;
關鍵字:填 1.在頁面右上角搜索處選擇具體某一個倉庫;
2.在頁面右上角搜索處選擇所有大類和所有小類;
3.填寫關鍵字;
4.點擊“查詢”按鈕。 頁面中顯示具體倉庫的所有庫存信息
Step9:具體倉庫+具體大類+所有小類+不填關鍵字 倉庫:具體倉庫;
類別:具體大類和所有小類;
關鍵字:不填 1.在頁面右上角搜索處選擇具體某一個倉庫;
2.在頁面右上角搜索處選擇具體某一個大類和所有小類;
3.不填寫關鍵字;
4.點擊“查詢”按鈕。 頁面中顯示具體倉庫的具體庫存信息
Step10:具體倉庫+具體大類+所有小類+填關鍵字 倉庫:具體倉庫;
類別:具體大類和所有小類;
關鍵字:填 1.在頁面右上角搜索處選擇具體某一個倉庫;
2.在頁面右上角搜索處選擇具體某一個大類和所有小類;
3.填寫關鍵字;
4.點擊“查詢”按鈕。 頁面中顯示具體倉庫的具體庫存信息
Step11:具體倉庫+具體大類+具體小類+不填關鍵字 倉庫:具體倉庫;
類別:具體大類和具體小類;
關鍵字:不填 1.在頁面右上角搜索處選擇具體某一個倉庫;
2.在頁面右上角搜索處選擇具體某一個大類和具體某一個小類;
3.不填寫關鍵字;
4.點擊“查詢”按鈕。 頁面中顯示具體倉庫的具體庫存信息
Step12:具體倉庫+具體大類+具體小類+填關鍵字 倉庫:具體倉庫;
類別:具體大類和具體小類;
關鍵字:填 1.在頁面右上角搜索處選擇具體某一個倉庫;
2.在頁面右上角搜索處選擇具體某一個大類和具體某一個小類;
3.填寫關鍵字;
4.點擊“查詢”按鈕。 頁面中顯示具體倉庫的具體庫存信息

3.6.總結
1、什麼時候用:
(1)有多個輸入需要組合的時候,採用判定表進行用例設計;
2、怎麼用:
(2)使用判定表進行用例設計,有以下3個步驟:
a)需求分析,通過對多個條件的組合生成不同的結果進行分析,得出條件和結果。
b)繪製判定表。
i.分別填入條件和結果,確定表格的“行數”;
ii.計算條件的組合數量,規劃表格的“列數”;
iii.將條件進行排列組合,利用二進制原理;
iv.根據每種組合方式,推出其對應的結果。
c)編寫測試用例
有2種方式:判定表中的每一列生成一個測試用例,最終生成多個測試用例;
判定表中的每一列生成一個測試用例的步驟,最終生成一個測試用例。
3判定表的優點和缺點
(3)優點:組合充分,沒有遺漏;
缺點:當條件數多的時候(超過5個)用例數量多,成本高。

因果圖

條件和結果之間的關係:

恆等:條件成立,結果成立
非: 條件成立,結果不成立
或: 只要有一個條件成立,結果成立
與: 必須所有條件都成立,結果成立

條件之間的關係:

E:不能同時爲“真”
I:不能同時爲“假”
O:有且僅有一個爲“真”

第一個舉例:呼吸,用鼻子和嘴(異)
因果圖作用:1、條件和結果之間的關係:分析業務邏輯(類似流程圖的作用)
2、條件之間的關係:去除判定表中的無效的列
使用viso繪製因果圖:
操作步驟:
(1):在viso中選擇基本流程圖,
(2)按照等價(處理方式相同)條件,添加中間節點(臨時結果)。如:A、B處理相同(等價類),做中間節點(如A or B)。
(3)分析條件和結果之間的關係(恆等、與、或、非)。
如果不是一次退出結果,或者連線較多,可以增加中間節點。
(4)分析條件之間的關係(E、I、O)。

4.1.字母判定
第一列字符必須是A或B,第二列字符必須是一個數字(每列只能輸入一個字符),在此情況下(只有這個時候才)進行文件的修改,但如果第一列字符不正確,則給出信息L;如果第二列字符不是數字,則給出信息M。
不能使用等價類【不是單一條件】

1、測試需求分析
條件:第一列是A、第一列是B、第二列是數字
結果:修改文件、 提示L、 提示M

2、繪製因果圖

3、繪製判定表
假設:當判斷完是否是AorB條件後,如果取“否”,則退出系統運行。【實際工作中不允許假設】。

利用因果圖條件之間的關係,去除無效列

	1	2	3	4	5	6	7	8

條件 第一列是A 0 0 0 0 1 1 1 1
第一列是B 0 0 1 1 0 0 1 1
第二列是數字 0 1 0 1 0 1 0 1
結果 修改文件 X X
提示L X X
提示M X X
實際輸入 CC T7 B@ B5 AF A6 無效 無效

第一種條件是提示L還是提示L、M,在公司中要找開發人員詢問,不能主觀猜測。

編寫測試用例
原則2:----1個測試用例,8個步驟
用例編號 用例標題 步驟名稱 步驟輸入 操作描述 預期結果 編寫人 編寫時間
ST-001 修改文件

4.2.自動售貨機
有一個處理單價爲5角錢的飲料的自動售貨機軟件測試用例的設計。其規格說明如下:若投入5角錢或1元錢的硬幣,押下〖橙汁〗或〖啤酒〗的按鈕,則相應的飲料就送出來。若售貨機沒有零錢找,則一個顯示〖零錢找完〗的紅燈亮,這時在投入1元硬幣並押下按鈕後,飲料不送出來而且1元硬幣也退出來;若有零錢找,則顯示〖零錢找完〗的紅燈滅,在送出飲料的同時退還5角硬幣。

1、測試需求分析:
條件:有零錢、投1元、投5角、選啤酒、選橙汁
結果:紅燈亮、退1元、找5角、出啤酒、出橙汁

2、繪製因果圖

3、繪製判定表

紅色列爲無效組合

4、生成測試用例

課前複習:
經辦人不能爲空,程序中通過管理員ID判斷當前登陸用戶是否爲管理員,如果在數據庫login表中刪除再添加一個管理員後id變了,導致查詢錯誤。
Admin登陸,下拉列表中顯示所有系統的用戶,非admin登陸,下拉列表中只顯示當前登陸用戶。
關於下拉列表的問題:

關於單元測試邏輯覆蓋率:
在只有一個條件時,路徑覆蓋率爲100%時,條件覆蓋率也是100%。
如果條件不是布爾類型,可以使用數據庫中的多表關聯,計算笛卡爾積。
如:
A表(a1、a2)
B表(b1、b2、b3、b4)
C表(c1、c2、c3)
使用select * from A、B、C;查詢。

狀態遷移
5.1.飛機售票系統
1、客戶向航空公司打電話預定機票—>此時機票信息處於“完成”狀態
2、顧客支付了機票費用後—>機票信息就變爲“已支付”狀態
3、旅行當天到達機場後,拿到機票後—>機票信息就變爲“已出票”狀態
4、登機檢票後—>機票信息就變爲“已使用”狀態
5、在登上飛機之前任何時間可以取消自己的訂票信息,如果已經支付了機票的費用,則還可以得到退款,取消後—>訂票信息處於“已被取消”狀態

1、測試需求分析
狀態:完成、已支付、已出票、已使用、已被取消

2、繪製狀態遷移圖
使用rose畫狀態圖:
方法:
(1)右鍵,新建狀態圖New -----stagechar Diagram。

特點:每個狀態只出現一次

3、生成用例 — 路徑覆蓋
繪製狀態遷移樹-----每個樹枝生成一個測試用例

特點:1、每個狀態可以出現多次
2、箭頭方向統一向“右”延伸
3、狀態轉換如果出現循環,該路徑只遍歷一次

4、編寫測試用例
用例編號 標題 步驟名稱 步驟描述 預期結果
STC-001 售票流程 啓動系統
準備測試數據和環境
Step 1 完成-取消 1、客戶向航空公司打電話預定機票
2、取消該機票 1、此時機票信息處於“完成”狀態
2、訂票信息處於“已被取消”狀態
Step 2 完成-支付-取消 。。。。。 。。。。。
Step 3 。。。。。 。。。。。
Step 4 。。。。。 。。。。。
那些軟件適合狀態遷移
淘寶買東西、QC需求、配置管理狀態(normal、modified.;……)、缺陷狀態(new、open……)
QC需求狀態(只考慮一次運行)

5.2.缺陷跟蹤

流程分析
使用ROSE中的活動圖進行分析

狀態:吃飯中(有一個延續,使用ing)。
活動:吃飯
方法:
(1)右鍵,新建狀態圖New -----activity Diagram。

6.1.處理流程
在某嵌入式系統中,將待發送的數據打包成符合CAN協議的幀格式後,便可寫入發送緩站區,並自動發送。該發送子程序的流程爲:
1、首先進入發送子程序
2、系統判斷是否有空閒發送緩衝區,如果沒有則返回啓動發送失敗消息。
3、如果有空閒緩衝區,將數據包寫入空閒發送緩衝區
4、系統判斷是否寫入成功,如果不成功則返回啓動發送失敗消息
5、如果寫入成功,則啓動發送命令
6、返回啓動發送成功消息
1、繪製流程(活動)圖

2、生成測試用例------ 路徑覆蓋
1、(A) (B) (C) (D) (E) (F) 基本流
2、(A) (B) (G) 備選流
3、(A) (B) (C) (D) (G) 備選流

6.2.系統登錄

C/S程序。
先判斷是否爲空,再去判斷是否合法,涉及到效率問題。
把判斷時間短的放前邊。

用例:6個(路徑)
單個測試用戶名考慮:空、最大值、特殊符號、匹配、不匹配
6.3.字母判斷

用例:
基本流: (1) (2) (3)
(1A) (2) (3) 6列
(1B) (2) (3) 4列
備選流1:(1) (4) 1、2列
備選流2:(1) (2) (5)
(1A) (2) (5) 5列
(1B) (2) (5) 3列

	1	2	3	4	5	6	7	8

條件 第一列是A 0 0 0 0 1 1 1 1
第一列是B 0 0 1 1 0 0 1 1
第二列是數字 0 1 0 1 0 1 0 1
結果 修改文件 X X
提示L X X
提示M X X
實際輸入 CC T7 B@ B5 AF A6 無效 無效

合併判定表
1 2 3 4 5
1、2 3 4 5 6
條件 第一列是A 0 0 0 1 1
第一列是B 0 1 1 0 0
第二列是數字 ---- 0 1 0 1
結果 修改文件 X X
提示L X
提示M X X
實際輸入 CC B@ B5 AF A6
使用流程圖和判定表
都可以,使用流程圖前提要保證流程圖正確
6.4.組合查詢
庫存管理–庫存查詢代碼實現:
//////////////////////////////////
nowkeyword–輸入在查詢關鍵字
nowku-------輸入在倉庫名對應在id
nowbigclass—輸入的大類對應的id
nowsmallclass—輸入的小類對應的id
&—+加在之前sql語句後邊
////////////////////////////////

語句覆蓋100%:1個用例;
分支覆蓋100%:2個用例;
路徑覆蓋100%:16個用例。
可以使用獨立路徑(每個路徑只走一次):A-----、AB------、AC------、AD------、AE------(非法用例,不選大類不能選小類,使用ADE)。可以再找一個全選ABCDE。共6個用例。

用例:
1、 (A) (F) 獨立路徑
2、 (A) (B) (F) 獨立路徑
3、 (A) (C) (F) 獨立路徑
4、 (A) (D) (F) 獨立路徑
5、 (A) (D) (E) (F) 獨立路徑
6、 (A) (B) (C) (D) (E) (F) 補充
補充1關於where中1=1的問題:

兩個查詢是一樣的。爲什麼要加上1=1呢??因爲每個select查詢語句調教中只能加一個where,可以加多個and;如果在這句中不加1=1,之後的sql語句需要判斷之前是否加過where,再做處理,影響查詢效率。
查詢效率高。
如果查詢的是兩個表,兩個表查詢就不用寫了,兩個表關聯時就把where語句佔用了。
補充2取倉庫ID,而不是倉庫名稱:
代碼實現:

下拉列表由2部分組成,分別爲value和庫名。

課前複習
單個輸入------- 等價類邊界值
多條件組合------判定表(全排列組合,組合個數2n(n代表條件個數)條件是布爾類型,如果不是布爾類型,參考數據庫笛卡爾積,條件取值個數相乘)。
------因果圖(幫助描述中間處理過程,去除判定表中的無效組合,3種約束:E、I、O)
------正交試驗(兩兩組合)
每個條件取值不規範,使用allpairs工具。
處理流程問題------狀態遷移(強調狀態屬性,用狀態來描述流程)
-----流程分析(活動圖活流程圖)
生成用例原則:單元測試的路徑覆蓋。路徑太多可以取獨立路徑或分支覆蓋。

正交試驗
7.1.環境搭建
假設一個WEB站點,該站點有大量的服務器和操作系統,並且有許多具有各種插件的瀏覽器瀏覽:

環境配置 Web瀏覽器 瀏覽器插件 操作系統 服務器
配置選項 Netscape RealPlayer WinXP IIS
IE Flash Win2000 Tomcat
Firefox PDF Reader Win2003 Weblogic

1、測試需求分析,找出條件和取值
條件:4個
取值:每個條件有3個取值

2、選擇正交表: L9_3_4
9:代表最終生成用例的個數
4:因素(因數),代表條件的個數
3:水平,代表每個條件取值的個數

3、生成用例
因素 Web瀏覽器 瀏覽器插件 操作系統 服務器
實驗1 Netscape RealPlayer WinXP IIS
實驗2 Netscape Flash Win2000 Tomcat
實驗3 Netscape PDF Reader Win2003 Weblogic
實驗4 IE RealPlayer Win2000 Weblogic
實驗5 IE Flash Win2003 IIS
實驗6 IE PDF Reader WinXP Tomcat
實驗7 Firefox RealPlayer Win2003 Tomcat
實驗8 Firefox Flash WinXP Weblogic
實驗9 Firefox PDF Reader Win2000 IIS

正交表的特點:
    1、任意一列,每個取值出現的次數一致(均勻)(本題出現3次)
    2、任意兩列,任何兩個值得組合出現的次數一致(均勻)(本題出現1次)
    3、任意一列,該列的每個值都和其他列的所有值成對組合過(均勻)(本題組合1次)
       正交表:充分的兩兩組合(9個用例)
       判定表:全排列組合(兩兩組合、三三、四四。。。。組合)(81個用例)
       
使用原則:根據經驗,如果充分的兩兩組合不出問題,那麼多次組合出問題的可能性很小,基於成本、時間等因素,可以考慮正交試驗方法生成測試用例

7.2.Counter

因素 代碼行 註釋行 空行 總行
實驗1 選 選 選 選
實驗2 選 選 選 不選
實驗3 選 不選 不選 選
實驗4 選 不選 不選 不選
實驗5 不選 選 不選 選
實驗6 不選 選 不選 不選
實驗7 不選 不選 選 選
實驗8 不選 不選 選 不選
補充 不選 不選 不選 選
補充 不選 不選 不選 不選

7.3.組合
題目:
土壤的酸鹼度:酸性、鹼性、中性
土壤的潮溼度:潮溼、乾燥
土壤的溫度: 高溫、低溫
提供標準正交表:
因素 A B C
實驗1 0 0 0
實驗2 0 1 1
實驗3 1 0 1
實驗4 1 1 0

答案:
方法1)、正交試驗方法:
正交表:L4_2_3
土壤的酸鹼度:0(酸性)、1(鹼性+中性)
土壤的潮溼度:0(潮溼)、1(乾燥)
土壤的溫度: 0(高溫)、1(低溫)

因素 酸鹼度 潮溼度 溫度
實驗1 酸性 潮溼 高溫
實驗2 酸性 乾燥 低溫
實驗3 鹼性+中性 潮溼 低溫
實驗4 鹼性+中性 乾燥 高溫

拆分正交表

因素 酸鹼度 潮溼度 溫度
實驗1 酸性 潮溼 高溫
實驗2 酸性 乾燥 低溫
實驗3 鹼性 潮溼 低溫
實驗4 中性 潮溼 低溫
實驗5 鹼性 乾燥 高溫
實驗6 中性 乾燥 高溫

方法2)、判定表方法:
繪製判定表
1 2 3 4 5 6 7 8
條件 酸鹼度 0 0 0 0 1 1 1 1
潮溼度 0 0 1 1 0 0 1 1
溫度 0 1 0 1 0 1 0 1

帶入判定表
1 2 3 4 5 6 7 8
條件 酸鹼度 酸性 酸性 酸性 酸性 鹼性+中性 鹼性+中性 鹼性+中性 鹼性+中性
潮溼度 潮溼 潮溼 乾燥 乾燥 潮溼 潮溼 乾燥 乾燥
溫度 高溫 低溫 高溫 低溫 高溫 低溫 高溫 低溫

拆分判定表
1 2 3 4 5 6 7 8 9 10 11 12
條件 酸鹼度 酸性 酸性 酸性 酸性 鹼性 中性 鹼性 中性 鹼性 中性 鹼性 中性
潮溼度 潮溼 潮溼 乾燥 乾燥 潮溼 潮溼 潮溼 潮溼 乾燥 乾燥 乾燥 乾燥
溫度 高溫 低溫 高溫 低溫 高溫 高溫 低溫 低溫 高溫 高溫 低溫 低溫

時間不充裕選擇正交實驗法,否則選擇判定法(充分)

方法3)、Allpairs工具實現
使用allpairs工具:
Cmd-----進入allpairs目錄下 cd C:\Documents and Settings\51testing\桌面\allpairs----
新建空白excl文件,將條件複製到excl中,

TEST CASES
case 土壤酸鹼度 土壤潮溼度 土壤溫度
1 酸性 潮溼 高溫
2 酸性 乾燥 低溫
3 鹼性 潮溼 低溫
4 鹼性 乾燥 高溫
5 中性 潮溼 高溫
6 中性 乾燥 低溫

7.4.環境搭建
假設一個WEB站點,該站點有大量的服務器和操作系統,並且有許多具有各種插件的瀏覽器瀏覽:

環境配置 Web瀏覽器 瀏覽器插件 操作系統 服務器
配置選項 IE RealPlayer WinXP IIS
Firefox Flash Win2000 Tomcat
PDF Reader Win2003 Weblogic
Baidu Win 7
XunLei

練習:進銷存

條件:
倉庫:所有、具體
大類和小類:所有-所有、具體-所有、具體-具體
關鍵詞:不填、貨號(模糊)、產品名稱(模糊)

其他
輸入域
尋找輸入中的特殊值
如:註冊頁面輸入用戶名:hujintao、admin、administrator…….
如:結構化輸入(相互制約)要考慮組合:日期(年月日)、國家—城市,進銷存權限複選控制(庫存查詢、刪除)
【上下級關係的選項】
員工權限
Bug:不選庫存查詢可以選擇修改和刪除。
輸出域
找輸出或者設計的等價類和邊界值----根據結果的邊界反推出輸入
如:數據庫涉及時間的查詢(首尾時間參考數據的第一條和最後一條記錄的時間)
如:QC需求,同級最大的需求數量:263
最多的子集層數:255/3 = 85
如:QC中的日誌最大行數、
如:QC中添加字段最多可以添加24個字段(可以通過查看數據庫中的表得到)。

異常分析
可靠特性:容錯、恢復
如:SQL Server的導入功能(在源數據上構造錯誤數據,看異常處理功能的代碼是否正確)
如:進銷存的數據還原

錯誤猜測
憑經驗
如:數字輸入框(非數字字符的輸入控制,小數點的個數)
數據庫的設計(約束關係)

作業:
三角形問題:

成立條件:兩邊之和大於第三邊。
1、等價類
2、判定表
3、流程分析。
密碼修改問題:
1、判定表
流程分析

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