- 軟件工程理論與實踐(第2版)
- 呂云翔等編著
- 3118字
- 2023-06-28 15:52:03
1.4 軟件開發(fā)方法
軟件開發(fā)方法是一種使用定義好的技術(shù)集及符號表示組織軟件開發(fā)的過程,它的目標是在規(guī)定的時間和成本內(nèi),開發(fā)出符合用戶需求的高質(zhì)量的軟件。因此,針對不同的軟件開發(fā)項目和對應的軟件過程,應該選擇合適的軟件開發(fā)方法。
1.4.1 基本的軟件開發(fā)方法
1.結(jié)構(gòu)化方法
1978年,E.Yourdon和L.L.Constantine提出了結(jié)構(gòu)化方法,也可稱為面向功能的軟件開發(fā)方法或面向數(shù)據(jù)流的軟件開發(fā)方法。1979年,Tom DeMarco對此方法做了進一步的完善。
結(jié)構(gòu)化方法采用自頂向下、逐步求精的指導思想,應用廣泛,技術(shù)成熟。它首先用結(jié)構(gòu)化分析對軟件進行需求分析,然后用結(jié)構(gòu)化設計方法進行總體設計,最后是結(jié)構(gòu)化編程。這一方法不僅開發(fā)步驟明確,而且給出了兩類典型的軟件結(jié)構(gòu)(變換型和事務型),便于參照,使軟件開發(fā)的成功率大大提高,因而深受軟件開發(fā)人員的青睞。
2.面向數(shù)據(jù)結(jié)構(gòu)方法
1975年,M.A.Jackson提出了一類軟件開發(fā)方法。這一方法從目標系統(tǒng)的輸入、輸出數(shù)據(jù)結(jié)構(gòu)入手,導出程序框架結(jié)構(gòu),再補充其他細節(jié),就可得到完整的程序結(jié)構(gòu)圖。這一方法對輸入、輸出數(shù)據(jù)結(jié)構(gòu)明確的中小型系統(tǒng)特別有效,如商業(yè)應用中的文件表格處理。該方法也可與其他方法結(jié)合,用于模塊的詳細設計。Jackson方法有時也稱為面向數(shù)據(jù)結(jié)構(gòu)的軟件設計方法。
1974年,J.D.Warnier提出的軟件開發(fā)方法與Jackson提出的方法類似。差別有3點:一是使用的圖形工具不同,分別使用Warnier圖和Jackson圖;二是使用的偽碼不同;第三點,也是最主要的差別,在構(gòu)造程序框架時,Warnier方法僅考慮輸入數(shù)據(jù)結(jié)構(gòu),而Jackson方法不僅考慮輸入數(shù)據(jù)結(jié)構(gòu),而且還考慮輸出數(shù)據(jù)結(jié)構(gòu)。
3.面向?qū)ο蠓椒?/span>
面向?qū)ο蠓椒ㄊ擒浖夹g(shù)的一次革命,在軟件開發(fā)史上具有里程碑的意義。隨著面向?qū)ο缶幊滔蛎嫦驅(qū)ο笤O計和面向?qū)ο蠓治龅陌l(fā)展,最終形成面向?qū)ο蟮能浖_發(fā)方法。
這是一種自底向上和自頂向下相結(jié)合的方法,而且它以對象建模為基礎(chǔ),從而不僅考慮了輸入、輸出數(shù)據(jù)結(jié)構(gòu),實際上也包含了所有對象的數(shù)據(jù)結(jié)構(gòu)。面向?qū)ο蠓椒ㄔ谛枨蠓治觥⒖删S護性和可靠性這3個軟件開發(fā)的關(guān)鍵環(huán)節(jié)和質(zhì)量指標上有了實質(zhì)性的突破,很大程度上解決了在這些方面存在的嚴重問題。
面向?qū)ο蠓椒ㄓ蠦ooch方法、Goad方法和OMT(Object Modeling Technology)方法等。為了統(tǒng)一各種面向?qū)ο蠓椒ǖ男g(shù)語、概念和模型,1997年推出了統(tǒng)一建模語言(UML),通過統(tǒng)一的語義和符號表示,將各種方法的建模過程和表示統(tǒng)一起來。
4.形式化方法
形式化方法最早可追溯到20世紀50年代后期對程序設計語言編譯技術(shù)的研究,研究高潮始于20世紀60年代后期。針對當時的“軟件危機”,人們提出種種解決方法,歸納起來有兩類:一類是采用工程方法來組織、管理軟件的開發(fā)過程;另一類是深入探討程序和程序開發(fā)過程的規(guī)律,建立嚴密的理論,以用來指導軟件開發(fā)實踐。前者導致“軟件工程”的出現(xiàn)和發(fā)展,后者則推動了形式化方法的深入研究。
經(jīng)過多年的研究和應用,如今人們在形式化方法這一領(lǐng)域取得了大量重要的成果,從早期最簡單的一階謂詞演算方法到現(xiàn)在的應用于不同領(lǐng)域、不同階段的基于邏輯、狀態(tài)機、網(wǎng)絡、進程代數(shù)和代數(shù)等眾多形式化方法,形式化方法的發(fā)展趨勢逐漸融入軟件開發(fā)過程的各個階段。
1.4.2 開源軟件開發(fā)方法
開源軟件開發(fā)活動以互聯(lián)網(wǎng)軟件社區(qū)為平臺,其開發(fā)過程和制品數(shù)據(jù)對外開放(共享),允許不同的開發(fā)者參與其中(協(xié)同),能夠有效匯聚來自互聯(lián)網(wǎng)的創(chuàng)意和貢獻。
開源軟件開發(fā)指的是由開源軟件項目組開發(fā)開源軟件或類似原件的過程,其中,開源軟件的源代碼是公開可用的。這些軟件產(chǎn)品及其源代碼在開源許可下可用,它們常常被用于研究、更改和改進其設計。一些流行的開源軟件產(chǎn)品的例子有Mozilla Firefox、Google Chromium、Android、LibreOffice和VLC媒體播放器等。
開源項目可以被分為以下四類。
1)有各種各樣的軟件程序和庫,它們由獨立的代碼段組成,有些甚至可能依賴于其他開源項目。這些項目服務于特定目的并滿足特定需求。此類項目的示例包括Linux內(nèi)核、Firefox Web瀏覽器和LibreOffice辦公工具套件等。
2)發(fā)行版是另一種類型的開源項目。發(fā)行版是從同一來源發(fā)布的具有共同目的的軟件集合。發(fā)行版最突出的例子是操作系統(tǒng)。有許多Linux發(fā)行版(如Debian、Fedora Core、Mandriva、Slackware、Ubuntu等)提供Linux內(nèi)核和許多用戶級組件。還有其他發(fā)行版,如ActivePerl,用于各種操作系統(tǒng)的Perl編程語言,以及用于Microsoft Windows開源程序的Cygwin發(fā)行版等。
3)其他開源項目,如BSD衍生品,在一個版本控制系統(tǒng)中維護整個操作系統(tǒng)、內(nèi)核及其所有核心組件的源代碼,作為一個團隊一起開發(fā)整個系統(tǒng)。這些操作系統(tǒng)開發(fā)項目與其他基于分布式的系統(tǒng)相比,更緊密地集成了它們的工具。
4)還有圖書或獨立文檔項目。這些項目通常不作為開源軟件包的一部分提供。例如,Linux文檔項目承辦了許多此類項目,這些項目記錄了GNU/Linux操作系統(tǒng)的各個方面。
開源項目的工作可以通過以下多種方式進行。
1)意識到項目需求的個人宣布了公開開發(fā)項目的意圖。
2)開發(fā)人員在有限但有效的代碼倉庫上工作,將其作為開源程序的第一個版本發(fā)布給公眾。
3)到期項目的源代碼向公眾發(fā)布。
4)一個完善的開源項目可以由感興趣的外部用戶派生。
1.4.3 群體化軟件開發(fā)方法
通常,軟件開發(fā)都是基于自己組織的開發(fā)團隊,或者企業(yè)、組織機構(gòu)的內(nèi)部人員組織的開發(fā)團隊。以這種方式組織的開發(fā)團隊,針對一般的要實現(xiàn)的軟件功能還是能應付的。但是,對某些比較大型、復雜的軟件系統(tǒng),軟件系統(tǒng)的交付質(zhì)量和交付時間要求得比較高,此時使用傳統(tǒng)的軟件開發(fā)方法在并發(fā)效率或是軟件質(zhì)量等方面就無法勝任了。
隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展,軟件開發(fā)技術(shù)和開發(fā)模式都有了很多新的概念。其中,以開源和眾包為代表的群體化軟件開發(fā)方法極大地優(yōu)化了軟件開發(fā)。開源軟件開發(fā)方法在第1.4.2小節(jié)中已經(jīng)討論過了,這里不再贅述。眾包軟件開發(fā)指的是公開發(fā)布軟件開發(fā)任務,由參與競爭的個人或團隊給出解決方案的軟件開發(fā)方法。軟件開發(fā)的任何階段都可以是眾包的,如需求(功能、用戶界面、性能)、設計(算法、架構(gòu))、編碼(模塊和組件)、測試(包括安全測試、用戶界面測試)、維護、用戶體驗或這些階段的任意組合。
群體化軟件開發(fā)方法最大的特點是面向公眾。開源軟件開發(fā)方式可以被看作是一種以合作為主的群體化軟件開發(fā)方法,而眾包軟件開發(fā)方法則更類似于競爭性的群體化軟件開發(fā)方法。它們的目的都是集合互聯(lián)網(wǎng)中眾多開發(fā)人員的智慧和力量,以更低的成本實現(xiàn)更完善的軟件項目。
互聯(lián)網(wǎng)能夠?qū)⑷澜绺鞯氐拈_發(fā)人員連接起來,他們彼此之間可以進行交流、分工合作。軟件開發(fā)可借助開放群體的智慧和力量。開源軟件就是常用的方法。借助開源軟件的托管社區(qū),互聯(lián)網(wǎng)上的眾多軟件開發(fā)人員可通過自組織方式進行分工合作,開發(fā)出很多優(yōu)秀的開源項目,展示出了他們的創(chuàng)造力、開發(fā)效率和軟件質(zhì)量。
群體化軟件開發(fā)方法融合工業(yè)化軟件生產(chǎn)和開源軟件的開發(fā)方式,連接互聯(lián)網(wǎng)開發(fā)人員群體與企業(yè)/組織機構(gòu)的開發(fā)團隊,通過群體化協(xié)同、開放式共享和持續(xù)性評估等實現(xiàn)高效的軟件開發(fā)。
群體化軟件開發(fā)方法遵循的核心原則:開放、平等、共享、全局行動。
與群體化軟件開發(fā)方法相關(guān)的模型有:代碼與證據(jù)緊密耦合的可信軟件演化模型;創(chuàng)作與生產(chǎn)緊密耦合的軟件開發(fā)過程模型;協(xié)同、共享、監(jiān)控與分析緊密耦合的服務支撐模型。
群體化軟件開發(fā)方法將軟件開發(fā)過程全面開放并快速迭代,不斷發(fā)布系統(tǒng)原型,吸引互聯(lián)網(wǎng)大眾體驗,借助互聯(lián)網(wǎng)平臺開展各種形式的交流、協(xié)同和共享,實現(xiàn)群體需求及創(chuàng)意的匯聚。軟件開發(fā)團隊對大眾需求創(chuàng)意進行識別審查,借助工業(yè)化生產(chǎn)的強組織模式來組織軟件開發(fā)過程,實現(xiàn)高質(zhì)量軟件產(chǎn)品的輸出。群體化軟件方法將大眾群體的軟件創(chuàng)作過程有機地融入開發(fā)團隊的軟件生產(chǎn)流程中,能夠充分發(fā)揮大眾群體和開發(fā)團隊在軟件開發(fā)過程中各自的優(yōu)勢,有效地支持網(wǎng)絡環(huán)境下的軟件開發(fā)。
除了上述幾種軟件開發(fā)方法,軟件開發(fā)方法還包括問題分析法、可視化開發(fā)方法等。本書接下來的章節(jié)中將會對結(jié)構(gòu)化方法和面向?qū)ο蠓椒ㄟM行更加詳細和更深入的介紹。