版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
軟件構(gòu)造
SOFTWARECONSTRUCTION新的學期,新的起跑線,讓我們一起開始新的征程。秋天,收獲的季節(jié)。祝愿同學們在這個秋季學期里收獲豐碩的果實。2016秋數(shù)據(jù)科學與軟件工程學院2課程背景課程內(nèi)容課程教材及參考資料課程目標教學方式方法教學進度計劃學習方法學期考核2016秋數(shù)據(jù)科學與軟件工程學院3課程背景小型軟件開發(fā)的重要性凸顯;傳統(tǒng)計算機學科的課程傳授方式理論化、知識碎片化;軟件工程課程基本前提是要求學生具備軟件構(gòu)造能力;現(xiàn)代軟件開發(fā)方法包括極限編程、測試驅(qū)動開發(fā)等敏捷方法,突出特點是每個程序員都具有高超的軟件開發(fā)功力。2016秋數(shù)據(jù)科學與軟件工程學院4課程內(nèi)容以一個案例演變,模擬不斷變化的用戶需求,按照增量迭代的開發(fā)模式,將碎片化的功能開發(fā)、用戶交互、數(shù)據(jù)處理等知識,以及軟件設(shè)計、軟件測試和敏捷開發(fā)的最佳實踐,與軟件開發(fā)的原理、技術(shù)和工具融合到設(shè)計、編碼、調(diào)試及測試的構(gòu)造過程。2016秋數(shù)據(jù)科學與軟件工程學院5課程內(nèi)容課程具體內(nèi)容包括軟件構(gòu)造的一般原理(如模塊化、增量迭代)、常用技巧(如表驅(qū)動編程、測試驅(qū)動開發(fā))、軟件設(shè)計(契約式設(shè)計、設(shè)計模式)、軟件知識(如軟件測試、軟件復用)及軟件構(gòu)造的工作要素(如編碼規(guī)范、構(gòu)造工具)和活動(如設(shè)計、編碼、測試、交付)。2016秋數(shù)據(jù)科學與軟件工程學院6課程教材及參考資料課程教材李勁華等.基于案例的軟件構(gòu)造教程.北京:電子工業(yè)出版社,2016.6參考資料S.McConnel.金戈,等譯.代碼大全(第二版).北京:電子工業(yè)出版社,2011.RobertC.Martin.鄧輝,譯.敏捷軟件開發(fā):原則、模式與實踐.北京:清華大學出版社,2003.CapersJones.吳舜賢,等譯.軟件工程最佳實踐.北京:機械工業(yè)出版社,2014.……2016秋數(shù)據(jù)科學與軟件工程學院7課程目標本課程旨在以案例為引導,通過集成化解決軟件知識的碎片化,提升個人的軟件構(gòu)造能力,加快從程序編寫到軟件開發(fā)的轉(zhuǎn)變,在孤立的基礎(chǔ)課程與軟件工程課程之間搭建橋梁。目標是把學生培養(yǎng)成能獨立地綜合運用技術(shù)、開發(fā)可用產(chǎn)品的高級程序員,再通過后續(xù)課程(如軟件工程、綜合課程設(shè)計和實習實訓)培養(yǎng)成軟件工程師。2016秋數(shù)據(jù)科學與軟件工程學院8教學方式方法以案例需求演變?yōu)橹骶€;理論方法講解;案例分析實踐;將軟件構(gòu)造的原理、原則、方法、技術(shù)、流程和技能整合到一起,通過案例的展開由淺及深地學習。2016秋數(shù)據(jù)科學與軟件工程學院9教學進度計劃參考教材中“教學方案”2016秋數(shù)據(jù)科學與軟件工程學院10學習方法一邊思考案例問題;一邊學習;一邊動手實踐。2016秋數(shù)據(jù)科學與軟件工程學院11第1章
軟件開發(fā)概述第1章軟件開發(fā)概述從不同方面深入理解程序及其開發(fā)。首先,認識程序和軟件的區(qū)別,了解不同的軟件分類。其次,理解小程序的編寫與大型軟件的開發(fā)。最后,深入理解軟件構(gòu)造,從編輯-編譯-運行的程序編寫,到設(shè)計-實現(xiàn)-調(diào)試-測試的軟件構(gòu)造。2016秋數(shù)據(jù)科學與軟件工程學院13第1章軟件開發(fā)概述1.1程序與軟件1.2軟件生存周期1.3軟件開發(fā)過程1.4敏捷開發(fā)1.5軟件構(gòu)造1.6為什么不直接編寫軟件1.7案例導讀1.8思考與練習題2016秋數(shù)據(jù)科學與軟件工程學院141.1程序與軟件1.1.1從程序到軟件1.1.2軟件類型1.1.3程序設(shè)計與軟件開發(fā)2016秋數(shù)據(jù)科學與軟件工程學院151.1.1從程序到軟件計算機程序(簡稱程序)是為了解決某個特定問題而用程序設(shè)計語言描述的適合計算機處理的語句序列。軟件是能夠完成預定功能和性能的可執(zhí)行的程序和使程序正常執(zhí)行所需要的數(shù)據(jù),加上描述軟件開發(fā)過程及其管理、程序的操作和使用的有關(guān)文檔,即“軟件=程序+數(shù)據(jù)+文檔”。2016秋數(shù)據(jù)科學與軟件工程學院161.1.1從程序到軟件教學管理軟件,它通過一組獨立而又交互的程序提供各種教與學的服務功能。該教學管理軟件數(shù)據(jù)有相對穩(wěn)定的學生、教師、課程、教室等信息;有變動性強的授課信息;以及不斷變化的授課教師發(fā)布的授課/參考材料、作業(yè)及批改、試題及分數(shù)、學生提交的作業(yè)、師生的答疑等。該軟件還需要各種文檔,如安裝說明書、操作說明書和技術(shù)說明書等。所有這些程序、數(shù)據(jù)和文檔,共同構(gòu)成了這個教學管理軟件。2016秋數(shù)據(jù)科學與軟件工程學院171.1.2軟件類型功能系統(tǒng)軟件、支撐軟件和應用軟件。工作方式實時處理軟件、分時軟件、交互式軟件和批處理軟件。服務對象的范圍項目軟件(定制開發(fā))和產(chǎn)品軟件(或通用軟件)。其他商業(yè)軟件、開源軟件、共享軟件。2016秋數(shù)據(jù)科學與軟件工程學院181.1.2軟件類型軟件規(guī)模2016秋數(shù)據(jù)科學與軟件工程學院191.1.2軟件類型隨著軟件變得越來越大、越來越復雜,軟件開發(fā)的關(guān)注點也發(fā)生了變化。相對于小規(guī)模的程序設(shè)計(ProgrammingintheSmall),提出了大規(guī)模的程序設(shè)計(ProgrammingintheLarge),即軟件開發(fā)。2016秋數(shù)據(jù)科學與軟件工程學院201.1.3程序設(shè)計與軟件開發(fā)程序設(shè)計是解決特定問題而編寫程序的過程,是軟件生產(chǎn)活動中的重要組成部分。程序設(shè)計以某種程序設(shè)計語言為工具,編寫源程序,然后由編譯系統(tǒng)完成可執(zhí)行代碼的轉(zhuǎn)換。程序設(shè)計的活動包括分析、設(shè)計、編碼、測試、排錯等不同階段。2016秋數(shù)據(jù)科學與軟件工程學院211.1.3程序設(shè)計與軟件開發(fā)圖靈獎獲得者沃斯(NiclausWirth)提出的“程序=算法+數(shù)據(jù)結(jié)構(gòu)”是程序設(shè)計的精辟觀點。數(shù)據(jù)結(jié)構(gòu)指的是程序處理或應用的數(shù)據(jù)與數(shù)據(jù)之間的邏輯關(guān)系。算法指的是解決特定問題的步驟和方法。程序設(shè)計的核心就是選擇和設(shè)計適合特定問題的數(shù)據(jù)結(jié)構(gòu)與算法,用編程語言編制為程序。2016秋數(shù)據(jù)科學與軟件工程學院221.1.3程序設(shè)計與軟件開發(fā)在計算機技術(shù)發(fā)展的早期,軟件開發(fā)的主要活動就是程序設(shè)計。隨著程序向軟件的演變,軟件開發(fā)不再只是純粹的程序的功能設(shè)計,還包括數(shù)據(jù)庫設(shè)計、用戶界面設(shè)計、軟件接口設(shè)計、通信協(xié)議設(shè)計和復雜的系統(tǒng)配置。軟件變得越來越大、越來越復雜。2016秋數(shù)據(jù)科學與軟件工程學院231.1.3程序設(shè)計與軟件開發(fā)軟件變得越來越大、越來越復雜。圖1.1示意了Linux操作系統(tǒng)的內(nèi)核在10年里從240萬行擴大到接近1600萬行。2016秋數(shù)據(jù)科學與軟件工程學院241.1.3程序設(shè)計與軟件開發(fā)程序設(shè)計活動走向軟件工程。軟件工程把經(jīng)過時間考驗而證明正確的管理技術(shù)和當前能夠得到的最好的技術(shù)方法結(jié)合起來,以系統(tǒng)性的、規(guī)范化的、可定量的過程化方法去開發(fā)和維護軟件。軟件工程是應用計算機科學、數(shù)學、邏輯學及管理科學等原理,開發(fā)軟件的工程學科和活動。2016秋數(shù)據(jù)科學與軟件工程學院251.2軟件生存周期一個軟件產(chǎn)品或軟件系統(tǒng)也要經(jīng)歷孕育、誕生、成長、成熟、衰亡等階段,一般稱為軟件生存周期(軟件生命周期)。軟件的生產(chǎn)者和使用者對軟件生存周期的階段和活動具有不同的理解和劃分。1.2.1使用角度的軟件生存周期1.2.2開發(fā)角度的軟件生存周期2016秋數(shù)據(jù)科學與軟件工程學院261.2.1使用角度的軟件生存周期提出需求。用戶根據(jù)需要,提出要解決的問題和需要的軟件。獲取軟件。主要是對獲取軟件的最佳途徑做出決策并選擇最佳的供應商。購買軟件定制或開發(fā)軟件租賃軟件或租賃服務使用軟件。一旦獲得軟件之后,用戶將操作軟件使之為其服務。2016秋數(shù)據(jù)科學與軟件工程學院271.2.2開發(fā)角度的軟件生存周期從軟件開發(fā)者的角度,一般把軟件生存周期分為定義軟件、開發(fā)軟件和維護軟件三個階段。2016秋數(shù)據(jù)科學與軟件工程學院281.3軟件開發(fā)過程把軟件開發(fā)工作分成若干都有特定結(jié)果的步驟或活動,按照一定的方式開展軟件活動,從而形成了軟件過程。簡單而言,軟件開發(fā)過程是用來生產(chǎn)軟件產(chǎn)品的流程及一系列工具、方法和實踐的集合。軟件過程模型是從一個特殊的視角對軟件開發(fā)過程的簡化描述。2016秋數(shù)據(jù)科學與軟件工程學院291.3軟件開發(fā)過程2016秋數(shù)據(jù)科學與軟件工程學院301.3軟件開發(fā)過程1.3.1瀑布式開發(fā)過程1.3.2增量開發(fā)模型1.3.3個體軟件過程2016秋數(shù)據(jù)科學與軟件工程學院311.3.1瀑布式開發(fā)過程瀑布式開發(fā)過程,也叫軟件生存期模型。按照軟件生命周期,開發(fā)分為制定計劃、需求分析、軟件設(shè)計、程序編寫、軟件測試和運行維護等6個基本活動。各項活動嚴格按照線性方式進行,自上而下、相互銜接。每項活動的結(jié)果需要驗證通過后,才能繼續(xù)進行下一項活動。2016秋數(shù)據(jù)科學與軟件工程學院321.3.1瀑布式開發(fā)過程核心思想是按工序?qū)栴}化簡,將功能的實現(xiàn)與設(shè)計分開,即采用結(jié)構(gòu)化的分析與設(shè)計方法將邏輯實現(xiàn)與物理實現(xiàn)分開。2016秋數(shù)據(jù)科學與軟件工程學院331.3.1瀑布式開發(fā)過程主要問題在于:階段劃分僵硬,每個階段不能缺省,而且產(chǎn)生大量文檔,增加了工作量;開發(fā)是線性的,只有等到整個過程的末期才能見到開發(fā)成果——可運行軟件,不利于快速響應變化的需求;早期的錯誤要等到開發(fā)后期的測試階段才能發(fā)現(xiàn),可能帶來嚴重的后果,增加了開發(fā)的風險。2016秋數(shù)據(jù)科學與軟件工程學院341.3.2增量開發(fā)模型把軟件分成一系列增量,完成一部分就交付一部分。本質(zhì)上是迭代開發(fā)的,即不是一次性執(zhí)行軟件開發(fā)的全部活動,而是有計劃地反復執(zhí)行“分析-設(shè)計-編碼-測試”的過程。2016秋數(shù)據(jù)科學與軟件工程學院351.3.2增量開發(fā)模型增量開發(fā)模型的特點是引進了增量包的概念,無須等到所有需求,只要某個需求明確了,就可進行開發(fā)。增量的類型及其開發(fā)不止一種。可行的方式是首先實現(xiàn)那些明確的、核心的需求;也可以對需求按優(yōu)先級排序,或者按照用戶的要求實現(xiàn)增量。2016秋數(shù)據(jù)科學與軟件工程學院361.3.2增量開發(fā)模型增量開發(fā)模型的基本思想是讓開發(fā)者能夠從早期的開發(fā)、系統(tǒng)的增量、交付的版本中學到經(jīng)驗。過程中的關(guān)鍵是從系統(tǒng)需求的簡單子集實現(xiàn)開始,通過迭代增強和進化后續(xù)的版本,直到系統(tǒng)被實現(xiàn)。每次迭代中,對設(shè)計進行修改,并增加新的功能要求。2016秋數(shù)據(jù)科學與軟件工程學院371.3.2增量開發(fā)模型增量開發(fā)模型的優(yōu)點如下:在短時間內(nèi)向用戶提交一個可運行軟件,能夠提供解決用戶急用的一些功能。由于每次只提交部分功能,用戶有較充分的時間學習和適應新的產(chǎn)品。在開發(fā)過程中,需求的變化是不可避免的。增量開發(fā)模型的靈活性可以使軟件適應需求變化。有利于系統(tǒng)維護,因為整個系統(tǒng)是由一個個增量(部件)集成在一起的,當需求變更時,只變更部分部件,而不必影響整個系統(tǒng)。2016秋數(shù)據(jù)科學與軟件工程學院381.3.2增量開發(fā)模型增量模型存在以下風險:由于各個部件是逐漸并入已有軟件的,必須確保每次增加的部件不破壞已構(gòu)造好的系統(tǒng),這需要軟件具備開放式的體系結(jié)構(gòu),否則系統(tǒng)將失去穩(wěn)定的結(jié)構(gòu)。逐步增加部件的方式,很容易退化為邊做邊改模型,從而使軟件過程的控制失去整體性。在一個軟件開發(fā)中如何一致地定義“增量”?如何界定它的工作量、需求范圍、功能或特性?2016秋數(shù)據(jù)科學與軟件工程學院391.3.2增量開發(fā)模型實踐中,增量開發(fā)模型往往要求在分析了軟件需求以后,在軟件設(shè)計開發(fā)時進行增量。增量開發(fā)最好是在架構(gòu)設(shè)計完成后再開始進行增量,這樣可以更好地保證系統(tǒng)的健壯性和可擴展性。每次迭代過程仍然要遵循“分析→設(shè)計→實現(xiàn)”的微型瀑布過程。迭代周期的長度跟軟件的開發(fā)周期和規(guī)模有關(guān)系。2016秋數(shù)據(jù)科學與軟件工程學院401.3.3個體軟件過程美國卡內(nèi)基梅隆大學軟件工程研究院的漢弗萊(Humphrey)主持開發(fā)了個體軟件過程(PersonalSoftwareProcess,PSP)和團隊軟件過程(TeamSoftwareProcess,TSP)。TSP是為開發(fā)軟件產(chǎn)品的開發(fā)團隊提供的指導,在于幫助開發(fā)團隊改善其質(zhì)量和生產(chǎn)率,更好地滿足成本及進度的目標。2016秋數(shù)據(jù)科學與軟件工程學院411.3.3個體軟件過程PSP是一種可用于控制、管理和改進個人工作方式的自我持續(xù)改進過程。它是一個包括軟件開發(fā)表格、指南和規(guī)程的結(jié)構(gòu)化框架。PSP與具體的技術(shù)(程序設(shè)計語言、工具或設(shè)計方法)相對獨立,其原則能夠應用到任何軟件工程任務之中。PSP能夠說明個體軟件過程的原則;幫助軟件工程師做出準確的計劃;確定軟件工程師為改善產(chǎn)品質(zhì)量要采取的步驟;建立度量個體軟件過程改善的基準;確定過程的改變對軟件工程師能力的影響。2016秋數(shù)據(jù)科學與軟件工程學院421.3.3個體軟件過程PSP為個體的能力也提供了一個階梯式的進化框架,每一級別都包含了更低一級別中的所有元素,并增加了新的元素。借助這個框架,個體可以循序漸進地改進開發(fā)過程。它賦予軟件人員度量和分析工具,使其清楚地認識到自己的表現(xiàn)和潛力,從而可以提高自己的技能和水平。2016秋數(shù)據(jù)科學與軟件工程學院431.3.3個體軟件過程PSP0的目的是建立個體過程基線,學會使用PSP的各種表格采集過程的有關(guān)數(shù)據(jù),執(zhí)行的軟件過程包括計劃、設(shè)計、編碼、編譯和測試。按照選定的缺陷類型標準、度量引入的缺陷個數(shù)和排除的缺陷個數(shù)等,用在測量PSP過程的改進。PSP0.1增加了編碼標準、程序規(guī)模度量和過程改善建議三個關(guān)鍵過程域。2016秋數(shù)據(jù)科學與軟件工程學院441.3.3個體軟件過程PSP1的重點是個體計劃,用自己的歷史數(shù)據(jù)來預測新程序的大小和需要的開發(fā)時間,并使用線性回歸方法計算估計參數(shù),確定置信區(qū)間以評價預測的可信程度。PSP1.1增加了對任務和進度的規(guī)劃。在PSP1階段應該學會編制項目開發(fā)計劃,這不僅對承擔大型軟件的開發(fā)十分重要,即使是開發(fā)小型軟件,也必不可少。2016秋數(shù)據(jù)科學與軟件工程學院451.3.3個體軟件過程PSP2的重點是個體質(zhì)量管理,根據(jù)程序的缺陷建立檢測表,按照檢測表進行設(shè)計復查和代碼復查(也稱“代碼走查”),以便及早發(fā)現(xiàn)缺陷,使修復缺陷的代價最小。PSP2.1則論述設(shè)計過程和設(shè)計模板,但并不強調(diào)選用什么設(shè)計方法,而強調(diào)設(shè)計完備性準則和設(shè)計驗證技術(shù)。2016秋數(shù)據(jù)科學與軟件工程學院461.3.3個體軟件過程PSP3的目標是把個體開發(fā)小程序所能達到的生產(chǎn)效率和生產(chǎn)質(zhì)量延伸到大型程序;其方法是采用迭代增量式開發(fā)方法,首先把大型程序分解成小的模塊,然后對每個模塊按照PSP2.1所描述的過程進行開發(fā),最后把這些模塊逐步集成為完整的軟件產(chǎn)品。在新一輪開發(fā)循環(huán)中,可以采用回歸測試。2016秋數(shù)據(jù)科學與軟件工程學院471.4敏捷開發(fā)敏捷開發(fā)是從20世紀90年代開始逐漸引起廣泛關(guān)注的一組新型的軟件開發(fā)方法,更強調(diào)程序員團隊與業(yè)務專家之間的緊密協(xié)作、面對面的溝通、頻繁交付新的軟件版本、緊湊而自我組織型的團隊、能夠很好地適應需求變化的代碼編寫和團隊組織方法,更注重軟件開發(fā)中人的作用。1.4.1概述1.4.2Scrum方法2016秋數(shù)據(jù)科學與軟件工程學院481.4.1概述敏捷開發(fā)是應對快速變化的需求的一種軟件開發(fā)能力。以用戶需求進化為核心,采用迭代、循序漸進的方法進行軟件開發(fā)。敏捷開發(fā)采用了更加人性化、個性化的溝通表達方式,特別是使用隱喻而非常規(guī)術(shù)語或形式化技術(shù)。例如,表示和處理需求的用戶故事(UserStory)。再如,sprint指增量開發(fā)的迭代周期,長度通常是一至六周。一個用戶故事的大小和復雜度應該以能在一個sprint中完成。2016秋數(shù)據(jù)科學與軟件工程學院491.4.1概述敏捷開發(fā)通過宣言表示了它的4個核心價值觀。(1)個體和互動勝過流程和工具。(2)工作的軟件勝過詳盡的文檔。(3)客戶合作勝過合同談判。(4)響應變化勝過遵循計劃。2016秋數(shù)據(jù)科學與軟件工程學院501.4.1概述所有敏捷開發(fā)方法都遵循下面12條原則。(1)最優(yōu)先要做的是通過盡早地、持續(xù)地交付有價值的軟件滿足客戶需要。(2)即使在開發(fā)后期也歡迎需求的變化,敏捷過程利用變化為客戶創(chuàng)造競爭優(yōu)勢。(3)經(jīng)常交付可以工作的軟件,從幾星期到幾個月,時間越短越好。(4)業(yè)務人員和開發(fā)人員應該在整個項目過程中始終朝夕在一起工作。(5)要善于激勵項目人員,給他們以所需要的環(huán)境和支持,并相信他們能夠完成任務。(6)在開發(fā)小組中最有效率、也最有效果的信息傳達方式是面對面的交談。(7)工作的軟件是進度的主要度量標準。(8)責任人、開發(fā)者和用戶應該維持長期、恒等的開發(fā)節(jié)奏。(9)對卓越技術(shù)與良好設(shè)計的不斷追求將有助于提高敏捷性。(10)簡單——盡可能減少工作量的藝術(shù)——至關(guān)重要。(11)最好的架構(gòu)、需求和設(shè)計都源于自組織的團隊。(12)每隔一定時間,團隊都要總結(jié)、反省工作效率,然后相應地調(diào)整自己的行為。2016秋數(shù)據(jù)科學與軟件工程學院511.4.1概述基本技術(shù)敏捷方法可以視為一些最佳實踐的集合,包括經(jīng)典的軟件開發(fā)技術(shù)和管理,也包括敏捷開發(fā)首創(chuàng)的技術(shù)和方法。敏捷開發(fā)遵循軟件開發(fā)的基本原則,同時也總結(jié)出了11條面向?qū)ο笤O(shè)計的原則,如單一職責原則(模塊內(nèi)聚的體現(xiàn))、(采納的)Liskov替換原則等。2016秋數(shù)據(jù)科學與軟件工程學院521.4.1概述基本技術(shù)敏捷開發(fā)主要采用了面向?qū)ο蟮拈_發(fā)技術(shù),使用CRC卡(Class-Responsibility-Collaborator,類-責任-協(xié)作)、用戶用例、設(shè)計模式及UML(UnifiedModellingLanguage,統(tǒng)一建模語言)。但是,敏捷開發(fā)使用UML的符號主要是類圖和時序圖,因為這兩種符號有助于直接編寫出代碼。2016秋數(shù)據(jù)科學與軟件工程學院531.4.1概述意圖導向編程意圖導向編程指的是,先假設(shè)當前這個對象中已經(jīng)有了一個理想方法,它可以準確無誤地完成想做的事情,而不是直接盯著每一點要求來編寫代碼。在這個實例中,需要創(chuàng)建一個服務程序,它接收一個業(yè)務交易,然后提交。先簡單創(chuàng)建一個對象,它只包含一個公共方法來完成這件事。2016秋數(shù)據(jù)科學與軟件工程學院541.4.1概述具體需求如下交易信息開始于一串標準ASCII字符串。信息字符串必須轉(zhuǎn)換成一個字符串的數(shù)組,其值是此次交易用到的領(lǐng)域語言中所包含的詞匯元素(token)。每個詞匯元素必須標準化:第一個字母大寫,其余字母小寫,空格和非字母數(shù)字的符號都要刪掉。超過150個詞匯元素的交易應該采用與小型交易不同的方式(不同的算法)來提交,以提高效率。如果提交成功,返回true;否則返回false。2016秋數(shù)據(jù)科學與軟件工程學院551.4.1概述2016秋數(shù)據(jù)科學與軟件工程學院561.4.1概述采用“意圖導向編程”的編碼方式,在編程開始時,假設(shè)這些“輔助方法”都已經(jīng)存在,只需先考慮這些“輔助方法”要實現(xiàn)的功能和它們的輸入和輸出,然后按程序要求寫出程序的主框架。最后才是“輔助方法”的編程。這樣的編碼方式使得程序員在整個編程中思路清晰,可以把精力集中在如何分解最終目標,以及那些全局性的問題上。實現(xiàn)的代碼功能單一,易讀易理解。2016秋數(shù)據(jù)科學與軟件工程學院571.4.1概述敏捷技術(shù)敏捷開發(fā)也創(chuàng)造了一些新的技術(shù)或?qū)嵺`。如測試驅(qū)動開發(fā)、結(jié)對編程、代碼重構(gòu)和持續(xù)集成。2016秋數(shù)據(jù)科學與軟件工程學院581.4.1概述測試驅(qū)動開發(fā)在一個微循環(huán)開發(fā)中,首先確認并自動化進行一個失敗的測試,然后編寫足夠的代碼通過測試,在下一輪前以必要的方式清理代碼。2016秋數(shù)據(jù)科學與軟件工程學院591.4.1概述結(jié)對編程兩個程序員在一個計算機上共同工作。一個人輸入代碼,而另一個人審查他輸入的每一行代碼。兩個程序員經(jīng)?;Q角色。代碼重構(gòu)指的是改變程序結(jié)構(gòu)而不改變其行為,以便提高代碼的可讀性、易修改性等。例如,給變量重新命名,把一段代碼提升為函數(shù),把公共的屬性和行為抽象成基類。2016秋數(shù)據(jù)科學與軟件工程學院601.4.1概述持續(xù)集成微軟等公司的軟件開發(fā)方法包括每日構(gòu)造產(chǎn)品,持續(xù)集成比它更進一步,只要可能,就把新代碼或變更的代碼合并到應用程序,然后測試,確保一切都正常。2016秋數(shù)據(jù)科學與軟件工程學院611.4.1概述敏捷開發(fā)是一個統(tǒng)稱,很多軟件開發(fā)方法都認為自己是敏捷的。典型的敏捷開發(fā)方法包括極限編程(ExtremeProgramming,XP)、Scrum、水晶方法(Crystal)、特性驅(qū)動開發(fā)(FeatureDrivenDevelopment,F(xiàn)DD)、動態(tài)系統(tǒng)開發(fā)方法(DynamicSystemsDevelopmentMethod,DSDM)。2016秋數(shù)據(jù)科學與軟件工程學院621.4.2Scrum方法Scrum是一個用于開發(fā)和維持復雜軟件產(chǎn)品的框架,是一個增量的、迭代的開發(fā)過程。整個開發(fā)過程由若干短的迭代周期(沖刺Sprint)組成。Scrum使用產(chǎn)品積壓工作(ProductBacklog)來管理產(chǎn)品需求,它是一個按照商業(yè)價值排序的需求列表,列表條目的體現(xiàn)形式為用戶故事。Scrum團隊總是先開發(fā)對客戶具有較高價值的需求。在沖刺中,團隊從產(chǎn)品積壓工作中挑選最高優(yōu)先級的需求進行開發(fā)。挑選的需求在沖刺計劃會議上經(jīng)過討論、分析和估算得到相應的任務列表,稱為沖刺清單(SprintBacklog)。每個迭代結(jié)束時,團隊將遞交潛在可交付的產(chǎn)品增量。2016秋數(shù)據(jù)科學與軟件工程學院631.4.2Scrum方法Scrum框架可以簡化成3個角色、3個工件、5個活動和5個價值。Scrum框架的3個角色是:產(chǎn)品負責人、產(chǎn)品經(jīng)理(ScrumMaster)及團隊。3個工件是產(chǎn)品積壓工作、沖刺清單和燃盡圖(Burn-downChart)。5個活動包括:沖刺計劃會議、每日站會、沖刺評審會議、沖刺回顧會議和產(chǎn)品積壓工作梳理會議。2016秋數(shù)據(jù)科學與軟件工程學院641.4.2Scrum方法Scrum的5個價值是:①承諾:愿意對目標做出承諾;②專注:把心思和能力都用到承諾的工作上去;③開放:Scrum把項目中的一切開放給每個人看;④尊重:每個人都有其獨特的背景和經(jīng)驗;⑤勇氣:有勇氣做出承諾、履行承諾、接受別人的尊重。2016秋數(shù)據(jù)科學與軟件工程學院651.4.2Scrum方法Scrum的工作流程2016秋數(shù)據(jù)科學與軟件工程學院661.5軟件構(gòu)造1.5.1有關(guān)概念1.5.2構(gòu)造與開發(fā)過程1.5.3主要內(nèi)容1.5.4軟件構(gòu)造的重要性2016秋數(shù)據(jù)科學與軟件工程學院671.5.1有關(guān)概念I(lǐng)EEE計算機學會于2013年正式發(fā)布了最新的軟件工程知識體系(SWEBOK3.0)指南,提出了構(gòu)成軟件工程學科的11個實踐知識域,每個知識域分解為子域,子域含若干主題。這11個軟件工程實踐知識域是:軟件需求、軟件設(shè)計、軟件構(gòu)造、軟件測試、軟件維護、軟件配置管理、軟件工程管理、軟件工程過程、軟件工程模型與方法、軟件質(zhì)量、軟件工程專業(yè)實踐。2016秋數(shù)據(jù)科學與軟件工程學院681.5.1有關(guān)概念“軟件構(gòu)造”指的是通過編碼、驗證、單元測試、集成測試和調(diào)試的組合,詳細地創(chuàng)建可工作的、有意義的軟件。2016秋數(shù)據(jù)科學與軟件工程學院691.5.2構(gòu)造與開發(fā)過程構(gòu)造在不同軟件開發(fā)流程或模型中的地位也不一樣。有些流程更加重視構(gòu)造。從構(gòu)造角度看,有些模型側(cè)重于線性化過程——比如瀑布模型、階段交付的生命周期模型。線性化開發(fā)方式更加重視構(gòu)造之前的活動(需求和設(shè)計),并且在這些活動之間建立明確的任務劃分。在這些模型中,構(gòu)造工作主要就是編碼。2016秋數(shù)據(jù)科學與軟件工程學院701.5.2構(gòu)造與開發(fā)過程有些模型是迭代的——如Scrum、極限編程、進化式原型法。這些方式傾向于把構(gòu)造視為與其他軟件開發(fā)(包括需求、設(shè)計和計劃)同時發(fā)生或重疊的活動。這些方式混合設(shè)計、編碼和測試活動,把構(gòu)造當成這些活動的集合體。所以,如何考慮構(gòu)造,在某種程度上依賴于采用的生存周期模型。一般地說,軟件構(gòu)造最主要是編碼和調(diào)試,但也可以包含工作計劃、詳細設(shè)計、單元測試、集成測試,以及其他活動。2016秋數(shù)據(jù)科學與軟件工程學院711.5.3主要內(nèi)容軟件構(gòu)造的知識域分為5個子域,每個子域包含了數(shù)量不等的主題。軟件構(gòu)造基礎(chǔ)。管理構(gòu)造。實際考慮。構(gòu)造技術(shù)。軟件構(gòu)造工具。2016秋數(shù)據(jù)科學與軟件工程學院721.5.3主要內(nèi)容本書使用的“軟件構(gòu)造”指的是運用軟件最佳實踐,通過設(shè)計、編碼和測試的迭代過程,增量地建造出可運行軟件。本書涵蓋了指南中5個知識子域的大部分主題。通過增量迭代地構(gòu)造一個可運行軟件,用具體的技術(shù)實踐講解了軟件構(gòu)造域的知識主題。此外,本書討論了軟件模塊的構(gòu)造、用戶交互的構(gòu)造及數(shù)據(jù)處理的構(gòu)造。有關(guān)軟件測試、敏捷開發(fā)的技術(shù)、設(shè)計模式包含了比指南更多的內(nèi)容。在開發(fā)階段方面,增加了軟件交付。2016秋數(shù)據(jù)科學與軟件工程學院731.5.3主要內(nèi)容本書沒有涵蓋指南的部分主題:管理構(gòu)造子域中的構(gòu)造計劃和構(gòu)造度量;構(gòu)造技術(shù)子域中的可執(zhí)行模型、并發(fā)原語、性能分析與調(diào)優(yōu),也沒有特別處理實時、分布式和異構(gòu)軟件;軟件構(gòu)造工具子域中的性能優(yōu)化、分析、切片工具。2016秋數(shù)據(jù)科學與軟件工程學院741.5.3主要內(nèi)容總體而言,本書面向個體,涉及團隊少;以技術(shù)、方法和工具的最佳實踐為主,通過代碼實現(xiàn)學習抽象的原則和技術(shù)方法,不涉及管理;采用增量迭代的構(gòu)造方式,不采用任何明確定義的流程或模型;涉及少量的需求和分析,不包含交付之后的活動。2016秋數(shù)據(jù)科學與軟件工程學院751.5.4軟件構(gòu)造的重要性構(gòu)造占據(jù)了軟件開發(fā)的大部分工作。研究表明,構(gòu)造占軟件開發(fā)30%~80%的工作時間。而任何占據(jù)項目大量時間的工作一定會深刻地影響項目的成功。構(gòu)造是軟件開發(fā)的中心活動。把重心放在構(gòu)造,能顯著提升個體程序員的生產(chǎn)率。構(gòu)造的產(chǎn)品——源程序代碼,常常是唯一準確的軟件描述。構(gòu)造是確保唯一要完成的活動。2016秋數(shù)據(jù)科學與軟件工程學院761.6為什么不直接編寫軟件相對于編程,軟件具有了工程特征。軟件開發(fā)是要跨越分析、設(shè)計、實現(xiàn)、安裝和維護活動的一個可以反復遵循的、復雜的過程(工作流程);軟件需要依靠一個團隊的分工合作,需要過程的組織和管理(人員組織與管理);軟件開發(fā)還要運用各種技術(shù)和工具生產(chǎn)出來的產(chǎn)品(工具和自動化)。2016秋數(shù)據(jù)科學與軟件工程學院771.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ù)科學與軟件工程學院781.6.1軟件開發(fā)語言計算機軟件的編程語言基本被劃分成機器語言/匯編語言的低級語言和與計算機的硬件結(jié)構(gòu)及指令系統(tǒng)無關(guān)的高級(程序)語言。面向?qū)ο笳Z言是目前使用最多的一種語言。2016秋數(shù)據(jù)科學與軟件工程學院791.6.1軟件開發(fā)語言按計算模型的劃分聲明式:告訴計算機做什么。函數(shù)式語言邏輯式語言數(shù)據(jù)流語言命令式:告訴計算機應該如何做。馮·諾依曼式語言腳本語言面向?qū)ο笳Z言2016秋數(shù)據(jù)科學與軟件工程學院801.6.1軟件開發(fā)語言高級程序語言的一個發(fā)展趨勢是融合各種類型語言的特性。大多數(shù)面向?qū)ο笳Z言都具有馮·諾依曼式語言的結(jié)構(gòu),有些也融合了函數(shù)式編程范式的思想,如Java和C#引入了λ算子等。2016秋數(shù)據(jù)科學與軟件工程學院811.6.1軟件開發(fā)語言例題1.1:使用歐幾里得算法,編寫計算兩個整數(shù)a和b的最大公因數(shù)的程序gcd。2016秋數(shù)據(jù)科學與軟件工程學院821.6.1軟件開發(fā)語言按執(zhí)行模式的劃分高級語言程序不能直接在計算機上運行,必須轉(zhuǎn)換成低級語言的指令后才能運行。按照語言的轉(zhuǎn)換和執(zhí)行方式,高級語言分為編譯型語言和解釋型語言。2016秋數(shù)據(jù)科學與軟件工程學院831.6.2編程工具與集成化開發(fā)環(huán)境使用任何語言編程都需要基本的編程工具——軟件開發(fā)工具包(SoftwareDevelopmentKit,SDK),它通常包括編譯程序或解釋程序、調(diào)試程序、連接程序等,如Java的JDK、Android的ADK。編寫程序的工具是普通的文本編輯器,它可以是傳統(tǒng)的正文行編輯器,也可以是面向全屏的圖形編輯器。2016秋數(shù)據(jù)科學與軟件工程學院841.6.2編程工具與集成化開發(fā)環(huán)境編寫程序的工具是普通的文本編輯器,它可以是傳統(tǒng)的正文行編輯器,也可以是面向全屏的圖形編輯器。編輯器可以是通用的、與程序語言無關(guān),也可以是具備源程序語言知識的語法制導編輯器或結(jié)構(gòu)化編輯器(如emacs、notepad++)。語法制導編輯工具運用程序語言的語法知識,在用戶編寫程序時按照詞法和語法分析的信息提供若干智能化幫助,包括自動地提供關(guān)鍵字及其匹配的關(guān)鍵字、左右括號的配對、對象的屬性和操作,等等。2016秋數(shù)據(jù)科學與軟件工程學院851.6.2編程工具與集成化開發(fā)環(huán)境軟件開發(fā)還需要管理各種代碼文件、檢查程序質(zhì)量、測試工具、管理bugs、軟件打包工具等。這些基礎(chǔ)開發(fā)工具通常是行式命令,直接在操作系統(tǒng)中輸入相應的命令,如編譯Java程序的編譯命令javac,解釋執(zhí)行Java程序的命令java。也有一些語言直接提供可視化開發(fā)工具。2016秋數(shù)據(jù)科學與軟件工程學院861.6.2編程工具與集成化開發(fā)環(huán)境可視化集成開發(fā)環(huán)境IDE,用圖形用戶界面(GraphicalUserInterface,GUI)集成了代碼編寫、靜態(tài)分析、編譯、調(diào)試、連接、打包等功能的一體化軟件開發(fā)套件。如Delphi、VisualStudio、Eclipse和Netbeans,它們以GUI形式提供支持多種語言進行編程,還提供代碼管理、代碼分析、軟件維護、軟件測試及軟件部署和交付等工具,同時支持多種形態(tài)應用軟件(通用應用程序、Web應用、數(shù)據(jù)庫應用、移動應用)的開發(fā)。2016秋數(shù)據(jù)科學與軟件工程學院871.6.3軟件運行環(huán)境軟件運行環(huán)境,廣義上說,是一個軟件運行所要求的各種條件,包括軟件環(huán)境和硬件環(huán)境。許多應用軟件不僅僅要求特定的硬件條件,還對軟件提出明確的支撐條件。操作系統(tǒng)將計算機的硬件細節(jié)屏蔽,將計算機抽象成虛擬資源。通常把計算機硬件和操作系統(tǒng)稱為平臺。2016秋數(shù)據(jù)科學與軟件工程學院881.6.3軟件運行環(huán)境為了能夠使同一種編程語言的程序獨立于操作系統(tǒng),實現(xiàn)程序運行的獨立性,即“一次編寫程序、到處運行”,在操作系統(tǒng)層面提出并出現(xiàn)了語言虛擬機或運行容器。它為程序的運行提供所需的運行時資源,包括把程序翻譯成計算機指令、分配內(nèi)存、通過操作系統(tǒng)調(diào)用計算資源等。例如,Java虛擬機(JavaVirtualMachine,JVM)可以理解成一臺運行Java程序的抽象的計算機。2016秋數(shù)據(jù)科學與軟件工程學院891.6.3軟件運行環(huán)境除了計算機硬件和操作系統(tǒng)構(gòu)成的運行平臺,運行軟件還需要支撐環(huán)境,包括使用的數(shù)據(jù)庫管理系統(tǒng)(如Oracle、MySQL、SQLServer)、Web服務器(如Apache服務器、微軟的Internet信息服務器)、應用框架(如.NETFramework、Java程序的SSH框架、Web應用框架RubyonRails)及使用的第三方庫函數(shù)、類庫、APIs等。2016秋數(shù)據(jù)科學與軟件工程學院901.6.4軟件開發(fā)的最佳實踐合適的技術(shù)和方法能提高軟件開發(fā)的效率和產(chǎn)品質(zhì)量。軟件開發(fā)一直缺乏堅實的理論基礎(chǔ)。軟件行業(yè)借用了管理學的最佳實踐(BestPractice)的概念來概括到達用戶滿意的、可以反復使用的軟件開發(fā)的一切手段。最佳實踐認為存在某種技術(shù)、方法、過程、活動或機制,可以使生產(chǎn)或管理實踐的結(jié)果達到最優(yōu),并減少出錯的可能性。2016秋數(shù)據(jù)科學與軟件工程學院911.6.4軟件開發(fā)的最佳實踐原則是一個已經(jīng)接受或?qū)I(yè)化的指導行動的最高準則或標準。人們總結(jié)、使用了軟件開發(fā)的基本原則、面向?qū)ο笤瓌t等。原則必須通過某種途徑體現(xiàn)出來,才具有指導作用。機制指的是有機體的構(gòu)造、功能及其相互關(guān)系、工作原理,如可視化編程的事件響應機制、類型的多態(tài)機制。2016秋數(shù)據(jù)科學與軟件工程學院921.6.4軟件開發(fā)的最佳實踐技術(shù)是科學原理的應用,是具有技能特點的特殊的步驟或途徑。軟件開發(fā)技術(shù)是運用了計算機科學、數(shù)學、系統(tǒng)科學、管理科學的基本原理,進行軟件開發(fā)的方式方法。2016秋數(shù)據(jù)科學與軟件工程學院931.6.4軟件開發(fā)的最佳實踐方法是獲得一個客體(對象)的步驟或過程。作為一個系統(tǒng)的步驟、技術(shù)活動被特定的專業(yè)或藝術(shù)采納,是技能或技術(shù)的全部。研究方法及其知識的活動稱為方法學,如面向?qū)ο蠓椒▽W、軟件方法學。2016秋數(shù)據(jù)科學與軟件工程學院941.6.4軟件開發(fā)的最佳實踐工具指的是執(zhí)行操作的器具,引申為為達到、完成或促進某一事物的手段。我們使用更加廣泛的含義,軟件工具指的是從編輯器、編譯器、自動化測試框架到IDE的實用程序。2016秋數(shù)據(jù)科學與軟件工程學院951.6.4軟件開發(fā)的最佳實踐軟件開發(fā)的技術(shù)實踐十分豐富,按照開發(fā)活動劃分有用戶需求、軟件設(shè)計、軟件構(gòu)造、軟件測試、軟件交付技術(shù)和方法。每個方面又可以細分,如軟件設(shè)計技術(shù)包括軟件架構(gòu)設(shè)計、構(gòu)件設(shè)計、算法設(shè)計、數(shù)據(jù)結(jié)構(gòu)設(shè)計或功能設(shè)計、用戶交互設(shè)計、數(shù)據(jù)庫設(shè)計。這些技術(shù)方法只適合某一個開發(fā)階段或某個軟件組成,也有一些成套的包含技術(shù)、方法和工具,主要是公司內(nèi)部研制和使用(如微軟開發(fā)方法與最佳實踐MSF)。2016秋數(shù)據(jù)科學與軟件工程學院961.6.4軟件開發(fā)的最佳實踐按照軟件開發(fā)范式有結(jié)構(gòu)化開發(fā)、面向?qū)ο箝_發(fā)和新興的面向服務開發(fā)等,側(cè)重在軟件工程活動的前期、以軟件分析和設(shè)計或軟件建模為主。結(jié)構(gòu)化開發(fā)方法是用系統(tǒng)工程的思想和工程化的方法,按用戶至上的原則,結(jié)構(gòu)化、模塊化、自頂向下地對系統(tǒng)進行分析和設(shè)計的方法。2016秋數(shù)據(jù)科學與軟件工程學院971.6.4軟件開發(fā)的最佳實踐面向?qū)ο蠓椒ㄊ且环N把面向?qū)ο蟮乃枷霊糜谲浖_發(fā)過程中,指導開發(fā)活動的系統(tǒng)方法,是目前的主流開發(fā)方法。著名的方法體系有對象建模技術(shù)OMT、面向?qū)ο筌浖こ蘋OSE、Booch面向?qū)ο蠓治雠c設(shè)計。2016秋數(shù)據(jù)科學與軟件工程學院981.6.4軟件開發(fā)的最佳實踐軟件開發(fā)最佳實踐包括一些普遍適用的軟件開發(fā)基本原則(抽象、模塊化),針對某個方法的設(shè)計原則(開閉原則、最少知識原則),提供軟件質(zhì)量和生產(chǎn)率的復用技術(shù)、設(shè)計模式,支持工具如自動化測試、版本控制、缺陷追蹤。敏捷開發(fā)提出了獨特的技術(shù)實踐,如代碼重構(gòu)、測試先行開發(fā)。2016秋數(shù)據(jù)科學與軟件工程學院991.6.4軟件開發(fā)的最佳實踐2016秋數(shù)據(jù)科學與軟件工程學院1001.6.4軟件開發(fā)的最佳實踐2016秋數(shù)據(jù)科學與軟件工程學院1011.6.5開發(fā)過程與管理首先,軟件開發(fā)是做出決策、權(quán)衡和選擇的過程。抉擇的內(nèi)容除了上述技術(shù)方面,還包括工作步驟、工作方式、開發(fā)人員及其組織、結(jié)構(gòu)等。其次,具有工程和產(chǎn)品生產(chǎn)特點的軟件開發(fā),需要良好的人員組織和管理、開發(fā)結(jié)果的管理及開發(fā)過程的管理。2016秋數(shù)據(jù)科學與軟件工程學院1021.6.5開發(fā)過程與管理對于人員的組織管理,首先要識別出參與軟件開發(fā)、與軟件開發(fā)相關(guān)、受軟件影響的人員,并分析每個相關(guān)人員對軟件的訴求、期望、影響和作用。其次,把開發(fā)人員組織成目標一致、分工合作的團隊,包括確定職責、分配任務、明確規(guī)則等。然后,團隊負責人要運用領(lǐng)導力和權(quán)利,指導開發(fā)人員各行其責,確保各類人員之間能順利地溝通和協(xié)調(diào),同時要給予必要的培訓、獎懲、激勵,確保高度的團隊和個人的開發(fā)效率。2016秋數(shù)據(jù)科學與軟件工程學院1031.6.5開發(fā)過程與管理軟件開發(fā)作為項目,要評估成本、開發(fā)時間、質(zhì)量、人員等因素,預先做出項目計劃。首先要識別軟件開發(fā)的所有活動、所有結(jié)果(如代碼、測試、文檔、數(shù)據(jù)、設(shè)計、配置文件),確定項目范圍。然后,將開發(fā)活動分解成可管控的工程活動,如問題分析、程序設(shè)計、編碼實現(xiàn)等,結(jié)合人員、預算、時間等資源條件,制定開發(fā)進度和交付物,明確監(jiān)控、檢查和評估的時間點和內(nèi)容。2016秋數(shù)據(jù)科學與軟件工程學院1041.6.5開發(fā)過程與管理同時,要考慮軟件開發(fā)的風險——不確定的、對軟件開發(fā)有危害的潛在因素,制定風險防范與應對計劃。對于軟件質(zhì)量,要考慮采取的質(zhì)量保障方法、質(zhì)量評估流程和標準,制定質(zhì)量管理計劃。在軟件開發(fā)的過程,就是按照計劃調(diào)配資源、執(zhí)行各項開發(fā)任務,確保開發(fā)按照要求和計劃展開。必要時對計劃做出適當?shù)恼{(diào)整和變更,直至交付軟件產(chǎn)品、開發(fā)任務結(jié)束。2016秋數(shù)據(jù)科學與軟件工程學院1051.7案例導讀案例描述50道100以內(nèi)的加減法口算習題。2016秋數(shù)據(jù)科學與軟件工程學院1061.7案例導讀開發(fā)過程以個體為中心,主要采取敏捷和增量迭代的開發(fā)策略。敏捷開發(fā):以需求進化為核心,采用迭代、循序漸進的方式進行軟件開發(fā);不要求全面、完備的需求,也不規(guī)定設(shè)計的方法和表達。增量迭代:針對用戶提出的需求,每次都執(zhí)行“分析-設(shè)計-編碼-測試”的軟件構(gòu)造活動;循環(huán)的次數(shù)、每個增量的大小及每次構(gòu)造活動的重點可以不一致,有些構(gòu)造的重點在設(shè)計,有些構(gòu)造的重點在測試。2016秋數(shù)據(jù)科學與軟件工程學院1071.7案例導讀問題和解空間2016秋數(shù)據(jù)科學與軟件工程學院108第2章
模塊化軟件構(gòu)造第2章模塊化軟件構(gòu)造討論函數(shù)級的軟件構(gòu)造技術(shù)。學習如何運用模塊化技術(shù)進行分解和細化,設(shè)計由函數(shù)組成的、具有一定結(jié)構(gòu)的程序來分離不同的專注點,管理和控制程序的復雜性,使其便于維護、更新和擴展。如何針對實際問題設(shè)計和選擇數(shù)據(jù)結(jié)構(gòu);初步學習如何編程實現(xiàn)軟件測試、如何調(diào)試程序;理解好程序不僅僅是正確的,還有易維護、健壯等其他性質(zhì),學習良好的編程風格。2016秋數(shù)據(jù)科學與軟件工程學院110第2章模塊化軟件構(gòu)造故事一50道100以內(nèi)的加減法口算習題。循環(huán)50次,每次產(chǎn)生一個運算題:隨機地產(chǎn)生兩個100以內(nèi)的整數(shù),隨機地從兩個運算符“加法”和“減法”中挑選一個,就可以生成一道口算題;然后打印輸出一套練習題。2016秋數(shù)據(jù)科學與軟件工程學院111第2章模塊化軟件構(gòu)造2016秋數(shù)據(jù)科學與軟件工程學院112第2章模塊化軟件構(gòu)造程序沒有明確清晰的“算式”、“習題”的含義,沒有使用相應的變量、數(shù)據(jù)結(jié)構(gòu)等程序設(shè)計的方式表達。若干獨立的功能集中在一個函數(shù)中不利于發(fā)現(xiàn)和修改程序中的錯誤,也不便擴充程序的功能。程序修改后,每次都要重新設(shè)計一些檢驗的數(shù)據(jù),運行程序、觀察結(jié)果,判斷修改過的程序是否正確。我們希望能保留下檢測數(shù)據(jù)、運行結(jié)果及其判斷,無須改變地反復使用。編程缺乏規(guī)范。2016秋數(shù)據(jù)科學與軟件工程學院113第2章模塊化軟件構(gòu)造2.1分解與模塊化2.2數(shù)據(jù)結(jié)構(gòu)與算法2.3模塊化設(shè)計理論初步2.4測試程序2.5調(diào)試程序2.6案例分析與實踐2.7討論與提高2.8思考與練習題2016秋數(shù)據(jù)科學與軟件工程學院1142.1分解與模塊化2.1.1分解的含義2.1.2模塊化與結(jié)構(gòu)化2016秋數(shù)據(jù)科學與軟件工程學院1152.1.1分解的含義分而治之的策略:①把問題分成兩個或多個更小的問題;②分別解決每個小問題;③然后把各個小問題的解答聚合起來,即可得到原問題的解答。例如,軟件開發(fā)分解為若干方面,包括軟件過程、項目管理、軟件開發(fā)技術(shù)等。軟件開發(fā)活動細化為需求分析、系統(tǒng)設(shè)計、軟件構(gòu)造、軟件交付等活動。又如,對于一個要編程解決的問題,可以把程序分解為若干函數(shù)或若干類。2016秋數(shù)據(jù)科學與軟件工程學院1162.1.1分解的含義分解的核心是將多個問題、難點或關(guān)注點分離。關(guān)注點分離是對只與“特定概念、目標”(關(guān)注點)相關(guān)聯(lián)的軟件組成部分進行“標識、封裝和操縱”的能力,即標識、封裝和操縱關(guān)注點的能力,是處理復雜性的一個原則。關(guān)注點分離是面向方面的程序設(shè)計的核心概念。2016秋數(shù)據(jù)科學與軟件工程學院1172.1.1分解的含義案例代碼2.1的程序可以分解4個部分。(1)增加一個程序頭打印函數(shù)voidprintHeader(),簡單說明本程序的作用和使用。(2)函數(shù)voidgenerateEquations(),產(chǎn)生加法或減法算式的符號串并存入一個數(shù)組。(3)輸出習題的函數(shù)voidprintExercise(),它接收generateEquations的輸出,按照要求打印輸出所有的算式。(4)輸出習題中每個算式的計算結(jié)果voidprintCalculations()。2016秋數(shù)據(jù)科學與軟件工程學院1182.1.1分解的含義2016秋數(shù)據(jù)科學與軟件工程學院1192.1.2模塊化與結(jié)構(gòu)化模塊化是把問題分解成容易理解、便于控制、便于實現(xiàn)的子問題的一個重要手段,是實現(xiàn)控制復雜性的方式。模塊化通過把一個程序分解成簡單獨立、互相作用的模塊,對不同的模塊設(shè)定不同的功能,來實現(xiàn)大型、復雜的程序。模塊是可組合、可更換的程序單元。良好設(shè)計的模塊只完成一個特定的或一組相關(guān)的子功能。所有模塊按某種方法組裝起來,成為一個整體,完成整個系統(tǒng)所要求的功能。2016秋數(shù)據(jù)科學與軟件工程學院1202.1.2模塊化與結(jié)構(gòu)化軟件模塊是指具有相對獨立性的、由數(shù)據(jù)說明、執(zhí)行語句等程序?qū)ο髽?gòu)成的代碼集合。每個模塊都需要單獨命名,如:函數(shù)、子程序、過程、方法等。通過名字訪問指定模塊。一個模塊具有輸入/輸出(接口)、功能、內(nèi)部數(shù)據(jù)和程序代碼4個組成部分。模塊具有三大特征:獨立性、互換性和通用性。2016秋數(shù)據(jù)科學與軟件工程學院1212.1.2模塊化與結(jié)構(gòu)化模塊化設(shè)計,簡單地說,就是將產(chǎn)品的某些要素組合在一起,構(gòu)成一個具有特定功能的、相對獨立的子系統(tǒng),將這個子系統(tǒng)作為通用模塊與其他產(chǎn)品要素進行多種組合,產(chǎn)生多種不同功能或相同功能、不同性能的系列產(chǎn)品。函數(shù)(或方法、過程)是實現(xiàn)軟件模塊化的一個基本手段。2016秋數(shù)據(jù)科學與軟件工程學院1222.1.2模塊化與結(jié)構(gòu)化在模塊設(shè)計中,最基本的是算法和數(shù)據(jù)結(jié)構(gòu)的設(shè)計。代碼2.1中只有一個數(shù)據(jù)結(jié)構(gòu)——算式表示成基本類型符號串,代碼2.2增加了一個存儲算式的數(shù)組作為習題。2016秋數(shù)據(jù)科學與軟件工程學院1232.1.2模塊化與結(jié)構(gòu)化如何定義兩個算式相等?如果把算式表示成符號串,計算機語言判定符號串“□2+3=”、“2□+3=”、“2+□3=”和“2+3□=”(其中□表示一個空格)互不相等,“2+3”和“2+3=”不相等。但它們是相同的算式。預處理算式——消除算式符號串中的所有空格。但預處理會占用計算資源。2016秋數(shù)據(jù)科學與軟件工程學院1242.1.2模塊化與結(jié)構(gòu)化圖靈獎獲得者Wirth提出的“結(jié)構(gòu)化程序設(shè)計”(StructuredProgramming)的方法,可以簡化為“算法+數(shù)據(jù)結(jié)構(gòu)=程序”。這種結(jié)構(gòu)化程序設(shè)計方法又稱為“自頂向下”或“逐步求精”法。增量迭代方法汲取了這些方法的精華,但有著不同的特點:“增量”是少量可執(zhí)行程序的功能及每次具體實現(xiàn)增量的過程,而不是從抽象到代碼,可視為“需求分析、概念設(shè)計、編碼實現(xiàn)”的微構(gòu)造過程。2016秋數(shù)據(jù)科學與軟件工程學院1252.2數(shù)據(jù)結(jié)構(gòu)與算法2.2.1數(shù)據(jù)結(jié)構(gòu)與算法的關(guān)系2.2.2選擇與設(shè)計數(shù)據(jù)結(jié)構(gòu)2.2.3選擇與設(shè)計算法2016秋數(shù)據(jù)科學與軟件工程學院1262.2.1數(shù)據(jù)結(jié)構(gòu)與算法的關(guān)系數(shù)據(jù)結(jié)構(gòu)是計算機存儲、組織數(shù)據(jù)的方式,指相互之間存在一種或多種特定關(guān)系的數(shù)據(jù)元素的集合。為數(shù)據(jù)集提供獨立于計算機內(nèi)存的數(shù)據(jù)組織,并提供被視為一種抽象的工具來訪問。常見的數(shù)據(jù)結(jié)構(gòu),如數(shù)組、集合、棧、隊列、堆、樹、圖、散列表等。2016秋數(shù)據(jù)科學與軟件工程學院1272.2.1數(shù)據(jù)結(jié)構(gòu)與算法的關(guān)系算法以一步一步的方式來詳細描述計算機如何將輸入轉(zhuǎn)化為所要求的輸出的過程。描述算法的方式可以采用自然語言、程序設(shè)計語言,也可以兩種語言混合使用。用計算機程序語言實現(xiàn)并在計算機上運行的算法就是程序,它是一個解決實際問題方法的程序語言的指令序列?;镜乃惴ǎ愋停┌ú檎?、排序、二叉樹的遍歷、圖的遍歷、最短路徑算法。2016秋數(shù)據(jù)科學與軟件工程學院1282.2.1數(shù)據(jù)結(jié)構(gòu)與算法的關(guān)系計算機算法與數(shù)據(jù)結(jié)構(gòu)密切相關(guān),算法依賴于具體的數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu)直接關(guān)系到算法的選擇和效率。(1)一種數(shù)據(jù)結(jié)構(gòu)、一種算法:通常是針對一種特殊的數(shù)據(jù)結(jié)構(gòu)設(shè)計的特殊算法。如,計算樹的高度、樹節(jié)點的層級。(2)一種數(shù)據(jù)結(jié)構(gòu)、多種算法:如,數(shù)組,支持的算法如排序、查找、圖類、矩陣類等等。(3)多種數(shù)據(jù)結(jié)構(gòu)、一種算法:如,折半查找使用數(shù)組和二叉樹,也可以使用鏈表。(4)多種數(shù)據(jù)結(jié)構(gòu)、多種算法:如,數(shù)組和二叉樹,基本的算法有遍歷類、查找類、求最大值等。2016秋數(shù)據(jù)科學與軟件工程學院1292.2.1數(shù)據(jù)結(jié)構(gòu)與算法的關(guān)系在程序設(shè)計和軟件開發(fā)的實踐和理論中,存在過以數(shù)據(jù)為中心和以操作為中心的開發(fā)方法。更多時候,軟件開發(fā)者在數(shù)據(jù)與算法之間尋找均衡的設(shè)計方法,同時兼顧數(shù)據(jù)結(jié)構(gòu)與算法。面向?qū)ο蟮某绦蛟O(shè)計語言和面向?qū)ο箝_發(fā)方法就是綜合了數(shù)據(jù)與操作,將其封裝成一個軟件實體——對象,完成用戶需求分析、軟件建模與軟件構(gòu)造。2016秋數(shù)據(jù)科學與軟件工程學院1302.2.2選擇與設(shè)計數(shù)據(jù)結(jié)構(gòu)算式與習題的基本數(shù)據(jù)結(jié)構(gòu)設(shè)計1:把算式理解成具有一定組成元素的結(jié)構(gòu)——兩個運算數(shù)、一個加或減法的運算符,以及結(jié)果。程序設(shè)計風格操作數(shù)的命名獨立變量和非獨立變量2016秋數(shù)據(jù)科學與軟件工程學院1312.2.2選擇與設(shè)計數(shù)據(jù)結(jié)構(gòu)一個結(jié)構(gòu)類型是否包含非獨立變量,應該考慮下列因素。①獲取非獨立變量值的難易程度。②使用非獨立變量的頻繁程度。2016秋數(shù)據(jù)科學與軟件工程學院1322.2.2選擇與設(shè)計數(shù)據(jù)結(jié)構(gòu)對于包含算式的習題,自然地選擇數(shù)組。數(shù)組是有限個同類型元素的有序集合。絕大多數(shù)高級程序設(shè)計語言都有內(nèi)置數(shù)組。習題Exercise可以定義成以結(jié)構(gòu)體的算式為元素的數(shù)組:2016秋數(shù)據(jù)科學與軟件工程學院1332.2.2選擇與設(shè)計數(shù)據(jù)結(jié)構(gòu)設(shè)計2:使用一個包含三個成員的數(shù)組[operand,operand2,operator]表示算式Equation。語言要求數(shù)組成員屬于同一類型,故將算式中的運算符operator定義成整數(shù)類型??梢杂貌煌臄?shù)值對應不同的運算符,如0表示“加”,1表示“減”。習題Exercise仍然使用數(shù)組,可視為一個[50,3]的二維數(shù)組。2016秋數(shù)據(jù)科學與軟件工程學院1342.2.2選擇與設(shè)計數(shù)據(jù)結(jié)構(gòu)比較首先,數(shù)據(jù)結(jié)構(gòu)的設(shè)計是否滿足實際問題的需要?是否直接反映了問題本身?第二,數(shù)據(jù)結(jié)構(gòu)的設(shè)計是否容易編程實現(xiàn)?第三,對解決問題的操作是否給予支持?即是否方便算法的設(shè)計與實現(xiàn)。第四,設(shè)計的質(zhì)量如何?包括可讀性、易修改性、可擴展性、易維護性等。2016秋數(shù)據(jù)科學與軟件工程學院1352.2.2選擇與設(shè)計數(shù)據(jù)結(jié)構(gòu)2016秋數(shù)據(jù)科學與軟件工程學院1362.2.2選擇與設(shè)計數(shù)據(jù)結(jié)構(gòu)符號串直接顯示了人易讀的形式;節(jié)省存儲空間。符號沒有語義(數(shù)據(jù)類型),需要解析;結(jié)構(gòu)體表示出算式組成的數(shù)據(jù)類型;節(jié)省存儲空間。要用轉(zhuǎn)換函數(shù)才能顯示并輸出一個算式。數(shù)組任意表示復雜的算式;容易擴展到兩個、甚至數(shù)十個運算符;節(jié)省存儲空間。算式成分與數(shù)組的位置需要映射;要用轉(zhuǎn)換函數(shù)才能顯示并輸出一個算式。2016秋數(shù)據(jù)科學與軟件工程學院1372.2.2選擇與設(shè)計數(shù)據(jù)結(jié)構(gòu)小結(jié):(1)算式的三種數(shù)據(jù)結(jié)構(gòu)都能滿足需求。(2)如程序要求擴展或改善,則會要求代碼易讀、結(jié)構(gòu)穩(wěn)定,才容易理解、修改和擴充。如,檢查算式是否重復,或在習題中查找算式,設(shè)計1和2比代碼2.1有明顯優(yōu)勢。再如,增加乘、除法運算,三種數(shù)據(jù)結(jié)構(gòu)都不變,代碼2.1的算式輸出不變,但要增加解析操作,從符號串分解出乘和除;設(shè)計1和2需要增加乘、除法運算符的顯示方式,而設(shè)計2要增加兩個映射(比如3對應乘法)。結(jié)論:總體考慮,把算式成分明確表示出來的結(jié)構(gòu)體是目前算式的最佳數(shù)據(jù)結(jié)構(gòu)。2016秋數(shù)據(jù)科學與軟件工程學院1382.2.2選擇與設(shè)計數(shù)據(jù)結(jié)構(gòu)算法分析與其他數(shù)據(jù)結(jié)構(gòu)案例隱含要求:不允許出現(xiàn)重復的算式。對于數(shù)組,要實現(xiàn)算式比較算法。產(chǎn)生50個算式的習題總共需要的比較次數(shù)是:0+1+2+…+49=(0+49)×50/2=1225。產(chǎn)生有正整數(shù)n個不同算式的習題,算法的復雜性是O(n2)?!凹稀薄UZ言實現(xiàn)了集合的基本操作,包括插入、判定一個元素是否在集合中。而且,集合中元素數(shù)量可以動態(tài)變化。如此構(gòu)造一個習題的算法就是線性的。2016秋數(shù)據(jù)科學與軟件工程學院1392.2.3選擇與設(shè)計算法1.習題與算式的分離算式與習題是兩個完全不同的數(shù)據(jù)。算式是具有滿足一定約束條件的組成元素和結(jié)構(gòu)的數(shù)據(jù),不是簡單的符號串。習題包含了數(shù)目確定的不同的算式,它像一個容器把算式存儲起來。它們的產(chǎn)生方式不同,操作和使用也不相同。2016秋數(shù)據(jù)科學與軟件工程學院1402.2.3選擇與設(shè)計算法1.習題與算式的分離把習題和算式明確地從代碼中抽出,并分別用合適的數(shù)據(jù)結(jié)構(gòu)表示,有助于各自的設(shè)計與實現(xiàn),也能實現(xiàn)不同的算式和習題的任意組合。假設(shè)算式有三種數(shù)據(jù)結(jié)構(gòu):結(jié)構(gòu)體、一維數(shù)組和字符串;習題有4種選擇:一維數(shù)組、集合、隊列及不需數(shù)據(jù)結(jié)構(gòu)(如代碼2.1),則案例程序可以有12種數(shù)據(jù)結(jié)構(gòu)的組合方式。2016秋數(shù)據(jù)科學與軟件工程學院1412.2.3選擇與設(shè)計算法1.習題與算式的分離而且,不僅一個程序的數(shù)據(jù)結(jié)構(gòu)具有不同的組合方式。如果把數(shù)據(jù)結(jié)構(gòu)連同對它們的操作也都封裝到一個模塊——最簡單的就是函數(shù),那么,包含了數(shù)據(jù)與操作的這些函數(shù)可以作為程序的模塊使用??梢蕴岣叱绦虻慕Y(jié)構(gòu)性和可維護性,如可以替換相同功能、不同實現(xiàn)的模塊,而不影響程序的功能。2016秋數(shù)據(jù)科學與軟件工程學院1422.2.3選擇與設(shè)計算法2.算式產(chǎn)生與其約束條件的分離考慮到程序的可擴展性、可修改性,例如,允許不止一個加法或減法運算,或者將算式數(shù)值范圍擴大到500、1000等。分別定義運算數(shù)生成函數(shù)與約束條件檢測函數(shù),對滿足一定條件的運算數(shù)才生成算式?!皾M足100以內(nèi)整數(shù)”的條件不僅適合兩個運算數(shù),也適用于其結(jié)果。2016秋數(shù)據(jù)科學與軟件工程學院1432.2.3選擇與設(shè)計算法3.加減法算式的分離為了能夠產(chǎn)生全加、全減和混合三種類型的習題,應當分別編寫加法算式和減法算式函數(shù),然后隨機地選擇這兩種算式,就能生成混合運算的習題。2016秋數(shù)據(jù)科學與軟件工程學院1442.2.3選擇與設(shè)計算法2016秋數(shù)據(jù)科學與軟件工程學院1452.3模塊化設(shè)計理論初步2.3.1模塊化原則2.3.2模塊的內(nèi)聚性2.3.3模塊間的耦合性2016秋數(shù)據(jù)科學與軟件工程學院1462.3.1模塊化原則Meyer提出了5條標準來評價一種設(shè)計方法是否定義了有效的模塊系統(tǒng)的能力。(1)模塊可分解性。(2)模塊可組裝性。(3)模塊可理解性。(4)模塊連續(xù)性。(5)模塊保護性。2016秋數(shù)據(jù)科學與軟件工程學院1472.3.1模塊化原則模塊的獨立程度可以由兩個定性標準來度量——內(nèi)聚和耦合。內(nèi)聚衡量一個模塊內(nèi)部各個元素之間相互結(jié)合的緊密程度;耦合衡量不同模塊彼此間互相依賴(連接)的緊密程度。2016秋數(shù)據(jù)科學與軟件工程學院1482.3.2模塊的內(nèi)聚性內(nèi)聚性是對一個模塊內(nèi)部各個組成元素之間相互結(jié)合的緊密程度的度量指標。模塊中組成元素結(jié)合得越緊密,模塊的內(nèi)聚性就越高,模塊的獨立性也就越高。理想的內(nèi)聚性要求模塊的功能應明確、單一,即一個模塊只做一件事情。2016秋數(shù)據(jù)科學與軟件工程學院1492.3.2模塊的內(nèi)聚性內(nèi)聚有如下7種,由弱到強排列如下。(1)偶然內(nèi)聚(2)邏輯內(nèi)聚(3)時間內(nèi)聚(4)過程內(nèi)聚(5)通信內(nèi)聚(6)順序內(nèi)聚(7)功能內(nèi)聚2016秋數(shù)據(jù)科學與軟件工程學院1502.3.3模塊間的耦合性耦合性是一個模塊與系統(tǒng)內(nèi)其他模塊及與外部世界的關(guān)聯(lián)程度的度量。耦合的強弱取決于模塊間接口的復雜性、調(diào)用模塊的方式及通過界面?zhèn)魉蛿?shù)據(jù)的多少。在軟件開發(fā)中,應該追求盡可能松散耦合的系統(tǒng)。2016秋數(shù)據(jù)科學與軟件工程學院1512.3.3模塊間的耦合性耦合度從低到高可分為7級。非直接耦合數(shù)據(jù)耦合標記耦合控制耦合外部耦合公共耦合內(nèi)容耦合2016秋數(shù)據(jù)科學與軟件工程學院1522.3.3模塊間的耦合性耦合是影響軟件復雜程度的一個重要因素。一般而言,應該采取下述設(shè)計原則:應盡量使用數(shù)據(jù)耦合,減少控制耦合,限制外部環(huán)境耦合和公共耦合,杜絕內(nèi)容耦合,降低接口的復雜度。2016秋數(shù)據(jù)科學與軟件工程學院1532.3.3模塊間的耦合性模塊的內(nèi)聚性和耦合性是兩個相互對立且又密切相關(guān)的概念。軟件概要設(shè)計的目標是力求增加模塊的內(nèi)聚,盡量減少模塊間的耦合。在程序結(jié)構(gòu)中,各模塊的內(nèi)聚程度越高,模塊間的耦合程度就越低。雖然這種關(guān)聯(lián)不是絕對的,但是,增加內(nèi)聚比減少耦合更重要,軟件開發(fā)者應當把更多的注意力集中到提高模塊的內(nèi)聚程度。2016秋數(shù)據(jù)科學與軟件工程學院1542.4測試程序IEEE軟件工程標準術(shù)語:軟件測試使用人工或自動手段來運行或測定某個系統(tǒng)的過程,目的在于檢測它是否滿足規(guī)定的需求或者是否弄清預期結(jié)果與實際結(jié)果之間的差別。測試是對程序或系統(tǒng)能否完成特定任務建立信心的過程。軟件測試是說明程序是否正確的最基本的一種技術(shù)手段。2016秋數(shù)據(jù)科學與軟件工程學院1552.4測試程序執(zhí)行程序測試時,要考慮下列因素。首先,如何判定程序的運行結(jié)果是否滿足了需求?上面列出的需求是否可以判定對錯?其次,如何執(zhí)行程序測試?是否需要記錄?如何記錄?軟件測試應該盡量詳細、完整地記錄下來。測試執(zhí)行與記錄可以手工完成,也可以借助軟件工具或框架完成,還可以通過編寫測試代碼完成。第三,需要運行程序多少次才能說明程序正確了?或者說,選擇什么樣的輸入數(shù)據(jù)、涵蓋了哪些程序范圍就可以說明了程序的正確性?2016秋數(shù)據(jù)科學與軟件工程學院1562.4測試程序2.4.1測試需求2.4.2測試設(shè)計與測試用例2016秋數(shù)據(jù)科學與軟件工程學院1572.4.1測試需求由于對用戶需求理解的偏差,要執(zhí)行軟件測試,實現(xiàn)測試目的,首要任務是要仔細地分析用戶需求和設(shè)計,梳理含糊不清、模棱兩可、相互矛盾的需求,明確、細化和羅列出需求,并且將每個需求表示成可以檢測的測試需求。例如,要求運算數(shù)的數(shù)值范圍是0~100。[0,100]、(0,100)、(0,100]、[0,100)。2016秋數(shù)據(jù)科學與軟件工程學院1582.4.1測試需求有時用戶難以精確地表示需求,需要在使用之后“感覺”到?jīng)]有問題了。這就要求程序員具有一定的經(jīng)驗,與用戶溝通交流、對問題深入理解、良好的軟件設(shè)計等能力及對編程語言的掌握程度等,才能開發(fā)出滿足用戶要求的軟件。針對軟件開發(fā)中用戶需求的不確定性、經(jīng)常變化等問題,出現(xiàn)了用戶聯(lián)合開發(fā)方法(JointApplicationDevelopment,JAD)。特別地,敏捷開發(fā)方法要求客戶參與軟件開發(fā)。2016秋數(shù)據(jù)科學與軟件工程學院1592.4.1測試需求其次,測試需求要求程序的預期結(jié)果和實際運行結(jié)果都要明確、合理、可觀察并可比較。案例要求50道算式的需求非常明確。2016秋數(shù)據(jù)科學與軟件工程學院1602.4.1測試需求為了測試程序是否包含某個算式,一定要運行整個程序嗎?如同采用分解和模塊化技術(shù),分而治之地解決一個較大問題的軟件開發(fā),分解也同樣適用于軟件測試。為了方便、快速地檢測一個用戶需求或者特定功能是否得到滿足,可以針對性地設(shè)計測試,或者測試程序的一部分。一種策略是分析用戶需求,把它細化成一個個具體的、獨立的、功能單一的測試需求。2016秋數(shù)據(jù)科學與軟件工程學院1612.4.1測試需求將代碼2.1的測試需求分解如下:(1)程序是否能正確地產(chǎn)生滿足條件的加法算式?(確定的程序)(2)程序是否能正確地產(chǎn)生滿足條件的減法算式?(確定的程序)(3)程序是否能正確地產(chǎn)生滿足條件的加法或減法算式?(隨機性)(4)進一步,還可以繼續(xù)分解成如下的測試需求:程序是否產(chǎn)生了[0..100]范圍的值,或者[1,100]范圍的值,或者(0,100)范圍的值?2016秋數(shù)據(jù)科學與軟件工程學院1622.4.2測試設(shè)計與測試用例測試設(shè)計不同于測試用例設(shè)計。測試設(shè)計的內(nèi)容包含設(shè)計測試用例,此外還包括決定是否實施所有層次的測試、是否采用測試工具或自動化測試框架、哪些測試采用哪些工具、如何組織人員進行測試等。IEEE,測試用例是一組輸入、運行條件和通過/失敗準則。簡單地說,測試用例是一組測試數(shù)據(jù)和預期結(jié)果。2016秋數(shù)據(jù)科學與軟件工程學院1632.4.2測試設(shè)計與測試用例程序的運行結(jié)果分為三類:產(chǎn)生的值。如局部觀察的輸出(數(shù)值、文字、圖片、聲音等)或者操作、存儲的輸出。狀態(tài)變化。如程序的狀態(tài)變化、數(shù)據(jù)庫的狀態(tài)變化。必須一起解釋為輸出才有效的一個序列或一組值。測試用例設(shè)計的核心就是設(shè)計測試輸入,即測試數(shù)據(jù)。2016秋數(shù)據(jù)科學與軟件工程學院1642.4.2測試設(shè)計與測試用例【例2.1】一個生成整數(shù)減法的程序,輸入是兩個整數(shù),要求輸出它們的差,結(jié)果不能為負數(shù)。2016秋數(shù)據(jù)科學與軟件工程學院1652.4.2測試設(shè)計與測試用例對每個測試用例,將程序運行結(jié)果與預期結(jié)果比較。若相等,表示待測程序“通過”了測試數(shù)據(jù);若不相等,表示待測程序未通過測試數(shù)據(jù),即測試“失敗”??赡艹霈F(xiàn)其他情況,沒有執(zhí)行所有的測試用例,比如因某個測試數(shù)據(jù)導致待測程序沒能運行完而退出,或者程序異常退出,或者用戶中斷程序運行等。2016秋數(shù)據(jù)科學與軟件工程學院1662.4.2測試設(shè)計與測試用例測試結(jié)果的判定可能會存在誤判和漏判。由于測試數(shù)據(jù)或預期結(jié)果的錯誤而導致顯示待測程序可能有誤,稱為測試誤判。如果待測程序有錯,而測試沒有發(fā)現(xiàn)錯誤,稱為測試漏判。如何減少漏判,即如何通過測試發(fā)現(xiàn)程序中存在錯誤,實際上就是如何設(shè)計測試和測試數(shù)據(jù),使得待測程序不能通過一些測試用例。理論上,測試不能證明程序沒有錯誤,而是通過測試發(fā)現(xiàn)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年房產(chǎn)認購專項協(xié)議范本
- 2024年成品油銷售協(xié)議模板
- 2023-2024學年珠海市全國大聯(lián)考(江蘇卷)高三第二次數(shù)學試題試卷
- 2024年高效代理合作招募協(xié)議模板
- 2024年幼教崗位聘用協(xié)議范本
- 彩鋼瓦安裝工程協(xié)議模板2024年
- 2024年海水產(chǎn)品長期供應協(xié)議模板
- 2024年度潤滑油分銷協(xié)議范本
- 文書模板-《硬件設(shè)計合同》
- 2024房產(chǎn)居間服務協(xié)議模板
- 小學高年級課后服務 scratch3.0編程教學設(shè)計 一階第6課 憤怒的小鳥3.0 教學設(shè)計
- 《糖尿病足感染診斷治療指南》解讀及進展課件
- 小學生主題班會奧運精神開學第一課(課件)
- 新解讀《JTG 5120-2021公路橋涵養(yǎng)護規(guī)范》
- 我們喜歡的動畫片(課件)三年級上冊綜合實踐活動教科版
- 2024年秋季學期新人教版七年級上冊英語課件 Unit 4 My Favourite Subject(第4課時)SectionB 1a-1d
- 讀書分享課件:《一句頂一萬句》
- 2024年涉密人員考試試題庫保密基本知識試題附答案(考試直接用)
- 2024年黑龍江哈爾濱市文化廣電和旅游局“丁香人才周”(春季)事業(yè)單位引才招聘24人高頻考題難、易錯點模擬試題(共500題)附帶答案詳解
- 教案模板電子版
- 項目化學習在跨學科教學中的實施
評論
0/150
提交評論