+ Cevap Yaz
4 sonuçtan 1 ile 4 arası gösteriliyor

Konu: Unit Testing

  1. #1
    .Net-kolik writeLine Adlı Üyenin Profil Grafiği
    Üyelik Tarihi
    02/2005
    Yer
    Bursa
    Mesaj
    938

    Unit Testing

    Volkan hocam daha önce asp.net kısmında (http://forum.ceviz.net/aspnet-silver...r-musunuz.html (unit test kullaniyor musunuz?)) bi açılış yapmıştı ancak burada da olması önemli diye düşünüyorum.

    Sorularıma geleyim...
    1. Neden Unit Test yazmalıyız?
    2. Unit Test yazmanın avantajları, dezavantajları nelerdir?
    3. Unit Test yazmanın mantığı nedir?
    4. Örnekler verebilirmisiniz?

    Burada merak ettiğim konu şu aslında ufak tefek unit test yazıyorum. Assert.AreEqual diyerek action dan dönen sonuçları falan karşılaştırabiliyoruz ve test ekranında yeşil veya kırmızı görebiliyoruz sonuç olarak. Ama ben zaten unit test yazmadan da debug yapabiliyorum. Unit test yazmamın ne avantajı olacak. Üstüne üstlük her action için ayrıyetten en az 1 tane test yazmak, bana şuan için angarya geliyor. Bilen kullanan arkadaşlar öyle bir anlatın ki hemen o dakka unit test'siz düşünemeyeyim kodlarımı. )

    Daha önce bikaç araştırma yapmıştım ama çok fazla bir bilgi edinemedim hem işlerin yoğunluğundan hemde unit test olayının kafamda tam oturmamasından dolayı çok fazla araştırmaya gerek duymadığımdan herhalde...

  2. #2
    Varlığa izin veren boşluk anov Adlı Üyenin Profil Grafiği
    Üyelik Tarihi
    04/2004
    Yer
    Mavi kabarcığın içi
    Mesaj
    3,167

    Henüz unit test kullanmamış, ancak o yolda çok hevesli biri olarak görüşlerimi paylaşayım.

    1. Evet, normalde uygulamamızda hata ayıklayabiliyor veya test edip sonucu görebiliyoruz. Ancak yaptığımız uygulamanın her değişikliğinde, her bir parçanın (unit) daha önce yaptığı işlevleri aynen yerine getirdiğinden emin olmak daha iyi değil mi?

    2. Dezavantajı sanırım sadece vakit alması. Ancak bir uygulama yazarken vaktimizi çalan en büyük problem karşılaştığımız hatalar değil midir? Unit test ile çalışma zamanı hatalarını kolayca yakalayabiliriz. Ayrıca, birbirini kullanan kod parçalarında temel kodu değiştirdiğinde, onu çağıran kodun hata verdiğini (bu hatayı çalışma zamanında verdiğini düşünelim) kodu tekrar çalıştırmadan sana haber vermesi paha biçilemez bir özelliktir bence.

    3. Unit test, önceden bilinen verilere karşı programının belli parçalarını çalıştırmak ve sonucu otomatik olarak gözlemektir. Hatta işi abartıp programı yazmadan önce unit testlerini yazan ve tüm testler hatasız sonuç verinceye kadar geliştiren kişiler olduğunu da okumuştum.

    4. Maalesef örnek veremiyorum.

  3. #3
    Yönetim Kurulu teddmcload Adlı Üyenin Profil Grafiği
    Üyelik Tarihi
    01/2003
    Mesaj
    1,648

    bir önerim olacak : http://www.artofunittesting.com/

  4. #4
    wanna sleep more Volkan Uzun Adlı Üyenin Profil Grafiği
    Üyelik Tarihi
    11/2002
    Yer
    California colleri
    Mesaj
    2,902

    unit test yazarken eger ki bir de tdd yonetimin izlersek fikirlerimi belirteyim. simdi tdd derken, once testi yaziyorsunuz. Bunu yaparsaniz oncelikle derleme hatasi alacaksiniz cunku daha ortada test etmeye calistiginiz sinif bile yok. Simdi bu anlamasi zor bir konsept oldugu icin biraz acmak lazim bunu. Ornek olarak Bir web sayfasini indirip, icindeki emailleri toplayan bir kod yazacaksiniz diyelim.
    Bu basit kod parcasi ile bircok modulden olusuyor, ama su an test etmek istedigim EmailBul isimli bir fonskiyon, bu fonksiyon geriye string donuyor ve parametre olarakta string aliyor mesela html parcasi gibi. Bunun imzasi soyle olabilir:
    PHP Kodu:
    public string EmailBul(string HtmlText); 
    Simdi daha koda bile baslamadan once testi yapabiliriz aslinda:
    PHP Kodu:
    [Test]
    public 
    void EmailBul_Should_Return_EmptyString_When_ThereIs_NO_Email()
    {
       
    string NoEmail="test";
       
    string foundEmail EmailBul(NoEmail);
      
    Assert.AreEqual(String.Empty,foundEmail);

    Simdi bu kod ilk basta derlemeyecek bile, simdi henuz EmailBul nedir yazmadik. Ama bu red alan unit test sayesinde, aslinda programi sadece test etmedik ayni zamanda yavas yavas dokumantasyon, ileride bakimi yapacak kisiye yardim, ve de loosely coupled yazmaya basladik.
    Simdi yapilmasi gereken sey, kodun derlenmesi ve testin gecmesi icin minimum kodu yazmak.
    Ornek olarak
    PHP Kodu:
    public string EmailBul(string HtmlKod)
    {
        
    string emailPattern= @"\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*";
       
    Regex regEmail = new Regex(emailPattern);
       
    //kodun geri kalani

    simdi diger testleri yazmak gerekiyor, ama testleri yazarken (once test yazarsan koddan once) muhtemelen su testler aklina gelecek
    1. eger htmlKod hic karakter yoksa fonksiyonum ne doner
    2. acaba birden fazla email varsa ne olacak

    bu testleri yazip bunlarin gecmesi icin kodlari yazarsan, sunlari gerceklestirmis olacak:
    1. yazdigin testler olcusunde kodun calisiyor
    2. farkinda olmadan bagimsiz kod parcasi yazdin (eger kodun icinde baska bir yere bagimlilik olsaydi mesela veritabani baglantisi gibi, unit test yazamazdin mock etmek zorunda kalirdin)
    3. senden sonra koda bakan kisi, testlerin isimlerini okuyup fonksiyonlarin ne yaptigini hangi kosullarda calismasi gerektigini biliyor. kodun dokumantasyounun (developer icin) yapmis oluyorsun
    4. ileride kodunda ufacik degisiklik yapsan, testleri tekrar calistiginda , degisikligin probleme yol acip acmadigini aninda goruyorsun.
    5. testleri onceden yazdigin icin kodunu onceden dizayn etmis oluyorsun

    zaman kaybi olmuyor buyuk projelerde, cunku debugging suresi azaliyor
    When working with LINQ, the key is like Yoda to think
    http://www.msnetprogrammer.net/blog (MCP & MCTS & MVM)

+ Cevap Yaz

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

     

Bookmarks

Mesaj Yazma Hakları

  • Yeni mesajgöndermezsiniz
  • Cevap yazamazsınız
  • Dosya ekleyemezsiniz
  • Mesajınızı düzenleyemezsiniz