Ахборот ва педагогик технологиялар факультети


 Хатоларни тестлаш орқали аниқлаш


Download 0.59 Mb.
Pdf ko'rish
bet12/38
Sana18.06.2023
Hajmi0.59 Mb.
#1561244
1   ...   8   9   10   11   12   13   14   15   ...   38
Bog'liq
1111dasturlash texnologiyalari

3. Хатоларни тестлаш орқали аниқлаш
Чегаравий шартларни тестлаш
Биз дастур ёзилишида ҳамма ёзган кодларимизни жиддий назорат 
қилиб борсак, масалан цикл охирги қиймати массив чегарасидан чиқиб 
кетишининг олдини олиш ёки бошқаришнинг тўғри узатилишини назорат 
қилиш натижасида кодимиз хатосиз ёзилиши мумкин. Тестлаш усулларидан 


17
бири чегаравий шартларни тестлашдан иборатдир: ҳар сафар кичик код 
ёзишимиз билан масалан, цикл ёки шартли ифодани ёзиш биланоқ биз 
циклнинг керакли марта такрорланишини текшириб чиқишимиз, шартли 
ифода эса тармоқланишни тўғри амалга ошираётганини текширишимиз 
лозим. Бу жараён чегаравий шартларни тестлаш деб аталади. Бу 
текширишларда экстремал қийматлар назорат қилинади. Агар коднинг қайси 
бир блокида хато бўлса (одатда у чегарада бўлади) ва аксинча экстремал 
қийматларда код яхши ишласа кодда деярли хато бўлмайди. 
1-Мисол. 
Var 
N,i: integer; 
S:array [1..n] of integer; 
begin 
for i:=1 To n do 
S[i+1]:=0; 
end; 
Бу циклнинг тўғри ишлашини текширамиз. Текширишимиз лозим 
бўлган биринчи чегаравий шарт – бу циклнинг экстремал қийматидир. Бу 
ҳолда цикл i=n қийматда тўхтайди, чунки S массивнинг четки қийматидан 
чиқиб кетади. S[n+1] -аниқланмаган. Бу чегаравий хатодир, яъни массив 
чегарасидан ташқарига чиқади. Демак биринчи чегаравий шартни текшириш 
хатони аниқлади. Худди шу усулда энди бошқа чегаравий шартларни ҳам 
текшириб чиқиш лозим, агар улар бўлса. 
Саволлар ва машқлар 
1-мисол. Қуйидаги дастур фрагментда компилятор аниқлай 
олмайдиган жиддий мантиқий хато бор, уни аниқланг ва дастурни 
таҳрирланг: 
x:=o; 
While x<=10 do; 
Begin
X;=x+1; 
End; 
Writeln(x); 
2-мисол. Қуйидаги дастур фрагмент бажарилишида компилятор қанақа 
хатони қайд қилади: 
Var 
X:1..5; 
Begin
x:=17; 
Writeln(x); Writeln(pred(x)); Readln; End.


18
3-мисол. Факториални ҳисоблашдаги хатони аниқланг. 
Int factorial(int n); 
Var 
N,fac:integer; 
Begin 
fac:=1; 
While n>=0 do 
Begin
fac:=fac*n; n:=n-1; end; end. 
4-мисол. S массиви элементлари қийматларини инициализация қилиш 
дастуридаги хатони аниқланг. 
Uses 
SysUtils; 
Cons; border:=10; 
Var 
s: array[1..10] of integer; I:integer; 
begin 
I:=10; 
While i<=border do 
begin
s[i+1]:=1; end; end. 
5-мисол. Дастурни ихчамлаштирш натижасида хатоларнинг пайдо 
бўлиш эҳтимолини камайтириш учун қуйидаги мисолни қандай ёзиш 
мумкин? 
С1:=10+B1*D**2; 
C2:=B+sin( R); 
C3:=5+A(1)*A(2); 
C:=(C1+C2)*C3; 
6-мисол. Дастурни ихчамлаштириш натижасида хатоларнинг пайдо 
бўлиш эҳтимолини камайтириш учун қуйидаги операторларни қандай ёзиш 
мумкин? 
С1:=10+cos(0.25*D); 
C2:=D+exp(D); 
C3:=15+M(1)*M(2); 
C:=(C1+C2)*C3; 

Download 0.59 Mb.

Do'stlaringiz bilan baham:
1   ...   8   9   10   11   12   13   14   15   ...   38




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling