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