Citat:
degojs: Pa evo zašto mislim da nije problem, a ti me ispravi ako grešim:
Zašto bi bio problem ako mi proslediš string koji sadrži float umesto int? Pretpostavka je da jezik sam ume da uradi konverziju (string -> broj) ako je potrebno te će pasti na testu jer će rezultat biti pogrešan, a ako ne ume da vrši konverziju (ili je uradi u pogrešnom smeru npr. int -> string pa uradi lepljenje teksta umesto sabiranja), test će da padne još pre ili opet na kraju.
Ok, osnovni primer (banalan ali dobar kao primer)
Code:
function Multi(a, b)
{
DB.Insert(a, b, a*b); // polje1 u bazi je int, DB.Insert je (int, float, float)
return a*b;
}
function Test_Multi()
{
Assert(Multi(2, 3) == 6);
}
Metod je "validan", test je green, i svi su happy, a Multi(3.5, 3.6) je neispravno. Recimo da je a kolicina prodatog artikla, b cena po artiklu. U bazu ode 3.5 komada sa neizvesnim upisom (mozda ce DB da ga flooruje na 3 ili zaokruzi na 4, sto ne mozes da znas bez da znas kako baza funkcionise i sta DB.Insert radi sa svojim parametrima), u svakom slucaju zapisani iznos a*b nece biti ispravan niti u skladu sa logikom metoda. Naravno, sto kompleksniji metod to kompleksnija i logika i to vise potencijalnih rupa po osnovu type unsafe.
Citat:
degojs: Što se TDDa i testova generalno tiče, sve se slažem, ne kažem da su garant da će sve biti OK, ali šta -- type safe jezici garantuju da će sve biti OK, i to bez ikakvih testova, kako je kolega nešto 'teo da kaže? Ma sigurno. Ne znam samo otkud onoliko test alati i za npr. Javu i C#.. I to još pominje nekakve stotine klasa. Pa lepo bez testova, samo napred, pa da vidimo šta će biti kad se malo ljudstvo na projektu menja i slično. Osim toga, testovi se valjda pišu i iz razloga da bi kasnije neko deseti mogao da uradi izmene negde, potera testove i uveri se da nije polomio nešto drugo usput.
Type safe jezici naravno ne garantuju ispravnost logike kode, ali garantuju ispravnost komunikacije izmedju pozivnog i pozvanog koda, tj preventivno deluju protiv gomile potencijalnih bagova izazvanih nepaznjom i hvataju ih tokom samog kompajliranja. Jedini nacin da u skript jezicima to uradis je da radis validaciju parametara na pocetku metoda, a ako to vec radis, sto jednostavno ne bi koristio type-safe jezik
Inace, mislim da si pomesao moje postove sa negyxovim, ja sam veliki poklonik testiranja i definitivno nisam negirao njegovu korist, samo ne kupujem pricu o TDD, tj o drugom slovu ovog akronima (D - Driven). Testiranje je odlican instrument za ranu detekciju logickih bagova i backward kompatibilnost koda da neko deseti ne bi pokrljao kod, ali testiranje definitivno po meni nije centralni aspekt koji treba da upravlja razvojem i definitivno mi skripi taj "minimalisticki" pristup testovima gde se kod steluje samo da bi prosao test bez obzira na sve ostalo. Pored toga, testiranje odredjenog dela koda treba da radi drugi tim ljudi koji kako bi se izbegao konflik interesa i slabljenje test koda.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić