Ana içeriğe atla

TEST ODAKLI GELİŞTİRME:TEST DRIVEN DEVELOPMENT

Yazılım geliştirmenin Analiz, Tasarım, GeliştirmeTest, Integrasyon, Bakım şeklinde giden bir döngüsü bulunmaktadır ve bu aşamaların her birinin belli bir maliyeti bulunmaktadır. Yazılımcılar doğamız gereği Tasarım ve Geliştirmeye odaklanmış durumdadır. Ancak maliyetlere baktığımızda şaşırtıcı bir şekilde aslında yazılım geliştirmede Tasarım + Geliştirme maliyetinin %12 seviyelerinde olduğunu görüyoruz. Test ve implementasyon ise bunların daha üzerinde bir maliyete sahip. Bakım ise bunların tamamının üzerinde %67lik bir maliyet kısmına sahiptir.


Peki bakımı bu kadar yüksek maliyete sahip yapan etkenler nelerdir. Zaman içerisinde değişim ihtiyacı duyulmayacak bir yazılım sistemi düşünülemez. Kullanıcı ya da müşterilerin ihtiyaçlarındaki değişimlerin sisteme yansıtılması gerekir. Ayrıca, yeni bir donanım ya da yazılım altyapısı nedeniyle sistemin çalışma koşulları değişebilir. Tabii ki testler sırasında farkedilmeyen hatalar tespit edilebilir ve giderilmesi gerekir.
Bakımı zorlaştıran bazı sebeplere göz atalım;
lKodlama yapılırken tasarım aşamasının eksikliğinden kaynaklı belli yazılım prensiplerinin gözardı edilmesiyle oluşan kodun bakım ve geliştirmesinin zorlaşması.
lKodun tek veya bir kaç kişinin elinde olacak şekilde geliştirilmesi ve belli sebeplerden dolayı bu kişilerle herhangi bir sebepten iletişim olmaması.
lKod değişiminin getireceği riskler.
lLegacy code

Legacy Code Nedir?
lArtik desteklenmeyen yazilimlara / dillere dayanan, ama hala kullanimda oldugu icin zorunlu olarak devam ettirilmesi ve bakim yapilmasi gereken kod.
lBir yazılımcıdan başka bir yazılımcının kontrolüne geçen kod.
lTesti bulunmayan kod veya Test otomasyonu bulunmayan kod.

kavramları legacy kodu işaret eder. Legacy kodlar değiştirildiği takdirde hata çıkarmaya daha meyillidir.
Test Driven Development Nedir?

Kod yazılmadan önce test senaryolarının yazılması, bu senaryolara bağlı olarak kodun yazılması temeline dayanan bir yaklaşımdır. Test driven development sürecini anlayabilmek için öncelikle Red cycle(Hatalı sonuç döndüren test), Green cycle(Başarılı sonuç döndüren test) ve Refactor(Kod temizleme) kavramlarını anlamamız gerekmektedir.
Red Cycle(Hatalı Sonuç Döndüren Test) Nedir? 
Bu durum, geliştireceğiniz uygulamaların hangi durumlarda hata vereceğini anlayıp bu durumlarda nasıl sonuçlarla karşılaşacağınızı öğrenmenizi sağlayacaktır.Örnek uygulamamız da hesaplama işlemleri var ise ve bu hesaplama işlemlerinin birindeki bölme işleminde bölenin 0 olma durumu söz konusu ise bu durumu ortaya çıkartan bir senaryoya uygun test metodu hazırlayacaksınız. Hazırladığınız testi çalıştırdığınızda olmasını beklediğiniz durumla, yani hatayla karşılaşmanız gerekmektedir. Hata oluşmadığı durumda kodda bir yanlışlık var demektir. 
Green Cycle(Başarılı Sonuç Döndüren Test) Nedir?
Başarılı sonuçlar ortaya çıkartan test durumları yazma işlemidir. Bu test sonucunda ortaya çıkan değer ile olması gereken değerin aynı olması beklenmektedir.
Refactor(Kod Temizleme) Nedir?
Testlerden olması gereken sonuçları elde ettikten sonra yazdığınız kodları daha basit, anlaşılır ve geliştirmeye açık, daha kolay düzenlenebilir bir hale getirme işlemidir. Refactoring uygulanmış bir kod daha temiz olduğu için okuması daha kolaydır.


Test Driven Development Uygulama Aşamaları;

lKodu ya da testi yazmadan önce, ne amaca yönelik bir geliştirme yapacağımızı biliyor olmamız lazım. Sonra bunu tasarlamamız gerekiyor. Aslında kodu yazmadan önce testlerini yazmanın kafada karışıklık yaratmasının sebebi geliştirmenin tasarlanmamış olmasından dolayıdır. Siz daha ortada bir kod yokken onun testini yazabiliyorsanız yapacağınız şeyi kafanızda gerçek anlamda oluşturmuşsunuz demektir.


lÖnce Hata alacak testler yazılır. Test edilen sınıf metotları ilk etapta null değerini geri verecek veya hiçbir şey yapmayacak şekilde programlanır. Tabii ki daha kodumuz olmadığı için testlerimiz ilk seferde doğal olarak hata alacaktır, alması da gerekiyor. Bu hataları çözmek için artık kodu yazmaya başlayabilirsiniz. Kodu yazarken, tamamen ihtiyaca yönelmek daha doğrudur.

lKod testleri geçecek duruma getirilmelidir. Kodumuzu yazdıktan sonra, yazmış olduğumuz testleri tekrar çalıştırıp, eğer testler başarılı olarak sonuçlanırsa, yeni testler ve yeni kodlara devam edebiliriz.

