軟件測試與缺陷管理.ppt_第1頁
軟件測試與缺陷管理.ppt_第2頁
軟件測試與缺陷管理.ppt_第3頁
軟件測試與缺陷管理.ppt_第4頁
軟件測試與缺陷管理.ppt_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、第五章,軟件測試與缺陷管理,在畢業(yè)設(shè)計(jì)項(xiàng)目中,我們將采取什么方法來進(jìn)行進(jìn)度管理? 面試時(shí),面試官問你 “如何實(shí)現(xiàn)一個(gè)權(quán)限系統(tǒng)”,你將如何回答?,回顧,預(yù)習(xí)檢查,畢業(yè)設(shè)計(jì)項(xiàng)目中,我們使用什么工具來管理測試用例? 實(shí)現(xiàn)動(dòng)態(tài)系統(tǒng)菜單的ASP.NET方法有哪些? 簡單描述實(shí)現(xiàn)TreeView菜單的思路?,本章任務(wù),編寫“用戶管理”測試用例 使用ASP.NET技術(shù)實(shí)現(xiàn)系統(tǒng)功能菜單,本章目標(biāo),建立軟件質(zhì)量觀念 了解軟件測試的意義和方法 學(xué)會(huì)編寫測試用例 了解缺陷管理的流程 會(huì)使用TreeView控件實(shí)現(xiàn)系統(tǒng)菜單,為什么要做軟件測試(1)?,軟件缺陷和軟件故障案例 案例1 迪斯尼的獅子王,19941995

2、兼容性問題 案例2 跨世紀(jì)“千年蟲”問題 設(shè)計(jì)考慮不周全 案例3 愛國者導(dǎo)彈防御系統(tǒng)炸死自家人 系統(tǒng)時(shí)鐘誤差積累,為什么要做軟件測試(2)?,系統(tǒng)故障原因:硬件故障:軟件故障 = 10:1 運(yùn)行軟件的駐留故障密度(每千行代碼的故障數(shù)目): 要求很高的關(guān)鍵財(cái)務(wù)或財(cái)產(chǎn)軟件為:110個(gè)軟件缺陷/千行代碼 關(guān)鍵的生命軟件為:0.011個(gè)故障/千行代碼,軟件失敗時(shí),也許僅僅是給我們帶來了不便(案例1),也可能是災(zāi)難性的(案例3)。我們需要軟件測試,來保障軟件質(zhì)量。,什么是軟件缺陷(Bug)?,軟件缺陷的定義 軟件未達(dá)到產(chǎn)品說明書中已經(jīng)標(biāo)明的功能 軟件出現(xiàn)了產(chǎn)品說明書中指明不會(huì)出現(xiàn)的錯(cuò)誤 軟件未達(dá)到產(chǎn)品說

3、明書中雖未指出但應(yīng)當(dāng)達(dá)到的目標(biāo) 軟件功能超出了產(chǎn)品說明書中指明的范圍 軟件測試人員認(rèn)為軟件難以理解、不易使用,或者最終用戶認(rèn)為該軟件使用效果不良,計(jì)算器的例子,小結(jié)1,這時(shí),漂亮的空姐過來宣布:“旅客朋友們請放心,我們飛機(jī)安裝有先進(jìn)的安全控制系統(tǒng),該系統(tǒng)是由著名的公司(你所在的公司)開發(fā)的,. .”,假如你現(xiàn)在坐在飛機(jī)上,忽然飛機(jī)開始顫抖.,要想真正設(shè)計(jì)、編寫出高質(zhì)量的軟件,首先需要我們在做事的時(shí)候,腦子里具有質(zhì)量意識。,這時(shí),你是頓時(shí)感到踏實(shí),還是忽然覺得什么都完了?,什么是軟件測試?,什么是軟件測試 定義:軟件測試是為了發(fā)現(xiàn)軟件缺陷而執(zhí)行程序的過程 軟件測試的依據(jù) 需求規(guī)格說明書(重中之重

4、); 相關(guān)的設(shè)計(jì)說明(概要設(shè)計(jì),詳細(xì)設(shè)計(jì)等); 已經(jīng)基本成型的UI(可以有針對性地補(bǔ)充一些用例)。,軟件測試方法(1),按照測試方法來分,軟件測試分為: 黑盒測試 白盒測試,軟件測試方法(2),思想 已知程序內(nèi)部工作流程,通過測試檢驗(yàn)程序內(nèi)部動(dòng)作是否按規(guī)格說明書規(guī)定正常運(yùn)作 依據(jù) 程序的內(nèi)部邏輯結(jié)構(gòu),針對程序的邏輯路徑設(shè)計(jì)測試用例 特點(diǎn) 必須了解程序的內(nèi)部工作流程,白盒測試,思想 根據(jù)已知程序的功能和性能(而不是內(nèi)部細(xì)節(jié)),通過測試檢驗(yàn)每個(gè)功能和性能是否正常 依據(jù) 程序的功能和性能描述 特點(diǎn) 知道程序的功能和性能,不必了解程序的內(nèi)部結(jié)構(gòu)和處理細(xì)節(jié),軟件測試方法(3),黑盒測試,軟件測試階段,按

5、照測試階段來分,軟件測試分為:,需求分析,概要設(shè)計(jì),詳細(xì)設(shè)計(jì),編碼,單元測試,集成測試,確認(rèn)測試,用戶需求,驗(yàn)收測試,什么是測試用例?,測試用例的定義 測試用例就是一個(gè)“情況”,軟件程序在這種情況下,必須能夠正常運(yùn)行并且得到預(yù)期的結(jié)果。 一個(gè)簡化的測試用例: 用例: 用戶登錄 前置條件:用戶進(jìn)入到“用戶登錄頁面” 輸入: 合法用戶在系統(tǒng)中的用戶名和密碼 期待結(jié)果:用戶提交正確的用戶名和密碼后,順利進(jìn)入系統(tǒng) 測試結(jié)果:成功/失敗,測試用例的設(shè)計(jì)原則,測試用例的設(shè)計(jì)原則 對應(yīng)需求編寫測試用例 測試用例要全面覆蓋需求規(guī)格說明書中的軟件功能點(diǎn) 便于發(fā)現(xiàn)有價(jià)值的缺陷,系統(tǒng)要求上傳2M以下的文件,一般上載

6、1M多一點(diǎn)的文件絕不會(huì)有問題。這時(shí)“敏感”會(huì)讓我們設(shè)計(jì)測試用例時(shí),盡量去注意邊界條件,上載1.9M的文件會(huì)不會(huì)出問題?上載正好2M的文件呢?上載2M多一點(diǎn)的文件呢?,測試用例的組織方式,測試用例的組織方式 系統(tǒng)模塊 功能點(diǎn) 用例編號 用例說明 前置條件 輸入 預(yù)期結(jié)果 測試結(jié)果 失敗原因,教員講解,小結(jié)2,軟件測試按測試方法來分,分為哪兩種?兩種方法各有什么特點(diǎn)? 設(shè)計(jì)測試用例的兩個(gè)原則是?,為什么要做缺陷管理?,看看缺陷會(huì)給我們的軟件開發(fā)過程造成怎樣的混亂? 每發(fā)現(xiàn)一個(gè)Bug,都要驚動(dòng)整個(gè)項(xiàng)目組 例:測試人員發(fā)現(xiàn)了一個(gè)Bug,當(dāng)作發(fā)現(xiàn)新大陸一樣告訴給項(xiàng)目組長,項(xiàng)目組長找到開發(fā)組長,開發(fā)組長再

7、找程序. Bug沒有指明修改人,大家都不聞不問 例:測試人員將幾十個(gè)Bug郵件群發(fā)給開發(fā)組,開發(fā)組先是一片混亂,然后立刻平靜下來。事不關(guān)己,高高掛起. Bug的溝通成本往往很高 例:測試人員發(fā)現(xiàn)小張Bug后立即發(fā)給程序員小王,小王每次都需要和小張進(jìn)行大量的“溝通交流”來理解Bug。,缺陷管理可以幫助我們解決上述問題,將缺陷(Bug)按嚴(yán)重程度劃分等級,按特定的流程來進(jìn)行管理。,如何進(jìn)行缺陷管理(1),1、缺陷等級劃分 嚴(yán)重的缺陷:所導(dǎo)致的問題會(huì)導(dǎo)致系統(tǒng)罷工、工作不正常 例:windows的藍(lán)屏、死機(jī)。 一般的缺陷:主要工作運(yùn)作不完全,所產(chǎn)生的問題雖然嚴(yán)重,但是不影響下一步的測試。 例:軟件異常

8、。 輕微的缺陷:功能運(yùn)作正常,可是有改進(jìn)的空間。 例:對“必填”的文本框未作校驗(yàn)。,如何進(jìn)行缺陷管理(2),2、缺陷管理中的角色 開發(fā)負(fù)責(zé)人(項(xiàng)目組長) 負(fù)責(zé)制定缺陷管理計(jì)劃和流程,將測試工程師發(fā)現(xiàn)的問題指派給指定開發(fā)工程師,協(xié)調(diào)缺陷管理流程中的問題。 測試工程師 將發(fā)現(xiàn)的問題提交到缺陷管理系統(tǒng)中,寫明問題的描述、嚴(yán)重程度,問題重現(xiàn)方法;負(fù)責(zé)重新測試開發(fā)工程師修改過的缺陷。 開發(fā)工程師 確認(rèn)并修改指定給自己的軟件缺陷。,如何進(jìn)行缺陷管理(3),3、缺陷管理流程,缺陷管理工具,專業(yè)缺陷管理工具Bugzilla Bugzilla是一款很專業(yè)的缺陷管理工具。它具有一般缺陷管理系統(tǒng)所必須的功能: 提供

9、一個(gè)開發(fā)和測試交互的平臺,將測試和改錯(cuò)程序化。不需要測試人員就每一個(gè)問題和開發(fā)人員直接交流,也避免了發(fā)生錯(cuò)誤被遺忘的問題 提供錯(cuò)誤檢索功能,供項(xiàng)目經(jīng)理和測試經(jīng)理掌握測試和修改情況,畢業(yè)設(shè)計(jì)項(xiàng)目中的缺陷管理,在畢業(yè)設(shè)計(jì)中,我們將使用常見問題列表管理缺陷,常見問題列表將放在VSS服務(wù)器上,由小組組長維護(hù)。 小組內(nèi)人員發(fā)現(xiàn)問題后,在問題列表中提出問題,組內(nèi)各成員經(jīng)常查看該問題列表,遇見自己可以解答的問題,將解決方案寫入表格。,教員講解,小結(jié)3,軟件缺陷按嚴(yán)重程度可以分為三個(gè)等級、分別是什么? 簡單說說在你以前的項(xiàng)目(包括畢業(yè)設(shè)計(jì)項(xiàng)目)中,是如何進(jìn)行缺陷管理的?,ASP.NET中常用來實(shí)現(xiàn)動(dòng)態(tài)菜單的兩

10、種方法,系統(tǒng)功能菜單的ASP.NET解決方案,用TreeView 實(shí)現(xiàn)動(dòng)態(tài)菜單,用Accordion 實(shí)現(xiàn)動(dòng)態(tài)菜單,教員講解兩種方式的區(qū)別和應(yīng)用場景,使用TreeView控件動(dòng)態(tài)生成菜單(1),我們以兩層菜單為例來講解動(dòng)態(tài)菜單,MyOffice中SysFun 表數(shù)據(jù)信息,SysFun表字段信息,實(shí)現(xiàn)后的菜單效果,使用TreeView控件動(dòng)態(tài)生成菜單(2),動(dòng)態(tài)生成第一級菜單,展示所有的ParentNodeId為“0”的菜單,布局母版頁MasterPage.master,使用TreeView控件動(dòng)態(tài)生成菜單(3),protected void Page_Load(object sender, E

11、ventArgs e) if (!Page.IsPostBack) DisplayUserMenu(); protected void DisplayUserMenu() tvUserRightMenu.Nodes.Clear(); IList parentSysFun = SysFunManager.GetAllParentNodeInfo(); foreach (SysFun sfParent in parentSysFun) string nodeId = sfParent.NodeId.ToString(); string displayName = sfParent.DisplayN

12、ame; TreeNode fatherNode = this.CreatTreeNode(displayName, nodeId, “”, “Images/menuclose.gif”); tvUserRightMenu.Nodes.Add(fatherNode); ,生成第一級菜單后臺關(guān)鍵代碼,得到系統(tǒng)菜單表中所有的第一級菜單,得到第一層節(jié)點(diǎn)的ID,得到第一層節(jié)點(diǎn)的顯示名,根據(jù)節(jié)點(diǎn)信息, 創(chuàng)建第一層節(jié)點(diǎn),將節(jié)點(diǎn)添加到TreeView中,public static IList GetAllParentNodeInfo() return SysFunService.GetAllParentNo

13、deInfo(); ,對應(yīng)的業(yè)務(wù)處理層關(guān)鍵方法,public static IList GetAllParentNodeInfo() string sql = select * from sysfun where ParentNodeId = 0; return GetSysFunBySql(sql); ,對應(yīng)的數(shù)據(jù)訪問層關(guān)鍵方法,查看生成第一級菜單關(guān)鍵后臺代碼,使用TreeView控件動(dòng)態(tài)生成菜單(4),這時(shí)添加RoleManage.aspx運(yùn)行,只能看到第一級菜單,如何生成父菜單對應(yīng)的子菜單呢?,protected void Page_Load(object sender, EventAr

14、gs e) if (!Page.IsPostBack) DisplayUserMenu(); protected void DisplayUserMenu() tvUserRightMenu.Nodes.Clear(); IList parentSysFun = SysFunManager.GetAllParentNodeInfo(); foreach (SysFun sfParent in parentSysFun) string nodeId = sfParent.NodeId.ToString(); string displayName = sfParent.DisplayName; T

