開發設計過程-課件_第1頁
開發設計過程-課件_第2頁
開發設計過程-課件_第3頁
開發設計過程-課件_第4頁
開發設計過程-課件_第5頁
已閱讀5頁,還剩93頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

結構化程序設計方法一個結構化程序就是用高級語言表示的結構化算法。用三種基本結構組成的程序必然是結構化的程序,這種程序便于編寫、便于閱讀、便于修改和維護。結構化程序設計強調程序設計風格和程序結構的規范化,提倡清晰的結構。結構化程序設計方法的基本思路是:把一個復雜問題的求解過程分階段進行,每個階段處理的問題都控制在人們容易理解和處理的范圍內。結構化程序設計方法一個結構化程序就是用高級語言表示的結采取以下方法來保證得到結構化的程序:自頂向下;逐步細化;模塊化設計;結構化編碼。兩種不同的方法:自頂向下,逐步細化;自下而上,逐步積累。采取以下方法來保證得到結構化的程序:兩種不同的方法:

用這種方法逐步分解,直到作者認為可以直接將各小段表達為文字語句為止。這種方法就叫做“自頂向下,逐步細化”。用這種方法逐步分解,直到作者認為可以直接將各小段表達自頂向下,逐步細化方法的優點:考慮周全,結構清晰,層次分明,作者容易寫,讀者容易看。如果發現某一部分中有一段內容不妥,需要修改,只需找出該部分修改有關段落即可,與其它部分無關。我們提倡用這種方法設計程序。這就是用工程的方法設計程序。自頂向下,逐步細化方法的優點:模塊設計的方法:模塊化設計的思想實際上是一種“分而治之”的思想,把一個大任務分為若干個子任務,每一個子任務就相對簡單了。在拿到一個程序模塊以后,根據程序模塊的功能將它劃分為若干個子模塊,如果這些子模塊的規模還嫌大,還再可以劃分為更小的模塊。這個過程采用自頂向下方法來實現。子模塊一般不超過50行。劃分子模塊時應注意模塊的獨立性,即:使一個模塊完成一項功能,耦合性愈少愈好。

模塊設計的方法:自上而下的編程方法基本步驟(1)首先對你所面臨的問題進行精確描述,即你遇到的到底是什么問題;(2)定義輸入輸出量,即分析我們的目的是什么和現有的條件;(3)設計算法,逐層分解,逐步求精,這是做事情的一個過程,大部分人做事出錯就出在這個地方,懶得到逐層分解,逐步求精,總是妄想一步登天;(4)把算法轉化為程序語言,這一步是踏踏實實做的過程,沒有這一步你什么也做不成。(5)檢測程序,我們做的東西是否正確,不正確檢測錯誤。這一步是需要耐心的,不要怕錯誤,每一次檢測都會讓你提高。做事時,不要因一些錯誤而畏縮不前。自上而下的編程方法基本步驟軟件生命周期由軟件定義、軟件開發和運行維護(也稱為軟件維護)3個時期組成。軟件定義時期通常進一步劃分成3個階段,即問題定義、可行性研究和需求分析。開發時期通常由下述4個階段組成:總體設計,詳細設計,編碼和單元測試,綜合測試。其中前兩個階段又稱為系統設計,后兩個階段又稱為系統實現。維護時期的主要任務是使軟件持久地滿足用戶的需要。通常對維護時期不再進一步劃分階段,但是每一次維護活動本質上都是一次壓縮和簡化了的定義和開發過程。1.3軟件生命周期軟件生命周期由軟件定義、軟件開發和運行維護(也稱為軟件維護)軟件生命周期每個階段的基本任務。問題定義可行性研究3.需求分析總體設計詳細設計編碼和單元測試綜合測試軟件維護軟件生命周期每個階段的基本任務。時期階段關鍵問題問題定義問題定義問題是什么?可行性研究有可行的解嗎?需求分析系統必須做什么?開發系統設計總體設計概括地說,應該如何解決這個問題?詳細設計怎樣具體地實現這個系統?系統實現編碼和單元測試正確的程序模塊綜合測試符合要求的軟件維護維護持久地滿足用戶需要的軟件時期階段關鍵問題問題問題定義問題是什么?可行性研究有可第2章可行性研究2.1可行性研究的任務2.2可行性研究過程2.3成本/效益分析第2章可行性研究2.1可行性研究的任務可行性研究的目的,就是用最小的代價在盡可能短的時間內確定問題是否能夠解決。標準:系統完成后所能帶來的效益是否大到值得投資開發這個系統的程度。(資本回報)2.1可行性研究的任務可行性研究的目的,就是用最小的代價在盡可能短的時間內確定問題技術可行性技術風險分析技術解決方案的實用性

