
摘 要:軟件工程是高校軟件專業的核心課程,課程性質偏于設計且實踐性較強;在實際教學中,學生常感課程乏味,難于掌握;本文深入分析探討軟件工程的三要素:過程、方法和工具,一方面總結指出課程乏味的根源,另一方面給出提高學生興趣的授課策略,以期學生能更快更好地掌握軟件工程本質,為以后的工程實踐打下良好基礎。
關鍵詞:軟件工程;過程;工具;方法;三層結構
中圖分類號:TP393 文獻標識碼:A
1 引言(Introduction)
軟件工程是軟件專業的核心課程。它從設計的角度涵蓋、運用以前學習的各門專業基礎課如數據結構、算法、程序語言、數據庫、網絡、開發工具,以及操作系統,通過設計分布式系統,學生一方面能夠加深對以往知識的理解,另一方面能從關注模塊轉變到理解系統架構。但要想深刻理解軟件工程并掌握軟件設計,就一定要深入領會軟件的三要素:過程、方法和工具,因為這三要素將幫助我們整體、可視化地管理軟件系統的各個方面,包括抽象到具體的需求分析,概要到詳細的軟件設計,黑/白盒測試,以及源碼和項目管理等。考慮到課程的學時,要求學生短期內全面深入地掌握軟件工程的諸多方面是不現實的。這就要求在授課期間,對三要素所涉及的理論部分和實踐部分做刪減,以便在強調軟件工程各階段框架建立的同時能突出理論重點。下面本文將對三要素作深入的分析,以期能夠闡明三要素之間的關系,引導學生的學習熱情,同時提高授課效率。
2 對軟件工程三要素的分析與探討(Analysis for the
main three factors in software engineering)
2.1 對工程過程的分析探討
不失本質,過程即指工程階段,強調的是異步或同步的工程步驟。如眾所周知的軟件工程的幾個工程階段分別是:需求分析、設計、編碼、測試、部署、維護等。而每個階段具體實施還要分為若干步驟,如需求分析階段又可細分為獲取需求、問題分析、需求評審、變更管理等步驟;設計階段可細分為架構設計,詳細設計等步驟。授課時結合“過程”這個概念,講的最多的就是軟件工程的生命周期模型(如瀑布模型和RUP模型),通過不同模型的講解,綜合地闡述各階段之間的關聯,以及各步驟的時序關系。概括地說,對軟件過程的講解除了要規范軟件的開發過程之外,更多的是不同工程周期模型的理論對比。在學生沒有掌握具體工程方法和工具的情況下,對比的不論多詳細,學生都不會有切身的感受,而如果這部分的理論講解用時較長,學生感覺課程乏味、不明就里就是自然而然的事情。因此對“過程”的講解應盡量簡短,只要規范化軟件過程中涉及的詞匯并給出準確釋義即可。
2.2 對工程方法的分析探討
對于“過程”中給出的若干具體詞匯,即步驟名稱,要想具體展開實施,必然有一定的理論方法。如“需求分析”階段的“問題分析”步驟,這個詞匯在具體展開時涉及的理論方法可以是:繪制系統流程圖、業務流程圖、活動圖等;再比如“設計階段”的“詳細設計”步驟,在展開時對應的理論方法可以是面向對象的分析與設計(OOA/OOD),或者是基于數據流的分析方法等。概括而言,對“方法”的講解,重點突出的是兩方面:一方面要進一步劃分詞匯的層次結構,使得每個階段的每個步驟都有具體的實施方法的名稱。實施方法的名稱一定是詞匯層次結構樹的葉子節點。另一方面,要對每個葉子節點(即方法名稱)做理論說明,交代清楚該節點要產出的模型內容及意義即可。該部分內容在授課上仍是理論為主,強調有關詞匯的理解和記憶,課時無需太多。
2.3 對工程工具的分析探討
對于工程方法中給出的每種理論方法都有相應的工具予以支持。我們說軟件工程實踐性較強,一部分原因就是指對有關建模工具的運用和掌握。假設我們對“設計—詳細設計—OOA/OOD”中的葉子詞匯“OOA/OOD”,遵照其方法上的理論說明,應用工具進行實施展開的話,意味著要選用一個支持UML建模語言的工具軟件進行實施建模。對UML提供支持的工具有Microsoft Visio和IBM Rational Rose,任選一種即可。在具體軟件操作上即是要生成用例圖、類圖、時序圖、構件圖和部署圖。盡管理論上學生知道應用工具要生成哪些視圖,但對于圖形間的邏輯關系,每個圖形攜帶的細節信息,未必能夠準確理解。因此,應用工具軟件進行實際的建模操作要多分配學時,通過較長時間實踐才能逐漸地將理論方法和實際工具操作結合到一起。另外,隨著工具軟件使用上逐漸成熟,軟件建模的高級話題,如正逆向工程,通過與開發工具的結合(如Visio與.NET的結合)[1],才能使學生真正感受到設計的樂趣。
3 建議的授課策略(A proposed schema for improving
the teaching effect)
軟件工程總體來看就是要把握過程、方法和工具的學習時間。為了既能突出理論重點,又能保障有足夠的實踐和思考,本文建議在理論講解上除了釋義闡述詞匯層次結構樹,還要滲透如圖1所示的軟件設計思想。
design process
該圖體現了以數據處理為中心的軟件的三個概念層次。三個層次在圖中分別由三個對象予以表示:分別是邊界層(boundary)對象,邏輯層(logical)對象和數據層(dbaccess)對象。其中boundary對象主要負責接收用戶在界面輸入的數據;logical對象負責接收和處理來自于boundary和dbaccess的數據;而dbaccess則負責存取存儲介質上的數據。圖1的整體語義是:用戶第1步輸入數據集合DC1給boundary對象;boundary對象對DC1做處理之后,數據集合變為DC2,然后boundary對象通過第3步將DC3(DC3≤DC2)傳遞給logical對象;logical對象收到DC3并結合經由dbaccess對象發送過來的DC4,在計算處理后持有的數據集合變為DC5;接下來,logical對象一方面通過第7步發送DC6給boundary對象,一方面調用dbaccess對象進行數據DC7的存儲,其中DC6≤DC5,DC7≤DC5;經由boundary對象對DC6進行處理變成DC8后,對數據的處理至此結束。boundary最終通過第10步將數據DC9(DC9≤DC8)顯示給用戶。
通過對該圖的理論闡述,重點強調數據的流動以及各層次對象對數據的處理結果,這將有效促進學生對人機交互類軟件運行機理的理解,同時也能印證設計階段的各種方法理論的潛在機理。
至于在軟件工程的實踐環節,筆者建議除了常規的基于UML為軟件建模之外,可重點練習分布式軟件設計,以加深理解設計模式在構件設計上的應用[2];另外,對于常規的測試工具如黑盒測試分類中的功能測試工具WinRunner和負載測試工具LoadRunner[3],可適當予以實際演示,幫助學生理解通過錄制腳本,可完全模擬多個客戶使用軟件的情況,既能實際檢測待測軟件的功能接口是否正常工作,還能使學生對測試有直覺上的認識,有利于擴充學生的視野。
4 結論(Conclusion)
對軟件工程三要素:過程、方法和工具的理解和掌握是軟件工程課程的授課重點,也是量化教學中理論部分和實踐部分學時的主要依據。本文通過對三要素的分析和探討,指出“過程”和“方法”的講解是理論部分,主要講解工程詞匯的層級結構樹及詞匯的準確釋義。除此之外,本文特別提出軟件設計的三層結構應貫穿于理論授課的全過程,因為“三層結構”能與三要素在理解上相互促進;對“工具”的掌握則主要來源于實踐,既然“方法”部分已對必要的理論進行了釋義,那么“工具”部分的練習,一方面用于印證“方法”的理論說明,另一方面用于開闊學生的視野,使學生直覺上能感知軟件工程的各階段都有“工具”予以支撐,軟件工程不再只是枯燥的理論,而是“觸手可及”的實用方法。
參考文獻(References)
[1] Andrew Filev,et al.Professional UML with Visual Studio.NET—
UnmaskingVisio for Enterprise Architects[M].Wrox Press Ltd.?,
Reprinted March 2003 in the United States of America.
[2] 竇萬峰.軟件工程實驗教程[M].北京:機械工業出版社,2009.
[3] 姚紅巖,馬云吉.“軟件工程”教學策略探討[J].軟件工程師,
2014,17(8):10-11.
作者簡介:
姚紅巖(1979-),男,博士,講師.研究領域:軟件工程.