15、reeNode fatherNode = this.CreatTreeNode(displayName, nodeId, “”, “Images/menuclose.gif”); CreateChildTree(nodeId,fatherNode);tvUserRightMenu.Nodes.Add(fatherNode); ,在此處添加創(chuàng)建子菜單方法,使用TreeView控件動(dòng)態(tài)生成菜單(5),private void CreateChildTree(string nodeId, TreeNode fatherNode) IList childSysFun = SysFunManager.G

16、etSysFunByParentNodeId(int.Parse(nodeId); foreach (SysFun sfChild in childSysFun) string childNodeId = sfChild.NodeId.ToString(); string childDisplayName = sfChild.DisplayName; string nodeURL = ResolveUrl(sfChild.NodeURL.Trim(); TreeNode childNode = this.CreatTreeNode(childDisplayName, childNodeId,

17、nodeURL, Images/CloseTree.gif); AddTree(fatherNode, childNode); ,生成子菜單后臺關(guān)鍵代碼,獲得父節(jié)點(diǎn)為nodeId的所有子節(jié)點(diǎn),將路徑轉(zhuǎn)換為在客戶端可用的URL,根據(jù)節(jié)點(diǎn)信息, 創(chuàng)建第二層節(jié)點(diǎn),將子節(jié)點(diǎn)添加到父節(jié)點(diǎn)中,對應(yīng)的業(yè)務(wù)處理層關(guān)鍵方法,public static IList GetSysFunByParentNodeId(int parentNodeId) string sql = select * from sysfun where ParentNodeId = + parentNodeId + ; return Get

18、SysFunBySql(sql); ,對應(yīng)的數(shù)據(jù)訪問層關(guān)鍵方法,public static IList GetSysFunByParentNodeId (int parentNodeId) return SysFunService.GetSysFunByParentNodeId(parentNodeId); ,查看生成子菜單關(guān)鍵后臺代碼,這時(shí)運(yùn)行程序?qū)崿F(xiàn)動(dòng)態(tài)菜單效果,實(shí)現(xiàn)不同登錄用戶擁有不同的菜單項(xiàng) (1),不同的登錄用戶顯示不同的菜單,權(quán)限分配需要用到的四張表之間的關(guān)鍵,實(shí)現(xiàn)不同登錄用戶擁有不同的菜單項(xiàng) (2),各表的關(guān)鍵數(shù)據(jù)信息,權(quán)限分配原則是:一個(gè)用戶對應(yīng)一個(gè)角色,一個(gè)角色對應(yīng)多個(gè)權(quán)限,

19、以系統(tǒng)管理員和普通用戶身份分別登錄,系統(tǒng)管理員登錄 后看到的菜單,普通用戶登錄 后看到的菜單,實(shí)現(xiàn)不同登錄用戶擁有不同的菜單項(xiàng) (3),實(shí)現(xiàn)這個(gè)功能,只要在前面生成TreeView菜單的基礎(chǔ)上修改即可,protected void Page_Load(object sender, EventArgs e) UserInfo user = (UserInfo)SessionCurrentUser; if (!Page.IsPostBack)DisplayUserMenu(user.UserId); protected void DisplayUserMenu(string userId) tvU

20、serRightMenu.Nodes.Clear(); IList parentSysFun = SysFunManager.GetAllParentNodeInfoByUserId(userId); foreach (SysFun sfParent in parentSysFun) string nodeId = sfParent.NodeId.ToString(); string displayName = sfParent.DisplayName; TreeNode fatherNode = this.CreatTreeNode(displayName, nodeId, “”, “Ima

21、ges/menuclose.gif”); CreateChildTree(nodeId, userId, fatherNode); tvUserRightMenu.Nodes.Add(fatherNode); ,獲得登錄用戶信息,修改顯示用戶菜單方法,添加用戶Id參數(shù),根據(jù)用戶Id獲得 對應(yīng)父節(jié)點(diǎn)信息,創(chuàng)建子節(jié)點(diǎn),生成第一層節(jié)點(diǎn)修改后的后臺代碼,實(shí)現(xiàn)不同登錄用戶擁有不同的菜單項(xiàng) (4),生成子節(jié)點(diǎn)修改后的后臺代碼,private void CreateChildTree(string nodeId, string userId,TreeNode fatherNode) IList childSysFun = SysFunManager. GetSysFunByParentNodeIdAndUserId(int.Parse(nodeId), userId); foreach (SysFun sfChild in childSysFun) string childNodeId = sfChil

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論