lKod refaktör(kod temizleme) işlemi yapılır. Eğer tüm testleri green(başarılı) durumuna getirebiliyorsak, yeni testler ve yeni kodlara devam edebiliriz. Test başarısız sonuçlanırsa kodumuza geri dönüp, refactoring yaparak kodumuzu iyileştiriyoruz.

Test Driven Development’in Sağladığı Avantajlar; 

lTestleri hazırlayan programcı, sistemin nasıl çalışması gerektiğini düşünmek zorundadır. Test Driven Development ile sadece gerekli sınıflar ve metotlar oluşturulur. Test Driven Development, programcının -belki ilerde kullanılır, bu metodu eklemekte fayda var- tarzı düşünmesini engeller. Böylece Test Driven Development proje maliyetini düşürür, çünkü sadece gerekli sınıf ve metotlar için zaman harcanır.

lTest Driven Development ile test kapsama alanı genişletilir. Hemen hemen her satır kod test metotları tarafından çalıştırılır.

lTestler koda olan güveni artırır. Kod üzerinde yapılan değişiklikler yan etkilere sebep verebilir. Testler olmadan oluşabilecek yan etkilerin tespiti çok zordur. 
lTestler sistemin nasıl çalıştığını gösteren dokümantasyon olarak düşünülebilir. Programcılar testleri inceleyerek, sistemin nasıl çalıştığını çok kısa bir zaman içinde öğrenme imkanı bulurlar.

lTest Driven Development tarzı programlama programcının debugger ile hata arama zamanını kısaltır yada tamamen ortadan kaldırır.

lTasarım odaklı düşünme mantığını sağlar.

lSıkıcı bir geliştirme ortamı yerine, eğlenceli ve güvenli bir ortamda motivasyonu yüksek ekiplerin oluşturulabilmesine sebep olur.

Yorumlar

Bu blogdaki popüler yayınlar

İNSAN SİNİR SİSTEMİNİN TAKLİDİ: YAPAY SİNİR AĞLARI

Yapay sinir ağları; beynin bir işlevi yerine getirme yönteminin matematiksel olarak modellenmesi ile tasarlanan sistemlerdir. Yapay sinir ağları, paralel dağıtılmış ağlar, bağlantılı ağlar, nuromorfik ağlar gibi adlarla da tanımlanmaktadır. Yapay sinir ağlarının ortaya çıkışından kısaca bahsetmem gerekirse; ilk yapay sinir ağı modeli 1943 yılında bir sinir hekimi olan Warren McCulloch ve bir matematikçi olan Walter Pitts tarafından “ Sinir Aktivitesinde Düşüncelere Ait Bir Mantıksal Hesap ( A Logical Calculus of Ideas Immanent in Nervous Activity )” başlıklı makale ile ortaya çıkarılmıştır. Öncelikle insanlarda bulunan sinir hücresinin yapısını ele alalım. Dentrites (Dendritler): Dendritler dışarıdan uyartıları alan ve hücre gövdesine ileten yapılardır. Dendritlerin çok sayıda olması, hücrelerin pek çok nörondan sinyal alma kapasitesini arttırır. Nucleus (Çekirdek): Akson boyunca işaretlerin periyodik olarak yeniden üretilmesini sağlayan yapılardır. Axon (Akson): Ak...

Mobil Uygulama Geliştirme: FLUTTER

Son zamanlarda merak sardığım konulardan biri de mobil uygulama geliştirme oldu. Küçücük bir uygulamanın bile verdiği çıktı ile mutlu olduğumu görünce mobil uygulama geliştirmekten zevk aldığımı hissettim. Araştırıp öğrenmeye başladım ve kısa sürede uygulama geliştirip ve bu uygulamayı kullanmak gerçekten güzel bir duyguydu. Şimdi sizlere geliştirdiğim basit bir Todo uygulamasından bahsedeyim. Flutter SDK ve Dart programlama dilini kullanarak çapraz platform çalışan yapılacaklar listesi uygulamasıdır. Bu uygulamada, verileri devamlılığını sağlamak için SQLite3 kullandım. Uygulama hem iOS hem de Android işletim sisteminde çalışmaktadır. Neden Flutter’ı Seçtim? ·  Flutter ile uygulamanızda yaptığınız bir değişikliği hot reload özelliği ile hızlı bir şekilde görebilirsiniz. Yani compile etmek(derlemek) için artık uzun süreler beklemeye gerek yok. Örnek vermek gerekirse Flutter ile varsayılan olarak gelen increment uygulamasını android sdk ile çalıştırmak ortalama 3 dak...

TARIM 4.0

  Tarım 4.0 nedir, nasıl ortaya çıkmıştır? Yüzyıllar boyunca, ülkeleri ve genel olarak dünyayı şekillendiren birçok sanayi devrimi olmuştur. Endüstri 4.0, çalışma biçimlerini değiştiren en son sanayi devrimidir. Otomasyon, yapay zeka (AI) ve robotiğin yükselişinin yanı sıra İnternet ve giderek daha iyi teknoloji ile bağlantılı diğer ilerlemeleri ifade eder. Tarım endüstrisi de teknoloji ve çalışma alanındaki bu önemli değişimi yaşadı ve deneyimlemeye devam ediyor. ‘Tarım 4.0’ olarak anılıyor ve çiftçiliği yenilikçi ve kendine güvenen hale getirmeyi vaat ediyor. İşte son teknolojik gelişmelerin tarımı değiştirmesinin beklendiği üç temel yol şunlardır: Yapay zeka Yapay zeka, süreçleri çok daha verimli hale getirmek için tarım endüstrisi tarafından kullanıldı. AI, çeşitli makinelere ve ekipman parçalarına uygulanarak, sprinkler ve gübre gibi farklı cihazların işlerini daha etkin bir şekilde gerçekleştirmelerine olanak tanır. Bunun iyi bir örneği, karada büyük nesneleri taşımak, çekmek...