




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第2章偽代碼實例介紹主講:黃明瓊第2章偽代碼實例介紹2.1偽代碼介紹2.2三角形問題2.3NextDate函數問題2.4傭金問題2.5簡單ATM系統2.6貨幣轉換器本章教學目標正確理解偽代碼的概念正確理解偽代碼的規則正確理解偽代碼實例中的邏輯能夠看懂實例中的偽代碼所表達的含義2.1偽代碼介紹2.1.1偽代碼概念2.1.2一種偽代碼規則2.1偽代碼介紹偽代碼引言:在單元測試中,我們會用到三個例子,分別是:三角形問題;邏輯比較復雜的函數,NextDate();有代表性的MIS測試,傭金問題。這三個例子合在一起,可以說明測試人員在單元級別上會遇到的大多數問題,而在討論這幾個問題時,我們會用到偽代碼這個工具,因此今天我們先介紹偽代碼的概念和一種偽代碼規則。2.1.1偽代碼概念偽代碼實際上是計算機代碼的簡略形式,它比流程圖更像計算機代碼。偽代碼必須結構清晰,代碼簡單,可讀性好。偽代碼要求程序設計人員集中于解決問題而不是計算機語言。2.1.1偽代碼概念(續)偽代碼(Pseudocode)是一種算法描述語言。使用偽代碼的目的是為了使被描述的算法可以容易地以任何一種編程語言(Pascal,C,Java,etc)實現。因此,偽代碼必須結構清晰、代碼簡單、可讀性好,并且類似自然語言。介于自然語言與編程語言之間。2.1.1偽代碼概念(續)例如,類Pascal語言的偽代碼的語法規則是:在偽代碼中,每一條指令占一行(elseif,例外)。指令后不跟任何符號(Pascal和C中語句要以分號結尾)。書寫上的“縮進”表示程序中的分支程序結構。這種縮進風格也適用于if-then-else語句。用縮進取代傳統Pascal中的begin和end語句來表示程序的塊結構可以大大提高代碼的清晰性;同一模塊的語句有相同的縮進量,次一級模塊的語句相對與其父級模塊的語句縮進。2.1.1偽代碼概念(續)偽代碼只是像流程圖一樣用在程序設計的初期,幫助寫出程序流程。簡單的程序一般都不用寫流程、寫思路,但是復雜的代碼,最好還是把流程寫下來,總體上去考慮整個功能如何實現。寫完以后不僅可以用來作為以后測試,維護的基礎,還可用來與他人交流。但是,如果把全部的東西寫下來必定可能會浪費很多時間,那么這個時候可以采用偽代碼方式。比如:
IF九點以前THEN
do私人事務;
ELSF9點到18點THEN
工作;
ELSE
下班;ENDIF
這樣不但可以達到文檔的效果,同時可以節約時間.更重要的是,使結構比較清晰,表達方式更加直觀.2.1.2一種偽代碼規則變量聲明符號‘后的內容表示注釋數據結構聲明賦值語句輸入輸出簡單條件復合條件順序結構簡單選擇選擇多重選擇計數循環While循環Unitl循環過程定義過程調用程序練習小結2.1.2一種偽代碼規則(續)變量聲明用:Dim<變量>As<類型>例如:DimaAsINTEGER
意思是:聲明a為整形變量
Dima,b,c,matchAsINTEGER
意思是:聲明a,b,c,match都為整形變量符號‘后的內容表示注釋;例如:
Dima,b,cAsINTEGER‘定義三角形‘的三條邊2.1.2一種偽代碼規則(續)數據結構聲明:Type<類型名稱><字段描述列表>End<類型名稱>例如:TypeSTUDENTDimnameAsSTRINGDimageAsINTEGERDimNOAsSTRINGDimteleAsSTRINGEndSTUDENT2.1.2一種偽代碼規則(續)賦值語句:<變量>=<表達式>例如:tomorrowDay=day+1tomorrowMonth=month+1輸入:Input(<變量列表>)例如:Input(a)Input(a,b,c)2.1.2一種偽代碼規則(續)輸出Output(<變量列表>)例如:Output(“SideAis”,a)Output(“SideBis”,b)Output(“SideCis”,c)Output(“Error!pleaseagain!”)2.1.2一種偽代碼規則(續)簡單條件:<表達式><關系操作符><表達式>例如:Stud.age>=0Stud.age<=100a+b>c2.1.2一種偽代碼規則(續)復合條件:<簡單條件><邏輯連接符><簡單條件>例如:(a<b+c)AND(b<a+c)AND(c<a+b)2.1.2一種偽代碼規則(續)順序結構語句按照串行順序排列。例如:Output(“Enter3integerswhicharesidesofatriangle)Input(a,b,c)Output(“SideAis”,a)Output(“SideBis”,b)Output(“SideCis”,c)2.1.2一種偽代碼規則(續)簡單選擇If<條件>Then<then子句>EndIf例如:ifa=bThenmatch=match+1
EndIf2.1.2一種偽代碼規則(續)選擇If<條件>Then<then子句>Else<else子句>EndIf例如:if(a<b+c)AND(b<a+c)AND(c<a+b)ThenIsTriangle=TrueElseIsTriangle=False
EndIf2.1.2一種偽代碼規則(續)多重選擇Case<變量>ofCase1:<謂詞><case子句>……Casen:<謂詞><case子句>EndCase例如:CasescoreofCase1:score>=90Output(“Good!”)Case2:60<=score<=89Output(“Pass!”)Case3:0<=score<=59Output(“NotPass!”)EndCase2.1.2一種偽代碼規則(續)計數循環For<計數器>=<開始>To<結束><循環體>EndFor例如:Fori=1to100sum=sum+iEndFor2.1.2一種偽代碼規則(續)While循環DoWhile<條件><循環體>EndWhile例如:DoWhilestature=165
Output(“Stop!”)EndWhile2.1.2一種偽代碼規則(續)Until循環Do<循環體>Until<條件>例如:sum=0i=1Dosum=sum+ii=i+1Untili=1002.1.2一種偽代碼規則(續)過程定義(函數和面向對象方法的定義類似)<過程名稱>(Input:<變量列表>;Output:<變量列表>)<主體>End<過程名稱>2.1.2一種偽代碼規則(續)過程調用(函數和面向對象方法的定義類似)Call<過程名稱>(<變量列表>;<變量列表>)程序:
Program<程序名稱><單元列表>End<程序名稱>2.1.2一種偽代碼規則(續)偽代碼課堂練習問題:計算并報告一個班學生的平均分數。討論:平均分數等于所有學生分數的和除以學生數。我們需要一個循環然后加班中每位學生的分數。在循環內仍需要班內學生的總數。2.1.2一種偽代碼規則(續)ProgramaveragegradeDimgrade,sum,averageAsRealDimcounterAsintegersum=0.0counter=0Dowhiletherenomoredatainput(grade)sum=sum+gradecounter=counter+1EndWhileaverage=sum/counterOutput(average)Endaveragegrade2.1.2一種偽代碼規則(續)小結這里介紹的偽代碼提供了表示程序源代碼的“獨立于語言”的方式。偽代碼有兩層結構:單元和程序組建。單元既可以解釋為傳統組件(過程和函數),也可以解釋為面向對象組件(類和對象)。使用偽代碼可以使程序設計人員集中于解決問題而不是計算機語言。2.2三角形問題2.2.1三角形問題陳述2.2.2三角形問題實現2.2三角形問題引言:三角形問題是軟件測試中一個經久不衰的例子,它包含了清晰而且復雜的邏輯。比如說三角形的性質:任何兩邊之和必須要嚴格大于第三條邊。我們在講述這個問題的時候還給出了三角形三條邊的上限值,這主要是為了以后在講黑盒測試時要用到這個上限值。2.2三角形問題三角形問題是在軟件測試文獻中使用最廣的一個例子,這個例子經久不衰的原因之一是,它包含了清晰而又復雜的邏輯。它還是削弱客戶、開發人員和測試人員溝通的不完整定義的典型例子。三角形問題之所以復雜,是因為輸入與正確輸出之間的關系復雜。2.2.1三角形問題陳述簡單版本:三角形問題接受三個整數a、b和c作為輸入,用作三角形的邊。程序的輸出是由這三條邊確定的三角形類型:等邊三角形、等腰三角形、不等邊三角形或非三角形。有時這個問題被擴展為將直角三角形作為第五類,在有些練習中會使用這種擴展。改進版本:三角形問題接受三個整數a、b和c作為輸入,用作三角形的邊。整數a、b和c必須滿足以下條件:c1:1<=a<=200c4:a<b+cc2:1<=b<=200c5:b<a+cc3:1<=c<=200c6:c<a+b2.2.1三角形問題陳述(續)程序的輸出是由這三條邊確定的三角形類型:等邊三角形、等腰三角形、不等邊三角形或非三角形。如果輸入值沒有滿足這些條件中的任何一個,則程序會通過輸出消息來進行通知,例如,“b的取值不在允許范圍內”,若c1、c2、c3滿足,則給出以下四種相互排斥輸出的一個:如果三條邊相等,則程序的輸出是等邊三角形。如果兩條邊相等,則程序的輸出是等腰三角形。如果沒有兩條邊相等,則程序的輸出是不等邊三角形。如果c4、c5和c6中有一個條件不滿足,則程序的輸出是非三角形。2.2.2三角形問題實現以下是三角形問題的數據流圖描述。可以把這個程序實現為一個主程序和三個簡單的過程。在后續章節里我們還要用到這個例子,現在將它的實現用偽代碼表示。2.2.2三角形問題實現(續)三角形程序實現的數據流圖2.2.2三角形問題實現(續)三角形問題實現的偽代碼Programtriangle2‘versionofsimpleDima,b,cAsIntegerDimIsATriangleAsBoolean‘Step1:GetInputOutput(“Enter3integerswhicharesidesofatriangle”)Input(a,b,c)Output(“SideAis”,a)Output(“SideBis”,b)Output(“SideCis”,c)‘Step2:IsATriangle?If(a<b+c)AND(b<a+c)AND(c<a+b)ThenIsATriangle=TrueElseIsATriangle=FalseEndIf‘step3:DetermineTriangleTypeIfIsATrangleThenif(a=b)AND(b=c)ThenOutput(“Equilateral”)ElseIf(a<>b)AND(a<>c)AND(b<>c)ThenOutput(“Scalence”)ElseOutput(“Isosecles”)EndIfEndIfElseOutput(“NOTaTriangle”)EndIfEndtriangle22.2.2三角形問題實現(續)三角形問題實現的偽代碼續……Programtriangle3‘improvedversionDima,b,cAsIntegerDimIsATriangleAsBoolean‘Step1:GetInputDoOutput(“Enter3integerswhicharesidesofatriangle”)Input(a,b,c)c1=(1<=a)AND(a>=200)c2=(1<=b)AND(b>=200)c3=(1<=c)AND(c>=200)IfNOT(c1)ThenOutput(“Valueofaisnotintherangeofpermittedvalues”)EndIfIfNOT(c2)ThenOutput(“Valueofbisnotintherangeofpermittedvalues”)EndIfIfNOT(c3)ThenOutput(“Valueofcisnotintherangeofpermittedvalues”)EndIfUntilc1ANDc2ANDc3Output(“SideAis”,a)Output(“SideBis”,b)Output(“SideCis”,c)……‘Step2……’Step3Endtriangle32.3NextDate函數問題2.3.1NextDate問題陳述2.3.2NextDate的偽代碼實現2.3.3NextDate小結2.3NextDate函數問題引言:NextDate問題說明了輸入變量之間的邏輯關系復雜性。輸入變量之間的邏輯比較復雜有兩種復雜性來源:輸入域和閏年規則80%活動出現在20%的空間2.3.1NextDate問題陳述NextDate是一個有三個變量(月份、日期和年)的函數。函數返回輸入日期后面的那個日期。變量月份、日期和年都是整數值,并滿足以下條件:c1:1<=月份<=12c2:1<=日期<=31c3:1812<=年<=2012
我們的處理要包括對月份、日期和年的無效輸入值的響應處理,還要對無效邏輯處理,例如任意年的4月31日。2.3.1NextDate問題陳述(續)在NextDate函數中有兩種復雜性來源:輸入域和閏年規則。關于公歷閏年是這樣規定的:地球繞太陽公轉一周叫做一回歸年,一回歸年長365日5時48分46秒。因此,公歷規定有平年和閏年,平年一年有365日,比回歸年短0.2422日,四年共短0.9688日,故每四年增加一日,這一年有366日,就是閏年。但四年增加一日比四個回歸年又多0.0312日,400年后將多3.12日,故在400年中少設3個閏年,也就是在400年中只設97個閏年,這樣公歷年的平均長度與回歸年就相近似了。由此規定:年份是整百數的必須是400的倍數才是閏年,例如1900年、2100年就不是閏年。2.3.2NextDate的偽代碼實現Ifday<31thentomorrowDay=day+1elsetomorrowDay=1tomorrowMonth=month+1EndIfCase2:monthIs4,6,9or11’30daymonthIfday<30thentomorrowDay=day+1elsetomorrowDay=1tomorrowMonth=month+1EndIfProgramNextDate1‘SimpleversionDimtomorrowDay,tomorrowMonth,tomorrowYearAsIntegerDimday,month,yearAsIntegerOutput(“Entertoday’sdateintheformMMDDYYYY”)Input(month,day,year)CasemonthOfCase1:monthIs1,3,5,7,8,or10:’31daymonths(excpet12)2.3.2NextDate的偽代碼實現(續)Case3:monthIs12:Ifday<31thentomorrowDay=day+1elsetomorrowDay=1tomorrowMonth=1Ifyear=2012thenOutput(“2012isover”)elsetomorrowYear=year+1EndIfEndIfCase4:monthIs2:Ifday<28thentomorrowDay=day+1elseifday=28Thenif(yearisaleapyear)thentomorrowDay=29elsetomorrowDay=1tomorrowMonth=3EndIfelseifday=29thentomorrowDay=1tomorrowMonth=3elseOutput(“CannothaveFeb.”,day)EndifEndifEndIfEndCaseOutput(“Tomorrowdateis”,tomorrowMonth,tomorrowDay,tomorrowYear)EndNextDate1續……2.3.3NextDate小結小結這一次課介紹了我們以后要用到的2個例子,對于軟件測試中2兩個比較經典的例子,我們要能夠分析和提出實現方法,同時這一次我們也做了一些擴展練習。重要的是,通過這樣分析問題和實現問題,我們能提高對程序的敏感度,為以后發現軟件缺陷提高敏感度。2.4傭金問題2.4.1傭金問題陳述2.4.2傭金問題分析2.4.3傭金問題的偽代碼實現2.4傭金問題引言:這是一個典型的商務計算例子,包含了計算和決策,因此引出有意思的測試問題。2.4.1傭金問題陳述一酒水銷售公司指派銷售員銷售各種酒水。白酒賣168元/瓶,紅酒賣120元/瓶,啤酒賣5元/瓶。白酒每月的供應量為5000瓶,紅酒為3000瓶,啤酒為30000瓶,各個銷售員每月至少要售出白酒50瓶,紅酒30瓶,啤酒300瓶。月末,每個銷售員上報他所在區域的銷售業績。這樣酒水銷售公司就知道了當月的銷售情況,并根據銷售額計算傭金提成如下:2萬以下(含):4%;2萬(不含)~4.5萬(含):1%4.5萬以上(不含):0.5%這樣,傭金程序生成月份銷售報告,匯總售出的白酒、紅酒和啤酒總數,銷售公司的總銷售額和各個銷售員的傭金。2.4.2傭金問題分析這個問題分為三個不同的部分:輸入數據部分,用來處理輸入數據的有效性(與前面講的2個問題一樣),在這里,我們略過不再重復這個內容;銷售額計算部分;傭金(提成)計算部分。2.4.3傭金問題的偽代碼實現ProgramCommisson(Input,Output)Dimtipple,wine,beerAsIntegerDimtipplePrice,winePrice,beerPriceAsRealDimtotalTipple,totalWine,totalBeerAsIntegerDimtippleSales,wineSales,beerSalesAsRealDimsales,commissionAsRealtipplePrice=168.00winePrice=120.00beerPrice=5.00totalTipple=0totalWine=0totalBeer=02.4.3傭金問題的偽代碼實現(續)續……Input(tipple)WhileNOT(tipple=-1)’指出邊界Input(wine,beer)totalTipple=totalTipple+tippletotalWine=totalWine+winetotalBeer=totalBeer+beerInput(tipple)EndWhileOutput(“tipplesold:”,totalTipple)Output(“winesold:”,totalwinee)Output(“beersold:”,totalbeer)tippleSales=tipplePrice*totalTipplewineSales=winePrice*totalWnebeerSales=beerPrice*totalBeer2.4.3傭金問題的偽代碼實現(續)續……sales=tippleSales+wineSales+beerSalesOutput(“TotalSales:”,sales)If(sales>45000.0)thencommission=0.04*20000.0commission=commission+0.01*25000.0commission=commission+0.005*(sales-45000.0)elseIf(sales>20000)thencommission=0.04*commissioncommission=commission+0.01*(sales-20000)elsecommission=0.04*salesEndIfEndIfOutput(“Commissionis”,commission,”元”)EndCommission2.5簡單ATM系統2.5.1SATM的問題描述2.5.2SATM問題分析2.5.3SATM問題實現2.5簡單ATM系統引言:為了方便同學們了解集成測試和系統測試,我們介紹一個簡單的自動柜員機系統,包含各種功能和交互,是一個典型的客戶/服務系統的客戶端。2.5.1SATM的問題描述SATM客戶可以選擇三種交易中的任意一種:存款、取款和查詢余額。這些交易可以在信用帳戶和儲蓄帳戶上完成。2.5.1SATM的問題描述(續)2.5.2SATM問題分析有大量的信息隱藏在剛剛給出的系統描述中。例如,100元的整數倍,這種文字描述可能比實際問題中更加精確。SATM------簡單ATM透支額度?放入多少現金?何種現金?2.5.3SATM問題實現Programmeteller(input,output)’ATMDimbalance,inputMoney,outputMoney,currentMoneyAsIntegerDimpasswordAsStringDiminquire,fetch,depositAsStringDimisPasswordRightAsBooleancurrentMoney=balance+inputMoneyoutput(“pleaseinputyourcard!”)input(“password”)forn=1to3ifisPasswordRight=Falsethenifn<=2thenoutput(“Thepasswordiswrong,insertagainplease”)elseoutput(“You’veinputwrongpassword3times,takethecarddown”)Endif2.5.3SATM問題實現(續)續……ifisPasswordRight=Truethenoutput(“choosethetypeofdeal”)Endififinquirethenoutput(“Yourbalanceis”,balance)iffetchthenoutput(“inputyournumber
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工作計劃與進度報告編制指南
- AR智能出行在交通出行方式的革新作用研究
- 藝術教育資源共享-洞察及研究
- 華東理工大學《食品營養學》2023-2024學年第一學期期末試卷
- 江蘇財會職業學院《精神病學A》2023-2024學年第一學期期末試卷
- 中國礦業大學(北京)《水土保持工程》2023-2024學年第一學期期末試卷
- 2025年制造業供應鏈數字化協同供應鏈金融風險控制研究報告
- 2025年云計算技術在供應鏈風險管理中的應用與案例分析研究報告
- 多模態協同控制-洞察及研究
- 定點越野活動方案
- 養老護理員四級理論試題及答案
- 脊柱內鏡技術
- 采購詢價單模板
- 心理測量課件-常見量表介紹與應用
- 隆鼻術后護理查房
- 關于進境食用水生動物指定監管場地名單
- 2023年主任醫師(正高)-中醫內科學(正高)考試歷年真題集錦附答案
- 農村分家協議書4篇
- 2023-2024學年江蘇省江都市小學語文三年級期末高分測試題詳細參考答案解析
- 森林區劃-小班區劃(森林資源經營管理)
- 產時子癇應急演練文檔
評論
0/150
提交評論