開發(fā)設(shè)計(jì)過程-課件_第1頁
開發(fā)設(shè)計(jì)過程-課件_第2頁
開發(fā)設(shè)計(jì)過程-課件_第3頁
開發(fā)設(shè)計(jì)過程-課件_第4頁
開發(fā)設(shè)計(jì)過程-課件_第5頁
已閱讀5頁,還剩93頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

結(jié)構(gòu)化程序設(shè)計(jì)方法一個(gè)結(jié)構(gòu)化程序就是用高級(jí)語言表示的結(jié)構(gòu)化算法。用三種基本結(jié)構(gòu)組成的程序必然是結(jié)構(gòu)化的程序,這種程序便于編寫、便于閱讀、便于修改和維護(hù)。結(jié)構(gòu)化程序設(shè)計(jì)強(qiáng)調(diào)程序設(shè)計(jì)風(fēng)格和程序結(jié)構(gòu)的規(guī)范化,提倡清晰的結(jié)構(gòu)。結(jié)構(gòu)化程序設(shè)計(jì)方法的基本思路是:把一個(gè)復(fù)雜問題的求解過程分階段進(jìn)行,每個(gè)階段處理的問題都控制在人們?nèi)菀桌斫夂吞幚淼姆秶鷥?nèi)。結(jié)構(gòu)化程序設(shè)計(jì)方法一個(gè)結(jié)構(gòu)化程序就是用高級(jí)語言表示的結(jié)采取以下方法來保證得到結(jié)構(gòu)化的程序:自頂向下;逐步細(xì)化;模塊化設(shè)計(jì);結(jié)構(gòu)化編碼。兩種不同的方法:自頂向下,逐步細(xì)化;自下而上,逐步積累。采取以下方法來保證得到結(jié)構(gòu)化的程序:兩種不同的方法:

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

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

使用的技術(shù)實(shí)用化程度技術(shù)解決方案合理程度技術(shù)資源的可用性

參與人員的工作基礎(chǔ)基礎(chǔ)硬件/軟件的可用性軟件工具實(shí)用性開發(fā)設(shè)計(jì)過程-課件用戶操作可行性用戶類型

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

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

4.2.1模塊化過程、函數(shù)、子程序和宏等,都可作為模塊。4.2設(shè)計(jì)原理

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

通信錄的模塊結(jié)構(gòu)圖4.3描繪軟件結(jié)構(gòu)的圖形工具

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

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

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

記錄項(xiàng)的基本屬性:姓名、性別、住址、聯(lián)系電話、電子郵件等通信錄功能需求:姓名、性別、住址、聯(lián)系電話、電子郵件等通訊錄數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì):

structmyrecord{ unsignedintnum; unsignedintgroup; charname[MAXLEN+1]; chargender; datebirthday; charaddress[MAXLEN+1]; charphone[MAXLEN+1]; charemail[MAXLEN+1];};通訊錄數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì):通訊錄數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì):

structmydate{ unsignedintyear; unsignedintmonth; unsignedintday;};typedefstructmydatedate;通訊錄數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì):通訊錄數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì):三個(gè)查詢關(guān)鍵字:記錄編號(hào)、組別和聯(lián)系人姓名

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

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

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

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

6.6.12.軟件的可用性軟件可用性的一個(gè)定義是:軟件可用性是程序在給定的時(shí)間點(diǎn),按照規(guī)格說明書的規(guī)定,成功地運(yùn)行的概率。2.軟件的可用性第7章維護(hù)7.1軟件維護(hù)的定義7.2軟件維護(hù)的特點(diǎn)7.3軟件的可維護(hù)性第7章維護(hù)7.1軟件維護(hù)的定義軟件工程的目的是要提高軟件的可維護(hù)性,減少軟件維護(hù)所需要的工作量,降低軟件系統(tǒng)的總成本。軟件工程的目的是要提高軟件的可維護(hù)性,減少軟件維護(hù)所需要的工所謂軟件維護(hù)就是在軟件已經(jīng)交付使用之后,為了改正錯(cuò)誤或滿足新的需要而修改軟件的過程。1、把診斷和改正錯(cuò)誤的過程稱為改正性維護(hù)。2、適應(yīng)性維護(hù),也就是為了和變化了的環(huán)境適當(dāng)?shù)嘏浜隙M(jìn)行的修改軟件的活動(dòng)。3、在使用軟

溫馨提示

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

評(píng)論

0/150

提交評(píng)論