使用的技術實用化程度技術解決方案合理程度技術資源的可用性

參與人員的工作基礎基礎硬件/軟件的可用性軟件工具實用性開發設計過程-課件用戶操作可行性用戶類型

外行型熟練型專家型操作習慣使用單位的計算機使用情況使用單位的規章制度用戶操作可行性第3章需求分析3.1需求分析的任務3.2與用戶溝通獲取需求的方法3.3軟件需求規格說明3.4實體-聯系圖3.5驗證軟件需求第3章需求分析3.1需求分析的任務通信錄問題定義:以文件的方式保存用戶錄入的通訊錄數據供用戶查詢和使用通訊錄信息通信錄問題定義:通信錄功能需求:

記錄項的基本屬性:姓名、性別、住址、聯系電話、電子郵件等通信錄功能需求:姓名、性別、住址、聯系電話、電子郵件等通信錄功能需求:錄入:操作添加一條新的記錄項刪除:刪除一條已經存在的記錄項修改:改變記錄項的一個或多個屬性,并用新的記錄項覆蓋已經存在的記錄項查找:根據用戶輸入的屬性值查找符合條件的記錄項通信錄功能需求:刪除:刪除一條已經存在的記錄項修改:改變記通信錄功能需求:通訊錄數據以文件形式存儲在磁盤上,根據實際需要定義文件的存儲格式;在程序運行中需要對文件進行讀取操作。程序中還要對輸入數據的容錯性進行檢查,可以保證通訊錄數據的合法性。通信錄功能需求:程序中還要對輸入數據的容錯性進行檢查,第4章總體設計4.1設計過程4.2設計原理4.3描繪軟件結構的圖形工具第4章總體設計4.1設計過程總體設計的基本目的就是回答“概括地說,系統應該如何實現?”這個問題,因此,總體設計又稱為概要設計或初步設計。總體設計階段的另一項重要任務是設計軟件的結構,也就是要確定系統中每個程序是由哪些模塊組成的,以及這些模塊相互間的關系??傮w設計的基本目的就是回答“概括地說,系統應該如何實現?”這典型的總體設計過程包括下述9個步驟:設想供選擇的方案選取合理的方案推薦最佳方案功能分解5.設計軟件結構6.設計數據庫7.制定測試計劃8.書寫文檔(系統說明、用戶手冊、測試計劃、詳細的實現計劃、數據庫設計結果)9.審查和復審4.1設計過程典型的總體設計過程包括下述9個步驟:4.1設計過程過程、函數、子程序和宏等,都可作為模塊。模塊化就是把程序劃分成獨立命名且可獨立訪問的模塊,每個模塊完成一個子功能,把這些模塊集成起來構成一個整體,可以完成指定的功能滿足用戶的需求。采用模塊化原理可以使軟件結構清晰,能夠提高軟件的可靠性和可修改性,也有助于軟件開發工程的組織管理。4.2設計原理

4.2.1模塊化過程、函數、子程序和宏等,都可作為模塊。4.2設計原理

信息隱藏原理指出:應該這樣設計和確定模塊,使得一個模塊內包含的信息(過程和數據)對于不需要這些信息的模塊來說,是不能訪問的。局部化有助于實現信息隱藏,隱藏的不是有關模塊的一切信息,而是模塊的實現細節。4.2.2信息隱藏和局部化信息隱藏原理指出:應該這樣設計和確定模塊,使得一個模塊內包含開發具有獨立功能而且和其他模塊之間沒有過多的相互作用的模塊,就可以做到模塊獨立。換句話說,希望這樣設計軟件結構,使得每個模塊完成一個相對獨立的特定子功能,并且和其他模塊之間的關系很簡單。模塊的獨立性很重要,有兩條理由:第一,有效的模塊化(即具有獨立的模塊)的軟件比較容易開發出來。第二,獨立的模塊比較容易測試和維護??傊?,模塊獨立是好設計的關鍵,而設計又是決定軟件質量的關鍵環節。4.2.3模塊獨立開發具有獨立功能而且和其他模塊之間沒有過多的相互作用的模塊,通信錄的模塊結構圖4.3描繪軟件結構的圖形工具

