Programlamada Yeni Eğilimler: Çevik Yazılım, Scrum ve Nesnelerin İnterneti
Kaynak Bilgisi: Bu çalışma materyali, bir dersin sesli transkripti ve kopyalanmış metin kaynaklarından derlenmiştir.
📚 Giriş
Günümüz programlama dünyası, 20. yüzyılın ikinci yarısından bu yana sürekli bir evrim içindedir. Özellikle 1990'lı yıllardan itibaren iş dünyasındaki hızlı değişimler, geleneksel yazılım geliştirme yöntemlerinin yetersiz kalmasına neden olmuş ve bu durum, Çevik Yazılım Geliştirme metotlarının ortaya çıkışını tetiklemiştir. Bu metotlar, değişime daha hızlı adapte olmayı, paydaş memnuniyetini artırmayı ve yüksek doğrulukta ürünler sunmayı hedefler. Bu bağlamda, çevik yaklaşımların en popüler uygulamalarından biri olan Scrum yöntemi öne çıkmaktadır.
Diğer yandan, fiziksel dünyanın dijitalleşmesini sağlayan ve cihazlar arası iletişimi temel alan bir teknoloji trendi olan Nesnelerin İnterneti (IoT), yaşamın her alanına nüfuz ederek yeni bir dönemi başlatmıştır. Bu çalışma materyali, programlamadaki bu iki önemli eğilimi, temel prensipleri, pratikleri ve bileşenleriyle detaylı bir şekilde ele almaktadır.
1️⃣ Çevik Yazılım Geliştirme ve Scrum Yöntemi
1.1. Çevik Yazılım Manifestosu ve Prensipleri
Çevik yazılım geliştirme, 2001 yılında yayınlanan "Çevik Yazılım Geliştirme Manifestosu" ile temellerini atmıştır. Bu manifesto, yazılım geliştirme süreçlerine yeni bir bakış açısı getirerek dört temel değer üzerinde durur:
- Bireyler ve Etkileşimler ✅ süreçler ve araçlardan daha değerlidir.
- Çalışan Yazılım ✅ kapsamlı dokümantasyondan daha değerlidir.
- Müşteri ile İşbirliği ✅ sözleşme pazarlıklarından daha değerlidir.
- Değişime Karşılık Vermek ✅ bir plana bağlı kalmaktan daha değerlidir.
Bu değerleri destekleyen 12 prensip arasında müşteri memnuniyeti, değişime açıklık, çalışan yazılımın düzenli teslimi, iş süreçleri sahipleri ve yazılımcılar arasında günlük işbirliği, motive olmuş bireyler ve yüz yüze iletişim gibi unsurlar vurgulanmaktadır.
1.2. Çevik Yazılım Geliştirme Pratikleri
Çevik yazılım projelerinin başarısında kritik rol oynayan bazı pratikler şunlardır:
- Test Güdümlü Programlama (Test Driven Development - TDD): 💡 Yazılımcı, kodu yazmaya başlamadan önce koddan beklenenleri test edecek test kodlarını yazar. Testler geçene kadar kod yazmaya devam eder.
- Kod Yeniden Yapılandırma (Code Refactoring): Mevcut kodun davranışını değiştirmeden yapısal kalitesini artırma faaliyetidir. Kodun okunabilirliğini ve sürdürülebilirliğini hedefler.
- Sürekli Entegrasyon (Continuous Integration - CI): Yazılım üzerinde yapılan değişikliklerin herhangi bir bozulmaya yol açıp açmadığını erken tespit etmeyi amaçlar. Her değişiklik sonrası yazılım derlenir ve tüm testler çalıştırılır.
- Eşli Programlama (Pair Programming): İki yazılımcının aynı iş üzerinde aynı iş istasyonunu kullanarak birlikte çalışmasıdır. Hata oranını düşürür ve bilgi aktarımını kolaylaştırır.
1.3. Scrum Tanımı ve Temel Bileşenleri
Scrum, öğrenmesi kolay, esnek ve şeffaf bir çevik yazılım geliştirme çerçevesidir. Karışık ve adaptasyona açık problemleri ele alarak en yüksek değere sahip ürünü üretken ve yaratıcı bir şekilde geliştirmeyi sağlar. Scrum'ın temel bileşenleri şunlardır:
- Scrum Ekibi: Ürün Sahibi, Geliştirme Ekibi ve Scrum Uzmanı'ndan oluşur.
- Etkinlikler: Sprint, Sprint Planlama, Günlük Scrum, Sprint Değerlendirme, Sprint Retrospektifi.
- Çıktılar: Ürün İş Listesi, Sprint İş Listesi, Ürün Parçası.
Scrum, şeffaflık, gözlem ve adaptasyon ilkelerine dayanır.
1.4. Scrum Ekibi ve Rolleri
Scrum Ekibi, dışarıdan komutlarla yönetilmeyen, kendi kendini organize eden ve çapraz fonksiyonlu bir yapıdır.
- Ürün Sahibi (Product Owner): 📚 Ürünün değerinden ve geliştirilmesinden sorumludur. Yapılacak iş listesini (Ürün İş Listesi) oluşturur ve önceliklendirir. İşlerin bittiğini kabul eden kişidir.
- Geliştirme Ekibi (Development Team): Her tekrarlama (Sprint) sonunda kullanılabilir bir ürün parçası teslim etmekten sorumludur. Kendi kendini organize eder ve "Bitti" tanımına uygun işler yapar. İdeal olarak 3-9 kişiden oluşur.
- Scrum Uzmanı (Scrum Master): 📚 Scrum'ın doğru anlaşılmasını ve uygulanmasını sağlar. Ekibin önündeki engelleri kaldırır ve etkinliklerin verimli geçmesine yardımcı olur. "Hizmetkâr-lider" olarak da adlandırılır.
1.5. Scrum Etkinlikleri
Scrum etkinlikleri, düzenlilik sağlamak ve faydayı artırmak için zaman kısıtlı olarak yapılır:
- Sprint: 1️⃣ Scrum'ın temel yapı taşıdır. En fazla bir ay süren sabit bir zaman aralığıdır (genellikle 1-2 hafta). Her Sprint sonunda yayınlanabilir bir ürün parçası ortaya çıkar.
- Sprint Planlama (Sprint Planning): 2️⃣ Sprint'in başında yapılır. Tüm Scrum Ekibi, mevcut Sprint içinde yapılacak işi ve nasıl yapılacağını planlar. Ürün İş Listesi temel girdidir.
- Günlük Scrum (Daily Scrum): 3️⃣ Her gün 15 dakikalık, ayakta yapılan bir toplantıdır. Geliştirme Ekibi üyeleri dün ne yaptıklarını, bugün ne yapacaklarını ve karşılaştıkları engelleri paylaşır.
- Sprint Değerlendirme (Sprint Review): 4️⃣ Sprint sonunda yapılır. Ekip, geliştirdiği ürün parçasını paydaşlara sunar ve geri bildirim alır. Resmi bir sunumdan ziyade işbirliğine dayalı bir görüşme toplantısıdır.
- Sprint Retrospektifi (Sprint Retrospective): 5️⃣ Sprint'in en son etkinliğidir. Ekip, geride kalan Sprint'i değerlendirerek süreç, insan ilişkileri ve araçlar açısından nelerin daha iyi yapılabileceğini tartışır ve sürekli iyileştirme için aksiyon planları oluşturur.
1.6. Scrum Çıktıları
Scrum süreci boyunca oluşan ve değeri şeffaf bir biçimde gözlemlemeyi sağlayan eserler ve çıktılar:
- Ürün İş Listesi (Product Backlog): 📚 Ürünün önceliğe göre sıralanmış özellik listesidir. Ürün Sahibi sorumludur.
- Sprint İş Listesi (Sprint Backlog): 📚 Belirlenen Sprint hedefi doğrultusunda seçilmiş Ürün İş Listesi kalemleri ve bu hedefe ulaşmak için yapılacak işlerin planıdır.
- Ürün Parçası (Increment): 📚 Bir Sprint sonunda tamamlanan Ürün İş Listesi kalemleri ile daha önce bitirilmiş Sprintlerdeki Ürün Parçalarının değerlerinin toplamıdır. Kullanılabilir ve "Bitti" tanımına uygun olmalıdır.
- Takım Hızı (Team Velocity): Bir Sprint boyunca yapılan işlerin toplam puanıdır. Gelecek Sprint planlamaları için yol göstericidir.
- Bitti Tanımı (Definition of Done - DoD): 📚 Bir işin ne zaman tamamlanmış sayılacağını belirleyen kriterler bütünüdür. Tüm ekip aynı şeyi anlamalıdır ve ürün kalitesi için önemlidir.
- Aşağı-Tüketim Grafiği (Burn-down Chart): 📊 Sprint boyunca kalan iş miktarını gösteren bir grafiktir. Günlük Scrum toplantılarında güncellenir ve Sprint gidişatını şeffaf bir şekilde izlemeyi sağlar.
2️⃣ Nesnelerin İnterneti (IoT) Kavramı ve Teknolojileri
2.1. IoT'ye Giriş ve Tarihçe
Nesnelerin İnterneti (IoT) kavramı ilk kez Kevin Ashton tarafından ortaya atılmıştır. Fiziksel dünyayı radyo frekansları aracılığıyla internete bağlama fikrine dayanır. IoT, akıllı ev, akıllı şehir gibi uygulamaların temelini oluşturarak, cihazlar arası iletişimi ve veri akışını merkeze alır.
2.2. Veri Toplama Teknolojileri
IoT sistemlerinde veri toplama, çeşitli teknolojiler aracılığıyla gerçekleştirilir:
2.2.1. Sensörler
📚 Sensör: Fiziksel ortamdan (ısı, hareket, nem, basınç vb.) gelen girdileri algılayan ve elektronik sinyallere çeviren aygıttır. Sensör çeşitleri:
- Akustik ve Ses Sensörleri: Mikrofon, hidrofon.
- Çevresel Sensörler: Yağmur, kar, nem sensörleri.
- Kimyasal Sensörler: pH, gaz sensörleri (CO2, SO2, CO).
- Yaklaşma ve Varlık Bildirim Sensörleri: Park sensörleri, hareket sensörleri.
- Elektrik ve Manyetik Sensörler: Galvanometre, metal detektörü.
- Otomotiv Sensörleri: Hız ölçücü, ısı, benzin, lastik basınç sensörleri.
- Termal ve Isı Sensörleri: Termokapıl, kalorimetre.
- Optik Sensörler: Foto diyot, fototransistor.
- Mekanik Sensörler: Yükseklik sensörleri.
- Biyosensörler: Kalp atış sensörleri, kızıl ötesi sensörler.
Sensörler, enerji ihtiyaçlarına göre aktif (güç kaynağına ihtiyaç duyan) ve pasif (ortamdaki değişimlerden enerji alan) olarak sınıflandırılabilir.
2.2.2. RFID Teknolojisi
📚 RFID (Radyo Frekansı Tanımlama): Nesnelere eklenen etiketleri elektromanyetik alanlar kullanarak otomatik olarak tanımlayan ve izleyen bir teknolojidir.
- Etiketler: Elektronik olarak saklanan bilgileri içerir. Pasif (güçsüz) ve aktif (pilli) etiketler bulunur.
- Elektronik Ürün Kodu (EPC): RFID etiketlerinde saklanan, ürünün benzersiz tanımını sağlayan 96 bitlik bir veri dizisidir (Önbilgi, EPC İşletme Numarası, Ürün Tipi, Seri Numarası).
- Okuyucular: Etiketlerden veri yakalar ve işlenmek üzere bir veri tabanı sistemine aktarır.
2.2.3. Gömülü Sistemler
📚 Gömülü Sistemler: Sensörlerden gelen sinyalleri işleyerek veriye dönüştüren ve internete ileten mikrodenetleyici veya mikroişlemci tabanlı donanımlardır.
- Temel Bileşenler: Donanım (A/D çevirici, mikro işlemci/kontrolcü, bellek, arabirim kontrolörleri), Uygulama Yazılımı, Gömülü Sistem İşletim Sistemi.
- Gerçek Zamanlı İşletim Sistemleri (RTOS): Hassas zamanlama ve yüksek güvenilirlik gerektiren kritik uygulamalar için tasarlanmıştır (örn. hava yastığı sistemleri).
2.3. IoT Veri İletim Teknolojileri
IoT'de verilerin sunuculara iletimi ve işlenmesi için çeşitli ağ altyapıları kullanılır:
- Nesneden Nesneye İletişim (M2M): İki veya daha fazla nesnenin üçüncü bir uygulama servisine ihtiyaç duymadan doğrudan iletişim kurmasıdır (örn. Bluetooth, Z-Wave, ZigBee).
- Nesne Bulut İletişimi: Her nesnenin doğrudan bir internet bulut hizmetine bağlanarak veri alışverişinde bulunmasıdır.
- Nesne-Ağ Geçidi İletişim Modeli: Nesne ile bulut hizmeti arasına bir uygulama katmanı ağ geçidi (UKA) yerleştirerek esneklik ve güvenlik sağlar. Akıllı telefonlar genellikle ağ geçidi görevi görür.
- Arka Uç Veri Paylaşım Modeli: Bulut hizmetleri arasında veri paylaşımını destekleyerek farklı kaynaklardan gelen verilerin birleştirilmesini ve analiz edilmesini mümkün kılar (örn. akıllı şehir yangın kontrol sistemleri).
2.4. IoT Temel Protokolleri
Farklı cihazların sorunsuz iletişim kurabilmesi için çeşitli protokoller kullanılır:
2.4.1. Ağ Katmanı Protokolleri
- IPv6: IPv4'ün 32 bitlik adres sınırlamasını (yaklaşık 4.5 milyar cihaz) aşarak 128 bitlik adres alanı (2^128 = 3.4E38 cihaz) sunar. IoT cihazlarının artan sayısı için kritik öneme sahiptir. IPSec desteği ile güvenlik sağlar.
2.4.2. Uygulama Katmanı Protokolleri
- MQTT (Message Queuing Telemetry Transport): 📚 IoT uygulamaları için tasarlanmış hafif bir uygulama katmanı protokolüdür. Yayınlama/abone mantığını kullanır ve TCP/IP üzerinde çalışır. Kaynak tüketiminde ekonomiktir.
- CoAP (Constrained Application Protocol): 📚 REST modelini temel alan, düşük güç ve kaynak tüketimi için optimize edilmiş bir web transfer protokolüdür. UDP üzerinde çalışır, küçük başlık boyutu ve düğüm keşfetme yeteneği vardır.
- XMPP (Extensible Messaging and Presence Protocol): 📚 Jabber tabanlı açık kaynak kodlu bir protokoldür. Anlık mesajlaşma, çoklu sohbet ve görüntülü görüşme için geliştirilmiştir. Güvenli iletişim altyapısı sunar.
2.4.3. Veri-Bağlantı Katmanı Protokolleri
- ZigBee: Düşük maliyetli, düşük güçlü, kablosuz, cihazdan cihaza ağlar için açık bir küresel standarttır. IEEE 802.15.4 fiziksel radyo spesifikasyonunda çalışır. Koordinatör, yönlendirici ve uç cihazlardan oluşur.
- Z-Wave: Ev otomasyon sistemlerinde yaygın olarak kullanılan, radyo sinyalleriyle haberleşen bir protokoldür. Genellikle 900 MHz bandında çalışır, bu da daha az parazit, daha az güç tüketimi ve daha iyi duvar penetrasyonu sağlar.
- Bluetooth: Kısa mesafeli kablosuz cihazdan cihaza iletişimde en yaygın kullanılan teknolojidir. Pikonet (usta-yamak) yapısıyla çalışır. Bluetooth 5 ile menzil, hız ve yayın mesaj kapasitesi artırılmıştır.
💡 Sonuç
Çevik yazılım geliştirme ve Scrum yöntemi, yazılım projelerinde değişime hızlı adaptasyon, müşteri işbirliği ve sürekli değer teslimi sağlayarak başarıyı artırmaktadır. Nesnelerin İnterneti ise sensörler, RFID ve gömülü sistemler aracılığıyla fiziksel dünyadan veri toplayarak, çeşitli iletişim modelleri ve protokoller vasıtasıyla bu verileri işlenebilir hale getirmektedir. Bu iki alan, günümüz programlama eğilimlerinin temelini oluşturmakta ve gelecekteki teknolojik gelişmeler için sağlam bir zemin sunmaktadır. Büyük Veri ve bulut teknolojileriyle entegre olarak, Nesnelerin İnterneti'nin sağladığı verilerin anlamlı sonuçlara dönüştürülmesi, akıllı şehirlerden endüstriyel otomasyona kadar geniş bir yelpazede yenilikçi çözümlerin kapısını aralamaktadır.








