序
軟件工程學科的發展有其歷史的必然。近半個世紀以來,隨著通信、計算機、網絡應用的普及,作為其靈魂的軟件的開發顯得越來越重要。無數的反例證明,如果軟件產品的質量達不到要求,帶來的損失是極其嚴重的。為保證或提高軟件產品的質量,關鍵的問題就是從技術和管理兩方面雙管齊下,使用得到實際考驗的一繫列軟件開發實踐,作為我們工作的指導原則,切實做好軟件開發的各項活動。
有人講,軟件工程課程學不學沒有用處。事實上是這樣嗎?不是。我在給清華大學計算機繫的工程碩士上軟件工程課的時候,他們說,他們上的所有課程中,這門課有用。因為他們都是從事軟件開發多年的在職研究生,他們反映,多年來困惑他們的很多問題,從課程中都能找到對應的解決方法。有時,看上去是一句普通的“原則”,在實踐上卻能解決大問題。所以,雖然課本中講了許多條條框框,其實都是有其實踐背景的。
還有人講,軟件工程這門課程太枯燥,聽不懂,做不會,學習起來提不起興趣。這就是學習方法問題了。軟件工程有一條主線,即軟件生命周期過程。它的特點是分階段、有迭代。
從軟件開發方法來看,不論是傳統的結構化方法,還是面向對像方法,或新的面向服務架構,它們都有各自的適用領域,有不同的視角、不同的活動組織方式和不同的架構。
從軟件工程過程來看,基本的是開發過程、運行過程和維護過程,此外還有各種支持過程和組織過程,它們為基本過程提供輔助支持和各種保證。
從軟件工程管理來看,有整體管理,包括啟動、計劃、執行、控制和收尾5大過程,此外,還要考慮需求、成本、進度、質量、人員、溝通和風險等方面的管理活動。
如果我們明確了軟件工程的主要方面,就可以有目的、繫統地進行課程的學習了。
總之,對於軟件工程,應首先想到它是有用的,也可能將來工作後用不到操作繫統原理、計算機原理等課程所講的內容,但隻要是從事軟件開發,軟件工程就是回避不了的。其次,要有它不難學的思想。關鍵是對將來自己工作的領域要有規劃,找準方向,有針對性地學習。特別地,由於社會需求〖1〗軟件工程基礎與應用(第2版)序[3]〖3〗是不斷變化的,軟件開發技術是不斷進步的,軟件開發工具是層出不窮的,我們不要一味追求新的,而應該從成熟、可靠的技術和工具學起。在學校裡打好基礎,將來在工作中就很容易接受新東西。
馬小軍老師從事軟件工程的教學已經20多年了,我與她的相識是在20世紀90年代初她聽我的軟件工程課的時候。她是一位對工作很認真的老師,在這麼多年的教學中已經積累了豐富的教學經驗,並領導了許多軟件開發項目,從如何培養應用型技術人纔角度出發,對軟件工程的教學體繫、課程內容選材和實踐活動組織等各方面都有很好的想法,這本教材的編寫就體現了她的教學思路和多年教學的體會,有理論,有案例,全書在內容組織方面注重科學性和繫統性,在行文敘述方面頗具簡潔性和可讀性。我推薦同學們認真閱讀,切實領會其實質,不斷進步。
清華大學計算機繫教授殷人昆
2013年7月
第2版前言
基於近幾年來使用本書第1版開展“軟件工程”課程教學的感受以及師生們對一些問題的認識與研討,同時結合軟件領域技術的使用狀況,本書第2版更注重軟件工程基本理論和技術在當前軟件開發領域中的實用性、學生在學習過程中的易理解性以及核心概念和技術的拓展應用,主要做了如下調整:
(1) 增加了對軟件工程師職業道德及基本素質的論述,使學生對未來成為一名軟件工程師有初步的了解。
(2) 略掉了近幾年較少使用且容易造成學習和理解障礙的概念和形式化使用,例如受限關聯、鏈屬性等。
(3) 對一些常用且很重要的概念、名詞和技術使用方法等,則調整了論述的方式,增強了條理性,並加大舉例說明的力度,同時也更注重舉例的可理解性與前後連貫性,例如模塊結構圖的與差設計、UI設計、面向對像技術與UML建模過程中類的抓取等。
(4) 針對測試工作重要性的不斷提升,特別是Web類軟件和遊戲類軟件的大量推出,測試技術與方法也得到了不斷的擴充與完善,增加了自動化測試技術和工具的介紹。
(5) 伴隨各章進行繫統化應用學習的綜合案例被完整替換,選擇的是國內所有高校大學生每年都會親身參與的體能測試活動作為背景,分別采用結構化技術和面向對像技術,進行了項目需求定義、繫統分析和繫統設計等開發過程的繫統化詳細論述。對於其他非高校學生讀者,鋻於一般也都有體測的經歷,與此案例有極大的相似之處,學習理解應該也比較容易。選擇此項目的另一個考慮是,測試活動很有可能隨著要求和地域的不同發生變化,學生則可以根據已給出的分析和設計成果進行相應的方案調整練習,從而達到理論與實踐及時的結合。
(6) 對各章後的練習題都做了調整,不僅增加了對一些容易混淆概念的對比理解題,還增加了一些激勵學生結合實際體會或興趣進行分析思考的題目,以期使學生將原以為枯燥的學習、抽像的技術概念能夠馬上用於實際問題的解決,提高繼續學習的興趣和熱情。
本書第2版的編寫依然遵循內容實用和繫統化、圖形規範和一致的原則,融入了多年的教學和實踐經驗,並采用通俗易懂的語言和簡明完整的舉例進行表述。書中所有圖形(除界面截圖以外)均采用Microsoft Office Visio 2007或2010繪制。〖1〗軟件工程基礎與應用(第2版)本書共計10章,馬小軍作為總負責人,提出了總體修改方案,並修改、編寫了第1~6章,第7~10章由張玉祥修改、編寫。
在本書第2版的修改編寫過程中,獲得了“北京聯合大學‘十三五’規劃教材建設項目”的資助,也得到了張冰峰、馬楠和廖禮萍三位老師的支持和協助,同時又參閱了大量的文獻和資料,為終內容的篩選與論述提供了豐富的借鋻,在此向這些老師、北京聯合大學領導和專家以及文獻資料的作者再次表示衷心的感謝。
由於時間關繫且作者水平有限,書中難免會存在問題和不妥之處,真誠地希望廣大讀者和軟件工程領域的專家能夠提出寶貴的意見和建議,我們會虛心地接受並認真思考、修正。作者聯繫方式: xxtxiaojun@buu.edu.cn。
編者
2017年6月於北京
第1版前言
軟件工程以研究如何高效率地開發高質量、高可靠性、易維護的軟件產品為核心內容,自從20世紀60年代末推出以來,對軟件產業的發展起到了巨大的推動作用。軟件工程思想的嚴謹性、開發過程的規範化,為軟件項目開發提供了理論保障;各種開發技術和開發方法的湧現和使用,計算機硬件性能的極大提高,以及網絡技術和多媒體技術等的不斷完善,為開發功能健全、性能良好、用戶滿意的軟件,提供了技術支持。由此也促進了軟件在各行各業、各個領域中的廣泛應用,成為企事業單位全面實現信息化建設的核心內容。隨著軟件應用的廣泛化與內部功能更新的頻繁化,用戶對軟件質量和健壯性的要求更加突出,隻有嚴格遵循工程化和規範化思想的指導,軟件開發纔可能獲得成功。
在很多人的概念裡,軟件開發就是編寫程序,即便是一些公司裡面的技術人員,對軟件工程也缺乏正確的認識,項目開發過於隨意,導致公司雖然能夠獲得了眼前的經濟效益,但因產品在後期不斷出現問題,直接影響了企業的形像,長遠收益大打。21世紀以來,軟件工程作為獨立的學科體繫,與計算機科學、信息工程、計算機工程等並存,體現出國家對軟件技術人纔的培養更加重視。信息化發展步伐的邁進,使軟件人纔的社會需求量也顯著提高。軟件開發不再是軟件專業學生獨自掌握的知識和專有技能,而變得更加大眾化和普遍化。因軟件工程不僅強調技術及其應用,也是一種分析問題和解決問題的思想和方法。所以,繫統學習軟件工程的知識,對任何專業、將來做任何工作的人而言,都是十分有意義和必要的。
目前市面上出版的軟件工程教材比較多,所介紹的理論知識和開發技術也很全面,但各部分的舉例不夠繫統性,特別是對於一些非計算機專業的學生而言, 欠缺很多軟件方面的專業基礎知識,理解起來有一定困難。其結果導致對各章節知識的理解和持續性,特別是技術方法的完整運用,學生難以體會和感受。
為此,我們結合對軟件工程的了解與感悟以及多年的教學體會與經驗,對軟件工程的基本概念、基本理論和主流技術進行繫統梳理後編寫了本書,書中不僅進行了理論、技術和工具的介紹,同時選擇了一個難度和規模適中且學生容易理解的項目作為綜合案例,在書中的主要章節貫穿描述,目的是幫助學生正確理解所學內容,繫統化地掌握和認識軟件工程的思想、技術在實際開發中的具體運用,從而使教材的閱讀、學習達到理論與實踐的密切結合。
全書共10章,依照軟件生存周期的理念展開敘述,具體內容如下。
第1、2章是軟件工程綜述,主要介紹軟件的概念和特點,軟件工程提出的背景和基本原理,幾種主流開發方法,軟件生存周期的組成和開發模型,以及常用的建模工具等。
第3章是需求調研與可行性研究,主要介紹需求調研的基本方法、用戶業務流程的描述、項目可行性分析及軟件成本/效益分析的常用方法等。
第4、5章是繫統分析與設計,重點介紹基於結構化技術的分析與設計方法,包括主要任務、工作原理、基本原則,以及數據流程圖、數據字典和軟件結構圖的構建與優化等。
第6章是詳細設計與編碼實現,主要介紹算法的常用描述工具、界面設計需要注意的問題以及一般編碼原則等。
第7、8章是基於面向對像技術的分析與設計方法以及統一建模語言UML,主要介紹面向對像分析與設計的基本原理、工作過程以及面向對像技術和UML中的主要視圖模型與構建方法等。
第9章是軟件測試技術與維護,主要介紹測試的概念與方法、軟件調試的步驟與方法以及軟件維護的概念、影響維護的因素和提高可維護性的方法。
第10章是軟件項目管理,主要介紹軟件規模估算方法、風險分析與監控、人員的組織與管理、進度與軟件質量的控制等。
作為主編,馬小軍負責本書的結構組織、綜合案例的確定和統稿,並編寫了第1章、第2章和第4章,廖禮萍編寫了第5章、第7章和第8章,第3章、第9章和第10章由張冰峰編寫,第6章由馬楠編寫。全書由馬小軍統稿。
在本書的編寫過程中,參閱了大量的文獻和資料,在此向這些文獻資料的作者深表崇敬之意並衷心的感謝。
本書的編寫以北京聯合大學信息學院軟件工程平臺課教學改革為依托,突出內容的實用性和繫統化以及圖形的規範化和一致性,語言通俗易懂,結構編排合理;所有舉例簡明、完整,同時,書後配有豐富的習題。書中所有圖形(除界面截圖以外)均是用Microsoft Office Visio 2007繪制的。
本書既可作為高等院校相關專業本科生軟件工程課程的教材或參考書,也可作為項目管理人員、應用軟件開發人員和專業技術人員的技術參考資料。
我們希望讀者通過閱讀本書,了解軟件工程的理念,理解二種主流技術的特點和基本原則,掌握各種模型和建模工具的使用。同時,通過綜合舉例,感受軟件項目開發過程中繫統分析和繫統設計的關繫與具體實施方法,為今後獨立從事一個小型軟件項目的開發提供參考和幫助。但由於時間關繫且作者水平有限,書中難免會存在問題和不妥之處,真誠地希望讀者和軟件工程領域專家能夠提出寶貴的意見和建議,以幫助我們逐步完善和修正。作者聯繫方式: xxtxiaojun@buu.edu.cn。
〖1〗軟件工程基礎與應用(第2版)前言[3]〖3〗編者
2013年5月於北京