本書聚焦于金融軟件的開發(fā)理論、技術(shù)和方法,并注重實(shí)踐,強(qiáng)調(diào)使用正確的工程方法開發(fā)出成本低、可靠性好并能高效運(yùn)行的金融軟件,為金融軟件的開發(fā)維護(hù)培養(yǎng)復(fù)合人才。本書以軟件生命周期為順序,分別介紹問(wèn)題的定義和可行性分析、軟件需求分析、軟件設(shè)計(jì)、程序編碼、軟件測(cè)試、軟件的發(fā)布維護(hù)和重構(gòu)。并在現(xiàn)有軟件工程的技術(shù)基礎(chǔ)上,介紹金融科技項(xiàng)目實(shí)踐。結(jié)合新興的大數(shù)據(jù)、云計(jì)算、人工智能、區(qū)塊鏈等技術(shù),構(gòu)建金融科技產(chǎn)業(yè)生態(tài),并通過(guò)分析發(fā)展面臨的挑戰(zhàn),對(duì)未來(lái)趨勢(shì)進(jìn)行展望。
前 言
背景和動(dòng)機(jī)
目前我國(guó)金融行業(yè)正處于經(jīng)濟(jì)增長(zhǎng)的前沿,證券、銀行等金融產(chǎn)業(yè)占據(jù)著越來(lái)越重要的地位,各種金融產(chǎn)品影響著每個(gè)人的生活。金融行業(yè)需要大量既懂軟件技術(shù)又掌握金融知識(shí)的專業(yè)軟件開發(fā)人員。因而,學(xué)科的交叉融合是當(dāng)前環(huán)境下的必然趨勢(shì),其基本指導(dǎo)思想是寬基礎(chǔ)、重實(shí)踐、求復(fù)合、創(chuàng)模式,即融合兩個(gè)專業(yè)的學(xué)科基礎(chǔ),在有限的學(xué)習(xí)時(shí)間內(nèi)奠定復(fù)合型人才的學(xué)科基礎(chǔ),并將復(fù)合人才的實(shí)踐實(shí)訓(xùn)落到實(shí)處,強(qiáng)調(diào)內(nèi)容重構(gòu)和教學(xué)手段創(chuàng)新,力爭(zhēng)形成既符合學(xué)科內(nèi)涵又體現(xiàn)學(xué)科交叉的融合培養(yǎng)新模式。
自2016年以來(lái),針對(duì)學(xué)科交叉融合建設(shè)中軟件工程課程教學(xué)的需求,南京大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)系進(jìn)行了系統(tǒng)、深入的教學(xué)改革,落實(shí)金融計(jì)算機(jī)人才培養(yǎng)方案,加強(qiáng)學(xué)生軟件工程能力培養(yǎng),以適應(yīng)專業(yè)和產(chǎn)業(yè)交叉融合發(fā)展,從而滿足金融科技崗位需求。這次教學(xué)改革涉及面廣、幅度大、要求高,包括計(jì)算機(jī)學(xué)科和金融工程學(xué)科的交叉融合、知識(shí)結(jié)構(gòu)的重組優(yōu)化、教學(xué)方式方法的改進(jìn)、在線教學(xué)平臺(tái)的開發(fā)應(yīng)用、考核評(píng)價(jià)方法的適應(yīng)調(diào)整等。本書在此背景下應(yīng)運(yùn)而生。
軟件工程課程的目標(biāo)是培養(yǎng)學(xué)生借助工程化的手段綜合運(yùn)用多方面知識(shí)來(lái)解決復(fù)雜問(wèn)題和開展創(chuàng)新實(shí)踐的能力。目前軟件工程在一些行業(yè)、領(lǐng)域已普遍應(yīng)用(如MIS、GIS、ERP等),但軟件工程與金融領(lǐng)域交叉,其關(guān)鍵是數(shù)據(jù)處理和金融模型算法。開發(fā)維護(hù)這類軟件系統(tǒng)時(shí),需要在內(nèi)容、流程和工具支撐上更有針對(duì)性,以融合軟件工程和金融工程之間的認(rèn)知差異。同時(shí),通過(guò)針對(duì)性的軟件系統(tǒng)工程化開發(fā)實(shí)踐,學(xué)生可深入理解和掌握抽象的軟件工程知識(shí),并學(xué)以致用,在開發(fā)、維護(hù)軟件系統(tǒng)的過(guò)程中克服困難、解決問(wèn)題,進(jìn)而積累經(jīng)驗(yàn)、提升能力。
另外,跨學(xué)科的計(jì)算機(jī)金融實(shí)驗(yàn)班面向全校不同專業(yè)招生,學(xué)生編程基礎(chǔ)相對(duì)薄弱,缺乏軟件項(xiàng)目經(jīng)驗(yàn),需要開發(fā)維護(hù)的又是專門領(lǐng)域的軟件,對(duì)金融和計(jì)算機(jī)兩個(gè)專業(yè)的知識(shí)要求都很高。例如,金融軟件需要在大量數(shù)據(jù)的基礎(chǔ)上結(jié)合科學(xué)計(jì)算、機(jī)器學(xué)習(xí)等技術(shù),對(duì)數(shù)據(jù)進(jìn)行清洗、去重、規(guī)格化和針對(duì)性的分析,這涉及多個(gè)學(xué)科的多項(xiàng)專業(yè)技能。目前,互聯(lián)網(wǎng)技術(shù)蓬勃發(fā)展并有效助力軟件開發(fā)大環(huán)境的改善,各種開源軟件、社區(qū)日新月異?傮w來(lái)看,挑戰(zhàn)與機(jī)遇并存。
本書以軟件生命周期為序,分別介紹問(wèn)題定義和可行性分析、軟件需求分析、軟件設(shè)計(jì)、程序編碼、軟件測(cè)試、軟件的發(fā)布/維護(hù)/重構(gòu)等內(nèi)容,并在現(xiàn)有軟件工程技術(shù)的基礎(chǔ)上,結(jié)合新興的大數(shù)據(jù)、云計(jì)算、人工智能、區(qū)塊鏈等技術(shù),介紹了金融科技項(xiàng)目實(shí)踐,最后通過(guò)分析金融科技發(fā)展面臨的挑戰(zhàn),對(duì)其未來(lái)趨勢(shì)進(jìn)行展望。本書可作為計(jì)算機(jī)類和金融類專業(yè)本科軟件工程課程教學(xué)或?qū)嵺`課程教學(xué)的教材,也可作為金融領(lǐng)域金融科技工程師的參考用書。
繼程序設(shè)計(jì)教材后,本書有助于提高學(xué)生的軟件開發(fā)能力。要求學(xué)生在學(xué)習(xí)本書前應(yīng)掌握信息管理系統(tǒng)、數(shù)據(jù)結(jié)構(gòu)、結(jié)構(gòu)化程序設(shè)計(jì)、面向?qū)ο蟪绦蛟O(shè)計(jì)以及程序設(shè)計(jì)方法論等知識(shí)。學(xué)生通過(guò)學(xué)習(xí)本書將在項(xiàng)目開發(fā)、畢業(yè)設(shè)計(jì)等方面奠定良好的基礎(chǔ)。
教材組織思路
本書的組織思路是以項(xiàng)目驅(qū)動(dòng)的方式讓學(xué)生完整體驗(yàn)金融軟件產(chǎn)品上線的全過(guò)程。例如:建設(shè)一個(gè)在線銀行網(wǎng)站(存取款),從基本靜態(tài)頁(yè)面到動(dòng)態(tài)交互頁(yè)面、關(guān)聯(lián)到數(shù)據(jù)庫(kù),再到考慮終端設(shè)備的多樣性等;結(jié)合專業(yè)特點(diǎn),完成一個(gè)融合信息獲取、處理和表達(dá)等多方面設(shè)計(jì)的投顧系統(tǒng);根據(jù)校園生活的衣、食、住、行各方面,實(shí)現(xiàn)App的開發(fā)和運(yùn)維。但更重要的是做真實(shí)的項(xiàng)目,即有真正用戶的軟件,這樣才能有真實(shí)的需求、場(chǎng)景和測(cè)試用例。
在需求分析階段,要明確所需開發(fā)軟件的需求(可采用思維導(dǎo)圖,事先確定好what、why、how、who、when等要素),采用一系列技術(shù)和措施來(lái)保障實(shí)施推進(jìn)工作的順利開展,并高度重視所實(shí)現(xiàn)軟件的質(zhì)量檢驗(yàn)。
在實(shí)施推進(jìn)階段,要求目標(biāo)明確、方法得當(dāng)、穩(wěn)步推進(jìn)?梢酝ㄟ^(guò)草圖來(lái)細(xì)化軟件設(shè)計(jì),并充分了解現(xiàn)有的技術(shù),包括基礎(chǔ)的編程語(yǔ)言、算法、數(shù)據(jù)結(jié)構(gòu)以及各種流行的框架、包、API等。在項(xiàng)目管理方面,關(guān)注各種文檔的版本控制、需求變動(dòng),強(qiáng)調(diào)流程的規(guī)范性目前流行的GitHub可以有效處理項(xiàng)目的托管。
在質(zhì)量檢驗(yàn)階段,可以設(shè)計(jì)功能、性能、可用性、安全性等方面的檢查列表(Checklist),并學(xué)習(xí)分析(靜態(tài) 動(dòng)態(tài))及測(cè)試(黑盒 白盒)技術(shù),在度量時(shí)考慮內(nèi)聚度 耦合度,維護(hù)時(shí)考慮需求變動(dòng) 重構(gòu)。
章節(jié)構(gòu)成
第1章從軟件工程的基本概念出發(fā),介紹工程、軟件的概念,以及軟件的特點(diǎn)、軟件的類型和軟件危機(jī);進(jìn)而介紹軟件工程的發(fā)展歷史,包括軟件開發(fā)歷程、軟件工程定義、軟件工程生命周期模型以及軟件工程的經(jīng)濟(jì)觀點(diǎn);最后介紹金融軟件工程的產(chǎn)生背景及特點(diǎn)、內(nèi)容等。
第2章從計(jì)算機(jī)及軟件的發(fā)展歷程出發(fā),介紹軟件開發(fā)計(jì)劃的制訂過(guò)程,包括問(wèn)題定義、可行性分析、可行性分析報(bào)告和系統(tǒng)的開發(fā)計(jì)劃,另外還介紹了個(gè)人軟件流程與團(tuán)隊(duì)軟件流程,以及敏捷過(guò)程、軟件生命周期、軟件體系結(jié)構(gòu)。
第3章從軟件需求入手,介紹了需求工程,重點(diǎn)是需求獲取以及需求分析與建模。需求分析是軟件定義時(shí)期的最后一個(gè)階段,基本任務(wù)是準(zhǔn)確回答系統(tǒng)必須做什么。另外還介紹了需求規(guī)格說(shuō)明書的撰寫以及需求驗(yàn)證。
第4章介紹有關(guān)軟件設(shè)計(jì)的基本概念、設(shè)計(jì)技術(shù)和設(shè)計(jì)方法,包括圖形建模、控制流、UML等,并介紹軟件設(shè)計(jì)的過(guò)程、任務(wù)和步驟。
第5章著重考慮怎樣實(shí)現(xiàn)軟件系統(tǒng),即對(duì)系統(tǒng)的各個(gè)模塊進(jìn)一步細(xì)化,分析各個(gè)模塊的子模塊,給出各子模塊的算法和數(shù)據(jù)庫(kù)設(shè)計(jì)等。該章介紹了各種過(guò)程設(shè)計(jì)工具以及數(shù)據(jù)庫(kù)選擇策略,并以ATM系統(tǒng)設(shè)計(jì)為例,展示了基于UML的分析設(shè)計(jì)過(guò)程。
第6章首先明確界面設(shè)計(jì)的概念,然后分析用戶界面設(shè)計(jì),接著說(shuō)明界面設(shè)計(jì)的基本類型以及界面設(shè)計(jì)風(fēng)格,最后分別介紹數(shù)據(jù)輸入界面的設(shè)計(jì)和數(shù)據(jù)輸出界面的設(shè)計(jì)。
第7章介紹程序設(shè)計(jì)語(yǔ)言的基本概念、基本成分、特性、發(fā)展和分類、選擇,并說(shuō)明什么是高質(zhì)量代碼,接著給出達(dá)到高質(zhì)量的建議,包括代碼復(fù)審和結(jié)對(duì)編程,另外還介紹了軟件配置管理的概念、方法、技術(shù)和工具Git。
第8章介紹了軟件測(cè)試的起源、概念和特點(diǎn)、流程和類別等基礎(chǔ)知識(shí),并給出了一些軟件測(cè)試工具,解釋了針對(duì)軟件測(cè)試的一些誤解,另外還介紹了軟件測(cè)試設(shè)計(jì)的一些方法。
第9章著重介紹白盒和黑盒這兩類基礎(chǔ)的測(cè)試用例設(shè)計(jì)方法,比較了各種方法的特點(diǎn)和適用場(chǎng)景,另外還以ATM取款測(cè)試為例,說(shuō)明如何應(yīng)用這些用例設(shè)計(jì)方法。
第10章首先介紹程序錯(cuò)誤類型,然后介紹軟件測(cè)試的級(jí)別和類型,接著介紹軟件的糾錯(cuò)(調(diào)試),最后介紹面向?qū)ο鬁y(cè)試與敏捷測(cè)試;重點(diǎn)介紹了多模塊程序的測(cè)試策略和軟件調(diào)試技術(shù)。
第11章以Web應(yīng)用為例,具體介紹軟件測(cè)試的角度、內(nèi)容和過(guò)程,以及Web應(yīng)用自動(dòng)化測(cè)試。
第12章的內(nèi)容對(duì)形成可實(shí)際應(yīng)用的軟件非常重要。該章介紹軟件穩(wěn)定,以及和發(fā)布相關(guān)的詞、發(fā)布流程、發(fā)布方案、發(fā)布前后的注意事項(xiàng),并介紹軟件維護(hù)和重構(gòu)的相關(guān)技術(shù)。這是軟件生命周期中耗時(shí)最長(zhǎng)的階段。
第13章從介紹金融科技四大新興技術(shù)入手,詳細(xì)說(shuō)明了云計(jì)算、大數(shù)據(jù)、人工智能、區(qū)塊鏈的概念、發(fā)展、技術(shù)要點(diǎn)和在金融領(lǐng)域的應(yīng)用場(chǎng)景,結(jié)合金融科技產(chǎn)業(yè)生態(tài)以及發(fā)展面臨的挑戰(zhàn)和趨勢(shì),以量化投資、智能信貸、智能投顧為例,說(shuō)明如何按照軟件工程的原理和方法進(jìn)行金融軟件項(xiàng)目的實(shí)踐,最后給出了AiQuant人工智能量化平臺(tái)的案例分析。
致謝
筆者在編寫本書的過(guò)程中得到了南京大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)系各位老師的幫助,這里特別感謝仲盛教授、陶先平教授、聶長(zhǎng)海教授等給予的鼓勵(lì)和支持。
感謝20172022年這6年來(lái)選修本課程的同學(xué)以及完成本科畢業(yè)論文的同學(xué),他們?cè)诮鹑谲浖こ痰慕虒W(xué)研討與實(shí)踐過(guò)程中提供了開闊的思路和豐富的素材,對(duì)最終形成本書起到了非常重要的作用。
本書在編寫過(guò)程中得到了國(guó)家自然科學(xué)基金面上項(xiàng)目基于程序分析的IDE編程輔助智能增強(qiáng)關(guān)鍵技術(shù)研究(No.62272214)、國(guó)家自然科學(xué)基金重點(diǎn)項(xiàng)目面向安全攸關(guān)深度學(xué)習(xí)系統(tǒng)的軟件測(cè)試技術(shù)(No.61832009)、南京大學(xué)軟件新技術(shù)、南京大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)系、華為南京大學(xué)下一代程序設(shè)計(jì)創(chuàng)新、南京大學(xué)校級(jí)教改項(xiàng)目計(jì)算機(jī)與金融工程交叉復(fù)合人才培養(yǎng)改革子課題計(jì)算機(jī)與金融工程復(fù)合人才培養(yǎng)計(jì)算機(jī)課程群建設(shè)研究等單位和項(xiàng)目的支持。
編者
2023年2月10日
于南京大學(xué)仙林校區(qū)計(jì)算機(jī)樓
目 錄
前言
第1章 軟件工程概述 1
1.1 引言 1
1.2 軟件工程的基本概念 2
1.2.1 工程 2
1.2.2 軟件 3
1.2.3 軟件的特點(diǎn) 5
1.2.4 軟件的類型 5
1.2.5 軟件危機(jī) 6
1.3 軟件工程的發(fā)展歷史 8
1.3.1 軟件開發(fā)歷程 8
1.3.2 軟件工程定義 9
1.3.3 軟件工程生命周期模型 11
1.3.4 軟件工程的經(jīng)濟(jì)觀點(diǎn) 12
1.4 金融軟件工程 13
作業(yè) 14
第2章 計(jì)算機(jī)軟件的發(fā)展與
開發(fā)計(jì)劃 16
2.1 計(jì)算機(jī)軟件的發(fā)展歷程 16
2.2 問(wèn)題定義和可行性分析 18
2.2.1 現(xiàn)狀調(diào)查和問(wèn)題定義 18
2.2.2 可行性研究與論證 18
2.2.3 可行性分析所需工具 20
2.3 個(gè)人軟件流程與團(tuán)隊(duì)軟件流程 21
2.4 敏捷過(guò)程 24
2.4.1 敏捷過(guò)程的流行 24
2.4.2 Scrum框架 25
2.4.3 用戶故事 27
2.4.4 敏捷估算 28
2.5 軟件生命周期 29
2.6 軟件體系結(jié)構(gòu) 29
作業(yè) 31
第3章 軟件需求分析 33
3.1 軟件需求 33
3.2 需求工程 35
3.3 需求獲取 36
3.3.1 需求獲取的流程和方法 37
3.3.2 需求獲取的注意事項(xiàng) 38
3.3.3 NABCD模型 40
3.4 需求分析與建模 41
3.4.1 需求分析 42
3.4.2 結(jié)構(gòu)化需求分析 43
3.4.3 面向?qū)ο笮枨蠓治觥?4
3.5 軟件需求規(guī)格說(shuō)明書 46
3.6 需求驗(yàn)證 47
作業(yè) 48
第4章 軟件設(shè)計(jì)基礎(chǔ) 50
4.1 軟件設(shè)計(jì)過(guò)程 50
4.2 軟件設(shè)計(jì)的任務(wù)和步驟 52
4.3 軟件設(shè)計(jì)的方法 54
4.3.1 模塊化設(shè)計(jì) 55
4.3.2 結(jié)構(gòu)化設(shè)計(jì) 58
4.3.3 面向?qū)ο笤O(shè)計(jì) 61
4.4 UML的發(fā)展歷程 63
4.5 其他設(shè)計(jì)方法 65
作業(yè) 66
第5章 軟件詳細(xì)設(shè)計(jì) 67
5.1 詳細(xì)設(shè)計(jì)階段的目的與任務(wù) 67
5.2 結(jié)構(gòu)化詳細(xì)設(shè)計(jì)的描述工具 68
5.2.1 程序流程圖 68
5.2.2 N-S圖 69
5.2.3 PAD 70
5.2.4 偽代碼 71
5.3 基于UML的分析與設(shè)計(jì)過(guò)程 72
5.4 數(shù)據(jù)庫(kù)選擇策略 80
作業(yè) 82
第6章 用戶界面設(shè)計(jì) 83
6.1 界面設(shè)計(jì)的概念 83
6.1.1 界面與界面設(shè)計(jì) 83
6.1.2 用戶界面設(shè)計(jì)的要點(diǎn)和
原則 85
6.1.3 用戶界面設(shè)計(jì)相關(guān)人員和
工具 88
6.2 用戶界面設(shè)計(jì)分析 88
6.3 界面設(shè)計(jì)的基本類型 89
6.3.1 菜單 90
6.3.2 圖像 90
6.3.3 對(duì)話 91
6.3.4 窗口 91
6.4 用戶界面設(shè)計(jì)風(fēng)格 92
6.5 數(shù)據(jù)輸入界面的設(shè)計(jì) 92
6.6 數(shù)據(jù)輸出界面的設(shè)計(jì) 94
作業(yè) 95
第7章 程序編碼 96
7.1 程序設(shè)計(jì)語(yǔ)言概述 96
7.1.1 程序設(shè)計(jì)語(yǔ)言的三要素 96
7.1.2 程序設(shè)計(jì)語(yǔ)言的基本成分 97
7.1.3 程序設(shè)計(jì)語(yǔ)言的特性 98
7.1.4 程序設(shè)計(jì)語(yǔ)言的發(fā)展和
分類 99
7.1.5 程序設(shè)計(jì)語(yǔ)言的選擇 101
7.2 程序設(shè)計(jì)風(fēng)格和代碼規(guī)范 101
7.2.1 源程序的內(nèi)部文檔 101
7.2.2 數(shù)據(jù)說(shuō)明 102
7.2.3 語(yǔ)句構(gòu)造 103
7.2.4 輸入和輸出 104
7.3 結(jié)構(gòu)化編程 104
7.3.1 結(jié)構(gòu)化編程的起源 104
7.3.2 結(jié)構(gòu)化編程的原則和
方法 105
7.3.3 程序復(fù)雜性度量 106
7.3.4 程序效率 107
7.3.5 結(jié)構(gòu)化編程風(fēng)格 108
7.4 面向?qū)ο缶幊獭?08
7.4.1 面向?qū)ο缶幊痰奶攸c(diǎn) 109
7.4.2 面向?qū)ο缶幊痰母拍詈?br />術(shù)語(yǔ) 110
7.5 代碼復(fù)審和結(jié)對(duì)編程 111
7.5.1 代碼復(fù)審 111
7.5.2 結(jié)對(duì)編程 112
7.6 軟件配置管理 113
7.7 配置管理工具Git 116
7.7.1 Git的誕生 116
7.7.2 Git的工作機(jī)制 117
7.7.3 Git的安裝和使用 117
7.7.4 Git的工作原理 118
7.7.5 Git的遠(yuǎn)程倉(cāng)庫(kù) 119
7.7.6 Git的分支 120
作業(yè) 122
第8章 軟件測(cè)試基礎(chǔ) 123
8.1 軟件測(cè)試的起源 123
8.2 軟件測(cè)試的相關(guān)概念和特點(diǎn) 125
8.2.1 軟件缺陷 125
8.2.2 軟件質(zhì)量 127
8.2.3 軟件測(cè)試 127
8.3 軟件測(cè)試的流程和類別 129
8.3.1 軟件測(cè)試的流程 130
8.3.2 軟件測(cè)試的類別 131
8.4 軟件測(cè)試工具 136
8.5 有關(guān)軟件測(cè)試的誤解 137
8.6 對(duì)測(cè)試人員的要求 138
作業(yè) 139
第9章 軟件測(cè)試用例設(shè)計(jì)方法 140
9.1 白盒測(cè)試用例的設(shè)計(jì) 140
9.1.1 邏輯覆蓋方法 141
9.1.2 基本路徑測(cè)試方法 143
9.2 黑盒測(cè)試用例的設(shè)計(jì) 145
9.2.1 等價(jià)類劃分 146
9.2.2 邊界值分析 148
9.2.3 組合測(cè)試 149
9.2.4 因果圖法 152
9.2.5 決策表法 153
9.2.6 相關(guān)技術(shù)的比較和應(yīng)用 154
9.3 ATM取款測(cè)試示例 155
作業(yè) 156
第10章 軟