浅谈《软件工程》常用的几种软件开发方法
-
軟件工程
在上個(gè)世紀(jì)60年代中期爆發(fā)了眾所周知的軟件危機(jī)。為了克服這一危機(jī),在1968、1969年連續(xù)召開的兩次著名的NATO會議上提出了軟件工程這一術(shù)語,并在以后不斷發(fā)展、完善。與此同時(shí),軟件研究人員也在不斷探索新的軟件開發(fā)方法。
-
軟件開發(fā)方法
目前常用的開發(fā)方法有四種,分別是結(jié)構(gòu)化方法、原型法和面向?qū)ο蠓椒ā=酉聛砦覀儠灰粩⑹鲞@些軟件開發(fā)方法的實(shí)現(xiàn)過程和其中的特點(diǎn)以及優(yōu)缺點(diǎn)。
結(jié)構(gòu)化方法
結(jié)構(gòu)化方法:結(jié)構(gòu)化方法是應(yīng)用最為廣泛的一種開發(fā)方法。按照信息系統(tǒng)生命周期,應(yīng)用結(jié)構(gòu)化系統(tǒng)開發(fā)方法,把整個(gè)系統(tǒng)的開發(fā)過程分為若干階段,然后一步一步她依次進(jìn)行,前一階段是后一階段的工作依據(jù);每個(gè)階段又劃分詳細(xì)的工作步驟,順序作業(yè)。
每個(gè)階段和主要步驟都有明確詳盡的文檔編制要求,各個(gè)階段和各個(gè)步驟的向下轉(zhuǎn)移都是通過建立各自的軟件文檔和對關(guān)鍵階段、步驟進(jìn)行審核和控制實(shí)現(xiàn)的。它是由結(jié)構(gòu)化分析、結(jié)構(gòu)化設(shè)計(jì)和結(jié)構(gòu)化程序設(shè)計(jì)三部分有機(jī)組合而成的。
它的基本思想:把一個(gè)復(fù)雜問題的求解過程分階段進(jìn)行,而且這種分解是自頂向下,逐層分解,使得每個(gè)階段處理的問題都控制在人們?nèi)菀桌斫夂吞幚淼姆秶鷥?nèi)。以數(shù)據(jù)流圖,數(shù)據(jù)字典,結(jié)構(gòu)化語言,判定表,判定樹等圖形表達(dá)為主要手段,強(qiáng)調(diào)開發(fā)方法的結(jié)構(gòu)合理性和系統(tǒng)的結(jié)構(gòu)合理性的軟件分析方法。結(jié)構(gòu)化方法具有如下特點(diǎn)。
(1)遵循用戶至上原則。
(2)嚴(yán)格區(qū)分工作階段,每個(gè)階段有明確的任務(wù)和取得的成果。???
(3)強(qiáng)調(diào)系統(tǒng)開發(fā)過程的整體性和全局性。???
(4)系統(tǒng)開發(fā)過程工程化,文檔資料標(biāo)準(zhǔn)化。?
結(jié)構(gòu)化分析方法是一種面向數(shù)據(jù)流而基于功能分解的分析方法, 在該階段主要通過采用數(shù)據(jù)流程圖、編制數(shù)據(jù)字典等工具, 描述邊界和數(shù)據(jù)處理過程的關(guān)系, 力求尋找功能及功能之間的說明。
該方法的優(yōu)點(diǎn)是:理論基礎(chǔ)嚴(yán)密,它的指導(dǎo)思想是用戶需求在系統(tǒng)建立之前就能被充分了解和理解。由此可見,結(jié)構(gòu)化方法注重開發(fā)過程的整體性和全局性。
該方法的缺點(diǎn)是:開發(fā)周期長;文檔、設(shè)計(jì)說明繁瑣,工作效率低;要求在開發(fā)之初全面認(rèn)識系統(tǒng)的信息需求,充分預(yù)料各種可能發(fā)生的變化,但這并不十分現(xiàn)實(shí);若用戶參與系統(tǒng)開發(fā)的積極性沒有充分調(diào)動,造成系統(tǒng)交接過程不平穩(wěn),系統(tǒng)運(yùn)行與維護(hù)管理難度加大。?
結(jié)構(gòu)化設(shè)計(jì)方法的局限性:
i.不能直接反映問題域: 結(jié)構(gòu)化分析方法以數(shù)據(jù)流為中心, 強(qiáng)調(diào)數(shù)據(jù)的流動及每一個(gè)處理過程, 不是以問題域中的各事物為基礎(chǔ), 打破了各事物的界限, 分析結(jié)果不能直接反映問題域, 容易隱蔽一些對問題域的理解偏差。
ii.數(shù)據(jù)和代碼缺乏保護(hù)機(jī)制: 一個(gè)特定全程數(shù)據(jù)既可以被操作這些數(shù)據(jù)的過程訪問, 也可以被其他過程訪問, 這給程序設(shè)計(jì)帶來了不安定因素, 一個(gè)不正常的數(shù)據(jù)修改或者過程調(diào)用可能會破壞正常的程序執(zhí)行流程或結(jié)果。
iii.分析和設(shè)計(jì)體系不一: 結(jié)構(gòu)化分析的結(jié)果是數(shù)據(jù)流圖, 結(jié)構(gòu)化設(shè)計(jì)的結(jié)果是模塊結(jié)構(gòu)圖。 二者的表示體系不一致, 分析文檔很難與設(shè)計(jì)文檔對應(yīng), 所以從分析到設(shè)計(jì)的“ 轉(zhuǎn)換”過程容易因理解上的錯(cuò)誤而使得設(shè)計(jì)文檔與用戶的原本需求相差甚遠(yuǎn)。
iv.開發(fā)過程復(fù)雜: 由于結(jié)構(gòu)化方法將過程和數(shù)據(jù)分離為相互獨(dú)立的實(shí)體, 程序員在編程時(shí)必須時(shí)刻考慮到所要處理的數(shù)據(jù)的格式。 對于不同的數(shù)據(jù)格式做相同的處理或?qū)τ谙嗤臄?shù)據(jù)格式做不同的處理都需要編寫不同的程序, 而且往往不能對數(shù)據(jù)的安全性進(jìn)行有效的控制。 如果程序進(jìn)行擴(kuò)充或升級, 也需要大量修改函數(shù), 因此結(jié)構(gòu)化程序的可重用性不好。 要使數(shù)據(jù)與程序始終保持兼容, 已成為程序員的一個(gè)沉重的負(fù)擔(dān)。
面向?qū)ο蠓椒?/strong>
面向?qū)ο蠓椒ㄊ且环N運(yùn)用對象、類、封裝、繼承、多態(tài)和消息等概念來構(gòu)造、測試、重構(gòu)軟件的方法。隨著應(yīng)用系統(tǒng)日益復(fù)雜龐大和面向?qū)ο蟪绦蛟O(shè)計(jì)語言的日益成熟,面向?qū)ο蟮南到y(tǒng)開發(fā)方法以其直觀、方便的優(yōu)點(diǎn)獲得廣泛應(yīng)用。?是以認(rèn)識論為基礎(chǔ),用對象來理解和分析問題空間,并設(shè)計(jì)和開發(fā)出由對象構(gòu)成的軟件系統(tǒng)(解空間)的方法。?
由于問題空間和解空間都是由對象組成的,這樣可以消除由于問題空間和求解空間結(jié)構(gòu)上的不一致帶來的問題。簡言之,面注重軟件開發(fā)中人的作用。?
面向?qū)ο笤O(shè)計(jì)基本步驟:
-
根據(jù)概念層類圖,進(jìn)行實(shí)體類設(shè)計(jì)。
-
設(shè)計(jì)實(shí)體類的操作入口,如管理器類和容器類。
-
根據(jù)GRASP九大原則,進(jìn)行業(yè)務(wù)邏輯類的設(shè)計(jì)。涉及到活動圖。
-
用例實(shí)現(xiàn)。一般會涉及到類圖和協(xié)作圖。
基本思想:盡可能模擬人類習(xí)慣的思維方式,使開發(fā)軟件的方法與過程盡可能接近人類認(rèn)識世界、解決問題的方法與過程, 也就是使描述問題的問題空間與實(shí)現(xiàn)解法的求解空間在結(jié)構(gòu)上盡可能一致。
面向?qū)ο蠓治鍪前褜栴}域和系統(tǒng)的認(rèn)識理解, 正確地抽象為規(guī)范的對象( 包括類、繼承層次) 和消息傳遞聯(lián)系, 最終建立起問題域的簡潔、精確、可理解的面向?qū)ο竽P? 為后續(xù)的面向?qū)ο笤O(shè)計(jì)和面向?qū)ο缶幊烫峁┲笇?dǎo)。面向?qū)ο蠓治鐾ǔ=⑷N模型: 對象模型、動態(tài)模型、功能模型。其中, 對象模型描述了系統(tǒng)的靜態(tài)結(jié)構(gòu),確定類的名稱和類間的關(guān)系;動態(tài)模型表示瞬時(shí)的、行為化的系統(tǒng)的“ 控制”性質(zhì), 規(guī)定了對象模型中的對象的合法變化序列;功能模型表明了系統(tǒng)中數(shù)據(jù)之間的依賴關(guān)系, 以及有關(guān)數(shù)據(jù)的處理功能。
面向?qū)ο蠓椒ǖ木窒?#xff1a;
i.開發(fā)過程管理要求高:在面向?qū)ο蠓治鲞^程中,需要多次迭代,開發(fā)過程要經(jīng)過“修改-評價(jià)-再修改”的多次反復(fù)
ii.系統(tǒng)復(fù)用性低:面向?qū)ο蠓椒ㄍㄟ^信息隱藏和封裝等手段屏蔽了對象內(nèi)部的執(zhí)行細(xì)節(jié),控制了錯(cuò)誤的蔓延,但發(fā)生錯(cuò)誤時(shí),定位故障代價(jià)大,對于需求變化頻繁的系統(tǒng),很難得到一個(gè)高度可復(fù)用的面向?qū)ο筌浖到y(tǒng)設(shè)計(jì)。
iii.開發(fā)人員易將原型取代規(guī)范系統(tǒng)分析:缺乏規(guī)范化的文檔資料,不易于后期維護(hù)。
面向?qū)ο蠓椒▽W(xué)的優(yōu)點(diǎn):
i.與人類習(xí)慣的思維方法一致。
ii.穩(wěn)定性好。傳統(tǒng)方法所建立起來的軟件系統(tǒng)的結(jié)構(gòu)緊密依賴于系統(tǒng)要完成的功能。當(dāng)功能需求發(fā)生變化時(shí)將引起軟件結(jié)構(gòu)的整體改變。面向?qū)ο蠓椒ɑ跇?gòu)造問題領(lǐng)域的對象模型,以對象為中心構(gòu)造軟件系統(tǒng)。當(dāng)功能需求發(fā)生變化時(shí),往往僅需要一些局部性的修改。
iii.可重用性好,重用是提高生產(chǎn)效率的最主要的方法。對象是比較理想的模塊和可重用的軟件成分。類重用的方法,創(chuàng)建該類的實(shí)例,派生。
iiii.較易開發(fā)大型軟件。
iiiii.可維護(hù)性好面向?qū)ο蟮能浖€(wěn)定性比較好。面向?qū)ο蟮能浖容^容易修改,面向?qū)ο蟮能浖容^容易理解,易于測試和調(diào)試
原型法
原型法的基本思想與結(jié)構(gòu)化方法不同,原型法認(rèn)為在很難一下子全面準(zhǔn)確地提出用戶需求的情況下,首先不要求一定要對系統(tǒng)做全面、詳細(xì)的調(diào)查、分析,而是本著開發(fā)人員對用戶需求的初步理解,先快速開發(fā)一個(gè)原型系統(tǒng),然后通過反復(fù)修改來實(shí)現(xiàn)用戶的最終系統(tǒng)需求。是在投入大量的人力,物力之前,在限定的時(shí)間內(nèi),用最經(jīng)濟(jì)的方法開發(fā)出一個(gè)可實(shí)際運(yùn)行的系統(tǒng)模型,用戶在運(yùn)行使用整個(gè)原型的基礎(chǔ)上,通過對其評價(jià),提出改進(jìn)意見,對原型進(jìn)行修改,統(tǒng)一使用,評價(jià)過程反復(fù)進(jìn)行,使原型逐步完善,直到完全滿足用戶的需求為止。?
適用范圍:處理過程明確、簡單系統(tǒng);涉及面窄的小型系統(tǒng)不適合于:大型、復(fù)雜系統(tǒng),難以模擬;存在大量運(yùn)算、邏輯性強(qiáng)的處理系統(tǒng);管理基礎(chǔ)工作不完善、處理過程不規(guī)范;大量批處理系統(tǒng)???
原型應(yīng)當(dāng)具備的特點(diǎn)如下。???
(1)實(shí)際可行。???
(2)具有最終系統(tǒng)的基本特征。???
(3)構(gòu)造方便、快速,造價(jià)低。???
原型法的特點(diǎn)在于原型法對用戶的需求是動態(tài)響應(yīng)、逐步納入的,系統(tǒng)分析、設(shè)計(jì)與實(shí)現(xiàn)都是隨著對一個(gè)工作模型的不斷修改而同時(shí)完成的,相互之間并無明顯界限,也沒有明確分工。
系統(tǒng)開發(fā)計(jì)劃就是一個(gè)反復(fù)修改的過程。適于用戶需求開始時(shí)定義不清的系統(tǒng)開發(fā),開發(fā)方法更宜被用戶接受;但如果用戶配合不好,盲目修改,就會拖延開發(fā)過程。?
-
總結(jié)
通過對這幾種方法的實(shí)現(xiàn)簡介和它們的優(yōu)缺點(diǎn)介紹,不同的方法適用于不同的軟件開發(fā)。如果說想要找一個(gè)統(tǒng)一的,合適所有軟甲開發(fā)工程的開發(fā)方法,在目前階段是不合適的,因?yàn)槿绻阌迷头ㄈプ龃笮蛙浖?#xff0c;其中的花費(fèi),會拖垮大部分的公司,而且系統(tǒng)的使用大概率的會出現(xiàn)不能正常使用的狀態(tài),所以,開發(fā)軟件用合適的開發(fā)方法,才是軟件開發(fā)人員的主要作用。
總結(jié)
以上是生活随笔為你收集整理的浅谈《软件工程》常用的几种软件开发方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle 外部表 时间戳,Hive建
- 下一篇: [Leedcode][JAVA][第28