Private Metodlar Test Edilebilir mi?

11 Eyl

Bu yazıda, sosyal topluluklarda karşılaştığım sorulardan biri üzerinde durmak istiyorum. Private erişim belirleyicili metodların test edilmesi mümkün mü? Ya da private metodların test edilmesine gerek var mı? Bu sorular Test Driven Development(TDD) konusunu ilk incelemeye başladığım zamanlarda benim de sürekli aklıma takılırdı.

TDD yaklaşımı ile geliştirme yapmak aslında test öncelikli(test first) geliştirme yapmaktır. Amacımız önce testlerin yazılmasıdır. Testler başarılı bir şeklide sonuçlandıkça çalışan kodun ortaya çıkmasıdır.

Bir sınıfın TDD yaklaşımı ile üretilmesi demek sınıfın ilk önce farklı bir test sınıfı yardımı ile üretilmesi, ardından da üyelerinin üretilmesi demektir. Sınıf üyeleri metod, property veya field şeklinde olabilir. Bir sınıf üyesine başka bir sınıf tarafından erişilebilmesi için, bu üyenin public erişim belirleyicisine sahip olması gerektiğini biliyoruz. Bu sebeple test sırasında üretilen sınıf üyelerinin erişim belirleyicileri de public şeklinde olacaktır. Test sınıfını ve test sırasında üretilen kodu görmek için basit bir örnek gösterim üzerinden ilerleyelim.

Test Sınıfı

[TestFixture]
public class MathOperationsTests
{
    [Test]
    public void Pow_ReturnResult()
    {
         MathOperations operations = new MathOperations();

         double result = operations.Pow(3, 4);

         Assert.AreEqual(81, result);
    }
 }

Üretim Kodu

public class MathOperations
{
     public double Pow(int number, int pow)
     {
         double result = 1;

         for (int i = 0; i < pow; i++)
             result = result * number;

         return result;
     }
 }

Önce test sınıfı oluşturuldu. Daha sonra erişim belirleyicileri public olan MathOperations sınıfı ve Pow metodu oluşturuldu. Pow metodu tam sayılarda üs alama işlemini yapmak üzere basit bir şekilde tasarlandı. Şimdi Pow metodu için bütün işlemlerin tamamlandığını varsayalım ve  MathOperations sınıfında bir takım kod iyileştirmesi yapalım.

public class MathOperations
{
    public double Pow(int number, int pow)
    {
        var result = calculate(number, pow);

        return result;
    }

    private double calculate(int number, int pow)
    {
        double result = 1;

        for (int i = 0; i < pow; i++)
           result = result*number;

        return result;
    }
 }

Üretim kodunu yeniden gözden geçirerek kodumuzun çalışmasını etkilemeden basit bir değişiklik yaptık. Bu değişiklik sonucunda üs alma işlemini private erişim belirleyicili başka bir metoda yüklemiş olduk. MathOperations sınıfında test edilmesi gereken tek metod şu anda Pow metodudur. calculate metodu, sadece sınıf içerisinde kullanılacağı için private olarak belirlenmiştir. Bu sebeple calculate metodunun test edilmesine gerek yoktur. Pow metodunun test edilmesi sırasında zaten calculate metodu çalışmaktadır. Yani zaten test sürecinden geçirilmektedir.

TDD yaklaşımını ilk öğrenmeye başladığım sıralarda benim de kafamı kurcalayan bir mesele olan private metodların testleri, aslında var olan bir sınıfın test edilmesi sırasında kafa karışıklığına yol açıyor. Yani var olan bir sınıfı test ederken, sınıf üyelerinden private erişim belirleyicisine sahip olan üyelerin de test edilmesi gerektiği, kafalarda bir soru işareti yaratabilir. Var olan bir sınıfın testinden kastım, daha önceden geliştirilmiş ve her hangi bir test sürecinden geçmemiş bir sistemdir.

Sonuç

TDD yaklaşımının doğru bir şekilde uygulanması, yani test öncelikli geliştirmenin doğru bir şekilde işletilmesi, private metodların test edilmesine gerek olmadığını ortaya koymaktadır.

SSL Güvenliği

9 Eyl

SSL Nedir?

SSL (Secured Sockets Layer), ağ üzerinde veri taşıma işleminin güvenli güvenli bir şekilde yapılabilmesi için Netscape tarafından geliştirilmiş ve standartlaşmış bir protokoldür.

SSL Sertifikası Nedir?

