Archive for the “tdd” Category


3 arkadas para birlestirip bir radyo almaya gidiyorlar. Radyo 30 lira. Hepsi 10′ar lira koyup radyoyu alip gidiyorlar. Fakat sonra tezgahtar radyonun indirime girdigini ve 25 liraya düstügünü hatirliyor. Çiragina 5 lira verip,gidip para üstünü iade etmesini istiyor. Çirak 5 lirayi 3 kisiye bölüstüremeyecegini düsünüp 2 lirayi cebine atiyor ve 3 lirayi 3 kisi arasinda bölüstürüyor. Böylece elemanlar radyoyu 9′ar liraya almis oluyorlar.
toplamda 10X3 = 30 lira vermislerdi. 1 ‘ er lira geri alinca adam basi 9 ‘ ar lira vermis oldular.
9×3=27 lira
2 lirayi da cirak cebe atmisti. 27+2 = 29 lira
eeee peki ama 30-29 = 1 lira nerede?

Bu sasirtmacali soruyla karsilasmayaniniz yoktur sanirim. Soru bizi oyle zayif bir noktamizdan vuruyor ki saatlerce hesap kitap yapmamiza ragmen 1 liranin nerede oldugunu bir turlu bulamiyoruz. Buyrun bakin, hafizanizi tazeleyin. Google : 1 lira nerede ?

Cikan arama sonuclarina biraz goz atarsaniz “matematik bunu cozememistir” cevabindan tutunda “1 lira saticinin cebinde” diyene kadar, “soyut somut” olayina girip ortaya teoriler dokenine kadar bir cok cesitli cevaplar mevcut. Hatta soru bizi oylesine sartlandirmis ki gozlerimiz kor olmus adeta. Bazi sayfalarda cevabi dogru veren kisilere bile “hesabin hatali arkadasim, ortada 30 lira var ve 1 lirasi kayip” diye cevaplar yazilmis. Kisaca sebepsiz yere , sorunu tam olarak algilamadan, dusunmeden kendimizi 30 lirayi bulmaya sartlandirmisiz. 30 lira gercekten var midir ? Bulmamiz gereken sonuc gercekten 30 mudur diye hic dusunmeden.

ilerde kendi yazilim sirketimi kurdugumda is basvurusu icin gelen kisilere hangi dilleri biliyorsun sorusundan ziyade bu soruyu sormak istiyorum. Cunku sirkette bu soruyu cozmek icin epey ugrasan bir kisi zaten var. Bir tanesine daha gerek yok :)

delphi.blogda bu sorunun ne isi var diye dusunenlerden biraz daha sabir rica ediyorum. konuya girmeme az kaldi.

Kendimizi sartlandirma olayini sadece bu soruda degil malesef yazilim gelistirkende yapiyoruz. Sebepsiz yere kendimizi yanlis bir noktaya sartlandirip sonsuz bir donguye giriyoruz. Hobi amacli gelistirdigim bir projede teste dayali yazilim gelistirme yontemi kullanarak hobi amacli bir proje gelistiriyordum. TDD yontemini kullanirken yazdigim kodun % 100 u nu test edecek kodlar yazmam. Sadece yazilimin cekirdegini olusturan siniflarin kritik metodlari icin testler yazarim. Arabirim, bazi siniflarin birbiri ile iletisimi ve onemsiz ayrintilar icin test yazmak bana pek cazip gelmez. Boyle bir ortamin icerisindeyken projenin bazi calisma zamanlarinda yanlis isler yapip yanlis sonuclar dondurdugunu fark ettim. Hatayi duzeltmek icin ilk once birim testlerini kontrol ettim. her hangi bir sorun yoktu. Oyleyse test yazmadigim kodlar icerisinde gozden kacan bir kisim olmaliydi. aradim aradim aradim ama bulamadim. tekrar aradim aradim aradim yine bulamadim. artik oyle bir noktaya geldim ki sorunun delphin ya da windowstan kaynaklandigini dusunecek noktaya geldim. kafami toplamak icin biraz mola verdim. test yazmadigim kodlari yeniden kontrol ettim, hatali ya da hataya acik olabilecek cok fazla bir kod yoktu. Test yazmis oldugum kodlari incelemeye basladim. onlarda da bir hata gozukmuyordu. sonradan aklima yukarida anlattigim hikaye geldi. 1 lira nerde hikayesi. zamanin da 1 liranin nerde oldugunu cok aramis fakat sorunun beni sartlandirdigi yoldan gittigim icin bulmam biraz zor olmustu. Ne zaman ki farkli bir yol izleyerek soruyu cozmeye calismis o zaman “haaaaassssssseeekkkkttttooooorrrrr” demistim kendi kendime. ortada 1 lira yok ki 1 lirayi ariyorum iki saattir.

