基于案例的軟件構(gòu)造教程(第2版)課件 05用戶交互的軟件構(gòu)造;06軟件重構(gòu)與交付;07GUI軟件構(gòu)造_第1頁
基于案例的軟件構(gòu)造教程(第2版)課件 05用戶交互的軟件構(gòu)造;06軟件重構(gòu)與交付;07GUI軟件構(gòu)造_第2頁
基于案例的軟件構(gòu)造教程(第2版)課件 05用戶交互的軟件構(gòu)造;06軟件重構(gòu)與交付;07GUI軟件構(gòu)造_第3頁
基于案例的軟件構(gòu)造教程(第2版)課件 05用戶交互的軟件構(gòu)造;06軟件重構(gòu)與交付;07GUI軟件構(gòu)造_第4頁
基于案例的軟件構(gòu)造教程(第2版)課件 05用戶交互的軟件構(gòu)造;06軟件重構(gòu)與交付;07GUI軟件構(gòu)造_第5頁
已閱讀5頁,還剩202頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第5章

用戶交互的軟件構(gòu)造第5章用戶交互的軟件構(gòu)造本章學(xué)習(xí)以鍵盤為輸入設(shè)備、以屏幕為輸出設(shè)備的用戶交互界面的軟件構(gòu)造,包括如何把多個(gè)模塊實(shí)現(xiàn)的功能整合到一個(gè)程序的軟件集成。通過交互式語音應(yīng)答系統(tǒng)的層次結(jié)構(gòu)的菜單交互界面的構(gòu)造,學(xué)習(xí)用戶功能與實(shí)現(xiàn)代碼的關(guān)聯(lián)。初步學(xué)習(xí)用戶交互的基本概念、基本原理、設(shè)計(jì)原則及常用的靜態(tài)測試方法。學(xué)習(xí)軟件集成及其相關(guān)的集成測試、回歸測試、基于模型的測試技術(shù)。完成案例基于菜單的用戶交互的構(gòu)造。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院2第5章用戶交互的軟件構(gòu)造故事6新的需求:(1)程序集成,把已經(jīng)編寫的代碼整合到一個(gè)程序,即一個(gè)啟動(dòng)主程序main();(2)程序界面,把程序的所有功能都放在一個(gè)界面上,讓用戶選擇功能并執(zhí)行;(3)交互練習(xí),或者說是在機(jī)器上使用程序做口算練習(xí),并完成批改。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院3第5章用戶交互的軟件構(gòu)造故事62016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院4第5章用戶交互的軟件構(gòu)造(1)正確選擇并執(zhí)行了功能后的程序界面是什么?可能的設(shè)計(jì)包括:①執(zhí)行完一個(gè)功能后程序退出,這顯然違背設(shè)計(jì)用戶界面的目的;②執(zhí)行完一個(gè)功能后,允許用戶繼續(xù)選擇,但是,僅僅顯示“請(qǐng)選擇…”,則需要用戶記憶序號(hào)對(duì)應(yīng)的功能。(2)何時(shí)結(jié)束程序運(yùn)行?(3)要是用戶不小心輸錯(cuò)了數(shù)字怎么辦?(4)功能2如何實(shí)現(xiàn)選擇練習(xí)題?是加法題、減法題或是混合題?是否還是要用戶通過輸入選擇,即通過二級(jí)菜單?二級(jí)菜單是顯示在主菜單中,還是進(jìn)入功能后再顯示?從低層功能完成后,直接顯示當(dāng)前層的菜單還是回到主菜單?等等。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院5第5章用戶交互的軟件構(gòu)造5.1程序及其功能的使用5.2用戶交互概述5.3用戶交互的開發(fā)5.4靜態(tài)測試5.5軟件集成與測試5.6案例分析與實(shí)踐5.7討論與提高5.8思考與練習(xí)題2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院65.1程序及其功能的使用5.1.1程序的兩個(gè)觀察視角5.1.2多個(gè)功能程序的整合5.1.3多個(gè)功能的組織與呈現(xiàn)5.1.4基于菜單式功能選擇的用戶交互2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院75.1.1程序的兩個(gè)觀察視角程序可以從兩個(gè)角度觀察和理解。程序員是程序的產(chǎn)生者。他們看到程序的內(nèi)部組成——變量、語句、函數(shù)、類及其關(guān)聯(lián)所形成的結(jié)構(gòu)。程序員通過編寫函數(shù)、方法、

