【摘 要】隨著計(jì)算機(jī)科學(xué)技術(shù)的迅速發(fā)展,軟件系統(tǒng)越來(lái)越復(fù)雜,功能越來(lái)越強(qiáng)大,若還采用原來(lái)舊的方法開(kāi)發(fā)軟件,則無(wú)法滿(mǎn)足軟件系統(tǒng)的要求,這就需要有一種更新,更符合系統(tǒng)工程要求的方法來(lái)指導(dǎo)軟件系統(tǒng)的開(kāi)發(fā)。
【關(guān)鍵詞】軟件系統(tǒng);模型;軟件開(kāi)發(fā)方法
軟件開(kāi)發(fā)一個(gè)復(fù)雜的活動(dòng),它包含了需求調(diào)研,系統(tǒng)設(shè)計(jì),開(kāi)發(fā), 部署,維護(hù)等活動(dòng)。而且現(xiàn)有規(guī)范和流程目的并不是讓你去完成文檔, 而是通過(guò)這些文檔,讓軟件的質(zhì)量更能得到保證。開(kāi)發(fā)方法是不是實(shí)用有效,一般取決于它是否具備三個(gè)要素:簡(jiǎn)單、可視化和精確。也就是說(shuō),該方法必須用起來(lái)簡(jiǎn)單,其表現(xiàn)形式要有效地發(fā)揮圖形語(yǔ)言的可視化效果,同時(shí)所表達(dá)的內(nèi)容必須精確以確保其意思能被準(zhǔn)確理解。
1、軟件系統(tǒng)的開(kāi)發(fā)過(guò)程
1.1軟件過(guò)程領(lǐng)域的基本概念
軟件可劃分為智能軟件、系統(tǒng)軟件和應(yīng)用軟件三個(gè)領(lǐng)域。由于不同的軟件采用的開(kāi)發(fā)知識(shí)不同,從而構(gòu)成各自相應(yīng)的方法。盡管,智能軟件和應(yīng)用軟件分屬不同的領(lǐng)域,但智能軟件和應(yīng)用軟件都是計(jì)算機(jī)軟件。建造軟件系統(tǒng)的解決方案由三個(gè)關(guān)鍵的相互關(guān)聯(lián)的基本要素組成:
(1)軟件工程過(guò)程(SEP)。
(2)軟件工程過(guò)程支持環(huán)境(SEPSE,如開(kāi)發(fā)工具和建模語(yǔ)言等)。
(3)培訓(xùn)、指導(dǎo)和咨詢(xún)服務(wù)。
Watts Humphrey曾經(jīng)說(shuō)過(guò),“軟件工程過(guò)程就是將客戶(hù)需求轉(zhuǎn)化為軟件產(chǎn)品的所有必須活動(dòng)的集合”。在整個(gè)解決方案中首當(dāng)其沖而且也是最重要的要素是過(guò)程。
1.2軟件過(guò)程的特點(diǎn)
軟件過(guò)程中的所謂“過(guò)程”是創(chuàng)建一個(gè)產(chǎn)品或完成某些任務(wù)的一種系統(tǒng)化的方法和工作過(guò)程,它異于通常計(jì)算機(jī)領(lǐng)域所特指的可運(yùn)行的軟件的過(guò)程,其執(zhí)行者不再僅僅是計(jì)算機(jī),而經(jīng)常是由具體承擔(dān)任務(wù)的軟件開(kāi)發(fā)人員使用給定的開(kāi)發(fā)工具來(lái)執(zhí)行,其意義更為廣泛,描述了以某種有條理的方法進(jìn)行工作或?qū)崿F(xiàn)一個(gè)目標(biāo)的任何一種機(jī)制,它甚至可以是一個(gè)無(wú)法在計(jì)算機(jī)上運(yùn)行的過(guò)程[2],完全由人工或人工借助計(jì)算機(jī)領(lǐng)域以外的其它工具來(lái)完成。
軟件過(guò)程是關(guān)系錯(cuò)綜復(fù)雜的各種活動(dòng)的集合,各活動(dòng)之間有時(shí)有嚴(yán)格的時(shí)序關(guān)系,有時(shí)是異步并行的,有時(shí)互為條件,有時(shí)互為反饋,因此實(shí)際的軟件過(guò)程中的活動(dòng)存在一種復(fù)雜的網(wǎng)狀關(guān)系。軟件開(kāi)發(fā)是一個(gè)高度動(dòng)態(tài)的過(guò)程,動(dòng)態(tài)變化滲透到了軟件過(guò)程的各個(gè)方面:需求說(shuō)明、任務(wù)分配、調(diào)試、開(kāi)發(fā)策略。工具集、支持環(huán)境等,這些變化的出現(xiàn)通常不可預(yù)料,造成的影響也無(wú)法確定。同時(shí),軟件過(guò)程是一個(gè)面向人的系統(tǒng),而軟件本身又是一種無(wú)形的產(chǎn)品,這就導(dǎo)致了工作進(jìn)度難以控制,工作質(zhì)量難以評(píng)估,產(chǎn)品質(zhì)量難以把握,使整個(gè)過(guò)程具有極大的模糊性。隨著計(jì)算機(jī)應(yīng)用在各領(lǐng)域越來(lái)越廣,軟件項(xiàng)目規(guī)模愈來(lái)愈大,許多由分布在不同地區(qū)不同國(guó)家的大量工作人員合作的跨國(guó)際合作項(xiàng)目也紛紛出現(xiàn),在此情況下,正確有效地進(jìn)行管理的迫切要求使得軟件過(guò)程的研究成為熱點(diǎn)。
2、建立過(guò)程模型的基本過(guò)程
開(kāi)發(fā)過(guò)程模型首先要對(duì)外部過(guò)程模型進(jìn)行提取和抽象,產(chǎn)生一個(gè)非正式的過(guò)程模型,包括執(zhí)行過(guò)程所接收到的反饋。隨后對(duì)過(guò)程的活動(dòng)順序以及所涉及的產(chǎn)品進(jìn)行抽象描述,它可用于許多相似的項(xiàng)目和組織之中,共享某些信息。這樣的模型意味著是一個(gè)非常高層的過(guò)程體系結(jié)構(gòu),可以滿(mǎn)足一般的原則和需求,可以將其視為一個(gè)通用的原模型。在此基礎(chǔ)上,用戶(hù)可以根據(jù)具體情況詳細(xì)而又嚴(yán)格地描述過(guò)程中的各種任務(wù)類(lèi)型,這時(shí)可以從管理人員的角度來(lái)精細(xì)化所有的子模型,如對(duì)特定領(lǐng)域內(nèi)的任務(wù)和角色進(jìn)行分類(lèi)和施加約束。在將軟件模塊交付集成測(cè)試組時(shí),可以說(shuō)明這是某個(gè)特定過(guò)程模型所產(chǎn)生的結(jié)果。同時(shí)這個(gè)過(guò)程模型還需要進(jìn)一步實(shí)例化以適應(yīng)項(xiàng)目的各種約束和條件,因而實(shí)例化的過(guò)程模型是一個(gè)可執(zhí)行的過(guò)程描述,它將實(shí)例化的活動(dòng)(即任務(wù)類(lèi)型實(shí)例化為具體的任務(wù))與具體的產(chǎn)品和項(xiàng)目資源聯(lián)系起來(lái),并遵循一定的調(diào)度時(shí)間表。一旦過(guò)程模型為相應(yīng)的項(xiàng)目進(jìn)行了實(shí)例化,該模型就可以進(jìn)行模擬和運(yùn)作。在過(guò)程模擬期間,需要工具來(lái)幫助分析、評(píng)價(jià)和模擬過(guò)程模型,并得到許多反饋信息,包括資源使用情況、資源瓶頸、活動(dòng)完成時(shí)間、活動(dòng)等待時(shí)間、人員等待時(shí)間等等。有了這些信息就可以對(duì)實(shí)例化過(guò)程進(jìn)行修改,使之趨于合理化。在模擬之后就可以對(duì)過(guò)程模型進(jìn)行實(shí)際運(yùn)作,生產(chǎn)有關(guān)的產(chǎn)品。
3、當(dāng)前主流的軟件開(kāi)發(fā)方法
3.1結(jié)構(gòu)化方法
所謂軟件構(gòu)件化,就是要讓軟件開(kāi)發(fā)像機(jī)械制造工業(yè)一樣,可以用各種標(biāo)準(zhǔn)和非標(biāo)準(zhǔn)的零件來(lái)進(jìn)行組裝。軟件的構(gòu)件化和集成技術(shù)的目標(biāo)是:軟件系統(tǒng)可以由不同廠商提供的,用不同語(yǔ)言開(kāi)發(fā)的,在不同硬件平臺(tái)上實(shí)現(xiàn)的軟件構(gòu)件,方便地、動(dòng)態(tài)地集成。這些構(gòu)件要求能互操作,它們可以放在本地的計(jì)算機(jī)上,也可以分布式地放置在網(wǎng)上異構(gòu)環(huán)境下的不同結(jié)點(diǎn)上。
(1)結(jié)構(gòu)化程序設(shè)計(jì)方法
20世紀(jì)60年代,圍繞是否應(yīng)取消goto語(yǔ)句,人們展開(kāi)了一場(chǎng)激烈的爭(zhēng)論。最終人們認(rèn)識(shí)到,軟件開(kāi)發(fā)中的問(wèn)題的解決不僅僅是簡(jiǎn)單的取消goto語(yǔ)句,而是應(yīng)該改變傳統(tǒng)軟件開(kāi)發(fā)思維觀念,在此基礎(chǔ)上創(chuàng)建新的程序設(shè)計(jì)方法。圍繞goto語(yǔ)句爭(zhēng)論的結(jié)果使人們形成了新的思維觀念:編寫(xiě)程序時(shí),在正確地實(shí)現(xiàn)了軟件功能的前提下,必須考慮到程序的可維護(hù)性,重視程序的可讀性、清晰性和可理解性,而不能隨心所欲地去過(guò)分追求程序編寫(xiě)技巧。
由于使用三種基本程序結(jié)構(gòu)(順序、選擇、循環(huán))組成的程序具有良好的可讀性、清晰性和可理解性,容易維護(hù),所以逐漸成為主流的程序結(jié)構(gòu)標(biāo)準(zhǔn)。按照這樣的新思維觀念,形成了一個(gè)新的程序設(shè)計(jì)方法———結(jié)構(gòu)化程序設(shè)計(jì)方法,結(jié)構(gòu)化程序設(shè)計(jì)是根據(jù)結(jié)構(gòu)程序設(shè)計(jì)原理,將每個(gè)模塊的功能用相應(yīng)的標(biāo)準(zhǔn)控制結(jié)構(gòu)表示出來(lái),從而實(shí)現(xiàn)詳細(xì)設(shè)計(jì)。
(2)結(jié)構(gòu)化分析方法和結(jié)構(gòu)化設(shè)計(jì)方法
結(jié)構(gòu)化程序設(shè)計(jì)方法的巨大成功推動(dòng)了結(jié)構(gòu)化分析方法和結(jié)構(gòu)化設(shè)計(jì)方法的發(fā)展。1974年,Stevens、Myers 和Constantine發(fā)表文章《Structured Analysis》,提出了結(jié)構(gòu)化分析和結(jié)構(gòu)化設(shè)計(jì)的概念。
結(jié)構(gòu)化分析方法根據(jù)分解與抽象的原則,按照系統(tǒng)中數(shù)據(jù)處理的流程,用數(shù)據(jù)流圖來(lái)建立系統(tǒng)的功能模塊,從而完成需求分析工作。結(jié)構(gòu)化設(shè)計(jì)方法使用模塊化和自頂向下逐步細(xì)化技術(shù),將數(shù)據(jù)流圖等結(jié)構(gòu)化分析的結(jié)果轉(zhuǎn)化為軟件系統(tǒng)總體結(jié)構(gòu),用軟件結(jié)構(gòu)圖來(lái)建立系統(tǒng)的物理模型,實(shí)現(xiàn)系統(tǒng)的概要設(shè)計(jì)。結(jié)構(gòu)化軟件開(kāi)發(fā)方法成為20世紀(jì)70年代和80年代占主導(dǎo)地位的軟件開(kāi)發(fā)方法,它有效地遏制了軟件危機(jī)的蔓延,直到現(xiàn)在仍在發(fā)揮作用。結(jié)構(gòu)化方法簡(jiǎn)單實(shí)用,技術(shù)成熟,應(yīng)用廣泛,但難以承擔(dān)大規(guī)模的項(xiàng)目或特別復(fù)雜的項(xiàng)目,難以解決軟件重用(復(fù)用)問(wèn)題,難于適應(yīng)需求變化,且軟件維護(hù)依然比較復(fù)雜。
3.2面向?qū)ο蠓椒?/p>
面向?qū)ο筌浖_(kāi)發(fā)方法包括面向?qū)ο蠓治龇椒ǎ∣bject-Oriented Analysis,簡(jiǎn)稱(chēng)OOA)、面向?qū)ο笤O(shè)計(jì)方法(Object -Oriented Design,簡(jiǎn)稱(chēng)OOD)和面向?qū)ο蟪绦蛟O(shè)計(jì)(Object-Oriented Pro-gramming,簡(jiǎn)稱(chēng)OOP),其核心是面向?qū)ο蟪绦蛟O(shè)計(jì)方法。
一般認(rèn)為軟件由程序和文檔組成,而程序又由數(shù)據(jù)結(jié)構(gòu)和算法組成,在傳統(tǒng)的程序設(shè)計(jì)方法中,數(shù)據(jù)(數(shù)據(jù)結(jié)構(gòu))和施加在數(shù)據(jù)上的操作(算法)被分離成兩個(gè)獨(dú)立的部分,而程序被看作是工作在數(shù)據(jù)上的一系列過(guò)程或函數(shù)的集合,然而客觀世界的實(shí)體既有靜態(tài)的屬性(即數(shù)據(jù)),又有動(dòng)態(tài)的行為(即對(duì)數(shù)據(jù)的操作),因此這兩方面內(nèi)容密切相關(guān),由于傳統(tǒng)的程序設(shè)計(jì)方法將這兩方面內(nèi)容分離,無(wú)形中加深了問(wèn)題空間與解空間之間的裂痕,增加了軟件開(kāi)發(fā)的難度。相反,面向?qū)ο蠓椒ㄓ邢铝幸c(diǎn):客觀世界是由各種對(duì)象(Object)組成的,復(fù)雜對(duì)象可以由簡(jiǎn)單對(duì)象組成。有共同屬性和方法的一組對(duì)象抽象為一個(gè)類(lèi)(Class)。一個(gè)類(lèi)(子類(lèi))可以繼承另外一個(gè)類(lèi)(父類(lèi))的方法和屬性,這一特性稱(chēng)為繼承。對(duì)象之間通過(guò)傳遞消息進(jìn)行通信。
以上特點(diǎn)可以歸結(jié)為如下的公式:Object-Ori-ented=Object+Classification+Inheritance+Commu-nicationwithMessages。在面向?qū)ο蟪绦蛟O(shè)計(jì)方法中,數(shù)據(jù)和施加在數(shù)據(jù)上的操作被封裝在一起,形成類(lèi)和對(duì)象的概念,用對(duì)象分解取代了傳統(tǒng)方法的功能分解。這一思維觀念創(chuàng)新使得問(wèn)題空間與解空間的結(jié)構(gòu)基本一致,有利于軟件復(fù)用,也與人們通常認(rèn)識(shí)世界的思維方式相符,更利于加強(qiáng)代碼的易懂性。20世紀(jì)60年代末,Kristen Nygaard和Ole-Johan Dahl 在挪威計(jì)算中心開(kāi)發(fā)出Simula67語(yǔ)言,提出許多面向?qū)ο蟮母拍睢?972年,AlanKay引用Simula語(yǔ)言中關(guān)于類(lèi)和對(duì)象的概念,開(kāi)發(fā)出第一種真正的面向?qū)ο笳Z(yǔ)言Smaltalk。
Smalhalk語(yǔ)言的發(fā)布引起了人們的廣泛關(guān)注,隨后產(chǎn)生了數(shù)十種面向?qū)ο笳Z(yǔ)言,例如著名的C++和Java。在面向?qū)ο蟪绦蛟O(shè)計(jì)方法基礎(chǔ)上,許多面向?qū)ο蠓治龊驮O(shè)計(jì)(OOA/OOD)方法被提出,比較著名的如Wirfs-Brock方法、Booch方法、Coad/Yourdon方法、對(duì)象建模技術(shù)OMT(ObjectModelingTechnique)、面向?qū)ο筌浖こ蘋(píng)OSE(Object-Oriented SoftwareEngineering)等。這些面向?qū)ο蠓治龊驮O(shè)計(jì)方法各有各的特點(diǎn),為了吸收它們各自的優(yōu)點(diǎn),形成統(tǒng)一的面向?qū)ο蠓治龊驮O(shè)計(jì)方法,Booch、Jacobson 和Rambaugh三人合作,于20世紀(jì)90年代后期提出了統(tǒng)一建模語(yǔ)言UML(Unified Modeling Language)。在UML基礎(chǔ)上形成的面向?qū)ο筌浖_(kāi)發(fā)方法開(kāi)始得到廣泛的應(yīng)用,成為20世紀(jì)90年代直到目前占主導(dǎo)地位的軟件開(kāi)發(fā)方法,面向?qū)ο蟪绦蛟O(shè)計(jì)方法這一思維觀念創(chuàng)新可以被稱(chēng)為程序設(shè)計(jì)方法的第二次飛躍。然而,在面向?qū)ο蠓椒ㄖ?,軟件開(kāi)發(fā)階段的劃分是比較模糊的,通常要在分析、設(shè)計(jì)與實(shí)現(xiàn)等階段間進(jìn)行多次迭代。
3.3形式化方法
軟件工程中的形式化方法就是依靠數(shù)學(xué)模型和計(jì)算來(lái)描述和驗(yàn)證一個(gè)目標(biāo)軟件系統(tǒng)的行為和特性,包括需求規(guī)格、設(shè)計(jì)和實(shí)現(xiàn)等,形式化方法最根本的特征就是建立在嚴(yán)格的數(shù)學(xué)基礎(chǔ)上,如果一個(gè)方法有良好的數(shù)學(xué)基礎(chǔ)(這個(gè)基礎(chǔ)提供一系列精確定義的概念,如:一致性和完整性,以及定義規(guī)范的實(shí)現(xiàn)和正確性),那么它就是形式化的,典型的以形式化規(guī)約語(yǔ)言給出。形式化方法能很好地解決在軟件開(kāi)發(fā)中經(jīng)常出現(xiàn)的二義性問(wèn)題,因?yàn)樾问交椒ㄖ饕欠?hào)系統(tǒng),這種符號(hào)系統(tǒng)具有一定的數(shù)學(xué)性質(zhì)。
形式化方法也有其缺點(diǎn),首先是規(guī)范所使用的數(shù)學(xué)工具與模型并不能保證規(guī)范的絕對(duì)正確和安全性;其次是對(duì)于任何一種數(shù)學(xué)規(guī)范,在其基本的數(shù)學(xué)意義下,針對(duì)不同的工程背景,并不是只有一種解釋。當(dāng)然,這些不是二義性問(wèn)題,而是不同領(lǐng)域?qū)σ?guī)范的解釋和相容性問(wèn)題。
4、結(jié)束語(yǔ)
總之,我們要不斷堅(jiān)持和諧軟件過(guò)程,根據(jù)軟件、行業(yè)、人文等各類(lèi)因素,不斷地落實(shí)和深化和諧軟件過(guò)程的理念,不斷反思總結(jié)吸收借鑒改善創(chuàng)新,如并行工程,敏捷制造和全球制造。這些新的模式對(duì)產(chǎn)品進(jìn)行生命周期的設(shè)計(jì)和管理提出了進(jìn)一步的要求。結(jié)構(gòu)化方法和面向?qū)ο蠓椒ㄊ乾F(xiàn)今主要的軟件開(kāi)發(fā)過(guò)程方法。構(gòu)化方法貫徹自頂向下逐步細(xì)化的“功能分解”思想,其基于功能分解的特點(diǎn),使之不足明顯。面向?qū)ο蠓椒▌t是從問(wèn)題域中客觀存在的事物出發(fā)來(lái)構(gòu)造系統(tǒng),用對(duì)象作為對(duì)這些事物的抽象表示,并以此作為系統(tǒng)的基本構(gòu)成單位,面向?qū)ο蠓椒ê徒Y(jié)構(gòu)化方法的相比有了更大的進(jìn)步。
參考文獻(xiàn)
[1]禾盈.軟件研發(fā)向質(zhì)量管理要效益[N].金融時(shí)報(bào),2001年
[2]何麗.基于UML的軟件開(kāi)發(fā)過(guò)程——標(biāo)準(zhǔn)開(kāi)發(fā)過(guò)程研究[D].天津財(cái)經(jīng)學(xué)院,2000年