« 『あなたは絶対!運がいい』 | Main | ???? ??? ???? ?????? »

Functional Testing vs Unit Testing

Her ne kadarTDDveUnit Testing' i bir boyutta uygulasam da yaz?l?m geli?tirirken XP (extreme programming) ya da benzer bir metodolojiyi s?k? s?k?ya takip etmiyorum. Her konuda yapt???m gibi a??k fikirli olup, de?i?ik yakla??mlar? analiz edip, haklar?nda bilgi toparlay?p kendi durumuma g?re kendihybridmodelimi kullanmaya ?al??t?r?yorum. Bu aralar ?zellikle yaz?l?m geli?tirme ile ?ok i? i?eyim ve bunun sonucunda Unit Testing, TDD ve Functional Testing konular?nda denemeler yap?p en iyi birle?imi bulmaya, i?imi en iyi g?recek ??z?me ula?maya ?al???yorum.Devam etmeden Functional Testing ile Unit Testing' e ve aralar?ndaki farklara bakal?m.Unit TestingSistemin en k???k birimlerini test etmektir,H?zl?d?rlar,?zolasyon kritiktir ve hi? bir testin di?er testleri ya bir d?? kayna??n ?al??an testleri etkilememesi gerekir. Bu amac? yerine getirmek i?in bir web server ya da file system eri?imde, ya da di?er herhangi bir class ile konu?ma noktas?ndaMockingdevreye girer,Kodda hata olu?tu?unda kesin olarak hatan?n nerede olu?tu?unu saptamak ?ok kolayd?r. (??nk? sistemin en k???k birimlerini test ediyoruz),Y?ksekCode Coveragealmaya uygundur,Genelde koddaki her de?i?iklikten sonra ?al??t?r?l?r. Bu sayede kodda g?z? kapal? de?i?iklik yapabilir ve bir sorun varsa an?nda fark?na varabilirsiniz. Bunun anlam? sorun ?ok daha b?y?meden ya da tasar?m?n i?erisine girmeden sorunu ??zmek demektir.Functional Testing(Automated)Sistemin par?alar?n? ya da sistemin b?t?n olarak i?leyi?ini otomatik ?ekilde test etmektir,Daha ger?ek?i testler ortaya ??kmas?n? sa?lar,Yava?t?rlar (izolasyonun az olmas? bunun ana nedenidir),Kodun bir yerinde hata olu?mas? testlerin b?y?k bir k?sm?n? ge?ersiz hale getirebilir,Kodda hata olu?tu?unda nokta at??? hatay? bulmak pek basit olmayabilir,Baz? testler Unit Testing' e g?re ?ok daha h?zl? yaz?labilir, ??nk? ?ok daha az test yapmak gerekir. Mesela bir class' ?n private method' lar? vs. test edilmez. Class' ?n geneli beklendi?i gibi ?al??mas? yeterlidir,Code Coverage' i y?kseltmek zor olabilir ??nk? her durumu geni? perspektiften simule etmek m?mk?n olmayabilir ya da gere?inden ?ok efor gerektirebilir,Yava?l???ndan dolay? ve coverage azl???ndan dolay? her kod de?i?ikli?inden ya da yeni koddan sonra ?al??t?r?lmaya pek uygun de?ildir.Functional Testing' i Unit Testing ile birlikte kullanmak pop?ler kullan?mlardan biri, bu sayede en ince detayda ve tam bir b?t?n olarak kodun beklenildi?i gibi?al??t??? otomatikolarak kontrol edilebilir.Genel olarak insanlar?n TDD (?nce test, sonra kod) ya da klasik Unit Testing yapmamalar?n?n nedeni testleri yazman?ngetirdi?i ekstra k?lfet. ?zellikle T?rkiye gibi agresif, k?sa deadline' l? projeler ile dolup ta?an yerlerde yaz?l?mc?lara Unit Testing ?nermek k?f?rm?? gibi alg?lan?yor. A??k?as? kimse ger?ek bir getirisi olmayan bir ?ey i?in ekstra vakit ay?rmak istemez ama bu i?in ger?ek ve g?zle g?r?l?r bir getirisi var (kan?tlanm?? m?? Hem evet hem hay?r! o ba?ka bir yaz? konusu).Hybrid ModelE?er...Yaz?l?m?n?n?z ?ok kritik bir i? yapm?yorsa, (?rnek: Ayda cirit atacak robot kontrol?, N?kleer f?ze tetikleyicisi, Merkez Bankas?n?n para-girdi ??kt? d?zenleyicisi, Britney Spears' a hava durumuna g?re ayakkab? ?nermecili?i )Geni? bir tak?ma ve uzun, rahat geli?tirme plan?na sahip de?ilseniz,Az koyup ?ok almak istiyorsan?z...bu model sizin i?inizi g?rebilir.Pareto Prensibinibilirsiniz, hani ?u 80/20 kural?. Bir s?redir bu mant??a dayanarak Functional Testing ile ve aralarda Unit Testing deste?i ile bir proje geli?tiriyorum ve otomatik testlerden alaca??m faydan?n %80' ini %20 efor ile ald???ma inan?yorum.Private method vs. leri test etmiyorum,?ok az mock objesi kullan?yorum,A??r? izolasyon yapm?yorum,K???k detaylar?n harici uzun soluklu functional testlere odaklan?yorum,Hata ??karma olas?l??? ?ok olan, kritik olan kod k?s?mlar?n? Unit Testing ile destekliyorum.Bu modelin en ciddi sorunlar?ndan biri kodunhighly coupled(Law of Demeter) olmas?na izin veriyor. Tabii ki bunu d?zeltmek geli?tirici olarak sizin elinizde ama TDD odakl? bir geli?tirmede highly coupled class' lar bulman?z pek m?mk?n olmayacakt?r. A??k?as? highly/tightly coupled olmayan kod yazmak ger?ektenzorbir i?.Bu benim yakla??m?m ?u ana kadar benim i?in istedi?im k?vamda ?al??t???n? s?yleyebilirim. E?er ?imdiye kadar hi? yapmad?ysan?z bu ?ekilde hafif bir ba?lang?? yapabilir ve biraz tad?n? ??kartabilirsiniz.Farkl? deneyimleri duymak da ho?uma gider. ?zellikle Unit Testing yap?p mutlu olanlar ya da yapmay? deneyip verim alamayanlar gibi.

関連記事