類等程序單元,實(shí)現(xiàn)用戶要求的功能。另一方面,對(duì)用戶而言,程序?qū)崿F(xiàn)其需求。用戶可以使用程序完成所要求的功能。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院85.1.1程序的兩個(gè)觀察視角不論是傳統(tǒng)的命令行、菜單選擇的程序輸入/輸出,還是流行的圖形用戶界面GUI、觸摸式,以及聲控、手勢或腦控制的操作方式,都是用戶使用程序、與程序進(jìn)行交互的形式。程序員都應(yīng)該理解和掌握用戶和程序交互的基本原則和編程實(shí)現(xiàn)技術(shù)。程序最終是要把用戶的要求或指令轉(zhuǎn)換成相應(yīng)的函數(shù)或方法。當(dāng)然,用戶的操作和程序之間的關(guān)聯(lián)機(jī)制有所不同。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院95.1.2多個(gè)功能程序的整合當(dāng)一個(gè)程序不止一個(gè)功能(用戶角度),或者包含多個(gè)函數(shù)(程序員角度)時(shí),如何呈現(xiàn)并執(zhí)行這些功能涉及兩方面問題:(1)如何把若干功能合理地呈現(xiàn)出來,便于用戶操作;(2)如何把若干函數(shù)整合,便于程序執(zhí)行。第一個(gè)問題是用戶界面或交互的設(shè)計(jì),第二個(gè)問題是程序的集成。用戶界面可以視為集成程序的一種方式。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院105.1.3多個(gè)功能的組織與呈現(xiàn)程序的用戶界面集成實(shí)質(zhì)上就是如何把一組功能合理地組織并呈現(xiàn)給用戶使用。如果不考慮文字或圖形的方式,可以把功能以某種順序全部羅列出來,或者把所有功能按照某個(gè)規(guī)則分組、分層地結(jié)構(gòu)化地呈現(xiàn)。例如:文件目錄。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院115.1.3多個(gè)功能的組織與呈現(xiàn)把程序眾多功能劃分成組(抽象),按照層次結(jié)構(gòu),從抽象到具體直至一個(gè)功能,為用戶使用提供了方便易用的界面。這種用戶交互程序的形式無論是采用文字還是圖形,基本原理都一樣。圖5.4所示為一個(gè)IDE的圖形用戶界面。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院125.1.3多個(gè)功能的組織與呈現(xiàn)目前的移動(dòng)應(yīng)用APP眾多,手機(jī)屏幕大小有限,有兩種基本方式組織應(yīng)用:一種方式是以屏為單位連續(xù)擺放應(yīng)用圖標(biāo),排滿后增加一個(gè)屏幕,繼續(xù)順序放置;另一種方式是文件夾,它可以按照順序放置把一定數(shù)量的應(yīng)用。圖形化界面可以通過單擊表示功能或應(yīng)用的圖標(biāo)進(jìn)入下一級(jí)菜單,直接打開應(yīng)用或某個(gè)功能。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院135.1.3多個(gè)功能的組織與呈現(xiàn)菜單類似文件夾,菜單中可以包含(子)菜單,構(gòu)成層次結(jié)構(gòu)。菜單結(jié)構(gòu)像一棵樹。葉子節(jié)點(diǎn)表示獨(dú)立的、具體的用戶功能(原子功能),是提供給用戶的服務(wù)或操作。樹根和內(nèi)部節(jié)點(diǎn)是一個(gè)子菜單,表示一組抽象的功能(功能組),用戶必須繼續(xù)從中選擇,直至原子功能。菜單的設(shè)計(jì)可以是自頂向下的方式,即從抽象的主菜單(根)逐步具體到子菜單,直至原子功能;也可以是自底向上的方式,把具體的功能逐步抽象、分組成子菜單,直至主菜單。無論哪種策略,都需要運(yùn)用抽象和分類的基本原則。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院145.1.4基于菜單式功能選擇的用戶交互菜單選擇用層次化結(jié)構(gòu)組織把程序的多個(gè)功能組織并呈現(xiàn)出來,是用戶交互的一種重要形式。它可以在鍵盤、觸摸屏、鼠標(biāo)、聲音等多種輸入/輸出設(shè)備中應(yīng)用。菜單式功能選擇的用戶交互在智能化系統(tǒng)(如自助服務(wù)、自動(dòng)語音應(yīng)答系統(tǒng))中仍然不可或缺。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院155.1.4基于菜單式功能選擇的用戶交互在自動(dòng)語音應(yīng)答系統(tǒng)或交互式語音應(yīng)答(InteractiveVoiceResponse,IVR)系統(tǒng)中,用戶通過撥打指定電話號(hào)碼,根據(jù)系統(tǒng)的語音提示收聽所需語音信息或服務(wù),或者參與聊天、交友等互動(dòng)式服務(wù)。IVR系統(tǒng)的應(yīng)用領(lǐng)域包括銀行、保險(xiǎn)公司、航空公司、電信、旅游及政府、醫(yī)療、健康、保險(xiǎn)、教育和其他金融服務(wù)等。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院165.1.4基于菜單式功能選擇的用戶交互IVR系統(tǒng)通常把服務(wù)功能與數(shù)字、若干特殊符號(hào)(如井號(hào)#和星號(hào)*)關(guān)聯(lián)起來,讓用戶輸入數(shù)字或特殊符號(hào)獲取相應(yīng)的功能或進(jìn)入某個(gè)子菜單(功能組)。例如,銀行、移動(dòng)、電信等的客服熱線。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院175.1.4基于菜單式功能選擇的用戶交互【例5.1】某智慧城市目前提供了如下便民服務(wù):生活繳費(fèi)、預(yù)約掛號(hào)、公交服務(wù)、違章查詢、天氣預(yù)報(bào)、常用電話、航空服務(wù)、鐵路服務(wù)、長途車服務(wù)、社保服務(wù)、公積金服務(wù)等。生活繳費(fèi)包括:自助繳納有線電視費(fèi)、水費(fèi)、電費(fèi)、燃?xì)赓M(fèi)、手機(jī)費(fèi)、一卡通費(fèi);公交服務(wù)主要包括:實(shí)時(shí)查詢和換乘查詢。常用電話包括:日常生活、交警大隊(duì)、快遞服務(wù)、網(wǎng)購電話、各區(qū)街道、各派出所、公交咨詢、醫(yī)院電話、銀行保險(xiǎn)、鐵路、長途、航空、家政服務(wù)、出入境、投訴舉報(bào)等。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院185.1.4基于菜單式功能選擇的用戶交互特點(diǎn):用戶需求對(duì)功能進(jìn)行了初步劃分和分層,菜單結(jié)構(gòu)應(yīng)該盡可能與用戶要求的結(jié)構(gòu)一致。但是,從設(shè)計(jì)和實(shí)現(xiàn)的角度,要對(duì)一組或一層中較多的功能進(jìn)一步劃分,使得每個(gè)菜單中的選項(xiàng)在一定的數(shù)量范圍內(nèi)。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院195.1.4基于菜單式功能選擇的用戶交互第一級(jí)菜單,即主菜單包含11個(gè)功能。在IVR中通常使用數(shù)字0~9對(duì)應(yīng)某個(gè)功能,此外還要有返回上一層菜單、直接返回主菜單的功能,有時(shí)還提供重聽的功能。而一般的電話(含手機(jī))包含星號(hào)鍵和井號(hào)鍵。這樣,主菜單及任何一級(jí)菜單中的功能就不能超過9個(gè),如果超過9個(gè),則需要把相關(guān)的功能抽象地組成一個(gè)功能組,放在下一級(jí)菜單中。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院205.1.4基于菜單式功能選擇的用戶交互那么如何分組呢?原則一:按照分類法,把相似、相近或相關(guān)的功能放在一個(gè)組里。原則二:應(yīng)以最少的交互次數(shù)提供最常用的功能,即把最常用的功能盡可能地放在高層菜單。這樣,最少應(yīng)該把主菜單11個(gè)功能中的兩個(gè)功能放在一個(gè)功能組,就能用數(shù)字0~9對(duì)應(yīng)剩余的9個(gè)功能和一個(gè)功能組。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院215.1.4基于菜單式功能選擇的用戶交互2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院225.1.4基于菜單式功能選擇的用戶交互下面給出該菜單結(jié)構(gòu)的模擬實(shí)現(xiàn),以便讓用戶體驗(yàn)界面是否合適。所謂模擬,指的是沒有實(shí)現(xiàn)或不調(diào)用已經(jīng)實(shí)現(xiàn)的用戶功能,而是用簡單的、通常只包含一條打印語句的模擬函數(shù)代替。模擬程序的主要目的是檢測菜單結(jié)構(gòu)、菜單項(xiàng)的訪問及菜單之間的跳轉(zhuǎn)。如果已經(jīng)實(shí)現(xiàn)了某個(gè)用戶功能,則可以調(diào)用執(zhí)行。最終,程序要經(jīng)過集成的策略和步驟,用實(shí)現(xiàn)的用戶功能替換每個(gè)模擬函數(shù)。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院235.2用戶交互概述5.2.1基本概念5.2.2交互設(shè)備5.2.3交互風(fēng)格5.2.4交互界面5.2.5交互設(shè)計(jì)的原則2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院245.2.1基本概念用戶交互或人機(jī)交互是有關(guān)交互式計(jì)算機(jī)系統(tǒng)的設(shè)計(jì)、評(píng)估、實(shí)現(xiàn)及與之相關(guān)現(xiàn)象的學(xué)科??梢园讶藱C(jī)交互理解為是關(guān)于可用性的學(xué)習(xí)和實(shí)踐,是關(guān)于理解和構(gòu)建用戶樂于使用且易于使用的軟件和技術(shù),并能在使用時(shí)發(fā)現(xiàn)產(chǎn)品有效性的學(xué)科。人機(jī)交互的目的是開發(fā)及提高計(jì)算機(jī)相關(guān)系統(tǒng)的安全性、效用、有效性、高效性和可用性。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院255.2.2交互設(shè)備借助交互設(shè)備對(duì)計(jì)算機(jī)系統(tǒng)輸入數(shù)據(jù)、指令或信息,并從系統(tǒng)獲得反饋。一個(gè)計(jì)算機(jī)系統(tǒng)通常使用以下幾種交互設(shè)備。鍵盤是文本輸入的主要設(shè)備,也是應(yīng)用最廣的輸入設(shè)備。定位設(shè)備在屏幕上通過指點(diǎn)物體實(shí)現(xiàn)對(duì)物體的操作或完成某個(gè)功能。如:鼠標(biāo)、光筆、觸摸屏/板、軌跡球、操縱桿等。顯示器是用戶從計(jì)算機(jī)得到反饋的主要輸出設(shè)備。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院265.2.3交互風(fēng)格設(shè)計(jì)者完成任務(wù)分析并識(shí)別出任務(wù)對(duì)象和動(dòng)作時(shí),可以選擇以下5種交互風(fēng)格:直接操縱菜單選擇表格填充命令語言自然語言2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院275.2.4交互界面交互界面是人和計(jì)算機(jī)進(jìn)行信息交換的通道,人通過交互界面向計(jì)算機(jī)輸入信息、進(jìn)行操作,計(jì)算機(jī)則通過交互界面向用戶提供信息,以供閱讀、分析和判斷。用戶界面是實(shí)現(xiàn)用戶交互、使用程序的手段。用戶交互是使用程序的本質(zhì)。人機(jī)交互只能通過特定的界面才能讓用戶更好地體驗(yàn)程序。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院285.2.4交互界面以下是幾種常見的基本人機(jī)交互界面。命令語言用戶界面。圖形用戶界面GUI。直接操作用戶界面。多媒體用戶界面。多通道用戶界面。虛擬現(xiàn)實(shí)技術(shù)。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院295.2.5交互設(shè)計(jì)的原則人機(jī)交互涉及心理學(xué)、認(rèn)知科學(xué)、計(jì)算機(jī)科學(xué)、產(chǎn)品設(shè)計(jì)、圖形設(shè)計(jì)等。3條基本原則(1)學(xué)習(xí)性。指的是新的用戶能用它進(jìn)行有效的交互并獲得最大的性能。(2)靈活性。是指用戶和系統(tǒng)能以多種方式交換信息。(3)健壯性。是指在決定成就和目標(biāo)評(píng)估方面對(duì)用戶提供的支持程度。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院305.2.5交互設(shè)計(jì)的原則8條黃金規(guī)則(1)盡量保持一致。(2)滿足普遍可用性。(3)提供信息反饋。(4)設(shè)計(jì)對(duì)話框以產(chǎn)生結(jié)束信息。(5)預(yù)防并成立錯(cuò)誤。(6)允許撤銷操作。(7)支持內(nèi)部控制點(diǎn)。(8)減輕短時(shí)記憶負(fù)擔(dān)。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院315.2.5交互設(shè)計(jì)的原則菜單設(shè)計(jì)的一般指導(dǎo)原則2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院325.3用戶交互的開發(fā)5.3.1交互設(shè)計(jì)基本過程5.3.2快速原型法2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院335.3.1交互設(shè)計(jì)基本過程圖5.8所示為交互設(shè)計(jì)的過程模型,體現(xiàn)了“迭代”和“以用戶為中心”的特征。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院345.3.1交互設(shè)計(jì)基本過程(1)標(biāo)識(shí)和建立用戶需求。交互設(shè)計(jì)的用戶需求包括:功能需求、數(shù)據(jù)需求、使用環(huán)境和可用性需求。(2)提出滿足需求的候選設(shè)計(jì)方案。概念設(shè)計(jì)和物理設(shè)計(jì)。(3)構(gòu)建交互式版本。開發(fā)用戶交互模型,通常是可運(yùn)行的原型軟件,包含用戶交互界面、交互形式、完成任務(wù)的基本流程等。(4)設(shè)計(jì)評(píng)估。即評(píng)估交互設(shè)計(jì)的可運(yùn)行和可接受性。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院355.3.2快速原型法快速原型是快速建立起來的可以在計(jì)算機(jī)上運(yùn)行的程序,它所能完成的功能往往是最終產(chǎn)品能完成的功能的一個(gè)子集。使用快速原型的目的是:在獲得用戶交互基本需求說明的基礎(chǔ)上,快速建立一個(gè)可以運(yùn)行的軟件,使用戶及時(shí)運(yùn)行和看到交互的形式和使用效果,并對(duì)交互需求說明進(jìn)行補(bǔ)充和精化,提出改進(jìn)意見;開發(fā)人員進(jìn)一步修改完善,如此循環(huán)迭代,直到得到一個(gè)用戶滿意的模型為止。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院365.3.2快速原型法(1)功能選擇原型和最終的軟件系統(tǒng)不同,兩者在功能范圍上的區(qū)別主要有以下兩個(gè)方面:最終系統(tǒng)是軟件需求全部功能的實(shí)現(xiàn),而原型只實(shí)現(xiàn)所選擇的部分功能;最終系統(tǒng)對(duì)每個(gè)軟件需求都要求詳細(xì)實(shí)現(xiàn),而原型僅僅是為了試驗(yàn)和演示用的,部分功能需求可以忽略或者模擬實(shí)現(xiàn)。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院375.3.2快速原型法(2)構(gòu)造原型根據(jù)用戶初步需求,開發(fā)出一個(gè)可以運(yùn)行的、主要包含界面的系統(tǒng),它應(yīng)滿足用戶提出的基本要求。(3)運(yùn)行和評(píng)價(jià)原型用戶在試用中能親自參加和面對(duì)一個(gè)可以實(shí)際運(yùn)行和操作的模型,能較為直觀和明確地進(jìn)一步提出需求,提出修改意見。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院385.3.2快速原型法(4)修改和完善原型根據(jù)修改意見進(jìn)行修改,修改系統(tǒng)原型,然后再進(jìn)行試用和評(píng)價(jià),這樣經(jīng)過有限次的循環(huán)反復(fù),逐步提高和完善,直到得到一個(gè)用戶滿意的系統(tǒng)模型為止。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院395.4靜態(tài)測試5.4.1程序的可用性與靜態(tài)測試5.4.2桌面檢查5.4.3代碼走查5.4.4正式審查5.4.5同行評(píng)審5.4.6檢查表5.4.7靜態(tài)程序分析2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院405.4.1程序的可用性與靜態(tài)測試程序的可用性指的是程序是否有用,包括用戶界面是否易用,主要有三個(gè)特征:有效性、效率和主觀滿意度。有效性是用戶完成特定任務(wù)和達(dá)成特定目標(biāo)時(shí)所具有的正確和完整程度。效率是用戶正確完成任務(wù)的程度與所用資源(如時(shí)間)的比率。主觀滿意度是用戶在使用產(chǎn)品過程中所感受到的主觀滿意和接受程度。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院415.4.1程序的可用性與靜態(tài)測試可用性的指標(biāo)分別是:易學(xué)性——產(chǎn)品是否易于學(xué)習(xí);交互效率——客戶使用產(chǎn)品完成具體任務(wù)的效率;易記性——客戶擱置某產(chǎn)品一段時(shí)間后是否仍然記得如何操作;容錯(cuò)性——操作錯(cuò)誤出現(xiàn)的頻率和嚴(yán)重程度如何。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院425.4.1程序的可用性與靜態(tài)測試根據(jù)是否運(yùn)行待測程序,軟件測試分為動(dòng)態(tài)測試和靜態(tài)測試。動(dòng)態(tài)測試通過設(shè)計(jì)有效的測試用例,運(yùn)行觀察程序的運(yùn)行行為、狀態(tài)變化及輸出等來判斷軟件是否存在問題。靜態(tài)測試不執(zhí)行程序,而是通過閱讀和分析代碼及相關(guān)材料、發(fā)現(xiàn)軟件錯(cuò)誤的活動(dòng)。靜態(tài)測試又稱人工手動(dòng)測試,是動(dòng)態(tài)測試和自動(dòng)化測試的補(bǔ)充,是軟件質(zhì)量保障的重要組成。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院435.4.1程序的可用性與靜態(tài)測試靜態(tài)測試的主要作用包括:發(fā)現(xiàn)程序在功能、邏輯構(gòu)造方面的錯(cuò)誤;驗(yàn)證實(shí)現(xiàn)的程序在需求和設(shè)計(jì)方面符合用戶的要求;確認(rèn)程序符合預(yù)先定義的開發(fā)規(guī)范和標(biāo)準(zhǔn);保證軟件開發(fā)過程的規(guī)范性;有助于程序員之間相互學(xué)習(xí)。靜態(tài)測試常見類型有桌面檢查、代碼走查、正式審查、同行評(píng)審及靜態(tài)程序分析。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院445.4.2桌面檢查桌面檢查(DeskChecking)是程序員個(gè)人模擬計(jì)算機(jī)“閱讀”程序,發(fā)現(xiàn)代碼錯(cuò)誤的方法。代碼走查(walkthrough)和正式審查(inspection)是通過組織其他程序員共同參與的團(tuán)隊(duì)檢查,是對(duì)傳統(tǒng)的程序員桌面檢查方式的改進(jìn)。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院455.4.3代碼走查代碼走查至少由兩人組成,其中一人協(xié)調(diào)走查,另一人扮演測試者。在走查過程中,由測試者提出一批測試用例,在走查會(huì)議上對(duì)每個(gè)測試用頭腦來執(zhí)行程序,在紙上或黑板上演變程序的執(zhí)行狀態(tài),從而發(fā)現(xiàn)程序錯(cuò)誤。在這個(gè)過程中,測試用例用作懷疑程序邏輯、計(jì)算或控制錯(cuò)誤的參照,測試用例本身并不重要。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院465.4.3代碼走查代碼走查主要從下列方面檢查程序的錯(cuò)誤:數(shù)據(jù)引用錯(cuò)誤、數(shù)據(jù)聲明錯(cuò)誤、邏輯錯(cuò)誤、計(jì)算錯(cuò)誤、判斷錯(cuò)誤、控制流程錯(cuò)誤、接口錯(cuò)誤、輸入/輸出錯(cuò)誤等。代碼開發(fā)人員對(duì)照講解設(shè)計(jì)意圖和程序代碼,特別是對(duì)有異議之處進(jìn)行解釋,有助于驗(yàn)證設(shè)計(jì)和實(shí)現(xiàn)之間的一致性。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院475.4.4正式審查一種正式的結(jié)構(gòu)化檢查和評(píng)估方法,一般有計(jì)劃、流程、結(jié)果和追查。審查小組至少有4人:一人負(fù)責(zé)協(xié)調(diào)、分發(fā)材料、安排進(jìn)程、確保錯(cuò)誤隨時(shí)得到改正,被檢測試程序的編碼人員,其他程序開發(fā)人員和一名測試人員。審查小組最好還要包括豐富經(jīng)驗(yàn)的程序員、編程語言的專家、未來的代碼維護(hù)人員、其他項(xiàng)目組成員,以及同組的程序員。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院485.4.4正式審查代碼審查通過會(huì)議實(shí)施,基本過程如下:協(xié)調(diào)人在代碼檢查前幾天分發(fā)程序清單、編碼規(guī)范和檢查清單;編碼人員講述程序的邏輯結(jié)構(gòu),其他人員提問題并判斷是否存在錯(cuò)誤;對(duì)照編碼規(guī)范、檢查清單分析程序;審查人員的注意力集中在發(fā)現(xiàn)錯(cuò)誤而非糾正錯(cuò)誤上(非調(diào)試);會(huì)議結(jié)束后,程序員會(huì)得到一份已發(fā)現(xiàn)錯(cuò)誤的清單。如果發(fā)現(xiàn)重大缺陷,在修改之后,還要重新召開會(huì)議審議。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院495.4.4正式審查采用正式審查時(shí)要注意以下幾點(diǎn):以會(huì)議形式審查,要制定會(huì)議目標(biāo)、流程和規(guī)則,結(jié)束后要編寫報(bào)告;按缺陷檢查表逐項(xiàng)檢查,避免漫無目標(biāo)檢查;發(fā)現(xiàn)問題適當(dāng)記錄,避免現(xiàn)場討論和修改;發(fā)現(xiàn)重大缺陷,改正后會(huì)議需要重開;檢查要點(diǎn)是缺陷檢查表,根據(jù)不同的項(xiàng)目,該表要不斷積累和完善。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院505.4.5同行評(píng)審?fù)性u(píng)審(reviewing)是對(duì)代碼的全面質(zhì)量評(píng)審,包括代碼的可維護(hù)性、可擴(kuò)展性、可使用性,以及安全和編程規(guī)范是否得到遵守,是軟件開發(fā)隊(duì)伍對(duì)程序質(zhì)量和信賴性進(jìn)行的自我評(píng)估。評(píng)審時(shí),一般挑選一個(gè)程序員作為組織者,由他再選擇若干同行參加評(píng)審。同行必須是真實(shí)的,即具有被評(píng)審者相同的背景(例如,均是Java程序員)。每個(gè)評(píng)審者都要挑選兩段程序進(jìn)行評(píng)審,比較和給出這兩段程序質(zhì)量上的優(yōu)缺點(diǎn)??梢远x更詳細(xì)的評(píng)價(jià)標(biāo)準(zhǔn),例如,對(duì)發(fā)現(xiàn)問題的嚴(yán)重程度分等級(jí)或加權(quán),從而定量地說明代碼的質(zhì)量和可信賴程序。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院515.4.5同行評(píng)審2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院525.4.6檢查表正式審查和同行評(píng)審都需要缺陷檢查表或檢查單。它列出了容易出現(xiàn)的典型錯(cuò)誤,以便讓編程人員和評(píng)審人員集中精力,依據(jù)代碼檢查單的問題,實(shí)施靜態(tài)測試,并記錄代碼中的錯(cuò)誤,以便在后期總結(jié)和統(tǒng)計(jì)錯(cuò)誤的類型、原因等,從而避免和預(yù)防代碼錯(cuò)誤。例如,Myers從數(shù)據(jù)引用錯(cuò)誤、數(shù)據(jù)聲明錯(cuò)誤、計(jì)算錯(cuò)誤、判斷錯(cuò)誤、控制流程錯(cuò)誤、接口錯(cuò)誤、輸入/輸出錯(cuò)誤等方面給出檢查單。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院535.4.7靜態(tài)程序分析靜態(tài)程序分析通過掃描源程序而發(fā)現(xiàn)可能的故障或異常。它不要求程序運(yùn)行,因而屬于靜態(tài)測試。它分析程序正文,識(shí)別程序中語句的差異,檢測語句構(gòu)造是否規(guī)范、推測程序的控制流、在很多場合計(jì)算出程序所有可能的值。靜態(tài)程序分析補(bǔ)充了語言編譯器提供的錯(cuò)誤檢測功能。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院545.4.7靜態(tài)程序分析靜態(tài)分析的目的是引起程序員對(duì)程序中異常(如未初始化的變量、未使用的變量、數(shù)值超出范圍)的警覺。盡管這些異常不一定是錯(cuò)誤條件,但是,它們經(jīng)常是程序設(shè)計(jì)錯(cuò)誤、遺漏或疏忽的結(jié)果所造成的。靜態(tài)程序分析能發(fā)現(xiàn)的故障如表5.2所示。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院555.4.7靜態(tài)程序分析靜態(tài)程序分析器不僅檢測代碼的故障,也檢查代碼是否遵循了規(guī)定的規(guī)范或風(fēng)格。圖5.9為Java靜態(tài)分析工具Checkstyle(圖5.9(a))和PMD(圖5.9(b))的使用截圖。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院565.5軟件集成與測試把實(shí)現(xiàn)各個(gè)功能的模塊、數(shù)據(jù)、用戶交互界面等模塊組織起來,構(gòu)建成一個(gè)完整的應(yīng)用程序的過程稱為軟件集成。與之相對(duì)應(yīng)的是集成測試。軟件集成主要體現(xiàn)并依賴于軟件設(shè)計(jì)或軟件架構(gòu)設(shè)計(jì),明確組成軟件的各個(gè)模塊的功能和接口。只要嚴(yán)格按照要求開發(fā),模塊之間就能通過良好定義的接口整合在一起,構(gòu)成一個(gè)完整的軟件系統(tǒng)。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院575.5軟件集成與測試軟件集成就是使多個(gè)軟件的功能集成到一個(gè)軟件,或是把軟件的各部分組合在一起成為一個(gè)可執(zhí)行的軟件。功能集成和界面集成是基本的軟件集成。功能集成指把具有不同功能的程序或模塊(函數(shù)、類、接口、庫等)通過函數(shù)調(diào)用、消息傳遞、繼承、包含、引用及共同的數(shù)據(jù)集等方式關(guān)聯(lián)起來,成為一個(gè)整體,完成更復(fù)雜的功能或提供比新程序組成單元更多的功能。界面集成指為具有不同功能的程序或模塊提供一個(gè)統(tǒng)一的用戶交互界面,方便用戶使用。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院585.5軟件集成與測試軟件集成含三個(gè)方面。①集成策略指對(duì)軟件的組成單元按照什么順序組織起來、構(gòu)成一個(gè)軟件,考慮的問題包括軟件組成單元之間的依賴關(guān)系、開發(fā)任務(wù)分配等。②集成內(nèi)容主要包括流程、數(shù)據(jù)、功能和界面。③集成技術(shù)指的是如何通過語法、語義、邏輯等關(guān)系把軟件的組成單元“粘合”起來。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院595.5軟件集成與測試集成測試的主要目的是檢測軟件組成單元的接口是否符合要求,它們的交互是否流暢,集成后的軟件能否按照設(shè)計(jì)合作完成要求的功能等。集成的前提是各個(gè)組成單元已經(jīng)完成開發(fā)并通過了(單元)測試。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院605.5軟件集成與測試圖5.11所示為案例程序功能的層次結(jié)構(gòu)。填充的方框表示尚未實(shí)現(xiàn)的模塊,有邊框的表示原子功能。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院615.5軟件集成與測試5.5.1驅(qū)動(dòng)模塊和樁模塊5.5.2集成策略5.5.3回歸測試5.5.4集成測試與策略2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院625.5.1驅(qū)動(dòng)模塊和樁模塊在集成軟件及其組成單元時(shí),為了使得集成的軟件可以編譯和運(yùn)行,需要模擬集成時(shí)尚未完成的組成單元、相關(guān)聯(lián)的環(huán)境之間的交互。常見的基本的模擬程序有驅(qū)動(dòng)模塊和樁模塊。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院635.5.1驅(qū)動(dòng)模塊和樁模塊驅(qū)動(dòng)模塊的主要任務(wù)是搜集或產(chǎn)生數(shù)據(jù)、把數(shù)據(jù)傳給待測程序、啟動(dòng)和執(zhí)行它。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院645.5.1驅(qū)動(dòng)模塊和樁模塊使用模擬程序的主要原因和目的如下。(1)模擬復(fù)雜的代碼。增量集成代碼時(shí),要關(guān)注模塊間的接口是否一致、模塊的交互邏輯是否矛盾、模塊的合作是否流暢等。采用模擬程序可以分離關(guān)注點(diǎn)。(2)模擬尚未實(shí)現(xiàn)的代碼。(3)模擬程序的整體性。把所有或部分代碼整合到一起,測試運(yùn)行一次可能會(huì)耗費(fèi)資源、時(shí)間等,為了檢測程序的整體結(jié)構(gòu)、用戶界面、全局邏輯、關(guān)鍵功能等,采用模擬程序替換實(shí)際程序可以加快實(shí)現(xiàn)特定的目標(biāo)。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院655.5.2集成策略傳統(tǒng)方法用樹狀的結(jié)構(gòu)圖示意一個(gè)程序的組織結(jié)構(gòu)。圖5.11表示了案例程序的功能結(jié)構(gòu),其中方框圖表示程序的功能模塊,連線表示模塊之間的控制關(guān)系或者功能的組成;樹的根表示總控模塊,它調(diào)用其他模塊完成程序的所有功能?;诔绦蚪Y(jié)構(gòu)的功能分解屬于基本的集成策略,主要有如下5種方式:一次性集成、增式集成、自底向上集成、自頂向下集成、基干集成。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院665.5.2集成策略1.一次性集成構(gòu)成一個(gè)程序的所有模塊在一次集成過程中組裝成最終的軟件。對(duì)圖5.11而言,一次性集成就是,首先完成這16個(gè)模塊的開發(fā)和測試,然后放在一起,構(gòu)成最終的軟件。難以發(fā)現(xiàn)和修改在一次性集成中出現(xiàn)的錯(cuò)誤。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院675.5.2集成策略2.增式集成增式集成,即以一個(gè)基本模塊或主模塊為基礎(chǔ),每次增加一個(gè)或一組模塊形成部分程序,在確保正確后再逐步增加模塊,直至所有模塊都集成至部分程序構(gòu)成軟件整體。增量集成中出現(xiàn)的錯(cuò)誤容易定位和修復(fù)。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院685.5.2集成策略3.自頂向下集成集成模塊從根部的控制模塊開始,以控制層次的順序,逐次增加模塊,直至形成整個(gè)程序的增式集成方式,稱為自頂向下集成。增量集成時(shí)要為其他尚未集成的模塊編寫樁,通過測試后,再逐步用模塊替換樁、執(zhí)行集成與測試。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院695.5.2集成策略集成測試的步驟:(1)測試主模塊,以樁模塊代替沒有完成開發(fā)的下級(jí)模塊;(2)依次用實(shí)現(xiàn)的模塊代替樁模塊;(3)每集成一個(gè)模塊,就測試部分程序,重點(diǎn)是新增的模塊及其與部分程序的交互;(4)必要時(shí)進(jìn)行回歸測試——重復(fù)之前的測試。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院705.5.2集成策略自頂向下集成策略的優(yōu)點(diǎn):在集成的任何時(shí)候都有一個(gè)可以運(yùn)行的程序。缺點(diǎn):樁模塊的開發(fā)代價(jià)有時(shí)會(huì)較大,而且正是由于樁模塊的存在使得部分程序難以得到充分的測試。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院715.5.2集成策略4.自底向上集成選擇獨(dú)立性最大或者對(duì)其他模塊依賴性最小的模塊開始,從程序結(jié)構(gòu)圖的底部開始,逐次增加控制模塊,直至完成整個(gè)程序。需要編寫驅(qū)動(dòng)模塊。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院725.5.2集成策略集成測試的步驟:(1)編寫調(diào)用底層模塊的驅(qū)動(dòng)模塊;(2)測試驅(qū)動(dòng)模塊與底層模塊組成的部分程序;(3)用實(shí)現(xiàn)的控制模塊替換驅(qū)動(dòng)模塊,并測試部分程序的功能;(4)必要時(shí)進(jìn)行回歸測試——重復(fù)之前的測試。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院735.5.2集成策略自底向上集成的優(yōu)點(diǎn):(1)底層模塊的測試與集成可以獨(dú)立、平行地進(jìn)行;(2)不需要樁模塊。缺點(diǎn):(1)驅(qū)動(dòng)模塊的開發(fā)一般比較耗費(fèi);(2)難以充分測試高層模塊的可操作性。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院745.5.2集成策略5.基干集成選擇一個(gè)程序的基干模塊,將自頂向下與自底向上的集成方式結(jié)合起來,逐步地集成其他模塊的策略,稱為基干集成,又稱三明治或混合策略。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院755.5.2集成策略優(yōu)點(diǎn):(1)減輕了自頂向下與自底向上的不利因素;(2)集成過程總有一個(gè)可運(yùn)行的部分程序;(3)適合大型、復(fù)雜軟件的集成。缺點(diǎn):(1)需要仔細(xì)分析系統(tǒng)結(jié)構(gòu)和模塊間依賴性,同時(shí)要分析用戶需求的優(yōu)先性;(2)有時(shí)需要開發(fā)樁模塊和驅(qū)動(dòng)模塊,工作量較大;(3)局部采用了一次性集成,接口測試可能不充分。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院765.5.3回歸測試復(fù)用之前的測試對(duì)集成后的軟件或其中的某個(gè)子集重新進(jìn)行測試,以確保修改的模塊或其他程序變更沒有傳播不期望的副作用。這種測試稱為回歸測試。它是保證在程序修改的情況下保證程序功能正常的一致性測試策略和方法?;貧w測試無須對(duì)程序進(jìn)行全面測試,而是根據(jù)修改情況進(jìn)行有限的測試??梢赃x用測試庫中的測試用例,也可以增加新的測試用例。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院775.5.3回歸測試回歸測試的基本過程是:(1)識(shí)別軟件中發(fā)生變更、受影響的部分;(2)選擇可以復(fù)用的測試用例,用以驗(yàn)證程序的變更不改變程序的原有功能;(3)補(bǔ)充新的測試用例,側(cè)重檢測可能會(huì)受到影響的功能或軟件子集,特別是包含新增或修改的部分,以及與其他軟件部分的聯(lián)系;(4)依據(jù)一定的策略對(duì)程序進(jìn)行測試。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院785.5.3回歸測試實(shí)施回歸測試策略時(shí),應(yīng)該兼顧效率和有效性兩個(gè)方面,可以采用不同的測試用例選擇方式。(1)再測試全部測試用例。(2)基于風(fēng)險(xiǎn)選擇測試。(3)再測試修改的部分。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院795.5.4集成測試與策略集成測試關(guān)注模塊間的調(diào)用、消息傳遞、數(shù)據(jù)傳輸與處理是否正確及不同模塊的可組合性,它們之間的協(xié)作能否完成一個(gè)包含了若干操作的特定的應(yīng)用功能,即是否能實(shí)現(xiàn)用戶的功能要求。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院805.5.4集成測試與策略集成測試應(yīng)該遵循下列幾條基本原則:(1)應(yīng)該測試所有的公共接口;(2)要充分測試關(guān)鍵模塊;(3)應(yīng)該按照一定的層次實(shí)施集成測試;(4)選擇與開發(fā)、軟件集成相匹配的測試策略;(5)集成后任何模塊接口和實(shí)現(xiàn)的變動(dòng)都要進(jìn)行回歸測試。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院815.5.4集成測試與策略協(xié)作集成與測試的過程如下:(1)對(duì)待集成的模塊依賴性、性關(guān)系等邏輯關(guān)系進(jìn)行分析,確定出用戶指定或密切關(guān)聯(lián)的子系統(tǒng);(2)運(yùn)用之前的策略集成并測試每個(gè)子系統(tǒng);(3)逐步集成每個(gè)子系統(tǒng)并測試整個(gè)系統(tǒng),直至完成。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院825.5.4集成測試與策略圖5.12為一個(gè)軟件的組成模塊與關(guān)系。一個(gè)集成順序是按照子系統(tǒng)的序號(hào)由低到高。由于子系統(tǒng)3相對(duì)獨(dú)立,可以獨(dú)立地集成與測試。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院835.6案例分析與實(shí)踐5.6.1分析與設(shè)計(jì)5.6.2案例程序的菜單式用戶交互的構(gòu)造5.6.3循環(huán)語句的路徑測試2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院845.6.1分析與設(shè)計(jì)2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院855.6.2案例程序的菜單式用戶交互的構(gòu)造2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院865.6.3循環(huán)語句的路徑測試循環(huán)測試是一種結(jié)構(gòu)性測試技術(shù),它側(cè)重于循環(huán)結(jié)構(gòu)元素的有效性。4種不同的循環(huán)結(jié)構(gòu):簡單循環(huán)、嵌套循環(huán)、串接循環(huán)和非結(jié)構(gòu)化循環(huán),如圖5.18所示。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院875.6.3循環(huán)語句的路徑測試簡單循環(huán)的測試(假設(shè)n是允許的最大循環(huán)次數(shù)):循環(huán)0次(跳過整個(gè)循環(huán)體);循環(huán)1次;循環(huán)2次;循環(huán)正常次數(shù)(通常為最大次數(shù)的一半);循環(huán)n?1、n、n+1次。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院885.6.3循環(huán)語句的路徑測試簡單循環(huán)的測試方法擴(kuò)展到嵌套循環(huán),測試數(shù)量隨著嵌套層次的增加而成幾何級(jí)數(shù)增加。以下方法可以減少測試數(shù)量。從最內(nèi)層循環(huán)開始,將其他循環(huán)設(shè)為最小值。對(duì)最內(nèi)層循環(huán)執(zhí)行簡單循環(huán)測試,而使外層循環(huán)的迭代參數(shù)值(及循環(huán)計(jì)數(shù))最小,并對(duì)范圍以外或不包含在內(nèi)的值增加其他測試。由內(nèi)向外構(gòu)造下一個(gè)循環(huán)的測試,但使其他外層循環(huán)具有最小值,并使其他嵌套循環(huán)為“典型”值。繼續(xù)上述過程,直至測試完所有循環(huán)。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院895.6.3循環(huán)語句的路徑測試對(duì)于串接循環(huán),若串接的循環(huán)彼此獨(dú)立,則可以采用簡單循環(huán)測試方法。然而,若兩個(gè)循環(huán)串接起來,且第一個(gè)循環(huán)的循環(huán)計(jì)數(shù)為第二個(gè)循環(huán)的初始值,則這兩個(gè)循環(huán)相互依賴,這時(shí)建議采用嵌套循環(huán)的測試方法。最后,對(duì)于非結(jié)構(gòu)化循環(huán),若有可能,重新設(shè)計(jì)代碼或重構(gòu)代碼,避免這種非結(jié)構(gòu)化的程序。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院905.7討論與提高5.7.1軟件建模5.7.2基于模型的測試5.7.3執(zhí)行函數(shù)名符號(hào)串的表驅(qū)動(dòng)編程5.7.4持續(xù)集成2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院915.7.1軟件建模模型是對(duì)客體的抽象,是通過主觀意識(shí)借助實(shí)體或虛擬表現(xiàn),構(gòu)成客觀闡述形態(tài)、結(jié)構(gòu)的一種表達(dá)目的的物件。它是人們依據(jù)研究的特定目的,在一定假設(shè)條件下,再現(xiàn)原型客體的結(jié)構(gòu)、功能、屬性、關(guān)系、過程等本質(zhì)特征的物質(zhì)形式或思維形式。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院925.7.1軟件建模建模是指對(duì)研究的實(shí)體進(jìn)行必要的抽象和簡化,用適當(dāng)?shù)谋憩F(xiàn)形式或規(guī)則把它的主要特征描述出來的過程。建模的目的是研究客體問題、探討客體的本質(zhì)而對(duì)它所做的一種簡化結(jié)果,是通過采用理想化的辦法創(chuàng)造、并能再現(xiàn)客體本質(zhì)和內(nèi)在特性的模型。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院935.7.1軟件建模模型可以是模擬,也可以是樣板。對(duì)尚不存在、擬構(gòu)建的客體建立的模型,稱為樣板。它可以作為樣板用以創(chuàng)建設(shè)想中的客體。模擬是對(duì)已經(jīng)存在客體的簡化而建立的,模型是對(duì)客體的,它的主要作用是理解和分析客體,進(jìn)而作為改進(jìn)的手段,建立樣本模型,創(chuàng)造新的客體。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院945.7.1軟件建模物理模型和數(shù)學(xué)模型是基本的模型形態(tài)。物理模型的表現(xiàn)形式主要是金屬、塑料、木材等物理材料。數(shù)學(xué)模型是用數(shù)學(xué)符號(hào)、方程、式子、圖形等對(duì)客體本質(zhì)屬性的抽象而又簡潔的刻畫。建立物理模型讓人直觀感受到待建物體的外形和結(jié)構(gòu),通過建立的數(shù)學(xué)模型分析待建物體的物理、結(jié)構(gòu)等性質(zhì)。在經(jīng)濟(jì)、金融、管理等領(lǐng)域,數(shù)學(xué)模型也是基本、常用的建模手段。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院955.7.1軟件建模數(shù)學(xué)是常用的軟件建模手段,包括數(shù)理統(tǒng)計(jì)、代數(shù)學(xué)、數(shù)理邏輯、集合論、圖論及時(shí)態(tài)邏輯、形式語言等。為了開發(fā)、分析和評(píng)估軟件及軟件過程,我們還使用軟件建模語言或符號(hào),特別是可視化的圖形符號(hào)??刂屏鲌D(CFG)來模擬程序的控制結(jié)構(gòu)。類圖刻畫面向?qū)ο蟪绦虻慕M織結(jié)構(gòu)。樹(圖的一種)描述用戶交互的菜單結(jié)構(gòu)。實(shí)體-關(guān)系(E-R)圖為數(shù)據(jù)關(guān)系建模。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院965.7.1軟件建模UML有機(jī)地整合了較多的軟件建模方法,在軟件分析與設(shè)計(jì)中獲得了廣泛應(yīng)用。需要指出的是,圖形建模語言要有嚴(yán)格的語法和語義,它們規(guī)定了采用的圖符(如線、框)的組成、結(jié)構(gòu)和(用數(shù)學(xué)表示的)含義,以便對(duì)軟件模型進(jìn)行推理、分析和評(píng)估。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院975.7.1軟件建模例5.1中,樹描述菜單的層次結(jié)構(gòu),表現(xiàn)了菜單的靜態(tài)性。因用戶的選擇動(dòng)作和程序執(zhí)行而造成的程序在菜單之間的轉(zhuǎn)換和跳轉(zhuǎn)則體現(xiàn)了菜單的動(dòng)態(tài)性。圖5.19的狀態(tài)轉(zhuǎn)換圖為菜單之間相互遷移提供了導(dǎo)航。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院985.7.1軟件建模狀態(tài)轉(zhuǎn)換圖是一個(gè)有向圖。圖的節(jié)點(diǎn)表示抽象的、可以具有名稱的狀態(tài)。帶箭頭的連線表示在一定輸入(條件或動(dòng)作)下從一個(gè)狀態(tài)轉(zhuǎn)換到另一個(gè)狀態(tài)。連線離開的狀態(tài)稱為箭頭指向狀態(tài)的前驅(qū),箭頭指向的狀態(tài)稱為后繼狀態(tài)。前驅(qū)和后繼狀態(tài)可以是同一個(gè)狀態(tài)。狀態(tài)、引起狀態(tài)轉(zhuǎn)換的輸入及連線的個(gè)數(shù)都是有限的。狀態(tài)轉(zhuǎn)換圖有唯一的起始狀態(tài)和若干結(jié)束整體。可以用逗號(hào)分開引起兩個(gè)狀態(tài)轉(zhuǎn)換的不同的輸入。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院995.7.2基于模型的測試1.基于有限狀態(tài)圖的測試狀態(tài)轉(zhuǎn)換圖把程序抽象成函數(shù)之間的關(guān)聯(lián)與交互,忽略了函數(shù)內(nèi)部的實(shí)現(xiàn)細(xì)節(jié)。基于狀態(tài)轉(zhuǎn)換圖的測試即對(duì)節(jié)點(diǎn)表示函數(shù)的黑盒測試。另,狀態(tài)轉(zhuǎn)換圖刻畫了函數(shù)之間的交互。本例的狀態(tài)轉(zhuǎn)換圖詳細(xì)說明了每個(gè)菜單在接收有效用戶輸入后,程序在菜單之間的轉(zhuǎn)換。故基于狀態(tài)轉(zhuǎn)換圖的測試又可視為對(duì)整個(gè)程序的白盒測試。故白盒測試技術(shù)可以應(yīng)用到狀態(tài)轉(zhuǎn)換圖模型。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1005.7.2基于模型的測試(1)滿足節(jié)點(diǎn)覆蓋的測試滿足節(jié)點(diǎn)覆蓋實(shí)際上就是滿足狀態(tài)覆蓋。測試準(zhǔn)則可以要求設(shè)計(jì)測試用例使得每個(gè)狀態(tài)都至少執(zhí)行一次。同語句覆蓋,這是最基本、也是最容易滿足的測試準(zhǔn)則。為了測試有些狀態(tài),如menu_0_4,首先需要將程序執(zhí)行到其前驅(qū)狀態(tài)menu_0,接收用戶輸入4后,才能測試狀態(tài)menu_0_4。這就需要從一個(gè)狀態(tài)遷移到另一個(gè)狀態(tài)。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1015.7.2基于模型的測試(2)滿足連線覆蓋的測試實(shí)際上就是測試兩個(gè)狀態(tài)間的遷移。測試準(zhǔn)則可以要求設(shè)計(jì)測試用例使得兩個(gè)狀態(tài)間的遷移都至少執(zhí)行一次。首先,從連接的狀態(tài)數(shù)量上考慮,該準(zhǔn)則可以要求覆蓋的狀態(tài)不止兩個(gè),還可以是多個(gè)。其次,要滿足100%的遷移覆蓋準(zhǔn)則,就要對(duì)不同的動(dòng)作或條件設(shè)計(jì)測試用例。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1025.7.2基于模型的測試遷移的嚴(yán)格定義包含了遷移條件或動(dòng)作及前驅(qū)狀態(tài)、后繼狀態(tài),而且要求在同一個(gè)狀態(tài)下面臨的一個(gè)條件或動(dòng)作,最多有且只有一個(gè)后繼狀態(tài)。另外,如果把流出連線多于一個(gè)的節(jié)點(diǎn)視為判定語句,那么,滿足了遷移覆蓋準(zhǔn)則,就類似于滿足單元測試中的判定覆蓋準(zhǔn)則。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1035.7.2基于模型的測試(3)滿足遷移路徑覆蓋的測試把從起始狀態(tài)到結(jié)束狀態(tài)所經(jīng)過的狀態(tài)的排列定義為遷移路徑,這個(gè)遷移路徑測試就和單元測試中的路徑測試類似。由于存在環(huán),遷移路徑的數(shù)量可能是無窮多,因而,可以借鑒基本路徑和圖復(fù)雜度的概念及測試循環(huán)語句的基本原理,計(jì)算出狀態(tài)轉(zhuǎn)換圖的圖復(fù)雜度,找出基本的遷移路徑,設(shè)計(jì)測試用例覆蓋它們,最后再運(yùn)用循環(huán)語句的測試原理測試含遷移環(huán)的測試。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1045.7.2基于模型的測試最后,有關(guān)無效輸入。圖5.19所示的狀態(tài)轉(zhuǎn)換圖定義了從每個(gè)狀態(tài)在有效輸入情況下的遷移。作為健壯性設(shè)計(jì),應(yīng)該考慮無效輸入的系統(tǒng)反應(yīng)。一種簡單有效的設(shè)計(jì),是不改變現(xiàn)有的轉(zhuǎn)換圖,增加一個(gè)計(jì)數(shù)器counter=0,每當(dāng)輸入無效時(shí),counter加1、發(fā)出警告和提示、狀態(tài)不變,一旦counter大于等于3,程序強(qiáng)制退出。如果輸入有效,counter重置0,系統(tǒng)繼續(xù)按照狀態(tài)轉(zhuǎn)換圖遷移。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1055.7.2基于模型的測試2.基于場景的測試基于場景的測試適合測試程序的一系列操作,發(fā)現(xiàn)程序模塊之間的交互錯(cuò)誤。場景是描述用戶需求的一種手段,是從用戶的角度描述用戶與系統(tǒng)的交互行為、反映系統(tǒng)的期望運(yùn)行方式。場景是由一系列相關(guān)活動(dòng)或事件組成的,它就像一個(gè)劇本,演繹系統(tǒng)預(yù)期的使用過程。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1065.7.2基于模型的測試基于場景的測試步驟如下。(1)設(shè)計(jì)場景。根據(jù)用戶對(duì)軟件的需求和使用畫出場景圖,通常包括基本流和備選流?;玖魇峭瓿梢粋€(gè)功能的、正常的活動(dòng)序列;備選流是在基本流的過程中,對(duì)異常情況、不同條件的處理活動(dòng)。(2)設(shè)計(jì)測試用例。使其覆蓋基本流和每個(gè)備選流。(3)設(shè)計(jì)測試數(shù)據(jù)。對(duì)于每個(gè)測試用例設(shè)計(jì)測試數(shù)據(jù)(如具體的文件名)并執(zhí)行測試。(4)重復(fù)上述步驟,直至測試完所有的場景。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1075.7.2基于模型的測試2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1085.7.3執(zhí)行函數(shù)名符號(hào)串的表驅(qū)動(dòng)編程對(duì)于表驅(qū)動(dòng)編程實(shí)現(xiàn)的菜單式用戶交互,適合經(jīng)典的自底向上、自頂向下及混合式集成與測試的策略。菜單可以作為測試驅(qū)動(dòng);表中的方法名可以沒有實(shí)現(xiàn)代碼,為便于測試可以只寫一條打印語句,成為方法的樁。另一方面,實(shí)現(xiàn)了菜單結(jié)構(gòu)、但沒有方法的代碼可以理解為框架,一旦菜單之間的轉(zhuǎn)換不存在問題,就可以采取多種測試策略和技術(shù),逐步實(shí)現(xiàn)每個(gè)菜單項(xiàng)對(duì)應(yīng)的方法,替換相應(yīng)的樁,完成測試與集成。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1095.7.3執(zhí)行函數(shù)名符號(hào)串的表驅(qū)動(dòng)編程2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1105.7.4持續(xù)集成持續(xù)集成是敏捷開發(fā)方法的一項(xiàng)基本的軟件開發(fā)實(shí)踐。項(xiàng)目成員頻繁地集成他們的工作,使得每天都有多次集成的代碼。每個(gè)集成都由自動(dòng)構(gòu)建驗(yàn)證,盡快地發(fā)現(xiàn)錯(cuò)誤。持續(xù)集成的核心包括自動(dòng)化構(gòu)建、自動(dòng)化測試及版本控制中心等工具。構(gòu)建是執(zhí)行編碼、測試、檢查和交付軟件的一組活動(dòng)。集成構(gòu)建就是把軟件模塊(程序、數(shù)據(jù)和文件)結(jié)合到一起形成軟件系統(tǒng)的活動(dòng)。所謂自動(dòng),就是通過編寫可以運(yùn)行的腳本程序,完成諸如代碼測試、構(gòu)建等,無須人工干預(yù)。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1115.7.4持續(xù)集成持續(xù)集成是團(tuán)隊(duì)開發(fā)的核心和保障,需要自動(dòng)化工具的支持,過程如下(參考圖5.21)。經(jīng)過代碼評(píng)審和測試,版本控制中心通知程序員代碼的缺陷或問題。程序員在修改完成、向版本控制中心提交修改之前,首先在個(gè)人開發(fā)環(huán)境中運(yùn)行私人構(gòu)建,包括編譯代碼和運(yùn)行測試,然后提交。持續(xù)集成服務(wù)器運(yùn)行集成構(gòu)建,包括檢查代碼是否復(fù)合規(guī)范。這個(gè)過程反復(fù)執(zhí)行,直到每次提交的代碼變更通過集成構(gòu)建,從而進(jìn)入集成的下一個(gè)周期。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1125.7.4持續(xù)集成2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院113第6章

軟件重構(gòu)與交付第6章軟件重構(gòu)與交付通過例子學(xué)習(xí)改善代碼質(zhì)量的重構(gòu)技術(shù)和方法,學(xué)習(xí)軟件打包和交付一個(gè)完整的軟件,以及自動(dòng)化軟件構(gòu)建的技術(shù)。作為提升,通過例子學(xué)習(xí)一種新型的軟件開發(fā)方式——測試驅(qū)動(dòng)開發(fā),并了解軟件交付的其他方式與基本活動(dòng)。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院115第6章軟件重構(gòu)與交付故事7應(yīng)用軟件的安裝問題,即要將開發(fā)的程序的各個(gè)模塊文件連同數(shù)據(jù)文件、使用的外部包等組裝起來,成為一個(gè)完整的、在任何機(jī)器上都可運(yùn)行的軟件。若是Java應(yīng)用程序,則還需要在用戶的機(jī)器上安裝Java運(yùn)行時(shí)環(huán)境等。定位和修改程序錯(cuò)誤或者在合適的位置給程序添加功能就變得越發(fā)困難、費(fèi)時(shí)。而且,修改代碼后的回歸測試有不少重復(fù)工作,手工編寫和執(zhí)行測試也很耗費(fèi)。他們需要采用更好的技術(shù)和工具。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院116第6章軟件重構(gòu)與交付6.1代碼重構(gòu)6.2軟件交付6.3案例分析與實(shí)踐6.4討論與提高6.5思考與練習(xí)題2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1176.1代碼重構(gòu)代碼重構(gòu)是增量迭代開發(fā)不可或缺的技術(shù),已經(jīng)成為現(xiàn)代軟件開發(fā)的基本技術(shù),并在很多常用的IDE中成為標(biāo)準(zhǔn)模塊。代碼重構(gòu)就是在不改變軟件外部行為的前提下改善它的內(nèi)部結(jié)構(gòu)。6.1.1代碼重構(gòu)的案例研究6.1.2代碼重構(gòu)概述2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1186.1.1代碼重構(gòu)的案例研究【例6.1】2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1196.1.1代碼重構(gòu)的案例研究時(shí)序圖是UML的一種動(dòng)態(tài)交互圖。主要成分是用方框表示的對(duì)象,在對(duì)象名稱下加下畫線。對(duì)象具有生存周期,用從對(duì)象圖標(biāo)向下延伸的一條虛線表示對(duì)象存在的時(shí)間。對(duì)象之間的交互用消息發(fā)送表示,它是一個(gè)從請(qǐng)求對(duì)象向服務(wù)對(duì)象標(biāo)記發(fā)送消息名稱的有向連線,對(duì)象也可以向自己發(fā)送消息。自上而下的消息連線表示消息發(fā)送的時(shí)間順序??刂平裹c(diǎn)是順序圖中表示時(shí)間段的符號(hào),在這個(gè)時(shí)間段內(nèi)對(duì)象將執(zhí)行相應(yīng)的操作,用小矩形表示。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1206.1.1代碼重構(gòu)的案例研究1.重構(gòu)大函數(shù)1)運(yùn)用重構(gòu)“提煉方法”(ExtractMethod)。2)運(yùn)用“移除臨時(shí)變量”。3)運(yùn)用重構(gòu)“以查詢?nèi)〈R時(shí)變量”。4)可以用“函數(shù)移動(dòng)”的策略。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1216.1.1代碼重構(gòu)的案例研究“提煉方法”的步驟如下。(1)設(shè)計(jì)一個(gè)新方法,并按照提煉代碼的意圖給方法命名。(2)把原來方法中要提煉出的代碼直接復(fù)制到新的方法中(目標(biāo)方法)。(3)檢查目標(biāo)方法中的局部變量、引用變量和臨時(shí)變量,做出相應(yīng)修改,有時(shí)要運(yùn)用“移除臨時(shí)變量”或“分解臨時(shí)變量”的策略。(4)在源方法中調(diào)用目標(biāo)方法,取代提煉的代碼。(5)通過編譯和測試。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1226.1.1代碼重構(gòu)的案例研究“函數(shù)移動(dòng)”的基本步驟如下。(1)檢查被源方法使用的、在源類中定義的所有的特性,考慮是否要移動(dòng)。(2)檢查源類的子類和超類是否聲明了要移動(dòng)的方法。如果有其他的方法申明,則不能移動(dòng),(3)選擇一個(gè)更合適的方法名,在目標(biāo)類中定義。同時(shí),把源方法的代碼復(fù)制到目標(biāo)方法中,然后適當(dāng)調(diào)整代碼。如果移動(dòng)的方法要使用原來的資源,要考慮如何從目標(biāo)方法中引用源對(duì)象。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1236.1.1代碼重構(gòu)的案例研究“函數(shù)移動(dòng)”的基本步驟如下。(4)決定如何從源代碼中正確引用目標(biāo)對(duì)象。(5)把源方法改成派遣方法。例子中就是把calculateFineAndBonus(aRental)中的參數(shù)作為發(fā)送消息的(派遣)對(duì)象,即改為aRental.calculateFineAndBonus()。(6)決定是否刪除源方法或者把它留作派遣方法。如果移除源方法,則要把它的所有引用都替換成引用目標(biāo)方法。(7)通過編譯并測試。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1246.1.1代碼重構(gòu)的案例研究2.用多態(tài)替換分支語句1)用類替換類型碼。2)用子類取代類型碼。3)用多態(tài)取代類型碼。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1256.1.2代碼重構(gòu)概述1.重構(gòu)的基礎(chǔ)重構(gòu)既不修正錯(cuò)誤,也不增加新的功能,主要用于提高代碼的可讀性或改變代碼內(nèi)部結(jié)構(gòu)與設(shè)計(jì),使其更容易維護(hù)。重構(gòu)代碼可以是結(jié)構(gòu)層或語意層,不同的重構(gòu)手段可能是結(jié)構(gòu)的調(diào)整或語意的轉(zhuǎn)換,但前提是不影響代碼在轉(zhuǎn)換前后的行為。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1266.1.2代碼重構(gòu)概述代碼重構(gòu)主要有三個(gè)時(shí)機(jī):給程序增量地添加功能的時(shí)候定位錯(cuò)誤的時(shí)候評(píng)審代碼的時(shí)候造成重構(gòu)的主要原因是:改進(jìn)軟件設(shè)計(jì)使軟件更容易理解有助于查找錯(cuò)誤2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1276.1.2代碼重構(gòu)概述2.再識(shí)重構(gòu)重構(gòu)代碼把常見的、證明切實(shí)有效的重構(gòu)模式——重構(gòu)的目標(biāo)和重構(gòu)的步驟——進(jìn)行歸檔分類,形成了軟件開發(fā)最佳實(shí)踐。重構(gòu)代碼時(shí)要記住以下三點(diǎn)。(1)不要為了重構(gòu)而重構(gòu)。(2)為理解而做簡略重構(gòu)。(3)不要顧慮復(fù)查或測試對(duì)代碼的改動(dòng)。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1286.2軟件交付6.2.1構(gòu)建與打包6.2.2實(shí)現(xiàn)構(gòu)建自動(dòng)化的工具6.2.3Java程序的打包與交付2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1296.2.1構(gòu)建與打包軟件開發(fā)和軟件維護(hù)這兩個(gè)階段之間的開發(fā)活動(dòng)統(tǒng)稱為軟件交付。其作用是讓最終用戶使用開發(fā)的軟件。軟件交付的基本活動(dòng)包括構(gòu)建、打包、發(fā)布、安裝和部署。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1306.2.1構(gòu)建與打包1.開發(fā)環(huán)境和運(yùn)行環(huán)境軟件交付的核心是把程序從開發(fā)者的機(jī)器上遷移到用戶的機(jī)器上。應(yīng)用程序是在包含計(jì)算機(jī)操作系統(tǒng)、應(yīng)用程序、配置文件等的軟件環(huán)境上運(yùn)行。軟件環(huán)境可以分為開發(fā)環(huán)境、運(yùn)行環(huán)境、測試環(huán)境等。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1316.2.1構(gòu)建與打包2.虛擬機(jī)大多數(shù)現(xiàn)代編程語言能在不同的計(jì)算機(jī)、工業(yè)控制機(jī)、平板設(shè)備、手機(jī)、嵌入式設(shè)備等上運(yùn)行,盡可能地獨(dú)立于計(jì)算機(jī)及其操作系統(tǒng)(平臺(tái)或環(huán)境)。虛擬技術(shù)為每個(gè)應(yīng)用創(chuàng)建一個(gè)運(yùn)行的容器,把應(yīng)用程序與計(jì)算平臺(tái)隔離,從而實(shí)現(xiàn)了應(yīng)用的跨平臺(tái)運(yùn)行。例如,Web服務(wù)器,Java虛擬機(jī)(JVM),AndroidDalvikVM虛擬機(jī),CLR(CommonLanguageRuntime)。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1326.2.1構(gòu)建與打包3.構(gòu)建和打包最簡單的軟件交付活動(dòng)是編譯(compile)和連接(link),然后把應(yīng)用代碼構(gòu)建(build)成可運(yùn)行的程序(如C程序)。軟件交付的首要工作是把構(gòu)造的程序從開發(fā)環(huán)境中分離出來并打包。程序打包就是創(chuàng)建計(jì)算機(jī)程序的安裝,即把各種編譯好的文件、依賴的資源、數(shù)據(jù)和配置文件等組裝成一個(gè)可以自行解壓的壓縮文件,允許軟件文件在多個(gè)計(jì)算機(jī)上安裝運(yùn)行。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1336.2.1構(gòu)建與打包4.安裝活動(dòng)確保滿足必要的系統(tǒng)需求;檢查軟件的版本;創(chuàng)建或更新程序文件和目錄;增加配置數(shù)據(jù),如配置文件、Windows注冊(cè)項(xiàng)或環(huán)境變量;使用戶能訪問軟件,如鏈接、快捷鍵或書簽;配置自動(dòng)運(yùn)行的組件,如Windows服務(wù);激活產(chǎn)品;更新軟件版本。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1346.2.2實(shí)現(xiàn)構(gòu)建自動(dòng)化的工具現(xiàn)代的IDE如Eclipse、NetBeans、VisualStudio都包含了build操作,利用目錄結(jié)構(gòu)管理開發(fā)的代碼、利用各種配置指定需要資源的信息等,容易完成項(xiàng)目代碼的編譯和連接。IDE通過可視化完成資源配置、路徑設(shè)置、外部庫引入等代碼的管理,簡化了構(gòu)建活動(dòng)。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1356.2.2實(shí)現(xiàn)構(gòu)建自動(dòng)化的工具使用Ant、make等獨(dú)立的構(gòu)建工具可以得到與操作系統(tǒng)或IDE無關(guān)的代碼。更有意義的是,通過編寫腳本或批處理文件能使程序的構(gòu)建工作自動(dòng)化。1.經(jīng)典構(gòu)造工具make2.Java的構(gòu)建工具AntAnt(Anotherneattool)是一個(gè)跨平臺(tái)的Java庫和命令行工具,用編寫的腳本執(zhí)行編譯、匯編、測試和運(yùn)行等構(gòu)建任務(wù)。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1366.2.2實(shí)現(xiàn)構(gòu)建自動(dòng)化的工具Ant具有如下特點(diǎn):(1)Ant是用Java編寫的,而且它的構(gòu)建規(guī)則用擴(kuò)展性標(biāo)識(shí)語言XML(ExtensibleMarkupLanguage)描述,具有跨平臺(tái)性;(2)Ant由一系列任務(wù)組成,這些任務(wù)是用XML文件描述的腳本,結(jié)構(gòu)清晰,容易書寫和維護(hù);(3)由于Ant的跨平臺(tái)性和操作簡單的特點(diǎn),它很容易集成到一些開發(fā)環(huán)境和技術(shù)中,包括持續(xù)構(gòu)建技術(shù)、Android開發(fā)環(huán)境。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1376.2.2實(shí)現(xiàn)構(gòu)建自動(dòng)化的工具下載安裝Ant后,設(shè)置環(huán)境變量ANT_HOME和Path。Ant將項(xiàng)目的構(gòu)建任務(wù)分解為工程、目標(biāo)和任務(wù)三個(gè)層次。工程用來描述處于項(xiàng)目層次的內(nèi)容。目標(biāo)由用戶來編寫,不同的目標(biāo)對(duì)應(yīng)用戶使用的一個(gè)操作任務(wù)單元。操作包括編譯、測試、打包及操作系統(tǒng)的命令,如創(chuàng)建子目錄等。Ant中的所有設(shè)定要素都是遵守XML規(guī)范的,并存儲(chǔ)在默認(rèn)的build.xml文件中。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1386.2.3Java程序的打包與交付開發(fā)的Java程序有兩種基本的應(yīng)用方式:供其他開發(fā)者復(fù)用的代碼,獨(dú)立于開發(fā)環(huán)境的可運(yùn)行程序。無論哪種形式,都要將Java程序(類)打包成jar文件(JavaArchiveFile,Java檔案文件)。jar文件是一種壓縮文件,可以用WinRAR、WinZip等打開。jar與ZIP的區(qū)別是:jar中包含一個(gè)META-INF/MANIFEST.MF的清單文件,作用類似Makefile,是用XML格式描述的。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1396.2.3Java程序的打包與交付1.復(fù)用Java代碼的打包2.可運(yùn)行Java程序的打包3.在Windows上直接運(yùn)行Java程序的制作2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1406.3案例分析與實(shí)踐6.3.1代碼重構(gòu)的案例分析6.3.2代碼重構(gòu)實(shí)踐6.3.3提交案例程序2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1416.3.1代碼重構(gòu)的案例分析以數(shù)據(jù)類取代記錄。按照記錄的結(jié)構(gòu)設(shè)計(jì)類,然后把成員變量和成員函數(shù)搬到類中。在“面向?qū)ο髽?gòu)造”中采取了這種重構(gòu)方法,把結(jié)構(gòu)體的算式改造成為算式類。當(dāng)要長期存儲(chǔ)算式對(duì)象時(shí),首先要將具有結(jié)構(gòu)的算式轉(zhuǎn)換為字符序列,然后存入文本文件。當(dāng)在程序中需要結(jié)構(gòu)化的算式時(shí),通過算式類的構(gòu)造函數(shù)把字符序列組成的算式恢復(fù)成算式對(duì)象。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1426.3.1代碼重構(gòu)的案例分析封裝集合。集合指的是Array、List、Set等容器型數(shù)據(jù)結(jié)構(gòu)。集合中讀取值方法的返回值應(yīng)當(dāng)保護(hù)對(duì)集合的操作,隱藏不必要的結(jié)構(gòu)細(xì)節(jié)。最好不提供直接設(shè)置集合值的方法,而是提供增加元素、刪除元素的操作。這樣,擁有集合的對(duì)象就能控制如何增加或刪除其集合元素。有了這樣的接口就能封裝集合,降低集合的擁有者和使用者的聯(lián)系。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1436.3.1代碼重構(gòu)的案例分析對(duì)程序進(jìn)行的任何變更,都可以稱為“重構(gòu)”。大型重構(gòu)和常規(guī)重構(gòu)的區(qū)別是:前者是重寫一個(gè)系統(tǒng),后者是重寫一段代碼。在實(shí)際工作中大型重構(gòu),首先,要分析軟件及其重構(gòu)工作,識(shí)別出重構(gòu)部分,制定工作計(jì)劃;然后,為大規(guī)模的改造設(shè)計(jì)重構(gòu)策略,逐步實(shí)施重構(gòu);最后,評(píng)估重構(gòu)結(jié)果的正確性和有效性,即重構(gòu)前后程序行為一致,重構(gòu)改善了程序質(zhì)量。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1446.3.1代碼重構(gòu)的案例分析通常有兩個(gè)途徑保證正確性。一是小步重構(gòu),它不僅降低移入錯(cuò)誤的可能性,也降低定位和排錯(cuò)的成本。二是持續(xù)的構(gòu)建和測試,它們可以及時(shí)檢查重構(gòu)是否改變了系統(tǒng)的行為。對(duì)每次重構(gòu),建議遵循以下三步。分析:定義重構(gòu)預(yù)期結(jié)果和到達(dá)目的的方法。實(shí)現(xiàn):應(yīng)用重構(gòu)技術(shù)改變代碼,并確保重構(gòu)后代碼正確。穩(wěn)定:應(yīng)用方法,確保實(shí)現(xiàn)的結(jié)果是持久的。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1456.3.2代碼重構(gòu)實(shí)踐2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1466.3.3提交案例程序2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1476.4討論與提高6.4.1測試層次6.4.2測試驅(qū)動(dòng)開發(fā)6.4.3軟件交付及其發(fā)展2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1486.4.1測試層次為了能系統(tǒng)、全面地測試軟件,測試可以先從程序的基本單元開始,然后按照一定方式——如軟件集成的順序,逐步測試集成后的程序,直至測試完成整個(gè)軟件。按照軟件的構(gòu)成,測試可以劃分為4個(gè)階段或?qū)哟危簡卧獪y試、集成測試、系統(tǒng)測試和驗(yàn)收測試。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1496.4.1測試層次(1)單元測試對(duì)程序基本單元(函數(shù)、方法、類或?qū)ο蠹皹?gòu)件或服務(wù))進(jìn)行的測試。關(guān)注程序單元的基本功能、算法實(shí)現(xiàn)、數(shù)據(jù)結(jié)構(gòu)等內(nèi)部組織結(jié)構(gòu)。(2)集成測試對(duì)兩個(gè)及以上相互關(guān)聯(lián)的程序單元測試。具有調(diào)用關(guān)系的函數(shù)、具有繼承或聚合關(guān)系的類,以及具有合作關(guān)系的子系統(tǒng)、軟件使用或依賴獨(dú)立的外部系統(tǒng),甚至是軟硬件的交互。集成測試的重點(diǎn)是檢測程序模塊的接口、模塊之間的交互及開發(fā)的軟件與外部系統(tǒng)的交互。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1506.4.1測試層次(3)系統(tǒng)測試對(duì)整個(gè)軟件的測試稱為系統(tǒng)(級(jí))測試。重點(diǎn)是檢測軟件是否滿足了用戶需求、完成既定的功能和任務(wù)。同時(shí),還要檢測運(yùn)行速度、存儲(chǔ)占用、事務(wù)處理、數(shù)據(jù)量及是否穩(wěn)定、可靠、安全、易用、易維護(hù)等非功能需求。(4)驗(yàn)收測試確保軟件準(zhǔn)備就緒,最終用戶可以在用戶環(huán)境執(zhí)行軟件的既定功能和任務(wù)。驗(yàn)收測試是在產(chǎn)品發(fā)布之前進(jìn)行的測試活動(dòng),也稱交付測試。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1516.4.2測試驅(qū)動(dòng)開發(fā)“測試驅(qū)動(dòng)開發(fā)”(Test-DrivenDevelopment,TDD)或“測試先行開發(fā)”,是一種不同于傳統(tǒng)軟件開發(fā)流程的新型的開發(fā)方法。它要求在編寫某個(gè)功能的代碼前先編寫測試代碼,然后只編寫使測試通過的功能代碼,通過測試來推動(dòng)整個(gè)軟件的開發(fā)。這有助于編寫簡潔可用和高質(zhì)量的代碼,并加速開發(fā)過程。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1526.4.2測試驅(qū)動(dòng)開發(fā)測試驅(qū)動(dòng)開發(fā)的基本過程如下。(1)編寫一個(gè)測試,檢測待測程序是否滿足一個(gè)(新增)的功能。(2)運(yùn)行測試——由于還沒有代碼,甚至可能都不能通過編譯?。?)編寫待測程序足夠的代碼,并通過編譯。(4)編寫待測程序滿足測試,直至測試通過。(5)必要的話重構(gòu)代碼,用測試驗(yàn)證。(6)重復(fù)上述步驟,直到更多的需求都編碼實(shí)現(xiàn)并通過測試。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1536.4.2測試驅(qū)動(dòng)開發(fā)1.TDD的案例研究2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1546.4.2測試驅(qū)動(dòng)開發(fā)2.理解TDDTDD的原理是在開發(fā)功能代碼前,先編寫單元測試代碼,確定需要編寫什么產(chǎn)品代碼。TDD整合了需求分析、設(shè)計(jì)、重構(gòu)和質(zhì)量控制,通過測試推動(dòng)整個(gè)開發(fā)進(jìn)程。TDD的目標(biāo)不是測試軟件。TDD考慮的是用戶的需求(對(duì)象、功能、過程、接口等),通過測試用例框架幫助設(shè)計(jì)和編碼實(shí)現(xiàn)需求,實(shí)現(xiàn)持續(xù)的驗(yàn)證。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1556.4.2測試驅(qū)動(dòng)開發(fā)TDD具有如下特點(diǎn)。(1)只開發(fā)滿足需求的軟件。(2)促使實(shí)現(xiàn)松耦合的設(shè)計(jì)。(3)盡早地避免、發(fā)現(xiàn)和修改錯(cuò)誤。(4)與軟件同步的文檔。(5)提供了快樂工作的基礎(chǔ)。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1566.4.3軟件交付及其發(fā)展簡單的交付活動(dòng)包括打包和安裝,就能夠直接使用軟件。復(fù)雜的軟件則需要系統(tǒng)地部署和實(shí)施。軟件部署包含三個(gè)任務(wù):(1)配置并管理應(yīng)用軟件要運(yùn)行的環(huán)境(硬件配置、系統(tǒng)軟件、外部服務(wù));(2)安裝應(yīng)用程序的正確版本;(3)配置應(yīng)用,包括數(shù)據(jù)或需要的狀態(tài)。應(yīng)用軟件的實(shí)施,包括客戶化開發(fā)(對(duì)軟件產(chǎn)品按照客戶要求更改)、應(yīng)用部署、應(yīng)用初始化(設(shè)置用戶角色和權(quán)限、錄入基本數(shù)據(jù)等)、人員培訓(xùn)等活動(dòng)。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1576.4.3軟件交付及其發(fā)展持續(xù)交付、云技術(shù)、DevOps是信息技術(shù)發(fā)展的結(jié)果,對(duì)軟件交付與使用模式產(chǎn)生了影響。1.持續(xù)交付2.云交付2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院158第7章

GUI軟件構(gòu)造第7章GUI軟件構(gòu)造首先認(rèn)識(shí)GUI及其基本元素,理解GUI的基本設(shè)計(jì)原則,學(xué)習(xí)GUI的設(shè)計(jì)模式、在GUI開發(fā)中廣泛運(yùn)用的編程范式——事件驅(qū)動(dòng)編程,通過例子學(xué)習(xí)使用工具構(gòu)造GUI軟件。深入討論GUI的其他設(shè)計(jì)原則,探討GUI測試方法。2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院160第7章GUI軟件構(gòu)造故事8圖形界面測試工具2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院161第7章GUI軟件構(gòu)造7.1GUI簡介7.2GUI的基本元素與設(shè)計(jì)規(guī)范7.3JavaGUI設(shè)計(jì)模式7.4事件驅(qū)動(dòng)編程7.5案例分析與實(shí)踐7.6討論與提高7.7思考與練習(xí)題2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1627.1GUI簡介7.1.1GUI發(fā)展軌跡7.1.2JavaGUI的構(gòu)造工具2016秋數(shù)據(jù)科學(xué)與軟件工程學(xué)院1637.1.1GUI發(fā)展軌跡2016秋數(shù)據(jù)科學(xué)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論