在軟體工程學科中,方法學用來表示一套涵蓋整個軟體生産過程的技術的集合。目前使用得較廣泛的軟體工程開發方法學,分别是結構化開發方法學和面向對象開發方法學。
結構化開發方法學自1968年提出後,經過幾十年的發展,形成了一套完整的規範。構成結構化開發方法學的技術包括結構化分析、結構化設計、結構化程式設計和結構化測試,這些技術在以資料為主或小型系統方面得到廣泛應用。
結構化開發方法學采用結構化方法來完成軟體開發的各項任務,并使用适當的軟體工具或軟體工程環境支援結構化方法的運用。結構化開發方法學把軟體的生存周期依次劃分為若幹個階段,然後順序地完成每個階段的任務,從對問題的抽象邏輯分析開始,一個階段接一個階段地進行開發,進而降低了整個軟體開發工程的困難程度。
結構化開發方法學獲得成功的原因是,結構化方法要麼是面向行為的,要麼是面向資料的,但沒有既面向資料又面向行為的。軟體的基本組成部分包括産品的行為和這些行為操作的資料。有些結構化方法,如資料流分析是面向行為的,這些方法集中處理産品的行為,資料則是次要的;反之,有些方法,如jsp系統開發技術是面向資料的,這些方法以資料結構為中心,在資料結構上操作的行為則是次要的。
随着軟體産品規模的不斷增大,結構化開發方法學有時不能滿足要求。換句話說,結構化方法處理50000行以下代碼是有效的。然而,當今的軟體産品,50000行或5000000甚至更多行代碼的産品非常普遍。在結構化開發方法學中,軟體維護的費用占到軟體費用的2/3。
面向對象開發方法學把資料和行為看成同等重要,即将對象視作一個封裝了資料與操作的統一的軟體元件。對象的概念符合業務或領域的客觀實際,反映了實際存在的事物,也符合人們分析業務本質的習慣。
面向對象技術自20世紀90年代提出以來得到快速發展,并被應用在各種各樣的軟體開發中。面向對象技術将資料和資料上的操作封裝在一起,對外封閉實作資訊隐藏的目的。使用這個對象的使用者隻需要知道其暴露的方法,通過這些方法來完成各種各樣的任務,完全不需要知道對象内部的細節,保證相對獨立性。
面向對象方法的優勢主要展現在維護階段。相對于結構化方法,無論對象的内部細節如何變化,隻要對象提供的接口(方法定義)保持不變,則整個軟體産品的其他部分就不會受到影響,不需要了解對象内部的變化。是以,面向對象開發方法使維護更快、更容易,同時産生回歸的機會也大大降低了。面向對象開發方法學使開發變得相對容易。大多數情況下,一個對象對應實體世界的一個事物。軟體産品中的對象和現實世界的同等對應物之間的密切對應關系,促進了更優化的軟體開發。對象是獨立的實體,是以面向對象促進了複用,降低了開發維護的時間和費用。
目前,傳統軟體開發方法學是軟體工程學發展的基礎。廣大軟體工程師對這種範型比較熟悉,而且在開發某些類型的軟體時也比較有效,是以,在相當長一段時期内,結構化開發方法學還會有生命力。此外,如果沒有完全了解傳統的結構化開發方法學,也就不能深入了解其與面向對象開發方法學的差别,以及面向對象開發方法學為何優于傳統的結構化開發方法學。
在使用結構化開發方法學時,分析階段和設計階段過渡太快,而面向對象開發方法學是一種疊代地從一個階段向另一個階段過渡,比結構化開發方法學平滑得多,進而降低了開發過程中返工的機率。
按照規則的多少和限制的強弱,可以大緻地把軟體開發方法學分為重型軟體工程方法學和輕型軟體工程方法學兩種。重型軟體工程方法學比較正規和嚴謹,在采用重型軟體工程方法學的項目中,開發人員具有較強的可替換性,因為方法學本身強制要求開發者把他所創造的所有的制品(artifact)都記錄在案(按照該方法學規定的格式),是以參與項目的新人能借助這些文檔很快上手(前提是新人也熟悉這種方法學規定的格式),進而開發人員的變化(如跳槽)對項目的沖擊也相對較小。
在傳統的觀念中,我們認為重型方法要比輕型方法安全許多。因為我們之是以想出重型方法,就是由于在中大型的項目中,項目經理往往遠離代碼,無法有效地了解目前的工程進度、品質、成本等因素。為了克服未知的恐懼感,項目經理制定了大量的中間管理方法,希望能夠控制整個項目,最典型的莫過于要求開發人員頻繁地遞交各種表示項目目前狀态的報告。
項目經理可能會比較偏愛這樣的方法學,因為這樣一來他們掌控的因素比較多,風險就比較小。當然,一些開發人員則不會喜歡這樣的方法學,因為在采用重型軟體工程方法學的項目中,他們難以感覺到自己的重要性,無法展現自己的價值。
重型軟體工程方法學的一個弊端在于,大家都在防止錯誤,都在懼怕錯誤,要達到充分的溝通也是很難的。最終,連對個人的評價也變成以避免錯誤的多少作為考評的依據,而不是成就。
輕型軟體工程方法學則具有相反的特質。在采用輕型軟體工程方法學的項目中,記錄在案的制品不多,傳遞的就是代碼以及可以運作的産品,還有測試用例。大多數交流是口頭的、非正式的,開發效率高,但也隻存在項目成員的腦海中。如果成員從項目中離開,那麼他腦海中的這些東西也随之帶走。因為開發人員往往都希望自己具有不可替代的重要性,而且一般都覺得寫程式比寫文檔有意義,因為不必把時間浪費于編寫正規文檔,是以開發人員一般都比較偏愛輕型軟體工程方法學。
一般而言,大型項目采用重型軟體工程方法學好一點,因為項目人手多、周期長,即便所有員工都很喜歡這個項目,但這麼多人在這麼長時間内一個都不跳槽或一個都不生病也是不太可能的;而小型項目往往采用輕型軟體工程方法學好一點。