數(shù)組邊界檢查可防止緩沖區(qū)溢出的產(chǎn)生。為了實(shí)現(xiàn)數(shù)組邊界檢查,應(yīng)當(dāng)檢查所有對(duì)數(shù)組的讀寫操作以確保正確的范圍內(nèi)對(duì)數(shù)組的操作。數(shù)組下標(biāo)檢查是指在程序中,所有數(shù)組下標(biāo)的表達(dá)式的結(jié)果在真正被用來(lái)訪問(wèn)某一個(gè)特定的元素之前,先把它的值和定義數(shù)組時(shí)給出的數(shù)組上界和下界進(jìn)行比較。如果一個(gè)下標(biāo)超出了預(yù)期的范圍時(shí),那么就引發(fā)一個(gè)錯(cuò)誤來(lái)阻止進(jìn)一步的訪問(wèn)。比如在訪問(wèn)一個(gè)下標(biāo)范圍是0~9的數(shù)組前檢查下標(biāo)是否也在0~9內(nèi),而不是如25之類的越過(guò)數(shù)組結(jié)尾的下標(biāo)。除了軟件實(shí)現(xiàn)的下標(biāo)檢查之外,VAX架構(gòu)的計(jì)算機(jī)擁有一條INDEX匯編指令,可以用來(lái)檢查數(shù)組的下標(biāo)是否越界,可以至多提供6個(gè)任意VAX編址的地址。B6500和一些相似的伯勒斯計(jì)算機(jī)則以硬件進(jìn)行邊界檢查,無(wú)論是采用什么語(yǔ)言撰寫的程序。
冗余數(shù)組邊界檢查消除是指在程序中刪除被證明是合法的數(shù)組訪問(wèn)所對(duì)應(yīng)的邊界檢查。當(dāng)數(shù)組索引能夠保證在到一之間,則該數(shù)組訪問(wèn)對(duì)應(yīng)的數(shù)組邊界檢查被視為完全冗余,可從程序中刪除。如果數(shù)組邊界檢查位在循環(huán)體中,循環(huán)邊界和數(shù)組長(zhǎng)度都是循環(huán)不變量,并且數(shù)組索引變量是循環(huán)歸納變量,那么可以通過(guò)把邊界檢查移出循環(huán)體來(lái)減少數(shù)組邊界檢查的執(zhí)行次數(shù)。這種冗余被稱為部分冗余。
數(shù)組邊界檢查導(dǎo)致程序運(yùn)行時(shí)性能的減慢主要有兩個(gè)原因一是執(zhí)行這些邊界檢查操作需要時(shí)間開銷。邊界檢查需要得到數(shù)組的長(zhǎng)度信息,這需要一個(gè)訪存操作,而判斷當(dāng)前的訪問(wèn)索引是否合法,又需要一個(gè)比較操作。如果邊界檢查處在一些頻繁訪問(wèn)的循環(huán)中,那么這些操作的開銷將是非??捎^。二是數(shù)組邊界檢查可能會(huì)阻止其他的優(yōu)化機(jī)會(huì),比如代碼移動(dòng)。和嵌套循環(huán)優(yōu)化等 。
在常見的編程語(yǔ)言中,強(qiáng)制進(jìn)行邊界檢查的有C#、Ada、Haskell、Java、JavaScript、Lisp、PHP、Python、Ruby和Visual Basic。其中C#同時(shí)支持“unsafe塊”(不安全代碼塊),即一段暫時(shí)關(guān)閉邊界檢查、啟用指針以提高效率的代碼塊。這個(gè)功能常被用于加速一小段不可能出現(xiàn)越界問(wèn)題的代碼的執(zhí)行速度,而不至于破壞整個(gè)程序的安全性。除了這些語(yǔ)言,D語(yǔ)言和OCaml也支持自動(dòng)邊界檢查,但是允許用戶通過(guò)編譯器的一個(gè)開關(guān)選項(xiàng)來(lái)選擇是否啟用該功能。差一錯(cuò)誤,又稱“柵欄錯(cuò)誤”:一個(gè)柵欄被一些柱子分區(qū)成10段,柱子的根數(shù)應(yīng)該是11根,而不是10根。然而,有一些編程語(yǔ)言(比如C語(yǔ)言)為了提高速度,從來(lái)都不會(huì)自動(dòng)進(jìn)行邊界檢查,這經(jīng)常導(dǎo)致差一錯(cuò)誤(見圖1)和緩沖區(qū)溢出的發(fā)生。許多程序員認(rèn)為這些語(yǔ)言為了速度所付出的代價(jià)太大了。在1980年圖靈獎(jiǎng)講座上,東尼·霍爾講述了他設(shè)計(jì)包含邊界檢查的ALGOL 60語(yǔ)言時(shí)的經(jīng)歷:該方法的原理主要是在程序運(yùn)行時(shí),每個(gè)含有下標(biāo)的變量中的下標(biāo)在每次被使用的時(shí)候總是會(huì)與變量下標(biāo)的上界和下界都進(jìn)行比較。許多年后,我詢問(wèn)我們的一些客戶是否需要提供一個(gè)“在編譯發(fā)行版時(shí)關(guān)閉該功能以保證速度”的選項(xiàng)時(shí),他們都毫不猶豫的勸我們一定不要加入這個(gè)功能。因?yàn)樗麄冎老聵?biāo)越界是多常見的事情,并且在實(shí)際應(yīng)用中,偶爾一次沒(méi)檢測(cè)到的下標(biāo)越界所帶來(lái)的結(jié)果便會(huì)是災(zāi)難性的。我注意到即便在1980年,語(yǔ)言的設(shè)計(jì)者和用戶仍沒(méi)有意識(shí)到這一點(diǎn),這令我十分擔(dān)心。若是在工程領(lǐng)域的任何一個(gè)重要的分支中,沒(méi)能注意到這些低級(jí)錯(cuò)誤都是有違常理的。
范圍檢查經(jīng)常被用于確保某個(gè)數(shù)字處在一個(gè)特定的范圍之內(nèi)。通常在訪問(wèn)數(shù)組的時(shí)候會(huì)進(jìn)行該檢查,因?yàn)楫?dāng)數(shù)組下標(biāo)越界的時(shí)候,數(shù)據(jù)會(huì)被寫入其它變量的空間,甚至?xí)采w壓棧的寄存器數(shù)值。這樣一來(lái),程序可能會(huì)崩潰,或者是導(dǎo)致一些安全漏洞的產(chǎn)生。在Java中,Java虛擬機(jī)將在嘗試訪問(wèn)數(shù)組中的元素的時(shí)候,自動(dòng)的進(jìn)行數(shù)組邊界檢查,并且在下標(biāo)越界的時(shí)候引發(fā)異常。
范圍檢查的另一個(gè)常見用途是在兩種數(shù)據(jù)類型相互轉(zhuǎn)換的時(shí)候。在構(gòu)建在.NET Framework上的語(yǔ)言中,超出范圍的強(qiáng)制轉(zhuǎn)換將引發(fā)Invalid Cast Exception類型的異常。
比如將一個(gè)32位有符號(hào)整數(shù)類型的變量強(qiáng)制轉(zhuǎn)換到一個(gè)16位有符號(hào)整數(shù)類型的變量之前,會(huì)檢查這個(gè)變量的值是否在-32768~ 32767之間(16位有符號(hào)整數(shù)可以表示的整數(shù)范圍),而不是諸如32768之類的無(wú)法表示的數(shù)字。2100433B
基礎(chǔ)邊界在哪啊,白色虛線框是笩板基礎(chǔ)邊界還是墊層邊界呢?
基礎(chǔ)邊界在哪啊,白色虛線框是笩板基礎(chǔ)邊界還是墊層邊界呢?——:白色虛線是筏板基礎(chǔ)外邊線的吧您看看您的基礎(chǔ)大樣圖
答:路面寬度不包路緣石含路平石,人行道寬度含路緣石和路側(cè)石。
理正計(jì)算中,輸入面邊界后,點(diǎn)邊界還要不要輸入?
你說(shuō)的是理正的滲流分析模塊吧,我在幾個(gè)小型水庫(kù)上用過(guò),據(jù)我的經(jīng)驗(yàn)一般只要“面邊界條件”輸入正確,那么“點(diǎn)邊界條件”可不用輸入,結(jié)果沒(méi)有影響。如果要非要輸入“點(diǎn)邊界條件”,則可以輸入下游水位與坡面交點(diǎn),...
格式:pdf
大小:49KB
頁(yè)數(shù): 4頁(yè)
評(píng)分: 4.5
2.3.1 定義 退線距離 :系指建筑物后退各種規(guī)劃控制線(包括:規(guī)劃道路、綠化隔離帶、鐵路隔離 帶、河湖隔離帶、高壓走廊隔離帶)的距離。 退界距離 :系指建筑物后退相鄰單位建設(shè)用地邊界線的距離。 城市道路 :系指在總體規(guī)劃和分區(qū)土地使用規(guī)劃中已確定的及詳細(xì)規(guī)劃中規(guī)定的主干 道、次干道、支路。 建筑工程與城市道路之間的距離 :系指建筑物臨城市道路一側(cè)最突出部分與道路紅線 之間的水平方向的垂直距離。 城市道路寬度 :系指該道路兩側(cè)規(guī)劃紅線之間的水平方向的垂直距離。 現(xiàn)有城市道路路面邊線 :當(dāng)路面為單幅路時(shí),系指路牙線;當(dāng)路面為三幅路 (機(jī)動(dòng)車道 與非機(jī)動(dòng)車道之間以隔離帶分隔 )時(shí),系指非機(jī)動(dòng)車道路牙線。 2.3.2 退讓規(guī)劃道路紅線距離 一般規(guī)定: 1.不允許突入道路紅線的建筑突出物:建筑物的臺(tái)階、平臺(tái)、窗井、坡道、花池、散 水、地下室進(jìn)排風(fēng)口、地下建筑及建筑基礎(chǔ);除基地內(nèi)連接城市管線以
格式:pdf
大小:49KB
頁(yè)數(shù): 9頁(yè)
評(píng)分: 4.4
總包工程施工范圍 3 【附件四】 總包工程施工范圍 1、土建專業(yè)施工范圍: ........................................................ 4 1.1 土建專業(yè)施工范圍: .................................................... 4 1.2 土建總包與各分包項(xiàng)目的工作內(nèi)容邊界劃分 ................................ 5 1.2.1 與基坑邊坡支護(hù)及土方的邊界劃分 .................................. 5 1.2.2 與人工挖孔樁及墩邊界劃分 ........................................ 6 1.2.3 與玻璃幕墻、采光蓬的劃分 ...........................
ZnO壓敏電阻的晶粒涂料邊界從結(jié)晶的Bi-O變化到無(wú)定形相,最終變化為ZnO-ZnO晶粒沒(méi)有任何第二相。這種變化看來(lái)決定于晶粒邊界的總厚度。
結(jié)晶相和無(wú)定形相存在于Bi-O相寬度15~50nm處的點(diǎn)所以,采用高分辨率的HREM沿ZnO晶粒邊界從三角結(jié)點(diǎn)到無(wú)第二相的點(diǎn)處追蹤觀測(cè)了Bi—相的形態(tài)。Bi偏析區(qū)范圍還采用具有能量彌散X衍射光譜的場(chǎng)致發(fā)射型TEM進(jìn)行了精確分析。
邊界值測(cè)試 【Boundary value testing】
因此針對(duì)各種邊界情況設(shè)計(jì)測(cè)試用例,可以查出更多的錯(cuò)誤。使用邊界值分析方法設(shè)計(jì)測(cè)試用例,首先應(yīng)確定邊界情況。通常輸入等價(jià)類與輸出等價(jià)類的邊界,就是應(yīng)著重測(cè)試的邊界情況。應(yīng)當(dāng)選取正好等于,剛剛大于,或剛剛小于邊界的值做為測(cè)試數(shù)據(jù),而不是選取等價(jià)類中的典型值或任意值做為測(cè)試數(shù)據(jù)。
1.定義:邊界值分析法就是對(duì)輸入或輸出的邊界值進(jìn)行測(cè)試的一種黑盒測(cè)試方法。通常邊界值分析法是作為對(duì)等價(jià)類劃分法的補(bǔ)充,這種情況下,其測(cè)試用例來(lái)自等價(jià)類的邊界。
2.與等價(jià)劃分的區(qū)別
1)邊界值分析不是從某等價(jià)類中隨便挑一個(gè)作為代表,而是使這個(gè)等價(jià)類的每個(gè)邊界都要作為測(cè)試條件。
2)邊界值分析不僅考慮輸入條件,還要考慮輸出空間產(chǎn)生的測(cè)試情況。
3.邊界值分析方法的考慮:
長(zhǎng)期的測(cè)試工作經(jīng)驗(yàn)告訴我們,大量的錯(cuò)誤是發(fā)生在輸入或輸出范圍的邊界上,而不是發(fā)生在輸入輸出范圍的內(nèi)部。因此針對(duì)各種邊界情況設(shè)計(jì)測(cè)試用例,可以查出更多的錯(cuò)誤。
使用邊界值分析方法設(shè)計(jì)測(cè)試用例,首先應(yīng)確定邊界情況。通常輸入和輸出等價(jià)類的邊界,就是應(yīng)著重測(cè)試的邊界情況。應(yīng)當(dāng)選取正好等于,剛剛大于或剛剛小于邊界的值作為測(cè)試數(shù)據(jù),而不是選取等價(jià)類中的典型值或任意值作為測(cè)試數(shù)據(jù)。
4.常見的邊界值
1)對(duì)16-bit 的整數(shù)而言 32767 和 -32768 是邊界
2)屏幕上光標(biāo)在最左上、最右下位置
3)報(bào)表的第一行和最后一行
4)數(shù)組元素的第一個(gè)和最后一個(gè)
5)循環(huán)的第 0 次、第 1 次和倒數(shù)第 2 次、最后一次
5.邊界值分析
1)邊界值分析使用與等價(jià)類劃分法相同的劃分,只是邊界值分析假定錯(cuò)誤更多地存在于劃分的邊界上,因此在等價(jià)類的邊界上以及兩側(cè)的情況設(shè)計(jì)測(cè)試用例。
例:測(cè)試計(jì)算平方根的函數(shù)
--輸入:實(shí)數(shù)
--輸出:實(shí)數(shù)
--規(guī)格說(shuō)明:當(dāng)輸入一個(gè)0或比0大的數(shù)的時(shí)候,返回其正平方根;當(dāng)輸入一個(gè)小于0的數(shù)時(shí),顯示錯(cuò)誤信息"平方根非法-輸入值小于0"并返回0;庫(kù)函數(shù)Print-Line可以用來(lái)輸出錯(cuò)誤信息。
2)等價(jià)類劃分:
I.可以考慮作出如下劃分:
a、輸入 (i)<0 和 (ii)>=0
b、輸出 (a)>=0 和 (b) Error
II.測(cè)試用例有兩個(gè):
a、輸入4,輸出2。對(duì)應(yīng)于 (ii) 和 (a) 。
b、輸入-10,輸出0和錯(cuò)誤提示。對(duì)應(yīng)于 (i) 和 (b) 。
3)邊界值分析:
劃分(ii)的邊界為0和最大正實(shí)數(shù);劃分(i)的邊界為最小負(fù)實(shí)數(shù)和0。由此得到以下測(cè)試用例:
a、輸入 {最小負(fù)實(shí)數(shù)}
b、輸入 {絕對(duì)值很小的負(fù)數(shù)}
c、輸入 0
d、輸入 {絕對(duì)值很小的正數(shù)}
e、輸入 {最大正實(shí)數(shù)}
4)通常情況下,軟件測(cè)試所包含的邊界檢驗(yàn)有幾種類型:數(shù)字、字符、位置、重量、大小、速度、方位、尺寸、空間等。
5)相應(yīng)地,以上類型的邊界值應(yīng)該在:最大/最小、首位/末位、上/下、最快/最慢、最高/最低、 最短/最長(zhǎng)、 空/滿等情況下。
6)利用邊界值作為測(cè)試數(shù)據(jù)
7)內(nèi)部邊界值分析:
在多數(shù)情況下,邊界值條件是基于應(yīng)用程序的功能設(shè)計(jì)而需要考慮的因素,可以從軟件的規(guī)格說(shuō)明或常識(shí)中得到,也是最終用戶可以很容易發(fā)現(xiàn)問(wèn)題的。然而,在測(cè)試用例設(shè)計(jì)過(guò)程中,某些邊界值條件是不需要呈現(xiàn)給用戶的,或者說(shuō)用戶是很難注意到的,但同時(shí)確實(shí)屬于檢驗(yàn)范疇內(nèi)的邊界條件,稱為內(nèi)部邊界值條件或子邊界值條件。
內(nèi)部邊界值條件主要有下面幾種:
a)數(shù)值的邊界值檢驗(yàn):計(jì)算機(jī)是基于二進(jìn)制進(jìn)行工作的,因此,軟件的任何數(shù)值運(yùn)算都有一定的范圍限制。
b)字符的邊界值檢驗(yàn):在計(jì)算機(jī)軟件中,字符也是很重要的表示元素,其中ASCII和Unicode是常見的編碼方式。下表中列出了一些常用字符對(duì)應(yīng)的ASCII碼值。
c)其它邊界值檢驗(yàn)
6.基于邊界值分析方法選擇測(cè)試用例的原則
1)如果輸入條件規(guī)定了值的范圍,則應(yīng)取剛達(dá)到這個(gè)范圍的邊界的值,以及剛剛超越這個(gè)范圍邊界的值作為測(cè)試輸入數(shù)據(jù)。
例如,如果程序的規(guī)格說(shuō)明中規(guī)定:"重量在10公斤至50公斤范圍內(nèi)的郵件,其郵費(fèi)計(jì)算公式為……"。作為測(cè)試用例,我們應(yīng)取10及50,還應(yīng)取10.01,49.99,9.99及50.01等。
2)如果輸入條件規(guī)定了值的個(gè)數(shù),則用最大個(gè)數(shù),最小個(gè)數(shù),比最小個(gè)數(shù)少一,比最大個(gè)數(shù)多一的數(shù)作為測(cè)試數(shù)據(jù)。
比如,一個(gè)輸入文件應(yīng)包括1~255個(gè)記錄,則測(cè)試用例可取1和255,還應(yīng)取0及256等。
3)將規(guī)則1)和2)應(yīng)用于輸出條件,即設(shè)計(jì)測(cè)試用例使輸出值達(dá)到邊界值及其左右的值。
例如,某程序的規(guī)格說(shuō)明要求計(jì)算出"每月保險(xiǎn)金扣除額為0至1165.25元",其測(cè)試用例可取0.00及1165.24、還可取一0.01及1165.26等。
再如一程序?qū)儆谇閳?bào)檢索系統(tǒng),要求每次"最少顯示1條、最多顯示4條情報(bào)摘要",這時(shí)我們應(yīng)考慮的測(cè)試用例包括1和4,還應(yīng)包括0和5等。
4)如果程序的規(guī)格說(shuō)明給出的輸入域或輸出域是有序集合,則應(yīng)選取集合的第一個(gè)元素和最后一個(gè)元素作為測(cè)試用例。
5)如果程序中使用了一個(gè)內(nèi)部數(shù)據(jù)結(jié)構(gòu),則應(yīng)當(dāng)選擇這個(gè)內(nèi)部數(shù)據(jù)結(jié)構(gòu)的邊界上的值作為測(cè)試用例。
6)分析規(guī)格說(shuō)明,找出其它可能的邊界條件。
二.實(shí)戰(zhàn)演習(xí)
1.現(xiàn)有一個(gè)學(xué)生標(biāo)準(zhǔn)化考試批閱試卷,產(chǎn)生成績(jī)報(bào)告的程序。其規(guī)格說(shuō)明如下:程序的輸入文件由一些有80個(gè)字符的記錄組成,如右圖所示,所有記錄分為3組:
①標(biāo)題:這一組只有一個(gè)記錄,其內(nèi)容為輸出成績(jī)報(bào)告的名字。
②試卷各題標(biāo)準(zhǔn)答案記錄:每個(gè)記錄均在第80個(gè)字符處標(biāo)以數(shù)字"2"。該組的第一個(gè)記錄的第1至第3個(gè)字符為題目編號(hào)(取值為1一999)。第10至第59個(gè)字符給出第1至第50題的答案(每個(gè)合法字符表示一個(gè)答案)。該組的第2,第3……個(gè)記錄相應(yīng)為第51至第100,第101至第150,…題的答案。
③每個(gè)學(xué)生的答卷描述:該組中每個(gè)記錄的第80個(gè)字符均為數(shù)字"3"。每個(gè)學(xué)生的答卷在若干個(gè)記錄中給出。如甲的首記錄第1至第9字符給出學(xué)生姓名及學(xué)號(hào),第10至第59字符列出的是甲所做的第1至第50題的答案。若試題數(shù)超過(guò)50,則第2,第3……紀(jì)錄分別給出他的第51至第100,第101至第150……題的解答。然后是學(xué)生乙的答卷記錄。
④學(xué)生人數(shù)不超過(guò)200,試題數(shù)不超過(guò)999。
⑤程序的輸出有4個(gè)報(bào)告:
a)按學(xué)號(hào)排列的成績(jī)單,列出每個(gè)學(xué)生的成績(jī)、名次。
b)按學(xué)生成績(jī)排序的成績(jī)單。
c)平均分?jǐn)?shù)及標(biāo)準(zhǔn)偏差的報(bào)告。
d)試題分析報(bào)告。按試題號(hào)排序,列出各題學(xué)生答對(duì)的百分比。
解答:分別考慮輸入條件和輸出條件,以及邊界條件。給出下表所示的輸入條件及相應(yīng)的測(cè)試用例。
輸出條件及相應(yīng)的測(cè)試用例表。
2.三角形問(wèn)題的邊界值分析測(cè)試用例
在三角形問(wèn)題描述中,除了要求邊長(zhǎng)是整數(shù)外,沒(méi)有給出其它的限制條件。在此,我們將三角形每邊邊長(zhǎng)的取范圍值設(shè)值為[1, 100] 。
3.NextDate函數(shù)的邊界值分析測(cè)試用例
在NextDate函數(shù)中,隱含規(guī)定了變量mouth和變量day的取值范圍為1≤mouth≤12和1≤day≤31,并設(shè)定變量year的取值范圍為1912≤year≤2050 。2100433B
利用溫度邊界層的概念??墒箤?duì)流換熱溫度場(chǎng)和對(duì)流換熱系數(shù)的分析求解大為簡(jiǎn)化。
流動(dòng)邊界層和熱邊界層的狀況決定了邊界層內(nèi)的溫度分布和熱量傳遞過(guò)程。
對(duì)于層流,溫度呈多項(xiàng)式曲線弄分布,對(duì)于紊流則呈冪函數(shù)型分布(除液態(tài)金屬外),紊流區(qū)邊界層貼壁處的層流底層內(nèi)溫度梯度將明顯大于層流區(qū)。
在概述圖中,標(biāo)繪了局部表面?zhèn)鳠嵯禂?shù)hx沿平板的變化情況,從平板前緣開始,隨著層流邊界層增厚,hx將較快的降低。當(dāng)層流向紊流轉(zhuǎn)變后,因紊流傳遞作用增大,hx將明顯高于層流轉(zhuǎn)變前,隨后,由于紊流邊界層厚度增加,hx再呈緩慢下降之勢(shì)。將局部表面?zhèn)鳠嵯禂?shù)沿全板長(zhǎng)積分,可得全板平均表面?zhèn)鳠嵯禂?shù)h。 2100433B