<input id="0qass"><u id="0qass"></u></input>
  • <input id="0qass"><u id="0qass"></u></input>
  • <menu id="0qass"><u id="0qass"></u></menu>

    測試開發筆記

    測試開發 同時被 2 個專欄收錄
    2 篇文章 6 訂閱
    1 篇文章 0 訂閱

    測試開發筆記

    第一章 測試基礎
    1.什么是軟件測試
    2.軟件測試的目的、意義(怎么做好軟件測試)
    3.軟件生命周期
    第二章 測試過程
    1.測試模型
    H模型
    V模型
    2.內部測試
    3外部測試
    驗收測試(在系統測試之后)
    回歸測試
    4.測試過程(干什么,怎么干)
    5.各階段輸入、輸出標準以及入口、出口準則:(測試階段過程要素)
    第三章 測試方法
    1.測試方法對比
    2.測試方法組合
    第四章 軟件質量
    1.什么是軟件質量
    2.質量要素
    3. 6大特性27個子特性ISO國際標準組織CMM/CMMI(Capability maturity model)能力程度度模型
    4.CMMI把企業分為5個等級
    5. CMM與CMMI的區別
    第五章 SQL
    約束
    1主鍵約束
    2 非空約束 not null
    3 外鍵約束 FOREIGN KEY
    4 默認約束
    5 檢查約束 check
    6 唯一約束 unique
    SQL語句
    創建數據庫.
    表、字段、類型
    查詢
    批量處理
    視圖/虛表 view
    索引
    存儲過程 procedure
    事務 transaction
    觸發器 trigger
    練習
    一、單表查詢練習
    二、聚合函數練習
    三、分組查詢練習
    四、嵌套查詢練習
    五、聯接查詢練習
    六、外聯接查詢
    七、補充提高
    第六章 C語言
    C語言中的存儲
    數據類型
    常量
    結構體
    條件/分支邏輯
    Switch
    If
    循環
    For
    while
    do…while
    函數
    第七章 Windows環境搭建
    一、名詞注解與定義:
    C/S
    B/S
    進銷存系統
    OA系統
    第八章 需求管理
    1.什么是需求
    2. 需求工程在做什么
    3. ★需求變更
    4.★需求的跟蹤
    需求跟蹤矩陣的作用
    需求的特點
    需求工程
    變更控制流程圖
    第九章 缺陷管理
    缺陷相關概念
    缺陷管理相關概念
    BUG管理基本流程
    BUG單
    第十章 測試需求分析
    概念
    ★如何做測試需求分析
    ★UML統一建模語言(Unified Modeling Language)
    第十一章 配置管理
    1.什么是配置管理
    2.配置管理流程
    配置管理工具
    SVN操作過程手冊
    一、 如何創建“project”項目版本庫
    二、 如何查看創建的“project”項目版本庫
    三、 在版本瀏覽器里面,創建文件,并進行檢出
    四、 如何對該項目入基線
    五、 分支文件進行合并
    六、 分支沖突的解決
    第十二章 系統測試
    概念:
    分類:
    功能測試(Function testing中國 Feature testing國際)
    性能測試(Sercarity testing)
    安全性測試(Security Testing)
    安裝測試
    GUI測試(Graphical user interface)
    可用性測試(Usability testing)
    異常性測試
    文檔測試
    備份測試
    配置測試
    網絡測試
    第十三章 用例設計
    等價類
    練習
    1.1年齡注冊
    1.2.年齡注冊
    1.3.擴充
    邊界值
    2.1.年齡
    2.2.用戶名注冊
    2.3.變量命名
    2.4.進銷存價格
    2.5.Windows文件命名
    總結
    邊界值
    第十四章 系統測試執行
    測試環境搭建文檔
    用例執行
    填BUG報告
    第十五章 QC(Quality Center)
    QC后臺:
    QC前臺:
    Requirements 需求模塊
    Test Plan 測試用例模塊
    Test Lab 測試執行模塊
    第十六章 PYTHON
    Python的安裝
    Python的集成環境
    數據類型
    運算符
    縮進
    控制語句
    IF條件
    WHILE循環
    FOR循環
    BREAK \ CONTINUE
    函數
    定義
    調用
    第十七章 單元測試
    單元測試概念
    單元測試靜態測試
    單元測試動態測試
    測試評價準則
    邏輯覆蓋率
    單元測試策略
    ⑴ 孤立測試
    ⑵自頂向下的單元測試策略
    ⑶自底向上的單元測試方法
    單元測試用例設計(基本路徑覆蓋法)
    程序控制流圖
    單元測試執行
    單元測試框架
    第十八章 集成測試
    第一階段總結
    Test platform
    Bug的其他說法
    第二階段項目筆記
    一.建立項目JXC
    二.布置JXC
    三.配置SVN
    四.訪問SVN
    進銷存項目
    進銷存項目總結
    測試需求分析
    1、定義測試范圍
    2、建立需求項
    3、細化需求項
    4、需求覆蓋率分析
    判定表
    3.1.讀書選擇
    3.2.Counter
    3.3:word中的判定表舉例
    3.4.合并判定表
    3.4.密碼修改
    3.5.進銷存
    3.6.總結
    因果圖
    4.1.字母判定
    4.2.自動售貨機
    狀態遷移
    5.1.飛機售票系統
    5.2.缺陷跟蹤
    流程分析
    6.1.處理流程
    6.2.系統登錄
    6.3.字母判斷
    6.4.組合查詢
    正交試驗
    7.1.環境搭建
    7.2.Counter
    7.3.組合
    7.4.環境搭建
    其他
    輸入域
    輸出域
    異常分析
    錯誤猜測

    第一階段
    第一章 測試基礎
    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個等級

    5.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.刪除視圖時,不會影響到原來的基礎表??梢灾苯釉谝晥D中使用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
      11111

    第八章 需求管理
    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

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

    【SqlServer數據庫中binary(二進制)類型可以用來保存圖片?!?/p>

    為什么改名? ------有可能重名,同一個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條件后,如果取“否”,則退出系統運行?!緦嶋H工作中不允許假設】。

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

    	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、判定表
    流程分析

    ??2021 CSDN 皮膚主題: 大白 設計師:CSDN官方博客 返回首頁
    實付
    使用余額支付
    點擊重新獲取
    掃碼支付
    錢包余額 0

    抵扣說明:

    1.余額是錢包充值的虛擬貨幣,按照1:1的比例進行支付金額的抵扣。
    2.余額無法直接購買下載,可以購買VIP、C幣套餐、付費專欄及課程。

    余額充值
    多乐彩