本書是軟件工程的入門教材,系統(tǒng)地闡述了現(xiàn)代軟件開發(fā)過程、方法、技術(shù)以及相關(guān)工具,使讀者能夠全面掌握現(xiàn)代軟件工程的相關(guān)基礎(chǔ)知識(shí)以及軟件工程師所需要具備的基本實(shí)踐能力。 全書共分為10章,覆蓋了現(xiàn)代軟件工程的主要內(nèi)容,特別是需求分析、軟件設(shè)計(jì)、軟件構(gòu)造、軟件測(cè)試等。本書各章的順序按照軟件工程師的學(xué)習(xí)和成長(zhǎng)過程進(jìn)行編排,首先圍繞高質(zhì)量編碼所需的知識(shí)和能力進(jìn)行介紹,然后逐漸過渡到更加抽象的軟件設(shè)計(jì)和需求分析等內(nèi)容。第1章介紹軟件工程的含義、發(fā)展歷程和重要思想。第2章介紹軟件過程模型、敏捷方法與精益思想以及開發(fā)運(yùn)維一體化(DevOps)。第3章介紹軟件版本管理與開發(fā)任務(wù)管理。第4章介紹代碼質(zhì)量的含義以及高質(zhì)量編碼方法。第5章介紹軟件設(shè)計(jì)的整體內(nèi)容并具體介紹組件級(jí)詳細(xì)設(shè)計(jì)方法。第6章介紹組件級(jí)、框架級(jí)、平臺(tái)級(jí)三個(gè)層次上的軟件復(fù)用方法。第7章介紹軟件體系結(jié)構(gòu)的基本概念以及分布式軟件體系結(jié)構(gòu)和云原生軟件體系結(jié)構(gòu)。第8章介紹軟件需求分析方法、敏捷開發(fā)中的需求工程以及可信需求的含義。第9章介紹軟件測(cè)試方法以及相關(guān)工具。第10章介紹軟件持續(xù)集成、發(fā)布以及軟件構(gòu)建和依賴管理。 本書可作為高等院校計(jì)算機(jī)、軟件工程、人工智能、自動(dòng)化等相關(guān)專業(yè)的本科生教材,也可供相關(guān)領(lǐng)域的專業(yè)技術(shù)人員參考。
教育學(xué)部高等學(xué)校軟件工程專業(yè)教學(xué)指導(dǎo)委員會(huì)推薦教材,以《高等學(xué)校軟件工程專業(yè)規(guī)范與知識(shí)體系》以及IEEE軟件工程知識(shí)體系(SWEBOK)為基礎(chǔ),在軟件構(gòu)造(Software Construction)知識(shí)和能力要求基礎(chǔ)上融入需求、設(shè)計(jì)、測(cè)試及團(tuán)隊(duì)協(xié)作等方面的知識(shí)和能力要求。
本書具有以下特色:
1.在覆蓋經(jīng)典軟件工程方法與技術(shù)的同時(shí)突出體現(xiàn)了現(xiàn)代軟件工程在開發(fā)過程和技術(shù)上的特點(diǎn),例如開發(fā)運(yùn)維一體化以及持續(xù)集成與持續(xù)交付、演化式設(shè)計(jì)、軟件開發(fā)框架與平臺(tái)復(fù)用、分布式與云原生軟件體系結(jié)構(gòu)、敏捷開發(fā)需求分析等。
2.按照做中學(xué)的實(shí)踐化教學(xué)需要以及軟件工程師的成長(zhǎng)過程進(jìn)行教學(xué)內(nèi)容編排,從基本的協(xié)作開發(fā)和編碼能力開始,逐漸過渡到更加抽象的軟件設(shè)計(jì)和需求分析等內(nèi)容。
3.強(qiáng)化高質(zhì)量編碼與可信軟件開發(fā)的要求,體現(xiàn)現(xiàn)代軟件工程對(duì)于軟件工程師個(gè)人的質(zhì)量意識(shí)和可信軟件開發(fā)能力的要求。
4.華為公司軟件人才能力提升變革項(xiàng)目團(tuán)隊(duì)參與編寫,融入華為多年來在信息通信領(lǐng)域積累的軟件開發(fā)方法、工具與相關(guān)實(shí)踐。
云計(jì)算、大數(shù)據(jù)、人工智能等技術(shù)的發(fā)展及ICT(Information and Communications Technology,信息與通信技術(shù))融合的趨勢(shì)推動(dòng)著新的軟件應(yīng)用形態(tài)、新的軟件開發(fā)技術(shù)及新的軟件開發(fā)過程不斷涌現(xiàn)。在應(yīng)用形態(tài)方面,軟件以其極強(qiáng)的滲透性融入人們的日常生活,移動(dòng)應(yīng)用、小程序等網(wǎng)絡(luò)化應(yīng)用成為主流,而通信、能源、交通等基礎(chǔ)設(shè)施也廣泛采用了軟件來實(shí)現(xiàn)數(shù)字化和智能化管理。在開發(fā)技術(shù)方面,以容器化和微服務(wù)為主要特征的云原生架構(gòu)及相關(guān)軟件技術(shù)成為越來越多軟件項(xiàng)目的選擇。在開發(fā)過程方面,敏捷方法已經(jīng)成為主流,開發(fā)運(yùn)維一體化(DevOps)與持續(xù)集成、持續(xù)交付等實(shí)踐也得到了越來越多的應(yīng)用,支撐這些新型開發(fā)流程與方法的云化開發(fā)平臺(tái)也逐漸成熟。
本書面向現(xiàn)代軟件工程所需要的基礎(chǔ)知識(shí)和基本能力進(jìn)行介紹,在覆蓋經(jīng)典軟件工程方法與技術(shù)的同時(shí)突出體現(xiàn)了現(xiàn)代軟件工程在開發(fā)過程和方法上的特點(diǎn),例如,開發(fā)運(yùn)維一體化及持續(xù)集成與持續(xù)交付、演化式設(shè)計(jì)、軟件開發(fā)框架與平臺(tái)復(fù)用、分布式與云原生軟件體系結(jié)構(gòu)、敏捷開發(fā)需求分析等。此外,本書還強(qiáng)化了高質(zhì)量編碼與可信軟件開發(fā)的要求,體現(xiàn)了現(xiàn)代軟件工程對(duì)于軟件工程師個(gè)人的質(zhì)量意識(shí)和可信軟件開發(fā)能力的要求。
軟件工程課程具有很強(qiáng)的實(shí)踐性,所介紹的軟件開發(fā)過程、方法和技術(shù)都需要結(jié)合軟件開發(fā)實(shí)踐進(jìn)行理解和掌握。然而,傳統(tǒng)的軟件工程教材一般都是按照軟件過程、軟件需求、軟件設(shè)計(jì)、軟件測(cè)試這樣的順序進(jìn)行介紹,而且對(duì)于版本管理、編碼、構(gòu)建與依賴管理等軟件工程師的基本開發(fā)技能介紹較少。與之相對(duì)應(yīng)的課程實(shí)踐項(xiàng)目往往花費(fèi)了大量時(shí)間在需求分析、設(shè)計(jì)及相關(guān)的文檔撰寫上,對(duì)于編碼、構(gòu)建、測(cè)試等基本能力的實(shí)踐不夠并且缺少一個(gè)循序漸進(jìn)的體驗(yàn)過程。為此,我們與華為公司的軟件人員能力提升變革項(xiàng)目團(tuán)隊(duì)一起合作,將華為多年來在ICT領(lǐng)域積累的軟件開發(fā)方法、工具與相關(guān)實(shí)踐融入軟件工程課程,并按照軟件工程師的學(xué)習(xí)和成長(zhǎng)過程對(duì)相關(guān)內(nèi)容重新進(jìn)行了編排,首先圍繞高質(zhì)量編碼所需的知識(shí)和能力進(jìn)行介紹,然后逐漸過渡到更加抽象的軟件設(shè)計(jì)和需求分析等內(nèi)容。
建議通過本書學(xué)習(xí)軟件工程的讀者在按順序?qū)W習(xí)各章內(nèi)容的同時(shí),能夠圍繞一個(gè)迭代化的軟件開發(fā)項(xiàng)目逐步體驗(yàn)軟件工程師的成長(zhǎng)過程: 在初步理解軟件開發(fā)過程以及版本和任務(wù)管理的基礎(chǔ)上,首先能夠高質(zhì)量地實(shí)現(xiàn)比較小的代碼單元(例如一個(gè)類),然后能夠完成涉及多個(gè)類的局部軟件設(shè)計(jì)并掌握一些常用的軟件復(fù)用手段,接著了解更高層面上的軟件體系結(jié)構(gòu)特別是分布式軟件體系結(jié)構(gòu)設(shè)計(jì),后理解軟件需求并掌握常用的需求分析方法。此外,完整的軟件產(chǎn)品交付必須有相應(yīng)的質(zhì)量保障及交付過程支持,因此還需要學(xué)習(xí)并體驗(yàn)軟件測(cè)試方法和技術(shù),并了解軟件產(chǎn)品是如何進(jìn)行集成和發(fā)布的。
本書由復(fù)旦大學(xué)計(jì)算機(jī)科學(xué)技術(shù)學(xué)院CodeWisdom團(tuán)隊(duì)與華為公司軟件人員能力提升變革項(xiàng)目團(tuán)隊(duì)合作撰寫完成。其中,彭鑫負(fù)責(zé)第1章及第5~8章的編寫,同時(shí)負(fù)責(zé)全書的修改及統(tǒng)稿; 游依勇負(fù)責(zé)第3~4章的編寫,并基于華為軟件開發(fā)經(jīng)驗(yàn)進(jìn)行了全書企業(yè)實(shí)踐內(nèi)容的歸納和總結(jié); 趙文耘負(fù)責(zé)第2章及第9~10章的編寫。除了三位作者外,復(fù)旦大學(xué)計(jì)算機(jī)科學(xué)技術(shù)學(xué)院CodeWisdom團(tuán)隊(duì)的吳毅堅(jiān)、沈立煒、陳碧歡以及華為公司軟件人員能力提升項(xiàng)目團(tuán)隊(duì)的趙亮、呂新平、王書建、紀(jì)朋、錢逢兵、李春華、吳剛等也參加了部分章節(jié)的編寫和評(píng)審工作,為本書的出版做出了巨大的貢獻(xiàn),在此一并表示感謝。
為方便教師教學(xué)和學(xué)生學(xué)習(xí),本書還配套教學(xué)課件、教學(xué)視頻、示例代碼和課程實(shí)踐等資源,讀者可在清華大學(xué)出版社官網(wǎng)該書主頁(yè)下載。
感謝清華大學(xué)出版社的大力支持以及在本書撰寫過程中的細(xì)心指導(dǎo)!同時(shí)還要感謝教育學(xué)部高等學(xué)校軟件工程專業(yè)教學(xué)指導(dǎo)委員會(huì)、全國(guó)高等學(xué)校計(jì)算機(jī)教育研究會(huì)、復(fù)旦大學(xué)計(jì)算機(jī)科學(xué)技術(shù)學(xué)院的領(lǐng)導(dǎo)和老師們對(duì)本書的大力支持!
由于作者水平有限,書中難免有不足和疏漏之處,懇請(qǐng)廣大讀者批評(píng)指正!
作者2021年12月
彭鑫 復(fù)旦大學(xué)計(jì)算機(jī)科學(xué)技術(shù)學(xué)院副院長(zhǎng)、軟件學(xué)院副院長(zhǎng)、教授、博士生導(dǎo)師,中國(guó)計(jì)算機(jī)學(xué)會(huì)軟件工程專委會(huì)副主任,Journal of Software: Evolution and Process聯(lián)合主編,ACM Transactions on Software Engineering and Methodology等期刊編委。研究方向包括軟件智能化開發(fā)與運(yùn)維、泛在計(jì)算軟件系統(tǒng)等。
游依勇 華為技術(shù)有限公司軟件工程學(xué)院院長(zhǎng),在軟件開發(fā)、產(chǎn)品線總裁、人才培養(yǎng)、產(chǎn)業(yè)管理、生態(tài)建設(shè)等崗位具有20多年的工作經(jīng)驗(yàn),曾獲得國(guó)家科學(xué)技術(shù)進(jìn)步獎(jiǎng)和中國(guó)電子學(xué)會(huì)科學(xué)技術(shù)獎(jiǎng)一等獎(jiǎng)。
趙文耘 復(fù)旦大學(xué)計(jì)算機(jī)科學(xué)技術(shù)學(xué)院教授、博士生導(dǎo)師。研究方向?yàn)檐浖こ獭⑵髽I(yè)信息化。曾獲國(guó)家科技進(jìn)步二等獎(jiǎng)、電子工業(yè)部科技進(jìn)步特等獎(jiǎng)、上海市科技進(jìn)步二等獎(jiǎng)、上海市教學(xué)成果二等獎(jiǎng)等多項(xiàng)和省部級(jí)獎(jiǎng)項(xiàng)。
第1章軟件工程概述
1.1軟件的產(chǎn)生與發(fā)展
1.2軟件工程的含義
1.3軟件工程的系統(tǒng)觀與演化觀
1.4軟件工程師的社會(huì)責(zé)任
1.5本書的內(nèi)容結(jié)構(gòu)
小結(jié)
第2章軟件過程
2.1軟件過程概述
2.1.1基本概念和發(fā)展歷史
2.1.2軟件生存周期過程標(biāo)準(zhǔn)
2.1.3軟件過程模型
2.1.4軟件過程改進(jìn)
2.2敏捷方法與精益思想
2.2.1敏捷方法
2.2.2精益思想
2.2.3敏捷實(shí)踐方法論
2.3開發(fā)運(yùn)維一體化
2.3.1概覽
2.3.2基本原則和技術(shù)實(shí)踐
2.3.3持續(xù)集成、持續(xù)交付和持續(xù)部署
小結(jié)
第3章版本與開發(fā)任務(wù)管理
3.1版本與開發(fā)任務(wù)管理概述
3.1.1配置管理概述
3.1.2版本發(fā)布計(jì)劃
3.2版本管理
3.2.1產(chǎn)品版本號(hào)命名
3.2.2代碼版本管理
3.2.3代碼分支與基線管理
3.3特性開發(fā)任務(wù)管理
3.3.1特性描述
3.3.2特性開發(fā)任務(wù)管理流程
3.3.3變更管理流程
3.4缺陷修復(fù)過程管理
3.4.1缺陷描述
3.4.2缺陷修復(fù)處理流程
3.5基于追蹤與回溯的工作量與質(zhì)量分析
3.5.1基于追蹤的分析
3.5.2基于回溯的分析
小結(jié)
第4章高質(zhì)量編碼
4.1代碼質(zhì)量概述
4.1.1代碼質(zhì)量的含義
4.1.2可理解性和可維護(hù)性
4.1.3可靠性和信息安全性
4.1.4高效性
4.1.5可移植性
4.2代碼風(fēng)格
4.2.1標(biāo)識(shí)符命名
4.2.2排版格式
4.2.3注釋
4.3代碼邏輯
4.3.1代碼編寫的基本要求
4.3.2重復(fù)代碼問題
4.3.3代碼復(fù)雜度問題
4.3.4高質(zhì)量的子程序
4.4安全與可靠性編碼
4.4.1數(shù)據(jù)驗(yàn)證
4.4.2代碼邏輯問題
4.4.3錯(cuò)誤處理
4.4.4斷言
4.4.5異常處理
4.4.6安全編程函數(shù)
4.5代碼質(zhì)量控制
4.5.1個(gè)人測(cè)試與調(diào)試
4.5.2代碼靜態(tài)檢查與質(zhì)量門禁
4.5.3代碼評(píng)審
4.5.4代碼質(zhì)量度量
4.6測(cè)試驅(qū)動(dòng)開發(fā)
4.6.1TDD的概念與優(yōu)勢(shì)
4.6.2TDD的過程與原則
4.6.3TDD中的單元測(cè)試
小結(jié)
第5章軟件設(shè)計(jì)
5.1軟件設(shè)計(jì)概述
5.1.1軟件設(shè)計(jì)目標(biāo)
5.1.2軟件設(shè)計(jì)層次
5.1.3軟件設(shè)計(jì)思想
5.2面向?qū)ο笤O(shè)計(jì)
5.2.1面向?qū)ο笤O(shè)計(jì)過程
5.2.2面向?qū)ο笤O(shè)計(jì)描述
5.2.3內(nèi)聚和耦合
5.2.4面向?qū)ο笤O(shè)計(jì)原則
5.2.5面向切面的編程
5.3契約式設(shè)計(jì)
5.4設(shè)計(jì)模式
5.5演化式設(shè)計(jì)
5.5.1演化式設(shè)計(jì)與計(jì)劃設(shè)計(jì)
5.5.2代碼壞味道
5.5.3軟件重構(gòu)
小結(jié)
第6章軟件復(fù)用
6.1軟件復(fù)用概述
6.1.1軟件復(fù)用概念
6.1.2軟件復(fù)用層次
6.1.3軟件復(fù)用過程
6.1.4軟件產(chǎn)品線
6.1.5開源軟件復(fù)用
6.2組件級(jí)復(fù)用
6.2.1軟件開發(fā)庫(kù)復(fù)用
6.2.2在線服務(wù)復(fù)用
6.2.3接口描述規(guī)范
6.3框架級(jí)復(fù)用
6.4平臺(tái)級(jí)復(fù)用
6.4.1典型平臺(tái)能力
6.4.2基于平臺(tái)的應(yīng)用開發(fā)過程
6.5基于復(fù)用的軟件開發(fā)案例
6.5.1后端服務(wù)開發(fā)
6.5.2前端We碼小程序開發(fā)
小結(jié)
第7章軟件體系結(jié)構(gòu)
7.1軟件體系結(jié)構(gòu)概述
7.2軟件體系結(jié)構(gòu)決策
7.3軟件體系結(jié)構(gòu)描述
7.4軟件體系結(jié)構(gòu)風(fēng)格
7.5分布式軟件體系結(jié)構(gòu)
7.5.1設(shè)計(jì)原則
7.5.2進(jìn)程間通信
7.5.3負(fù)載均衡
7.5.4分布式存儲(chǔ)
7.5.5可靠性保障
7.6云原生軟件體系結(jié)構(gòu)
7.6.1微服務(wù)體系結(jié)構(gòu)
7.6.2微服務(wù)開發(fā)框架
7.6.3容器化部署
小結(jié)
第8章軟件需求
8.1軟件需求概述
8.1.1需求的含義及其來源
8.1.2需求的類型
8.1.3需求工程過程
8.1.4需求的質(zhì)量要求
8.1.5系統(tǒng)需求與軟件需求
8.2需求分解和精化
8.2.1系統(tǒng)愿景與上下文
8.2.2愿景與目標(biāo)分解和精化
8.2.3優(yōu)先級(jí)排序
8.2.4沖突識(shí)別與協(xié)商
8.3需求分析與描述
8.3.1場(chǎng)景分析與描述
8.3.2類分析與描述
8.3.3行為分析與描述
8.3.4需求文檔
8.4敏捷開發(fā)中的需求工程
8.5軟件可信需求
小結(jié)
第9章軟件測(cè)試
9.1軟件測(cè)試概念與原則
9.1.1軟件質(zhì)量事故
9.1.2軟件測(cè)試概念
9.1.3軟件測(cè)試原則
9.2軟件測(cè)試過程模型
9.2.1V模型
9.2.2W模型
9.2.3敏捷測(cè)試模型
9.3軟件測(cè)試類型
9.3.1單元測(cè)試
9.3.2集成測(cè)試
9.3.3系統(tǒng)測(cè)試
9.3.4驗(yàn)收測(cè)試
9.4黑盒軟件測(cè)試方法
9.4.1等價(jià)類劃分法
9.4.2邊界值分析法
9.4.3判定表
9.4.4錯(cuò)誤推測(cè)法
9.5白盒軟件測(cè)試方法
9.6系統(tǒng)測(cè)試技術(shù)與工具
9.6.1功能測(cè)試
9.6.2性能測(cè)試
9.6.3兼容性測(cè)試
9.6.4易用性測(cè)試
9.6.5可靠性測(cè)試
9.6.6信息安全測(cè)試
小結(jié)
第10章軟件集成與發(fā)布
10.1軟件集成與發(fā)布概述
10.1.1持續(xù)集成與發(fā)布的前置條件
10.1.2持續(xù)集成與發(fā)布的價(jià)值
10.1.3云化與本地持續(xù)集成與發(fā)布
10.2持續(xù)集成
10.2.1集成過程
10.2.2持續(xù)集成的實(shí)踐
10.2.3持續(xù)集成的自動(dòng)化支持工具
10.2.4軟件構(gòu)建
10.3軟件發(fā)布
10.3.1軟件發(fā)布的反模式與基本原則
10.3.2藍(lán)綠部署
10.3.3金絲雀發(fā)布
10.3.4暗發(fā)布
10.4部署流水線
10.4.1部署流水線概述
10.4.2華為軟件開發(fā)云中的部署流水線
小結(jié)
參考文獻(xiàn)