Mühendislik Pratikleri

Agile kavramı, yönetimsel yaklaşımları ile birlikte mühendislik pratiklerini de içeren bir bütündür. Yazılım sektörüne yön vermiş olan önemli projelerde uygulanmış ve olgunlaşmış Test Driven Development (TDD)Continuous IntegrationRefactoring ve Test Automation gibi mühendislik pratikleri, Agile yaklaşımlar uygulanan projelerde verimliliğin ve sürekliliğin sağlanması açısından büyük önem taşımaktadır.

Test Driven Development
TDD, kod yazılmadan önce test senaryolarının yazılması, bu senaryolara bağlı olarak kodun yazılması ve refactor edilmesi tekniğidir. TDD yaklaşımıyla, yazılması planlanan kodun test senaryoları, sürekli olarak koşturulabilir ve bu sayede programın daha az hata ile geliştirilmesi sağlanabilir. Ayrıca, alışıla gelmiş yazılım geliştirme yöntemlerindeki yazılım tasarımı problemi de, isteği karşılayacak sınıfların yazılması zorunluluğu ile büyük ölçüde aşılmaktadır. Bu da geliştirilen yazılımın kalitesini arttırmakla kalmaz, değişim yönetimini ve tutarlılığı maksimize ederek yazılım maliyetlerini düşünüldüğünden çok daha aşağıya çeker.Kısaca TDD’nin getirileri şöyle sıralanabilir;

– kod güvenilirliği artar,
– kod kalitesi yükselir,
– kod anlaşılabilirliği artar,
– hata oranları düşer,
– kod her an sürüme hazır hale gelir,
– değişikliklerin yönetimi kolaylaşır.TDD_DIAGRAM (1)

Continuous Integration
Continuous Integration (Sürekli Entegrasyon), bir yazılım takımının ürettiği kodun sürekli ve sorunsuz olarak sisteme entegre edilmesini amaçlayan bir sistemdir. Bu entegrasyon süreci, çeşitli araçlar ile otomatik hale getirilmekte ve belirlenen sürelerde çeşitli scriptler ve işlemler çalıştırılarak kodun sürüme uygunluğu sürekli olarak test edilmektedir. Böylece entegrasyon hataları mümkün olan en kısa sürede bulanabilmektedir. Ayrıca, repository de bulunan kodların belirli aralıklarla test senaryolarının koşturulması ile sistem tutarlılığı sağlanmakta, geliştirilen deployment otomasyonu ile deployment süreçlerinde, insan faktöründen kaynaklanabilecek hatalar en aza indirgenmektedir.

Sürekli Entegrasyonun bazı yararları şu şekilde de sıralanabilir:

– hatalar hızlı bir şekilde bulunur ve çözüm süreci başlar,
– yazılım ürününün durumunun metriklerle ölçülmesi kolaylaşır,
– varsayımlar üzerinden değil, somut yazılım üzerinden test yapılması sağlanır,
– kişiler tarafından tekrarlanmak zorunda olan süreçleri kısaltır ve otomatik hale getirir,
– her an deploy edilebilen yazılım çıkarılabilinmesine olanak verir,
– projelerde saydamlık artar,
– yazılımcılara ve ürüne güven aşılanmış olur.