farkli yol ise suydu.
radyo 30 lira degilde 60 liraydi.
3 arkadas 20 ser lira verdiler radyoyu aldilar
sonra dukkan sahibi 10 lirayi geri gonderdi. cirak 10 lirayi 3 kisiye pay edemem diyerek
7 lirayi cebe atti ve 1 er lirayi geri verdi.

simdi elemanlar radyoyu 19 sar lira vererek kaca almis oldular soruya gore ?
57 liraya
e 7 lirayi da cirak cebe atmisti. 57+7 = 64 lira
hobaaaaa!
diger soruda 1 lira eksikti. bu soruda 4 lira fazla var :)

iste benim jeton burda dustu :)

bu dusunceyle varolan testlere alternatif olsun diye degisik rakam ve mantiklarla birer test daha yazdim. ve hobaaaa !

test ciftlerinden birisi testi gecerken birisi gecemedi.

1 lirayi ararken on yargilarim beni iki farkli yerde yaniltti.
1. si test yazdigim kodlarda hata yoktur diye iyice kontrol etmemem.
2. si test icerisinde yapilan islemi tek bir yolla kontrol etmenin beni hatalardan koruyacagini dusunmem.

Comments 1 Comment »

bilesen yazma , indy ve eco hakkinda yazilmis guzel makaleler icin buraya, intraweb bilesenleri hakkinda ise buraya, son zamanlarda yazilim aleminde oldukca dikkat ceken agile methodlara delphi cephesinden bakmak isterseniz de buraya bakabilirsiniz.

Comments No Comments »

Evvel zaman icinde kalbur zaman icinde develer tellal iken pireler berber iken ben ninemin besiginde tingir mingir sallanirken keloglan bilgisayarin basinda kafayi cizmek uzereymis. Hemde bu cizme olayi o kadar ilerlemiski keloglanin kafasinda sac kalmamis, karakacan acliktan zayiflamis, aykiz bekleye bekleye otobus duragi olmus. Tum bu olanlarin nedeni ise keloglanin yazilim gelistirirken uygulamis oldugu birim testlerinin cok cok zaman almasiymis.

Keloglan ‘in bazi nesneleri kafdaginin arkasina internet uzerinden baglanip anka kusunun haftanin hangi gunleri bos oldugunu soruyor bazi nesneleri sihirli guvercinin nerede oldugunu ogreniyor bazi nesneleri de uzaktaki web servislerine baglanip kendi hesabindan anasinin hesabina havale yapiyormus.

Bu islemlerde kendi ic ortamindan bagimsi,z dis ortamlarla alakali oldugu icin dogal olarak birim testlerinin calismasi uzun suruyormus.

Madem durum bu gelin hep birlikte el atalim ve keloglani, karakacani ve aykizi bu iskenceden kurtaralim :)
Teste dayali yazilim gelistirirken onumuze cikan problemlerden bir tanesi de disa bagimli olan nesnelerdir. Bu nesneler dis dunyayla iletisim kurarak gerekli parametreleri dis dunyadaki servise aktarirlar ve gelen cevaba gore islem yapmaya devam ederler. Ornek vermek gerekirse bir kisinin tc kimlik numarasini bulmak icin tckimlik.nvi.gov.tr adresindeki web servislerini bu olaya ornek olarak gosterebiliriz. Bu durumun bize getirdigi dezavantaj yavasliktir. Eğer birim testlerimizin icerisinde bu servisi kullanan bir nesnemiz varsa hem bizimle alakasi olmayan bir servisin test edilmesi soz konusu hem de birim testlerimizin calisma suresini cok cok uzatmasi soz konusu. Bu dezavantajlari ortadan kaldirarak birim testlerinin calisma suresini oldukca kisaltabiliriz.

sorunu cozmek icin asmamiz gereken iki problem var.
1- dis ortamlara olan cagrilari test kodlarimizin arasindan kaldirmaliyiz
2- dis ortamlara olan cagrilari kaldirirken oyle bir ayar cekmemiz lazim ki diger kodlar (testler) sanki dis ortama baglanip veri almaya devam ediyorlarmis gibi hareket etmeliler.

(more…)

Comments No Comments »

Biri bizi gozetliyor! adinda daha onceden bir yazi yazmistik ve testlerini de ileriki zamanlarda burda inceleyecegimizi belirtmistik. Gordugunuz uzere sozumuzu tutuyoruz ve testlerimizi incelemeye basliyoruz. :)
Hatirlayacaginiz uzere projede iki temel sinifimiz vardi. Bi tanesi TAbstractIzlenenBilesen digeri ise TIzleyici adli siniflarimiz. TAbstractIzlenenBilesen adli nesnemizden de tureyen 4 tane daha sinifimiz var.

Testlerimizi yazmaya nerden baslamaliyiz?

(more…)

Comments No Comments »