SSL sertifikası, bir kuruluşu tanıtan bilgileri, şifrelenmiş bir dijital anahtara bağlayan ufak veri dosyalarıdır. Bir SSL sertifikası üçüncü parti sertifika otoritsi tarafından üretilen ve şirketin web sitesinin o şirkete ait olduğunu doğrular. Gönderilen bilginin sadece doğru adreste deşifre edilmesini sağlar. SSL genellikle e-ticaret, bankacılık ve sosyal medya gibi veri güvenliğinin önemli olduğu sistemlerde kullanılır.

Bir web sayfasının kullanıcılar ile güvenli iletişim kurabilmesi için SSL sertifikasının WEB sunucusuna yüklemesi gerekmektedir. Sertifika yüklendikten sonra, WEB sayfasına https://www.domain.com şeklinde https protokolü kullanan bir adresten bağlanmak mümkündür. Güvenli bağlantı kurulduktan sonra WEB sunucusu ve WEB tarayıcısı arasındaki tüm trafik güvenli olacaktır.

WEB tarayıcıları, bir WEB ayfasının SSL güvenliğini, kullanıcılara bir kaç farklı yolla bildirir. Bunlar:

Genişletilmiş SSL Sertifika Doğrulaması (Extended Validation SSL Certificate)

Bu doğrulamayı yapan sitelere girdiğimizde adres çubuğunda aşağıdakine benzer bir görüntü ile karşılaşırız.

Adsız

Sarı ile işaretlenen bölgede kuruluş adınının adres çubuğunda gözükmesi, Extended Validation SSL olduğunu gösterir.

Adres çubuğunda kırmızı ile işaretlenen asma kilit ise sunucu ile kurulan bağlantının güvenli olduğunun işaretidir.

Standart SSL Sertifika Doğrulaması

Bu bağlantıda adres çubuğunda kuruluş adı gözükmez. Sadece güvenli bağlantının sembolü olan asma kilit gözükür.

Adsız2

Asma kilit işaretine tıkladığınızda kuruluşa ait sertifika bilgilerine ulaşabilirsiniz.

SSL Sertifikası Nasıl Temin Edilir?

Bir SSL sertifikasını sertifika sağlayıcı şirketlerden(Certificate Authority) temin edebileceğimiz gibi kendi bilgisayarımızda da oluşturabiliriz. Kendi bilgisayarımızda oluşturuduğumuz sertifikalar kullanıcı bilgisayarlar tarafından güvenilir sertifikalar olarak görülmez. Bunun sebebi sertifikayı oluşturanın güvenilir olup olmadığının bilinmemesidir. Ancak üçüncü parti sertifika otoriteşirketleri(CA)  tarafından temin edilen sertifikalar WEB tarayıcıları tarafından güvenilir sertifikalar olarak algılanır. Üçüncü parti sertifika otoritelerinin kök sertifikaları kullanıcı tarafında önceden yüklüdür. Tarayıcı ayarlarından yola çıkarak önceden yüklü kök sertifikaları görebilmekteyiz.

Sertifika Geçerliliği

Bir sunucuya yüklenen sertifika https protokolü üzerinden kullanıcı bilgisayarın WEB tarayıcısına gönderilir. Kullanıcının web tarayıcısı sertifikanın doğruluğunu denetler. Tarih ve zaman doğrulaması gerçekleştirir. Burda bir örnek vermek gerekirse, bilgisayarınızın tarih saat ayarlarını 100,200 sene geri veya ileri alın ve https kullanan bir siteye girmeyi deneyin. Bakalım ne ile karşılaşacaksınız.

Sertifika İsteği Oluşturmak

Bir sunucu üzerinde SSL sertifika isteği oluşturmak, Windows işletim sistemleri için IIS üzerinden kolayca yapılabilmektedir. IIS kullanıcı panelinden Sunucu Sertifikaları penceresinden sağ paneldeki Sertifika İsteği Oluştur sekmesinden sertifika isteği kolayca oluşturulabilir. Oluşturulan sertifika isteği, üçüncü parti bir sertifika otoritesine gönderilerek onaylı bir sertifika edinebiliriz.

SSL Sertifika İsteği
SSL Sertifika İsteği

Sertifika Yüklemesi

Edindiğimiz sertifikayı yine IIS üzerinden sunucuya Sertifika İsteğini Tamamla sekmesinden yükleyebiliriz. Sunucuya yüklenen sertifikayı bir web sitesine bağlamak için ise IIS üzerinde şu yolu izleyebiliriz.

Web Sitesine Sertifika Bağlama
Web Sitesine Sertifika Bağlama

Burada dikkat edersek bağlantı noktası(portu) olarak 443 numaralı bağlantı noktası verilmiştir. Çünkü https protokolü, 443 numaralı bağlantı noktası üzerinden iletişim kurabilmektedir.