通信錄的模塊結構圖4.3描繪軟件結構的圖形工具

通信錄功能需求:錄入:操作添加一條新的記錄項刪除:刪除一條已經存在的記錄項修改:改變記錄項的一個或多個屬性,并用新的記錄項覆蓋已經存在的記錄項查找:根據用戶輸入的屬性值查找符合條件的記錄項通信錄功能需求:刪除:刪除一條已經存在的記錄項修改:改變記通信錄功能需求:通訊錄數據以文件形式存儲在磁盤上,根據實際需要定義文件的存儲格式;在程序運行中需要對文件進行讀取操作。程序中還要對輸入數據的容錯性進行檢查,可以保證通訊錄數據的合法性。通信錄功能需求:程序中還要對輸入數據的容錯性進行檢查,通信錄的模塊結構圖輸入輸出終端輸入輸出模塊管理模塊文件操作模塊存儲文件用戶輸入系統輸出文件寫入文件讀出4.3描繪軟件結構的圖形工具

通信錄的模塊結構圖輸入輸出終端輸入輸出模塊管理模塊文件操作模4.3.1層次圖層次圖用來描繪軟件的層次結構。層次圖中的一個矩形框代表一個模塊,方框間的連線表示調用關系。4.3.1層次圖層次圖用來描繪軟件的層次結構。第5章詳細設計5.1結構程序設計5.2人機界面設計5.3過程設計的工具第5章詳細設計5.1結構程序設計結構程序設計的概念最早由E.W.Dijkstra提出。1966年Bohm和Jacopini證明了,只用3種基本的控制結構就能實現任何單入口單出口的程序。這3種基本的控制結構是“順序”、“選擇”和“循環”。5.1結構程序設計結構程序設計的概念最早由E.W.Dijkstra提出。5.13種基本的控制結構開發設計過程-課件出于要有一種不允許違背結構程序設計精神的圖形工具的考慮,Nassi和Shneiderman提出了盒圖,又稱為N-S圖。它有下述特點:(1)不可能任意轉移控制。(2)很容易確定局部和全程數據的作用域。(3)很容易表現嵌套關系,也可以表示模塊的層次結構。6.3.2盒圖(N-S圖)出于要有一種不允許違背結構程序設計精神的圖形工具的考慮,Na圖6.4盒圖的基本符號開發設計過程-課件PAD是問題分析圖(problemanalysisdiagram)的英文縮寫,自1973年由日本日立公司發明以后,已得到一定程度的推廣。它用二維樹形結構的圖來表示程序的控制流,將這種圖翻譯成程序代碼比較容易。6.3.3PAD圖PAD是問題分析圖(problemanalysisdia圖6.5PAD圖的基本符號開發設計過程-課件下面以行李托運費的算法為例說明判定表的組織方法。假設某航空公司規定,乘客可以免費托運重量不超過30kg的行李。當行李重量超過30kg時,對頭等艙的國內乘客超重部分每公斤收費4元,對其他艙的國內乘客超重部分每公斤收費6元,對外國乘客超重部分每公斤收費比國內乘客多一倍,對殘疾乘客超重部分每公斤收費比正常乘客少一半。用判定表可以清楚地表示與上述每種條件組合相對應的計算行李費的算法,如表6.1(見書118頁)所示。下面以行李托運費的算法為例說明判定表的組織方法。假設某航空公

用判定樹表示計算行李費的算法開發設計過程-課件5.2.1設計問題系統響應時間、用戶幫助設施、出錯信息處理和命令交互。1.系統響應時間一般說來,系統響應時間指從用戶完成某個控制動作(例如,按回車鍵或點擊鼠標),到軟件給出預期的響應(輸出信息或做動作)之間的這段時間。2.用戶幫助設施設計幫助設施時要解決的問題(見下頁)5.2人機界面設計5.2.1設計問題5.2人機界面設計3.出錯信息處理出錯信息和警告信息,是出現問題時交互式系統給出的“壞消息”。一般說來,交互式系統給出的出錯信息或警告信息,應該具有下述屬性。(1)信息應該用用戶可以理解的術語描述問題。(2)信息應該提供有助于從錯誤中恢復的建設性意見。(3)信息應該指出錯誤可能導致哪些負面后果。(4)信息應該伴隨著聽覺上或視覺上的提示。(5)信息不能帶有指責色彩。3.出錯信息處理4.命令交互命令行曾經是用戶和系統軟件交互的最常用的方式,現在面向窗口的、點擊和拾取方式的界面已經減少了用戶對命令行的依賴。4.命令交互通訊錄界面設計:通訊錄界面設計:通訊錄界面設計:通訊錄界面設計:通信錄功能需求:

記錄項的基本屬性:姓名、性別、住址、聯系電話、電子郵件等通信錄功能需求:姓名、性別、住址、聯系電話、電子郵件等通訊錄數據結構設計:

structmyrecord{ unsignedintnum; unsignedintgroup; charname[MAXLEN+1]; chargender; datebirthday; charaddress[MAXLEN+1]; charphone[MAXLEN+1]; charemail[MAXLEN+1];};通訊錄數據結構設計:通訊錄數據結構設計:

structmydate{ unsignedintyear; unsignedintmonth; unsignedintday;};typedefstructmydatedate;通訊錄數據結構設計:通訊錄數據結構設計:三個查詢關鍵字:記錄編號、組別和聯系人姓名

unionmysearch_entry{ unsignedintnum; unsignedintgroup; charname[MAXLEN+1];};typedefunionmysearch_entrysearch_entry;通訊錄數據結構設計:通訊錄-函數設計函數原型函數功能函數處理描述voidmenulist(void)以文本方式顯示程序主菜單,同時響應用戶輸入調用bioske(0),獲取按鍵的值voidupbar(inty)向上滾動光標條通過改變字體顏色實現光標條移動voiddownbar(inty) 向下滾動光標條通過改變字體顏色實現光標條移動voidmydelay(void)等待用戶響應調用getch()實現voidformat(void)結果輸出時打印輸出的格式信息調用printf()實現voidsearchmenu(void)輸出查詢功能的子菜單調用printf()實現voidinput_search(charch)處理查詢時用戶的輸入,將關鍵字讀入根據輸入參數ch,執行相應的操作menu.c輸入輸出文件通訊錄-函數設計函數原型函數功能函數處理描述voidmen通訊錄-函數設計函數原型函數功能函數處理描述intinput_num(void)讀入一個整型數值(記錄編號),進行合法性檢查采用了遞歸的方法循環讀取數據intinput_new(myrecord*p)進行數據修改時,讀入一個新的記錄項,并用它覆蓋輸入參數所指向的數據記錄項。參數:新記錄項的指針返回值:返回是否進行了修改的信息,已修改返回1,否則返回0。myrecord*input_app(void)錄入信息時處理鍵盤輸入,對輸入進行合法性檢查逐項錄入通訊記錄intdate_legal(intyear,intmonth,intday)檢查日期是否為合法參數:年、月、日的信息返回值:合法日期返回1,否則返回0menu.c輸入輸出文件通訊錄-函數設計函數原型函數功能函數處理描述intinpu通訊錄-函數設計file.c文件處理文件intfile_app(myrecord*p)添加一條新的記錄項參數:要錄入的記錄項的指針返回值:操作結果(插入成功返回1,失敗返回0)myrecord*read_record(intn)從文件中讀出下標為n的塊(記錄項)參數:下標值返回值:讀取結果的指針intwrite_record(myrecord*p,intn)向文件中寫入某一塊(如果該塊已經存在,將進行覆蓋)參數:指向記錄項的指針和要寫入的塊位置返回值:操作結果(插入成功返回1,失敗返回0)intfile_search(search_entry*s,intf)對存儲文件進行遍歷,查找符合輸入的記錄項并輸出參數:指向查詢項的指針和查詢類型返回值:符合條件的記錄項總數(如果是0則查找失?。﹊ntfile_delete(intn)刪除文件中某個記錄塊參數:下標值返回值:操作結果(插入成功返回1,失敗返回0)通訊錄-函數設計file.c文件處理文件intfile_a通訊錄-函數設計control.c控制文件voidappend(void)執行數據錄入操作調用input_app()完成數據錄入,調用file_app()完成數據保存。voiddelet(void)執行數據記錄項刪除操作調用file_search查找要刪除的記錄,然后調用file_delete()進行刪除voidsearch(void)執行數據查找操作調用searchmenu()進入查找的菜單,調用input_search(ch)獲得要查找的內容,file_search()進行查找voidchange(void)執行數據記錄項修改操作調用input_num()輸入待修改的記錄,調用file_search()進行查找,調用input_new()輸入新的內容,調用write_record()進行更新voidlist_all(void)列出當前所有聯系人信息打開文件,遍歷所有記錄并輸出voidinit(void)系統初試化操作,保證文件的正確性和合法性調用fopen()打開文件,初始化voidquit(void)系統退出函數,寫回文件以保證數據的一致性關閉文件,退出系統通訊錄-函數設計control.c控制文件voidappe通訊錄的某個模塊的流程圖通訊錄的某個模塊的流程圖第6章實現6.1編碼6.2軟件測試基礎6.3白盒測試技術6.4黑盒測試技術6.5調試6.6軟件可靠性第6章實現6.1編碼通常把編碼和測試統稱為實現。所謂編碼就是把軟件設計結果翻譯成用某種程序設計語言書寫的程序。測試的目的就是在軟件投入生產性運行之前,盡可能多地發現軟件中的錯誤,它是對軟件規格說明、設計和編碼的最后復審。通常在編寫出每個模塊之后就對它做必要的測試(稱為單元測試),編碼和單元測試屬于軟件生命周期的同一個階段。在這個階段結束之后,對軟件系統還應該進行各種綜合測試。通過測試發現錯誤之后還必須診斷并改正錯誤,這就是調試的目的。通常把編碼和測試統稱為實現。適宜的程序設計語言能使根據設計去完成編碼時困難最少,可以減少需要的程序測試量,并且可以得出更容易閱讀和更容易維護的程序。由于軟件系統的絕大部分成本用在生命周期的測試和維護階段,所以容易測試和容易維護是極端重要的。6.1編碼

6.1.1選擇程序設計語言適宜的程序設計語言能使根據設計去完成編碼時困難最少,可以減少總的說來,高級語言明顯優于匯編語言,因此,除了在很特殊的應用領域,或者大型系統中執行時間非常關鍵的一小部分代碼需要用匯編語言書寫之外,其他程序應該一律用高級語言書寫。高級語言應該有理想的模塊化機制,以及可讀性好的控制結構和數據結構;語言特點應該使編譯程序能夠盡可能多地發現程序中的錯誤;總的說來,高級語言明顯優于匯編語言,因此,除了在很特殊的應用程序設計語言的實用標準:(1)可以得到的軟件工具。(2)工程規模。(3)程序員的知識。(4)軟件可移植性要求。(5)軟件的應用領域。程序設計語言的實用標準:源程序代碼的邏輯簡明清晰、易讀易懂是好程序的一個重要標準。程序內部的文檔6.1.2編碼風格源程序代碼的邏輯簡明清晰、易讀易懂是好程序的6.1.2編源程序代碼的邏輯簡明清晰、易讀易懂是好程序的一個重要標準。程序內部的文檔包括恰當的標志符、適當的注解和程序的視覺組織。選取含義鮮明的名字,有助于閱讀者理解程序,如果用縮寫,那么縮寫規則應該一致,并且應該給每個名字加注解。正確的注解非常有助于對程序的理解。通常在每個模塊開始處有一段序言性的注解,簡要描述模塊的功能、主要算法、接口特點、重要數據以及開發簡史。在模塊內部,對于重要語句或分支應該注解。對全局變量做注釋。程序清單的布局對于程序的可讀性也有很大影響,應該利用階梯形式使程序的結構清晰明顯。函數間增加空行以示分隔6.1.2編碼風格源程序代碼的邏輯簡明清晰、易讀易懂是好程序的6.1.2編源程序代碼的邏輯簡明清晰、易讀易懂是好程序的一個重要標準。

全局變量——應該“有限制地使用全局變量”。使用全局變量過多,會降低程序的清晰性;降低函數的通用性;濫用全局變量會造成程序的混亂函數——“工欲善其事,必先利其器”。我們在編寫大型程序時,要善于利用已有的函數,以減少重復編寫程序段的工作量6.1.2編碼風格源程序代碼的邏輯簡明清晰、易讀易懂是好程序的6.1.2編/************************************************************//*函數原型:myrecord*input_app(void);*//*參數:無*//*返回值:新增的記錄項的地址*//*函數功能:錄入信息時處理鍵盤輸入,對輸入進行合法性檢查。*//*************************************************************/myrecord*input_app(void){ intt; chars[100],c; system("cls"); while(1)/* 輸入分組 */ { printf(" group(1-10):"); scanf("%d",&t); if(t<1||t>10) { printf("invalidinput!\n"); continue; } input.group=t; break; } while(1)/* 輸入姓名 */ { printf(" name:"); scanf("%s",&s); if(strlen(s)>MAXLEN) { printf("toolong!\n"); continue; } strcpy(,s); break; } while(1)/* 輸入性別 */ { printf(" gender(F/M):"); scanf("%s",&s); if(strlen(s)>1) { printf("invalidinput!\n"); continue; } c=s[0]; if(c!='F'&&c!='f'&&c!='M'&&c!='m') { printf("invalidinput!\n"); continue; } input.gender=toupper(c); break; } while(1)/* 輸入出生日期 */ { printf(" brithday-year(1900-2007):"); scanf("%d",&t); if(t<1900||t>2007) { printf("invalidinput!\n"); continue; } input.birthday.year=t; break; } while(1) { printf(" brithday-month(1-12):"); scanf("%d",&t); if(t<1||t>12) { printf("invalidinput!\n"); continue; } input.birthday.month=t; break; } while(1) { printf(" brithday-day(1-31):"); scanf("%d",&t); if(!date_legal(input.birthday.year,input.birthday.month,t)) { printf("invalidinput!\n"); continue; } input.birthday.day=t; break; } while(1)/* 輸入地址 */ { printf(" address:"); scanf("%s",&s); if(strlen(s)>MAXLEN) { printf("toolong!\n"); continue; } strcpy(input.address,s); break; } while(1)/* 輸入電話號碼 */ { printf(" phone:"); scanf("%s",&s); if(strlen(s)>MAXLEN) { printf("toolong!\n"); continue; } strcpy(input.phone,s); break; } while(1)/* 輸入email */ { printf(" email:"); scanf("%s",&s); if(strlen(s)>MAXLEN) { printf("toolong!\n"); continue; } strcpy(input.email,s); break; } return&input;}6.1.2編碼風格/*****************************軟件測試的目的與軟件工程所有其他階段的目的都相反。在測試階段測試人員努力設計出一系列測試方案,目的是為了竭力證明程序中有錯誤不能按照預定要求正確工作。6.2軟件測試基礎軟件測試的目的與軟件工程所有其他階段的目的都相反。在測試階段測試任何產品都有兩種方法:如果已經知道了產品應該具有的功能,可以通過測試來檢驗是否每個功能都能正常使用;如果知道產品的內部工作過程,可以通過測試來檢驗產品內部動作是否按照規格說明書的規定正常進行。前一種方法稱為黑盒測試,后一種方法稱為白盒測試。6.2.1測試方法測試任何產品都有兩種方法:如果已經知道了產品應該具有的功能對于軟件測試而言,黑盒測試法把程序看作一個黑盒子,完全不考慮程序的內部結構和處理過程。黑盒測試又稱為功能測試。白盒測試法與黑盒測試法相反,它的前提是可以把程序看成裝在一個透明的白盒子里,測試者完全知道程序的結構和處理算法。白盒測試又稱為結構測試。對于軟件測試而言,黑盒測試法把程序看作一個黑盒子,完全不考慮如果一個軟件是為許多客戶開發的,讓每個客戶都進行正式的驗收測試是不現實的。在這種情況下,絕大多數軟件開發商都使用被稱為Alpha測試和Beta測試的過程,來發現那些看起來只有最終用戶才能發現的錯誤。6.2.2Alpha和Beta測試如果一個軟件是為許多客戶開發的,讓每個客戶都進行正式的驗收測Alpha測試由用戶在開發者的場所進行,并且在開發者對用戶的“指導”下進行測試。開發者負責記錄發現的錯誤和使用中遇到的問題??傊珹lpha測試是在受控的環境中進行的。Beta測試由軟件的最終用戶們在一個或多個客戶場所進行。與Alpha測試不同,開發者通常不在Beta測試的現場,因此,Beta測試是軟件在開發者不能控制的環境中的“真實”應用。開發設計過程-課件所謂測試方案包括具體的測試目的、應該輸入的測試數據和預期的結果。通常又把測試數據和預期的輸出結果稱為測試用例。其中最困難的問題是設計測試用的輸入數據。因為不可能進行窮盡的測試,選用少量“最有效的”測試數據,做到盡可能完備的測試很重要。設計測試方案的基本目標是,確定一組最可能發現某個錯誤或某類錯誤的測試數據。6.3白盒測試技術所謂測試方案包括具體的測試目的、應該輸入的測試數據和預期的結有選擇地執行程序中某些最有代表性的通路是對窮盡測試的惟一可行的替代辦法。6.3.1邏輯覆蓋有選擇地執行程序中某些最有代表性的通路是對窮盡測試的惟一可行1.語句覆蓋為了暴露程序中的錯誤,至少每個語句應該執行一次。A=2,B=0,X=42.判定覆蓋判定覆蓋又叫分支覆蓋,它的含義是,不僅每個語句必須至少執行一次,而且每個判定的每種可能的結果都應該至少執行一次,也就是每個判定的每個分支都至少執行一次。A=3,B=0,X=3;A=2,B=1,X=13.條件覆蓋條件覆蓋的含義是,不僅每個語句至少執行一次,而且使判定表達式中的每個條件都取到各種可能的結果。A=2,B=0,X=4;A=1,B=1,X=11.語句覆蓋A=2,B=0,X=4語句覆蓋A=3,B=0,X=3;A=2,B=1,X=1判定覆蓋A=2,B=0,X=4語句覆蓋A=3,B=0,X=3;A=21.語句覆蓋為了暴露程序中的錯誤,至少每個語句應該執行一次。A=2,B=0,X=42.判定覆蓋判定覆蓋又叫分支覆蓋,它的含義是,不僅每個語句必須至少執行一次,而且每個判定的每種可能的結果都應該至少執行一次,也就是每個判定的每個分支都至少執行一次。1.語句覆蓋3.條件覆蓋條件覆蓋的含義是,不僅每個語句至少執行一次,而且使判定表達式中的每個條件都取到各種可能的結果。A=2,B=0,X=4;A=1,B=1,X=13.條件覆蓋A=2,B=0,X=4;A=1,B=1,X=14.判定/條件覆蓋選取足夠多的測試數據,使得判定表達式中的每個條件都取到各種可能的值,而且每個判定表達式也都取到各種可能的結果。A=2,B=0,X=4;A=1,B=1,X=15.條件組合覆蓋條件組合覆蓋是更強的邏輯覆蓋標準,它要求選取足夠多的測試數據,使得每個判定表達式中條件的各種可能組合都至少出現一次。A=2,B=0,X=4;A=2,B=1,X=1;A=1,B=0,X=2;A=1,B=1,X=14.判定/條件覆蓋6.點覆蓋滿足點覆蓋標準要求選取足夠多的測試數據,使得程序執行路徑至少經過流圖的每個結點一次,由于流圖的每個結點與一條或多條語句相對應。點覆蓋標準和語句覆蓋標準是相同的。7.邊覆蓋為了滿足邊覆蓋的測試標準,要求選取足夠多測試數據,使得程序執行路徑至少經過流圖中每條邊一次。通常邊覆蓋和判定覆蓋是一致的。8.路徑覆蓋路徑覆蓋的含義是,選取足夠多測試數據,使程序的每條可能路徑都至少執行一次(如果程序圖中有環,則要求每個環至少經過一次)。6.點覆蓋黑盒測試著重測試軟件功能。黑盒測試并不能取代白盒測試,它是與白盒測試互補的測試方法,它很可能發現白盒測試不易發現的其他類型的錯誤。黑盒測試力圖發現下述類型的錯誤:①功能不正確或遺漏了功能;②界面錯誤;③數據結構錯誤或外部數據庫訪問錯誤;④性能錯誤;⑤初始化和終止錯誤。6.4黑盒測試技術黑盒測試著重測試軟件功能。黑盒測試并不能取代白盒測試,它是與白盒測試在測試過程的早期階段進行,而黑盒測試主要用于測試過程的后期。設計黑盒測試方案時,應該考慮下述問題:(1)怎樣測試功能的有效性?(2)哪些類型的輸入可構成好測試用例?(3)怎樣劃定數據類的邊界?(4)系統能夠承受什么樣的數據率和數據量?(5)數據的特定組合將對系統運行產生什么影響?白盒測試在測試過程的早期階段進行,而黑盒測試主要用于測試過程應用黑盒測試技術,能夠設計出滿足下述標準的測試用例集:(1)所設計出的測試用例能夠減少為達到合理測試所需要設計的測試用例的總數;(2)所設計出的測試用例能夠告訴我們,是否存在某些類型的錯誤,而不是僅僅指出與特定測試相關的錯誤是否存在。應用黑盒測試技術,能夠設計出滿足下述標準的測試用例集:調試是在測試發現錯誤之后排除錯誤的過程,雖然調試應該而且可以是一個有序過程,但是,目前它在很大程度上仍然是需要技巧和經驗。6.5調試調試是在測試發現錯誤之后排除錯誤的過程,雖然調試應該而且可以調試過程總會有以下兩種結果之一:①找到了問題的原因并把問題改正和排除掉了;②沒找出問題的原因。在后一種情況下,調試人員可以猜想一個原因,并設計測試用例來驗證這個假設,重復此過程直至找到原因并改正了錯誤。6.5.1調試過程調試過程總會有以下兩種結果之一:①找到了問題的原因并把問題圖7.8調試過程開發設計過程-課件調試是軟件開發過程中最艱巨的腦力勞動,調試工作之所以困難的原因如下:(1)癥狀和產生癥狀的原因可能在程序中相距甚遠。(2)當改正了另一個錯誤之后,癥狀可能暫時消失了。(3)癥狀可能實際上并不是由錯誤引起的。(4)癥狀可能是由不易跟蹤的人為錯誤引起的。。(5)可能很難重新產生完全一樣的輸入條件。(6)癥狀可能時有時無,這種情況在硬件和軟件緊密地耦合在一起的嵌入式系統中特別常見。調試是軟件開發過程中最艱巨的腦力勞動,調試工作之所以困難的原如果用遍了各種調試方法和調試工具卻仍然找不出錯誤原因,則應該向同行求助。在動手改正錯誤之前,軟件工程師應該仔細考慮下述3個問題:是否同樣的錯誤也在程序其他地方存在?將要進行的修改可能會引入的“下一個錯誤”是什么?為防止今后出現類似的錯誤,應該做什么?如果用遍了各種調試方法和調試工具卻仍然找不出錯誤原因,則應該1.軟件可靠性的定義軟件可靠性是程序在給定的時間間隔內,按照規格說明書的規定成功地運行的概率。按照IEEE的規定,術語“錯誤”的含義是由開發人員造成的軟件差錯(bug),而術語“故障”的含義是由錯誤引起的軟件的不正確行為。6.6軟件可靠性

6.6.1基本概念1.軟件可靠性的定義6.6軟件可靠性

6.6.12.軟件的可用性軟件可用性的一個定義是:軟件可用性是程序在給定的時間點,按照規格說明書的規定,成功地運行的概率。2.軟件的可用性第7章維護7.1軟件維護的定義7.2軟件維護的特點7.3軟件的可維護性第7章維護7.1軟件維護的定義軟件工程的目的是要提高軟件的可維護性,減少軟件維護所需要的工作量,降低軟件系統的總成本。軟件工程的目的是要提高軟件的可維護性,減少軟件維護所需要的工所謂軟件維護就是在軟件已經交付使用之后,為了改正錯誤或滿足新的需要而修改軟件的過程。1、把診斷和改正錯誤的過程稱為改正性維護。2、適應性維護,也就是為了和變化了的環境適當地配合而進行的修改軟件的活動。3、在使用軟

溫馨提示

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

評論

0/150

提交評論