Programlamada Yeni Eğilimler: Çevik Yazılım, Scrum ve Nesnelerin İnterneti İçin Kapsamlı Çalışma Materyali
Kaynak Bilgisi: Bu çalışma materyali, ders notları olarak sağlanan metin (kopyala-yapıştır) ve ders ses kaydı dökümünden derlenmiştir.
📚 Giriş
- yüzyılın ikinci yarısından itibaren yazılım geliştirme süreçleri sürekli bir evrim geçirmiştir. Özellikle 1990'lı yıllardan sonra iş dünyasındaki hızlı değişimler, geleneksel yazılım geliştirme yöntemlerinin yetersiz kalmasına yol açmıştır. Bu durum, değişikliklere daha hızlı adapte olabilen ve paydaş memnuniyetini artıran Çevik Yazılım Geliştirme metotlarının ortaya çıkışını tetiklemiştir. Aynı zamanda, fiziksel nesnelerin dijital dünyaya entegrasyonunu sağlayan Nesnelerin İnterneti (IoT) kavramı da günümüz teknolojisinin önemli bir parçası haline gelmiştir. Bu iki ana eğilim, modern programlama ve teknoloji dünyasının temel taşlarını oluşturmaktadır.
🎯 Öğrenme Amaçları
Bu çalışma materyalini tamamladıktan sonra aşağıdaki bilgi ve becerilere sahip olabileceksiniz:
- Çevik yazılım manifestosundaki değerleri, yazılım projesi geliştirme sürecinde uygulayabilmek.
- Çevik yazılım geliştirme pratiklerini kullanarak yazılım geliştirebilmek.
- Scrum temel bileşenlerini açıklayabilmek.
- Scrum ekibinin yaptığı etkinlikleri doğru bir biçimde uygulayabilmek.
- Scrum çıktılarını değerlendirebilmek.
- Nesnelerin İnterneti kavramını ve ilgili teknolojileri açıklayabilmek.
- Sensörler ve RFID teknolojisi ile bunların kullanım alanlarını açıklayabilmek.
- Nesnelerin İnterneti teknolojisi ağ altyapılarını karşılaştırabilmek.
- Nesnelerin İnterneti temel protokollerini özetleyebilmek.
🔑 Anahtar Kavramlar
- Proje Yönetimi
- Çevik Yazılım Geliştirme
- Scrum
- Yazılım Kalitesi
- Geri Bildirim
- Şeffaflık
- Adaptasyon
- Değer
- Artımlı Sürüm
- Sensör
- RFID
- Cihazdan Cihaza İletişim (M2M communication)
- Kablosuz İletişim
- Kablosuz İletişim Protokolleri
1️⃣ Bölüm 1: Çevik Yazılım Geliştirme ve Scrum Yöntemi
1.1. Çevik Yazılım Geliştirme Manifestosu ve Prensipleri
Çevik yazılım geliştirme, 2001 yılında yayınlanan Çevik Yazılım Geliştirme Manifestosu ile resmiyet kazanmıştır. Bu manifesto, yazılım geliştirme süreçlerinde daha etkili yollar bulmak amacıyla dört temel değer üzerine kurulmuştur:
- Süreçler ve araçlardan ziyade bireyler ve etkileşimlere değer vermek.
- Kapsamlı dokümantasyondan ziyade çalışan yazılıma değer vermek.
- Sözleşme pazarlıklarından ziyade müşteri ile işbirliğine değer vermek.
- Bir plana bağlı kalmaktan ziyade değişime karşılık vermeye değer vermek.
Bu değerler, yazılım geliştirme süreçlerinin esnekliğini ve adaptasyon yeteneğini vurgular. Manifestoya ek olarak, müşteri memnuniyetini, değişime açıklığı, düzenli çalışan yazılım teslimini ve motive olmuş bireyleri temel alan on iki çevik prensip de belirlenmiştir. Bu prensipler, çevik yaklaşımların temelini oluşturur ve sürekli iyileştirmeyi, yüz yüze iletişimi ve teknik mükemmeliyeti teşvik eder.
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 yazmadan önce beklenen davranışı test edecek test kodlarını yazar. Testler başarılı olana kadar kod güncellenir. Bu, hataları erken tespit etmeyi ve kod kalitesini artırmayı sağlar.
- Kod Yeniden Yapılandırma (Code Refactoring): 📚 Mevcut kodun davranışını değiştirmeden yapısal değişiklikler yapma faaliyetidir. Amaç, kodun okunabilirliğini, sürdürülebilirliğini ve esnekliğini artırmaktır.
- Sürekli Entegrasyon (Continuous Integration - CI): 📚 Yazılım üzerinde yapılan değişikliklerin merkezi bir depoda sık sık birleştirilmesi ve otomatik testlerden geçirilmesidir. Bu, olası hataların erken yakalanmasını ve düzeltilmesini sağlar.
- Eşli Programlama (Pair Programming): 📚 İki yazılımcının aynı iş istasyonunu kullanarak beraber çalışmasıdır. Biri kodu yazarken diğeri gözden geçirir. Bu, hata oranını düşürür, yazılım kalitesini artırır ve bilgi aktarımını kolaylaştırır.
1.3. Scrum Tanımı ve Temel Bileşenleri
Çevik yöntemler arasında en yaygın kullanılanı Scrum'dır. 📚 Scrum, insanların karışık ve adaptasyona açık problemleri ele alabilmek için en yüksek değere sahip ürünü, üretken ve yaratıcı bir şekilde geliştirmesini sağlayan bir iskelettir. Öğrenmesi kolay ancak ustalaşması zordur.
Scrum'ın temelinde şeffaflık, gözlem ve adaptasyon prensipleri yatar. Bu prensipler, sürekli iyileştirme ve oto-kontrol mekanizmalarını destekler.
Scrum'ın temel bileşenleri şunlardır:
- Scrum Ekibi
- Scrum Etkinlikleri
- Scrum Eserleri (Çıktıları)
- Kurallar
1.4. Scrum Ekibi ve Etkinlikleri
1.4.1. Scrum Ekibi
Scrum ekibi, dışarıdan komutlarla yönetilmeyen, kendi kendini organize eden ve çapraz fonksiyonlu bir yapıdır. Üç temel rolden oluşur:
- Ürün Sahibi (Product Owner): 📚 Ürünün değerinden ve geliştirme yönünden sorumludur. Ürün İş Listesi'ni oluşturur, önceliklendirir ve herkes tarafından anlaşılır olmasını sağlar. Yapılan işlerin "bitti" kabulünü yapar.
- Geliştirme Ekibi (Development Team): 📚 Her bir tekrarlama (Sprint) sonunda, ürünün sürüme çıkarılabilir bir kısmını teslim etmekten sorumludur. Kendi kendini organize eder ve işleri "Bitti Tanımı"na uygun şekilde tamamlar. İdeal olarak 3-9 kişiden oluşur.
- Scrum Uzmanı (Scrum Master): 📚 Scrum'ın doğru anlaşılmasını ve uygulanmasını sağlar. Ekibe hizmetkâr-liderlik yapar, engelleri kaldırır ve Scrum etkinliklerinin verimli geçmesini sağlar.
1.4.2. Scrum Etkinlikleri
Scrum etkinlikleri, düzenlilik sağlamak ve faydayı artırmak için zaman kısıtlı olarak yapılır:
- Sprint: 📚 Scrum'ın temel yapı taşıdır. Genellikle 1-4 hafta süren sabit bir zaman aralığıdır. Her Sprint sonunda kullanılabilir bir ürün parçası (Increment) ortaya çıkar. Sprintler arasında boşluk yoktur.
- Sprint Planlama (Sprint Planning): 📚 Sprint'in başında yapılan, tüm Scrum Ekibinin mevcut Sprint içinde ne yapılacağını planladığı etkinliktir. Sprint süresine göre (örn. 1 aylık Sprint için 8 saat) zaman kısıtı vardır. Ürün İş Listesi'nden işler seçilir ve bir Sprint Amacı belirlenir.
- Günlük Scrum (Daily Scrum): 📚 Geliştirme Ekibinin her gün aynı saatte, aynı yerde (tercihen Scrum Panosu önünde) yaptığı 15 dakikalık ayakta toplantıdır. Ekip üyeleri dün ne yaptıklarını, bugün ne yapacaklarını ve herhangi bir engelleri olup olmadığını paylaşır. Bu, şeffaflığı ve hızlı problem çözümünü sağlar.
- Sprint Değerlendirme (Sprint Review): 📚 Sprint sonunda yapılan, ekibin geliştirdiği ürünü paydaşlarla birlikte kontrol ettiği toplantıdır. En fazla 4 saat sürer. Tamamlanan ürün parçaları sunulur, geri bildirimler alınır ve Ürün İş Listesi güncellenir.
- Sprint Retrospektifi (Sprint Retrospective): 📚 Sprint'in en sonunda yapılan, ekibin süreçlerini, insan ilişkilerini ve araçlarını değerlendirip sürekli iyileştirme planları yaptığı toplantıdır. En fazla 3 saat sürer. "Kızgın-Üzgün-Mutlu" veya "Yapmaya Başlamalıyız-Bırakmalıyız-Devam Etmeliyiz" gibi yöntemler kullanılabilir.
1.5. Scrum Eserleri ve Çıktıları
Scrum eserleri, üretilen değeri temsil eder ve projenin ilerleyişini şeffaf bir şekilde gözlemleme imkanı sunar:
- Ürün İş Listesi (Product Backlog): 📚 Üründen beklenen tüm gereksinimlerin önceliğe göre sıralanmış tek bilgi kaynağıdır. Ürün Sahibi sorumludur ve liste sürekli değişir, gelişir.
- 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 detaylı 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. Her Sprint sonunda kullanılabilir ve "Bitti Tanımı"na uygun bir Ürün Parçası üretilmelidir.
- Takım Hızı (Team Velocity): 📚 Bir Sprint boyunca tamamlanan işlerin toplam puanıdır. Ekibin kapasitesini gösterir ve gelecek Sprint planlamalarında yol gösterici olur.
- Bitti Tanımı (Definition of Done - DoD): 📚 Ürün İş Listesi kalemlerinin "bitti" olarak kabul edilmesi için karşılaması gereken kriterlerdir. Tüm ekibin aynı şeyi anlaması, ürün kalitesi açısından kritik öneme sahiptir.
- Aşağı-Tüketim Grafiği (Burn-down Chart): 📊 Sprint boyunca kalan iş miktarını gösteren bir grafiktir. Günlük Scrum'da güncellenir ve Sprint gidişatının şeffaf bir şekilde gözlemlenmesini sağlar.
2️⃣ Bölüm 2: Nesnelerin İnterneti (IoT)
2.1. Giriş ve Temel Kavramlar
Nesnelerin İnterneti (IoT), ilk kez Kevin Ashton tarafından ortaya atılan ve fiziksel dünyayı radyo frekansları aracılığıyla internete bağlama fikrine dayanan bir kavramdır. Bu teknoloji, akıllı evler, akıllı şehirler ve akıllı çevre uygulamaları gibi alanlarda yaşamı kolaylaştırmayı hedefler. IoT'de "nesne" kavramı, veri üreten veya ileten her türlü cihazı kapsar; bu bir sensör, RFID etiketi veya karmaşık bir gömülü sistem olabilir.
2.2. Veri Toplama Teknolojileri
IoT'nin temelini veri toplama teknolojileri oluşturur.
2.2.1. Sensörler
📚 Sensör: Fiziksel ortamdan (ısı, hareket, nem, basınç vb.) gelen çeşitli girdileri algılayan ve bu algıyı 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, CO2, SO2, CO gaz sensörleri.
- 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 radarı, araç içi ı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 ayrıca aktif (güç kaynağı gerektiren) ve pasif (doğal enerji değişimlerini ölçen) olarak sınıflandırılır.
2.2.2. RFID Teknolojisi
📚 RFID (Radyo Frekansı Tanımlama): Nesnelere eklenen etiketleri otomatik olarak tanımlamak ve izlemek için elektromanyetik alanları kullanan bir teknolojidir.
- RFID Etiketleri: Elektronik olarak saklanan bilgileri içerir. Pasif etiketler yakındaki okuyucudan enerji alırken, aktif etiketler kendi güç kaynaklarına (pil) sahiptir.
- Elektronik Ürün Kodu (EPC): RFID etiketlerinde saklanan, ürünün benzersiz şekilde tanımlanmasını sağlayan 96 bitlik bir veri dizisidir.
- RFID Okuyucular: Etiket verilerini yakalar ve işlenmek üzere bir veri tabanı sistemine aktarır.
2.2.3. Gömülü Sistemler
📚 Gömülü Sistem: Belirli bir görevi yerine getirmek üzere tasarlanmış bir yazılımın gömülü olduğu mikrodenetleyici veya mikroişlemci tabanlı bir donanımdır. Sensörlerden gelen sinyalleri işleyerek veriye dönüştürür ve internet ağına iletir.
Temel Bileşenleri:
- Donanım: Mikroişlemci/kontrolcü, bellek, A/D çevirici, arabirim kontrolörleri (USB, WiFi, Bluetooth vb.), sensör portları.
- Uygulama Yazılımı: Donanım işlevlerini kontrol eden, genellikle kullanıcı girişine ihtiyaç duymayan yazılım.
- Gömülü Sistem İşletim Sistemi: Donanım ve kaynakları yöneten hafif işletim sistemleri (örn. LINUX veya Windows'un basitleştirilmiş versiyonları).
- Gerçek Zamanlı İşletim Sistemleri (RTOS): Hız ve kontrol gerektiren kritik uygulamalar için tasarlanmış, hassas zamanlama yeteneğine sahip işletim sistemleridir (örn. hava yastığı sistemleri).
2.3. Nesnelerin İnterneti Veri İletim Modelleri
IoT'de verilerin işlenmesi ve iletilmesi için dört temel iletişim modeli bulunmaktadır:
- Nesneden Nesneye İletişim (Device-to-Device - D2D): 📚 İki veya daha fazla nesnenin üçüncü bir uygulama servisine ihtiyaç duymadan doğrudan iletişim kurmasıdır. Bluetooth, Z-Wave, ZigBee gibi protokoller kullanılır. Farklı üreticilerin cihazları arasında uyumsuzluklar yaşanabilir.
- Nesne Bulut İletişimi (Device-to-Cloud): 📚 Her bir nesnenin doğrudan bir internet bulut hizmetine bağlanarak veri alışverişinde bulunmasıdır. Geleneksel kablolu Ethernet veya Wi-Fi teknolojileri kullanılabilir. Genellikle servis sağlayıcısı aynı zamanda nesne sağlayıcısıdır.
- Nesne-Ağ Geçidi İletişim Modeli (Device-to-Gateway): 📚 Nesne ile bulut hizmeti arasında bir Uygulama Katmanı Ağ Geçidi'nin (UKA) aracılık etmesidir. Ağ geçidi, veri ve protokol çevirisi gibi işlevler sunarak esneklik sağlar. Akıllı telefonlar bu rolü üstlenebilir.
- Arka Uç Veri Paylaşım Modeli (Backend Data Sharing): 📚 Kullanıcıların akıllı nesne verilerini farklı bulut hizmetlerinden ve kaynaklardan gelen verilerle birlikte işlemesine ve analiz etmesine olanak tanır. Geniş ölçekli projelerde (örn. akıllı şehir yangın kontrol sistemleri) veri paylaşımını destekler.
2.4. Nesnelerin İnterneti Temel Protokolleri
IoT'nin sorunsuz çalışabilmesi için çeşitli iletişim protokolleri kullanılır:
2.4.1. Ağ Katmanı Protokolleri
- IPv6: 📚 IPv4'ün 32 bitlik adres alanı sınırlamalarını aşarak 128 bitlik adres alanı sunar (2^128 cihaz). Bu, çok daha fazla cihazın internete bağlanmasına olanak tanır ve 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, TCP/IP üzerinde çalışır ve düşük kaynak tüketimiyle bilinir.
- CoAP (Constrained Application Protocol): 📚 REST modelini temel alan, M2M iletişimi için tasarlanmış hafif bir web transfer protokolüdür. Küçük başlık boyutu sayesinde düşük güçlü cihazlarda çalışır ve UDP protokolünü kullanır.
- XMPP (Extensible Messaging and Presence Protocol): 📚 Jabber tabanlı açık kaynak kodlu bir protokoldür. Anlık mesajlaşma için geliştirilmiş olsa da, 2011'den itibaren IoT altyapısına adapte edilmiştir. Güvenli iletişim ve uçtan uca şifreleme sunar.
2.4.3. Veri-Bağlantı Katmanı Protokolleri
- ZigBee: 📚 Düşük maliyetli, düşük güçlü, kablosuz, cihazdan cihaza ağlar için geliştirilmiş bir iletişim teknolojisidir. IEEE 802.15.4 standardına dayanır ve 70-100 metre menzile sahiptir. Akıllı ev ve enerji sistemlerinde yaygın kullanılır.
- Z-Wave: 📚 Ev otomasyon sistemlerinde yaygın kullanılan, radyo sinyalleriyle haberleşen bir protokoldür. 900 MHz bandında çalışması sayesinde sinyal karışımını azaltır, daha az güç tüketir ve engelleri daha kolay aşar.
- Bluetooth: 📚 Kısa mesafeli kablosuz cihazdan cihaza iletişimde en yaygın kullanılan protokoldür. Bluetooth 5 ile menzil, hız ve yayın mesaj kapasitesi artırılmıştır. Pikonet adı verilen ad hoc ağlar oluşturur ve usta-yamak (master-slave) mantığıyla çalışır.
✅ Sonuç
Özetle, çevik yazılım geliştirme ve Scrum yöntemi, yazılım projelerinde adaptasyonu, müşteri işbirliğini ve sürekli iyileştirmeyi merkeze alarak modern geliştirme süreçlerinin verimliliğini artırmıştır. Nesnelerin İnterneti ise sensörler, RFID ve gömülü sistemler aracılığıyla fiziksel dünyadan veri toplayarak, bu verileri çeşitli iletişim modelleri ve protokoller (IPv6, MQTT, CoAP, ZigBee, Z-Wave, Bluetooth) üzerinden aktarır. Bu teknolojiler, akıllı şehirler ve akıllı evler gibi uygulamalarla günlük yaşamı dönüştürme potansiyeli taşımaktadır. Nesnelerin İnterneti'nin gerçek değeri, toplanan verilerin bulut teknolojileri ve Büyük Veri analizi ile işlenerek anlamlı sonuçlar üretilmesiyle ortaya çıkar. Bu iki alan, programlama ve teknoloji dünyasındaki sürekli değişimin ve yenilikçiliğin temelini oluşturmaktadır.








