版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第1章
軟件開發(fā)概述第1章軟件開發(fā)概述從不同方面深入理解程序及其開發(fā)。首先,認識程序和軟件的區(qū)別,了解不同的軟件分類。其次,理解小程序的編寫與大型軟件的開發(fā)。最后,深入理解軟件構造,從編輯-編譯-運行的程序編寫,到設計-實現(xiàn)-調試-測試的軟件構造。2016秋數(shù)據(jù)科學與軟件工程學院2第1章軟件開發(fā)概述1.1程序與軟件1.2軟件生存周期1.3軟件開發(fā)過程1.4敏捷開發(fā)1.5軟件構造1.6為什么不直接編寫軟件1.7案例導讀1.8思考與練習題2016秋數(shù)據(jù)科學與軟件工程學院31.1程序與軟件1.1.1從程序到軟件1.1.2軟件類型1.1.3程序設計與軟件開發(fā)2016秋數(shù)據(jù)科學與軟件工程學院41.1.1從程序到軟件計算機程序(簡稱程序)是為了解決某個特定問題而用程序設計語言描述的適合計算機處理的語句序列。軟件是能夠完成預定功能和性能的可執(zhí)行的程序和使程序正常執(zhí)行所需要的數(shù)據(jù),加上描述軟件開發(fā)過程及其管理、程序的操作和使用的有關文檔,即“軟件=程序+數(shù)據(jù)+文檔”。2016秋數(shù)據(jù)科學與軟件工程學院51.1.1從程序到軟件教學管理軟件,它通過一組獨立而又交互的程序提供各種教與學的服務功能。該教學管理軟件數(shù)據(jù)有相對穩(wěn)定的學生、教師、課程、教室等信息;有變動性強的授課信息;以及不斷變化的授課教師發(fā)布的授課/參考材料、作業(yè)及批改、試題及分數(shù)、學生提交的作業(yè)、師生的答疑等。該軟件還需要各種文檔,如安裝說明書、操作說明書和技術說明書等。所有這些程序、數(shù)據(jù)和文檔,共同構成了這個教學管理軟件。2016秋數(shù)據(jù)科學與軟件工程學院61.1.2軟件類型功能系統(tǒng)軟件、支撐軟件和應用軟件。工作方式實時處理軟件、分時軟件、交互式軟件和批處理軟件。服務對象的范圍項目軟件(定制開發(fā))和產品軟件(或通用軟件)。其他商業(yè)軟件、開源軟件、共享軟件。2016秋數(shù)據(jù)科學與軟件工程學院71.1.2軟件類型軟件規(guī)模2016秋數(shù)據(jù)科學與軟件工程學院81.1.2軟件類型隨著軟件變得越來越大、越來越復雜,軟件開發(fā)的關注點也發(fā)生了變化。相對于小規(guī)模的程序設計(ProgrammingintheSmall),提出了大規(guī)模的程序設計(ProgrammingintheLarge),即軟件開發(fā)。2016秋數(shù)據(jù)科學與軟件工程學院91.1.3程序設計與軟件開發(fā)程序設計是解決特定問題而編寫程序的過程,是軟件生產活動中的重要組成部分。程序設計以某種程序設計語言為工具,編寫源程序,然后由編譯系統(tǒng)完成可執(zhí)行代碼的轉換。程序設計的活動包括分析、設計、編碼、測試、排錯等不同階段。2016秋數(shù)據(jù)科學與軟件工程學院101.1.3程序設計與軟件開發(fā)圖靈獎獲得者沃斯(NiclausWirth)提出的“程序=算法+數(shù)據(jù)結構”是程序設計的精辟觀點。數(shù)據(jù)結構指的是程序處理或應用的數(shù)據(jù)與數(shù)據(jù)之間的邏輯關系。算法指的是解決特定問題的步驟和方法。程序設計的核心就是選擇和設計適合特定問題的數(shù)據(jù)結構與算法,用編程語言編制為程序。2016秋數(shù)據(jù)科學與軟件工程學院111.1.3程序設計與軟件開發(fā)在計算機技術發(fā)展的早期,軟件開發(fā)的主要活動就是程序設計。隨著程序向軟件的演變,軟件開發(fā)不再只是純粹的程序的功能設計,還包括數(shù)據(jù)庫設計、用戶界面設計、軟件接口設計、通信協(xié)議設計和復雜的系統(tǒng)配置。軟件變得越來越大、越來越復雜。2016秋數(shù)據(jù)科學與軟件工程學院121.1.3程序設計與軟件開發(fā)軟件變得越來越大、越來越復雜。圖1.1示意了Linux操作系統(tǒng)的內核在10年里從240萬行擴大到接近1600萬行。2016秋數(shù)據(jù)科學與軟件工程學院131.1.3程序設計與軟件開發(fā)程序設計活動走向軟件工程。軟件工程把經過時間考驗而證明正確的管理技術和當前能夠得到的最好的技術方法結合起來,以系統(tǒng)性的、規(guī)范化的、可定量的過程化方法去開發(fā)和維護軟件。軟件工程是應用計算機科學、數(shù)學、邏輯學及管理科學等原理,開發(fā)軟件的工程學科和活動。2016秋數(shù)據(jù)科學與軟件工程學院141.2軟件生存周期一個軟件產品或軟件系統(tǒng)也要經歷孕育、誕生、成長、成熟、衰亡等階段,一般稱為軟件生存周期(軟件生命周期)。軟件的生產者和使用者對軟件生存周期的階段和活動具有不同的理解和劃分。1.2.1使用角度的軟件生存周期1.2.2開發(fā)角度的軟件生存周期2016秋數(shù)據(jù)科學與軟件工程學院151.2.1使用角度的軟件生存周期提出需求。用戶根據(jù)需要,提出要解決的問題和需要的軟件。獲取軟件。主要是對獲取軟件的最佳途徑做出決策并選擇最佳的供應商。購買軟件定制或開發(fā)軟件租賃軟件或租賃服務使用軟件。一旦獲得軟件之后,用戶將操作軟件使之為其服務。2016秋數(shù)據(jù)科學與軟件工程學院161.2.2開發(fā)角度的軟件生存周期從軟件開發(fā)者的角度,一般把軟件生存周期分為定義軟件、開發(fā)軟件和維護軟件三個階段。2016秋數(shù)據(jù)科學與軟件工程學院171.3軟件開發(fā)過程把軟件開發(fā)工作分成若干都有特定結果的步驟或活動,按照一定的方式開展軟件活動,從而形成了軟件過程。簡單而言,軟件開發(fā)過程是用來生產軟件產品的流程及一系列工具、方法和實踐的集合。軟件過程模型是從一個特殊的視角對軟件開發(fā)過程的簡化描述。2016秋數(shù)據(jù)科學與軟件工程學院181.3軟件開發(fā)過程2016秋數(shù)據(jù)科學與軟件工程學院191.3軟件開發(fā)過程1.3.1瀑布式開發(fā)過程1.3.2增量開發(fā)模型1.3.3個體軟件過程2016秋數(shù)據(jù)科學與軟件工程學院201.3.1瀑布式開發(fā)過程瀑布式開發(fā)過程,也叫軟件生存期模型。按照軟件生命周期,開發(fā)分為制定計劃、需求分析、軟件設計、程序編寫、軟件測試和運行維護等6個基本活動。各項活動嚴格按照線性方式進行,自上而下、相互銜接。每項活動的結果需要驗證通過后,才能繼續(xù)進行下一項活動。2016秋數(shù)據(jù)科學與軟件工程學院211.3.1瀑布式開發(fā)過程核心思想是按工序將問題化簡,將功能的實現(xiàn)與設計分開,即采用結構化的分析與設計方法將邏輯實現(xiàn)與物理實現(xiàn)分開。2016秋數(shù)據(jù)科學與軟件工程學院221.3.1瀑布式開發(fā)過程主要問題在于:階段劃分僵硬,每個階段不能缺省,而且產生大量文檔,增加了工作量;開發(fā)是線性的,只有等到整個過程的末期才能見到開發(fā)成果——可運行軟件,不利于快速響應變化的需求;早期的錯誤要等到開發(fā)后期的測試階段才能發(fā)現(xiàn),可能帶來嚴重的后果,增加了開發(fā)的風險。2016秋數(shù)據(jù)科學與軟件工程學院231.3.2增量開發(fā)模型把軟件分成一系列增量,完成一部分就交付一部分。本質上是迭代開發(fā)的,即不是一次性執(zhí)行軟件開發(fā)的全部活動,而是有計劃地反復執(zhí)行“分析-設計-編碼-測試”的過程。2016秋數(shù)據(jù)科學與軟件工程學院241.3.2增量開發(fā)模型增量開發(fā)模型的特點是引進了增量包的概念,無須等到所有需求,只要某個需求明確了,就可進行開發(fā)。增量的類型及其開發(fā)不止一種??尚械姆绞绞鞘紫葘崿F(xiàn)那些明確的、核心的需求;也可以對需求按優(yōu)先級排序,或者按照用戶的要求實現(xiàn)增量。2016秋數(shù)據(jù)科學與軟件工程學院251.3.2增量開發(fā)模型增量開發(fā)模型的基本思想是讓開發(fā)者能夠從早期的開發(fā)、系統(tǒng)的增量、交付的版本中學到經驗。過程中的關鍵是從系統(tǒng)需求的簡單子集實現(xiàn)開始,通過迭代增強和進化后續(xù)的版本,直到系統(tǒng)被實現(xiàn)。每次迭代中,對設計進行修改,并增加新的功能要求。2016秋數(shù)據(jù)科學與軟件工程學院261.3.2增量開發(fā)模型增量開發(fā)模型的優(yōu)點如下:在短時間內向用戶提交一個可運行軟件,能夠提供解決用戶急用的一些功能。由于每次只提交部分功能,用戶有較充分的時間學習和適應新的產品。在開發(fā)過程中,需求的變化是不可避免的。增量開發(fā)模型的靈活性可以使軟件適應需求變化。有利于系統(tǒng)維護,因為整個系統(tǒng)是由一個個增量(部件)集成在一起的,當需求變更時,只變更部分部件,而不必影響整個系統(tǒng)。2016秋數(shù)據(jù)科學與軟件工程學院271.3.2增量開發(fā)模型增量模型存在以下風險:由于各個部件是逐漸并入已有軟件的,必須確保每次增加的部件不破壞已構造好的系統(tǒng),這需要軟件具備開放式的體系結構,否則系統(tǒng)將失去穩(wěn)定的結構。逐步增加部件的方式,很容易退化為邊做邊改模型,從而使軟件過程的控制失去整體性。在一個軟件開發(fā)中如何一致地定義“增量”?如何界定它的工作量、需求范圍、功能或特性?2016秋數(shù)據(jù)科學與軟件工程學院281.3.2增量開發(fā)模型實踐中,增量開發(fā)模型往往要求在分析了軟件需求以后,在軟件設計開發(fā)時進行增量。增量開發(fā)最好是在架構設計完成后再開始進行增量,這樣可以更好地保證系統(tǒng)的健壯性和可擴展性。每次迭代過程仍然要遵循“分析→設計→實現(xiàn)”的微型瀑布過程。迭代周期的長度跟軟件的開發(fā)周期和規(guī)模有關系。2016秋數(shù)據(jù)科學與軟件工程學院291.3.3個體軟件過程美國卡內基梅隆大學軟件工程研究院的漢弗萊(Humphrey)主持開發(fā)了個體軟件過程(PersonalSoftwareProcess,PSP)和團隊軟件過程(TeamSoftwareProcess,TSP)。TSP是為開發(fā)軟件產品的開發(fā)團隊提供的指導,在于幫助開發(fā)團隊改善其質量和生產率,更好地滿足成本及進度的目標。2016秋數(shù)據(jù)科學與軟件工程學院301.3.3個體軟件過程PSP是一種可用于控制、管理和改進個人工作方式的自我持續(xù)改進過程。它是一個包括軟件開發(fā)表格、指南和規(guī)程的結構化框架。PSP與具體的技術(程序設計語言、工具或設計方法)相對獨立,其原則能夠應用到任何軟件工程任務之中。PSP能夠說明個體軟件過程的原則;幫助軟件工程師做出準確的計劃;確定軟件工程師為改善產品質量要采取的步驟;建立度量個體軟件過程改善的基準;確定過程的改變對軟件工程師能力的影響。2016秋數(shù)據(jù)科學與軟件工程學院311.3.3個體軟件過程PSP為個體的能力也提供了一個階梯式的進化框架,每一級別都包含了更低一級別中的所有元素,并增加了新的元素。借助這個框架,個體可以循序漸進地改進開發(fā)過程。它賦予軟件人員度量和分析工具,使其清楚地認識到自己的表現(xiàn)和潛力,從而可以提高自己的技能和水平。2016秋數(shù)據(jù)科學與軟件工程學院321.3.3個體軟件過程PSP0的目的是建立個體過程基線,學會使用PSP的各種表格采集過程的有關數(shù)據(jù),執(zhí)行的軟件過程包括計劃、設計、編碼、編譯和測試。按照選定的缺陷類型標準、度量引入的缺陷個數(shù)和排除的缺陷個數(shù)等,用在測量PSP過程的改進。PSP0.1增加了編碼標準、程序規(guī)模度量和過程改善建議三個關鍵過程域。2016秋數(shù)據(jù)科學與軟件工程學院331.3.3個體軟件過程PSP1的重點是個體計劃,用自己的歷史數(shù)據(jù)來預測新程序的大小和需要的開發(fā)時間,并使用線性回歸方法計算估計參數(shù),確定置信區(qū)間以評價預測的可信程度。PSP1.1增加了對任務和進度的規(guī)劃。在PSP1階段應該學會編制項目開發(fā)計劃,這不僅對承擔大型軟件的開發(fā)十分重要,即使是開發(fā)小型軟件,也必不可少。2016秋數(shù)據(jù)科學與軟件工程學院341.3.3個體軟件過程PSP2的重點是個體質量管理,根據(jù)程序的缺陷建立檢測表,按照檢測表進行設計復查和代碼復查(也稱“代碼走查”),以便及早發(fā)現(xiàn)缺陷,使修復缺陷的代價最小。PSP2.1則論述設計過程和設計模板,但并不強調選用什么設計方法,而強調設計完備性準則和設計驗證技術。2016秋數(shù)據(jù)科學與軟件工程學院351.3.3個體軟件過程PSP3的目標是把個體開發(fā)小程序所能達到的生產效率和生產質量延伸到大型程序;其方法是采用迭代增量式開發(fā)方法,首先把大型程序分解成小的模塊,然后對每個模塊按照PSP2.1所描述的過程進行開發(fā),最后把這些模塊逐步集成為完整的軟件產品。在新一輪開發(fā)循環(huán)中,可以采用回歸測試。2016秋數(shù)據(jù)科學與軟件工程學院361.4敏捷開發(fā)敏捷開發(fā)是從20世紀90年代開始逐漸引起廣泛關注的一組新型的軟件開發(fā)方法,更強調程序員團隊與業(yè)務專家之間的緊密協(xié)作、面對面的溝通、頻繁交付新的軟件版本、緊湊而自我組織型的團隊、能夠很好地適應需求變化的代碼編寫和團隊組織方法,更注重軟件開發(fā)中人的作用。1.4.1概述1.4.2Scrum方法2016秋數(shù)據(jù)科學與軟件工程學院371.4.1概述敏捷開發(fā)是應對快速變化的需求的一種軟件開發(fā)能力。以用戶需求進化為核心,采用迭代、循序漸進的方法進行軟件開發(fā)。敏捷開發(fā)采用了更加人性化、個性化的溝通表達方式,特別是使用隱喻而非常規(guī)術語或形式化技術。例如,表示和處理需求的用戶故事(UserStory)。再如,sprint指增量開發(fā)的迭代周期,長度通常是一至六周。一個用戶故事的大小和復雜度應該以能在一個sprint中完成。2016秋數(shù)據(jù)科學與軟件工程學院381.4.1概述敏捷開發(fā)通過宣言表示了它的4個核心價值觀。(1)個體和互動勝過流程和工具。(2)工作的軟件勝過詳盡的文檔。(3)客戶合作勝過合同談判。(4)響應變化勝過遵循計劃。2016秋數(shù)據(jù)科學與軟件工程學院391.4.1概述所有敏捷開發(fā)方法都遵循下面12條原則。(1)最優(yōu)先要做的是通過盡早地、持續(xù)地交付有價值的軟件滿足客戶需要。(2)即使在開發(fā)后期也歡迎需求的變化,敏捷過程利用變化為客戶創(chuàng)造競爭優(yōu)勢。(3)經常交付可以工作的軟件,從幾星期到幾個月,時間越短越好。(4)業(yè)務人員和開發(fā)人員應該在整個項目過程中始終朝夕在一起工作。(5)要善于激勵項目人員,給他們以所需要的環(huán)境和支持,并相信他們能夠完成任務。(6)在開發(fā)小組中最有效率、也最有效果的信息傳達方式是面對面的交談。(7)工作的軟件是進度的主要度量標準。(8)責任人、開發(fā)者和用戶應該維持長期、恒等的開發(fā)節(jié)奏。(9)對卓越技術與良好設計的不斷追求將有助于提高敏捷性。(10)簡單——盡可能減少工作量的藝術——至關重要。(11)最好的架構、需求和設計都源于自組織的團隊。(12)每隔一定時間,團隊都要總結、反省工作效率,然后相應地調整自己的行為。2016秋數(shù)據(jù)科學與軟件工程學院401.4.1概述基本技術敏捷方法可以視為一些最佳實踐的集合,包括經典的軟件開發(fā)技術和管理,也包括敏捷開發(fā)首創(chuàng)的技術和方法。敏捷開發(fā)遵循軟件開發(fā)的基本原則,同時也總結出了11條面向對象設計的原則,如單一職責原則(模塊內聚的體現(xiàn))、(采納的)Liskov替換原則等。2016秋數(shù)據(jù)科學與軟件工程學院411.4.1概述基本技術敏捷開發(fā)主要采用了面向對象的開發(fā)技術,使用CRC卡(Class-Responsibility-Collaborator,類-責任-協(xié)作)、用戶用例、設計模式及UML(UnifiedModellingLanguage,統(tǒng)一建模語言)。但是,敏捷開發(fā)使用UML的符號主要是類圖和時序圖,因為這兩種符號有助于直接編寫出代碼。2016秋數(shù)據(jù)科學與軟件工程學院421.4.1概述意圖導向編程意圖導向編程指的是,先假設當前這個對象中已經有了一個理想方法,它可以準確無誤地完成想做的事情,而不是直接盯著每一點要求來編寫代碼。在這個實例中,需要創(chuàng)建一個服務程序,它接收一個業(yè)務交易,然后提交。先簡單創(chuàng)建一個對象,它只包含一個公共方法來完成這件事。2016秋數(shù)據(jù)科學與軟件工程學院431.4.1概述具體需求如下交易信息開始于一串標準ASCII字符串。信息字符串必須轉換成一個字符串的數(shù)組,其值是此次交易用到的領域語言中所包含的詞匯元素(token)。每個詞匯元素必須標準化:第一個字母大寫,其余字母小寫,空格和非字母數(shù)字的符號都要刪掉。超過150個詞匯元素的交易應該采用與小型交易不同的方式(不同的算法)來提交,以提高效率。如果提交成功,返回true;否則返回false。2016秋數(shù)據(jù)科學與軟件工程學院441.4.1概述2016秋數(shù)據(jù)科學與軟件工程學院451.4.1概述采用“意圖導向編程”的編碼方式,在編程開始時,假設這些“輔助方法”都已經存在,只需先考慮這些“輔助方法”要實現(xiàn)的功能和它們的輸入和輸出,然后按程序要求寫出程序的主框架。最后才是“輔助方法”的編程。這樣的編碼方式使得程序員在整個編程中思路清晰,可以把精力集中在如何分解最終目標,以及那些全局性的問題上。實現(xiàn)的代碼功能單一,易讀易理解。2016秋數(shù)據(jù)科學與軟件工程學院461.4.1概述敏捷技術敏捷開發(fā)也創(chuàng)造了一些新的技術或實踐。如測試驅動開發(fā)、結對編程、代碼重構和持續(xù)集成。2016秋數(shù)據(jù)科學與軟件工程學院471.4.1概述測試驅動開發(fā)在一個微循環(huán)開發(fā)中,首先確認并自動化進行一個失敗的測試,然后編寫足夠的代碼通過測試,在下一輪前以必要的方式清理代碼。2016秋數(shù)據(jù)科學與軟件工程學院481.4.1概述結對編程兩個程序員在一個計算機上共同工作。一個人輸入代碼,而另一個人審查他輸入的每一行代碼。兩個程序員經?;Q角色。代碼重構指的是改變程序結構而不改變其行為,以便提高代碼的可讀性、易修改性等。例如,給變量重新命名,把一段代碼提升為函數(shù),把公共的屬性和行為抽象成基類。2016秋數(shù)據(jù)科學與軟件工程學院491.4.1概述持續(xù)集成微軟等公司的軟件開發(fā)方法包括每日構造產品,持續(xù)集成比它更進一步,只要可能,就把新代碼或變更的代碼合并到應用程序,然后測試,確保一切都正常。2016秋數(shù)據(jù)科學與軟件工程學院501.4.1概述敏捷開發(fā)是一個統(tǒng)稱,很多軟件開發(fā)方法都認為自己是敏捷的。典型的敏捷開發(fā)方法包括極限編程(ExtremeProgramming,XP)、Scrum、水晶方法(Crystal)、特性驅動開發(fā)(FeatureDrivenDevelopment,F(xiàn)DD)、動態(tài)系統(tǒng)開發(fā)方法(DynamicSystemsDevelopmentMethod,DSDM)。2016秋數(shù)據(jù)科學與軟件工程學院511.4.2Scrum方法Scrum是一個用于開發(fā)和維持復雜軟件產品的框架,是一個增量的、迭代的開發(fā)過程。整個開發(fā)過程由若干短的迭代周期(沖刺Sprint)組成。Scrum使用產品積壓工作(ProductBacklog)來管理產品需求,它是一個按照商業(yè)價值排序的需求列表,列表條目的體現(xiàn)形式為用戶故事。Scrum團隊總是先開發(fā)對客戶具有較高價值的需求。在沖刺中,團隊從產品積壓工作中挑選最高優(yōu)先級的需求進行開發(fā)。挑選的需求在沖刺計劃會議上經過討論、分析和估算得到相應的任務列表,稱為沖刺清單(SprintBacklog)。每個迭代結束時,團隊將遞交潛在可交付的產品增量。2016秋數(shù)據(jù)科學與軟件工程學院521.4.2Scrum方法Scrum框架可以簡化成3個角色、3個工件、5個活動和5個價值。Scrum框架的3個角色是:產品負責人、產品經理(ScrumMaster)及團隊。3個工件是產品積壓工作、沖刺清單和燃盡圖(Burn-downChart)。5個活動包括:沖刺計劃會議、每日站會、沖刺評審會議、沖刺回顧會議和產品積壓工作梳理會議。2016秋數(shù)據(jù)科學與軟件工程學院531.4.2Scrum方法Scrum的5個價值是:①承諾:愿意對目標做出承諾;②專注:把心思和能力都用到承諾的工作上去;③開放:Scrum把項目中的一切開放給每個人看;④尊重:每個人都有其獨特的背景和經驗;⑤勇氣:有勇氣做出承諾、履行承諾、接受別人的尊重。2016秋數(shù)據(jù)科學與軟件工程學院541.4.2Scrum方法Scrum的工作流程2016秋數(shù)據(jù)科學與軟件工程學院551.5軟件構造1.5.1有關概念1.5.2構造與開發(fā)過程1.5.3主要內容1.5.4軟件構造的重要性2016秋數(shù)據(jù)科學與軟件工程學院561.5.1有關概念IEEE計算機學會于2013年正式發(fā)布了最新的軟件工程知識體系(SWEBOK3.0)指南,提出了構成軟件工程學科的11個實踐知識域,每個知識域分解為子域,子域含若干主題。這11個軟件工程實踐知識域是:軟件需求、軟件設計、軟件構造、軟件測試、軟件維護、軟件配置管理、軟件工程管理、軟件工程過程、軟件工程模型與方法、軟件質量、軟件工程專業(yè)實踐。2016秋數(shù)據(jù)科學與軟件工程學院571.5.1有關概念“軟件構造”指的是通過編碼、驗證、單元測試、集成測試和調試的組合,詳細地創(chuàng)建可工作的、有意義的軟件。2016秋數(shù)據(jù)科學與軟件工程學院581.5.2構造與開發(fā)過程構造在不同軟件開發(fā)流程或模型中的地位也不一樣。有些流程更加重視構造。從構造角度看,有些模型側重于線性化過程——比如瀑布模型、階段交付的生命周期模型。線性化開發(fā)方式更加重視構造之前的活動(需求和設計),并且在這些活動之間建立明確的任務劃分。在這些模型中,構造工作主要就是編碼。2016秋數(shù)據(jù)科學與軟件工程學院591.5.2構造與開發(fā)過程有些模型是迭代的——如Scrum、極限編程、進化式原型法。這些方式傾向于把構造視為與其他軟件開發(fā)(包括需求、設計和計劃)同時發(fā)生或重疊的活動。這些方式混合設計、編碼和測試活動,把構造當成這些活動的集合體。所以,如何考慮構造,在某種程度上依賴于采用的生存周期模型。一般地說,軟件構造最主要是編碼和調試,但也可以包含工作計劃、詳細設計、單元測試、集成測試,以及其他活動。2016秋數(shù)據(jù)科學與軟件工程學院601.5.3主要內容軟件構造的知識域分為5個子域,每個子域包含了數(shù)量不等的主題。軟件構造基礎。管理構造。實際考慮。構造技術。軟件構造工具。2016秋數(shù)據(jù)科學與軟件工程學院611.5.3主要內容本書使用的“軟件構造”指的是運用軟件最佳實踐,通過設計、編碼和測試的迭代過程,增量地建造出可運行軟件。本書涵蓋了指南中5個知識子域的大部分主題。通過增量迭代地構造一個可運行軟件,用具體的技術實踐講解了軟件構造域的知識主題。此外,本書討論了軟件模塊的構造、用戶交互的構造及數(shù)據(jù)處理的構造。有關軟件測試、敏捷開發(fā)的技術、設計模式包含了比指南更多的內容。在開發(fā)階段方面,增加了軟件交付。2016秋數(shù)據(jù)科學與軟件工程學院621.5.3主要內容本書沒有涵蓋指南的部分主題:管理構造子域中的構造計劃和構造度量;構造技術子域中的可執(zhí)行模型、并發(fā)原語、性能分析與調優(yōu),也沒有特別處理實時、分布式和異構軟件;軟件構造工具子域中的性能優(yōu)化、分析、切片工具。2016秋數(shù)據(jù)科學與軟件工程學院631.5.3主要內容總體而言,本書面向個體,涉及團隊少;以技術、方法和工具的最佳實踐為主,通過代碼實現(xiàn)學習抽象的原則和技術方法,不涉及管理;采用增量迭代的構造方式,不采用任何明確定義的流程或模型;涉及少量的需求和分析,不包含交付之后的活動。2016秋數(shù)據(jù)科學與軟件工程學院641.5.4軟件構造的重要性構造占據(jù)了軟件開發(fā)的大部分工作。研究表明,構造占軟件開發(fā)30%~80%的工作時間。而任何占據(jù)項目大量時間的工作一定會深刻地影響項目的成功。構造是軟件開發(fā)的中心活動。把重心放在構造,能顯著提升個體程序員的生產率。構造的產品——源程序代碼,常常是唯一準確的軟件描述。構造是確保唯一要完成的活動。2016秋數(shù)據(jù)科學與軟件工程學院651.6為什么不直接編寫軟件相對于編程,軟件具有了工程特征。軟件開發(fā)是要跨越分析、設計、實現(xiàn)、安裝和維護活動的一個可以反復遵循的、復雜的過程(工作流程);軟件需要依靠一個團隊的分工合作,需要過程的組織和管理(人員組織與管理);軟件開發(fā)還要運用各種技術和工具生產出來的產品(工具和自動化)。2016秋數(shù)據(jù)科學與軟件工程學院661.6為什么不直接編寫軟件1.6.1軟件開發(fā)語言1.6.2編程工具與集成化開發(fā)環(huán)境1.6.3軟件運行環(huán)境1.6.4軟件開發(fā)的最佳實踐1.6.5開發(fā)過程與管理2016秋數(shù)據(jù)科學與軟件工程學院671.6.1軟件開發(fā)語言計算機軟件的編程語言基本被劃分成機器語言/匯編語言的低級語言和與計算機的硬件結構及指令系統(tǒng)無關的高級(程序)語言。面向對象語言是目前使用最多的一種語言。2016秋數(shù)據(jù)科學與軟件工程學院681.6.1軟件開發(fā)語言按計算模型的劃分聲明式:告訴計算機做什么。函數(shù)式語言邏輯式語言數(shù)據(jù)流語言命令式:告訴計算機應該如何做。馮·諾依曼式語言腳本語言面向對象語言2016秋數(shù)據(jù)科學與軟件工程學院691.6.1軟件開發(fā)語言高級程序語言的一個發(fā)展趨勢是融合各種類型語言的特性。大多數(shù)面向對象語言都具有馮·諾依曼式語言的結構,有些也融合了函數(shù)式編程范式的思想,如Java和C#引入了λ算子等。2016秋數(shù)據(jù)科學與軟件工程學院701.6.1軟件開發(fā)語言例題1.1:使用歐幾里得算法,編寫計算兩個整數(shù)a和b的最大公因數(shù)的程序gcd。2016秋數(shù)據(jù)科學與軟件工程學院711.6.1軟件開發(fā)語言按執(zhí)行模式的劃分高級語言程序不能直接在計算機上運行,必須轉換成低級語言的指令后才能運行。按照語言的轉換和執(zhí)行方式,高級語言分為編譯型語言和解釋型語言。2016秋數(shù)據(jù)科學與軟件工程學院721.6.2編程工具與集成化開發(fā)環(huán)境使用任何語言編程都需要基本的編程工具——軟件開發(fā)工具包(SoftwareDevelopmentKit,SDK),它通常包括編譯程序或解釋程序、調試程序、連接程序等,如Java的JDK、Android的ADK。編寫程序的工具是普通的文本編輯器,它可以是傳統(tǒng)的正文行編輯器,也可以是面向全屏的圖形編輯器。2016秋數(shù)據(jù)科學與軟件工程學院731.6.2編程工具與集成化開發(fā)環(huán)境編寫程序的工具是普通的文本編輯器,它可以是傳統(tǒng)的正文行編輯器,也可以是面向全屏的圖形編輯器。編輯器可以是通用的、與程序語言無關,也可以是具備源程序語言知識的語法制導編輯器或結構化編輯器(如emacs、notepad++)。語法制導編輯工具運用程序語言的語法知識,在用戶編寫程序時按照詞法和語法分析的信息提供若干智能化幫助,包括自動地提供關鍵字及其匹配的關鍵字、左右括號的配對、對象的屬性和操作,等等。2016秋數(shù)據(jù)科學與軟件工程學院741.6.2編程工具與集成化開發(fā)環(huán)境軟件開發(fā)還需要管理各種代碼文件、檢查程序質量、測試工具、管理bugs、軟件打包工具等。這些基礎開發(fā)工具通常是行式命令,直接在操作系統(tǒng)中輸入相應的命令,如編譯Java程序的編譯命令javac,解釋執(zhí)行Java程序的命令java。也有一些語言直接提供可視化開發(fā)工具。2016秋數(shù)據(jù)科學與軟件工程學院751.6.2編程工具與集成化開發(fā)環(huán)境可視化集成開發(fā)環(huán)境IDE,用圖形用戶界面(GraphicalUserInterface,GUI)集成了代碼編寫、靜態(tài)分析、編譯、調試、連接、打包等功能的一體化軟件開發(fā)套件。如Delphi、VisualStudio、Eclipse和Netbeans,它們以GUI形式提供支持多種語言進行編程,還提供代碼管理、代碼分析、軟件維護、軟件測試及軟件部署和交付等工具,同時支持多種形態(tài)應用軟件(通用應用程序、Web應用、數(shù)據(jù)庫應用、移動應用)的開發(fā)。2016秋數(shù)據(jù)科學與軟件工程學院761.6.3軟件運行環(huán)境軟件運行環(huán)境,廣義上說,是一個軟件運行所要求的各種條件,包括軟件環(huán)境和硬件環(huán)境。許多應用軟件不僅僅要求特定的硬件條件,還對軟件提出明確的支撐條件。操作系統(tǒng)將計算機的硬件細節(jié)屏蔽,將計算機抽象成虛擬資源。通常把計算機硬件和操作系統(tǒng)稱為平臺。2016秋數(shù)據(jù)科學與軟件工程學院771.6.3軟件運行環(huán)境為了能夠使同一種編程語言的程序獨立于操作系統(tǒng),實現(xiàn)程序運行的獨立性,即“一次編寫程序、到處運行”,在操作系統(tǒng)層面提出并出現(xiàn)了語言虛擬機或運行容器。它為程序的運行提供所需的運行時資源,包括把程序翻譯成計算機指令、分配內存、通過操作系統(tǒng)調用計算資源等。例如,Java虛擬機(JavaVirtualMachine,JVM)可以理解成一臺運行Java程序的抽象的計算機。2016秋數(shù)據(jù)科學與軟件工程學院781.6.3軟件運行環(huán)境除了計算機硬件和操作系統(tǒng)構成的運行平臺,運行軟件還需要支撐環(huán)境,包括使用的數(shù)據(jù)庫管理系統(tǒng)(如Oracle、MySQL、SQLServer)、Web服務器(如Apache服務器、微軟的Internet信息服務器)、應用框架(如.NETFramework、Java程序的SSH框架、Web應用框架RubyonRails)及使用的第三方庫函數(shù)、類庫、APIs等。2016秋數(shù)據(jù)科學與軟件工程學院791.6.4軟件開發(fā)的最佳實踐合適的技術和方法能提高軟件開發(fā)的效率和產品質量。軟件開發(fā)一直缺乏堅實的理論基礎。軟件行業(yè)借用了管理學的最佳實踐(BestPractice)的概念來概括到達用戶滿意的、可以反復使用的軟件開發(fā)的一切手段。最佳實踐認為存在某種技術、方法、過程、活動或機制,可以使生產或管理實踐的結果達到最優(yōu),并減少出錯的可能性。2016秋數(shù)據(jù)科學與軟件工程學院801.6.4軟件開發(fā)的最佳實踐原則是一個已經接受或專業(yè)化的指導行動的最高準則或標準。人們總結、使用了軟件開發(fā)的基本原則、面向對象原則等。原則必須通過某種途徑體現(xiàn)出來,才具有指導作用。機制指的是有機體的構造、功能及其相互關系、工作原理,如可視化編程的事件響應機制、類型的多態(tài)機制。2016秋數(shù)據(jù)科學與軟件工程學院811.6.4軟件開發(fā)的最佳實踐技術是科學原理的應用,是具有技能特點的特殊的步驟或途徑。軟件開發(fā)技術是運用了計算機科學、數(shù)學、系統(tǒng)科學、管理科學的基本原理,進行軟件開發(fā)的方式方法。2016秋數(shù)據(jù)科學與軟件工程學院821.6.4軟件開發(fā)的最佳實踐方法是獲得一個客體(對象)的步驟或過程。作為一個系統(tǒng)的步驟、技術活動被特定的專業(yè)或藝術采納,是技能或技術的全部。研究方法及其知識的活動稱為方法學,如面向對象方法學、軟件方法學。2016秋數(shù)據(jù)科學與軟件工程學院831.6.4軟件開發(fā)的最佳實踐工具指的是執(zhí)行操作的器具,引申為為達到、完成或促進某一事物的手段。我們使用更加廣泛的含義,軟件工具指的是從編輯器、編譯器、自動化測試框架到IDE的實用程序。2016秋數(shù)據(jù)科學與軟件工程學院841.6.4軟件開發(fā)的最佳實踐軟件開發(fā)的技術實踐十分豐富,按照開發(fā)活動劃分有用戶需求、軟件設計、軟件構造、軟件測試、軟件交付技術和方法。每個方面又可以細分,如軟件設計技術包括軟件架構設計、構件設計、算法設計、數(shù)據(jù)結構設計或功能設計、用戶交互設計、數(shù)據(jù)庫設計。這些技術方法只適合某一個開發(fā)階段或某個軟件組成,也有一些成套的包含技術、方法和工具,主要是公司內部研制和使用(如微軟開發(fā)方法與最佳實踐MSF)。2016秋數(shù)據(jù)科學與軟件工程學院851.6.4軟件開發(fā)的最佳實踐按照軟件開發(fā)范式有結構化開發(fā)、面向對象開發(fā)和新興的面向服務開發(fā)等,側重在軟件工程活動的前期、以軟件分析和設計或軟件建模為主。結構化開發(fā)方法是用系統(tǒng)工程的思想和工程化的方法,按用戶至上的原則,結構化、模塊化、自頂向下地對系統(tǒng)進行分析和設計的方法。2016秋數(shù)據(jù)科學與軟
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《供應商檔案管理》課件
- 《園林景觀分析》課件
- 人教版八年級生物下冊第八單元健康地生活第三章第二、三章章末總結教學課件
- 《密爾沃基美術館》課件
- 單位管理制度匯編大全員工管理篇
- 單位管理制度合并匯編【職工管理篇】
- 單位管理制度分享合集職員管理十篇
- 單位管理制度范文大合集【人力資源管理篇】十篇
- 單位管理制度范例匯編職工管理篇
- 單位管理制度呈現(xiàn)匯編【人事管理篇】
- 非物質文化遺產主題班會之英歌舞課件
- 柯橋區(qū)五年級上學期語文期末學業(yè)評價測試試卷
- 中國礦業(yè)大學《自然辯證法》2022-2023學年期末試卷
- TCWAN 0105-2024 攪拌摩擦焊接機器人系統(tǒng)技術條件
- 江蘇省期無錫市天一實驗學校2023-2024學年英語七年級第二學期期末達標檢測試題含答案
- 耕地占補平衡系統(tǒng)課件
- 2022年山東師范大學自考英語(二)練習題(附答案解析)
- 醫(yī)院工作流程圖較全
- NB/T 11431-2023土地整治煤矸石回填技術規(guī)范
- 醫(yī)療器械集中采購文件(2024版)
- 上海市2024-2025學年高一語文下學期分科檢測試題含解析
評論
0/150
提交評論