17. okt 2008

Räägime ka enda tehtud vigadest...

Enamasti on Eesti programmeerijatel kombeks hirmsasti teisi kritiseerida, kuigi võiks ise oma koodi kriitilise pilguga hinnata !

Mõtlesin, et prooviks midagi uut, räägiks enda poolt tehtud rumalatest vigadest. Ütleme nii, parimad palad leidsin enda poolt tehtud suurimast Eesti teavitussüsteemist :)

Enamus vigu olid kiirustamise põhjused, sest toodet taheti hirmus kiiresti, testperiood minimaalne. Tüüpprobleem Eesti IT arendustes.


1: palake...

services oli globaalne muutuja, var i : integer;

nüüd, kuna tegemist on servisega ning mitmekümne kiuga, siis tore crash toimus.

function Tfastjob.doscanQueue...
begin
i:=jobsinqueue();
while (i<5) do
begin
end;
end;

Kujutage nüüd ette seda olukorda, esiteks see muutuja sünkroniseerimata, väärtustatakse globaalselt. Tulemus; mitu nädalat võib töötada, siis ootamatu crash.

...oleks pidanud olema...

function Tfastjob.doscanQueue...
var
i : integer;
begin
i:=jobsinqueue();
while (i<5) do
begin
end;
end;


Üldse, kui aus olla, on globaalsed muutujad kurjast, võimaluse korral ära kasuta neid ! Või koonda nad kuhugi struktuuri / klassi.

2: palake...

Transaktsioonide mismatch.
Ehk olukord
try
...startTransaction;


....kontrollin asju
if valeaegteavitada then
exit;


...commit tran
except
...rollback tran;
end;


Rollbacki ei tehtud ! Finally sektsioon puudus. Järgmine kord uuesti transaktsiooni avamisel eelmine tõmmati tagasi.

3: palake

Kutsud välja TADOStoredproc aga protseduuris tekib viga, kuid siiski protseduur väljastab dataseti..."viga" kaob kuhugi. Ja kood peale seda läheb programmis siiski täitmisele.


Lahendus, protseduurile anda error parameeter mida kontrollida.


create proc kypsetakoodi(@koodiliik int,@viga varchar(255) output) ...



Kiirustades ei saa ega tohi programmeerida !

Kommentaare ei ole: