朱大鵬
開發(fā)方法是開發(fā)模型中非常關鍵的要素,不同的開發(fā)模型既可以運用相同的開發(fā)方法,也可以運用不同的開發(fā)方法。
軟件生命周期模型(開發(fā)模型)與軟件開發(fā)方法是兩個不同的事物。開發(fā)模型是指開發(fā)軟件項目的總體過程的框架安排。軟件開發(fā)方法指如何組織軟件生產過程的方法,包括一系列的步驟,每一步驟都與相應的技術和符號相關;目的在于有效地完成一個運行的系統(tǒng)及其支持文檔。因此,開發(fā)方法是開發(fā)模型中非常關鍵的要素,不同的開發(fā)模型既可以運用相同的開發(fā)方法,也可以運用不同的開發(fā)方法。
軟件開發(fā)方法是伴隨著計算機性能提高、應用范圍擴大而不斷發(fā)展的。軟件行業(yè)普遍認可和應用的開發(fā)方法,起源于20世紀60年代軟件危機。為了應對軟件危機,1968、1969年連續(xù)召開兩次著名的北大西洋公約組織會議,提出了軟件工程的概念,軟件開發(fā)方法也逐漸實現(xiàn)了科學化。按照時間序列,核心的軟件開發(fā)方法是結構化方法、面向數(shù)據(jù)結構方法、維也納開發(fā)方法、面向對象的開發(fā)方法;模塊化開發(fā)方法、可視化開發(fā)方法和敏捷開發(fā)方法可視為非核心的開發(fā)方法。下面逐一介紹。
結構化方法就是以現(xiàn)實用戶的實際結構和所開發(fā)的軟件的結構為框架,以用戶數(shù)據(jù)流和軟件數(shù)據(jù)流為核心,以分解和抽象、獨立的模塊化等為主要方法進行軟件開發(fā)。結構是指系統(tǒng)內各組成要素之間的相互聯(lián)系、相互作用的框架。結構化開發(fā)方法的特點主要表現(xiàn)在:一是自頂向下,逐步求精。將軟件分析的過程劃分成若干個層次,每一個新的層次都是上一個層次的細化。二是模塊化。將軟件系統(tǒng)分解成若干個模塊,每個模塊內的信息被屏蔽,并實現(xiàn)特定的功能。最終的系統(tǒng)由這些模塊組裝而成,模塊之間通過接口傳遞信息。三是語句結構化。在每個模塊中只允許出現(xiàn)順序、分支和循環(huán)三種流程結構的語句。結構化方法由結構化分析、結構化設計、結構化程序設計等三部分組成。結構化方法是軟件工程中最早、最傳統(tǒng)的開發(fā)方法。被稱為續(xù)子程序、高級語言之后軟件發(fā)展中的第三個里程碑,影響深遠。結構化開發(fā)方法是從針對普通數(shù)據(jù)的處理應用發(fā)展而來的,技術成熟,是其他開發(fā)方法的基礎。特別適合于數(shù)據(jù)處理領域的問題;但不適應于規(guī)模大以及特別復雜項目。難以解決軟件重用問題、需求變化問題和維護問題。
面向數(shù)據(jù)結構的方法是一種以數(shù)據(jù)結構設計為核心,以事件和數(shù)據(jù)驅動,基于進程的軟件開發(fā)方法,是從結構化方法演變而來的。面向數(shù)據(jù)結構的方法強調數(shù)據(jù)結構,而不像結構化方法強調數(shù)據(jù)流,這是由于一個問題的數(shù)據(jù)結構與處理該問題的數(shù)據(jù)結構的控制結構高度相似。該方法的特點為:首先描述問題的輸入、輸出數(shù)據(jù)結構,分析其對應性,并用數(shù)據(jù)結構圖(特指該類方法所用的圖形描述工具,如Jackson結構圖、Warnier圖)來表示,再在此基礎上進行需求分析。最后完成問題的軟件過程描述。該方法也是遵循分解和抽象的原則,將問題分解為由順序、選擇和重置三種基本結構形式表示的各部分層次結構。再用數(shù)據(jù)結構圖來表達。該方法適合于小規(guī)模的項目。當輸入數(shù)據(jù)結構和輸出數(shù)據(jù)結構無對應關系時,難以應用該方法。
維也納開發(fā)方法是用嚴格的形式語言來描述軟件需求,用形式化的開發(fā)方法把描述模型變換成目標系統(tǒng)。形式化是指借助數(shù)學方程、函數(shù)等數(shù)學方式的表達形式。該方法的特點是將軟件系統(tǒng)視為一個模型,輸入/輸出是模型的對象,模型通過對對象的操作實現(xiàn)了軟件功能。這個模型具有代數(shù)式的特點:輸入/輸出和對象的真正含義都用數(shù)學的域方程來表示,系統(tǒng)在計算機內的狀態(tài)用數(shù)學函數(shù)表示。該方法產生于用高級語言開發(fā)編譯系統(tǒng)的過程中。先應用于開發(fā)程序語言的語義形式說明,逐步演變成一般軟件的開發(fā)方法,但應用范圍不如其他方法廣泛。
面向對象的開發(fā)方法是以對象為中心,以類、屬性、服務和繼承等為構造機制來認識、理解、反映客觀世界,以封裝、聚合、消息傳送、結構與連接等來設計,構建相應的軟件系統(tǒng)。面向對象的開發(fā)方法最大的特點是將其他開發(fā)方法以數(shù)據(jù)流、數(shù)據(jù)結構等為中心,調整為以對象為中心;而對象是構成世界的一個獨立單位,具有自己的靜態(tài)特征和動態(tài)特征;計算機實現(xiàn)的對象與真實世界的對象具有一一對應的關系,更能易于為人們所理解和接受,降低了用戶、開發(fā)人員的溝通成本。面向對象方法包括面向對象分析、設計和實現(xiàn)活動。由于對象是客觀存在的,因此當需求變化時對象的性質要比對象的使用更為穩(wěn)定。從而使建立在對象結構上的軟件系統(tǒng)也更為穩(wěn)定,因此該方法徹底解決了軟件的可維護性問題,成為近年來最流行的軟件開發(fā)方法。
上述方法屬于核心的開發(fā)方法,具有比較全面的技術、使用、管理和經(jīng)濟等特征,理論體系、技術應用均處于成熟的狀態(tài)。此外,還有一些非核心的開發(fā)方法,主要是模塊化、可視化和敏捷開發(fā)方法,這些方法更具有工具性或者組合性的特點,整體性和理論體系不夠顯著。
模塊化開發(fā)方法把一個待開發(fā)的軟件進行分解,分解成若干模塊,每個模塊分別獨立地開發(fā)、測試,最后再組裝出整個軟件。模塊就是可組成系統(tǒng)的、具有某種確定獨立功能的半自律性的子系統(tǒng)。該方法將復雜的軟件系統(tǒng)通過模塊分解的方式降低難度和復雜度,每個模塊的研發(fā)和改進都獨立于其他模塊的研發(fā)和改進,既保證模塊功能的獨立,又能實現(xiàn)模塊的重復使用;每個模塊所特有的信息處理過程都被包含在模塊的內部,通過一個或數(shù)個通用的標準界面與系統(tǒng)或其他模塊相互連接,既實現(xiàn)了內部信息的屏蔽,又提高信息處理的效率和準確性。該方法缺點在于處理大型復雜的問題,往往無法分解;此外,在分解過程中,不同角度要求屏蔽的信息是不同的,形成沖突。因此,該方法一般是融合入其他開發(fā)方法內來運用的。
可視化開發(fā)方法就是在可視開發(fā)工具提供的圖形用戶界面上,通過操作界面元素,諸如菜單、按鈕、對話框、編輯框、單選框、復選框、列表框和滾動條等,由可視開發(fā)工具自動生成應用軟件。該開發(fā)方法是事件驅動的,系統(tǒng)按照事件一消息一消息相應函數(shù)的邏輯運行的。該開發(fā)方法的核心要素是消息響應函數(shù),是由可視開發(fā)工具在生成軟件時自動裝入的。該開發(fā)方法可實現(xiàn)兩類服務:一是生成圖形用戶界面及相關的消息響應函數(shù);二是為各種具體的子應用的各個常規(guī)執(zhí)行步驟提供規(guī)范窗口,包括對話框、菜單、列表框、組合框、按鈕和編輯框等,提高開發(fā)效率。由于要事先生成各種消息相應函數(shù),該方法只能應用于相當成熟的領域,比如關系數(shù)據(jù)庫等;在一般應用領域,只適合用戶界面的可視化開發(fā)。該開發(fā)方法一般不能獨立運用,需要融入其他開發(fā)方法中來運用。
敏捷開發(fā)方法是移動互聯(lián)時代興起的綜合性開發(fā)方法,將互聯(lián)網(wǎng)精神融入到開發(fā)團隊,采取適應變化、以人為楊心、迭代、循序漸進的開發(fā)方法。該方法是在互聯(lián)網(wǎng)技術和商業(yè)發(fā)展背景下產生的,適用互聯(lián)網(wǎng)軟件開發(fā)需求不明確、客戶體驗性強、用戶競爭激烈等情況。該方法注意團隊組合。一般將項目經(jīng)理、用戶人員和開發(fā)團隊混合編組,注意激發(fā)開發(fā)人員活力、給與充分授權等適應互聯(lián)網(wǎng)精神的團隊組織和管理理念,融合原有的迭代、增量、噴泉等開發(fā)模型中分析、設計、開發(fā)等既有方法。把一個大項目分為多個相互聯(lián)系,但也可獨立運行的小項目,并分別完成,在此過程中軟件一直處于可使用狀態(tài);強調各個階段任務的短、小、靈、快。該方法是一種綜合方法,重視強調一些核心原則和輔助原則,這些原則既是開發(fā)人員和團隊價值取向,也是工作方法。比如,核心原則包括:①注重個人及互動勝于過程和工具;②注重可用的軟件勝過詳盡的文檔;③注重客戶協(xié)作勝于合同談判;④注重響應變化勝于恪守計劃等。具體的敏捷開發(fā)方法包括×P極限編程、Scrunm、水晶方法、開放式源碼、功用驅動開發(fā)方法、自適應軟件開發(fā)方法等。
不論開發(fā)方法如何變化,并不存在完美無缺的開發(fā)方法;也不存在一種萬能的開發(fā)方法,能適應于所有軟件開發(fā)之需。在實踐中,各種開發(fā)方法是可以組合使用的。結構化方法和模塊化方法,可理解為系統(tǒng)架構的設計方法路徑;面向數(shù)據(jù)結構的方法,可理解為從數(shù)據(jù)結構作為起點的一種設計思路,而不是將功能作為設計起點;敏捷方法更多的是偏向過程和團隊建設的工作組織方法。因此,在一個項目中,可以以敏捷方法作為工作組織形式,按照模塊化方法把工作任務分解,然后按照數(shù)據(jù)結構方法進行內部設計。當需要選用開發(fā)方法時,應實事求是,選擇最適合主客觀條件的開發(fā)方法。